Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 10 - Файлы.doc
Скачиваний:
5
Добавлен:
12.07.2019
Размер:
83.97 Кб
Скачать

Пример программы:

{Дан файл записей, в котором хранится информация о студентах факультета: фамилия, группа, четыре оценки за предыдущую сессию и четыре оценки по итогам аттестации. Собрать в один текстовый файл информацию о тех студентах, чей уровень остаточных знаний не менее 60 процентов, информацию об остальных (двоечниках) записать во второй текстовый файл.

Уровень знаний определяется следующим образом:

А - оценка в сессию, В - оценка за аттестацию

B

уровень = --- * 100

A

}

Program ex_rec2;

Uses Crt;

Type student = record

fio: string [20]; {фамилия студента}

gr: string [4]; {группа}

s: array [1..4] of integer; {оценки за сессию}

a: array [1..4] of integer; {оценки за аттестацию}

u: array [1..4] of real; {уровень знаний по предметам}

ur: real; {общий уровень}

end;

f_st_rec = file of student;

f_st_txt = text;

Var st: student; {студент}

f1: f_st_rec; {файл с записями}

f2, f3: f_st_txt; {текстовые файлы

f2 - отличники

f3 - двоечники}

i, m: integer; {i - счетчик,

m - переменная выбора в меню}

ch: char; {вспомогательная переменная}

stroka: string;

Procedure entr (var f1:f_st_rec); {Ввод данных}

begin

clrscr;

rewrite(f1); {открытие нового файла с записями}

writeln('Вводите информацию о студентах');

writeln('признак окончания - Esc');

repeat

with st do

begin gotoxy(1,3);

write('Фамилия: '); readln(fio);

write('Группа : '); readln(gr);

writeln('Оценки за сессию:');

for i:=1 to 4 do {Ввод 4-х оценок за сессию}

begin

gotoxy (5*i, 7); readln(s[i]);

end;

writeln;

writeln('Оценки за аттестацию:');

for i:=1 to 4 do {Ввод 4-х оценок за аттестацию}

begin

gotoxy (5*i, 11); readln(a[i]);

end;

writeln;

ur:=0.;

writeln('Уровень остаточных знаний по предметам:');

for i:=1 to 4 do

begin

u[i]:=a[i]/s[i];

gotoxy (5*i, 16); writeln(u[i]:6:2);

ur:=ur + u[i];

end;

writeln;

writeln('Общий уровень остаточных знаний:');

ur:=ur/4;

gotoxy (5, 20); writeln(ur:6:2);

end; {with}

write(f1, st);

writeln('Enter -продолжить, Esc - закончить ввод');

ch:=readkey;

clrscr;

until ch=#27;

close(f1);

end; { процедура ввода entr закончена}

Procedure obrab (var f1:f_st_rec; var f2,f3:f_st_txt);

begin clrscr;

reset(f1); {Открытие файла записей для чтения}

rewrite(f2); rewrite(f3); {Текстовые - для записи}

writeln(f2, 'Наши отличники'); writeln(f2);

writeln(f3, 'Наши двоечники'); writeln(f3);

while not(eof(f1)) do

begin

read(f1, st);

if (st.ur>=0.60) then

writeln(f2, st.fio,' Уровень: ', st.ur:6:2)

else

writeln(f3, st.fio,' Уровень: ', st.ur:6:2);

end;

close(f1); close(f2); close(f3); clrscr;

end; { процедура обработки закончена}

Procedure view_txt (var f2,f3:f_st_txt); {Проcмотр}

begin

clrscr;

reset(f2); reset(f3);

writeln;

while not(eof(f2)) do

begin

readln(f2, stroka);

writeln(stroka);

end;

writeln;

while not(eof(f3)) do

begin

readln(f3, stroka);

writeln(stroka);

end;

close(f2); close(f3);

readkey;

End; { процедура просмотра закончена}

Procedure menu;

begin

textbackground(lightgray); textcolor(white);

repeat

clrscr;

gotoxy(20, 7);write (' Меню:');

gotoxy(20, 8);write ('1- Ввод исходных данных ');

gotoxy(20, 9);write ('2- Обработка данных');

gotoxy(20,10);write ('3- Просмотр текстовых файлов');

gotoxy(20,11);write ('4- Выход');

repeat

gotoxy(30,12);write ('Ваш выбор:');

gotoxy(41,12);write (' ');gotoxy(41,12);readln(m);

until (m>=1) and (m<=5);

if m=1 then entr(f1);

if m=2 then obrab(f1,f2,f3);

if m=3 then view_txt(f2,f3);

until m = 4;

textbackground(black); { восстановление стандартного экрана}

textcolor(white); { черный фон - белые символы }

clrscr;

end; {Процедура меню закончена}

Begin { Основная программа }

clrscr;

assign(f1, 'rec.dat');

assign(f2, 'txt1.dat');

assign(f3, 'txt2.dat');

menu;

writeln('Конец работы');

readkey;

End.