Lab 4: Uppgiftsbeskrivning

I denna labb skall ni skapa ett program för att hantera bankkonton. För att förbereda er inför P-uppgiften skall ni utgå från en fiktiv P-uppgiftsspecifikation. Notera att ni inte behöver implementera allt i specifikationen, bara det som efterfrågas i uppgifterna nedan.

Nyckelkoncept: Klasser, Arv, P-uppgiftsspecifikationer 

Uppgift 0 (förberedelser)

Läs igenom följande specifikation för en fiktiv P-uppgift

Skriv er nya kod i en fil som heter lab4.py.

Uppgift 1: Skapa klassen Account

Skapa klassen Account enligt specifikationen. Se till att de attribut och metoder som beskrivs finns med och gör rätt saker. Testa din klass (testa speciellt att transaktioner fungerar som avsett).

Uppgift 2: Lägg till felhantering

Skapa funktionen get_int_input(prompt_string) som beskrivs i Uppgift 4 av Lab 3. Använd denna funktion för felhantering på alla de ställen där användaren skall ange en PIN-kod eller ett belopp. 

Uppgift 3:

Implementera funktionen display_accounts enligt specifikationen.

Skapa en dictionary som innehåller alla konton i banken. Har ni implementerat klassen Account rätt så borde följande fungera:

account_dict = {}
account_dict["Lisa"] = Account("Lisa", 200, 1111)
account_dict["Kalle"] = Account("Kalle", 100, 2222)
account_dict["Kim"] = Account("Kim", 300, 3333)

Testa er funktion display_accounts.

Uppgift 4:

Implementera menu() enligt specifikationen.

Uppgift 5:

Implementera menu_choice() enligt specifikationen.

Uppgift 6:

Implementera execute() enligt specifikationen. I denna funktion frågar ni också efter de data som behövs för respektive anrop, t.ex. namn, belopp, och PIN-kod.

Uppgift 7:

Använd Uppgift 4, 5 och 6 för att köra bankprogrammet, så som det beskrivs i punkt 2 i Algoritmen (notera att du kan ignorera filhanteringen i punkt 1 och 3).

Exempel på körning:

-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:1
Name:Kim
PIN-code: 1234
Amount: 300
-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:2
Name:Kim
Amount: 100
Deposit successful
-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:3
Name:Kim
PIN-code: 1111
Amount: 200
Wrong PIN
-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:3
Name:Kim
PIN-code: 1234
Amount: 200
Withdrawal successful
-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:4
Name:Kim
Current PIN-code: 1234
New PIN-code: 2222
Change of PIN Successful
-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:5
Name:Kim
PIN-code: 2222
Kim, amount: 200, transactions: [-200, 100]
-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:6

Process finished with exit code 0
-------------------------------

Uppgift 8:

Skapa en ny klass PremiumAccount som ärver av Account. I PremiumAccount skall du implementera en metod withdrawal(self, amount) som override:ar motsvarande metod i Account. Enda skillnaden är att den skall föreslå ett lån om man försöker ta ut mer pengar än man har, enligt nedanstående. Finns det tillräckligt med pengar skall den anropa metoden withdrawal i Account (basklassen).

Ni kan nu skapa en premiumkund enligt följande

account_dict["Douglas"] = PremiumAccount("Douglas", 1000, 1234)

Exempel på användardialog

-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:3
Name:Douglas
PIN-code: 1234
Amount: 99999999
May I suggest a modest loan Sir?
-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:3
Name:Kalle
PIN-code: 2222
Amount: 99999999
Unforturnately there is not enough money in your account...
-------------------------------
What would you like to do?
1 - Set up a new account
2 - Deposit
3 - Withdrawal
4 - Change pin
5 - Display earlier transactions
6 - Exit
Your choice:
-------------------------------

Uppgift 9:

Ladda ned GUI-koden och kör den:  Download lab4_gui.py


Megabank.png

Med lite tur funkar det utan att ni behöver ändra något annat än att lägga till:

if __name__ == "__main__":
    main()

längst ned i er fil lab4.py och flytta ert textbaserade gränssnitt (anropen av funktionerna menu, execute och menu-choice) till en funktion som heter main(). Om det inte funkar så försök förstå varför och rätta till det.

För att inte göra GUI:t alltför krångligt så är informationen vid byte av pin-kod lite knapphändig, men det kan ni ignorera.