Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая осн1 .doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
360.45 Кб
Скачать

Глава 2. Диаграмма uml.

Рис. 4. Диаграмма классов

Покажем это на примере выполнения одной банковской операции «Положить деньги на счет», то есть на примере реализации одного пункта меню #1 (строка 200 кода):

1) предполагаем, что это меню уже отображено на консоли (строки 200 - 208);

2) после последовательного нажатия на клавишу с буквой “D”и клавишу “Enter” будет выполнена 166-я строка программного кода (см. также 5-ю строку на диаграмме класса BankSimulation);

3) в соответствии с этим будет послано сообщение-запрос методу Deposit(), код которого расположен в строках 071 – 082. В строке 071 приведен комментарий // Положить деньги на счет – # 1.1, где первая цифра “1” со-

ответствует пункту меню #1 («Положить деньги на счет»), а вторая цифра “1” – первому сообщению, направленному методу Deposit() (см. также 5-ю строку на диаграмме класса Bank);

4) метод Deposit() выполняет запрос, и клиент банка вводит значение суммы денег, которые он хочет положить на свой счет. Далее посылается сообщение (из строки 079) специальному методу-мутатору Deposit(decimal amount), код которого расположен в строках 040 – 043. В соответствии с этим мето-

дом устанавливается новое значение баланса счета обслуживаемого клиента.

В строке 040 приведен комментарий // Определение баланса (положить деньги на счет) и выше указан номер // # 1.1.1, где смысл первых двух цифр пояснен в пункте 3). Третья цифра “1” соответствует первому сообщению из метода Deposit() – оно направлено методу-мутатору Deposit(decimal amount) (см. также 5-ю строку на диаграмме класса Account);

5) после вычисления значения баланса продолжается обслуживание клиента, которое реализовано в методе Deposit(). Посылается сообщение (из строки 081) специальному методу-аксессору GetBalance(), код которого расположен в строках 050 – 053. В соответствии с этим методом новое значение баланса счета сообщается обслуживаемому клиенту. В строке 050 приведен комментарий // Получение значения баланса – # 1.1.2, где смысл первых

двух цифр пояснен в пункте 3), а третья цифра “2” соответствует второму сообщению из метода Deposit() – оно направлено методу-аксессору GetBalance() (см. также 11-ю строку на диаграмме класса Account).

На этом банковская операция «Положить деньги на счет» завершена. Анализируя пункты 3) и 4) соответственно нетрудно сообразить, почему на диаграмме линия с номером 1.1.1 имеет одну стрелку, а линия с номером

1.1.2 - две стрелки.

Глава 3. Основные моменты программы. Описание процедур.

Изображение работы программы.

Рис. 5. Вкладка «Начальные данные»

Рис. 6. Вкладка «Работа со счетами»

Рис. 7. Окно «О программе»

Программе"ассов000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Описание классов.

Два класса программы — Account и Bank , а также третий класс BankSimulation . Этот класс содержит метод Main(), который объединяет различные части программы и обрабатывает пользовательский ввод.

Согласно спецификациям программы, объект Account должен хранить следующую информацию:

a) свой баланс

b) свою текущую процентную ставку

c) сумму начисленных процентов

Следовательно, класс Account должен содержать переменные экземпляра :

a) private decimal balance;

b) private decimal currentlnterestRate;

c) private decimal totallnterestPaid;

Класс Bank содержит коллекцию счетов. Вся необходимая ему информация содержится в объектах этой коллекции. Следовательно, классу Bank требуется единственная переменная экземпляра — массив счетов. Ее объявление выглядит так:

private Account [ ] accounts;

Классу BankSintulation также требуется только одна переменная экземпляра — объект Bank.

Класс Account. Все переменные экземпляра должны быть инициализированы во время создания объекта, которому они принадлежат. Для этого предназначен конструктор в строках 12—17. (Конструктором является метод с тем же именем, что и класс, в котором он находится.) Он выполняется на этапе создания нового объекта Account. В данном примере конструктор инициализирует все переменные экземпляра нулевыми значениями.

Все переменные экземпляра Account объявлены как private, чтобы предотвратить доступ к ним извне объекта. Как следствие, для их чтения и установки значения необходимо определить специальные методы, называемые "аксессор" и "мутатор", соответственно. Для переменной currentlnterestRate определены два метода: мутатор SetlnterestRate (строки 19—22) и аксессор GetlnterestRate (строки 24—27). Значение переменной balance изменяется с помощью мутаторов Deposit (строки 40—43) и Withdraw (строки 45—48), а возвращается — аксессором GetBalance (строки 50-53). Для переменной totallnterestPaid мутатором является Updatelnterest (строки 29-33), а аксессором — GetTotallnterestPaid (строки 35-38).

Класс Bank. При создании нового объекта Bank нужно создать и объекты Account, которыми он будет управлять, и присвоить ссылки на них элементам массива accounts. Эту задачу можно было бы выполнить стандартным методом, вызвав его после создания объекта Bank. Но, поскольку эта процедура должна производиться для любого нового объекта Bank, ее может выполнить конструктор класса (строки 60-69). При создании нового объекта Bank (строка 158), у пользователя автоматически запрашивается количество счетов в этом банке. Следует обратить внимание, что заданное число счетов не может быть изменено во время исполнения программы.

После этого объекты счетов в массиве accounts готовы к доступу. Все методы класса Bank предназначены для изменения или чтения информации одного счета или всей коллекции счетов и, следовательно, зависят от методов класса Account.

Перечисленные ниже методы работают похоже: все они позволяют пользователю ввести номер нужного счета и выполнить операции над ним.

a) Deposit (строки 71-82)

b) Withdraw (строки 84-95)

c) SetlnterestRate (строки 97-106)

Следующие четыре метода проходят по всей коллекции счетов либо для обновления конкретной переменной экземпляра в каждом объекте Account, либо для вывода информации:

a) PrintAllInterestRates (строки 108-116)

b) PrintAlIBalances (строки 119-127)

c) PrintTotallnterestPaidAllAccounts (строки 129-137)

d) UpdatelnterestAllAccounts (строки 139-147)

Класс BankSimulation. Этот класс является контейнером для объекта Bank и методов Main() и PrintMenu. Последний содержит цикл do-while и оператор switch, обрабатывающие команды пользователя. Следует отметить, что метод Main() в такой схеме достаточно прост. Все основные задачи переданы другим методам, находящимся либо внутри класса BankSimulation(метод PrintMenu), либо внутри других объектов (Bank и Account).

Разработка внутренних методов:

Методы данной программы не содержат каких-либо сложных алгоритмов, поэтому здесь упоминаются только два незначительных вопроса (связанных с классом Bank):

a) Элемент accounts[0] содержит ссылку на объект Account. Метод этого объекта вызывается посредством стандартного синтаксиса:

accounts[0].GetBalance()

б) Для пользователя первый счет имеет индекс 1 (строка 208). Поэтому вводимые или выдаваемые пользователю индексы счетов следует корректировать соответствующим образом. Например, в методе Deposit (строки 71-82) пользователь вводит номер счета, на который нужно перевести средства. Он присваивается переменной accountNumber, но так как массив индексируется с нуля, в строках 79 и 81 из нее вычитается 1.