Описание структуры компоненты файла



Описание глобальных типов данных

• • •

type

ADRESS=Record

city:string[10];

street:string[15];

HOUSE,FLAT:integer;

end;

MARK=Record

CHEM,PHIS,MATH:byte;

end;

STUDENT=Record {тип файловой компоненты}

FIO:string[15];

ADR:ADRESS;

TLF:string[10];

GROUP:string[7];

POINT:MARK;

del:Boolean;

end;

TFile=file of STUDENT;{файловый тип}

• • •

 

Описание глобальных переменных и констант

ИМЯ Вид данных Тип Описание
1 F переменная TFile логический файл
2 fname переменная string имя физического файла
3 K переменная byte номер пункта меню

 

 

Перечень процедур и функций


1) procedure VVOD(VAR H:TFile); – процедура для ввода файла БД. Также процедура служит для добавления компонент в конец файла.

2) procedure VYVOD(VAR H:TFile); – процедура вывода файла БД.

 

3) procedure POISK1(VAR H:TFile); – процедура поиск студентов, проживающих в заданном городе.

 

4) procedure POISK2 (VAR H:TFile); – процедура поиск студентов, чья фамилия начинается с заданной буквы, и обучающихся в заданной группе.

5) procedure POISK3 (VAR H:TFile); -процедура поиска студентов со средним баллом выше среднего.

 

6) function SRED (VAR H:TFile):Real; – функция подсчета SR – среднего балла всех студентов в файле.


7) function MENU : byte; – функция выбора Х – номера действия, необходимого пользователю.

 

8) procedure DELL (VAR H:TFile); – процедура логического удаления компонент из файла.

 

9) procedure DELF (VAR H:TFile); - процедура физического удаления компонент из файла.

 

10) procedure VOSST(VAR H:TFile); – процедура восстановления логических удаленных компонент.

 

 

11) procedure CORR (VAR H:TFile); -процедура корректировки компонент в файле.

 


Блок – схема алгоритма


 


 


 


 


 


 


 


 


 

Текст программы

 

Program DB(F);

Type

ADRESS = Record

City:string[10];

Street:string[10];

House, Flat:integer;

end;

MARK = Record

Chem, Phis, Math:byte;

end;

STUDENT = Record {тип файловой компоненты}

FIO:string[15];

ADR:ADRESS;

TLF:string[10];

GROUP:string[6];

POINT:MARK;

del:boolean;

end;

TFile=file of STUDENT; {файловый тип}

VAR

F:TFile; {файловая переменная}

fname :string; {имя физического файла}

k:byte; {номер выбранного пункта меню}

 

function MENU:byte;

var

x:byte;

begin

writeln(’МЕНЮ’:20);

writeln(’0. Завершение работы’);

writeln(’1. Ввод файла и добавление компонент в файл’);

writeln(’2. Вывод файла’);

writeln(’3. Поиск студентов,проживающих в заданном городе’);

writeln(’4. Поиск студентов с фамилией на заданную букву и уча-

щихся в заданной группе’);

writeln(’5. Поиск студентов со средним баллом выше заданного’);

writeln(’6. Удаление компонент логическое’);

writeln(’7. Удаление компонент физическое’);

writeln(’8. Восстановление удаленных компонент’);

writeln(’9. Корректировка компонент’);

writeln(’Сделайте Ваш выбор’);

Readln(x);

MENU:=x;

end;

 

Procedure vvod(var H:TFile);

var

a:STUDENT; {логическая компонента}

i:integer;

begin

{$I-}

Reset(H);

{$I+}

if ioresult=0 then

seek(H,filesize(H))

else

Rewrite(H);

writeln(’Введите сведения о студентах’);

i:=1;

writeln(i,’-й студент:’);

WITH a do

begin

write(’ФИО:’);

readln(FIO);

while FIO<>’***’ do

begin

writeln(’Адрес:’);

WITH ADR do

begin

write(’Город:’);

Readln(City);

write(’Улица:’);

Readln(Street);

write(’Дом:’);

Readln(House);

write(’Квартира:’);

Readln(Flat);

end;

write(’Номер телефона:’);

Readln(TLF); 

write(’Учебная группа:’);

Readln(GROUP);

writeln(’Оценки по дисциплинам:’);

WITH POINT do

begin

write(’Химия:’);

Readln(Chem);

write(’Физика:’);

Readln(Phis);

write(’Математика:’);

Readln(Math);

end;

del:=FALSE;

write(H,a);{запись сформированной компоненты в

файл}

writeln(’_______________________________’);

i:=i+1;

writeln(i,’-й студент;);

write(’ФИО:’);

Readln(FIO);

end; {while}

end; {WITH a}

close(H);

end; {procedure vvod}


 

 

Procedure vyvod(var H:TFile);

var

a:STUDENT; {логическая компонента}

i:integer;

begin

Reset(H);

writeln(’№’:2, ’ФИО’:16, ’Адрес’:29, ’Телефон’:11, ’Группа’:7,

’Хим’:4, ’Физ’:4, ’Матем’:6);

i:=1;

while NOT EOF(H) do

begin

Read(H,a);

WITH a, a.ADR, a.POINT do

if NOT del then

writeln(i:2, FIO:16, City:11, ’,’ ,Street:10, House:3,

’-’, Flat:2, TLF:11, GROUP:7, Chem:4, Phis:4, Math:6);

i:=i+1;

end;

close(H);

end; {procedure vyvod}

 

Procedure POISK1(var H:TFile);

var

a:STUDENT; {логическая компонента}

i:integer;

Key:string; {ключ поиска:интересующий город}

FLAG:boolean; {флаг существования результата}

begin

write(’Введите интересующий город:’);

Readln(Key);

FLAG:=TRUE;

Reset(H);

writeln(’Список студентов,проживающих в г. ’,Key);

writeln(’№’:2,’ФИО’:16,’Адрес’:16,’Телефон’:11, ’Группа’:7,

’Хим’:4,’Физ’:4,’Матем’:6);

i:=1;

while NOT EOF(H) do

begin

Read(H,a);

WITH a,a.ADR,a.POINT do

if NOT del then

if City=Key then

begin

FLAG:=FALSE;

writeln(i:2, FIO:16, Street:10, House:3, ’-’,

Flat:2, TLF:11, GROUP:7, Chem:4,

Phis:4, Math:6);

end;

end;

close(H);

if FLAG then

writeln(’Поиск не дал результата’);

end; {procedure POISK1}

 

Procedure POISK2(var H:TFile);

var

a:STUDENT; {логическая компонента}

i:integer;

Key1:char; {ключ поиска: первая буква фамилии}

Key2:string; {ключ поиска: интересующая группа}

FLAG:boolean; {флаг существования результата}

begin

write(’Введите первую букву фамилии:’);

Readln(Key1);

write(’Введите интересующую группу:’);

Readln(Key2);

FLAG:=TRUE;

Reset(H);

writeln(’Список студентов с фамилией, начинающейся с буквы’,Key1,

’и обучающихся в группе’,Key2);

writeln(’№’:2,’ФИО’:16,’Адрес’:29,’Телефон’:11,’Хим’:4,’Физ’:4,

’Матем’:6);

i:=1;

while NOT EOF(H) do

begin

Read(H,a);

WITH a, a.ADR, a.POINT do

if NOT del then

if (FIO[1]=Key1) AND (GROUP=Key2) then

begin

FLAG:=FALSE;

writeln(i:2, FIO:16, City:11, ’,’ ,Street:10,

House:3, ’-’, Flat:2, TLF:11, Chem:4,

Phis:4, Math:6);

end;

end;

close(H);

if FLAG then

writeln(’Поиск не дал результата’);

end; {procedure POISK2}

 

function SRED(var H:TFile):Real;

var

a:STUDENT; {логическая компонента}

S:Real;

k:integer;

begin

S:=0;

k:=0;

Reset(H);

while NOT EOF(H) do

begin

Read(H,a);

WITH a, a.POINT do

if NOT del then

begin

S:=S+Chem+Phis+Math;

k:=k+1;

end;

end;

close(H);

SRED:=S/k;

end; {function SRED}

 

Procedure POISK3(var H:TFile);

var

a:STUDENT; {логическая компонента}

i:integer;

SR:Real; {средний балл общий в файле}

STUD_SR:Real; {средний балл очередного студента}

begin

SR:=SRED(H);

Reset(H);

writeln(’Список студентов со средним баллом выше среднего’,

SR:5:2);

writeln(’№’:2, ’ФИО’:16, ’Адрес’:29, ’Телефон’:11, ‘Группа’:7,

’Хим’:4, ’Физ’:4, ’Матем’:6);

i:=1;

while NOT EOF(H) do

begin

Read(H,a);

WITH a, a.ADR, a.POINT do

if NOT del then

begin

STUD_SR=(Chem+Phis+Math)/3;

if STUD_SR>SR then

writeln(i:2, FIO:16, City:11, ’,’, Street:10,

House:3,’-’, Flat:2, TLF:11, GROUP:7, Chem:4,

Phis:4, Math:6);

end; {if}

end; {while}

close(H);

end; {procedure POISK3}

 

Procedure DELL(var H:TFile);

var

a:STUDENT; {логическая компонента файла}

Key:string; {фамилия удаляемого студента}

FLAG:boolean; {флаг существования результата}

ik:integer; {номер удаляемой компоненты}

begin

write(’Введите фамилию удаляемого студента:’);

Readln(Key);

Reset(H);

FLAG:=TRUE;

while NOT EOF(H) do

begin

Read(H,a);

WITH a do

if NOT del then

if FIO=Key then

begin

FLAG:=FALSE;

ik:=filepos(H)-1;

seek(H,filesize(H));

end;

end;

if FLAG then

writeln(’Удаляемая компонента не найдена’)

else

begin

a.del:=TRUE;

seek(H,ik);

write(H,a);

end;

close(H);

end; {procedure DELL}

 

Procedure VOSST(var H:TFile);

var

a:STUDENT; {логическая компонента файла}

FLAG:boolean; {флаг существования результата}

ik:integer; {номер восстанавливаемой компоненты}

begin

Reset(H);

FLAG:=TRUE;

while NOT EOF(H) do

begin

Read(H,a);

if a.del then

begin

FLAG:=FALSE;

ik:=filepos(H)-1;

seek(H,filesize(H));

end;

end;

if FLAG then

writeln(’Не найдено ни одной удаленной компоненты’)

else

begin

a.del:=FALSE;

seek(H,ik);

write(H,a);

end;

close(H);

end; {procedure VOSST}

 

Procedure DELF(var H:TFile);

var

a:STUDENT; {логическая компонента файла}

ik:integer; {номер удаляемой компоненты}

i:integer; {номер очередной компоненты}

begin

Reset(H);

while NOT EOF(H) do

begin

Read(H,a);

if a.del then {если компонента помечена на удаление,

то удалить физически}

begin

ik:=filepos(H)-1;

while NOT EOF(H) do

begin

i:=filepos(H);

Read(H,a);

seek(H,i-1);

write(H,a);

seek(H,i+1);

end;

seek(H,filesize(H)-1);

truncate(H);

seek(H,ik);

end; {if}

end; {while}

close(H);

end; {procedure DELF}

 

Procedure CORR(var H:TFile);

var

a:STUDENT; {логическая компонента файла}

Key:string; {фамилия корректируемого студента}

FLAG:boolean; {флаг существования результата}

ik:integer; {номер удаляемой компоненты}

begin

write(’Введите фамилию корректируемого студента:’);

Readln(Key);

Reset(H);

FLAG:=TRUE;

while NOT EOF(H) do

begin

Read(H,a);

if NOT a.del then

if a.FIO=Key then

begin

FLAG:=FALSE;

ik:=filepos(H)-1;

seek(H,filesize(H));

end;

end;

if FLAG then

writeln(’Поиск корректируемой компоненты не дал результата’)

else

WITH a, a.ADR, a.POINT do

begin

seek(H,ik);

Read(H,a);

writeln(’Корректируется следующая компонента:’);

writeln(’ФИО:’,FIO);

writeln(’Адрес:’,City,’,’,Street,House,’-’,Flat);

writeln(’Номер телефона:’,TLF);

writeln(’Учебная группа:’,GROUP);

writeln(’Оценки:’);

writeln(’Химия:’,Chem);

writeln(’Физика:’,Phis);

writeln(’Математика:’,Math);

writeln;

writeln(’Введите новые данные ’);

write(’ФИО:’);

Readln(FIO);

writeln(’Адрес:’);

write(’Город:’);

Readln(City);

write(’Улица:’);

Readln(Street);

write(’Номер дома:’);

Readln(House);

write(’Номер квартиры:’);

Readln(Flat);

write(’Номер телефона:’);

Readln(TLF);

write(’Учебная группа:’);

Readln(GROUP);

writeln(’Оценки:’);

write(’Химия:’);

Readln(Chem);

write(’Физика:’);

Readln(Phis);

write(’Математика:’);

Readln(Math);

seek(H,ik);

write(H,a);

end; {WITH a}

close(H);

end; {procedure CORR}

 

{ГЛАВНАЯ ПРОГРАММА}

BEGIN

write(’Введите имя файла БД:’);

Readln(fname);

assign(F,fname);

Repeat

k:=MENU;

case k of

0: writeln(’Работа завершена’);

1: vvod(F);

2: vyvod(F);

3: POISK1(F);

4: POISK2(F);

5: DELL(F);

6: DELF(F);

7: VOSST(F);

8: CORR(F)

else

writeln(’Ошибка! Повторите выбор. ’);

end;

Until k=0;

END.


Дата добавления: 2018-10-27; просмотров: 201; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!