Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Unit Unit1; // файл Unit1.pas
- Interface
- Uses
- SysUtils; // ANSIUpperCase и др. - смена регистра и обработка исключений
- Type
- TSubject = (math,physics,programming,english);
- TMark = (otl,xop,ud,neud);
- TGroup = record
- Name:string[30];
- Subject:TSubject;
- Mark:TMark;
- number:byte;
- end;
- //----------первая часть: создание типизированного файла в диалоге
- Procedure CreateTypedFile1();
- //----------вторая часть: создание типизированного файла из текстового
- Procedure CreateTypedFile2();
- //-------------- третья часть: поиск в типизированном файле ----
- Procedure Findgroup();
- //-------------- просмотр типизированного файла ----
- Procedure ViewFile();
- Implementation // -----------реализационная часть-----------------
- //----------первая часть: создание типизированного файла в диалоге
- Procedure CreateTypedFile1();
- var
- group:TGroup;
- fr: file of TGroup; // типизированный файл - файл записей
- n, kol: integer;
- ch: char;
- FileName:string[80];
- begin
- if ParamCount<1 then
- begin
- writeln('Мало параметров '#13#10'Press enter ');
- readln; exit
- end;
- FileName := ParamStr(1);
- // или простой диалог или через параметры программы при её вызове ParamStr(1)
- // writeln('Введите имя типизированного файла');
- // readln(FileName);
- AssignFile(fr, FileName);
- Try ReWrite(fr); // или {$I-} ReWrite(fr); {$I+} и if IOResult<>0 then <ошибка>
- Except
- writeln('Error: не удалось создать типизированный файл ',FileName);
- write('Press ENTER '); readln; exit
- end;
- kol:=0;
- repeat
- write('Название группы '); readln(group.Name);
- write('Предмет (Матан - 1, физика - 2, программирование - 3, английский - 4) =? '); readln(n); Group.subject:=Tsubject(n-1);
- write('Оценка (Отлично - 1, хорошо - 2, удовл - 3, неуд - 4) =? '); readln(n); group.mark:=TMark(n-1);
- write('Количество студентов с заданной оценкой =? '); readln(Group.number);
- write(fr,group);
- inc(kol);
- write('Ещё? (y/n) ');
- readln(ch)
- until UpCase(ch)='N';
- CloseFile(fr);
- writeln('Создан типизированный файл из ',kol,' записей');
- write('Press ENTER ');
- readln;
- end;
- //---------------------------------------------------------------------------------------
- //----------вторая часть: создание типизированного файла из текстового
- Procedure CreateTypedFile2();
- var
- group:TGroup;
- ft: TextFile; // текстовый файл
- fr: file of TGroup; // типизированный файл - файл записей
- n, kol: integer;
- begin
- if ParamCount<2 then
- begin
- writeln('Мало параметров '#13#10'Press enter');
- readln; exit
- end;
- // или простой диалог или через параметры программы при её вызове ParamStr(2)
- // writeln('Введите имя текстового файла');
- // readln(FileName);
- AssignFile(ft, ParamStr(2));
- Try Reset(ft);
- Except
- writeln('Error: не удалось открыть текстовый файл ', ParamStr(2));
- write('Press ENTER'); readln; exit
- end;
- AssignFile(fr, ParamStr(1));
- Try Rewrite(fr);
- Except
- writeln('Error: не удалось открыть текстовый файл ', ParamStr(1));
- write('Press ENTER'); readln; exit
- end;
- kol:=0;
- while not eof(ft) do begin
- readln(ft, group.name);
- readln(ft, n); group.subject:=Tsubject(n-1);
- readln(ft, n); group.mark:=Tmark(n-1);
- readln(ft, group.number);
- Write(fr, group);
- Inc(kol);
- end;
- CloseFile(ft);
- CloseFile(fr);
- writeln('создан типизированный файл из ', kol, ' записей');
- write('Press ENTER');
- readln;
- end;
- //--------------------------------------------------------------
- //-------------- третья часть: поиск в типизированном файле ----
- Procedure Findgroup();
- var
- i:byte;
- group:TGroup;
- gr1,gr2:TGroup;
- fr: file of TGroup;
- n, pos: integer;
- FileName:string[80];
- begin
- if ParamCount<1 then
- begin
- writeln('Мало параметров '#13#10'Press enter');
- readln; exit
- end;
- FileName := ParamStr(1);
- // или простой диалог или через параметры программы при её вызове ParamStr(1)
- // writeln('Введите имя типизированного файла');
- // readln(FileName);
- AssignFile(fr, FileName);
- Try ReSet(fr); // или {$I-} ReSet(fr); {$I+} if IOResult<>0 then
- Except
- writeln('Error: не удалось открыть типизированный файл ',FileName);
- write('Press ENTER'); readln; exit
- end;
- if (FileSize(ft) = 0) then
- begin
- writeln('Записи отсутствуют ');
- writeln('Press ENTER'); readln; exit
- end;
- pos:=0;
- while not eof(fr) do begin
- n:=0;
- read(fr,group);
- for i:=0 to length(group.name) do
- if group.name[i] = '1' then n:=n+1;
- if (n = 2) and (group.mark = TMark(0)) and (group.number >= 2) then
- pos:=filepos(fr);
- end;
- writeln(pos);
- if pos=0 then
- writeln('Данные, соответствующие запросу, не найдены')
- else
- begin
- writeln('Найдена ', pos, '-я запись');
- seek(fr,0);
- read(fr,gr1);
- seek(fr,pos-1);read(fr,gr2);
- seek(fr,pos-1);write(fr,gr1);
- seek(fr,0);write(fr,gr2);
- end;
- CloseFile(fr);
- write('Press ENTER'); readln;
- end;
- //--------------------------------------------------------------
- //-------------- просмотр типизированного файла ----
- Procedure ViewFile();
- var
- group: TGroup;
- fr: file of TGroup;
- kol: integer;
- FileName:string[80];
- begin
- if ParamCount<1 then
- begin
- writeln('Мало параметров '#13#10'Press enter');
- readln; exit
- end;
- FileName := ParamStr(1);
- // или простой диалог или через параметры программы при её вызове ParamStr(1)
- // writeln('Введите имя типизированного файла');
- // readln(FileName);
- AssignFile(fr, FileName);
- Try ReSet(fr); // или {$I-} ReSet(fr); {$I+} if IOResult<>0 then
- Except
- writeln('Error: не удалось открыть типизированный файл ',FileName);
- write('Press ENTER'); readln; exit
- end;
- kol:=0;
- while not eof(fr) do
- begin
- read(fr, Group); // считывание
- writeln('Найдена группа ', group.name,' с оценкой ', group.mark,' по предмету ',group.subject,' в количестве ',group.number, ' штук' );
- inc(kol);
- end;
- if kol=0 then
- writeln('Данные не найдены')
- else
- writeln('Найдено ',kol, ' записей');
- CloseFile(fr);
- write('Press ENTER '); readln;
- end;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement