program persfile; uses crt,printer; {--------------------------------------------------------------------------- This program will introduce a new type of variable called a record. A record is like an empty file folder that the user can use to put any thing he or she wants to put in it. This program will read in one record from the user and print it back to the screen. We need procedures from the following : input output change delete print mainmenu by --------------------------------------------------------------------------} TYPE recordtype = record last : string[20]; first : string[20]; street : string[30]; city : string[15]; state : string[2]; zip : string[10]; phone : string[20]; email : string[50]; bday : string[20]; notes : string; end; VAR rec : recordtype; saved : file of recordtype; x,y : integer; choice : char; fexist : boolean; title : string; procedure FileExists(filename: string); begin {$I-} Assign(saved, filename); Reset(saved); Close(saved); {$I+} fexist := (IOResult = 0) and (filename <> ''); end; procedure convert; var temp:integer; b:char; begin y := 0; repeat b := readkey; case b of '0' : temp := 0; '1' : temp := 1; '2' : temp := 2; '3' : temp := 3; '4' : temp := 4; '5' : temp := 5; '6' : temp := 6; '7' : temp := 7; '8' : temp := 8; '9' : temp := 9; else temp := 11; end; if temp <> 11 then begin write(temp); y := (y * 10) + temp; end; until ord(b) = 13; end; procedure output; begin writeln ('Displaying Record Info'); for y := 1 to 20 do write (#205); writeln; writeln; write ('1. FIRST NAME : '); writeln (rec.first); write ('2. LAST NAME : '); writeln (rec.last); write ('3. STREET : '); writeln (rec.street); write ('4. CITY : '); writeln (rec.city); write ('5. STATE : '); writeln (rec.state); write ('6. ZIP CODE : '); writeln (rec.zip); write ('7. PHONE NUMBER : '); writeln (rec.phone); write ('8.EMAIL ADDRESS : '); writeln (rec.email); write ('9. BIRTH DAY : '); writeln (rec.bday); write ('10. NOTES : '); writeln (rec.notes); end; procedure input; begin reset(saved); seek (saved, filesize(saved)); clrscr; writeln ('Entering Record Info'); for y := 1 to 20 do write (#205); writeln; writeln; writeln ('Please enter the person''s :');writeln; write (' FIRST NAME : '); readln (rec.first); write (' LAST NAME : '); readln (rec.last); write (' STREET : '); readln (rec.street); write (' CITY : '); readln (rec.city); write (' STATE : '); readln (rec.state); write (' ZIP CODE : '); readln (rec.zip); write (' PHONE NUMBER : '); readln (rec.phone); write (' EMAIL ADDRESS : '); readln (rec.email); write (' BIRTH DAY : '); readln (rec.bday); write (' NOTES : '); readln (rec.notes); writeln; end; procedure new_file; begin clrscr; writeln; write ('Are you sure you want to do this? (All previous data will be lost)'); repeat choice := upcase(readkey); until (choice = 'N') or (choice = 'Y'); writeln;writeln; if choice = 'Y' then begin rewrite(saved); writeln ('New Data File Created'); readkey; end; end; procedure load_names; var a,b : string; begin reset (saved); repeat clrscr; writeln; writeln ('Please find the number of the person you want to ',title,' . . .'); writeln; x := 1; reset (saved); while not (eof(saved)) do begin read (saved,rec); writeln (x,' : ',rec.first,' ',rec.last); x := x + 1; if wherey > 21 then begin writeln; write ('--More--'); readkey; clrscr; writeln; writeln; end; end; writeln; writeln; write ('And type in their number right here : '); convert; x := y; x := x - 1; until (x < filesize(saved)) and (x > -1); seek (saved,x); read (saved,rec); close(saved); end; procedure print_record; begin clrscr; title := 'print'; reset(saved); if filesize(saved) > 0 then begin repeat load_names; writeln ('Printing Record Info'); for y := 1 to 20 do write (lst,#205); writeln(lst); writeln(lst); write (lst,'1. FIRST NAME : '); writeln (lst,rec.first); write (lst,'2. LAST NAME : '); writeln (lst,rec.last); write (lst,'3. STREET : '); writeln (lst,rec.street); write (lst,'4. CITY : '); writeln (lst,rec.city); write (lst,'5. STATE : '); writeln (lst,rec.state); write (lst,'6. ZIP CODE : '); writeln (lst,rec.zip); write (lst,'7. PHONE NUMBER : '); writeln (lst,rec.phone); write (lst,'8.EMAIL ADDRESS : '); writeln (lst,rec.email); write (lst,'9. BIRTH DAY : '); writeln (lst,rec.bday); write (lst,'10. NOTES : '); writeln (lst,rec.notes); writeln; writeln ('Your record has been sent to the printer.'); write ('Print another record?'); repeat choice := upcase(readkey); until (choice = 'Y') or (choice = 'N'); until choice = 'N'; end else begin writeln ('You have no records in your file to print.'); readkey; end; end; procedure add_record; begin repeat input; write ('Add this record to your data file?'); repeat choice := upcase (readkey); until (choice = 'Y') or (choice = 'N'); if choice = 'Y' then begin write (saved,rec); writeln; writeln ('Data saved'); end; writeln; write ('Add another record?'); repeat choice := upcase(readkey); until (choice = 'Y') or (choice = 'N'); until choice = 'N'; close(saved); end; procedure change_record; begin clrscr; title := 'change'; reset(saved); if filesize(saved) > 0 then begin load_names; repeat repeat clrscr; writeln; output; writeln; write ('Which number field do you want to change? (1 through 10) --> '); convert; until (y >= 1) and (y <= 10); clrscr; writeln;writeln; case y of 1 : begin write ('Please enter the FIRST NAME : '); readln (rec.first); end; 2 : begin write ('Please enter the LAST NAME : '); readln (rec.last); end; 3 : begin write ('Please enter the STREET : '); readln (rec.street); end; 4 : begin write ('Please enter the CITY : '); readln (rec.city); end; 5 : begin write ('Please enter the STATE : '); readln (rec.state); end; 6 : begin write ('Please enter the ZIP : '); readln (rec.zip); end; 7 : begin write ('Please enter the PHONE NUMBER : '); readln (rec.phone); end; 8 : begin write ('Please enter the EMAIL ADDRESS : '); readln (rec.email); end; 9 : begin write ('Please enter the BIRTH DAY : '); readln (rec.bday); end; 10 : begin write ('Please enter the NOTES : '); readln (rec.notes); end; end; writeln; write ('Change another field?'); repeat choice := upcase(readkey); until (choice = 'N') or (choice = 'Y'); until choice = 'N'; reset(saved); seek(saved,x); write(saved,rec); close(saved); end else begin writeln; writeln ('You have no records in your data file.'); writeln ('To create a new record, select "Input a Record" at the Main Menu.'); readkey; end; end; procedure delete_record; begin clrscr; title := 'delete'; reset(saved); if filesize(saved) > 0 then begin load_names; clrscr; output; writeln; write ('Are you sure you want to delete this record?'); repeat choice := upcase(readkey); until (choice = 'Y') or (choice = 'N'); if choice = 'Y' then begin reset(saved); while x + 1 < filesize(saved) do begin seek(saved,x + 1); read(saved,rec); seek(saved,x); write(saved,rec); x := x + 1; end; seek(saved,x); truncate(saved); writeln;writeln; writeln ('Record deleted'); close(saved); readkey; end; end else begin close(saved); writeln ('You don''t have any records in your file to delete.'); readkey; end; end; procedure view_record; begin clrscr; title := 'view'; reset (saved); if filesize(saved) > 0 then begin load_names; clrscr; output; repeat writeln; write ('Do you want to view another record?'); repeat choice := upcase(readkey); until (choice = 'Y') or (choice = 'N'); if choice = 'Y' then begin load_names; clrscr; output; end; until choice = 'N'; end else begin close(saved); writeln ('You don''t have any records in your file'); readkey; end; end; procedure main_menu; begin clrscr; writeln; writeln; writeln; textcolor (7); writeln ('Main Menu'); for y := 1 to 9 do write (#205); writeln;writeln; reset(saved); writeln ('You currently have ',filesize(saved),' records in your data file.'); writeln; close(saved); writeln ('[N]ew File'); writeln ('[I]nput a Record'); writeln ('[V]iew a Record'); writeln ('[C]hange a Record'); writeln ('[D]elete a Record'); writeln ('[P]rint a Record');writeln; writeln ('[Q]uit'); writeln;writeln; write (' Please enter a letter : '); choice := upcase(readkey); case choice of 'N' : new_file; 'I' : add_record; 'V' : view_record; 'C' : change_record; 'D' : delete_record; 'P' : print_record; end; end; begin clrscr; fileexists('persdata.$$$'); if (fexist = false) then begin rewrite (saved); close (saved); fexist := true; writeln ('Failed to Detect Old Data, New Data File Created'); end else begin writeln ('Detected Old Data File, Data Loaded'); end; delay(2500); repeat main_menu; until choice = 'Q'; clrscr; normvideo; end.