program kontabankowe;

type
	Tdata = record
		dzien: 1..31;   // zmienic mozna na integery
		miesiac: 1..12;
		rok: integer;
	end;

	Toperacja = record
		rodzajoperacji:  string;
		data: Tdata;
		kwota: real;
	end;

	tabOper=array [1..10] of Toperacja;

	Tkonto = record
		nazwisko: string[20];
		imie: string[20];
		numerkonta: integer;
		waluta: string[4];
		saldo: real;
		historia:tabOper;
		liczbaoperacji: integer;
	end;

	TabLista=array[1..20] of Tkonto;

procedure ZalozKonto(var lista:TabLista; il:integer);
var
	odp:char;
begin
	il:=il+1;
	lista[il].liczbaoperacji:=0;
	writeln('Podaj imie: ');
	readln(lista[il].imie);
	writeln('Podaj nazwisko: ');
	readln(lista[il].nazwisko);
	writeln('Podaj nr konta: ');
	readln(lista[il].numerkonta);
	writeln('Podaj walute w ktorej ma byc prowadzony rachunek <PLN/EURO>');
	readln(lista[il].waluta);
	writeln('czy chcesz dokonac wplaty przy zakladaniu konta? <t/n>');
	readln(odp);
	if odp='t' then
	begin
		writeln('Podaj kwote wplaty: ');
		readln(lista[il].saldo);
		writeln(lista[1].saldo);
	end else
	begin
		lista[il].saldo:=0;
	end;
end;

{
procedure Wczytaj(var lista:TabLista; var il:integer);
var p:file of konto;
begin
	assign(p,'konta.dat');
	reset(p);
	repeat
		il:=il+1;
		read(p,a[il]);

	until eof(p);
	close(p);
end;
}

procedure Dane(lista:TabLista; il:integer);
var
	i:integer;
	c:boolean;
	odp:integer;
begin
	writeln('Podaj numer konta, ktorego dane chcesz zobaczyc: ');
	readln(odp);
	c:=false;
	for i:=1 to il do begin
		if (lista[i].numerkonta=odp) then begin
			writeln('numer konta:  ', lista[i].numerkonta);
			writeln('Imie wlasciciela:  ',lista[i].imie);
			writeln('nazwisko wlasciciela:  ',lista[i].nazwisko);
			writeln('waluta:  ', lista[i].waluta);
			writeln('saldo:  ',lista[i].saldo:10:2,' ',lista[i].waluta);
			c:=true;
		end;
	end;
	if not c then begin
		writeln('nie znaleziono konta o podanym numerze');
	end;
end;

procedure wplac (var lista:TabLista; il:integer);
var
	i:integer;
	kwota,odp:integer;
	c:boolean;
	b:integer;
begin
	writeln('Podaj numer konta na ktore chcesz dokonac wplaty: ');
	readln(odp);
	c:=false;
	for i:=1 to il do begin
		if (odp=lista[i].numerkonta) then begin
			writeln('podaj kwote do wplaty') ;
			readln(kwota);
			lista[i].saldo:=lista[i].saldo+kwota;
			c:=true;
			lista[i].liczbaoperacji:=lista[i].liczbaoperacji+1;
			b:=lista[i].liczbaoperacji;
			lista[i].historia[b].rodzajoperacji:='wplata';
			writeln('podaj dzien ');
			readln(lista[i].historia[b].data.dzien);
			writeln('podaj miesiac');
			readln(lista[i].historia[b].data.miesiac);
			writeln('podaj rok');
			readln(lista[i].historia[b].data.rok);
			lista[i].historia[b].kwota:=kwota;
		end;
	end;
	if not c then begin
			writeln('nie znaleziono konta o podanym numerze');
	end;
end;

procedure wyplac (var lista:TabLista; il:integer);     //wyplata
var
	i:integer;
	kwota,odp:integer;
	c:boolean;
	b:integer;
begin
	writeln('podaj numer konta z ktorego chcesz pobrac pieniadze');
	readln(odp);
	c:=false;

	for i:=1 to il do begin
		if (odp=lista[i].numerkonta) then begin
			writeln('podaj kwote do wyplaty') ;
			readln(kwota);
			lista[i].saldo:=lista[i].saldo-kwota;
			c:=true;
			lista[i].liczbaoperacji:=lista[i].liczbaoperacji+1;
			b:=lista[i].liczbaoperacji;
			lista[i].historia[b].rodzajoperacji:='wyplata';
			writeln('podaj dzien ');
			readln(lista[i].historia[b].data.dzien);
			writeln('podaj miesiac');
			readln(lista[i].historia[b].data.miesiac);
			writeln('podaj rok');
			readln(lista[i].historia[b].data.rok);
			lista[i].historia[b].kwota:=kwota;
		end;

		if not c then
			writeln('nie znaleziono konta o podanym numerze');
		end;
		{
procedure zapisz(k:TabLista; il:integer);
var p:file of konto;
	i:integer;
begin
	assign(p,'konta.dat');
	rewrite(p);
	for i:=1 to il do
	begin
		write(p,k[i]);
	end;
	writeln('dane pomyslnie zapisano do pliku');
	close(p);

end;


procedure zamiana (var a:t;kwota:real;n1:integer;n2:integer);
begin
	if a[n1].waluta='pln' then
		a[n1].saldo:=a[n1].saldo-kwota
	else a[n1].saldo:=a[n1].saldo-(kwota/4);
		if a[n2].waluta='pln' then
			a[n2].saldo:=a[n2].saldo+kwota
		else
			a[n2].saldo:=a[n2].saldo+(kwota/4);

		end;
		}

procedure przelew (var lista:TabLista; il:integer);
var i,j,n1,b,d,n2,odp1,odp2,kwota:integer;
	c:boolean;
begin
	c:=false;
	writeln('podaj numer konta z ktorego maja zostac pobrane pieniadze');
	readln(odp1);
	writeln('podaj numer konta na ktore maja zostac przelane pieniadze');
	readln(odp2);
	writeln('podaj kwote przelewu');
	readln(kwota);
	for i:=1 to il do
		if (odp1=lista[i].numerkonta) then
			n1:=i;
			for j:=1 to il do
				if (odp2=lista[j].numerkonta) then
					n2:=j;
					if (lista[n1].saldo>kwota) then
					begin
						{zamiana(a,kwota,n1,n1);
						c:=true;
						a[n1].liczbaoperacji:=a[n1].liczbaoperacji+1;
						a[n2].liczbaoperacji:=a[n2].liczbaoperacji+1;
						b:=a[n1].liczbaoperacji;
						d:=a[n2].liczbaoperacji;
						a[n1].hist[b].rodzajoperacji:='wyplata';
						a[n2].hist[d].rodzajoperacji:='wplata';
						writeln('podaj dzien');
						readln(a[n1].hist[b].dzien);
						a[n2].hist[d].dzien:=a[n1].hist[b].dzien;
						writeln('podaj meisiac');
						readln(a[n1].hist[b].miesiac);
						a[n2].hist[d].miesiac:=a[n1].hist[b].miesiac ;
						writeln('podaj rok');
						readln(a[n1].hist[b].rok);
						a[n2].hist[d].rok:=a[n1].hist[b].rok    ;
						a[n1].hist[b].kwota:=kwota;
						a[n2].hist[d].kwota:=kwota; }
						writeln('dupa blada');
					end;
					if not c then
						writeln('brak srodkow na koncie!');
					end;

procedure wypisz (lista:TabLista; il:integer);
var odp:integer;
	i,j:integer;
begin
	writeln('podaj numer konta, ktorego historie chcesz wyswietlic');
	readln(odp);
	for i:=1 to il do
		if (odp=lista[i].numerkonta) then
		begin
			for j:=1 to lista[i].liczbaoperacji do
			begin
				writeln('--------------------------------------------------------------------');
				writeln('data operacji  ', lista[i].historia[j].data.dzien,' ',lista[i].historia[j].data.miesiac,' ',lista[i].historia[j].data.rok,' rodzaj operacji ', lista[i].historia[j].rodzajoperacji,' kwota ', lista[i].historia[j].kwota:10:2);
			end;
		end;
	end;


	var k:TabLista;
		il:integer;
		odp:integer;

begin
	il:=0;
	repeat
		writeln;
		writeln('-----------------------');
		writeln(' M E N U ');
		writeln('1 - wczytaj dane kont z pliku');
		writeln('2 - utworz konto');
		writeln('3 - dokonaj wplaty');
		writeln('4 - pobierz pieniadze z konta');
		writeln('5 - dokonaj przelewu miedzy kontami');
		writeln('6 - Podaj informacje o rachunku + saldo');
		writeln('7 - zapisz do pliku');
		writeln('8 - wyswietl historie operacji na koncie');
		writeln('0 - zakoncz dzialanie programu Koniec IMPREZY! Nie ma takiego bicia!!!');
		writeln('podaj wybor');
		readln(odp);

		case odp of
			{1: wczytaj(k,il); }
			2: ZalozKonto(k,il);
			3: wplac(k,il);
			4: wyplac(k,il);
			5: przelew(k,il);
			6: Dane(k,il);     //i saldo
			{7: zapisz(k,il); }
			8: wypisz(k,il);
		end;
	until odp=0;

end.
