Works with telephone numbers in database, pascal
Delphi & Pascal (èeská wiki)
Category: Source in Pascal
Program: Telefon.pas
File exe: Telefon.exe
File ubuntu: Telefon
Program: Telefon.pas
File exe: Telefon.exe
File ubuntu: Telefon
It's a homework. The homework itself isn't so complicated as it looks like. Static allocation of the memory is what irritates me most. Nobody does it today, otherwise one could get into big troubles. I like the classification of the names using a typical "bubble" method. So if you need to have something sorted out and reliability and exactness, instead of rapidity, are the qualities you are looking for, this might be the program you need. Just have a look. I was engaged by the matter of classification for a longer time and some suggestions can be found in C source codes.
{ TELEFON.PAS Copyright (c) TrSek alias Zdeno Sekerak } { Program na uchovavanie telefonnych cisel a simulovanie funkcii } { databazy. Obsahuje uzivatelske prostredie. Data vsak neuchovava } { v ziadnom subore. } { } { Datum:02.06.1994 http://www.trsek.com } program zadanie_telefonny_zoznam; uses crt,dos; const poc=100;potel=6; text:array[1..5] of string= (' Vstup udajov ', ' Vyhladavanie ', ' Zmena udajov ', ' Vypis zoznamu ', ' Koniec (ESC) '); text1:array[1..5] of string= (' mena ', ' priezviska ', ' mena a priezviska ', ' adresy ', ' Spat do menu '); type zaz=record meno :string[10]; priezvisko:string[20]; adresa :string[30]; telefon :string[potel]; end; var zoznam:array[1..poc] of zaz; pomocna:zaz; i,i2,zpoc,p,min,max:integer; s,meno,meno2:string; ok:boolean; ch:char; function upcase_s(meno:string):string; var i:integer; pmeno:string; begin pmeno:=''; for i:=1 to length(meno) do pmeno:=pmeno+UpCase(meno[i]); upcase_s:=pmeno; end; procedure farba(x,y:byte); begin textbackground(x); textcolor(y); end; procedure open_win(xl,yl,xp,yp:integer;text:string;color:integer); var i,xs,ys:integer; p:real; begin window(xl,yl,xp,yp); p:=(yp-yl)/(xp-xl); xs:=round((xp-xl)/2)+xl; ys:=round((yp-yl)/2)+yl-1; textbackground(color); for i:=1 to round((xp-xl)/2) do begin window(xs-i,ys-round(i*p-0.6),xs+i,ys+round(i*p)); clrscr; delay(8); end; window(1,1,80,24); for i:=xl to xp do begin gotoxy(i,yl);write('Í');end; gotoxy(xp,yl);write('»'); for i:=yl+1 to yp do begin gotoxy(xp,i);write('º');end; gotoxy(xp,yp);write('¼'); for i:=xp-1 downto xl do begin gotoxy(i,yp);write('Í');end; gotoxy(xl,yp);write('È'); for i:=yp-1 downto yl do begin gotoxy(xl,i);write('º');end; gotoxy(xl,yl);write('É'); if text<>'' then begin gotoxy(xs-(length(text) div 2),yl);write(' ',text,' ');end; window(xl+1,yl+1,xp-1,yp-1); end; function tread(x,y:integer;d:byte;s:string):string; var s1,s2,sz:string; st:char; x1,i,ins:integer; label tam; begin x1:=x;farba(15,0);ins:=1; s:=copy(s,1,d); if length(s)<d then for i:=length(s) to d-1 do s:=s+' '; gotoxy(x,y);write(s);sz:=s; if (x>0) and (x<81) and (y>0) and (y<25) and(x+d<81) then begin gotoxy(x,y); repeat st:=readkey; if (st=#27) or (st=#8) or (st=#0) or (st=#13) then begin if st=#0 then begin st:=readkey; if st=#75 then x1:=x1-1; if st=#77 then x1:=x1+1; if st=#71 then x1:=x; if st=#79 then begin i:=d+1;x1:=x+d; repeat i:=i-1; s1:=copy(s,i,1); if (s1=' ') then x1:=x+i-1; until (i=0) or (not(s1=' ')); end; end; if st=#27 then begin gotoxy(x,y);write(sz);tread:=sz;exit;end; if st=#8 then begin s1:=copy(s,1,x1-x-1); s2:=copy(s,x1-x+1,d-x1+x); s:=s1+s2+' '; x1:=x1-1; end; if st=#83 then begin s1:=copy(s,1,x1-x); s2:=copy(s,x1-x+2,d-x1+x); s:=s1+s2+' '; end; if st=#82 then begin if ins=2 then ins:=1 else ins:=2; end; end else begin s1:=copy(s,1,x1-x); s2:=copy(s,x1+ins-x,d-x1+x); s:=s1+copy(st,1,1)+s2; s:=copy(s,1,d); x1:=x1+1;if (x1>x+d) then x1:=x+d; end; if x1<x then x1:=x; if x1>x+d then x1:=x+d; s:=copy(s,1,d); gotoxy(x,y);writeln(s);gotoxy(x1,y); until st=#13; while pos(' ',s)>0 do delete(s,pos(' ',s),1); tread:=s;farba(0,15); end; textbackground(blue);textcolor(yellow);writeln; end; procedure zamen(x,y:integer); begin pomocna.meno:=zoznam[x].meno; zoznam[x].meno:=zoznam[y].meno; zoznam[y].meno:=pomocna.meno; pomocna.priezvisko:=zoznam[x].priezvisko; zoznam[x].priezvisko:=zoznam[y].priezvisko; zoznam[y].priezvisko:=pomocna.priezvisko; pomocna.adresa:=zoznam[x].adresa; zoznam[x].adresa:=zoznam[y].adresa; zoznam[y].adresa:=pomocna.adresa; pomocna.telefon:=zoznam[x].telefon; zoznam[x].telefon:=zoznam[y].telefon; zoznam[y].telefon:=pomocna.telefon; end; procedure tclrscr; var i:integer; begin for i:=1 to 24 do writeln; gotoxy(1,1); end; begin s:=' ';zpoc:=0; repeat window(1,1,80,25); textbackground(black); textcolor(yellow); clrscr; open_win(15,5,65,18,'Hlavne menu',blue); textbackground(blue); clrscr; writeln; writeln(' T E L E F O N N Y Z O Z N A M '); writeln(' ----------------------------------'); writeln(' Definovanych ',zpoc,' ucastnikov.'); writeln(' ----------------------------------'); for i:=1 to 5 do begin gotoxy(7,i+5);write(text[i]);end; writeln; writeln(' -----------------'); i:=1; textbackground(7);gotoxy(7,i+5);write(text[i]); repeat ch:=readkey; if ch=#27 then begin i:=5;ch:=#13;end; if ch=#0 then begin ch:=readkey; if ch=#80 then begin textbackground(1);gotoxy(7,i+5);write(text[i]); i:=i+1;if i>5 then i:=1; textbackground(7);gotoxy(7,i+5);write(text[i]); end; if ch=#72 then begin textbackground(1);gotoxy(7,i+5);write(text[i]); i:=i-1;if i<1 then i:=5; textbackground(7);gotoxy(7,i+5);write(text[i]); end; end; until (ch=#13); if i=5 then begin textbackground(blue);open_win(1,2,80,23,'',blue);clrscr; gotoxy(19,10); write (' Naozaj chces skoncit ??? [A/..]: ');ch:=readkey; if (ch in ['a','A']) then i:=5 else i:=0; end; case i of 1:begin textbackground(blue);open_win(1,2,80,23,'',blue);clrscr; repeat clrscr;zpoc:=zpoc+1; if zpoc>poc then begin zpoc:=poc; writeln('Viac udajov uz nemozem natlacit do pamete, predefinuj konstantu poc.'); readln; end else begin writeln; writeln(' 1.Vstup udajov'); writeln(' --------------'); writeln(' Maximalny pocet je:',poc,' . Zatial je ',zpoc-1,' zadefinovanych.'); writeln(' -----------------------------------------------------------'); write (' Zadaj meno:');zoznam[zpoc].meno:=tread(wherex,wherey,10,''); write (' priezvisko:');zoznam[zpoc].priezvisko:=tread(wherex,wherey,20,''); write (' adresu:');zoznam[zpoc].adresa:=tread(wherex,wherey,30,''); repeat ok:=true; for i:=1 to potel do zoznam[zpoc].telefon[i]:=' '; write (' telefon:');readln(zoznam[zpoc].telefon); for i:=1 to potel do if not(zoznam[zpoc].telefon[i] in ['0'..'9',' ','/']) then ok:=false; if not(ok) then writeln(' Zle zadanne telefonne cislo.'); until ok; end; writeln; writeln(' Definovat dalsieho. [../N]:'); ch:=readkey; until (ch in ['n','N']); end; 2:begin repeat window(1,1,80,25); textbackground(black); clrscr; open_win(15,5,65,18,'Menu hladaj',blue); textbackground(blue); clrscr; writeln; writeln(' Vyhladavanie podla'); writeln(' ------------------'); for i2:=1 to 5 do begin gotoxy(7,i2+3);write(text1[i2]);end; writeln; writeln(' ------------------'); i2:=1; textbackground(7);gotoxy(7,i2+3);write(text1[i2]); repeat ch:=readkey; if ch=#0 then begin ch:=readkey; if ch=#80 then begin textbackground(1);gotoxy(7,i2+3);write(text1[i2]); i2:=i2+1;if i2>5 then i2:=1; textbackground(7);gotoxy(7,i2+3);write(text1[i2]); end; if ch=#72 then begin textbackground(1);gotoxy(7,i2+3);write(text1[i2]); i2:=i2-1;if i2<1 then i2:=5; textbackground(7);gotoxy(7,i2+3);write(text1[i2]); end; end; until (ch=#13); if i2<>5 then begin textbackground(blue);open_win(1,3,80,22,'',blue);clrscr;end; case i2 of 1:begin write(' Zadaj meno:');meno:=tread(wherex,wherey,10,''); write('ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿'); write('³ Meno ³ Priezvisko ³ Adresa ³ Tel. cislo ³'); write('ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´'); for i:=1 to zpoc do if upcase_s(meno)=upcase_s(zoznam[i].meno) then write('³',zoznam[i].meno:10,'³',zoznam[i].priezvisko:20,'³',zoznam[i].adresa:30,'³',zoznam[i].telefon:13,'³'); write('ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'); readln; end; 2:begin write(' Zadaj priezvisko:');meno:=tread(wherex,wherey,20,''); write('ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿'); write('³ Meno ³ Priezvisko ³ Adresa ³ Tel. cislo ³'); write('ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´'); for i:=1 to zpoc do if upcase_s(meno)=upcase_s(zoznam[i].priezvisko) then write('³',zoznam[i].meno:10,'³',zoznam[i].priezvisko:20,'³',zoznam[i].adresa:30,'³',zoznam[i].telefon:13,'³'); write('ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'); readln; end; 3:begin write(' Zadaj meno:');meno:=tread(wherex,wherey,10,''); write(' priezvisko:');meno2:=tread(wherex,wherey,20,''); write('ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿'); write('³ Meno ³ Priezvisko ³ Adresa ³ Tel. cislo ³'); write('ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´'); for i:=1 to zpoc do if (upcase_s(meno)=upcase_s(zoznam[i].meno)) and (upcase_s(meno2)=upcase_s(zoznam[i].priezvisko)) then write('³',zoznam[i].meno:10,'³',zoznam[i].priezvisko:20,'³',zoznam[i].adresa:30,'³',zoznam[i].telefon:13,'³'); write('ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'); readln; end; 4:begin write(' Zadaj adresu:');meno:=tread(wherex,wherey,30,''); write('ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿'); write('³ Meno ³ Priezvisko ³ Adresa ³ Tel. cislo ³'); write('ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´'); for i:=1 to zpoc do if upcase_s(meno)=upcase_s(zoznam[i].adresa) then write('³',zoznam[i].meno:10,'³',zoznam[i].priezvisko:20,'³',zoznam[i].adresa:30,'³',zoznam[i].telefon:13,'³'); write('ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'); readln; end; end; until (i2=5); end; 3:begin textbackground(blue);open_win(1,2,80,23,'Zmena',blue);clrscr; repeat clrscr; writeln; writeln(' Zmena udajov'); writeln(' ------------'); write (' Zadaj meno:');pomocna.meno:=tread(wherex,wherey,10,''); write (' priezvisko:');pomocna.priezvisko:=tread(wherex,wherey,20,''); write (' adresu:');pomocna.adresa:=tread(wherex,wherey,30,''); repeat ok:=true; for i:=1 to potel do pomocna.telefon[i]:=' '; write (' telefon:');readln(pomocna.telefon); for i:=1 to potel do if not(pomocna.telefon[i] in ['0'..'9',' ','/']) then ok:=false; if not(ok) then writeln(' Zle zadanne telefonne cislo.'); until ok; ok:=false; for i:=1 to zpoc do if (upcase_s(pomocna.meno)=upcase_s(zoznam[i].meno)) and (upcase_s(pomocna.priezvisko)=upcase_s(zoznam[i].priezvisko)) then begin write('ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿'); write('³',zoznam[i].meno:10,'³',zoznam[i].priezvisko:20,'³',zoznam[i].adresa:30,'³',zoznam[i].telefon:13,'³'); write('ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'); writeln(' Zmenit tohto ucastnika ??? [A/..]:');ch:=readkey; if (ch in ['a','A']) then begin ok:=true; zoznam[i].adresa :=pomocna.adresa; zoznam[i].telefon:=pomocna.telefon;end; end; if (not(ok) and (zpoc<poc)) then begin writeln(' Takyto ucastnik neexistuje. Mam ho zaradit ??? ../N:'); ch:=readkey;; if not(ch in ['n','N']) then begin zpoc:=zpoc+1; zoznam[zpoc].meno :=pomocna.meno; zoznam[zpoc].priezvisko:=pomocna.priezvisko; zoznam[zpoc].adresa :=pomocna.adresa; zoznam[zpoc].telefon :=pomocna.telefon;end; end; writeln(' Chces previest dalsiu zmenu [../N]:');ch:=readkey; until (ch in ['n','N']); end; 4:begin textbackground(blue);window(1,1,80,25);clrscr; if zpoc>0 then begin writeln('Prebieha triedenie zoznamu udajov.'); write ('Prechod zoznamom: 0'); p:=0; {*** Usporiadava podla mena a priezviska ***} repeat ok:=true; for i:=1 to zpoc-1 do if (zoznam[i].priezvisko>zoznam[i+1].priezvisko) then begin zamen(i,i+1); ok:=false;end; for i:=zpoc downto 2 do if (zoznam[i].priezvisko<zoznam[i-1].priezvisko) then begin zamen(i-1,i); ok:=false;end; p:=p+1;write(chr(8)+chr(8)+chr(8),p:3); until ok; window(1,1,80,25);clrscr; writeln; writeln('ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿'); writeln('³ Meno ³ Priezvisko ³ Adresa ³ Telefonne cis³'); writeln('ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´'); for i:=1 to zpoc do begin writeln('³',zoznam[i].meno:10,'³',zoznam[i].priezvisko:20,'³',zoznam[i].adresa:30,'³',zoznam[i].telefon:14,'³'); if (i mod 20)=0 then begin write('Stlac Enter pre dalsi vypis ....');readln; gotoxy(1,wherey-1);delline;end; end; writeln('ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'); write('Stlac Enter ....');readln; end; end; end; until (i=5); window(1,1,80,25); textbackground(black); textcolor(white); clrscr; end.