Программы для работы с большим объемом информации, записанной в файлах
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
>
// сохранить информацию о файле
procedure SaveCatalog (var t: TextFile; f: TCatalog);
// загрузить информацию о файле
function LoadCatalog (var t: TextFile; var f: TCatalog): Boolean;
// перевод строки в формат даты
function TryStrToDate (s: string; var d: TDate): Boolean;
// изменение информации о файле
procedure EditCatalog (var f: TCatalog);
implementation
// поиск количества дней в месяце
function CountDaysInMonth (m, g: integer): integer;
begin m of
: if (g mod 4) =0 then CountDaysInMonth: =29
else CountDaysInMonth: =28;
,6,9,11: CountDaysInMonth: =30;
else CountDaysInMonth: =31;
end;;
// ввод даты создания
procedure InputDate (var d: TDate);
begin
Writeln (Введите последние две цифры года создания файла);
Readln (d. year);
if not (d. year in [00.99])
then ShowMessage (Ошибка! Повторите ввод! );
until d. year in [00.99];
repeat
Writeln (Введите месяц создания файла);
Readln (d. month);
if not (d. month in [1.12])
then ShowMessage (Ошибка! Повторите ввод! );
until d. month in [1.12];
repeat
Writeln (Введите день создания файла);
Readln (d. day);
if not (d. day in [1. CountDaysInMonth (d. month,d. year)])
then ShowMessage (Ошибка! Повторите ввод! );
until d. day in [1. CountDaysInMonth (d. month,d. year)];
end;
// ввод данных о файле
procedure InputCatalog (var f: TCatalog);
begin
writeln (Введите имя файла);(f. name);
if f. name=
then ShowMessage (Ошибка! Имя не должно быть пустым! Повторите ввод! );
until f. name<>;(Введите специализацию);(f. special);
InputDate (f. create);
repeat
Writeln (Введите количество блоков);(f. blocks);
if f. blocks<0 then
ShowMessage (Ошибка! Размер файла должен быть положительным! Повторите ввод! );
until f. blocks>=0;
end;
// перевод даты в строку
function DateToStr (d: TDate): string;
begin
Result: =;
if d. day<10 then Result: =0;: =Result+IntToStr (d. day) +. ;
if d. month<10 then Result: =Result+0;: =Result+IntToStr (d. month) +. ;
if d. year<10 then Result: =Result+0;: =Result+IntToStr (d. year);
end;
// печать информации о файле
procedure PrintCatalog (f: TCatalog);
begin
SaveCatalog (output, f);
end;
// сохранить информацию о файле
procedure SaveCatalog (var t: TextFile; f: TCatalog);
begin
Writeln (t,Имя файла: ,f. name);(t,Спецификация: ,f. special);(t,Дата создания: ,DateToStr (f. Create));
Writeln (t,Количество блоков: ,f. blocks);(t);
end;
// проверка корректности содержимого файла
function GetValueFromFile (var t: TextFile; var s: string): Boolean;
var p: Integer;
begin Eof (t) then Result: =False
else
Readln (t,s);: =Pos (: ,s);
if p=0 then Result: =False
else
delete (s,1,p);: =Trim (s);: =True;
end;;;
// проверка корректности даты
function CheckDate (d: TDate): boolean;
begin
Result: = (d. year in [00.99]) and (d. month in [1.12]) and
(d. day in [1. CountDaysInMonth (d. month,d. year)]);
end;
// загрузка информации о файле
function LoadCatalog (var t: TextFile; var f: TCatalog): Boolean;
var s: string; d: TDate; num: integer;
begin
Result: =True;
if GetValueFromFile (t,s) and (s<>) then f. name: =s
else Result: =False;
if Result and GetValueFromFile (t,s) then f. special: =s
else Result: =False;
if Result and GetValueFromFile (t,s) and TryStrToDate (s,d) andCheckDate (d)
then f. Create: =d
else Result: =False;
if Result and GetValueFromFile (t,s) and TryStrToInt (s, num) and (num>=0)
then f. blocks: =num
else Result: =False;
if Result and not Eof (t)
then Readln (t);
end;
// перевод строки в формат даты
function TryStrToDate (s: string; var d: TDate): Boolean;
var p: integer;
begin
p: =pos (. , s);: = p>0;
if not (Result and TryStrToInt (Copy (s,1,p-1),d. Day) and (d. day in [1.31]))
then Result: =False;(s,1,p);: =pos (. , s);
if not (Result and (p>0) and TryStrToInt (Copy (s,1,2),d. month) and (d. month in [1.12]))
then Result: =False;(s,1,p);
if not (Result and TryStrToInt (s,d. year) and (d. year in [00.99]))
then Result: =False;: = Result and (d. day in [1. CountDaysInMonth (d. month,d. year)])
end;
// изменение информации о файле
procedure EditCatalog (var f: TCatalog);
begin InputQuery (Изменить имя файла? ) then
repeat
Writeln (Введите новое имя);
Readln (f. name);
if f. name= then
ShowMessage (Ошибка! Имя не должно быть пустым! Повторите ввод! ); until f. name<>;
if InputQuery (Изменить специализацию файла? ) then(Введите новую специализацию);
Readln (f. special);
end; InputQuery (Изменить дату создания файла? )
then InputDate (f. create);
if InputQuery (Изменить количество блоков? ) then(Введите новое количество блоков);
Readln (f. blocks);
if f. blocks<0 then
ShowMessage (Размер файла должен быть положительным! Повторите ввод! ); until f. blocks>=0;
end;. // UElem
Приложение 3. Модуль UFile
unit UFile; // процедуры для работы с файлами
interface SysUtils, HelpUtils, UElem, Windows;
type
TFile = file of TCatalog;
// создание файла NewFile (var f: TFile; var FileName: string);
// открытие файла
procedure OpenFile (var f: TFile; var FileName: string);
// загрузка из файла
procedure LoadFromText (var f: TFile; var FileName: string);
// печать файла
procedure PrintFile (var f: TFile);
// сохранение в текстовый файл SaveToText (var f: TFile; FileName: string);
// добавление элемента
procedure AddElems (var f: TFile);
// измненение элемента EditElems (var f: TFile);
// удаление элемента
procedure DeleteElems (var f: TFile);
// вывод файлов с заданной спецификацией
procedure Task (var f: TFile);
implementation
// добавление нескольких элементов в файл
function AddSomeElems (var f: TFile): Integer;
var el: TCatalog;
begin
Result: =0;
repeat
InputCatalog (el);(f,el);(Result);
until not InputQuery (Ещё? );
end;
// создание файла NewFile (var f: TFile; var FileName: string);
begin InputFileName (Введите имя нового файла, FileName,False) then(f, FileName);(f);
if InputQuery (Добавить данные? ) then AddSomeElems (f);(f);(Ф?/p>