Guten Tag,
hatte für die Schule die simple Aufgabe, einen Ticketautomaten ohne GUI zu modellieren, also nur in der Konsole.
Wollte nun fragen, ob mir jemand Verbesserungsmaßnahmen zeigt, sofern vorhanden, bitte?
Hier mal mein Quellcode:
Klasse Fahrschein:
Klasse Konto:
Klasse Automat:
Soweit so gut, hoffe auf Hilfe =)
MfG
hatte für die Schule die simple Aufgabe, einen Ticketautomaten ohne GUI zu modellieren, also nur in der Konsole.
Wollte nun fragen, ob mir jemand Verbesserungsmaßnahmen zeigt, sofern vorhanden, bitte?
Hier mal mein Quellcode:
Klasse Fahrschein:
Code:
public class Fahrschein
{
private int preis;
private String name;
public Fahrschein(String name)
{
if(name.equals("AB"))
{
preis = 210;
this.name = "AB";
}
if(name.equals("BC"))
{
preis = 250;
this.name = "BC";
}
if(name.equals("ABC"))
{
preis = 280;
this.name = "ABC";
}
}
public void drucken()
{
System.out.println("\"Ich bin eine Fahrkarte vom Typ " + name + " und koste " + preis + " cent.\"");
}
public String getName()
{
return name;
}
public int getPreis()
{
return preis;
}
}
Klasse Konto:
Code:
public class Konto
{
int gesamtGuthaben = 1000000;
/** Gibt den in den Parametern angegebenen Geldbetrag,
* sofern er gueltig ist, aus.
*/
public int geldAbheben(int x)
{
int abgehoben = 0;
switch(x)
{
case 1:
abgehoben = 1;
gesamtGuthaben -= 1;
break;
case 2:
abgehoben = 2;
gesamtGuthaben -= 2;
break;
case 5:
abgehoben = 5;
gesamtGuthaben -= 5;
break;
case 10:
abgehoben = 10;
gesamtGuthaben -= 10;
break;
case 20:
abgehoben = 20;
gesamtGuthaben -= 20;
break;
case 50:
abgehoben = 50;
gesamtGuthaben -= 50;
break;
case 100:
abgehoben = 100;
gesamtGuthaben -= 100;
break;
case 200:
abgehoben = 200;
gesamtGuthaben -= 200;
break;
default:
abgehoben = 1;
gesamtGuthaben -= 1;
break;
}
return abgehoben;
}
public int getKontostand()
{
return gesamtGuthaben;
}
}
Klasse Automat:
Code:
/** Fahrkartenautomat v.1.0
* @author Marcel Koseler und Dominic Belza
* @version 10.01.09
*/
import java.util.*;
public class Automat
{
private int eingeworfenesGeld;
private int schonBezahlt = 0;
private int restbetrag;
private int wechselgeld;
private static int anzahlTickets = 1;
private Fahrschein f;
static Konto konto = new Konto();
Scanner eingabe = new Scanner(System.in);
/** Setze alle Werte auf 0/null zurueck*/
public void zuruecksetzen()
{
f = null;
schonBezahlt = 0;
restbetrag = 0;
eingeworfenesGeld = 0;
}
/** Pruefe, ob eine weitere Fahrkarte erwuenscht ist*/
public void weitereFahrkarte()
{
try
{
System.out.println("\nWollen sie eine weitere Fahrkarte kaufen?\nJa/Nein");
while(eingabe.hasNext())
{
String auswahl = eingabe.next();
if(auswahl.equalsIgnoreCase("Nein"))
{
anzahlTickets -= 1;
eingabe.close();
System.out.println("\nBVG wuenscht ihnen weiterhin einen schoenen Tag.");
System.exit(0);
}
else if(auswahl.equalsIgnoreCase("Ja"))
{
break;
}
else
{
System.out.println("Bitte Ja oder Nein eingeben.");
}
}
}
catch (InputMismatchException e)
{
System.out.println("Bitte mit Ja oder Nein antworten.");
eingabe.nextLine(); // "BUG" Der Reader springt nicht in die naechste Zeile, darum der Befehl
}
}
/** Wähle die Art des Tickets(1, 2 oder 3) und erstelle ein Objekt der jeweiligen Ticketart.
* Gebe in der Konsole die gewählte Art und den Preis aus.
* Entspricht die Eingabe nicht 1,2 oder 3, so gebe aus, dass es sich um eine ungültige Angabe handelt.
*/
public void ticketAnfordern()
{
System.out.println("Guten Tag, wählen sie ihr Ticket:\n1.AB für 210 cent.\n2.BC für 250 cent.\n3.ABC für 280 cent.");
while(f == null)
{
try
{
int ticketArt = eingabe.nextInt();
if(ticketArt == 1)
{
f = new Fahrschein("AB");
}
else if(ticketArt == 2)
{
f = new Fahrschein("BC");
}
else if(ticketArt == 3)
{
f = new Fahrschein("ABC");
}
else
{
System.out.println("Keine gültige Angabe. Bitte geben sie 1,2 oder 3 an.");
}
}
catch(InputMismatchException e)
{
System.out.println("Keine gültige Angabe. Bitte geben sie 1,2 oder 3 an.");
eingabe.nextLine(); // "BUG" Der Reader springt nicht in die naechste Zeile, darum der Befehl
}
}System.out.println("\nSie haben " + f.getName() + " gewählt. Bitte bezahlen sie " + f.getPreis() + " cent.");
}
/**
* Fordere ein Ticket an.
* Gebe die zu bezahlende Menge in der Konsole aus. Warte dann auf Eingaben.
* Entspricht die Eingabe dem zu bezahlenden Preis, "drucke die Fahrkarte" und beende das Programm. Achte dabei auf gueltige Betraege.
* Gebe den zu bezahlenden Restbetrag aus, wenn zu wenig bezahlt wurde.
* Ist die Eingabe höher als der zu bezahlende Preis, "drucke die Fahrkarte", "gebe das Wechselgeld in gueltigen Betragen aus", und beende das Programm.
*/
public void systemAblauf()
{
ticketAnfordern();
while(eingabe.hasNext())
{
int eingabeSpeicher = eingabe.nextInt();
if(eingabeSpeicher == 1 || eingabeSpeicher == 2 || eingabeSpeicher == 5 || eingabeSpeicher == 10 || eingabeSpeicher == 20 || eingabeSpeicher == 50 || eingabeSpeicher == 100 || eingabeSpeicher == 200)
{
eingeworfenesGeld = eingabeSpeicher;
schonBezahlt = schonBezahlt + eingeworfenesGeld;
restbetrag = f.getPreis() - schonBezahlt;
if (schonBezahlt < f.getPreis())
{
System.out.println("Noch zu bezahlen: " + restbetrag + " cent");
}
if (schonBezahlt > f.getPreis())
{
wechselgeld = schonBezahlt - f.getPreis();
System.out.println("Ihr Wechselgeld:");
int i = 0;
while(wechselgeld > 0)
{
if(wechselgeld >= 200)
{
konto.geldAbheben(200);
wechselgeld -= 200;
System.out.println("200 cent");
}
if(wechselgeld >= 100)
{
konto.geldAbheben(100);
wechselgeld -= 100;
System.out.println("100 cent");
}
if(wechselgeld >= 50)
{
konto.geldAbheben(50);
wechselgeld -= 50;
System.out.println("50 cent");
}
if(wechselgeld >= 20)
{
konto.geldAbheben(20);
wechselgeld -= 20;
System.out.println("20 cent");
}
if(wechselgeld >= 10)
{
konto.geldAbheben(10);
wechselgeld -= 10;
System.out.println("10 cent");
}
if(wechselgeld >= 5)
{
konto.geldAbheben(5);
wechselgeld -= 5;
System.out.println("5 cent");
}
if(wechselgeld >= 2)
{
konto.geldAbheben(2);
wechselgeld -= 2;
System.out.println("2 cent");
}
if(wechselgeld >= 1)
{
konto.geldAbheben(1);
wechselgeld -= 1;
System.out.println("1 cent");
}
}
f.drucken();
break;
}
if (schonBezahlt == f.getPreis())
{
f.drucken();
break;
}
}
else
{
System.out.println("BIEP BIEP! FALSCHGELD! Bezahlen sie bitte mit echtem Geld!");
}
}
}
public static void main(String[] args)
{
Automat a = new Automat();
while(anzahlTickets == 1)
{
if (konto.getKontostand() >= 210)
{
a.systemAblauf();
a.zuruecksetzen();
a.weitereFahrkarte();
}
else
{
System.out.println("Fahrkartenautomat ist außer Betrieb");
anzahlTickets -= 1;
}
}
}
}
Soweit so gut, hoffe auf Hilfe =)
MfG