Laboration 4, ISG A04 och DVG A08 HT-09 Laborationen går ut på att skapa en enkel bankbok. Ni skall i bankboken kunna registrera upp till 30 transaktioner som kan bestå av insättning, uttag eller checkuttag. Laborationen är indelad i ett antal steg där det sista steget skall dokumenteras och lämnas in. Var noga med att läsa igenom allt i aktuellt steg innan ni börjar koda. Viktig information, om tex namngivning av metoder, kan komma på slutet. Steg 1. Skapa klassen Transaktion. Klassen skall ha följande privata attribut: int belopp String datum Skriv metoder för att tilldela respektive fråga efter attributens värden (setbelopp, getbelopp, etc.). I klassens konstruktor skall ni initiera attributen till lämpliga värden. 1(5)
Transaktion t=new Transaktion(); System.out.println("Aktuellt belopp är "+t.getbelopp()); System.out.println("Beloppet bokfört "+t.getdatum()); Prova gärna med att ändra så att användaren får ange belopp och datum. Du kan också lägga till och göra flera transaktioner men ovanstående main-metod skall fungera. Steg 2. I detta steg skall ni skapa en enkel bankbok för att kunna testa er Transaktionsklass. Denna bankbok skall i senare steg utökas/förbättras men till en början skall den uppfylla några grundläggande attribut och metoder. En bankbok, i denna laboration, är en klass som håller reda på ett antal transaktioner, max 30 stycken. Först så skall ni i er klass Transaktion lägga till en metod som tar balansen (som den är innan detta anrop) som parameter och sedan returnerar en ny balans efter att den förändrats av aktuellt värde på transaktionen. Ni ska nu fortsätta att arbeta med en ny klass: bankboksklassen. Er bankbok skall ha följande privata attribut: en vektor med 30 platser av typen Transaktion int antal genomförda transaktioner Ni behöver skapa tre metoder förutom konstruktorn i bankboksklassen. Skapa en metod för att registrera en transaktion i bankboken. Transaktionen skickas med som en parameter till metoden. Ni skall alltså lägga till en skapad transaktion till er vektor. Det är transaktionerna i denna vektor som är er bankbok. Skapa en metod för att skriva ut alla gjorda transaktioner. Det handlar alltså om en metod som går igenom er vektor och skriver ut varje transaktion (med datum och belopp). Till slut så behövs även en metod för att räkna ut aktuellt saldo. Denna metod skall använda en lokal variabel vars värde är 0 från början och sedan förändra detta värde genom att iterera igenom vektorn. Förändringen av variabeln skall ske med hjälp av den nya metoden i Transaktion beskriven ovan. Efter att ni itererat igenom vektorn skall värdet i variabeln returneras. 2(5)
Bankbok b=new Bankbok(); Transaktion t=new Transaktion(); t=new Transaktion(); t.setbelopp(40); t.setdatum("20071014"); t=new Transaktion(); t.setbelopp(50); t.setdatum("20071021"); b.skrivuttransaktioner(); System.out.println("Aktuellt saldo på kontot är "+ b.beraknasaldo()); Steg 3. I de tidigare stegen har vi använt oss av objekt av typen Transaktion. I detta steg skall vi ändra så att alla transaktioner blir någon av typerna insättning, uttag eller checkuttag istället. Vitsen med detta är att visa hur arv fungerar. Er uppgift är alltså att skapa klasserna Insattning, Uttag och Checkuttag. Dessa klasser skall alla ärva funktionalitet från klassen Transaktion (lägg till extends Transaktion i klassdefinitionerna). I klassen Transaktion måste ni göra några ändringar. I metoden som ni lade till i förra steget, den som räknar ut ny balans, adderar ni antagligen transaktionens värde till det tidigare värdet. Ändra denna beräkning så att ni drar ifrån den aktuella transaktionens värde från det tidigare värdet. Detta då två av tre transaktionstyperna, uttag och checkuttag, innebär att man minskar saldot. Ni skall också lägga till två metoder i klassen Transaktion. Dessa skall båda vara tomma och skall se ut så här: public void setchecknr(int cnr){ och public String skrivut(){ return ""; Dessa metoder skall sedan omdefinieras i de klasser som ärver Transaktion, alla de klasserna skall omdefiniera skrivut() men endast klassen Checkuttag skall omdefiniera setchecknr(). Klassen Uttag skall alltså ärva klassen Transaktion. Det enda den skall göra är att omdefiniera metoden skrivut från Transaktion. Metoden skall returnera en sträng som innehåller texten uttag samt storleken och datumet för uttaget på en rad. 3(5)
Klassen Checkuttag skall, förutom att omdefiniera metoden skrivut på samma sätt som i Uttag (fast med texten checkuttag i stället för uttag) även innehålla ett privat attribut som håller reda på checknumret. Alla checkar skall ha ett unikt löpnummer med början på 1. Ni skall också omdefiniera metoden setchecknr, denna metod skall tilldela den aktuella checken sitt löpnummer. I metoden skrivut ska även checknumret skrivas ut. I klassen Insattning skall ni som i tidigare klasser omdefiniera metoden skrivut. Texten skall denna gång tala om att det är en insättning det är frågan om. Ni skall också omdefiniera metoden som räknar ut ny balans. I transaktion drar ni ju numer ifrån värdet av transaktionen. I denna metod skall ni alltså addera transaktionens värde. I klassen bankbok måste ni också göra ändringar. Det är ju bankboken som håller reda på alla transaktioner som görs och det är där vi kan hålla reda på aktuellt checklöpnummer. Ni måste alltså lägga till ett privat attribut som håller aktuellt checklöpnummer samt en metod som ökar värdet varje gång vi frågar efter det. Varje gång ni gör ett checkuttag skall ju detta värde ändras. Metoden getchecklopnr() skall alltså användas när ni vill ha ett nytt checknummer. Ni har ju sedan tidigare en metod som skriver ut alla transaktioner, denna skall inte användas längre. Varje gång ni registrerar en ny transaktion skall ni anropa den transaktionens skrivut-metod. Metoden (skrivut i Transaktion) måste dock finnas kvar men skall vara tom. Bankbok b=new Bankbok(); Transaktion t=new Insattning(); t=new Checkuttag(); t.setchecknr(b.getchecklopnr()); t.setbelopp(40); t.setdatum("20071014"); t=new Uttag(); t.setbelopp(50); t.setdatum("20071021"); t=new Insattning(); t.setdatum("20071025"); t=new Checkuttag(); t.setchecknr(b.getchecklopnr()); t.setbelopp(70); t.setdatum("20071111"); System.out.println("Aktuellt saldo på kontot är "+ b.beraknasaldo()); 4(5)
Steg 4. Detta steg borde vara enkelt om allt ovan är rätt. Ni skall nu anpassa ert program till ett grafiskt gränssnitt. Endast mindre anpassningar skall behöva göras, till exempel radbrytning i utskrifter osv. För att detta steg skall fungera måste ni göra två saker. Ändra main till new KontoSystem(); Kopiera filen GUI15.jar till någon lämplig katalog. Sedan skall ni högerklicka på ert projekt (default package) och välja Build path -> Configure Build Path I det nya fönstret väljer ni fliken Libraries och väl där väljer ni knappen Add External JARs Leta redan på filen GUI15.jar och välj den, sedan trycker ni på ok-knappen och fönstret stängs. Ni har nu i er labb en tråd som heter Referenced Libraries och om ni tittar i den så finns filen GUI15.jar. Nu skall det bara vara att köra er labb igen och den skall nu ha ett enkelt grafiskt gränssnitt. Steg 5. Detta sista steg innebär att ni skall dokumentera er lösning. För en mall för hur dokumentationen skall se ut se it's learning. 5(5)