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