DxSERGEY

Application

Apr 14th, 2012
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 9.85 KB | None | 0 0
  1. program application;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils,
  7.   u_Main in 'u_Main.pas',
  8.   CRT32 in 'CRT32.pas';
  9.  
  10. type
  11.   TExhibitionType = (
  12.     etUniversal, //Универсальная
  13.     etSpecialized, //Специализированная
  14.     etArtistic //Художественная
  15.     );
  16.  
  17.   TExhibition = record
  18.     VisitorsCount: Real; //Количество посетителей
  19.     DisplayName: string[150]; //Название
  20.     ExpositionsCount: Integer; //Количество экспозиций
  21.     ExhibitionType: TExhibitionType; //Тип
  22.   end;
  23.  
  24.   TDataset = file of TExhibition;
  25.  
  26. var
  27.   Exhibition: TExhibition; //Один элемент
  28.   Dataset, OtherDataset: TDataset; //Файл, содержащий элементы
  29.   DatasetFileName: string; //Имя файла набора данных
  30.   OtherDatasetFileName: string; //Имя файла второго набора данных
  31.  
  32. {
  33. Для компиляции на Pascal заменить Assign на AssignFile
  34. }
  35.  
  36. //Преобразование строки в целое число
  37.  
  38. function StrToInt(Input: string): Integer;
  39. var
  40.   Code: Integer;
  41. begin
  42.   Val(Input, Result, Code);
  43.   if Code <> 0 then
  44.     Result := 0;
  45. end;
  46.  
  47. //Чтение введенных в консоль данных
  48.  
  49. function ReadInput: string;
  50. begin
  51.   ReadLn(Result);
  52. end;
  53.  
  54. procedure ReadExhibitionData(var Data: TExhibition);
  55. //var
  56. //  IntValue: Integer;
  57. //  ET: TExhibitionType;
  58. begin
  59.   Write('Enter VisitorsCount value:  ');
  60.   ReadLn(Data.VisitorsCount);
  61.   Write('Enter DisplayName value:  ');
  62.   ReadLn(Data.DisplayName);
  63.   Write('Enter ExpositionsCount value:  ');
  64.   ReadLn(Data.ExpositionsCount);
  65.   Write('Select ExhibitionType number [0 - Universal, 1 - Specialized, 2 - Artistic]:  ');
  66.   Data.ExhibitionType := TExhibitionType(StrToInt(ReadInput));
  67. end;
  68.  
  69. //Проверка существования файла
  70.  
  71. function ExistFile(var F: TDataset; FileName: string): Boolean;
  72. begin
  73.   AssignFile(F, FileName);
  74. {$I-}
  75.   Reset(F);
  76. {$I+}
  77.   if IoResult = 0 then
  78.   begin
  79.     ExistFile := True;
  80.     Close(F);
  81.   end
  82.   else
  83.     ExistFile := false;
  84. end;
  85.  
  86. //Создание набора данных
  87.  
  88. function CreateDataset(var F: TDataset; FileName: string): boolean;
  89. begin
  90.   AssignFile(F, FileName); //Связываем переменнную Dataset с именем файла
  91.   Rewrite(F);
  92.   CloseFile(F);
  93.   CreateDataset := ExistFile(F, FileName);
  94. end;
  95.  
  96. //Открытие набора данных
  97.  
  98. function OpenDataset(var F: TDataset; FileName: string): boolean;
  99. begin
  100.   AssignFile(F, FileName); //Связываем переменнную Dataset с именем файла
  101.   Reset(F);
  102. end;
  103.  
  104. //Просмотр всех элементов
  105.  
  106. function ExhibitionTypeAsString(ET: TExhibitionType): string;
  107. const
  108.   arET: array[0..2] of string = ('Universal', 'Specialized', 'Artistic');
  109. begin
  110.   Result := arET[Integer(ET)];
  111. end;
  112.  
  113. procedure PrintDataset(var F: TDataset; FileName: string);
  114. var
  115.   Data: TExhibition;
  116.   CurrentNumber: Integer;
  117. begin
  118.   ClrScr;
  119.   CurrentNumber := 0;
  120.   AssignFile(F, FileName); //Связываем переменнную Dataset с именем файла
  121.   Reset(F);
  122.  
  123.     WriteLn('-------------------------------------------------------------------------------');
  124.     WriteLn('| # | Vis.   |              DisplayName                 | Exp.  |   Type      |');
  125.     WriteLn('-------------------------------------------------------------------------------');
  126.  
  127.   while not Eof(F) do
  128.   begin
  129.     Inc(CurrentNumber);
  130.     Read(F, Data);
  131.     WriteLn('|',
  132.       CurrentNumber: 3, '| ',
  133.       Data.VisitorsCount: 6: 3, ' | ',
  134.       Data.DisplayName: 40, ' | ',
  135.       Data.ExpositionsCount: 5, ' | ',
  136.       ExhibitionTypeAsString(Data.ExhibitionType): 11, ' |');
  137.     WriteLn('-------------------------------------------------------------------------------');
  138.   end;
  139.   CloseFile(F);
  140. end;
  141.  
  142. procedure PrintElement(var F: TDataset; FileName: string; ElementNumber: Integer);
  143. var
  144.   Data: TExhibition;
  145.   CurrentNumber: Integer;
  146.   Found: boolean;
  147. begin
  148.   ClrScr;
  149.   CurrentNumber := 0;
  150.   Found := false;
  151.   AssignFile(F, FileName); //Связываем переменнную Dataset с именем файла
  152.   Reset(F);
  153.   while not Eof(F) do
  154.   begin
  155.     Read(F, Data);
  156.     Inc(CurrentNumber);
  157.     if (CurrentNumber = ElementNumber) then
  158.     begin
  159.       Found := true;
  160.       WriteLn('-------------------------------------------------------------------------------');
  161.       WriteLn('| # | Vis.   |              DisplayName                 | Exp.  |   Type      |');
  162.       WriteLn('-------------------------------------------------------------------------------');
  163.       WriteLn('|',
  164.                 CurrentNumber: 3, '| ',
  165.         Data.VisitorsCount: 6: 3, ' | ',
  166.         Data.DisplayName: 40, ' | ',
  167.         Data.ExpositionsCount: 5, ' | ',
  168.                 ExhibitionTypeAsString(Data.ExhibitionType): 11, ' |');
  169.       WriteLn('-------------------------------------------------------------------------------');
  170.       Break;
  171.     end;
  172.   end;
  173.   if not Found then
  174.         WriteLn('Element with number ', ElementNumber, ' not found in dataset');
  175.   CloseFile(F);
  176. end;
  177.  
  178. procedure WriteToEndDataset(var F: TDataset; FileName: string; Data: TExhibition);
  179. begin
  180.   AssignFile(F, FileName); //Связываем файловую переменную с именем файла
  181.   Reset(F);
  182.   Seek(F, FileSize(F)); //Позиционирование в конец файла, т.е. на величину его размера
  183.   Write(F, Data); //Запись структуры
  184.   CloseFile(F); //Закрытие файла
  185. end;
  186.  
  187. procedure WriteFromDatasetToDataset(var F1 {текущий НД}, F2 {другой НД}: TDataset);
  188. var
  189.   Data: TExhibition;
  190. begin
  191.   Seek(F1, FileSize(F1)); //Позиционирование в конец файла, т.е. на величину его размера
  192.   while not Eof(F2) do
  193.   begin
  194.     Read(F2, Data); //Чтение элемента другого набора данных
  195.     Write(F1, Data); //Запись элемента текущего набора данных
  196.   end;
  197.     CloseFile(F2); //Закрытие файла
  198. end;
  199.  
  200. begin
  201.   repeat //Альтернатива оператору GOTO
  202.     ClrScr;
  203.     ShowMenu; //Показываем меню
  204.     Write('Input menu point number:  '); //Введите номер пункта меню
  205.     case StrToInt(ReadInput) of //Читаем число в консоли
  206.       0: Break; //Прерываем цикл
  207.       1:
  208.         begin
  209.           ClrScr;
  210.           Write('FileName [Example: filename.dat]:  '); //Имя файла [Пример: filename.dat]:
  211.           ReadLn(DatasetFileName);
  212.           if CreateDataset(Dataset, DatasetFileName) then
  213.             WriteLn('File "', DatasetFileName, '" is successfully created.') //Файл успешно создан
  214.           else
  215.             WriteLn('Error occurred.'); //Произошла ошибка.
  216.           ReadLn;
  217.         end;
  218.       2:
  219.         begin
  220.           if DatasetFileName <> '' then
  221.           begin
  222.             ReadExhibitionData(Exhibition);
  223.             WriteToEndDataset(DataSet, DatasetFileName, Exhibition);
  224.           end
  225.           else
  226.           begin
  227.             ClrScr;
  228.             WriteLn('ERROR: Dataset not opened. Please select #1 for dataset creation or #5 for dataset opening');
  229.           end;
  230.           ReadLn;
  231.         end;
  232.       3:
  233.         begin
  234.           if DatasetFileName <> '' then
  235.           begin
  236.             PrintDataset(DataSet, DatasetFileName);
  237.           end
  238.           else
  239.           begin
  240.             ClrScr;
  241.             WriteLn('ERROR: Dataset not opened. Please select #1 for dataset creation or #5 for dataset opening');
  242.           end;
  243.           ReadLn;
  244.         end;
  245.       4:
  246.         begin
  247.           if DatasetFileName <> '' then
  248.           begin
  249.             Write('Enter element number:  ');
  250.             PrintElement(DataSet, DatasetFileName, StrToInt(ReadInput));
  251.           end
  252.           else
  253.           begin
  254.             ClrScr;
  255.             WriteLn('ERROR: Dataset not opened. Please select #1 for dataset creation or #5 for dataset opening');
  256.           end;
  257.           ReadLn;
  258.         end;
  259.       5:
  260.         begin
  261.           ClrScr;
  262.           Write('FileName [Example: filename.dat]:  '); //Имя файла [Пример: filename.dat]:
  263.           ReadLn(DatasetFileName);
  264.           if ExistFile(DataSet, DatasetFileName) then
  265.           begin
  266.             OpenDataset(DataSet, DatasetFileName);
  267.             WriteLn('Dataset opened.');
  268.           end
  269.           else
  270.             WriteLn('ERROR: File "', DatasetFileName, '" not found.');
  271.           ReadLn;
  272.         end;
  273.       6:
  274.         begin
  275.           Write('FileName [Example: filename.dat]:  '); //Имя файла [Пример: filename.dat]:
  276.           ReadLn(DatasetFileName);
  277.           if ExistFile(DataSet, DatasetFileName) then
  278.           begin
  279.             OpenDataset(DataSet, DatasetFileName);
  280.             WriteLn('Dataset opened.');
  281.             Write('Other dataset FileName [Example: filename.dat]:  '); //Имя файла [Пример: filename.dat]:
  282.             ReadLn(OtherDatasetFileName);
  283.             if ExistFile(OtherDataset, OtherDatasetFileName) then
  284.             begin
  285.               OpenDataset(OtherDataset, OtherDatasetFileName);
  286.               WriteFromDatasetToDataset(DataSet, OtherDataset);
  287.             end
  288.             else
  289.               WriteLn('ERROR: File "', OtherDatasetFileName, '" not found.');
  290.           end
  291.           else
  292.             WriteLn('ERROR: File "', DatasetFileName, '" not found.');
  293.           ReadLn;
  294.         end;
  295.     else
  296.       begin
  297.         WriteLn('ERROR: Invalid menu point number.'); //Выбран неверный пункт меню
  298.         ReadLn;
  299.       end;
  300.     end;
  301.   until false;
  302.   ClrScr;
  303.   WriteLn('Application will be closed. Press any key.');
  304.   ReadLn;
  305. end.
Advertisement
Add Comment
Please, Sign In to add comment