Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Упражнение 2. Создание и использование класса






 

В этом упражнении Вы преобразуете структуру для описания банковского счета, созданную в предыдущих лабораторных работах, в класс. Члены класса, описывающие данные, вы объявите с модификатором доступа private, для доступа к данным вы создадите нестатические public методы. Далее вы протестируете работу этого класса, создав объект банковского счета и заполнив его данными, введенными пользователем (номер счета и баланс счета). В итоге информация о данных счета должна выводиться на экран.

 

Ø Преобразуйте структуру BankAccount в класс

  • В рабочую папку (work folder) скопируйте решение из папки install folder\Labs\Lab1\CreateAccount.
  • Откройте решение CreateAccount.sln.
  • Изучите код в файле BankAccount.cs. Обратите внимание на то, что тип BankAccount определен как структура.
  • Откомпилируйте и запустите программу. Вас попросят ввести номер и начальный баланс счета.
  • Преобразуйте структуру BankAccount, определенную в файле BankAccount.cs, в класс.
  • Ответьте на вопрос, почему возникает ошибка и в каком месте кода она возникает.

· Измените объявление переменной created таким образом, чтобы при объявлении создавался новый объект класса BankAccount:

 

...

BankAccount created = new BankAccount();

...

· Сохраните проект.

· Откомпилируйте и запустите программу. Убедитесь в том, что данные, введенные пользователем и считанные с консоли, корректно выводятся на экран с помощью метода CreateAccount.Write.

 

Ø Инкапсулируйте данные класса BankAccount

  • В настоящий момент все члены класса BankAccount, описывающие данные, определены как public. Сделайте их private:
  • Откомпилируйте программу. Вы получите сообщение об ошибке. Подумайте, почему происходит ошибка.
  • В класс BankAccount добавьте нестатический public метод Populate. Это будет void- метод с двумя параметрами: первый типа long (номер банковского счета), второй типа decimal (баланс счета). В теле этого метода значение long -параметра будет присваиваться полю accNo, а значение decimal-параметра полю accBal. Здесь же полю accType будет присваиваться значение AccountType.Checking.
  • В методе CreateAccount.NewbankAccount з акомментируйте три выражения, в которых присваиваются значения полям объекта created. Вместо них добавьте вызов метода Populate для переменной created, передав ему в качестве аргументов переменные number и balance:
  • Сохраните проект.
  • Откомпилируйте программу. Вы получите сообщение об ошибке. В методе CreateAccount.Write осталось три выражения, в которых производится попытка напрямую обратиться к private данным класса BankAccount. Вам необходимо написать для класса BankAccount три public метода, которые будут возвращать значение этих трех полей класса. Сделайте следующее:

o В класс BankAccount добавьте нестатический public метод Number. Этот метод будет возвращать значение типа long и не будет использовать параметры. Он будет возвращать значение поля accNo:

o В класс BankAccount добавьте нестатический public метод Balance. Этот метод будет возвращать значение типа decimal и не будет использовать параметры. Он будет возвращать значение поля accBal:

o В класс BankAccount добавьте нестатический public метод Type. Этот метод будет возвращать значение типа AccountType и не будет использовать параметры. Он будет возвращать значение поля accType:

o И, наконец, замените три выражения метода CreateAccount.Write, в которых производится попытка напрямую обратиться к private данным класса BankAccount, на три вызова только что созданных вами public методов:

· Сохраните проект.

  • Откомпилируйте программу и исправьте ошибки, если это необходимо. Запустите программу. Убедитесь в том, что введенные Вами данные корректно обрабатываются методом BankAccount.Populate и выводятся на экран методом CreateAccount.Write.

Ø Продолжите инкапсуляцию данных класса BankAccount

  • Измените метод BankAccount.Type таким образом, что тип возвращаемых им значений стал string, вместо AccountType. Воспользуйтесь методом ToString для преобразования типа переменной accType.
  • Сохраните проект.
  • Откомпилируйте программу и исправьте ошибки, если это необходимо. Запустите программу. Убедитесь в том, что введенные вами данные корректно обрабатываются методом BankAccount.Populate и выводятся на экран методом CreateAccount.Write.

 

Дополнительная информация:

Инициализация created.accNo компилировалась без ошибки, когда BankAccount был определен как структура. Теперь это класс и компиляция не проходит. Это связано с тем, что когда BankAccount был структурой, при объявлении переменной created, создавалась размерная переменная типа BankAccount (в стеке). Теперь, когда BankAccount стал классом, при объявлении переменной created создается не размерная переменная BankAccount, а ссылка BankAccount, которая должна указывать на объект типа BankAccount.

Если члены класса BankAccount определить как private, то произойдет ошибка компиляции, т.к. только методы класса BankAccount имеют доступ к private данным этого класса. Для устранения ошибки необходимо написать для класса BankAccount public метод, который будет производить инициализацию его членов или предоставлять к ним доступ на чтение.

Ø Сделайте номер каждого банковского счета уникальным.

Вы осуществите это через статическую переменную класса BankAccount и метод, который будет инкрементировать и возвращать значение этой переменной. Далее вы протестируете его работу, создав новый экземпляр банковского счета и вызвав для него метод, генерирующий номер банковского счета.

· В класс BankAccount добавьте статическую private переменную nextAccNo типа long.

· В класс BankAccount добавьте public метод NextNumber. Этот метод будет возвращать значение типа long и не будет использовать параметры. Он будет возвращать инкрементированное значение поля nextAccNo. Подумайте, каким должен быть этот метод, статическим или динамическим, объясните свой выбор.

  • В методе CreateAccount.NewBankAccount закомментируйте выражение, запрашивающее у пользователя номер банковского счета:
  • В методе CreateAccount.NewBankAccount замените инициализацию переменной number вызовом только что созданного вами метода BankAccount.NextNumber:
  • Сохраните проект.
  • Откомпилируйте программу и исправьте ошибки, если это необходимо. Запустите программу. Убедитесь в том, что два банковских счета имеют номера 0 и1.
  • В настоящий момент статическое поле BankAccount.nextAccNo по умолчанию инициализируется нулем. Проинициализируйте его явным образом значением 123.
  • Откомпилируйте программу. Запустите программу. Убедитесь в том, что два банковских счета имеют номера 123 и124.

 

Ø Продолжите инкапсуляцию данных класса BankAccount

  • Измените метод BankAccount.Populate таким образом, чтобы он принимал только один параметр – balance типа decimal, закомментируйте лишний код. Внутри метода присвойте полю accNo значение, возвращаемое методом BankAccount.NextNumber:
  • Измените модификатор доступа метода BankAccount.NextNumber на private:

 

  • В методе CreateAccount.NewBankAccount закомментируйте объявление и инициализацию переменной number. Измените вызов метода created.Populate таким образом, чтобы он принимал только один параметр:
  • Сохраните проект.
  • Откомпилируйте программу и исправьте ошибки, если это необходимо. Запустите программу. Убедитесь в том, что значения генерируемых номеров банковских счетов так и остались 123 и124.

 

Ø Расширение функциональности класса BankAccount.

В класс BankAccount необходимо добавить методы Withdraw и Deposit для расширения его функциональности.

Метод Withdraw принимает на вход один параметр типа decimal и вычитает указанную сумму из баланса счета. Однако перед этим производится проверка, имеется ли на счету необходимая сумма, чтобы не превысить кредитный лимит счета. Метод возвращает значение типа bool, указывающее удалось ли снять со счета необходимую сумму.

Метод Deposit такжепринимает на вход один параметр типа decimal и прибавляет указанное значение к балансу счета. Метод возвращает новое значение баланса счета.

 

Ø Добавьте метод Deposit в класс BankAccount

  • В класс BankAccount добавьте нестатический public метод Deposit. Этот метод принимает на вход параметр типа decimal, значение которого прибавляется к балансу счета. В метод добавьте проверку того, что передаваемое на вход значение параметра является неотрицательным. Метод возвращает новое значение баланса счета.
  • В класс CreateAccount добавьте статический public метод TestDeposit. Это будет void- метод с одним параметром типа BankAccount. В теле метода у пользователя будет запрашиваться сумма, которую необходимо положить на счет. Это значение будет конвертироваться в тип decimal и передаваться в качестве входного параметра при вызове метода Deposit.
  • В метод CreateAccount.Main добавьте инструкции для вызова только что созданного вами метод TestDeposit. Убедитесь в том, что вы вызываете метод TestDeposit для обоих объектов банковских счетов. Для вывода информации о счете после осуществления вклада используйте метод CreateAccount.Write:
  • Сохраните проект.
  • Откомпилируйте программу и исправьте ошибки, если это необходимо. Запустите программу. Убедитесь в том, что метод Deposit работает корректно.

 

Ø Добавьте метод Withdraw в класс BankAccount

  • В класс BankAccount добавьте нестатический public метод Withdraw. Этот метод принимает на вход один параметр типа decimal и вычитает указанную сумму из баланса счета. Однако перед этим производится проверка, имеется ли на счету необходимая сумма, чтобы не превысить кредитный лимит счета. Метод возвращает значение типа bool, указывающее удалось ли снять со счета необходимую сумму.
  • В класс CreateAccount добавьте статический public метод TestWithdraw. Это будет void- метод с одним параметром типа BankAccount. В теле метода у пользователя будет запрашиваться сумма, которую необходимо снять со счета. Это значение будет конвертироваться в тип decimal и передаваться в качестве входного параметра при вызове метода Withdraw. При неудачной попытке снятия денег со счета на экран будет выводиться сообщение:
  • В метод CreateAccount.Main добавьте инструкции для вызова только что созданного вами метод TestWithdraw. Убедитесь в том, что вы вызываете метод TestWithdraw для обоих объектов банковских счетов. Для вывода информации о счете после изъятия суммы со счета используйте метод CreateAccount.Write:
  • Сохраните проект.
  • Откомпилируйте программу и исправьте ошибки, если это необходимо. Запустите программу. Убедитесь в том, что метод Withdraw работает корректно. Протестируйте удачные и неудачные попытки снятия денег со счета.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.