Uppsala universitet, inst f Informationsteknologi, avd f teknisk databehandling
Programmeringsteknik MN1, ht06.

Obligatorisk uppgift 6, klassen Bank

Syfte: Mer övning på sammansatta klasser, referenser och arrayer av objekt samt enkel in- och utmatning mot filer.
Att göra före uppgiften: Uppgift 5. .
Redovisning: Skriftlig redovisning av alla klasserna Bank med kommenterad kod, programkörningar samt svar på frågorna senast den 24 november 2006


Uppgiften går ut på att skriva en klass Bank som håller reda på ett antal bankkunder (objekt av typen Bankkund).

I den föregående uppgiften kunde man via en meny hantera EN kund dvs skapa konton, sätta in och ta ut pengar etc. I klassen Bank skall det via en meny gå att skapa och ta bort kunder och, genom anrop av menyn i Bankkund, hantera enskilda kunder.

Data (kunder, konton mm) skall sparas på en fil mellan körningarna av ett program. Programmet skall alltså börja med att läsa in uppgifterna från en fil och avslutas med att skriva ut uppgifterna på samma fil.

Här följer ett exempel på programkörningar. Observera att programmet körs tre gånger (från ett terminalfönster) och hur informationen finns kvar från föregående körning.

vega $ java Bank Välkommen till Ebberöds bank! Datafil (eller CR om ingen fil): Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 1 Namn: kalle Adress: Uppsala Telefon: 123456 Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 2 Namn: kalle Meny för kundhantering: 1. Skapa nytt konto. 2. Sätta in pengar. 3. Ta ut pengar. 4. Byta adress på kunden. 5. Ta bort konto. 6. Saldobesked 7. Skriv ut info om kunden. 8. Åter till huvudmenyn. Ditt val: 1 Vilken summa skall sättas in? 1000 Meny för kundhantering: 1. Skapa nytt konto. 2. Sätta in pengar. 3. Ta ut pengar. 4. Byta adress på kunden. 5. Ta bort konto. 6. Saldobesked 7. Skriv ut info om kunden. 8. Åter till huvudmenyn. Ditt val: 1 Vilken summa skall sättas in? 2000 Meny för kundhantering: 1. Skapa nytt konto. 2. Sätta in pengar. 3. Ta ut pengar. 4. Byta adress på kunden. 5. Ta bort konto. 6. Saldobesked 7. Skriv ut info om kunden. 8. Åter till huvudmenyn. Ditt val: 8 Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 5 Filnamn för att spara på: bank.txt Ajöss (och tack för fisken) vega$ java Bank Välkommen till Ebberöds bank! Datafil (eller CR om ingen fil): bank.txt Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 4 Kundlista: kalle Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 1 Namn: Lisa Adress: Stockholm Telefon: 2345667 Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 2 Namn: Urban Finns ej Namn: Lisa Meny för kundhantering: 1. Skapa nytt konto. 2. Sätta in pengar. 3. Ta ut pengar. 4. Byta adress på kunden. 5. Ta bort konto. 6. Saldobesked 7. Skriv ut info om kunden. 8. Åter till huvudmenyn. Ditt val: 1 Vilken summa skall sättas in? 10000 Meny för kundhantering: 1. Skapa nytt konto. 2. Sätta in pengar. 3. Ta ut pengar. 4. Byta adress på kunden. 5. Ta bort konto. 6. Saldobesked 7. Skriv ut info om kunden. 8. Åter till huvudmenyn. Ditt val: 8 Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 5 Ajöss (och tack för fisken) vega$ java Bank Välkommen till Ebberöds bank! Datafil (eller CR om ingen fil): bank.txt Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 4 Kundlista: kalle Lisa Huvudmeny: 1. Skapa ny kund 2. Hantera kund 3. Ta bort kund. 4. Lista alla kunder 5. Avsluta. Ditt val: 5 Ajöss (och tack för fisken)

Filhanteringen

Programmet börjar alltså med att fråga om ett filnamn. Om man ger ett så skall programmet läsa in data från filen. När man lämnar programmet så skall programmet skriva filen på nytt så att nästa körning kan fortsätta med aktuella data. (Om inget filnamn gavs vid start så skall programmet fråga efter filnamn vid avslut, annars skall samma fil användas som gavs i början)

Java har många möjligheter att skriva och läsa filer. I denna uppgift skall vi göra det så enkelt som möjligt. För att läsa filen så skall ni använda ett Scanner-objekt som nu skall kopplas till en fil och inte System.in. Detta kan göras med satsen

Scanner fsc = new Scanner(new File(filnamn)); där 'filnamn' är ett String-objekt med namnet på filen.

För att skriva filen så kan man använda klassen PrintWriter som samma metoder som ni har använt i System.out dvs bl.a. print och println. För att koppla ett PrintWriter-objekt till en fil kan man direkt göra

PrintWriter pw = new PrintWriter(filnamn); Om filen redan existerar så kommer den att skrivas över. Observera att man måste stänga filen när man skrivit klart genom ett anrop till close: pw.close();

Filstruktur

När programmet avslutas skall all information som behövs för att det skall gå att återstarta programmet med samma kund- och kontouppsättning skrivas på filen. Använd följande struktur på filen Efter körning med exemplet ovan så har filen bank.txt följande innehåll: 2 kalle Uppsala 123456 2 9983 1000.0 25662 2000.0 Lisa Stockholm 2345667 1 37260 10000.0

Tips

Frågor:

  1. Har du behövt ändra någon metod i de tidigare utvecklade klasserna (Person, Bankkonto och Bankkund)? I så fall vilka och varför?
  2. Vilka metoder har du behövt lägga till i de tidigare utvecklade klasserna?
  3. Kan ditt program hantera hur många kunder som helst? Om ej, hur skulle man kunna göra för att uppnå det?
  4. Om programmet avbryts på något annat sätt än det normala så kommer informationen som lagts in under denna körning gå förlorad. Föreslå något sätt att minimera förlusterna av data!

Last modified: Fri Oct 27 12:38:29 MEST 2006