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