The following is a Pascal old program. Goal: reservation for a two-class flight. Other programs will
be added in the
future.
program ass2;{$i+}
uses
crt,printer,dos;
label
99;
type
str=string[30];
str1=string[10];
rec1=record
name:str;
pass:str1;
ticket:integer;
seat:integer;
k:char;
end;
fil=file of rec1;
var
v,r,n1,n2,c,r5,i,o1,k,m1,m2,b,y1,y2:integer;
ch,class,g,ansewer,wanted:str;
rr:rec1;
hh:char;
tt,yy:boolean;
file1,file2:fil;
fil11,fil22:str1;
dirinfo:searchrec;
{========================================}
{this
is a program for an airline trip,it reserves,cancels,modifies}
{========================================}
procedure
outline; {outline for the program}
var
i:integer;
begin
textbackground(white);clrscr;textcolor(blue);clrscr;
for
i:=1 to 4 do writeln;for i:=1
to 10 do write(' ');
writeln('This is a program for
an airpline trip .');
for i:=1 to 5 do writeln;for i:=1 to 10
do write(' ');
writeln('It
contains two classes
: first , second . ');
for i:=1 to 5 do writeln;for i:=1 to 10 do
write(' ');
writeln('You can choose the
number of seats
for each class .');
for i:=1 to 5 do writeln;for i:=1 to 10 do write(' ');
writeln('You can create new
binary files or
use old ones .');
readln;
end;
{==========================================================================}
procedure file51(var n:integer;
var filea:fil); {initialiazing file for class 1}
var
i:integer;
begin
i:=0;
rr.name:='p';rr.ticket:=0;rr.pass:='0';rr.seat:=n+1;rr.k:='p';
seek(filea,i);write(filea,rr);i:=1;
while i<=n do
begin
rr.name:='$';rr.pass:='-1';rr.seat:=-1;seek(filea,i);
rr.k:='n';
write(filea,rr);i:=i+1;
end;
end;
{=========================================}
procedure
file52(var n5:integer;var fileb:fil);
var {initiliazing file for
class 2}
i:integer;
begin
i:=0;
rr.name:='p';rr.ticket:=0;rr.pass:='0';rr.seat:=n5+1;rr.k:='p';
seek(fileb,i);write(fileb,rr);i:=1;
while i <= n5 do
begin
rr.name:='$';rr.pass:='-1';rr.seat:=-1;seek(fileb,i);
rr.k:='n';
write(fileb,rr);i:=i+1;
end;
end;
{=====================================================================}
procedure
number1(var n11:integer;var file11:fil;var
sum:integer);
var {counts # of full seats for
class 1}
i:integer;
pp:rec1;
begin
sum:=0;reset(file11);
for i:=1 to n11 do
begin
seek(file11,i);
read(file11,pp);
if pp.name <> '$'
then sum:=sum+1;
end;
end;
{===============================================================}
procedure number2(var n22:integer;var file22 :fil ;
var sum2:integer);
var {counts # of full seats for
class 2}
j:integer;
ff:rec1;
begin
sum2:=0;reset(file22);
for j:=1 to n22 do
begin
seek(file22,j);
read(file22,ff);
if ff.name <>
'$' then sum2:=sum2+1;
end;
end;
{===============================================================}
procedure ticket1(var s:integer;var filea:fil;var
b:integer);
var {gives tickets in class 1}
i:integer;
j:boolean;
f:str;
rr1:rec1;
begin
j:=false;i:=1;reset(filea);
while (i <= s) and (not (j) ) do
begin
seek(filea,i);
read(filea,rr1);
if rr1.name='$' then
begin
{$i-}
repeat
writeln('enter name');
readln(rr1.name);
until ioresult=0;
{$i+}
writeln('enter # of pass p');
readln(rr1.pass);
rr1.seat:=i;textcolor(blue);
write('you have got the');
writeln(' seat (',i,')');
rr1.ticket:=b;
seek(filea,i);textcolor(blue);
write(filea,rr1);rr1.name:='p';
rr1.ticket:=b;rr1.pass:='0';
rr1.seat:=s+1;rr1.k:='p';
seek(filea,0);write(filea,rr1);
j:=true;
end;i:=i+1;
end;
end;
{===============================================================}
procedure
ticket2(var s:integer; var fileb:fil;var b:integer);
var {gives tickets in class 2}
rr2:rec1;
i:integer;
j:boolean;
begin
j:=false;i:=1;reset(file2);
while (i <= s) and (not(j)) do
begin
seek(fileb,i);
read(fileb,rr2);
if rr2.name='$' then begin
{$i-}
repeat
writeln('enter name');
readln(rr2.name);
until ioresult =0;
{$i+}
writeln('enter # of pass p');
readln(rr2.pass);
rr2.seat:=i;textcolor(blue);
write('you have got the ');
writeln('seat(',i,')');
rr2.ticket:=b;
seek(fileb,i);textcolor(blue);
write(fileb,rr2);rr2.ticket:=b;
rr2.name:='p';rr2.seat:=s+1;
rr2.pass:='0';rr2.k:='p';
j:=true;
end;i:=i+1;
end;
end;
{==========================================================================}
procedure
cancel1(var n:integer;var filea:fil);
var {cancels in class 1 }
i:integer;
rr:rec1;
t1:str;
m:boolean;
begin
writeln('enter your name');readln(t1);
reset(filea);
m:=true;i:=1;
while (i <= n) and m do
begin
seek(filea,i);read(filea,rr);
if rr.name=t1 then
begin
rr.name:='$';rr.seat:=-1;
rr.pass:='-1';
rr.ticket:=-1;
seek(filea,i);rr.k:='n';
write(filea,rr);
m:=false;textcolor(blue);
writeln('your place is deleted');
end
else
i:=i+1;
end;
if (m=true) and (i>n) then writeln('name
not found');textcolor(blue);
end;
{==========================================================================}
procedure
cancel2(var n:integer;var fileb:fil);
var {cancels in class 2}
i:integer;
rr:rec1;
t1:str;
m:boolean;
begin
writeln('enter your name');readln(t1);m:=true;i:=1;reset(fileb);
while (i<=n) and m do
begin
seek(fileb,i);read(fileb,rr);
if rr.name=t1 then begin
rr.name:='$';rr.seat:=-1;
rr.pass:='-1';rr.k:='n';
rr.ticket:=-1;
seek(fileb,i);
write(fileb,rr);m:=false;
textcolor(blue);
writeln('your place is deleted');
end
else
i:=i+1;
end;
if (m=true) and (i > n) then
writeln('name not found');textcolor(blue);
end;
{=========================================================================}
procedure
change(var n:integer;var file1:fil;var b:integer);
var {changes mistakes}
f:boolean;
i:integer;
ticket:str1;
rr:rec1;
ch:char;
name,wanted:str;
begin
writeln('enter old name');readln(wanted);
f:=false;i:=1;reset(file1);
while (i<=n) and (not(f)) do
begin
seek(file1,i);
read(file1,rr);
if rr.name=wanted
then
begin
repeat
write('is there a new ');
writeln('name (y,n)');
readln(ch);
until (ch='y') or (ch='n');
if (ch='y') then begin
writeln('enter new name');
readln(name);rr.name:=name;
end;
repeat
write('is there a new ');
writeln('pass p # (y,n)');
readln(ch);
until (ch='y') or (ch='n');
if (ch='y') then begin
writeln('enter new pass p. #');
readln(ticket);
rr.pass:=ticket;
end;
b:=b+1;
rr.k:='n';rr.ticket:=b;
seek(file1,i);
write(file1,rr);
f:=true;
end
else i:=i+1;
end;
if (f=false) and (i>n) then writeln('name
not found');
end;
{=========================================================================}
procedure
tickets1(var n1:integer;fil11:str1;var file1:fil);
var {gives a ticket for a person in
class 1}
t1:str;
i:integer;
rr:rec1;
m:boolean;
begin
writeln('enter
name');readln(t1);m:=true;i:=1;reset(file1);
while (i<=n1) and m do
begin
seek(file1,i);read(file1,rr);
if rr.name=t1 then
begin
if rr.k='n'
then
begin
writeln('====================================');
write(lst,'*** This is job ');
writeln(lst,'of:
',fil11,'***');
write(lst,'***
first class');
writeln(lst,'
tick.#:',rr.ticket,' ***');
write(lst,'*** Name is:');
write(lst,rr.name);
write(lst,'. Pass p is: ');
writeln(lst,rr.pass,' ***');
writeln('====================================');
rr.k:='y';seek(file1,i);
write(file1,rr);m:=false;
end;
if rr.k='y' then
begin
write('ticket had been ');
writeln('given before');
m:=false;
end;
end
else i:=i+1;
end;
if (m=true) and (i>n1) then writeln('name
not found');
end;
{======================================================================}
procedure
tickets2(var n1:integer;fil11:str1;var file1:fil);
var {gives tickets for all in class 1}
i:integer;
rr:rec1;
begin
i:=1;reset(file1);
while (i<=n1) do
begin
seek(file1,i);read(file1,rr);
if rr.k='n' then
begin
writeln(lst,'Name
of job is : *** ',fil11,'***');
writeln(lst,'=================================');
write(lst,'***
First class ***','.Ticket # is:');
writeln(lst,'***',rr.ticket,'***');
write(lst,'***
Name is: ',rr.name);
writeln(lst,'***
Pass p:',rr.pass,' ***');
writeln('==================================');
writeln(lst,'
');writeln(lst,' ');
rr.k:='y';seek(file1,i);write(file1,rr);
end;
if rr.k='y' then
writeln('Ticket had been given');i:=i+1;
end;
end;
{====================================================================}
procedure
tickets3(var n2:integer;fil11:str1;var file2:fil);
var {gives a ticket for a person in class 2}
t1:str;
i:integer;
rr:rec1;
m:boolean;
begin
writeln('enter
name');readln(t1);m:=true;i:=1;reset(file2);
while (i<=n2) and m do
begin
seek(file2,i);read(file2,rr);
if rr.name=t1 then
begin
if
rr.k='n' then
begin
write(lst,'*** This is job ');
writeln(lst,'of:',fil11,'s ***');
write(lst,'*** Second class. ');
write(lst,'.Ticket
# is : ');
writeln(lst,rr.ticket,' ***');
write(lst,'*** Name is: ');
write(lst,rr.name);
write(lst,'.
Pass p');
writeln(lst,rr.pass,' ***');
rr.k:='y';seek(file2,i);
write(file2,rr);m:=false;
end;
if
rr.k='y'then begin
write('ticket had');
writeln('been given');
m:=false;
end;
end
else
i:=i+1;
end;
if (m=true) and (i>n2) then writeln('name
not found');
end;
{=====================================================================}
procedure
tickets4(var n2:integer;fil11:str1;var file2:fil);
var {gives tickets for all in class 2}
i:integer;
rr:rec1;
begin
i:=1;reset(file2);
while (i<=n2) do
begin
seek(file2,i);read(file2,rr);
if rr.k='n' then
begin
writeln(lst,'Name of job :
***',fil11,'s ***');
writeln(lst,'=============================');
writeln(lst,'* Second
class','. Ticket # : ',rr.ticket,' *');
writeln(lst,'** Name :
',rr.name,'. Pass p : ',rr.pass,'**');
writeln(lst,'============================');writeln(lst,' ');
writeln(lst,' ');
rr.k:='y';seek(file2,i);write(file2,rr);
end;
if rr.k='y' then writeln('ticket had been
given before');
i:=i+1;
end;
end;
{=============================================}
procedure
results(t:integer;var n1:integer;filkk:str1;var file1:fil);
var {gives outputs of the two
files}
i,m1:integer;
rr:rec1;
ch:char;
begin
if t=1 then number1(n1,file1,m1);
if t=2 then number2(n1,file1,m1);writeln;
write('this is file ',t,' of (',filkk,').# of
full seats= ',m1);
writeln('.# of empty =
',n1-m1,'.');textcolor(blue);
writeln('this file contains a list of
names,seats number,tickets numbers.');
{assign(file1,filkk)};reset(file1);textcolor(blue);
writeln('this class contains places for
',n1,' persons');
for i:=1 to n1 do
begin
seek(file1,i);read(file1,rr);
write('name :
','(',rr.name,')');
write(' . pass p # :
','(',rr.pass,')');
write(' . ticket number :
','(',rr.ticket,').');
writeln('given a ticket:
(',rr.k,')');
write(' ');
writeln('seat # is :
',rr.seat);
end;
readln;
{close(file1);}
end;
{========================}
procedure
major(var n1,n2:integer;var file1,file2:fil;var b:integer);
var
{It do all the main process and calls all procedures}
ansewer,ch:string;
rr:rec1;
wanted:str;
m1,m2,k,i,g,k1:integer;
hh:char;
begin
repeat
textcolor(blue);clrscr;
gotoxy(22,2);writeln('1:cancel in class
1');
gotoxy(22,5);writeln('2:cancel in class
2');
gotoxy(22,8);writeln('3:reserve in class
1');
gotoxy(22,11);writeln('4:reserve in class
2');
gotoxy(22,14);writeln('5:list of
information in each class');
gotoxy(22,17);writeln('6:tickets for
persons in the job');
gotoxy(22,20);writeln('7:changing any
mistake');
gotoxy(22,23);writeln('8:changing file
sizes');
hh:=readkey;
case hh of
'1':begin
clrscr;cancel1(n1,file1);
end;
'2':begin
clrscr;cancel2(n2,file2);
end;
'3':begin
clrscr;
number1(n1,file1,m1);
writeln('first class:full
seats(',m1,'),empty seats(',n1-m1,')');
if m1<n1 then begin b:=b+1;ticket1(n1,file1,b) end;
if m1>=n1 then begin
writeln('class 1 is
full');number2(n2,file2,m2);
if m2<n2 then
writeln('4:if class 2 is desired');
end;
end;
'4':begin
clrscr;
number2(n2,file2,m2);
writeln('second class:full seats
(',m2,'),empty seats (',n2-m2,')');
if m2<n2 then begin
b:=b+1;ticket2(n2,file2,b) end;
if m2>=n2 then begin
writeln('class 2 is
full ');
number1(n1,file1,m1);
if m1<n1 then
writeln('3:if class 1 is desired');
end;
end;
'5':begin
clrscr;results(1,n1,fil11,file1);
writeln('///////////////////////////////////////////');writeln;
results(2,n2,fil22,file2)
end;
'6':begin
clrscr;
gotoxy(20,5);writeln('a:ticket for
any one in class 1');
gotoxy(20,10);writeln('b:tickets for
all in class 1');
gotoxy(20,15);writeln('c:tickets for
any one in class 2');
gotoxy(20,20);writeln('d:tickets for
all in class 2');
hh:=readkey;
case hh of
'a':begin clrscr;
tickets1(n1,fil11,file1); end;
'b':begin
clrscr;tickets2(n1,fil11,file1);
end;
'c':begin
clrscr;tickets3(n2,fil11,file2);
end;
'd':begin clrscr;tickets4(n2,fil11,file2); end;
else writeln('wrong key');
end;
end;
'7':begin
clrscr;
gotoxy(20,10);
writeln('g:for changing name or pass
p in class 1');gotoxy(20,20);
writeln('h:for changing name or pass
p in class 2');{clrscr};
hh:=readkey;
case hh of
'g':begin
clrscr;change(n1,file1,b); end;
'h':begin
clrscr;change(n2,file2,b); end;
else writeln('wrong key');
end;
end;
'8':begin
clrscr;gotoxy(27,10);writeln('o:changing size of class 1');
gotoxy(27,20);writeln('p:changing
size of class 2');
hh:=readkey;
case hh of
'o':begin
clrscr;
repeat
writeln('enter new
size');readln(k1);
if k1<=n1 then
writeln('new size must be bigger than old');
until k1>n1;
g:=n1;n1:=k1;
for i:=g+1 to n1 do
begin
rr.name:='$';rr.seat:=-1;rr.pass:='-1';
rr.ticket:=0;rr.k:='n';seek(file1,i);
write(file1,rr);
end;
end;
'p':begin
clrscr;
repeat
writeln('enter new
size');readln(k1);
if k1<=n2 then
writeln('new size must be bigger than old');
until k1>n2;
g:=n2;n2:=k1;
for i:=g+1 to n2 do
begin
rr.name:='$';rr.seat:=-1;rr.pass:='-1';
rr.ticket:=0;rr.k:='n';seek(file2,i);
write(file2,rr);
end;
end;
end;
end;
else writeln('wrong key');
end;
writeln('continue......if no press (n) ,
else press any other key');
hh:=readkey;
until hh='n';
end;
{========================================================================}
begin {main program}
outline;clrscr;
repeat
writeln;
99: writeln('open files(o)...................creat new files(c)');
readln(ch);writeln;
until (ch='c') or (ch='o');
if ch='c' then hh:='c';if ch='o' then
hh:='o';
case hh of
'c':begin
writeln('enter name for file
1');readln(fil11);
findfirst(fil11,archive,dirinfo);
if doserror=0 then begin
writeln('file exists');delay(2000);
goto 99;
end;
fil22:=fil11+'s';
{$i-}
repeat
writeln('enter # of seats available
for first class');readln(n1);
until ioresult=0;b:=0;
{$i+}
{$i-}
repeat
writeln('enter # of seats available
for second class');readln(n2);
until ioresult=0;
{$i+}
assign(file1,fil11);rewrite(file1);file51(n1,file1);
assign(file2,fil22);rewrite(file2);file52(n2,file2);
major(n1,n2,file1,file2,b);rr.ticket:=b;seek(file1,0);
write(file1,rr);
close(file1);close(file2);
end;
'o':
begin
writeln('enter name for file
1');readln(fil11);
findfirst(fil11,archive,dirinfo);
if doserror <> 0 then
begin writeln('file not found');
delay(2000);goto 99;
end;
fil22:=fil11+'s';
assign(file1,fil11);reset(file1);n1:=(filesize(file1))-1;
assign(file2,fil22);reset(file2);n2:=(filesize(file2))-1;
seek(file1,0);read(file1,rr);y1:=rr.ticket;b:=y1;
seek(file2,0);read(file2,rr);y2:=rr.ticket;
{ if y1>y2 then b:=y1 else if
y2>y1 then b:=y2};
major(n1,n2,file1,file2,b);rr.ticket:=b;seek(file1,0);
write(file1,rr);
close(file1);close(file2);
end
end;
end.