LOGITEL.PAS 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. program logitel;
  2. (* Simple hotel accounting program to test translation of file types *)
  3. (*$V-*)
  4. (* Maximum rooms in the LogiTel motel *)
  5. const MAX_ROOMS = 100;
  6. MAX_MENU = 4;
  7. type string80 = string[80];
  8. string60 = string[60];
  9. string14 = string[14];
  10. GuestInfo = record
  11. Empty : boolean;
  12. Name : string60;
  13. Expenses : real;
  14. end;
  15. var Guest : ARRAY [1..MAX_ROOMS] OF GuestInfo;
  16. Num_Guests : 0..MAX_ROOMS;
  17. Choice : integer;
  18. Answer : char;
  19. Filename : string14;
  20. GuestFile : FILE OF GuestInfo;
  21. procedure Wait_Message;
  22. var C : char;
  23. begin
  24. writeln; writeln;
  25. writeln('Press <CR> to continue ');
  26. readln(C);
  27. end;
  28. procedure Center_Text(S : string80; Line_Num : integer);
  29. (* Procedure to display line 'S' at row 'Line_Num' *)
  30. var Spaces : integer;
  31. begin
  32. Spaces := 40 - Length(S) DIV 2;
  33. GOTOXY(1,Line_Num);
  34. ClrEOL;
  35. GOTOXY(Spaces,Line_Num);
  36. writeln(S)
  37. end;
  38. procedure Initialize;
  39. (* Procedure to initialize a new motel guest list *)
  40. var I : integer;
  41. begin
  42. Num_Guests := 0;
  43. for I := 1 TO MAX_ROOMS do
  44. with Guest[I] do begin
  45. Empty := TRUE;
  46. Name := '';
  47. Expenses := 0.
  48. end;
  49. end;
  50. procedure ReadList;
  51. (* Procedure to read guest list *)
  52. var I : integer;
  53. begin
  54. write('Enter filename ');
  55. readln(Filename); writeln;
  56. Assign(GuestFile,Filename);
  57. (*$I-*) Reset(GuestFile); (*$I+*)
  58. if IOresult = 0
  59. then
  60. for I := 1 TO MAX_ROOMS do
  61. read(GuestFile,Guest[I])
  62. else begin
  63. Initialize;
  64. writeln('Cannot find file ',Filename);
  65. writeln('Initializing motel list');
  66. Wait_Message;
  67. end;
  68. Close(GuestFile);
  69. end;
  70. procedure SaveList;
  71. (* Procedure to write guest list *)
  72. var I : integer;
  73. begin
  74. if Num_Guests > 0 then begin
  75. if Filename = '' (* Writing a new guest list? *)
  76. then begin
  77. write('Enter filename ');
  78. readln(Filename); writeln
  79. end;
  80. Assign(GuestFile,Filename);
  81. (*$I-*) Rewrite(GuestFile); (*$I+*)
  82. if IOresult = 0
  83. then begin
  84. Num_Guests := 0;
  85. for I := 1 TO MAX_ROOMS do begin
  86. write(GuestFile,Guest[I]);
  87. if NOT Guest[I].Empty then
  88. Num_Guests := Num_Guests + 1
  89. end
  90. end
  91. else begin
  92. writeln('Sorry cannot write to file ');
  93. Wait_Message;
  94. end;
  95. Close(GuestFile);
  96. end
  97. end;
  98. procedure AddList;
  99. (* Procedure to add a guest, if there is room *)
  100. var Found : boolean;
  101. Room : integer;
  102. begin
  103. if Num_Guests < MAX_ROOMS
  104. then begin
  105. (* Search for vacant room *)
  106. Found := FALSE;
  107. Room := 1;
  108. while (Room <= MAX_ROOMS) AND (NOT Found) do
  109. if Guest[Room].Empty
  110. then Found := TRUE
  111. else Room := Room + 1;
  112. (* Enter guest name *)
  113. Center_Text('******* Welcome to Logitel ******',1);
  114. writeln; writeln;
  115. with Guest[Room] do begin
  116. write('Name ? ');
  117. readln(Name);
  118. Empty := FALSE;
  119. Expenses := 0.;
  120. end;
  121. writeln;
  122. writeln('Your room number is ',Room);
  123. Wait_Message;
  124. Num_Guests := Num_Guests + 1;
  125. end
  126. else
  127. writeln('Sorry! We have no vacancies ')
  128. end;
  129. procedure FalseInfo(Room : integer);
  130. (* Procedure to display warning message *)
  131. begin
  132. writeln('---------------------------------');
  133. writeln(' This cannot be correct!');
  134. writeln(' There is no guest in room ',Room);
  135. writeln(' Please re-enter room number');
  136. writeln('---------------------------------');
  137. writeln
  138. end;
  139. procedure DelList;
  140. (* Procedure to check out guest from motel *)
  141. var Room : integer;
  142. OK : boolean;
  143. begin
  144. if Num_Guests > 0 then
  145. repeat
  146. repeat
  147. write('Enter room number ');
  148. readln(Room); writeln;
  149. until (Room > 0) AND (Room <= MAX_ROOMS);
  150. OK := NOT Guest[Room].Empty;
  151. if OK
  152. then begin
  153. with Guest[Room] do begin
  154. write(Name,' please pay $ ',Expenses);
  155. writeln;
  156. Empty := TRUE;
  157. Name := '';
  158. Expenses := 0.;
  159. end;
  160. Num_Guests := Num_Guests - 1;
  161. Wait_Message
  162. end
  163. else FalseInfo(Room);
  164. until OK
  165. else begin
  166. writeln('Motel is empty!');
  167. Wait_Message;
  168. end
  169. end;
  170. procedure Charge;
  171. (* Procedure to post charges to guests *)
  172. var Room : integer;
  173. OK : boolean;
  174. New_Charge : real;
  175. begin
  176. if Num_Guests > 0 then
  177. repeat
  178. repeat
  179. write('Enter room number ');
  180. readln(Room); writeln;
  181. until (Room > 0) AND (Room <= MAX_ROOMS);
  182. OK := NOT Guest[Room].Empty;
  183. if OK
  184. then begin
  185. with Guest[Room] do begin
  186. write('Enter charge ');
  187. readln(New_Charge);
  188. Expenses := Expenses + New_Charge;
  189. end;
  190. end
  191. else FalseInfo(Room);
  192. until OK
  193. else begin
  194. writeln('Motel is empty!');
  195. Wait_Message;
  196. end
  197. end;
  198. procedure ViewList;
  199. (* Procedure to lookup a particular guest *)
  200. var Room : integer;
  201. begin
  202. repeat
  203. write('Enter room number ');
  204. readln(Room); writeln;
  205. until (Room > 0) AND (Room <= MAX_ROOMS);
  206. with Guest[Room] do
  207. if Empty
  208. then
  209. writeln('Room ',Room,' is empty')
  210. else begin
  211. writeln('Room # ',Room,' information');
  212. writeln;
  213. writeln(' Guest : ',Name); writeln;
  214. writeln(' Expenses : $ ',Expenses);
  215. writeln
  216. end;
  217. Wait_Message;
  218. end;
  219. begin (*-------- M A I N -----------*)
  220. ClrScr;
  221. write('Start a new hotel list? (Y/N) ');
  222. readln(Answer);
  223. Filename := '';
  224. if UpCase(Answer) = 'Y' then Initialize
  225. else ReadList;
  226. repeat
  227. repeat
  228. CLrScr;
  229. Center_Text('-------- Activity Menu ------- ',2);
  230. writeln; writeln;
  231. writeln('0) Quit'); writeln;
  232. writeln('1) Enter new guest name '); writeln;
  233. writeln('2) Check out guest name '); writeln;
  234. writeln('3) Add expenses to guest'); writeln;
  235. writeln('4) Lookup a room information'); writeln;
  236. writeln; writeln;
  237. write('Select by number ');
  238. readln(Choice); writeln;
  239. until (Choice >= 0) AND (Choice <= MAX_MENU);
  240. ClrScr;
  241. CASE Choice OF
  242. 0 : SaveList;
  243. 1 : AddList;
  244. 2 : DelList;
  245. 3 : Charge;
  246. 4 : ViewList;
  247. end;
  248. until Choice = 0;
  249. end.
  250.