Jeg går og vil meget gerne prøve at lave et eksempel på hvordan at en bankkonto kunne være sat enkelt op, og der skal så være en tilhørende GUImenu som så indeholder punkterne. Jeg har taget et fag omkring det, men da jeg er kommet ind på holdet godt og vel da de andre var halvvejs, betyder det for mit vedkommende at jeg er lidt bagud og derfor ofte har problemer med at forstå det der sker. Det jeg så derfor håber er at der er en som der kan lave det her på en let og enkel måde som jeg kan forstå, altså ikke noget særligt indviklet. Jeg har så opstillet nogle krav og har også eksempler på hvad de andre har lært at lave for ligesom at give et eksempel på hvilket niveau det er jeg snakker om.
Her kommer lige mine krav:
• Programmet skal kunne håndtere og oprette nye bankkonti • Programmet skal have en tilhørende GUI • Programmets GUI skal være enkelt • Programmet kan eventuelt indeholde en tal omregner (Valutakurs omregner)
Og så vil jeg personligt foretrække hvis der kan komme kommentarer ind rundt omkring som forklarer hvad det er som sker.
Hvis dette emne vækker nogen interesse kan jeg desuden maile eksemplerne, og lign. Jeg er desuden helt frisk på selv at være med i denne proces hvis det er krævet, da jeg er sikker på at det blot vil gavne min forståelse. Det er ikke noget der haster og kan derfor godt spredes ud over en lidt længere periode :)
Her er for resten de punkter jeg gerne vil have at den skal indeholde: 1. Vis Konto 2. Opret konti 3. Slet Konto 4. Indsæt penge på konto 5. Hæv penge på konto 6. Vis detaljer for konto 7. Gem Oplysninger 8. Afslut
er der ikke nogen tekniske krav - f. eks., hvilket programmeringssprog der skal bruges, hvilken form for database (eller filer) data skal gemmes i, operativsystem, samt deadline?
Glem spørgsmålet om programmeringssproget, så først nu kategorieren - det er nok lidt sent på dagen ;) Java er jeg desværre ikke så god til at hjælpe dig med, beklager.
Okay altså! Det skal som sagt skrives i Java og skal være sådan at dataen gemmes i en fil efterfølgende. Dette kunne passende bare være en .txt fil.
Her er lige en lidt mere detaljeret opsætning af de punkter: 1. Vis Konto - Viser kontiinformationer, altså de forskellige kontoers Kontonummer, saldo og kontonavn. 2. Opret konti - Opretter ny konto, giver kontoen et kontonummer ( Hvis der for eksempel i forvejen er 3 kontoer i systemet, vil denne næste konto som bliver oprettet så for eksempel få kontonummer 0004) 3. Slet Konto - Slet konto sletter så kontoen ;) Må gerne kræve en form for verifikation, for eksempel at man skal genindtaste koden og så acceptere. 4. Indsæt penge på konto - Indsætter et givent beløb som så bliver lagt oven i den mængde der i forevejen er. Det skal ikke være muligt at indsætte negative beløber. 5. Hæv penge på konto - Hæver et givent beløb fra en konto. Det skal ikke være muligt at hæve et negativt beløb fra kontoen. 6. Rediger Kodeord - ændrer kodeord, kræver at man indtaster det gamle først. 7. Rediger Oplysninger - Redigerer navn på ejer. eventuelt kunne det være fedt også at kunne ændre navnet på sine konti. 8. Afslut - Logger af systemet
Jeg har så ændret punkt 6, da den ligesom gik igen som du også bemærkede Snoop One, og i stedet for en gem oplysninger som vel alligevel bliver gjort efter at man skifter punkt, har jeg tænkt at man så kunne lave en "Rediger Konti" som så var lidt mere aktuel ;)
Slayerz2002 det er vel dig der skal have blod på tanden og ikke os ;0), eftersom det er dit eksamensprojekt... Jeg vil foreslå, at du selv påbegynder opgaven og stiller de spørgesmål du har hen af vejen hvis der er noget du ikke helt er med på (du kan bare gøre det under dette post - behøver ikke at oprette nye).
Grunden til at jeg siger dette er, at der dermed, efter min vurdering, får mere ud af opgaven - du får ikke rigtigt noget ud af at vi/jeg laver den for dig.
Du kan tage udgangspunk i en konto klasse, hvor du opretter en konto og kan udføre transaktioner på den, som f.eks. indsætte penge og hæve penge (helt simpelt uden gui eller noget persistense).
Nu har jeg endelig fået installeret mit Netbeans derhjemme og har så prøvet at lave starten. Jeg er som sagt ikke særlig god til programmering, og har derfor ikke den store ide om hvor jeg så skal starte når jeg vil begynde på min main.
Det ovenstående har jeg lavet sammen med en ven, og han har så sagt at jeg skulle importere en masse "private" data, som så skulle gøres i en fil for sig selv. Han har så passende kaldt den Account, da den indeholder al den private data såsom pinkode, saldo osv.
Jeg har så et eksempel på hvordan sådan en ser ud liggende, der så giver mig en ide om hvordan at det fungerer,
public static void main(String... args) { new KontoEksempel().printMenu(); Scanner sc = new Scanner(System.in); int i = sc.nextInt(); //check at det valgte tal er gyldigt og udføre valget... System.out.println("Du valgte nummer "+i); }
Ja det var en god idé! Havde slet ikke tænkt over hvad der nu skulle ske hvis en bruger for eksempel fik den ide at trykker '0' eller '9'. Når jeg så skal have disse punkter til at udføre en reel funktion og ikke blot være et stykke tekst, skal jeg så gøre det i en ny Java klasse, eller bør jeg holde det hele samlet i én?
For resten sidder jeg med det problem at jeg hjemme hos mig ikke har min cs1.Keyboard, som jeg har der hvor jeg nu bliver undervist.. Følger den med i programmet, men ligger bare et andet sted? Eller hvor skal jeg hente den?
Opgavens niveau skal ikke ligge særlig højt :) Det er på begynderniveau, som det sikkert også kan fornemmes ;) Det er også derfor jeg har søgt hjælp her, da jeg på det niveau kun har få timer om ugen hvor jeg har mulighed for at have direkte kontakt med min lærer der så kan hjælpe mig i sving, når jeg endnu engang sidder og går i stå på grund af manglende viden. Dette skyldes som sagt at jeg er startet et halvt år inde i faget og derfor er der mange ting som jeg kun har fået halvdelen af med eller kun hørt lidt om. Så egentlig er det kun min GUI, som jeg har en nogenlunde styr på, altså ikke særlig meget programmering når man tæller det op.
Model komponent (der i ligger konto klassen) Controller komponent (der i ligger konto controller klassen der har til ansvar at udføre ændringer på konto'en samt sørge for persistens - dvs. gemme ud i fil eller database eller hvad du nu helst vil) Gui komponent (indeholder de klasser der har ansvaret for det grafiske)
På denne måde får du en naturlig opdeling af dine klasser iht. deres ansvarsområder idet du placere alle dem med samme ansvarsområde i samme pakker (packages).
Okay hmm, jeg kan kun finde lidt ud af det med at starte på controller komponent klassen, så det har jeg prøvet på... Så ved jeg ikke rigtig med resten, der tror jeg nok bare at jeg kommer halvt til at kigge på fra sidelinjen. Men i hvert fald har jeg prøvet mig ad med det med den controller komponent klasse, for at se hvordan at det kommer til at se ud. Jeg er så endt ud med bare at definere de forskellige ting, da det var det jeg sådan lige umiddelbart havde en ide om hvordan skulle gøres. En ven har så efterfølgende set på det for at se om jeg har lavet helt gal i den, men han tror også at det er nogenlunde rigtigt.
/** Controller Komponent klassen der indeholder alle informationer om * vores konti */
public class Controllerkomponent { private int pinkode, kontonummer; private double saldo; private String kontoindehaver; private Date oprettelsesdato; private DecimalFormat justering;
public Controllerkomponent() { pinkode = 0; kontonummer = 0; saldo = 0.0; kontoindehaver = "Ingen"; oprettelsesdato = new Date(); justering = new DecimalFormat("###,###"); }
public void insertMoney(double penge) { saldo += penge; }
public double queryBalance() { return saldo; }
public void setName(String navn) { kontoindehaver = navn; }
public String queryName() { return kontoindehaver; }
public void setAccountNumber(int number) { kontonummer = number; }
public int queryAccountNumber() { return kontonummer; }
Hmm, sidder lige og kigger lidt på det. Når jeg så har lavet det ovenstående, så gælder det vel egentlig kun for en enkelt konto? Hvis jeg så skal have det til så det foregår for hver konto, så skal det vel ændres lidt...?
Jeg er fuldstændig enig med Arne_v... Du skal have en konto klasse som indeholder de elementer du har i din nuværende Controllerkomponent også skal du have en bank klasse som så er din kontroller.
public boolean equals(Object o){ if(!(o instanceof Konto)){ throw new IllegalArgumentException("Sammenligning foretages kun med objekter af typen Konto"); } Konto test = (Konto) o; return (test.queryAccountNumber() == kontonummer) && (test.queryName().equals(kontoindehaver)); }
public int hashCode(){ return kontonummer + kontoindehaver.hashCode(); } }
/** * Bank klassen har ansvar for alle kontier i systemet for denne bank. */ public class Bank {
private String navn; private HashSet<Konto> kontoSamling; private int kontoNummer; private static Random pinkodeGenerator = new Random(); public Bank(String navn){ this.navn = navn; kontoSamling = new HashSet<Konto>(); kontoNummer = 0; }
public Konto createNewAccount(int saldo, String kontonavn){ Konto nyKonto = new Konto(pinkodeGenerator.nextInt(),kontoNummer, saldo,kontonavn); kontoNummer++; kontoSamling.add(nyKonto); return nyKonto; }
public Collection<Konto> findKontoFraNavn(String kontonavn){ //implementere denne metode selv } public Collection<Konto> findKontoFraNummer(int kontoNummer){ //implementere denne metode selv } //implementere de resterende metoder har brug for.... }
Jeg har efter noget bøvl kigget lidt på koden med en ven, der så siger at jeg nok skal lave de metoder ved hjælp af ngoet gejl med en iterator eller noget, da det er lavet i et hashset... Jeg nåede dog ikke så langt og er helt på bar bund med resten. Dog er jeg nået lidt på min GUI, som jeg som sagt regner med at kunne klare forholdsvis selv, men resten kræver dog noget mere hjælp :)
Her er den metode vi kiggede lidt på. Tror bare jeg dropper den anden da jeg ikek ved hvordan at jeg skal gøre det.
Er det helt hen i vejret? public Collection<Konto> findKontoFraNavn(String kontonavn){
boolean contains; iterator it; it = kontoSamling.iterator();
while ( it.hasNext()) { Konto k = (Konto)it.next(); boolean contains(Object o); }
uhh altså så vidt jeg forstår det gemmer den alle konti i "HashSets" i "kontosamlingen". Hvis jeg så vil kunne finde en af disse konti, skal jeg have en metode til at gøre det med. Den metode skal så på en eller anden måde kunne finde kontonavnet, som så er gemt som et hashset. Regner med at metoden skal bruges til når man for eksempel skal ind under punktet "Vis Konti". Så kan den så finde kontoens data, ved at se på hvem der er logget ind, og så finde den data som hører til det navn.
ja det du har brug for, er at finde de konto'er med det givne navn fra hashsettet. Hashsettet er bare en databag til at opretholde samling af konto'er for banken. Så du skal søge hashsettet igennem og hente hvert konto objekt ud og checke på dets navn for at se om en given match er tilstede. For eksempel:
public Collection<Konto> findKontoFraNavn(String kontonavn){ List<Konto> found = new ArrayList<Konto>(); for(Konto k : kontoSamling){ if(k.queryName().equals(kontonavn)){ found.add(k); } } return found; }
Men du skal huske på, at et navn ikke entydigt bestemmer konto'en... det gør kontomummeret. Så du kan godt få flere konto'er når der søges på f.eks. "Jens Jensen";
Da jeg ikke har lavet min GUIklasse færdig endnu, ville det være tåbeligt at smide en del af det ud på nettet. Derimod så har jeg fået rettet det jeg nu kunne i den enkeltvise kontoklasse, kontrolklassen og "konto", men jeg er dog i mine syv sind om de hænger helt sammen så at sige, og desuden,har jeg nogle steder røde streger som jeg selv er ude af stand til at fjerne, men hvis jeg nu uploader dem og smider et link, så ville det være dejligt om du/i lige gad at tjekke det igennem og sigef hvor fejlene ligger, eller måske uploade det efter at det er blevet rettet. Link kommer lige om lidt.
Her er linket. ZIP-filen indeholder så de tre JAVA klasser, Konto, KontoEnkeltvis og KontrolKlasse. Om deres navn bør ændres ligeså er op til dig/jer, da jeg altid kan ændre det bagefter for bedst at kunne overskue det senere hen :)
hvad er dit konkrete problem? I de fleste tilfælde har du ikke importeret de forskellige klasser du benytter! Det kan du få eclipse til ved (ctrl + shift + O) eller højre klik på filen og vælg source og vælg organize imports. Hvad har konto klassen som ansvar og hvad har kontrolklassen som ansvar?
Desuden kan du i eclipse holde musen over den røde linie og der vil komme en fejlbesked der oftest hjælper dig på rette vej... F.eks. ved linie new Konto(pinkodeGenerator.nextInt(),kontoNummer, saldo,kontonavn); i KontrolKlasse får jeg følgende besked: The constructor Konto(int, int, int, String) is undefined
Heh, jeg sidder og bruger NetBeans 4.0, er det et program du kender til? I så fald, ved du om det er muligt at gøre det deri ligeså?
Jeg har ofte svært ved at fortolke de beskeder som den skriver mig de steder hvor jeg laver fejl. For eksempel ville jeg ikke vide hvordan at jeg skal definere min constructor i det tilfælde du viser, eller hvorfor den skriver 3 gange integer og én gang string i parentés.
Aha ok... Det betyder, at den kostruktor du kalder: new Konto(pinkodeGenerator.nextInt(),kontoNummer, saldo,kontonavn); ikke er definieret i konto klassen til, at have fire argumenter af typerne (int, int, int, String) idet din pinkode, kontonummer, saldo er int typer og kontonavn er af typen String. Så den siger bare, at du ikke kan oprette et objekt af typen Konto med de angivne typer som parameter idet konstruktoren er udefineret.
Okay her kommer lige den samlede fejl liste når jeg har compilet:
KontrolKlasse.java C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:27: cannot find symbol symbol : constructor Konto(int,int,int,java.lang.String) location: class Projekt.Konto Konto nyKonto = new Konto(pinkodeGenerator.nextInt(),kontoNummer, saldo,kontonavn); C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:34: cannot find symbol symbol : class List location: class controller.KontrolKlasse List<Konto> found = new ArrayList<Konto>(); C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:34: cannot find symbol symbol : class ArrayList location: class controller.KontrolKlasse List<Konto> found = new ArrayList<Konto>(); C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:36: cannot find symbol symbol : method queryName() location: class Projekt.Konto if(k.queryName().equals(kontonavn)){ C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\Konto.java:84: cannot find symbol symbol : class Scanner location: class Projekt.Konto Scanner sc = new Scanner(System.in); C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\Konto.java:84: cannot find symbol symbol : class Scanner location: class Projekt.Konto Scanner sc = new Scanner(System.in); 6 errors BUILD FAILED (total time: 2 seconds)
Konto.java C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\Konto.java:84: cannot find symbol symbol : class Scanner location: class Projekt.Konto Scanner sc = new Scanner(System.in); C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\Konto.java:84: cannot find symbol symbol : class Scanner location: class Projekt.Konto Scanner sc = new Scanner(System.in); 2 errors BUILD FAILED (total time: 0 seconds)
C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:27: cannot find symbol symbol : constructor Konto(int,int,int,java.lang.String) location: class Projekt.Konto Konto nyKonto = new Konto(pinkodeGenerator.nextInt(),kontoNummer, saldo,kontonavn);
- ifl. java kan du ikke oprettet et konto objekt med (int,int,int, String) som parametertyper. Er du sikker på at den eksister?
C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:34: cannot find symbol symbol : class List location: class controller.KontrolKlasse List<Konto> found = new ArrayList<Konto>(); - Kan ikke finde List klassen. Er den importeret?
C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:34: cannot find symbol symbol : class ArrayList location: class controller.KontrolKlasse List<Konto> found = new ArrayList<Konto>(); - Den giver vel sig selv ifl. ovenstående....
C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:36: cannot find symbol symbol : method queryName() location: class Projekt.Konto if(k.queryName().equals(kontonavn)){ - Kan ikke finde metoden queryName() i konto klassen.
C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\Konto.java:84: cannot find symbol symbol : class Scanner location: class Projekt.Konto Scanner sc = new Scanner(System.in); - Er den importeret?
Det fremgår af fejlbeskeden... C:\Documents and Settings\Administrator\Dokumenter\Bankkonto\Projekt\KontrolKlasse.java:34: cannot find symbol symbol : class List <------!!!!! Fremgår her !!!!!!! location: class controller.KontrolKlasse List<Konto> found = new ArrayList<Konto>();
Så kan du evt. vælge index øverst i midten og slå dine klasser op iht. navn. Der får også deres dokumentationer samt de pakker de tilhører. F.eks. for List klassen vil du se, at den befinder sig i java.util. http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.