Obligatorisk uppgift: Banksystem



Relevanta dokument
Menyvalen som alltid är numeriska presenteras omgivet av parenteser.

Att öva på och förstå ett program med flera samverkande klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsnings 9 - Exceptions, I/O

Tentamen, EDAA20/EDA501 Programmering

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 14. Filhantering

Del A (obligatorisk för alla)

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

OOP Objekt-orienterad programmering

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Malmö högskola 2008/2009 CTS

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Grundläggande programmering med C# 7,5 högskolepoäng

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

JAVAUTVECKLING LEKTION 7

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Design av en klass BankAccount som representerar ett bankkonto

Laboration A Objektsamlingar

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

TENTAMEN OOP

Tentamen OOP

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Objektorienterad programmering i Java

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Sammanfattning och repetition utgående från typiska tentamensuppgifter

TENTAMEN OOP

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen, EDAA10 Programmering i Java

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objekt och klasser - Introduktion

Objekt och referenser

DAT043 Objektorienterad Programmering

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Malmö högskola 2007/2008 Teknik och samhälle

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

"if"-satsen. Inledande programmering med C# (1DV402)

Redovisning av inlämningsuppgifter

PROGRAMMERINGSTEKNIK TIN212

Mer om klasser och objekt

Tentamen , Introduktion till Java, dtaa98, dtea53

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen i Programmeringsteknik I,, KandMa/Fy,

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

OOP Objekt-orienterad programmering

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

F4. programmeringsteknik och Matlab

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Del A (obligatorisk för alla)

PROGRAMMERING-Java TENTAMINA

Malmö högskola 2007/2008 Teknik och samhälle

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

OOP Objekt-orienterad programmering

Enkla variabler kontra referensvariabel

Föreläsning 3-4 Innehåll

Tentamen, EDA501 Programmering M L TM W K V

Lösningsförslag, tentamen FYTA11 Javaprogrammering

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

SMD 134 Objektorienterad programmering

Tentamen. Lösningsförslag

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Lösningar för tenta 3 DAT043,

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

JAVAUTVECKLING LEKTION 11

Transkript:

Informationsteknologi Programmeringsteknik I vt10 Obligatorisk uppgift: Banksystem Moment: Öva på att förstå ett lite större program med flera samverkande klasser. Redovisning: Uppgiften redovisas i labbsal. Koden skall vara vettigt strukturerad med indentering och kommenterad enligt Javadoc-standarden. Problembeskrivning En bekant till dig med namnet Ebbe Röd vill starta en bankrörelse. Tanken är till synes helt altruistisk dvs han skall bara förmedla låna in och låna ut pengar utan att ta något betalt av kunderna. (När kunderna väl vant sig vid hans tjänster kommer han säkert införa avgifter... ). Ebbe behöver ett program som kan hålla reda på kunderna och deras fordringar och skulder. Han vill t ex kunna lägga in nya kunder, skapa konton till kunder, sätta in och ta ut pengar från konton och ändra namn och adress för kunden. Ebbe själv vet inte mycket om programmering men hans syster Ebba har nyligen läst programmeringsteknik 1 så han har bett henne om hjälp. Tillsammans har de gjort en fallstudie dvs funderat igenom hur programmet skall bära sig åt inför användaren. Användaren är alltså en banktjänsteman (dvs till en början bara Ebbe själv). Så här vill de att programmet skall börja: Eftersom Ebba inte har läst något om hur man gör grafiska användarinterface så får programmet styras från menyer i det vanliga interaktions- eller terminalfönstret. Valen görs med siffror skrivna på tangentbordet. Nedan följer den fallstudie som de gjort. 1

Välkommen till Ebberöds bank Ditt val: 4 Kundens namn: Lisa Kundens adress: Storgatan Ditt val: 4 Kundens namn: Olle Kundens adress: Slottsgatan Ditt val: 4 Kundens namn: Kalle Kundens adress: Strandgatan Ditt val: 1 Kunder: (1) 1 Lisa (2) 2 Olle (3) 3 Kalle Ditt val: 3 Kunder: (1) 1 Lisa (2) 2 Olle (3) 3 Kalle Välj kund (0 för att avbryta): 2 Ditt val: 2 Konto nummer 1 skapat Ditt val: 2 Konto nummer 2 skapat Ditt val: 4 Insättning Konton: (1) 2-1 0.0 (2) 2-2 0.0 Välj konto (0 för att avbryta): 1 Belopp (0 för att avbryta): 1000 Ditt val: 5 Uttag Konton: (1) 2-1 1000.0 (2) 2-2 0.0 Välj konto (0 för att avbryta): 2 Belopp (0 för att avbryta): 100000 Ditt val: 1 Konton: (1) 2-1 1000.0 (2) 2-2 -100000.0 Ditt val: 5 Uttag Konton: (1) 2-1 1000.0 (2) 2-2 -100000.0 Välj konto (0 för att avbryta): 2 Belopp (0 för att avbryta): 50000 Ditt val: 1 Konton: (1) 2-1 1000.0 (2) 2-2 -150000.0 Ditt val: 6 == Hantera personuppgifter för Olle (1) Visa personuppgifter (2) Ändra namn (3) Ändra adress Ditt val: 3 Ny adress: Villavägen == Hantera personuppgifter för Olle (1) Visa personuppgifter (2) Ändra namn (3) Ändra adress Ditt val: 0 Ditt val: 0 Ditt val: 3 Kunder: (1) 1 Lisa (2) 2 Olle (3) 3 Kalle Välj kund (0 för att avbryta): 1 == Hanterar kund Lisa Ditt val: 2 Konto nummer 1 skapat == Hanterar kund Lisa Ditt val: 4 Insättning Konton: (1) 1-1 0.0 Välj konto (0 för att avbryta): 1 Belopp (0 för att avbryta): 10000 == Hanterar kund Lisa Ditt val: 0 Ditt val: 0 Säkert att du vill avsluta? Tack för denna gång! > ja Menyvalen som alltid är numeriska presenteras omgivet av parenteser. 2

Några detaljer: Banken har en kassa och ett antal kunder. Vid insättning läggs pengarna i kassan och vid uttag hämtas de från kassan En kund består av en person med uppgift om namn och adress, ett kundnummer och ett antal konton. Ett konto hör alltså alltid till en kund. Kontot har ett kontonummer och ett saldo. Kontona numreras individuellt för varje kund. Huvudmenyn Efter lite mer funderande har syskonparet Röd kommit fram till följande huvudmeny: (5) Avsluta kund (8) Läs in banken från fil (9) Spara banken på en fil Ditt val: Kommentarer till några av menyalternativen: Lista kunder Programmet skall skriva en lista över samtliga kunder (namn och kundnummer) Lista konton Programmet skall skriva en lista över samtliga konton (nummer och saldo) som finns. Eftersom kontona är knutna till kunder så måste detta göras genom att programmet går igenom kunderna. Ett fullständigt kontonummer får då bestå av kundnummer följt av kontonummer. Hantera kund Väljer en specifik kund och går in i en annan meny som för att hantera denna (se nedan) Skapa kund Kunden skall förses med ett kundnummer. Detta skall vara unikt för varje kund. Den första kunden som skapas får nummer 1, den andra nummer 2 etc. Kunden skall läggas in i bankens förteckning över kunder. Avsluta kund Ta bort en kund ur registret. Eventuell fordran på eller skuld till kunden måste regleras. Läs in banken från fil För att programmet skall vara användbart måste naturligtvis all infomation sparas på en fil medan banken är stängd. När banken öppnar skall man börja med att läsa in detta från filen. Spara banken på en fil Detta skall göras när banken stänger men kan också behöva göras då och då (kanske automatiskt?) i den händelse banken skulle drabbas av datorfel eller strömavbrott. 3

Hantering av individuella kunder När man väljer Hantera kund i huvudmeny skall man först få en lista över kunder och där ange vilken kund man vill hantera. När det är valt skall man komma in i menyn för att hantera en kund: Ditt val: 3 Kunder: (1) 1 Lisa (2) 2 Olle (3) 3 Kalle Välj kund (0 för att avbryta): 2 Ditt val: Kommentarer till några av alternativen: Skapa konto Skapar ett konto. Det första kontot som skapas för en kund får nummer 1, det andra nummer 2 osv. Saldot sätts till 0. Avsluta konto Kontot skall tas bort från kundens kontoförteckning. Om saldot är positivt skall det betalas ut (från bankens kassa) och om det är negativt skall kunden betala in det (till bankens kassa). Observera att ett borttaget koonto inte skall ändra på numreringen på eventuella andra konton som kunden har. Sätta in Här måste man välja konto och belopp. Beloppet tillföres bankens kassa. (Anmärkning till programmeraren: bankens kassa måste alltså vara åtkomlig från kunden dvs det måste finnas en referens till bankobjektet från kundobjekten.) Ta ut Som föregående punkt men beloppet tas ut från bankens kassa. Ändra personuppgifter Det måste naturligtvis vara möjligt att ändra adress, namn och andra eventuella personuppgifter. Detta hänföres till en särskild meny. Felhantering Det är inte så bra om programmet avslutas när ett fel inträffar (då riskerar man ju att förlora inmatade uppgifter). Programmet bör alltså upptäcka felaktiga menyval. Exempel: 4

(5) Avsluta kund (8) Läs in banken från fil (9) Spara banken på en fil Ditt val: 17 *** Ogiltigt val! (5) Avsluta kund (8) Läs in banken från fil (9) Spara banken på en fil Ditt val: qwgg2q3fyq3f *** Ogiltigt val! Programdesign Ebba har sagt att det verkar lämpligt att ha klasser för banker, kunder, konton och personer. Eftersom hon programmerat i olika system (Unix, Mac, Windows) så vet hon att nationella tecken ofta ställer till besvär. Hon har därför valt engelska namn på klasserna: Bank, Customer, Account och Customer. Lite tankar om de olika klasserna: Klassen Bank Trots att programmet med största sannolikhet skall behandla en bank vid varje körning vill hon göra banken till ett objekt (alternativet vore att göra alla bank-data som klass-variabler dvs deklarera dem som static). Ett bankobjekt skall då ha ett antal kunder dvs ett antal objekt av typen Customer. Hon väljer att dessa kunder i en array (hon har en svag aning om att Java har mer flexibla strukturer men hon kan inget om dessa). Förutom arrayen med kundreferenser bör man hålla reda på hur många kunder som man faktiskt har (kan ju vara färre än antalet platser i arrayen). Vidare skall varje kund förses med ett unikt kundnummer så man behöver också hålla reda på antalet skapade kunder (om en kund tas bort bör man inte återanvända dess kundnummer). Slutligen måste banken hålla reda på hur mycket det finns i kassan. Den behövs en metod i som sköter hanteringen av huvudmenyn och den behöver ett antal hjälpmetoder för att utföra de olika operationerna. Klassen Customer Denna klass skall dels innehålla personuppgifter. Dessa samlas i en separat klass Person så klassen Customer får innehålla en referens till ett Person-objekt. Klassen skall också innehålla kundnummer, en array med referenser till Accountobjekt, uppgift om hur många konton som kunden verkligen har samt en kontoräknare för att kunna ge konton unika nummer. Eftersom en kund skall kunna ta ut och sätta in pengar behövs även en referens till bankobjektet där kassan finns. 5

Det kommer att behövas en metod för Hantera kund-menyn och diverse hjälpmetoder. Ebba har gjort en skiss över hur de olika objekten skall hänga ihop: Bankobjekt kunder arrayobjekt Kundobjekt person konton banken Personobjekt namn Kundobjekt person konton banken arrayobjekt Kalle Andersson Kontoobjekt Kontoobjekt Kundnummer 1 Kundnummer 1 Kontonummer 1 Kontonummer 3 Saldo 50. Saldo 50. Ebba har också börjat skriva en del: Klassen Bank (ofullständig) * Klassen representerar en bank. import java.util.scanner; import java.util.date; import java.util.locale; import java.io.*; public class Bank { private Customer[] customers; // Kundförteckning private int numberofcustomers; // Aktuellt antal kunder private int globalcustomernumber; // Globalt kundnummer private double cashbox; // Kassa private Scanner sc = new Scanner(System.in); // För användning i flera metoder public Bank() { customers = new Customer[3]; numberofcustomers = 0; globalcustomernumber = 1; 6

* Skapar ett Bank-objekt och sätter igång menyhanteringen public static void main(string [] args) { Locale.setDefault(Locale.US); // decimalpunkt Bank thebank = new Bank(); thebank.mainmenue(); * Huvudmeny för bankhantering public void mainmenue() { int choice; boolean goon = true; System.out.println("Välkommen till Ebbe Röds bank"); while (goon) { System.out.println("\n"); System.out.println(" "); System.out.println(" "); System.out.println(" "); System.out.println(" "); System.out.println(" "); System.out.println(" (5) Avsluta kund"); System.out.println(" (8) Läs in banken från fil"); System.out.println(" (9) Spara banken på en fil"); System.out.print("Ditt val: "); if (sc.hasnextint()) { choice = sc.nextint(); else { choice = 999; sc.nextline(); switch (choice) { case 0: System.out.print("Säkert att du vill avsluta? "); if (sc.nextline().equals("ja")) { goon = false; case 1: listcustomers(); case 2: listaccounts(); case 3: // Hantera kund handlecustomer(); case 4: createcustomer(); case 5: deletecustomer(); case 8: load(); case 9: save(); default: System.out.println("*** Ogiltigt val!"); System.out.println("Tack för denna gång!"); return; * Skapar en ny kund. Kundarrayen ökas automatiskt vid behov 7

public void createcustomer() { if (numberofcustomers==customers.length) { Customer [] newcst = new Customer[2*customers.length]; System.arraycopy(customers, 0, newcst, 0, customers.length); customers = newcst; Person p = new Person(); p.read(); customers[numberofcustomers] = new Customer(p, globalcustomernumber, this); numberofcustomers++; globalcustomernumber++; * Förintar en kund. Reglerar skuld eller fordran. public void deletecustomer() { int index = choosecustomer(); if (index<0) { return; System.out.println("\nFörintar " + customers[index]); double total = customers[index].totalbalance(); if (total<0) { System.out.println("Kunden skall betala in " + String.format("%.2f", total) + " kronor"); else if (total>0) { System.out.println("Kunden skall erhålla " + String.format("%.2f", total) + " kronor"); this.updatecashbox(-total); for (int i= index; i<numberofcustomers-1; i++) { customers[i] = customers[i+1]; numberofcustomers--; if (numberofcustomers>0) { customers[numberofcustomers] = null; * Skriver en förteckning över kunderna * public void listcustomers() { System.out.println("*** Lista kunder ej implementerad än"); * Låter användaren välja en kund * @return index för kunden private int choosecustomer() { int cust; listcustomers(); while (true) { System.out.print("Välj kund (0 för att avbryta): "); if (sc.hasnextint()) { cust = sc.nextint(); else { cust = -1; sc.nextline(); if(cust>=0 && cust<=numberofcustomers) { System.out.println("Ogiltigt val!"); listcustomers(); 8

return cust-1; * Väljer ut en enskild kund och anropar hanteringsmenyn för denna kund public void handlecustomer() { int cust = choosecustomer(); if (cust<0) { System.out.println("Avbrutet"); return; else { // System.out.println("Vald kund: " + customers[cust]); customers[cust].handle(); * Listar samtliga konton vid banken public void listaccounts() { System.out.println("*** Lista konton ej implementerad"); * get-metod för kassan * @return Kassan public double getcashbox() { return cashbox; * Uppdaterar kassans innehåll * @param amount Summa att öka (om positiv) eller minska (om negativ) kassan med * @return true om operationen lyckades, annars false public boolean updatecashbox(double amount) { System.out.println("*** Uppdatera kassan ej implementerad än"); return false; * Frågar efter filnamn att spara filen på, * kopplar en ström till filen, skriver allmän information * och anropar en spara-funktion för varje kund. public void save() { System.out.println("*** save ej implementerad än"); /* String filename = "bankfil"; PrintWriter outputstream = null; Scanner sc = new Scanner(System.in); System.out.print("Filnamn (default " + filename + " ): "); String name = sc.nextline(); if (!name.equals("")) { filename = name; try { outputstream = new PrintWriter(new FileOutputStream(fileName)); catch(filenotfoundexception e) { System.out.println("*** Filen " + filename + " kunde inte öppnas"); return; System.out.println("Sparar på fil " + filename + " "); outputstream.println("bankfil" + " " + (new Date()).toString()); outputstream.println(customers.length + " // customers.length"); outputstream.println(numberofcustomers + " // numberofcustomers"); outputstream.println(globalcustomernumber + " // globalcustomernumber"); outputstream.println(cashbox + " // cashbox"); 9

for (int i=0; i<numberofcustomers; i++) { if (customers[i]!=null) { customers[i].save(outputstream); outputstream.close(); * Läser in infomation om en bank som är sparad med save-metoden * Alla attribut skrivs över med innehåll från filen. public void load() { System.out.println("*** load ej implementerad än"); /* String filename = "bankfil"; Scanner inputstream = null; Scanner sc = new Scanner(System.in); System.out.print("Filnamn (default " + filename + " ): "); String name = sc.nextline(); if (!name.equals("")) { filename = name; try { inputstream = new Scanner(new FileInputStream(fileName)); catch(filenotfoundexception e) { System.out.println("*** Filen " + filename + " kunde inte öppnas"); return; System.out.println("Läser från fil " + filename + " "); System.out.println(inputStream.nextLine()); int customerslength = inputstream.nextint(); inputstream.nextline(); // Byt rad numberofcustomers = inputstream.nextint(); inputstream.nextline(); // Byt rad customers = new Customer[numberOfCustomers]; globalcustomernumber = inputstream.nextint(); inputstream.nextline(); // Byt rad cashbox = inputstream.nextdouble(); inputstream.nextline(); for (int i=0; i<numberofcustomers; i++) { customers[i] = Customer.load(inputStream, this); inputstream.close(); Klassen Person för representation av personuppgifter * Representerar information om en person import java.util.scanner; import java.io.*; public class Person { private String name; private String address; * Skapar person med angivet namn * @param name Personens namn public Person(String name) { this.name = name; 10

this.address = ""; * Tar fram en persons namn * @return Personens namn public String getname() { return this.name; * Tar fram en persons adress * @return Personens adress public String getaddress() { return this.address; * Ger en person ett nytt namn * @param name det nya namnet public void setname(string name) { this.name = name; * Ger en person en ny adress * @param address Den nya adressen public void setaddress(string address) { this.address = address; * Returnerar en String-representation av personobjektet public String tostring() { return this.name; * Menystyrd hantering av uppgifterna om en person public void handle() { int choice; Scanner sc = new Scanner(System.in); while (true) { System.out.println("\n== Hantera personuppgifter för " + this.name ); System.out.println(" "); System.out.println(" (1) Visa personuppgifter"); System.out.println(" (2) Ändra namn"); System.out.println(" (3) Ändra adress"); System.out.print("Ditt val: "); if (sc.hasnextint()) { choice = sc.nextint(); else { choice = -1; sc.nextline(); // Läs förbi radslutet switch (choice) { case 0: return; case 1: System.out.println("Namn : " + this.name); System.out.println("Adress: " + this.address); case 2: System.out.print("Nytt namn: "); 11

this.setname(sc.nextline()); case 3: System.out.print("Ny adress: "); this.setaddress(sc.nextline()); default: System.out.println("Ogitigt val!"); // Anmärkning: För att inte switch-satsen skall bli oöverskådlig // bör en case-del innehålla högst tre satser. // Om man behöver fler så samlar man dem i en // separat metod som anropas från case-fallet. * Sparar personuppgifterna på en öppen ström public void save(printwriter outputstream) { outputstream.println(this.name); outputstream.println(this.address); * Skapar en person och och läser namn och adress från standard input * Exempel på anrop: * Person p = Person.read() * @return Skapad person public static Person read() { Scanner sc = new Scanner(System.in); System.out.print("Kundens namn: "); Person p =new Person(sc.nextLine()); System.out.print("Kundens adress: "); p.address = sc.nextline(); return p; * Skapar en person och läser in uppgifterna från en öppen ström * Precondition: Strömmen är positionerad så att namnet står på första raden * Postcondition: Strämmen positionerad efter sista radens radslut. * Exempel på anrop: * Person p = Person.read(inputStream); * @return Skapad person public static Person read(scanner inputstream) { Person person = new Person(inputStream.nextLine()); person.address = inputstream.nextline(); return person; Klassen Account för representation av bankkonton * Representerar ett bankkonto import java.io.*; import java.util.scanner; public class Account { private int customernumber; private int accountnumber; private double balance; 12

* Parameterlös konstruktor. Avsedd att användas av load-metoden nedan public Account() { * Konstruktor avsedd att användas från ett kund-objekt * * @param customernumber Kundnummer * @param accountnumber Kontonummer public Account(int customernumber, int accountnumber) { this.customernumber = customernumber; this.accountnumber = accountnumber; * get-metod för saldot * @return Kontots saldo public double getbalance() { return balance; * get-metod för kontonumret * @return Kontots nummer public int getaccountnumber() { return accountnumber; * get-metod för kundnumret * @return Kontoinnehavarens kundnummer public int getcustomernumber() { return customernumber; * @return Textrepresentation av fullständigt kontonummer och saldo public String tostring() { return " " + customernumber + "-" + accountnumber + String.format(" %10.2f", balance); * Noterar insättning på eller uttag från kontot * @param amount Summa som sätts in (om positiv) eller tas ut (om negativ) * @return kontots nya saldo public double deposit(double amount) { balance += amount; return balance; * Sparar kontoinformationen på en öppnad ström * @param outputstream En öppen ström public void save(printwriter outputstream) { outputstream.print(" "); outputstream.print(" " + customernumber); outputstream.print(" " + accountnumber); outputstream.println(" " + balance); 13

* Skapar ett konto från informationen på en öppen ström * @param inputstream En öppen ström * @return Det skapade objektet public static Account load(scanner inputstream) { Account account = new Account(); account.customernumber = inputstream.nextint(); account.accountnumber = inputstream.nextint(); account.balance = inputstream.nextdouble(); inputstream.nextline(); return account; Din uppgift Innan Ebba kommit längre fick hon ett jobberbjudande från Google och flyttade till Kalifornien. Ebbe ber nu dig om hjälp att färdigställa klasserna. Din uppgift är nu att skriva klart programmet dvs skriva klar klassen Bank och skriva klassen Customer (dvs den som i texten och figuren kallats Kund)! 14