Menu
Coddy logo textTech

Récapitulatif - Compte bancaire

Fait partie de la section Programmation orientée objet du Journey Swift de Coddy. Leçon 21 sur 57.

challenge icon

Défi

Moyen

Complétez la classe BankAccount. Son initialiseur pouvant échouer init?(owner:deposit:) refuse un propriétaire vide ou un dépôt initial négatif. balance et transactions sont private(set). deposit(_:) et withdraw(_:) lèvent AccountError.invalidAmount pour les montants inférieurs à 1, et withdraw lève AccountError.insufficient(balance:) lorsque le montant est supérieur au solde ; chaque modification réussie est enregistrée dans transactions sous la forme +50 ou -20. statement() renvoie Ada: 30 (+50, -20) ou Ada: 0 (no transactions).

Le code fourni lit le propriétaire et le dépôt initial (name,amount), puis les commandes d n ou w n. Il affiche cannot open account lorsque l'initialiseur échoue ; sinon, il affiche invalid amount ou insufficient funds (balance 10) pour les commandes ayant échoué, puis l'état du compte.

Votre code doit être placé dans AccountError.swift et BankAccount.swift. main.swift contient le code d'entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

// Code d'entrée/sortie fourni : le laisser tel quel
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")
}

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Playground Swift