Please note, this is a STATIC archive of website www.tutorialspoint.com from 11 May 2019, cach3.com does not collect or store any user information, there is no "phishing" involved.
Tutorialspoint

Compile and Execute Pascal Online

Program S6C30_ICTSBA;
Type
    GuestRecordType = Record
                        GName : String[30];
                        GradYear : integer; {add setting}
                        Sex : char;
                        age : integer;
                        ReservedSeats : 0..15;
                        IDNum : String;
                        FamilyMember : integer;
                        Pair : string;
                        TableNum : integer;
                    end;
var
    GDataFile : text;
    Guest : array[1..480] of GuestRecordType;
	DPGuest:array[1..480] of GuestRecordType;{Display}
    count,i,e : integer;
    choice : 1..5;
    Table,ExistGuest : integer;

Procedure RecallData(var count : integer);
begin
	assign(GDataFile, 'GuestData.txt');
    reset(GDataFile);
    while not eof(GDataFile) do	
	begin
		count:= count+1; {Miss}
		with Guest[count] do
		begin
		readln(GDataFile, GName);
		readln(GDataFile, GradYear);
		readln(GDataFile, Sex);
		readln(GDataFile, age);
		readln(GDataFile, IDNum);
		readln(GDataFile, FamilyMember);
		readln(GDataFile, ReservedSeats);
		readln(GDataFile, Pair);
		readln(GDataFile, TableNum);
		end;
	end;
close(GDataFile);
end;
	
Procedure AddRecord(var count : integer);
var
i,e : integer;
Wrong : boolean;
IDNum2:String;
begin
if count<480 
		then begin{Not fulled yet}
	
		Wrong := false;
		writeln('---Enter your information---');
		count := count + 1;
		Repeat
			write('Enter your Name:');
			readln(Guest[count].GName);
			For i:=1 to count-1 do
				if (Guest[i].GName = Guest[count].GName)or((length(Guest[count].GName) > 50)and(length(Guest[count].GName) <= 0)) 
					then Wrong := true
					else Wrong := false;
			If Wrong = true 
				then writeln('Wrong Input or Repeated');
		Until Wrong = false;
	
		With Guest[count] do
		begin
		e:=0;
		Repeat
			If e>0 then writeln('Wrong Input');
			write('Enter your Graduation year:');
			readln(GradYear);
			e:=e+1;
		Until (GradYear >=1930) and (GradYear <=2017);
		end;
		
		with Guest[count] do
		begin
		e:=0;
		Repeat
			If e>0 then writeln('Wrong Input');
			write('Enter your sex (M/F):');
			readln(Sex);
			e:=e+1;
		Until (Sex='M') or (Sex='F');
		end;
		
		with Guest[count] do
		begin
		e:=0;
		Repeat
			If e>0 then writeln('Wrong Input');
			write('Enter your age:');
			readln(age);
			e:=e+1;
		Until (age>=18) and (age<=120);
		end;
	
		Repeat
		e:=0;
			write('Enter your ID number(e.g.X123456(7)):');
			readln(Guest[count].IDNum);
			write('Enter your ID number again(e.g.X123456(7)):');
			readln(IDNum2);
			for i:=1 to count-1 do
				if (IDNum2<>Guest[count].IDNum) or (Guest[count].IDNum=Guest[i].IDNum)
					then e:=e+1;
			If e>0 then writeln('Wrong Input or IDNum used');
		Until e=0;
	
		with Guest[count] do
		begin
		e:=0;
		Repeat
			If e>0 then writeln('Wrong Input');
			write('Enter how many family member(s) will attend:');
			readln(FamilyMember);
			e:=e+1;
		Until (FamilyMember >= 0) and (FamilyMember <= 15);
		end;
		
		with Guest[count] do
		begin
		e:=0;
		Repeat
			If e>0 then writeln('Wrong Input');
			write('Enter you reserve 1~15 seat(s):');
			readln(ReservedSeats);
			e:= e+1;
		Until {(ReservedSeats>0) and (ReservedSeats<16)and} (ReservedSeats>=FamilyMember);
		end;
		
		with Guest[count] do
		begin
			Pair:= 'NotPaired';
			TableNum:=0;
		end;
		Writeln('New Record Added');
	end
	else writeln('Seat fulled or Time out');
end;

Procedure DelRecord(count : integer);
var 
    IDNumb : String;
    i,j : integer;
	found : boolean;
begin
if count<480 
	then begin
		found := false;
		write('Enter your ID number(e.g.X123456(7)):');
		readln(IDNumb);
		For i:= 1 to count do
		begin
			if Guest[i].IDNum = IDNumb
				then begin 
					Guest[i].GName := 'xxx';
					Guest[i].IDNum := 'xxx';
					found := true;
					for j:=1 to count do
						if (Guest[i].TableNum = Guest[j].TableNum)
							then begin
								Guest[i].TableNum:=0;
								Guest[i].Pair := 'NotPaired';
								Guest[j].TableNum:=0;
								Guest[j].Pair := 'NotPaired';
							end;
				end
		end;
		if found = false
			then writeln('Wrong Input');      
	end
	else writeln('Seat fulled or Time out');
end;

Procedure DisplayRecord(var count : integer);
var IDnumb : String;
    i, alignN: integer;
    found : Boolean;
begin
    found := false;
    write('Enter your ID number(e.g.X123456(7)):');
    readln(IDnumb);
    For i := 1 to count do
    begin
        if Guest[i].IDNum = IDnumb
            then begin
				found := true;
				alignN := length(Guest[i].GName)-4;
				If found = true
					then begin
						writeln;
						writeln('Name',' ':alignN, 'GradYear',' ':2, 'Sex',' ':2, 'ReservedSeats',' ':2,'TableNumber');
						with guest[i] do
						if TableNum = 0
							then writeln(GName, ' ':2, GradYear,' ':6, Sex,' ':8, ReservedSeats,' ':8,'Not Matched yet')
							else writeln(GName, ' ':2, GradYear,' ':6, Sex,' ':8, ReservedSeats,' ':13,TableNum);
					end
            end
    end;
	if found = false
		then writeln('Wrong Input');           
end;

Procedure SaveRecord(count : integer;var ExistGuest:integer);
var i : integer;
begin
    assign(GDataFile, 'GuestData.txt');
    rewrite(GDataFile);
    for i := 1 to count do
        begin
            with Guest[i] do
                if gname <> 'xxx'
                    then begin
						ExistGuest := ExistGuest+1;
						writeln(GDataFile, GName);
						writeln(GDataFile, GradYear);
						writeln(GDataFile, Sex);
						writeln(GDataFile, age);
						writeln(GDataFile, IDNum);
						writeln(GDataFile, FamilyMember);
						writeln(GDataFile, ReservedSeats);
						writeln(GDataFile, Pair);
						writeln(GDataFile,TableNum);
                    end;
        end;            
    close(GDataFile);
end;

Procedure PairBySex(count:integer; var Table :integer); {FamilyPair Procedure Run First}
var
    i,j,s,cal,a : integer;
begin
     a := 70;
    for s:=1 to 2 do
	begin
		For i:=1 to count do
        Begin
		cal :=0;
			if (Guest[i].Sex = chr(a)) and (Guest[i].Pair = 'NotPaired')
                then if Guest[i].ReservedSeats <> 15
                    then begin
                        Guest[i].Pair := 'Paired';
                        Guest[i].TableNum := Table;
                        cal := 15-Guest[i].ReservedSeats;
						Repeat
							For j:=1 to count do
								if (Guest[j].Pair = 'NotPaired') and (Guest[j].FamilyMember >=1) and (Guest[j].ReservedSeats <= cal)
									then Begin
										Guest[j].Pair := 'Paired';
										Guest[j].TableNum := Table;
										cal:=cal-Guest[j].ReservedSeats;
									end;
						Until ((cal>=15) and (cal<=15))or (j=count);
                    end
					else begin
						Guest[i].Pair := 'Paired';
						Guest[i].TableNum := Table;
						Table := Table +1;
					end;
		end;
	a:=a+7;
    end;
end;    

Procedure PairByFamily(count : integer;var Table :integer);  {Mistake : wrong to use With ..do}
var
    cal,i,j:integer;
begin
    For i:=1 to count do
        Begin
		cal :=0;
		if (Guest[i].Pair = 'NotPaired') and (Guest[i].FamilyMember >=1)
			then if Guest[i].ReservedSeats <> 15
                then begin
					cal := 15-Guest[i].ReservedSeats;
                    Guest[i].Pair := 'Paired';
                    Guest[i].TableNum := Table;
					Repeat
						For j:=1 to count do
							if (Guest[j].Pair = 'NotPaired') and (Guest[j].FamilyMember >=1) and (Guest[j].ReservedSeats <= cal)
								then Begin
									Guest[j].Pair := 'Paired';
									Guest[j].TableNum := Table;
									cal:=cal-Guest[j].ReservedSeats;
								end;
					Until ((cal>=15) and (cal<=15))or (j=count);
					Table := Table+1;
				end
                else begin
					Guest[i].Pair := 'Paired';
                    Guest[i].TableNum := Table;
                    Table := Table+1;
                end;
       end; 
end;                                            

Procedure Sorting(count,Table:integer);{bubble sort}
var j,a:integer;
begin
	For a:=1 to count-1 do	
		for j:= 1 to Count-a do
			if Guest[j].GName > Guest[j+1].GName
				then begin
					DPGuest[1].GName := Guest[j].GName;
					DPGuest[1].GradYear := Guest[j].GradYear;
					DPGuest[1].Sex := Guest[j].Sex;
					DPGuest[1].age := Guest[j].age;
					DPGuest[1].IDNum := Guest[j].IDNum;
					DPGuest[1].FamilyMember := Guest[j].FamilyMember;
					DPGuest[1].ReservedSeats := Guest[j].ReservedSeats;
					DPGuest[1].Pair := Guest[j].Pair;
					DPGuest[1].TableNum := Guest[j].TableNum;
					
					Guest[j].GName := Guest[j+1].GName;
					Guest[j].GradYear := Guest[j+1].GradYear;
					Guest[j].Sex := Guest[j+1].Sex;
					Guest[j].age := Guest[j+1].age;
					Guest[j].IDNum := Guest[j+1].IDNum;
					Guest[j].FamilyMember := Guest[j+1].FamilyMember;
					Guest[j].ReservedSeats := Guest[j+1].ReservedSeats;
					Guest[j].Pair := Guest[j+1].Pair;
					Guest[j].TableNum := Guest[j+1].TableNum;
					
				    Guest[j+1].GName := DPGuest[1].GName;
					Guest[j+1].GradYear := DPGuest[1].GradYear;
					Guest[j+1].Sex := DPGuest[1].Sex;
					Guest[j+1].age := DPGuest[1].age;
					Guest[j+1].IDNum := DPGuest[1].IDNum;
					Guest[j+1].FamilyMember := DPGuest[1].FamilyMember;
					Guest[j+1].ReservedSeats := DPGuest[1].ReservedSeats;
					Guest[j+1].Pair := DPGuest[1].Pair;
					Guest[j+1].TableNum := DPGuest[1].TableNum;
				end;
end;

Procedure AdminFunctions;
Var password:string;
	ans,ans2:char;
	alignN:integer;
begin
	write('Enter the password:');
	readln(password);
	if password = 'raymond123'
		then begin
			Repeat
				write('Do matching?(Y/N) : ');
				readln(ans);
			Until (ans = 'Y') or (ans='N');
			if ans = 'Y'
				then begin
				PairByFamily(count,Table);
				PairBySex(count,Table);
				Sorting(count, Table);
				Repeat
				write('Display result?(Y/N) : ');
				readln(ans2);
				Until (ans = 'Y') or (ans='N');
				If ans2 = 'Y'
					then for i :=1 to count do
						begin
						 alignN := 30-length(Guest[i].GName);
						writeln(Guest[i].GName,' ':alignN,'Table No.',Guest[i].TableNum) ;
						end;
				end;
		end
		else writeln('Wrong Input!');
end;

Begin {Main Program}
    count := 0;{added}
	ExistGuest :=0;
	Table:=1;
	RecallData(count);
    Repeat
		writeln('==============================');
        writeln('Guest Record:');
		writeln('==============================');
        writeln('1. Add New Record');
        writeln('2. Delete Record');
        writeln('3. Display Record');
		writeln('4. AdminFunctions');
        writeln('5. Quit');
		E:=0;
        repeat
			if e>0 then writeln('Wrong Input');
            write('Enter your choice(1-5):');
            readln(choice);
			e:=e+1;
        until choice in [1..5];
        case choice of 
            1 : AddRecord(count);
            2 : DelRecord(count);
            3 : DisplayRecord(count);
			4 : AdminFunctions;
        end;
    Until choice = 5;
	SaveRecord(count,ExistGuest);
	Writeln(ExistGuest,' Guest(s)');
end.

Advertisements
Loading...

We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy.