Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program application;
- {$APPTYPE CONSOLE}
- uses
- SysUtils,
- u_Main in 'u_Main.pas',
- CRT32 in 'CRT32.pas';
- type
- TExhibitionType = (
- etUniversal, //Универсальная
- etSpecialized, //Специализированная
- etArtistic //Художественная
- );
- TExhibition = record
- VisitorsCount: Real; //Количество посетителей
- DisplayName: string[150]; //Название
- ExpositionsCount: Integer; //Количество экспозиций
- ExhibitionType: TExhibitionType; //Тип
- end;
- TDataset = file of TExhibition;
- var
- Exhibition: TExhibition; //Один элемент
- Dataset, OtherDataset: TDataset; //Файл, содержащий элементы
- DatasetFileName: string; //Имя файла набора данных
- OtherDatasetFileName: string; //Имя файла второго набора данных
- {
- Для компиляции на Pascal заменить Assign на AssignFile
- }
- //Преобразование строки в целое число
- function StrToInt(Input: string): Integer;
- var
- Code: Integer;
- begin
- Val(Input, Result, Code);
- if Code <> 0 then
- Result := 0;
- end;
- //Чтение введенных в консоль данных
- function ReadInput: string;
- begin
- ReadLn(Result);
- end;
- procedure ReadExhibitionData(var Data: TExhibition);
- //var
- // IntValue: Integer;
- // ET: TExhibitionType;
- begin
- Write('Enter VisitorsCount value: ');
- ReadLn(Data.VisitorsCount);
- Write('Enter DisplayName value: ');
- ReadLn(Data.DisplayName);
- Write('Enter ExpositionsCount value: ');
- ReadLn(Data.ExpositionsCount);
- Write('Select ExhibitionType number [0 - Universal, 1 - Specialized, 2 - Artistic]: ');
- Data.ExhibitionType := TExhibitionType(StrToInt(ReadInput));
- end;
- //Проверка существования файла
- function ExistFile(var F: TDataset; FileName: string): Boolean;
- begin
- AssignFile(F, FileName);
- {$I-}
- Reset(F);
- {$I+}
- if IoResult = 0 then
- begin
- ExistFile := True;
- Close(F);
- end
- else
- ExistFile := false;
- end;
- //Создание набора данных
- function CreateDataset(var F: TDataset; FileName: string): boolean;
- begin
- AssignFile(F, FileName); //Связываем переменнную Dataset с именем файла
- Rewrite(F);
- CloseFile(F);
- CreateDataset := ExistFile(F, FileName);
- end;
- //Открытие набора данных
- function OpenDataset(var F: TDataset; FileName: string): boolean;
- begin
- AssignFile(F, FileName); //Связываем переменнную Dataset с именем файла
- Reset(F);
- end;
- //Просмотр всех элементов
- function ExhibitionTypeAsString(ET: TExhibitionType): string;
- const
- arET: array[0..2] of string = ('Universal', 'Specialized', 'Artistic');
- begin
- Result := arET[Integer(ET)];
- end;
- procedure PrintDataset(var F: TDataset; FileName: string);
- var
- Data: TExhibition;
- CurrentNumber: Integer;
- begin
- ClrScr;
- CurrentNumber := 0;
- AssignFile(F, FileName); //Связываем переменнную Dataset с именем файла
- Reset(F);
- WriteLn('-------------------------------------------------------------------------------');
- WriteLn('| # | Vis. | DisplayName | Exp. | Type |');
- WriteLn('-------------------------------------------------------------------------------');
- while not Eof(F) do
- begin
- Inc(CurrentNumber);
- Read(F, Data);
- WriteLn('|',
- CurrentNumber: 3, '| ',
- Data.VisitorsCount: 6: 3, ' | ',
- Data.DisplayName: 40, ' | ',
- Data.ExpositionsCount: 5, ' | ',
- ExhibitionTypeAsString(Data.ExhibitionType): 11, ' |');
- WriteLn('-------------------------------------------------------------------------------');
- end;
- CloseFile(F);
- end;
- procedure PrintElement(var F: TDataset; FileName: string; ElementNumber: Integer);
- var
- Data: TExhibition;
- CurrentNumber: Integer;
- Found: boolean;
- begin
- ClrScr;
- CurrentNumber := 0;
- Found := false;
- AssignFile(F, FileName); //Связываем переменнную Dataset с именем файла
- Reset(F);
- while not Eof(F) do
- begin
- Read(F, Data);
- Inc(CurrentNumber);
- if (CurrentNumber = ElementNumber) then
- begin
- Found := true;
- WriteLn('-------------------------------------------------------------------------------');
- WriteLn('| # | Vis. | DisplayName | Exp. | Type |');
- WriteLn('-------------------------------------------------------------------------------');
- WriteLn('|',
- CurrentNumber: 3, '| ',
- Data.VisitorsCount: 6: 3, ' | ',
- Data.DisplayName: 40, ' | ',
- Data.ExpositionsCount: 5, ' | ',
- ExhibitionTypeAsString(Data.ExhibitionType): 11, ' |');
- WriteLn('-------------------------------------------------------------------------------');
- Break;
- end;
- end;
- if not Found then
- WriteLn('Element with number ', ElementNumber, ' not found in dataset');
- CloseFile(F);
- end;
- procedure WriteToEndDataset(var F: TDataset; FileName: string; Data: TExhibition);
- begin
- AssignFile(F, FileName); //Связываем файловую переменную с именем файла
- Reset(F);
- Seek(F, FileSize(F)); //Позиционирование в конец файла, т.е. на величину его размера
- Write(F, Data); //Запись структуры
- CloseFile(F); //Закрытие файла
- end;
- procedure WriteFromDatasetToDataset(var F1 {текущий НД}, F2 {другой НД}: TDataset);
- var
- Data: TExhibition;
- begin
- Seek(F1, FileSize(F1)); //Позиционирование в конец файла, т.е. на величину его размера
- while not Eof(F2) do
- begin
- Read(F2, Data); //Чтение элемента другого набора данных
- Write(F1, Data); //Запись элемента текущего набора данных
- end;
- CloseFile(F2); //Закрытие файла
- end;
- begin
- repeat //Альтернатива оператору GOTO
- ClrScr;
- ShowMenu; //Показываем меню
- Write('Input menu point number: '); //Введите номер пункта меню
- case StrToInt(ReadInput) of //Читаем число в консоли
- 0: Break; //Прерываем цикл
- 1:
- begin
- ClrScr;
- Write('FileName [Example: filename.dat]: '); //Имя файла [Пример: filename.dat]:
- ReadLn(DatasetFileName);
- if CreateDataset(Dataset, DatasetFileName) then
- WriteLn('File "', DatasetFileName, '" is successfully created.') //Файл успешно создан
- else
- WriteLn('Error occurred.'); //Произошла ошибка.
- ReadLn;
- end;
- 2:
- begin
- if DatasetFileName <> '' then
- begin
- ReadExhibitionData(Exhibition);
- WriteToEndDataset(DataSet, DatasetFileName, Exhibition);
- end
- else
- begin
- ClrScr;
- WriteLn('ERROR: Dataset not opened. Please select #1 for dataset creation or #5 for dataset opening');
- end;
- ReadLn;
- end;
- 3:
- begin
- if DatasetFileName <> '' then
- begin
- PrintDataset(DataSet, DatasetFileName);
- end
- else
- begin
- ClrScr;
- WriteLn('ERROR: Dataset not opened. Please select #1 for dataset creation or #5 for dataset opening');
- end;
- ReadLn;
- end;
- 4:
- begin
- if DatasetFileName <> '' then
- begin
- Write('Enter element number: ');
- PrintElement(DataSet, DatasetFileName, StrToInt(ReadInput));
- end
- else
- begin
- ClrScr;
- WriteLn('ERROR: Dataset not opened. Please select #1 for dataset creation or #5 for dataset opening');
- end;
- ReadLn;
- end;
- 5:
- begin
- ClrScr;
- Write('FileName [Example: filename.dat]: '); //Имя файла [Пример: filename.dat]:
- ReadLn(DatasetFileName);
- if ExistFile(DataSet, DatasetFileName) then
- begin
- OpenDataset(DataSet, DatasetFileName);
- WriteLn('Dataset opened.');
- end
- else
- WriteLn('ERROR: File "', DatasetFileName, '" not found.');
- ReadLn;
- end;
- 6:
- begin
- Write('FileName [Example: filename.dat]: '); //Имя файла [Пример: filename.dat]:
- ReadLn(DatasetFileName);
- if ExistFile(DataSet, DatasetFileName) then
- begin
- OpenDataset(DataSet, DatasetFileName);
- WriteLn('Dataset opened.');
- Write('Other dataset FileName [Example: filename.dat]: '); //Имя файла [Пример: filename.dat]:
- ReadLn(OtherDatasetFileName);
- if ExistFile(OtherDataset, OtherDatasetFileName) then
- begin
- OpenDataset(OtherDataset, OtherDatasetFileName);
- WriteFromDatasetToDataset(DataSet, OtherDataset);
- end
- else
- WriteLn('ERROR: File "', OtherDatasetFileName, '" not found.');
- end
- else
- WriteLn('ERROR: File "', DatasetFileName, '" not found.');
- ReadLn;
- end;
- else
- begin
- WriteLn('ERROR: Invalid menu point number.'); //Выбран неверный пункт меню
- ReadLn;
- end;
- end;
- until false;
- ClrScr;
- WriteLn('Application will be closed. Press any key.');
- ReadLn;
- end.
Advertisement
Add Comment
Please, Sign In to add comment