Advertisement
Guest User

Untitled

a guest
Dec 21st, 2014
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.66 KB | None | 0 0
  1. unit spiski;
  2. interface
  3. uses crt, vedomost;
  4. type
  5. point = ^recr;
  6. recr = record
  7. key: string;
  8. skcode:integer;
  9. wkcode:integer;
  10. amount:integer;
  11. price1:real;
  12. next:point;
  13. end;
  14. var
  15. head:point;
  16. firstel:point;
  17. last:point;
  18. kk:recr;
  19. p:point;
  20. procedure EnterElem(kk:recr; p:point); {Ввод элемента записи}
  21. procedure CreateEmpty(var firstel,head:point); {Создание пустого однонаправленного циклического списка с головным элементом}
  22. procedure Addelemfirst(firstel:point); {Добавление элемента в начало циклического списка}
  23. procedure Addelemlast(firstel, last:point); {Добавление элемента в конец циклического списка}
  24. procedure DeleteElem(var firstel:point); {Удаление элемента из списка через уникальный идентификатор}
  25. procedure DeleteSpisok(firstel:point); {Удаление циклического списка}
  26. procedure OutputSpisok(firstel:point); {Вывод списка на экран}
  27. procedure SpisokToFile(firstel:point); {Запись циклического списка в файл}
  28. procedure FileToSpisok(firstel:point); {Вывод списка из типизированного файла}
  29.  
  30. Implementation
  31.  
  32. procedure EnterElem(kk:recr; p:point); {Ввод элемента записи}
  33. begin
  34. Write('Введите уникальный ключ-идентификатор записи: '); Readln(kk.key);
  35. Write('Введите код склада: '); Readln(kk.skcode);
  36. Write('Введите код цеха'); Readln(kk.wkcode);
  37. Write('Введите кол-во произведенных деталей: '); Readln(kk.amount);
  38. Write('Введите цену одной детали'); Readln(kk.price1);
  39. kk.key:=p^.key;
  40. kk.skcode:=p^.skcode;
  41. kk.wkcode:=p^.wkcode;
  42. kk.amount:=p^.amount;
  43. kk.price1:=p^.price1;
  44. end;
  45.  
  46. procedure CreateEmpty(var firstel,head:point); {Создание пустого однонаправленного циклического списка с головным элементом}
  47. begin
  48. if firstel=nil then begin
  49. head^.next:=firstel;
  50. firstel^.next:=head;
  51. end;
  52. end;
  53.  
  54. procedure Addelemfirst(firstel:point); {Добавление элемента в начало циклического списка}
  55. var g, last:point;
  56. begin
  57. enterelem(kk,g);
  58. if firstel^.next=head then begin
  59. g:=firstel;
  60. firstel^.next:=head;
  61. head^.next:=firstel;
  62. end
  63. else begin
  64. g^.next:=firstel;
  65. firstel^.next:=g;
  66. firstel:=last;
  67. g:=firstel;
  68. head^.next:=firstel;
  69. end;
  70. Writeln('Элемент успешно добавлен.');
  71. end;
  72.  
  73. procedure Addelemlast(firstel, last:point); {Добавление элемента в конец циклического списка}
  74. var g,q: point;
  75. begin
  76. EnterElem(kk,g);
  77. if firstel^.next=head then begin
  78. g:=firstel;
  79. firstel^.next:=head;
  80. head^.next:=firstel;
  81. end
  82. else begin
  83. q:=firstel;
  84. while q^.next<>head do q:=q^.next;
  85. q^.next:=g;
  86. g:=last;
  87. last^.next:=head;
  88. end;
  89. Writeln('Элемент успешно добавлен.');
  90. end;
  91.  
  92. procedure DeleteElem(var firstel:point); {Удаление элемента из списка через уникальный идентификатор}
  93. var current, previous: point; var delkey:string;
  94. begin
  95. Write('Введите ключ-идентификатор элемента, который вы хотели бы удалить: '); Readln(delkey);
  96. if firstel^.next=head then begin
  97. Writeln('Ошибка удаления. Список пуст.');
  98. exit;
  99. end;
  100. begin
  101. previous:=last;
  102. current:=firstel;
  103. while (current^.next<>head) and (current^.key<>delkey) do begin
  104. previous:= current;
  105. current:=current^.next;
  106. end;
  107. if current^.next=head then begin
  108. Writeln('Ошибка удаления. Элемента с заданным идентификатором в списке нет.');
  109. exit;
  110. end;
  111. if previous^.next=current then begin
  112. firstel:=firstel^.next;
  113. end
  114. else begin
  115. previous^.next:=current^.next;
  116. dispose(current);
  117. Writeln('Элемент с заданным идентификатором успешно удален.');
  118. end;
  119. end;
  120. end;
  121.  
  122. procedure DeleteSpisok(firstel:point); {Удаление циклического списка}
  123. var deleting:point;
  124. begin
  125. if firstel^.next=head then begin
  126. writeln('Ошибка удаления. Список пуст.');
  127. end;
  128. while firstel^.next<>head do begin
  129. deleting:=firstel;
  130. firstel:=firstel^.next;
  131. dispose(deleting);
  132. end;
  133. Writeln('Список успешно удален.');
  134. end;
  135.  
  136. procedure OutputSpisok(firstel:point); {Вывод списка на экран}
  137. var cur: point;
  138. begin
  139. if firstel^.next=head then begin
  140. writeln('Список пуст. Чтобы вывести его на экран, для начала заполните его элементами.');
  141. exit;
  142. end;
  143. cur:=firstel;
  144. writeln('Код склада Код цеха Кол-во деталей Цена за единицу');
  145. writeln('-----------------------------------------------------------------------------');
  146. while cur^.next<>cur do begin
  147. Writeln(cur^.skcode, ' ', cur^.wkcode, ' ', cur^.amount, ' ', cur^.price1);
  148. writeln('-----------------------------------------------------------------------------');
  149. cur:=cur^.next;
  150. end;
  151. end;
  152.  
  153. procedure SpisokToFile(firstel:point); {Запись циклического списка в файл}
  154. var tf: text; var name:string; var qu:point;
  155. begin
  156. Write('Введите имя для файла: '); Readln(name);
  157. if fileexists(name) then begin
  158. Writeln('Ошибка. Файл с таким именем уже существует.');
  159. exit;
  160. end;
  161. assign(tf, name);
  162. rewrite(tf);
  163. Writeln(tf, 'Код склада Код цеха Кол-во деталей Цена за единицу');
  164. Writeln(tf, '-----------------------------------------------------------------------------');
  165. close(tf);
  166. begin
  167. qu:=firstel;
  168. while qu^.next<>head do begin
  169. append(tf);
  170. Writeln(tf, qu^.skcode, ' ', qu^.wkcode, ' ', qu^.amount, ' ', qu^.price1);
  171. Writeln(tf, '-----------------------------------------------------------------------------');
  172. close(tf);
  173. qu:=qu^.next;
  174. end;
  175. Writeln('Список успешно сохранен в файл ', name);
  176. end;
  177. end;
  178.  
  179. procedure FileToSpisok(firstel:point); {Вывод списка из типизированного файла}
  180. var hk: fty; var lo: zapis; var namety:string; var un:point; var gc, a:integer;
  181. begin
  182. Writeln('Введите имя файла: '); Readln(namety);
  183. if fileexists(namety) then begin
  184. assign(hk, namety);
  185. reset(hk);
  186. gc:=filesize(hk);
  187. un:=firstel;
  188. writeln('Код склада Код цеха Кол-во деталей Цена за единицу');
  189. writeln('-----------------------------------------------------------------------------');
  190. for a := 0 to gc-1 do begin
  191. seek(hk, a);
  192. read(hk, lo);
  193. un^.skcode:=lo.sk_code;
  194. un^.wkcode:=lo.wr_code;
  195. un^.amount:=lo.amount;
  196. un^.price1:=lo.price1;
  197. Writeln(un^.skcode, ' ', un^.wkcode, ' ', un^.amount, ' ', un^.price1);
  198. writeln('-----------------------------------------------------------------------------');
  199. end;
  200. end
  201. else begin
  202. Writeln('Ошибка. Файла с таким именем не существует.');
  203. end;
  204. end;
  205.  
  206.  
  207. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement