Menu
CoddyTech

Повторение — менеджер банковского счёта

Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 14 из 65.

challenge icon

Задание

Средне

Напиши класс BankAccount в файле bank_account.gd. Он объединяет всё, что изучалось в этой главе.

  • Статическая переменная типа int interest_percent, которая начинается со значения 2 и является общей для всех счетов
  • Два приватных свойства: _owner_name (типа String) и _balance (типа int, начинается со значения 0)
  • Свойство только для чтения owner_name, геттер которого возвращает _owner_name
  • Свойство balance, геттер которого возвращает _balance, а сеттер выводит Balance cannot be negative для отрицательного значения и в противном случае сохраняет значение в _balance
  • Конструктор _init(account_owner, start_balance) сохраняет имя владельца и присваивает start_balance свойству balance, чтобы оно проверялось сеттером

А также следующие методы:

  • deposit(amount): выводит Deposit amount must be positive и возвращает false, если amount меньше или равен 0; в противном случае прибавляет эту сумму и возвращает true
  • withdraw(amount): выводит Withdrawal amount must be positive и возвращает false, если amount меньше или равен 0; выводит Insufficient funds и возвращает false, если сумма превышает баланс; в противном случае вычитает её и возвращает true
  • apply_interest(): прибавляет к балансу _balance * interest_percent / 100 (целое количество долларов) и возвращает сумму начисленных процентов
  • display_info(): выводит три строки: Account Owner: NAME, Balance: $BALANCE и Interest Rate: PERCENT%

Предоставленный код считывает owner start_balance, количество следующих команд и команды deposit N, withdraw N, set N (присваивает значение свойству balance), interest, rate N (задаёт значение BankAccount.interest_percent) и info. Он выводит строку для каждого успешного внесения, снятия и начисления процентов, а в конце — баланс владельца. Для Coddy 1000 и команд deposit 500, withdraw 200, interest, info, set 5000 и withdraw 10000 он выводит:

Deposited $500
Withdrew $200
Interest earned: $26
Account Owner: Coddy
Balance: $1326
Interest Rate: 2%
Insufficient funds
Coddy has $5000

Твой код нужно написать в файле bank_account.gd. В main.gd находится предоставленный код ввода и вывода, его нельзя редактировать.

Попробуйте сами

extends Node

func _ready():
	# Предоставленный код ввода-вывода: оставьте его без изменений
	var first := OS.read_string_from_stdin().split(" ")
	var account := BankAccount.new(first[0], int(first[1]))
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		match parts[0]:
			"deposit":
				if account.deposit(int(parts[1])):
					print("Deposited $%s" % parts[1])
			"withdraw":
				if account.withdraw(int(parts[1])):
					print("Withdrew $%s" % parts[1])
			"set":
				account.balance = int(parts[1])
			"interest":
				print("Interest earned: $%d" % account.apply_interest())
			"rate":
				BankAccount.interest_percent = int(parts[1])
			"info":
				account.display_info()
	print("%s has $%d" % [account.owner_name, account.balance])

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript