Advertisement
Guest User

lab2.pas

a guest
Feb 25th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 7.55 KB | None | 0 0
  1. Unit  ULab2;
  2. Interface
  3.  
  4. Type
  5.   TName = (bus, tram, train, air); // автобус, трамвай, поезд, самолет
  6.   TRoute = record
  7.         Name: TName; // вид транспорта
  8.         Number: String[10]; // номер маршрута
  9.         Date: record // дата утверждения маршрута
  10.             d,m,y: integer;
  11.         end;
  12.   end;
  13.  
  14. Procedure CreateTypedFile1(); // создание типизированного в диалоге
  15. Procedure CreateTypedFile2(); // создание типизированного файла из текстового
  16. Procedure Find(); // поиск и редактирование
  17. Procedure ViewFile(); // просмотр типизированного файла
  18. procedure swap(typeFile: file of TRoute; swap1, swap2: integer); // обмен
  19.  
  20.  Implementation
  21.  
  22. Procedure CreateTypedFile1(); // создание типизированного в диалоге
  23. var
  24.     Route: TRoute;
  25.     TFile: file of TRoute; // типизированный файл - файл записей
  26.     tempName: string;
  27.     number: integer;
  28.     ch: char;
  29.     FileName: string[80];
  30. begin
  31.  
  32.     writeln('Введите имя типизированного файла');
  33.     readln(FileName);
  34.  
  35.    AssignFile(TFile, FileName);
  36.     Try  Rewrite(TFile);
  37.   Except
  38.     writeln('Ошибка: не удалось создать типизированный файл ',FileName);
  39.     write('Press ENTER'); readln;  exit
  40.   end;
  41.  
  42.    number:=0;
  43.    repeat
  44.     write('Вид транспорта: '); readln(tempName);
  45.    
  46.     case tempName of
  47.     'автобус': Route.Name:= bus;
  48.     'трамвай': Route.Name:= tram;
  49.     'поезд': Route.Name:= train;
  50.     'самолет': Route.Name:= air;
  51.    
  52.     else
  53.             begin
  54.                 writeln('Такого транспорта нет!');
  55.                 exit;
  56.             end;
  57.     end;
  58.    
  59.     write('Номер маршрута:'); readln(Route.Number);
  60.     write('Дата утверждения маршрута:');  readln(Route.Date.d, Route.Date.m, Route.Date.y);
  61.  
  62.     write(TFile, Route);   // запись записи целиком в файл
  63.     inc(number);
  64.  
  65.     write('Ещё? (y/n)');
  66.     readln(ch)
  67.    until UpCase(ch)='N';
  68.  
  69.    CloseFile(Tfile);
  70.  
  71.    writeln('Создан типизированный файл из ',number,' записей');
  72.     write('Press ENTER');
  73.     readln;
  74. end;
  75.  
  76.  
  77. Procedure CreateTypedFile2(); // создание типизированного файла из текстового
  78. var
  79.     Route: TRoute;
  80.     Text: TextFile; // текстовый файл
  81.     TFile: file of TRoute; // типизированный файл - файл записей
  82.     FileName, TFileName:string[80];
  83.     tempName: string;
  84. begin
  85.     writeln('Введите имя текстового файла');
  86.     readln(FileName);
  87.     AssignFile(Text, FileName);
  88.    
  89.     writeln('Введите имя типизированного файла');
  90.     readln(TFileName);
  91.     AssignFile(TFile, TFileName);
  92.     Try  Reset(Text);
  93.     Except
  94.         writeln('Ошибка: не удалось открыть текстовый файл ', FileName);
  95.     write('Press ENTER'); readln;  exit
  96.     end;
  97.    
  98.     Try Rewrite(TFile);
  99.     Except
  100.         writeln('Ошибка: не удалось создать типизированный файл ', TFileName);
  101.         write('Press ENTER'); readln; exit
  102.     end;
  103.    
  104.     while not eof(Text) do
  105.     begin
  106.             readln(Text, tempName);
  107.             readln(Text, Route.Number);
  108.             readln(Text, Route.Date.d, Route.Date.m, Route.Date.y);
  109.    
  110.             case tempName of
  111.                 'автобус': Route.Name:= bus;
  112.           'трамвай': Route.Name:= tram;
  113.           'поезд': Route.Name:= train;
  114.           'самолет': Route.Name:= air;
  115.         end;
  116.    
  117.    
  118.         write(TFile, Route);
  119.    end;
  120.    
  121.    CloseFile(text);
  122.    CloseFile(TFile);
  123.    write('Press ENTER');
  124.     readln;
  125. end;
  126.  
  127. procedure swap(typeFile: file of TRoute; swap1, swap2: integer);
  128. begin
  129.     var copy1, copy2 : TRoute;
  130.     seek(typeFile, swap1); read(typeFile, copy1);   // копируем первый
  131.     seek(typeFile, swap2); read(typeFile, copy2);   // копируем второй
  132.     seek(typeFile, swap1); write(typeFile, copy2);  // второй помещаем на место первого
  133.     seek(typeFile, swap2); write(typeFile, copy1);   // первый на место второго
  134. end;
  135.  
  136.  
  137. Procedure ViewFile(); // просмотр типизированного файла
  138. var
  139.   Route: TRoute;
  140.   TFile: file of TRoute;
  141.   number: integer;
  142.   tempName: string;
  143.   FileName:string[80];
  144. begin
  145.     writeln('Введите имя типизированного файла');
  146.     readln(FileName);
  147.     AssignFile(TFile, FileName);
  148.  
  149.  
  150.     Try  Reset(TFile);
  151.     Except
  152.         writeln('Ошибка: не удалось открыть типизированный файл ',FileName);
  153.         write('Press ENTER'); readln;  exit
  154.     end;
  155.    
  156.     number:=0;
  157.     while not eof(Tfile) do
  158.     begin
  159.         read(TFile, Route); // считывание
  160.        
  161.         case Route.Name of
  162.                 bus: tempName:='автобус';
  163.                 tram: tempName:='трамвай';
  164.                 train: tempName:='поезд';
  165.                 air: tempName:='самолет';
  166.         end;
  167.        
  168.         writeln('Найден ', tempName,', ',Route.Number,', ', Route.Date.d, '.', Route.Date.m, '.', Route.Date.y);
  169.         inc(number);
  170.     end;
  171.  
  172.     if number = 0 then
  173.         writeln('Данные не найдены')
  174.     else
  175.         writeln('Найдено ',number, ' записей');
  176.  
  177.     CloseFile(TFile);
  178.    write('Press ENTER');  readln;
  179. end;
  180.  
  181. Procedure Find();
  182. var
  183.   Route, min: TRoute;
  184.   TFile: file of TRoute;
  185.   k: integer;
  186.   n: byte;
  187.   tdate, mdate: integer;
  188.   flag: boolean;
  189.   FileName:string[80];
  190.   tempName:string;
  191. begin
  192.    writeln('Введите имя типизированного файла');
  193.    readln(FileName);
  194.    AssignFile(TFile, FileName);
  195.    Try  Reset(TFile);
  196.    Except
  197.       writeln('Ошибка: не удалось открыть типизированный файл ',FileName);
  198.       write('Press ENTER'); readln;  exit
  199.    end;
  200.  
  201.  
  202.  
  203.   flag:=false;
  204.   tdate:=0;
  205.   while not eof(TFile) and flag=false do
  206.   begin
  207.      read(TFile, Route);
  208.      n:=FilePos(TFile);
  209.      flag:=true;
  210.      min:=Route;
  211.      mdate:= Route.Date.d + Route.Date.m*31 + Route.Date.y*365;
  212.   end;
  213.  
  214.   reset(TFile);
  215.   while not eof(TFile) do
  216.   begin
  217.      read(TFile, Route); // считывание
  218.      tdate:= Route.Date.d + Route.Date.m*31 + Route.Date.y*365;
  219.        if tdate <= mdate then
  220.        begin
  221.           n:=FilePos(TFile);
  222.           min:=Route;
  223.           mdate:= tdate;
  224.        end;
  225.      end;
  226.  
  227.  
  228.    if flag=false then writeln('Данные, соответствующие запросу, не найдены')
  229.   else
  230.   begin
  231.      writeln('Введите число k: '); readln(k);
  232.      k:=k-1;
  233.      n:=n-1;
  234.      case min.Name of
  235.                 bus: tempName:='автобус';
  236.                 tram: tempName:='трамвай';
  237.                 train: tempName:='поезд';
  238.                 air: tempName:='самолет';
  239.         end;
  240.      writeln('Самый давний утвержденный маршрут: ', tempName,' ',min.Number,' ', min.Date.d, '.', min.Date.m, '.', min.Date.y);
  241.      writeln('Старая позиция в файле: ', n+1, '. Новая позиция в файле: ', k+1);
  242.      
  243.      if k >= n then
  244.      for var j: integer := n to k-1 do
  245.         swap(TFile,j,j+1)
  246.      else
  247.      for var j: integer := n downto k+1 do
  248.          swap(TFile,j,j-1);
  249.  end;
  250.  
  251.    CloseFile(TFile);
  252.  
  253.    write('Press ENTER');  readln;
  254. end;
  255.  
  256. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement