#include <iostream>
#include <string>
#include <fstream>

using namespace std ;

string pw, name, anrede, knr, pwin ;
int kontonr ;
double kontostand ;

/*
=====================================================================
=====================================================================
Login
=====================================================================
=====================================================================
*/

int login()
{
		
	cout << "Willkommen" << endl << "Bitte geben sie ihre Kontonummer ein:" <<endl ;
	cin >> kontonr ;
	
	return kontonr ;
}

/*
=====================================================================
=====================================================================
Funktion Abheben-Dekalrieren ::::: Implementation: Line 267
=====================================================================
=====================================================================
*/

int abheben () ;

/*
=====================================================================
=====================================================================
Funktion Übereisen-deklarieren
=====================================================================
=====================================================================
*/

int ueberweisen () ;

/*
=====================================================================
=====================================================================
Hauptprgogramm
=====================================================================
=====================================================================
*/

int main()
{


	
	ifstream konto;
	int weiter ;
	
/*
=====================================================================
Bereich Eingabe Kontonr.
=====================================================================
*/
	
	do
	{
		
	
		switch (login())
		{
			
/*
=========================
123456 Tom Muster
=========================
*/
			
		case 123456:
			konto.open("0000.txt", ios::in) ;
			getline (konto, name) ;
			getline (konto, anrede) ;
			getline (konto, pw) ;
			getline (konto, knr) ;
			konto >> kontostand ;
			
			weiter = '1';
			knr = "0000.txt" ;
		
			cout << "Willkommen " <<anrede << name <<endl ;
		
			break ;
	
/*
=========================
654321 Anna Morsch
=========================
*/
		
		case 654321:
			konto.open("0001.txt", ios::in) ;
			getline (konto, name) ;
			getline (konto, anrede) ;
			getline (konto, pw) ;
			getline (konto, knr) ;
			konto >> kontostand ;
		
			weiter = '1' ;
			knr = "0001.txt" ;
		
			cout << "Willkommen " <<anrede << name <<endl ;
		
			break ;
		
/*
=========================
214365 Harald Wink
=========================
*/
		
		case 214365:
			konto.open("0002.txt", ios::in) ;
			getline (konto, name) ;
			getline (konto, anrede) ;
			getline (konto, pw) ;
			getline (konto, knr) ;
			konto >> kontostand ;
		
			weiter = '1' ;
			knr = "0002.txt" ;
		
			cout << "Willkommen " <<anrede << name <<endl ;
		
			break ;
			
/*
=========================
Default
=========================
*/
		
		default:
			cout << "Ungueltige Kontonummer. Eingabe wiederholen:" <<endl;
			weiter='0' ;
		}
			
	}while (weiter=='0') ;
	
/*
=====================================================================
Bereich Passwortabfrage
=====================================================================
*/
	
	
		cout << "Bitte Passwort eingeben. Sie haben 3 Versuche  " <<endl ;
		int versuch=3;
	do
	{
		cin >> pwin ;
		
/*
=========================
Verlassen nach 3 falschen Eingaben
=========================
*/
		
		if (pwin != pw && versuch == 1)
		{
			cout << "passwort falsch. Keine Versuche uebrig. " <<endl ;
			weiter = '0' ;
			return 1 ;
			
		}
		
/*
=========================
Wiederholen: PW-Abfrage 
=========================
*/
		
		else if (pwin != pw && versuch != 1) 
		{
			cout << "Passwort falsch. Bitte erneut eingeben:" <<endl ;
			versuch = versuch - 1 ;
		}
		
		/*
=========================
PW Korrekt: Weiter mit Wahlbereich
=========================
*/
		
		else if (pwin == pw)
		{
			cout << "Passwort akzeptiert." <<endl <<endl ;
			weiter ='1' ;
			
			break ;
		}
	}while (versuch !=0) ;
	
/*
=====================================================================
Wahlbereich Abhebung etc.
=====================================================================
*/
	
		
	cout << "Bitte waehlen sie: " <<endl <<endl << "1: Kontostand abrufen \t\t 2: Ueberweisung taetigen" << endl ;
	cout << "3: Abhebung\t\t 4: Beenden" <<endl ;
	
	int wahl ;
	
	cin >> wahl ;
	
/*
=========================
Wahl 1: Kontostand
=========================
*/

	
	if (wahl == 1)
	{
		
		float kontoabf ;
		cout << "Ihr derzeitiger Kontostand betraegt " << kontostand << " EUR" <<endl ;
	}
	
/*
=========================
Wahl 2:  Überweißung
=========================
*/
	
	else if (wahl == 2)
	{
		ueberweisen() ;
	}
	
/*
=========================
Wahl 3: Abheben
=========================
*/
	
	else if (wahl == 3)
	{
		abheben() ;
	}
	
	
/*
=========================
Wahl 4: Beenden
=========================
*/

	
	else if (wahl == 4)
	{
		return 0 ;
	}
		
/*
=====================================================================
Ende Hauptprogramm
=====================================================================
*/
	
return 3 ;	
}

/*
=====================================================================
=====================================================================
Funktion Abheben
=====================================================================
=====================================================================
*/

int abheben ()
{		
	float betrag;
		
/*
=========================
login
=========================
*/
	
	cout << "Zur Bestaetigung bitte eigene Kundennummer eingeben:" << endl <<endl ;
		
	string KndNr, test ;
	cin >> KndNr ;
	KndNr = KndNr + ".txt" ;
		
/*
=========================
Eingabe: betrag
=========================
*/
	
	cout << "Bitte gewuenschten Betrag eingeben:" << endl ;
	cin >> betrag ;
	
	if (betrag <0)
	{
		cout << "Ungueltige Eingabe. " ;
		cout << "Bitte gewuenschten Betrag eingeben:" << endl ;
		cin >> betrag ;
	}
		
/*
=========================
Funktion-Hauptteil
=========================
*/
	
	/*
=========================
Funktion-Hauptteil :: Lesen
=========================
*/
	
	ifstream konto_lesen(KndNr.c_str()) ;
	
	getline (konto_lesen, name) ;
	getline (konto_lesen, anrede) ;
	getline (konto_lesen, pw) ;
	getline (konto_lesen, knr) ;
	konto_lesen >> kontostand ;
		
	konto_lesen.close() ;
	
	/*
=========================
Funktion-Hauptteil :: Schreiben
=========================
*/
	
	kontostand = kontostand - betrag ;
		
	ofstream konto_schreiben(KndNr.c_str(), ios::trunc) ;
		
	konto_schreiben << name <<endl ;
	konto_schreiben << anrede << endl  ;
	konto_schreiben << pw << endl ;
	konto_schreiben << knr << endl ;
	konto_schreiben << kontostand << endl ;
		
}

/*
=====================================================================
=====================================================================
Funktion Überweisen
=====================================================================
=====================================================================
*/

int ueberweisen()
{
	float betrag ;
	
	cout << "Bitte eigene Kundennummer eingeben:" << endl ;
	string Eg_KndNr ;
	cin >> Eg_KndNr ;
	Eg_KndNr = Eg_KndNr + ".txt" ;
	
	cout << "Bitte Kundennummer des Empfaengers eingeben:" << endl ;
	string KndNr ;
	cin >> KndNr ;
	KndNr = KndNr + ".txt" ;
	
	/*
=========================
Eingabe: betrag
=========================
*/
	
	cout << "Bitte gewuenschten Betrag eingeben:" << endl ;
	cin >> betrag ;
	
	if (betrag <0)
	{
		cout << "Ungueltige Eingabe. " ;
		cout << "Bitte gewuenschten Betrag eingeben:" << endl ;
		cin >> betrag ;
	}
	
	/*
=========================
Funktion-Hauptteil
=========================
*/
	/*
=========================
Funktion-Hauptteil :: Lesen Fremdkonto
=========================
*/
	
	ifstream konto_lesen(KndNr.c_str()) ;
	
	getline (konto_lesen, name) ;
	getline (konto_lesen, anrede) ;
	getline (konto_lesen, pw) ;
	getline (konto_lesen, knr) ;
	konto_lesen >> kontostand ;
		
	konto_lesen.close() ;
	
	/*
=========================
Funktion-Hauptteil :: Schreiben Fremdkonto
=========================
*/
	
	kontostand = kontostand + betrag ;
	
	ofstream konto_schreiben(KndNr.c_str(), ios::trunc) ;
		
	konto_schreiben << name <<endl ;
	konto_schreiben << anrede << endl  ;
	konto_schreiben << pw << endl ;
	konto_schreiben << knr << endl ;
	konto_schreiben << kontostand << endl ;
	
	konto_schreiben.close() ;
	
	/*
=========================
Funktion-Hauptteil :: Lesen Eigenkonto
=========================
*/
	
	ifstream eg_konto_lesen(Eg_KndNr.c_str()) ;
	
	getline (eg_konto_lesen, name) ;
	getline (eg_konto_lesen, anrede) ;
	getline (eg_konto_lesen, pw) ;
	getline (eg_konto_lesen, knr) ;
	eg_konto_lesen >> kontostand ;
		
	eg_konto_lesen.close() ;
	
	/*
=========================
Funktion-Hauptteil :: Schreiben Eigenkonto
=========================
*/
	
	kontostand = kontostand - betrag ;
	
	ofstream eg_konto_schreiben(Eg_KndNr.c_str(), ios::trunc) ;
		
	eg_konto_schreiben << name <<endl ;
	eg_konto_schreiben << anrede << endl  ;
	eg_konto_schreiben << pw << endl ;
	eg_konto_schreiben << knr << endl ;
	eg_konto_schreiben << kontostand << endl ;
	
	eg_konto_schreiben.close() ;
}
