Повторение — Менеджер банковских счетов
Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 18 из 70.
Задание
ЛегкоДавайте создадим полноценную систему управления банковскими счетами, которая объединит все, что вы узнали об архитектуре классов. Вы создадите класс BankAccount, который правильно разграничивает данные экземпляра (уникальные для каждого счета) и статические данные (общие для всех счетов), используя при этом валидацию для поддержания счетов в корректном состоянии.
Для организации кода вы создадите два файла:
BankAccount.cs: Определите классBankAccountв пространстве именBanking. Ваш счет должен включать:- Поле
constс именемMinimumBalance, установленное в100— минимальный баланс, который должны поддерживать все счета. - Статическое поле
InterestRate(decimal), которое начинается с0.03m— общее для всех счетов. - Статическое поле
TotalAccounts(int), которое отслеживает количество существующих счетов. - Поле
readonlyс именемAccountNumber(string) — устанавливается один раз при создании и никогда не меняется. - Закрытое резервное поле
_ownerNameсо свойствомOwnerName, которое обрезает пробелы (trim) при установке значения. - Закрытое резервное поле
_balanceсо свойствомBalance, которое предотвращает падение баланса нижеMinimumBalance(если кто-то попытается установить его ниже, оставьте его равнымMinimumBalance). - Конструктор, который принимает номер счета, имя владельца и начальный баланс, и увеличивает
TotalAccounts. - Статический метод
SetInterestRate(decimal rate)для обновления общей процентной ставки. - Метод
CalculateInterest(), который возвращает баланс, умноженный на процентную ставку.
- Поле
Program.cs: В основном файле создайте два банковских счета, используя входные значения, обновите процентную ставку и выведите информацию о счетах вместе с общими данными банка.
Вы получите семь входных значений:
- Номер первого счета
- Имя первого владельца
- Начальный баланс первого счета
- Номер второго счета
- Имя второго владельца
- Начальный баланс второго счета
- Новая процентная ставка (в виде десятичного числа, например
0.05)
Выведите результат в следующем формате:
--- Bank Summary ---
Interest Rate: {InterestRate}
Minimum Balance: {MinimumBalance}
Total Accounts: {TotalAccounts}
Account: {AccountNumber}
Owner: {OwnerName}
Balance: {Balance}
Interest Earned: {interest}
Account: {AccountNumber}
Owner: {OwnerName}
Balance: {Balance}
Interest Earned: {interest}Например, если входные данные: ACC001, Alice Smith , 500, ACC002, Bob Jones, 50 и 0.05, результат должен быть следующим:
--- Bank Summary ---
Interest Rate: 0.05
Minimum Balance: 100
Total Accounts: 2
Account: ACC001
Owner: Alice Smith
Balance: 500
Interest Earned: 25.0
Account: ACC002
Owner: Bob Jones
Balance: 100
Interest Earned: 5.0Обратите внимание, как имя Алисы очищается от лишних пробелов, а баланс Боба (50) увеличивается до минимума в 100. Проценты рассчитываются с использованием обновленной ставки 0.05, которая была установлена после создания счетов.
Попробуйте сами
using System;
using Banking;
class Program
{
public static void Main(string[] args)
{
// Чтение входных данных для первого счета
string accountNumber1 = Console.ReadLine();
string ownerName1 = Console.ReadLine();
decimal balance1 = Convert.ToDecimal(Console.ReadLine());
// Чтение входных данных для второго счета
string accountNumber2 = Console.ReadLine();
string ownerName2 = Console.ReadLine();
decimal balance2 = Convert.ToDecimal(Console.ReadLine());
// Чтение новой процентной ставки
decimal newRate = Convert.ToDecimal(Console.ReadLine());
// TODO: Создайте два объекта BankAccount, используя введенные значения
// TODO: Обновите процентную ставку, используя статический метод
// TODO: Выведите сводку по банку в требуемом формате
// --- Bank Summary ---
// Interest Rate: {InterestRate}
// Minimum Balance: {MinimumBalance}
// Total Accounts: {TotalAccounts}
// (пустая строка)
// Account: {AccountNumber}
// Owner: {OwnerName}
// Balance: {Balance}
// Interest Earned: {interest}
// (пустая строка)
// Account: {AccountNumber}
// Owner: {OwnerName}
// Balance: {Balance}
// Interest Earned: {interest}
}
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов