Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования Пермский государственный технический университет
Работа на тему:
«Проектирование программного обеспечения банкомата»
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
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
//если денег на счете не меньше, чем требует клиент
ifSelf.Sum >= Summthen
//то уменьшить сумму счета
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;
//получить информацию о клиенте
procedureTKlient.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();//получаемкодкартыклиента
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;