Вначале подключим скомпилированную в прошлой теме библиотеку классов. Для этого в главном проекте BankApplication нажмем на пункт Dependences правой кнопкой мыши и в появившемся меню выберем пункт Add Project Reference...:
Затем в появившемся окне отметим пункт BankLibrary, который будет представлять нашу библиотеку классов, и нажмем на OK.
После этого в проект будет добавлена ссылка на библиотеку. И если мы раскроем узел Reference, то сможем увидеть ее среди подключенных библиотек.
Теперь изменим файл Program.cs в главном проекте следующим образом:
using BankLibrary; namespace BankApplication { class Program { static void Main(string[] args) { Bank<Account> bank = new Bank<Account>("ЮнитБанк"); bool alive = true; while (alive) { Console.ForegroundColor = ConsoleColor.DarkGreen; // выводим список команд зеленым цветом Console.WriteLine("1. Открыть счет \t 2. Вывести средства \t 3. Добавить на счет"); Console.WriteLine("4. Закрыть счет \t 5. Пропустить день \t 6. Выйти из программы"); Console.WriteLine("Введите номер пункта:"); Console.ResetColor(); try { int command = Convert.ToInt32(Console.ReadLine()); switch (command) { case 1: OpenAccount(bank); break; case 2: Withdraw(bank); break; case 3: Put(bank); break; case 4: CloseAccount(bank); break; case 5: break; case 6: alive = false; continue; } bank.CalculatePercentage(); } catch (Exception ex) { // выводим сообщение об ошибке красным цветом Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.Message); Console.ResetColor(); } } } private static void OpenAccount(Bank<Account> bank) { Console.WriteLine("Укажите сумму для создания счета:"); decimal sum = Convert.ToDecimal(Console.ReadLine()); Console.WriteLine("Выберите тип счета: 1. До востребования 2. Депозит"); AccountType accountType; int type = Convert.ToInt32(Console.ReadLine()); if (type == 2) accountType = AccountType.Deposit; else accountType = AccountType.Ordinary; bank.Open(accountType, sum, AddSumHandler, // обработчик добавления средств на счет WithdrawSumHandler, // обработчик вывода средств (o, e) => Console.WriteLine(e.Message), // обработчик начислений процентов в виде лямбда-выражения CloseAccountHandler, // обработчик закрытия счета OpenAccountHandler); // обработчик открытия счета } private static void Withdraw(Bank<Account> bank) { Console.WriteLine("Укажите сумму для вывода со счета:"); decimal sum = Convert.ToDecimal(Console.ReadLine()); Console.WriteLine("Введите id счета:"); int id = Convert.ToInt32(Console.ReadLine()); bank.Withdraw(sum, id); } private static void Put(Bank<Account> bank) { Console.WriteLine("Укажите сумму, чтобы положить на счет:"); decimal sum = Convert.ToDecimal(Console.ReadLine()); Console.WriteLine("Введите Id счета:"); int id = Convert.ToInt32(Console.ReadLine()); bank.Put(sum, id); } private static void CloseAccount(Bank<Account> bank) { Console.WriteLine("Введите id счета, который надо закрыть:"); int id = Convert.ToInt32(Console.ReadLine()); bank.Close(id); } // обработчики событий класса Account // обработчик открытия счета private static void OpenAccountHandler(object sender, AccountEventArgs e) { Console.WriteLine(e.Message); } // обработчик добавления денег на счет private static void AddSumHandler(object sender, AccountEventArgs e) { Console.WriteLine(e.Message); } // обработчик вывода средств private static void WithdrawSumHandler(object sender, AccountEventArgs e) { Console.WriteLine(e.Message); if (e.Sum > 0) Console.WriteLine("Идем тратить деньги"); } // обработчик закрытия счета private static void CloseAccountHandler(object sender, AccountEventArgs e) { Console.WriteLine(e.Message); } } }
В начале файла подключается библиотека:
using BankLibrary;
В методе Main создается объект Bank, который типизирован классом Account и через который мы будем взаимодействовать с объектами Account.
В цикле while
выводится список команд, который должен выбрать пользователь. После выбора одной из них в конструкции switch
выполняется соответствующая команда. Каждая команда представляет получения ввода от пользователя, его преобразование с помощью
класса Convert и передача аргументов методам объекта Bank.
Каждая итерация цикла while соответствует одном дню, поэтому в конце цикла вызывается метод bank.CalculatePercentage()
,
который увеличивает у объектов Account счетчик дней и производит начисление процентов.
В итоге получится следующая программа, имитирующая работу банка и взаимодействие с пользователем: