Проектирование программного обеспечения банкомата
Федеральное
агентство по образованию
Государственное
образовательное учреждение высшего профессионального образования Пермский
государственный технический университет
Работа на тему:
«Проектирование программного
обеспечения банкомата»
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
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
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;
//проверить
подлинность
var
KlientCode:
integer;
KlientPass:
integer;
begin
Result
:= false;
KlientCode
:= Manager.GetCode();//получаем код
карты
клиента
KlientPass :=
Manager.GetPassword();//получаем пароль, введенный клиентом
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); //переведем число в строку
Form1.PutMessage(St);
//выведем
на
экран
end;
end;