Allow to command different things (pizza, bevarages) in a school cafeteria (open at lunch time) using uniquely the arrows of the keyboard and make the total to pay automatically
Delphi & Pascal (èeská wiki)
Category: KMP (Club of young programmers)
Program: Cafet.pas
File exe: Cafet.exe
need: Cafet.lst
Program: Cafet.pas
File exe: Cafet.exe
need: Cafet.lst
Allow to command different things (pizza, bevarages) in a school cafeteria (open at lunch time) using uniquely the arrows of the keyboard and make the total to pay automatically. At the end of the week, recapitulate all the totals of the week (before year 2000 !) .
{ CAFET.PAS } { Allow to command different things (pizza, bevarages) in a school } { cafeteria (open at lunch time) using uniquely the arrows of the } { keyboard and make the total to pay automatically. } { } { At the end of the week, recapitulate all the totals of the week } { (before year 2000 !) } { } { Author: Unknown } { Datum: 20.01.2009 http://www.trsek.com } program caf44cga; uses crt,dos; const max = 40; var col0, col1, col14, col15 : integer; t1, t2, ch, cat : char; n, no, col, lig, x, y, code, fl, i : integer; tot, ben, total, benef : real; totsem, bensem, num : real; strn : string; mot_p, pw : string[5]; nom_f, jjmm : string[6]; des : string[16]; fic : text; suite : boolean; nbr : array [1..max] of real; totj, benj : array[1..10] of real; datjour, totjour, benjour : array[1..10] of string; ch1, ch2, ch3 : array [0..max] of string[16]; fich : array [0..10] of string[6]; regs : registers; keyflag : byte absolute $40:$17; Function Frs(rl:real):real; var i:longint; s:string; begin i :=round(rl); str(i,s); case length(s) of 1 : s:=' 0.0'+s; 2 : s:=' 0.'+s; else s:=copy(s,1,length(s)-2)+'.'+copy(s,length(s)-1,2); end; write(' ':8-length(s),s); end; Function Chfr(ch:string):string; begin write(' ':6-length(ch)); if length(ch)=2 then write('0')else write(' '); write(copy(ch,1,length(ch)-2),','); write(copy(ch,length(ch)-1,2)); end; Function FFrs(rl:real):real; var i:longint; s:string; begin write(Fic,'FS '); i :=round(rl); str(i,s); case length(s) of 1 : s:=' 0.0'+s; 2 : s:=' 0.'+s; else s:=copy(s,1,length(s)-2)+'.'+copy(s,length(s)-1,2); end; writeln(Fic,' ':8-length(s),s); end; Procedure CursOff; Begin FillChar(Regs,SizeOf(Regs),0); With Regs Do Begin AH:=$01; CH:=20; CL:=0; End; Intr($10,Regs); End; Procedure CursOn; Begin FillChar(Regs,SizeOf(Regs),0); With Regs Do Begin CH:=6; CL:=7; AH:=$01; End; Intr($10,Regs); End; procedure mot_de_passe; begin ch := ' '; gotoxy(15,19); writeln('Veuillez taper le mot de passe ( ESC pour terminer )'); writeln; mot_p := ''; gotoxy(37,21); ch:=upcase(readkey); if ch <> #27 then repeat mot_p := mot_p + ch;write('.'); gotoxy(37,21); for n:= 1 to 4 do begin gotoxy(37+2*n,21); ch:=upcase(readkey); mot_p := mot_p + ch;write('.'); end; if mot_p <> pw then begin write(#7); write('.'); gotoxy(37,21);clreol; mot_p := ''; ch := upcase(readkey); end; until mot_p = pw else begin curson; clrscr; writeln; writeln; write('Avec le bonjour de Jean-Daniel Greub !'); writeln; writeln; end; gotoxy(37,21);clreol; end; procedure saisir_nom_fichier; {seuls noms de fichiers admis: DATES DU TYPE JJMMAA} begin ch := ' '; while ch <> 'O' do begin nom_f:=''; gotoxy(57,19);write(' ');gotoxy(57,19); repeat ch:=readkey until ch in ['0'..'3']; write(ch); nom_f:=nom_f + ch; repeat ch:=readkey until ch in ['0'..'9']; write(ch); nom_f:=nom_f + ch; repeat ch:=readkey until ch in ['0'..'1']; write(ch); nom_f:=nom_f + ch; repeat ch:=readkey until ch in ['0'..'9']; write(ch); nom_f:=nom_f + ch; repeat ch:=readkey until ch = '9'; write(ch); nom_f:=nom_f + ch; repeat ch:=readkey until ch in ['5'..'9']; write(ch); nom_f:=nom_f + ch; gotoxy(15,21);write('Cette date est-elle correcte ( O / N ) ? '); repeat ch :=upcase(readkey) until ch in['O','N']; writeln(ch); gotoxy(14,21);clreol; end; clrscr; end; procedure ouvrir_fichier; var i : integer; ch : char; begin gotoxy (15,19);clreol; curson; write('Veuillez taper la date au format JJMMAA [ ]'); textcolor(col15); saisir_nom_fichier; cursoff; assign(fic,nom_f); {$I-} reset(fic); i := ioresult; {$I+} if i<>0 then rewrite(fic); gotoxy(1,24);clreol; gotoxy(76,23); end; Procedure lire_fichier_donnees; (*** Cette proc‚dure commence par lire les donn‚es du fichier < CAFET.LST > qui fichier DOIT ˆtre constitu‚ de 40 groupes de 3 ‚l‚ments : LIGNE 1 : d‚signation (doit contenir 16 caractŠres ou espaces) LIGNE 2 : prix en centimes (min = 0), suivi imm‚diatement d'un <return> LIGNE 3 : b‚n‚fice en centimes (min = 0), suivi imm‚diatement d'un <return> ***) begin clrscr; no := 1; Assign(Fic, 'cafet.lst'); { Standard output } Reset(Fic); des := ' '; for n:= 1 to max do begin Readln(Fic,des); ch1[no] := des; Readln(Fic,des); ch2[no] := des; Readln(Fic,des); ch3[no] := des; inc(no); end; Close(Fic); end; procedure titre; begin cursoff; ch:=' '; textcolor(col14); textbackground(col1); clrscr; gotoxy(28,05);writeln('COLLEGE DE LA FLORENCE'); gotoxy(32,07);writeln('Jean-Daniel Greub'); gotoxy(14,09);write(#218);for n:=1 to 51 do write(#196);writeln(#191); gotoxy(14,10);write(#179);for n:=1 to 51 do write(#032);writeln(#179); gotoxy(14,11);writeln(#179,' ÛÛÛÛÛÛ± ÛÛÛÛÛÛ± ÛÛÛÛÛÛ± ÛÛÛÛÛÛ± ÛÛÛÛÛÛ± ',#179); gotoxy(14,12);writeln(#179,' ÛÛ± ÛÛ± ÛÛ± ÛÛ± ÛÛ± ÛÛ± ',#179); gotoxy(14,13);writeln(#179,' ÛÛ± ÛÛÛÛÛÛ± ÛÛÛÛ± ÛÛÛÛ± ÛÛ± ',#179); gotoxy(14,14);writeln(#179,' ÛÛ± ÛÛ± ÛÛ± ÛÛ± ÛÛ± ÛÛ± ',#179); gotoxy(14,15);writeln(#179,' ÛÛÛÛÛÛ± ÛÛ± ÛÛ± ÛÛ± ÛÛÛÛÛÛ± ÛÛ± ',#179); gotoxy(14,16);write(#179);for n:=1 to 51 do write(#032);writeln(#179); gotoxy(14,17);write(#192);for n:=1 to 51 do write(#196);writeln(#217); gotoxy(31,19);textcolor(col14); pw := #84+#69+#70+#65+#67; end; procedure enregistrer; {sauvegarde des donn‚es sur disque dans un fichier ayant une date pour titre} begin Assign(Fic,nom_f); Rewrite(Fic); Writeln(Fic,'------------------------------'); Writeln(Fic,'Date du jour : ',nom_f); Writeln(Fic,'------------------------------'); Write(Fic,'Total des ventes : '); FFrs(Total); Write(Fic,'B‚n‚fice total : '); FFrs(Benef); Writeln(Fic,'------------------------------'); num := 1; for n := 1 to 40 do begin if nbr[trunc(num)] > 0 then Writeln(Fic,ch1[trunc(num)],' ',nbr[trunc(num)]:3:0); num := num + 1; end; Writeln(Fic,'------------------------------'); Close(Fic); clrscr; gotoxy(01,4); for n:=1 to 79 do write('-'); gotoxy(01,6); writeln('Le nom du fichier de sauvegarde est < ',nom_f,' >'); writeln(' ------'); writeln; writeln('Il peut ˆtre ais‚ment visualis‚ en tapant < L > pour L.COM'); writeln; for n:=1 to 79 do write('-'); gotoxy(01,13); writeln ('avec le bonjour de Jean-Daniel Greub !'); textcolor(col15);textbackground(col1); end; procedure recap; begin { ENTREE DES NOMS DES n FICHIERS } curson; n:=1; clrscr; gotoxy(1,2); writeln('R‚capitulation des r‚sultats de plusieurs journ‚es'); writeln('--------------------------------------------------'); write('Taper 0000 pour terminer ! '); writeln('Ann‚e 19',copy(nom_f,5,2)); while jjmm <> '0000' do begin writeln; write('Taper sous la forme JJMM la date du '); write ('fichier num‚ro ',n,' [ ]'); gotoxy(57,wherey); jjmm := ''; repeat ch:=readkey until ch in ['0'..'3']; write(ch);jjmm := jjmm + ch; repeat ch:=readkey until ch in ['0'..'9']; write(ch);jjmm := jjmm + ch; repeat ch:=readkey until ch in ['0'..'1']; write(ch);jjmm := jjmm + ch; repeat ch:=readkey until ch in ['0'..'9']; write(ch);jjmm := jjmm + ch; fich[n] := jjmm + copy(nom_f,5,2); assign(fic,fich[n]); {$I-} reset(fic); i := ioresult; {$I+} if i<>0 then rewrite(fic); if i=2 then begin gotoxy(63,wherey); write(' N''EXISTE PAS !'); end; if i= 0 then begin if eof(fic) = true then begin gotoxy(63,wherey); write(' FICHIER VIDE !'); end; inc(n); end; close(fic); end; gotoxy(01,5+n);clreol;writeln; clrscr; totsem := 0; bensem := 0; writeln('R‚capitulation des r‚sultats de la semaine'); writeln('------------------------------------------'); writeln; writeln('Date Total B‚n‚fice'); writeln; { LECTURE LIGNE PAR LIGNE DES NOMS DES n FICHIERS } for n := 1 to n - 1 do begin assign(fic,fich[n]); {$I-} reset(fic); i := ioresult; {$I+} strn := ''; Readln(Fic,strn); {LIGNE 1} Readln(Fic,strn); {LIGNE 2} datjour[n]:=copy(strn,length(strn)-5,6); {LIGNE 3} Readln(Fic,strn); {LIGNE 4} Readln(Fic,strn); {LIGNE 5} totjour[n]:=copy(strn,length(strn)-7,5) + copy(strn,length(strn)-1,2); { writeln; writeln(totjour[n]) } Readln(Fic,strn); {LIGNE 7} benjour[n]:=copy(strn,length(strn)-7,5) + copy(strn,length(strn)-1,2); val(totjour[n],totj[n],code); totj[n] := totj[n]/100; val(benjour[n],benj[n],code); benj[n] := benj[n]/100; gotoxy (01,wherey); write(datjour[n]); gotoxy (12,wherey); write(totj[n]:8:2); gotoxy (24,wherey); write(benj[n]:7:2); writeln; totsem := totsem + totj[n]; bensem := bensem + benj[n]; close(Fic); end; writeln('------------------------------'); gotoxy (12,wherey); write(totsem:8:2); gotoxy (24,wherey); write(bensem:7:2); writeln; curson; writeln; writeln; write('Avec le bonjour de Jean-Daniel Greub !'); writeln; writeln; end; procedure lire_nombre; begin strn := ''; ch := ' '; while ch <> #13 do begin repeat ch:= readkey until ch in ['0'..'9',#13]; if ch <> #13 then begin write(ch); strn:=strn + ch; end; end; val(strn,n, Code); {les caractŠres num‚riques de la chaŒne passe dans l'integer n} end; procedure saisie; begin fl := 0; cursoff; clrscr; { affichage des articles … choisir } textcolor(col15); textbackground(col1); clrscr; no := 1; lig:=1; repeat gotoxy(01,lig); write(ch1[no]); inc(no); gotoxy(21,lig); write(ch1[no]); inc(no); gotoxy(41,lig); write(ch1[no]); inc(no); gotoxy(61,lig); write(ch1[no]); inc(no); lig := lig + 2; until no > max; gotoxy(01,22); writeln('Utiliser les flŠches pour choisir puis presser < RETURN >'); GOTOXY(01,24); writeln('Presser la touche < ESC > quand tout est saisi'); {*********************************************************************} {SAISIES MULTIPLES, SORITE AVEC <ESC>} no := 1; col := 01; lig := 01; gotoxy(col,lig); t1:=' ';t2:=' '; while t1 <> #27 do begin repeat t1:=readkey until t1 in [#0,#13,#27]; if ord(t1)= 0 then begin t2 := readkey; textcolor(col15); textbackground(col1); writeln(ch1[trunc(num)]); if ord(t2)=72 then fl:=1; if ord(t2)=75 then fl:=1; if ord(t2)=77 then fl:=1; if ord(t2)=80 then fl:=1; if (ord(t2)=72) and (lig > 01) then lig := lig - 02; if (ord(t2)=75) and (col > 01) then col := col - 20; if (ord(t2)=77) and (col < 60) then col := col + 20; if (ord(t2)=80) and (lig < 19) then lig := lig + 02; num := (col + 19) / 20 + (lig-1) * 2; gotoxy(col, lig); x := wherex; y := wherey; textcolor(col1); textbackground(col15); writeln(ch1[trunc(num)]); gotoxy(01,23);clreol;{write('col ',col,' lig ',lig,' num ',num:3:0);} gotoxy(x,y); end else if (ord(t1)=13) and (fl = 1) then begin des := ch1[trunc(num)]; n := 0; gotoxy(01,22); clreol; writeln('Taper le nombre d''articles, puis presser < RETURN >'); gotoxy(1,23); clreol; curson; write('Nb de < ',des,'> '); lire_nombre; cursoff; gotoxy(1,23); clreol; gotoxy(01,22); clreol; writeln('Utiliser les flŠches pour choisir puis presser < RETURN >'); nbr[trunc(num)] := n; end; end; clrscr; total := 0; benef := 0; for n:=1 to 79 do write('-'); writeln; {affichage des valeurs venant d'ˆtre saisies} textcolor(col15); textbackground(col1); clrscr; num := 1; {real} lig := 1; for n := 1 to 40 do begin if (nbr[trunc(num)] > 0) and (ch2[trunc(num)] <> '0') then begin write(nbr[trunc(num)]:3:0,' ',ch1[trunc(num)],' … '); chfr(ch2[trunc(num)]); val(ch2[trunc(num)], Tot, Code); gotoxy(34,wherey); write (' Prix total : '); Frs(Tot * nbr[trunc(num)]); val(ch3[trunc(num)], Ben, Code); gotoxy(60,wherey); write ('B‚n‚fice : '); Frs(Ben * nbr[trunc(num)]); writeln; Total := Total + Tot * nbr[trunc(num)]; Benef := Benef + Ben * nbr[trunc(num)]; inc(lig); end; num := num + 1; IF lig = 21 THEN BEGIN WRITELN; WRITE('Presser une touche pour continuer !'); READKEY; WRITELN; WRITELN; END; end; for n:=1 to 79 do write('-'); writeln; gotoxy(01,wherey); write('DATE : ',nom_f); gotoxy(35,wherey); write('TOTAL : '); Frs(Total); gotoxy(60,wherey); write('BENEFICE : '); Frs(Benef); writeln; ch := ' '; curson; writeln; write('Les donn‚es ci-dessus sont-elles correctes (O / N) ? '); ch := upcase(readkey); if upcase(ch) = 'O' then begin write (ch);enregistrer;end else begin write (ch);saisie;end; end; procedure choix; begin clrscr; gotoxy(16,09);write('Voulez-vous...'); gotoxy(16,12);write('1. Enr‚gistrer les r‚sultats d''une journ‚e ?'); gotoxy(16,14);write('2. R‚capituler les r‚sultats de plusieurs journ‚es ?'); gotoxy(16,18);write('Taper 1 ou 2'); repeat ch:=readkey until ch in ['1'..'2']; if ch = '1' then saisie; if ch = '2' then recap; end; procedure choix_ecran; begin col0 := 0; col1 := 0; col14:= 2; col15:= 3; {0, 1, 14, 15 pour ‚cran VGA 16 couleurs } {0, 0, 2, 3 pour ‚cran CGA monochrome } { en VGA 16 couleurs text=14 back=1 ... jaune sur fond bleu } { en VGA 16 couleurs text=15 back=0 ... blanc sur fond noir } { en VGA 16 couleurs text=0 back=15 ... noir sur fond blanc } end; begin choix_ecran; lire_fichier_donnees; titre; mot_de_passe; if ch <> #27 then begin ouvrir_fichier; choix; curson; end; end.