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

Федеральное агентство по образованию

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

Работа на тему:

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

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;


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