Проектирование программного обеспечения банкомата

Федеральноеагентство по образованию
Государственноеобразовательное учреждение высшего профессионального образования Пермскийгосударственный технический университет

Работа на тему:
«Проектирование программногообеспечения банкомата»
2010

 
Введение
Перед проектированиемсистемы управления банкоматом, важную роль сыграло обдумывание всех сценариевего использования. В современной жизни, банкоматы все больше, и большепреобразуются в функциональном смысле. Сейчас доступны множество сервисов:платеж за коммунальные услуги, пополнение мобильного счета, перевод средств надругой счет и многое другое, но я остановился на 2-х основных функцияхбанкомата – снятие наличности и запрос баланса. Так же невозможна работасистемы без аутентификации клиента, т.к. этаких пользователей большоемножество. Так и получилось, что система делится на три основных блока.

Спецификацияварианта использования «Аутентификация»
 
Основноедействующее лицо:Клиент.
Краткое описание: Перед выполнением любого действияклиент должен быть аутентифицирован.
Основной сценарий:
Предусловия: Запущен сценарий «Снятьденьги» или сценарий «Показать баланс».
1. Система запрашиваетпароль.
2. Клиент вводитпароль.
3. Если парольверен, то происходит возврат в запущенный ранее сценарий.
4. Если пароль неверен, то
4.1Если количество вводов неверногопароля меньше 4, то
4.1.1Выдать предупреждение онеправильном пароле.
4.1.2Вернуться к началу сценария.
4.2Иначе:
4.2.1Выдать сообщение о блокировкекарты.
4.2.2Заблокировать карту.
Постусловия: Нет.
Спецификацияварианта использования «Снять деньги»
 
Основноедействующее лицо:Клиент.
Краткое описание: Клиент запрашивает некоторую суммуденег. Если на его счету есть необходимая сумма, то система выдает ее.
Основной сценарий:
Предусловия: Клиент вставил карточкув банкомат и выбрал действие «Снять деньги».
1. Переход кподчиненному сценарию «Аутентификация».
2. Если аутентификацияпрошла успешно, то
2.1Система запрашивает требуемуюсумму.
2.2Клиент вводит сумму.
2.3Если эта сумма в наличие на счете,то
2.3.1Сумма списывается со счета.
2.3.1Выдаются деньги.
2.4Иначе, выдается сообщение оневозможности операции.
Постусловия: Клиент переходит к выбору действия.
Спецификацияварианта использования «Показать баланс»
 
Основноедействующее лицо:Клиент.
Краткое описание: Клиент запрашивает баланс своегосчета.
Основной сценарий:
Предусловия: Клиент вставил карточкув банкомат и выбрал действие «Показать баланс».
1. Переход кподчиненному сценарию «Аутентификация».
2. Еслиаутентификация прошла успешно, то система показывает баланс счета клиента.
Постусловия: Клиент переходит к выбору действия.
 
Текстпрограммы
 
TAccount= class //класс Счет
private
Code:integer; //код счета
Sum:real; //количество денег на счете
public
functionWithdrawMoney(Summ: real): real; //снятьденьги
functionGetBalance(): real; //получить баланссчета
end;
TKlient= class //класс Клиент
private
Code:integer; //код клиента
Password:integer; //пароль клиента
Acct:TAccount; //счет клиента
public
functionGetCode():integer; //получить кодклиента
function GetPassword():real; //получить пароль клиента
functionGetAccount(): TAccount; //получитьсчетклиента
procedure Get(Code:integer); //получить информацию о клиенте из платежной системы
end;
TManager= class //класс управляющий
private
functionAuthenticate(out TrueKlient: TKlient): boolean; //проверитьподлинность
public
functionGetCode():integer; //получить кодкарты
functionGetPassword():integer; //получить парольклиента
function GetSum():real; //получить запрашиваемую сумму
procedureWithdrawMoney(); //снять деньги
procedureGetBalance(); //получить баланссчета
end;
//снятьденьги
functionTAccount.WithdrawMoney(Summ: real): real;
begin
//если денег на счетене меньше, чем требует клиент
ifSelf.Sum>= Summthen
//то уменьшить суммусчета
Self.Sum:= Self.Sum — Summ;
//вернуть остаток
Result := Self.Sum;
end;
//получитьбаланссчета
functionTAccount.GetBalance(): real;
begin
//вернутьсуммусчета
Result:= Self.Sum;
end;
//получитькодклиента
functionTKlient.GetCode():integer;
begin
//вернуть код клиента
Result := Self.Code;
end;
//получить парольклиента
functionTKlient.GetPassword(): real;
begin
//вернуть парольклиента
Result :=Self.Password;
end;
//получитьсчетклиента
functionTKlient.GetAccount(): TAccount;
begin
//вернуть счет клиента
Result := Self.Acct;
end;
//получить информацию оклиенте
procedureTKlient.Get(Code:integer);
begin
//Здесь долженвыполняться запрос к платежной системе
//примерно такие данныедолжны возвращаться:
Self.Code := 12345;//код карты клиента
Self.Password := 54321;//пароль
Self.Acct.Code :=12345; //код счета
Self.Acct.Sum :=111.50; //сумма денег на счете
end;
//получить код карты
functionTManager.GetCode():integer;
begin
//Здесь информациядолжна считываться с банковской карты
Result := 12345;
end;
//получить парольклиента
functionTManager.GetPassword():integer;
begin
//Здесь информациядолжна считываться с терминала
Result:= 12345;
end;
//получитьзапрашиваемуюсумму
functionTManager.GetSum(): real;
begin
//Здесь информациядолжна считываться с терминала
Result:= 100;
end;
//проверитьподлинность
functionTManager.Authenticate(out TrueKlient: TKlient): boolean;
var
KlientCode:integer;
KlientPass:integer;
begin
Result:= false;
KlientCode:= Manager.GetCode();//получаем кодкартыклиента
KlientPass :=Manager.GetPassword();//получаем пароль, введенный клиентом
TrueKlient.Get(KlientCode);//получаемданные клиента из платежной системы
ifTrueKlient.Password = KlientPass then//еслипаролисовпадают
Result:= true;
end;
//снятьденьги
ProcedureTManager.WithdrawMoney();
var
TrueKlient:TKlient; //клиент
Summ: real; //запрашиваемая клиентомсумма
Rest1, Rest2: real;//остаток на счете до и после операции
St: string; //текстсообщения
begin
TrueKlient :=TKlient.Create; //конструктор класса клиент
ifManager.Authenticate(TrueKlient) then //есликлиентаутентифицирован
begin
Summ :=Manager.GetSum(); //получаем сумму, запрашиваемую клиентом
if Summ 0 then//если введена не 0-вая сумма
begin
Rest1 :=TrueKlient.Acct.GetBalance; //получим остаток до снятия денег
Rest2 :=TrueKlient.Acct.WithdrawMoney(Summ); //получим остаток после снятия денег
if Rest2 Rest1then exit //если деньги были сняты — выходим из процедуры
else St := ‘Операция неможет быть выполнена’;
end
elseSt := ‘Введитесумму’;
Form1.PutMessage(St);//выдатьсообщение
end;
end;
//получитьбаланссчета
ProcedureTManager.GetBalance();
var
TrueKlient:TKlient; //клиент
Summ: real; //запрашиваемая клиентомсумма
St: string; //текст сообщения
begin
TrueKlient:= TKlient.Create; //конструкторклассаклиент
ifManager.Authenticate(TrueKlient) then //есликлиентаутентифицирован
begin
Summ:= TrueKlient.Acct.GetBalance; //получимостатокнасчете
St := ‘Остаток средствна вашем счете: ‘ + FloatToStr(Summ); //переведем число в строку
Form1.PutMessage(St);//выведемнаэкран
end;
end;