package testprogramm;
import java.beans.*; // fuer die XML-Speicherung
import java.io.*; // fuer das Speichern und Laden in / von Dateien
import java.util.*; // fuer ArrayLists und Iterator
public class TestProgramm implements Serializable{
private String logInkontonummer;
private ArrayList<Konto> kontenliste;
private String einlesen;
private String einlesen2;
final static int FELDLAENGE = 14;
Scanner scanner = new Scanner(System.in);
private final static String ENDE = "0";
private final static String KONTOANLEGEN = "1";
private final static String KONTOSTANDPRUEF = "2";
private final static String KONTENANZEIGEN = "3";
private final static String SPEICHERN = "4";
private final static String LADEN = "5";
private final static String GUTHABENANZEIGEN = "1";
private final static String ÜBERWEISUNG = "2";
private final static String AUSLOGGEN = "3";
public TestProgramm(){
this.kontenliste = new ArrayList<>();
}
public static void main(String[] args) throws IOException{
TestProgramm tp = new TestProgramm();
tp.load();
}
public void einlesen(){
System.out.print("Eingabe: ");
einlesen = scanner.next();
}
public void einlesen2(){
System.out.print("Eingabe: ");
einlesen2 = scanner.next();
}
public void menueEinlesen(){
einlesen();
switch (einlesen){
case KONTOANLEGEN: einlesen = null; kontoEinrichten(); break;
case KONTOSTANDPRUEF: einlesen = null; logIn(); break;
case KONTENANZEIGEN: einlesen = null; kontenAnzeigen(); menueAufbau(); break;
case LADEN: einlesen = null; load(); break;
case SPEICHERN: einlesen = null; save(); System.out.println("\n** Daten wurden gesichert **\n"); menueAufbau(); break;
case ENDE: einlesen = null; Ende(); break;
default: einlesen = null; System.out.println("Falsche Eingabe"); menueAufbau();
}
}
public void printLinksbuendig(String s)
{
System.out.print(baueLinksbuendigenString(s, FELDLAENGE));
}
public void printLF()
{
System.out.println();
}
public void printLinieLF(int anzahlFelder)
{
/* Besonderheit: hier Nutzung des StringBuilders statt direkt mit String zu arbeiten.
* Ist sparsamer im Umgang mit Speicher.
*/
StringBuilder s = new StringBuilder();
int laenge = anzahlFelder*(FELDLAENGE+3);
for (int i=1;i<=laenge;i++)
{
s=s.append("-");
}
System.out.println(s);
}
public String castInt2String(int meinInt)
{
return Integer.toString(meinInt);
// die obige Zeile ist von der Funktion identisch zu
// Integer i = new Integer(meinInt);
// return i.toString();
}
public String castDouble2String(double meinDouble)
{
// hier nutzen wir die Format-Anweisung der Klasse String um die Nachkommastellen zu bestimmen etc.
return String.format("%,8.2f", meinDouble);
}
public void kontenAnzeigen(){
printLF();
String s;
printLinksbuendig("Konto-ID");
printLinksbuendig("Vorname");
printLinksbuendig("Nachname");
printLinksbuendig("Guthaben");
printLinksbuendig("Kontonummer");
printLF();
printLinieLF(5); // Trennlinie für 6 Felder anzeigen
Iterator <Konto>iter = kontenliste.iterator();
while(iter.hasNext()){
Konto i = iter.next();
s = castInt2String(i.getKontoID());
printLinksbuendig(s+".");
s = i.getVorname();
printLinksbuendig(s);
s = i.getNachname();
printLinksbuendig(s);
s = castDouble2String(i.getStartguthaben());
printLinksbuendig(s+" €");
s = castInt2String(i.getKontonummer());
printLinksbuendig(s);
printLF();
}
printLF();
}
public void menueAufbau(){
System.out.println(" ______________________________________________");
System.out.println("|***************** Hauptmenü ******************|");
System.out.println("|______________________________________________|");
System.out.println("|| Ihre Optionen ||");
System.out.println("------------------------------------------------");
System.out.println("Optionen:\n1 - Konto anlegen\n2 - Einloggen\n3 - Konten anzeigen\n4 - Speichern in eine XML-Datei\n5 - Laden von einer XML-Datei \n0 - Beenden");
menueEinlesen();
}
public void kontoEinrichten(){
int kontoID = neuKontoID();
String vorname = neuVorname();
String nachname = neuNachname();
String kontonummer = neuKontonummer();
String passwort = neuPasswort();
String startguthaben = neuStartguthaben();
Konto konto = new Konto(kontoID, nachname, vorname, Integer.valueOf(kontonummer), passwort, Double.valueOf(startguthaben));
kontenliste.add(konto);
System.out.println("Ihr Konto wurde eingerichtet.\nIhre KontoID lautet: " + kontoID);
menueAufbau();
}
public String neuStartguthaben(){
String startguthaben;
do{
System.out.print("Wieviel Startguthaben wollen sie einzahlen: ");
startguthaben = scanner.next();
} while(!startguthaben.matches("[0-9]+"));
return startguthaben;
}
public String neuPasswort(){
String passwort;
System.out.print("Wählen sie ein Passwort: ");
passwort = scanner.next();
return passwort;
}
public String neuNachname(){
String nachname;
do{
System.out.print("Geben sie Ihren Nachnamen ein: ");
nachname = scanner.next();
} while (!nachname.matches("[a-zA-Z]+"));
return nachname;
}
public String neuVorname(){
String vorname;
do{
System.out.print("Geben sie Ihren Vornamen ein: ");
vorname = scanner.next();
} while (!vorname.matches("[a-zA-Z]+"));
return vorname;
}
public String neuKontonummer(){
String kontonummer="";
try{
do{
System.out.print("Wählen sie eine 6-stellige Kontoummer: ");
kontonummer = scanner.next();
} while(!String.valueOf(kontonummer).matches("[1-9][0-9]{5}"));
for(int i = 0; i<kontenliste.size() ;i++){
if(kontenliste.get(i).getKontonummer() == (Integer.valueOf(kontonummer))){
System.out.println("Die Kontonummer '"+kontonummer+"' ist vergeben"); kontonummer = neuKontonummer();
} }
} catch(NumberFormatException nf) {neuKontonummer();
} return kontonummer;
}
public int neuKontoID(){
int kontoID=0;
for(int i = 0; i < kontenliste.size()+1; i++){
for(int t=0; t < kontenliste.size(); t++ ){ if(kontenliste.get(t).getKontoID()!=i){ kontoID =i; }
}
} return kontoID;
}
public void sortKontoID() {
Konto h;
for (int i = 0; i < kontenliste.size() - 1; i++) {
for (int j = i + 1; j < kontenliste.size(); j++) {
if (kontenliste.get(i).getKontoID() > kontenliste.get(j).getKontoID()) {
h = kontenliste.get(j);
kontenliste.set(j, kontenliste.get(i));
kontenliste.set(i, h);
}
}
}
}
public void guthabenZeigen(){
for(int i = 0; i<kontenliste.size(); i++){
if(kontenliste.get(i).getKontonummer()==(Integer.valueOf(logInkontonummer))){
System.out.println("\nIhr Guthaben beträgt: "+kontenliste.get(i).getStartguthaben()+" €"); logInMenue();
}
}
}
public void saveDataToXML() throws IOException {
XMLEncoder o = new XMLEncoder(new FileOutputStream("TestProgramm.xml"));
o.writeObject("TestProgramm");
o.writeObject(this);
o.close();
}
public void save() {
try
{
saveDataToXML();
}
catch(java.io.IOException ioe)
{
ioe.printStackTrace();
}
}
public Object loadDataFromXML() throws IOException {
XMLDecoder o = new XMLDecoder(new FileInputStream("TestProgramm.xml"));
o.readObject();
Object obj = o.readObject();
o.close();
return obj;
}
private void load() {
try {
TestProgramm neu = (TestProgramm) loadDataFromXML();
System.out.println("\n** Daten wurden geladen **\n");
menueAufbau();
} catch(java.io.IOException ioe)
{
ioe.printStackTrace();
}
}
public void Ende(){
do{
System.out.println("Wollen sie ihre Daten vorher sichern? (ja/nein)");
einlesen = scanner.next();
if(einlesen.toLowerCase().equals("ja".toLowerCase())){save(); System.out.println("Daten wurden gesichert. Programm wird beendet"); einlesen = null; System.exit(0);}
else if (einlesen.toLowerCase().equals("nein".toLowerCase())){System.out.println("Programm wird beendet"); einlesen = null; System.exit(0);}
}while(!einlesen.toLowerCase().matches("ja") || !einlesen.toLowerCase().matches("nein"));
}
public String baueLinksbuendigenString(String s, int laenge)
{
// wir entfernen Leerzeichen am Anfang und Ende des Strings
s.trim();
// falls der String zu lang ist, kuerzen wir ihn
if (s.length() > laenge)
{
s.substring(0, laenge);
}
else
{
int differenz = (laenge - s.length());
for (int i=1;i<=differenz;i++) s=s+" ";
}
return s+" | ";
}
public ArrayList getKontenliste()
{
return this.kontenliste;
}
public void setKontenliste(ArrayList<Konto> liste)
{
this.kontenliste = liste;
}
private void logIn(){
do{
System.out.print("Geben sie ihre Kontonummer ein: ");
einlesen(); } while(!einlesen.matches("[1-9][0-9]{5}"));
for(int i=0 ; i<kontenliste.size(); i++){
if (kontenliste.get(i).getKontonummer()==(Integer.valueOf(einlesen))){
System.out.print("Geben sie ihr Passwort ein: ");
einlesen2();
if(kontenliste.get(i).getPasswort().equals(einlesen2)){
this.logInkontonummer=einlesen;
einlesen = null;
einlesen2 = null;
logInMenue();
}
System.out.println("Passwort ist falsch"); einlesen = null; einlesen2 = null; menueAufbau();
}
} System.out.println("Ein Konto mit der Kontonummer: "+ einlesen +" existiert nicht."); einlesen = null; menueAufbau();
}
private void logInMenue(){
for(int i = 0 ; i< kontenliste.size(); i++){
if(kontenliste.get(i).getKontonummer()==Integer.valueOf(logInkontonummer))
{
System.out.println("_______________________________________________________________");
System.out.println("***** Kontoinhaber: "+ kontenliste.get(i).getVorname() +" "+ kontenliste.get(i).getNachname() +" ist eingeloggt *****");
}}
System.out.println("_______________________________________________________________");
System.out.println("\nIhnen stehen folgende Anwendungen zur Auswahl\n1. Guthaben anzeigen\n2. Überweisung tätigen\n3. Ausloggen\n0. Programm beenden\n");
einlesen();
switch (einlesen) {
case GUTHABENANZEIGEN: einlesen = null; guthabenZeigen(); break;
case ÜBERWEISUNG: einlesen = null; break;
case AUSLOGGEN: einlesen = null; ausloggen(); break;
case ENDE: einlesen = null; Ende(); break;
default: einlesen = null; System.out.println("Falsche Eingabe"); logInMenue();
}
}
private void ausloggen(){
do{ System.out.println("Wollen sie sich wirklich ausloggen (ja/nein)?");
System.out.print("Eingabe: ");
einlesen = scanner.next();
if(einlesen.toLowerCase().matches("ja".toLowerCase())){
this.logInkontonummer = null;
einlesen=null;
menueAufbau();
} else if(einlesen.toLowerCase().matches("nein".toLowerCase())){
einlesen = null;
logInMenue();
}
} while(!einlesen.toLowerCase().matches("nein") || !einlesen.toLowerCase().matches("ja"));
}
}