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

Relevanta dokument
Obligatorisk uppgift: Banksystem

Menyvalen som alltid är numeriska presenteras omgivet av parenteser.

Chapter 4: Writing Classes/ Att skriva egna klasser.

Design av en klass BankAccount som representerar ett bankkonto

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

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.

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

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

Tentamen, EDAA20/EDA501 Programmering

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

Del A (obligatorisk för alla)

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

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

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äsnings 9 - Exceptions, I/O

PROGRAMMERINGSTEKNIK TIN212

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.

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

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.

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Malmö högskola 2008/2009 CTS

PROGRAMMERING-JAVA TENTAMINA

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Mer om klasser och objekt

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

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

Enkla variabler kontra referensvariabel

Objekt och referenser

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

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

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

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

Objekt och klasser - Introduktion

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

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 OOP

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

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

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

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

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

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

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 tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

OOP Objekt-orienterad programmering

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

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

Laboration A Objektsamlingar

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

Tentamen i Programmeringsteknik I, ES,

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

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Tentamen i Programmeringsteknik I

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

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.

TENTAMEN OOP

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

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Tentamen i Programmering

Redovisning av inlämningsuppgifter

Tentamen i Programmeringsteknik MN

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

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

Del A (obligatorisk för alla)

Tentamen i Grundläggande programmering STS, åk 1 fredag

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

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

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

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

Föreläsning 14. Filhantering

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

OOP Objekt-orienterad programmering

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

HI1024 Programmering, grundkurs TEN

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

JAVAUTVECKLING LEKTION 11

OOP Tenta

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

PROGRAMMERING-Java Omtentamina

Tentamen i Grundläggande programmering STS, åk

PROGRAMMERING-Java TENTAMINA

Objektorienterad programmering i Java

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA10 Programmering i Java

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

DAT043 Objektorienterad Programmering

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

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

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

F4. programmeringsteknik och Matlab

Transkript:

Inlämningsuppgift 4 klassen Kund (Customer) Att öva på och förstå ett program med flera samverkande klasser. Redovisning: Uppgiften redovisas i datasal: o Körning av programmet. o Redogöra för vad de olika klasserna gör (metoder, instansvariabler, konstruktorer) och hur de löser uppgiften. Koden skall vara vettigt strukturerad med indentering och kommenterad enligt Javadocstandarden (se föreläsning 8). Javadoc-filerna skall visas vid redovisningen. Problembeskrivning En bekant till dig med namnet Ebbe Röd vill starta en bankrörelse. Tanken är att han bara skall förmedla inlåning och utlåning av 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 ändra namn och adress för kunden. Ebbe själv vet inte mycket om programmering men hans syster Ebba (gift Grön) har nyligen läst programmeringsteknik 1 så han har bett henne om hjälp. Ebba har funderat lite och kommit fram till att börja med ett enklare program som löser det hela för en kund och att man senare kan bygga på programmet med att hantera flera kunder, när man fått det att fungera för en kund. Ebba och Ebbe har tillsammans har de gjort en fallstudie dvs funderat igenom hur programmet skall bära sig åt inför användaren när man bara har en kund. Användaren är alltså en banktjänsteman (dvs till en början bara Ebbe själv). 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 enkla bank, som bara hanterar en kund Kundens namn: Lisa Kundens adress: Storgatan 2 Inga konton finns Ditt val: 2 Konto med nummer 1 skapat Ditt val: 4 Insättning (1) 1-1 0,00 Välj konto (0 för att avbryta): 1 Belopp (0 för att avbryta): 9999 Ditt val: 2 Konto med nummer 2 skapat Ditt val: 4 Insättning (2) 1-2 0,00 Välj konto (0 för att avbryta): 2 Belopp (0 för att avbryta): 100 (2) 1-2 100,00 Ditt val: 5 Uttag (2) 1-2 100,00 Välj konto (0 för att avbryta): 2 Belopp (0 för att avbryta): 200 (2) 1-2 -100,00 Ditt val: 3 (2) 1-2 -100,00 Välj konto (0 för att avbryta): 1 Avsluta konto med nummer 1 Behållningen 9999.0 betalas ut (1) 1-2 -100,00 Ditt val: 6 == Hantera personuppgifter för Lisa (0) Klar. Gå tillbaka. (1) Visa personuppgifter (2) Ändra namn (3) Ändra adress Ditt val: 3 Ny adress: Kungsgatan 14 == Hantera personuppgifter för Lisa (0) Klar. Gå tillbaka. (1) Visa personuppgifter (2) Ändra namn (3) Ändra adress Namn : Lisa Adress: Kungsgatan 14 == Hantera personuppgifter för Lisa (0) Klar. Gå tillbaka. (1) Visa personuppgifter (2) Ändra namn (3) Ändra adress Ditt val: 0 Ditt val: 0 Programmet avslutas Menyvalen som alltid är numeriska presenteras omgivet av parenteser. 2

Några detaljer: 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. Hantering av en kund Efter lite mer funderande har syskonparet Röd kommit fram till följande huvudmeny: Ditt val: Kommentarer till några av alternativen: Lista konton: Kundens konton listas, med kundnummer följt av kontonummer samt saldot. T.ex. (2) 1-2 100,00 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 och om det är negativt skall kunden betala in det. Observera att ett borttaget konto 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. Ta ut: Som föregående punkt men beloppet tas ut. Ä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: Ditt val: 9 Ogitigt val! Ditt val: 0 Programmet avslutas 3

Programdesign Ebba har sagt att det verkar lämpligt att ha klasser för kund, konto och person. Hon tänker exploatera sina produkter internationellt, därför har hon valt engelska namn på klasserna: Customer, Account och Person. Lite tankar om de olika klasserna: Klassen Customer: Denna klass skall 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 Account-objekt, uppgift om hur många konton som kunden verkligen har samt en kontoräknare för att kunna ge konton unika nummer. Det kommer att behövas en metod för att hantera menyn och diverse hjälpmetoder. Ebba har gjort en skiss över hur de olika objekten skall hänga ihop. Customer person cust. Nr. 1 accounts Person name address arrayobjekt Lisa Storgatan 2 Account customer- 1 Number account- 1 Number balance 50 Account customer- 1 Number account- 2 Number balance 10 4

Ebba har skrivit klart en hel del. Klasserna Account och Person är klara. Klassen TestCustomer som bara innehåller en mainmetod för att testa klassen Customer är också klar. Dessutom finns ett skal till klassen Customer. Klassen TestCustomer: // Inlämningsuppgift 4 - normal // En given mainmetod som använder klassen Customer // public class TestCustomer { public static void main ( String[] arg) { System.out.println("Välkommen till Ebberöds enkla bank, \n som bara hanterar en kund"); Person p = Person.makePerson(); // skapa ett personobjekt via denna metod Customer c = new Customer(p,1); c.handle(); System.out.println("Programmet avslutas"); Klassen Account: * Representerar ett bankkonto import java.util.scanner; public class Account { private int customernumber; private int accountnumber; private double balance; * 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); 5

* 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; Klassen Person: * Representerar information om en person import java.util.scanner; public class Person { private String name; private String address; * Parameterlös konstruktor public Person() { this.name = ""; this.address = ""; * Skapar person med angivet namn * @param name Personens namn * @param address Personens adress public Person(String name, String address) { this.name = name; this.address = 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; 6

* 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(" (0) Klar. Gå tillbaka."); 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: "); 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. * Läser namn och adress från standard input public static Person makeperson() { Person p = new Person(); Scanner sc = new Scanner(System.in); System.out.print("Kundens namn: "); p.name = sc.nextline(); System.out.print("Kundens adress: "); p.address = sc.nextline(); return p; Ett skal till klassen Customer: * Ett skal till klassen Customer * import java.util.scanner; public class Customer { private Person person; private int customernumber; //... 7

public Customer(Person person, int customernumber) { this.person = person; this.customernumber = customernumber; public void handle() { int choice; Scanner sc = new Scanner(System.in); while (true) { System.out.println("\n== Hanterar kund " + customernumber + " (" + person.getname() + ")" ); System.out.println(" "); System.out.println(" "); System.out.println(" "); System.out.println(" "); System.out.println(" "); System.out.println(" "); System.out.println(" "); 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: listaccounts(); case 2: makeaccount(); case 3: removeaccount(); case 4: deposit(); case 5: withdraw(); case 6: person.handle(); default: System.out.println("Ogitigt val!"); private void makeaccount() { System.out.println("*** Skapa konto inte implementerad än"); private void removeaccount() { System.out.println("*** Avsluta konto inte implementerad än"); private void listaccounts() { System.out.println("*** Lista konton inte implementerad än"); private void deposit() { System.out.println("*** Insättning inte implementerad än"); private void withdraw() { System.out.println("*** Ta ut implementerad än"); 8

Din uppgift Du skall nu skriva klassen Customer (som skall hantera en kund) så att den passar tillsammans med de givna klasserna enligt fallstudien och den skiss som beskriver hur objekten hänger ihop. Klassen Customer innehåller en array med konton. Om denna blir full ska programmet automatiskt förlänga arrayen utan att användaren behöver göra något. Javadoc-filerna skall visas vid redovisningen Till din hjälp har du de färdiga klasserna Account och Person. den färdiga klassen TestCustomer ett skal till klassen Customer De fyra klasserna finns att hämta på kursens hemsida under uppgift 4. Dessutom skall du Bygga ut klassen Person så att även personens telefonnummer lagras i klassen. Detta innbär att du kompletterar klassen och dess metoder så att telefonnumret kan skrivas ut och ändras via nya menyalternativ. Bygga ut klassen Customer så att man kan få sitt totala tillgodohavande/skuld i banken utskriven. Detta är alltså summan av alla kontons saldo. Det ska finnas ett menyalternativ för att få denna tjänst utförd. Modifiera klassen Customer så att en maximal kreditgräns införs för kunden. Det är alltså en gräns för hur stor nettoskuld (dvs summan av alla saldon) kunden får ha. Det ska finns menyalternativ för att skriva ut och ändra denna gräns. Om kunden nått sin kreditgräns ska det inte gå att ta ut några pengar från banken. Tips! Börja så här: Lägg alla klasser i samma mapp. Kompilera dem. Testkör mainmetoden i klassen TestCustomer för att se vad som händer och vad de givna klasserna klarar av. Bygg sedan på programmet (Customer) stegvis med nya delar (metoder). När programmet inte fungerar som du tänkt dig: Använd DrJava s debugger för att utröna vad som verkligen händer och varför Testa ditt program ordentligt. Testa att allting fungerar utan att du skapar något konto Skapa ett konto och kontrollera att allting fungerar Testa att skapa så många konton att kontoarrayen blir full. Se till att allt fortfarande fungerar Med en full konto array, skapa ett konto till för att se att det fungerar att bygga ut arrayen Ta bort det första kontot i arrayen, testa Ta bort det sista konton i arrayen, testa Ta bort något konto mitt i arrayen, testa 9

10