Menu
Coddy logo textTech

Повторение — банковский счёт

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

challenge icon

Задание

Средне

Завершите класс BankAccount. Его инициализатор, допускающий сбой, init?(owner:deposit:) отклоняет пустого владельца или отрицательный первоначальный вклад. balance и transactions имеют модификатор private(set). Методы deposit(_:) и withdraw(_:) выбрасывают ошибку AccountError.invalidAmount для сумм меньше 1, а withdraw выбрасывает ошибку AccountError.insufficient(balance:), если сумма больше баланса; каждое успешное изменение записывается в transactions как +50 или -20. statement() возвращает Ada: 30 (+50, -20) или Ada: 0 (no transactions).

Предоставленный код считывает имя владельца и первоначальный вклад (name,amount), а затем команды d n или w n. Если инициализатор завершается ошибкой, он выводит cannot open account; в противном случае для неудачных команд он выводит invalid amount или insufficient funds (balance 10), а в конце — выписку.

Ваш код должен находиться в AccountError.swift и BankAccount.swift. Файл main.swift содержит предоставленный код ввода/вывода, и его нельзя изменять.

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

// Предоставленный код ввода/вывода: оставьте его как есть
var input: [String] = []
while let line = readLine() { input.append(line) }
let head = input[0].split(separator: ",", omittingEmptySubsequences: false).map(String.init)
if let account = BankAccount(owner: head[0], deposit: Int(head[1])!) {
    for cmd in input.dropFirst() {
        let p = cmd.split(separator: " ")
        let n = Int(p[1])!
        do {
            if p[0] == "d" { try account.deposit(n) } else { try account.withdraw(n) }
        } catch AccountError.insufficient(let balance) {
            print("insufficient funds (balance \(balance))")
        } catch {
            print("invalid amount")
        }
    }
    print(account.statement())
} else {
    print("cannot open account")
}

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

Потренируйтесь самостоятельно: Песочница Swift