Анализ теоретических аспектов функциональной деятельности современного банкомата и его сценариев. Разработка программного обеспечения работы банкомата, включающее спецификацию вариантов использования "Аутентификация", "Запрос баланса" и "Снять деньги".
Аннотация к работе
Основной сценарий: Предусловия: Клиент вставил карточку в банкомат и выбрал действие «Снять деньги». 2.3Если эта сумма в наличие на счете, то 2.3.1Сумма списывается со счета.
Введение
Перед проектированием системы управления банкоматом, важную роль сыграло обдумывание всех сценариев его использования. В современной жизни, банкоматы все больше, и больше преобразуются в функциональном смысле. Сейчас доступны множество сервисов: платеж за коммунальные услуги, пополнение мобильного счета, перевод средств на другой счет и многое другое, но я остановился на 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 function WITHDRAWMONEY(Summ: real): real; //снять деньги function GETBALANCE(): real; //получить баланс счета end;
TKLIENT = class //класс Клиент private
Code: integer; //код клиента
Password: integer; //пароль клиента
Acct: TACCOUNT; //счет клиента public function GETCODE():integer; //получить код клиента function GETPASSWORD(): real; //получить пароль клиента function GETACCOUNT(): TACCOUNT; //получить счет клиента procedure Get(Code: integer); //получить информацию о клиенте из платежной системы end;
TMANAGER = class //класс управляющий private function Authenticate(out TRUEKLIENT: TKLIENT): boolean; //проверить подлинность public function GETCODE():integer; //получить код карты function GETPASSWORD():integer; //получить пароль клиента function GETSUM(): real; //получить запрашиваемую сумму procedure WITHDRAWMONEY(); //снять деньги procedure GETBALANCE(); //получить баланс счета end;
//снять деньги function TACCOUNT.WITHDRAWMONEY(Summ: real): real;
begin
//если денег на счете не меньше, чем требует клиент if Self.Sum >= Summ then
//то уменьшить сумму счета
Self.Sum := Self.Sum - Summ;
//вернуть остаток
Result := Self.Sum;
end;
//получить баланс счета function TACCOUNT.GETBALANCE(): real;
begin
//вернуть сумму счета
Result := Self.Sum;
end;
//получить код клиента function TKLIENT.GETCODE():integer;
begin
//вернуть код клиента
Result := Self.Code;
end;
//получить пароль клиента function TKLIENT.GETPASSWORD(): real;
begin
//вернуть пароль клиента
Result := Self.Password;
end;
//получить счет клиента function TKLIENT.GETACCOUNT(): TACCOUNT;
begin
//вернуть счет клиента
Result := Self.Acct;
end;
//получить информацию о клиенте procedure TKLIENT.Get(Code: integer);
begin
//Здесь должен выполняться запрос к платежной системе
//примерно такие данные должны возвращаться: Self.Code := 12345; //код карты клиента
Self.Password := 54321; //пароль
Self.Acct.Code := 12345; //код счета
Self.Acct.Sum := 111.50; //сумма денег на счете end;
//получить код карты function TMANAGER.GETCODE():integer;
begin
//Здесь информация должна считываться с банковской карты
Result := 12345;
end;
//получить пароль клиента function TMANAGER.GETPASSWORD():integer;
begin
//Здесь информация должна считываться с терминала
Result := 12345;
end;
//получить запрашиваемую сумму function TMANAGER.GETSUM(): real;
begin
//Здесь информация должна считываться с терминала
Result := 100;
end;
//проверить подлинность function TMANAGER.Authenticate(out TRUEKLIENT: TKLIENT): boolean;
var
KLIENTCODE: integer;
KLIENTPASS: integer;
begin
Result := false;
KLIENTCODE := Manager.GETCODE();//получаем код карты клиента
TRUEKLIENT.Get(KLIENTCODE);//получаем данные клиента из платежной системы if TRUEKLIENT.Password = KLIENTPASS then//если пароли совпадают
Result := true;
end;
//снять деньги
Procedure TMANAGER.WITHDRAWMONEY();
var
TRUEKLIENT: TKLIENT; //клиент
Summ : real; //запрашиваемая клиентом сумма
Rest1, Rest2 : real; //остаток на счете до и после операции
St : string; //текст сообщения begin
TRUEKLIENT := TKLIENT.Create; //конструктор класса клиент if Manager.Authenticate(TRUEKLIENT) then //если клиент аутентифицирован begin
Summ := Manager.GETSUM(); //получаем сумму, запрашиваемую клиентом if Summ 0 then //если введена не 0-вая сумма begin
Rest1 := TRUEKLIENT.Acct.GETBALANCE; //получим остаток до снятия денег
Rest2 := TRUEKLIENT.Acct.WITHDRAWMONEY(Summ); //получим остаток после снятия денег if Rest2 Rest1 then exit //если деньги были сняты - выходим из процедуры else St := "Операция не может быть выполнена";
end else St := "Введите сумму";
Form1.PUTMESSAGE(St); //выдать сообщение end;
end;
//получить баланс счета
Procedure TMANAGER.GETBALANCE();
var
TRUEKLIENT: TKLIENT; //клиент
Summ : real; //запрашиваемая клиентом сумма
St : string; //текст сообщения begin
TRUEKLIENT := TKLIENT.Create; //конструктор класса клиент if Manager.Authenticate(TRUEKLIENT) then //если клиент аутентифицирован begin
Summ := TRUEKLIENT.Acct.GETBALANCE; //получим остаток на счете
St := "Остаток средств на вашем счете: " FLOATTOSTR(Summ); //переведем число в строку