Описание структуры компоненты файла
Описание глобальных типов данных
• • •
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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!