Advertisement
silleghost

Untitled

Feb 21st, 2020
408
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.47 KB | None | 0 0
  1. Unit Unit1; // файл Unit1.pas
  2. Interface
  3.  
  4. Uses
  5. SysUtils; // ANSIUpperCase и др. - смена регистра и обработка исключений
  6.  
  7. Type
  8. TSubject = (math,physics,programming,english);
  9. TMark = (otl,xop,ud,neud);
  10. TGroup = record
  11. Name:string[30];
  12. Subject:TSubject;
  13. Mark:TMark;
  14. number:byte;
  15. end;
  16. //----------первая часть: создание типизированного файла в диалоге
  17. Procedure CreateTypedFile1();
  18.  
  19. //----------вторая часть: создание типизированного файла из текстового
  20. Procedure CreateTypedFile2();
  21.  
  22. //-------------- третья часть: поиск в типизированном файле ----
  23. Procedure Findgroup();
  24.  
  25. //-------------- просмотр типизированного файла ----
  26. Procedure ViewFile();
  27.  
  28. Implementation // -----------реализационная часть-----------------
  29.  
  30. //----------первая часть: создание типизированного файла в диалоге
  31. Procedure CreateTypedFile1();
  32. var
  33. group:TGroup;
  34. fr: file of TGroup; // типизированный файл - файл записей
  35. n, kol: integer;
  36. ch: char;
  37. FileName:string[80];
  38. begin
  39. if ParamCount<1 then
  40. begin
  41. writeln('Мало параметров '#13#10'Press enter ');
  42. readln; exit
  43. end;
  44. FileName := ParamStr(1);
  45. // или простой диалог или через параметры программы при её вызове ParamStr(1)
  46. // writeln('Введите имя типизированного файла');
  47. // readln(FileName);
  48. AssignFile(fr, FileName);
  49. Try ReWrite(fr); // или {$I-} ReWrite(fr); {$I+} и if IOResult<>0 then <ошибка>
  50. Except
  51. writeln('Error: не удалось создать типизированный файл ',FileName);
  52. write('Press ENTER '); readln; exit
  53. end;
  54.  
  55. kol:=0;
  56. repeat
  57. write('Название группы '); readln(group.Name);
  58. write('Предмет (Матан - 1, физика - 2, программирование - 3, английский - 4) =? '); readln(n); Group.subject:=Tsubject(n-1);
  59. write('Оценка (Отлично - 1, хорошо - 2, удовл - 3, неуд - 4) =? '); readln(n); group.mark:=TMark(n-1);
  60. write('Количество студентов с заданной оценкой =? '); readln(Group.number);
  61. write(fr,group);
  62. inc(kol);
  63.  
  64. write('Ещё? (y/n) ');
  65. readln(ch)
  66. until UpCase(ch)='N';
  67.  
  68. CloseFile(fr);
  69.  
  70. writeln('Создан типизированный файл из ',kol,' записей');
  71. write('Press ENTER ');
  72. readln;
  73. end;
  74.  
  75. //---------------------------------------------------------------------------------------
  76. //----------вторая часть: создание типизированного файла из текстового
  77. Procedure CreateTypedFile2();
  78. var
  79. group:TGroup;
  80. ft: TextFile; // текстовый файл
  81. fr: file of TGroup; // типизированный файл - файл записей
  82. n, kol: integer;
  83. begin
  84. if ParamCount<2 then
  85. begin
  86. writeln('Мало параметров '#13#10'Press enter');
  87. readln; exit
  88. end;
  89.  
  90. // или простой диалог или через параметры программы при её вызове ParamStr(2)
  91. // writeln('Введите имя текстового файла');
  92. // readln(FileName);
  93.  
  94. AssignFile(ft, ParamStr(2));
  95. Try Reset(ft);
  96. Except
  97. writeln('Error: не удалось открыть текстовый файл ', ParamStr(2));
  98. write('Press ENTER'); readln; exit
  99. end;
  100. AssignFile(fr, ParamStr(1));
  101. Try Rewrite(fr);
  102. Except
  103. writeln('Error: не удалось открыть текстовый файл ', ParamStr(1));
  104. write('Press ENTER'); readln; exit
  105. end;
  106. kol:=0;
  107. while not eof(ft) do begin
  108. readln(ft, group.name);
  109. readln(ft, n); group.subject:=Tsubject(n-1);
  110. readln(ft, n); group.mark:=Tmark(n-1);
  111. readln(ft, group.number);
  112. Write(fr, group);
  113. Inc(kol);
  114. end;
  115. CloseFile(ft);
  116. CloseFile(fr);
  117.  
  118. writeln('создан типизированный файл из ', kol, ' записей');
  119. write('Press ENTER');
  120. readln;
  121. end;
  122. //--------------------------------------------------------------
  123. //-------------- третья часть: поиск в типизированном файле ----
  124. Procedure Findgroup();
  125. var
  126. i:byte;
  127. group:TGroup;
  128. gr1,gr2:TGroup;
  129. fr: file of TGroup;
  130. n, pos: integer;
  131. FileName:string[80];
  132. begin
  133. if ParamCount<1 then
  134. begin
  135. writeln('Мало параметров '#13#10'Press enter');
  136. readln; exit
  137. end;
  138.  
  139. FileName := ParamStr(1);
  140. // или простой диалог или через параметры программы при её вызове ParamStr(1)
  141. // writeln('Введите имя типизированного файла');
  142. // readln(FileName);
  143.  
  144. AssignFile(fr, FileName);
  145. Try ReSet(fr); // или {$I-} ReSet(fr); {$I+} if IOResult<>0 then
  146. Except
  147. writeln('Error: не удалось открыть типизированный файл ',FileName);
  148. write('Press ENTER'); readln; exit
  149. end;
  150. if (FileSize(ft) = 0) then
  151. begin
  152. writeln('Записи отсутствуют ');
  153. writeln('Press ENTER'); readln; exit
  154. end;
  155. pos:=0;
  156. while not eof(fr) do begin
  157. n:=0;
  158. read(fr,group);
  159. for i:=0 to length(group.name) do
  160. if group.name[i] = '1' then n:=n+1;
  161. if (n = 2) and (group.mark = TMark(0)) and (group.number >= 2) then
  162. pos:=filepos(fr);
  163. end;
  164. writeln(pos);
  165. if pos=0 then
  166. writeln('Данные, соответствующие запросу, не найдены')
  167. else
  168. begin
  169. writeln('Найдена ', pos, '-я запись');
  170. seek(fr,0);
  171. read(fr,gr1);
  172. seek(fr,pos-1);read(fr,gr2);
  173. seek(fr,pos-1);write(fr,gr1);
  174. seek(fr,0);write(fr,gr2);
  175. end;
  176. CloseFile(fr);
  177.  
  178. write('Press ENTER'); readln;
  179. end;
  180. //--------------------------------------------------------------
  181. //-------------- просмотр типизированного файла ----
  182. Procedure ViewFile();
  183. var
  184. group: TGroup;
  185. fr: file of TGroup;
  186. kol: integer;
  187. FileName:string[80];
  188. begin
  189. if ParamCount<1 then
  190. begin
  191. writeln('Мало параметров '#13#10'Press enter');
  192. readln; exit
  193. end;
  194.  
  195. FileName := ParamStr(1);
  196. // или простой диалог или через параметры программы при её вызове ParamStr(1)
  197. // writeln('Введите имя типизированного файла');
  198. // readln(FileName);
  199. AssignFile(fr, FileName);
  200. Try ReSet(fr); // или {$I-} ReSet(fr); {$I+} if IOResult<>0 then
  201. Except
  202. writeln('Error: не удалось открыть типизированный файл ',FileName);
  203. write('Press ENTER'); readln; exit
  204. end;
  205.  
  206. kol:=0;
  207. while not eof(fr) do
  208. begin
  209. read(fr, Group); // считывание
  210.  
  211. writeln('Найдена группа ', group.name,' с оценкой ', group.mark,' по предмету ',group.subject,' в количестве ',group.number, ' штук' );
  212. inc(kol);
  213. end;
  214.  
  215. if kol=0 then
  216. writeln('Данные не найдены')
  217. else
  218. writeln('Найдено ',kol, ' записей');
  219.  
  220. CloseFile(fr);
  221.  
  222. write('Press ENTER '); readln;
  223. end;
  224.  
  225. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement