Порядок замены содержимого записи
1. Связать файловую переменную с именем файла (Assign).
2. Открыть существующий файл (Reset)
3. Установить указатель файла перед компонентом с нужным номером Seek(файловая_переменная,номер_компоненты)
4. Прочитать компоненту из файла (Read)
5. Установить указатель файла перед компонентом с нужным номером Seek(файловая_переменная,номер_компоненты)
6. Записать компонент в файл (Write)
7. Закрыть файл (Close).
Пример. Создать файл записей, содержащих сведения о сдаче студентами сессии. Структура записи: фамилии студента, номер группы, результаты сдачи трех экзаменов. Распечатать список студентов, получающих стипендию. Условие получения стипендии – средний балл больше 5. Предусмотреть все виды корректировки файла.
Program Zapisi;
Uses Crt;
Const
FileName:String[10]=’Stud.dat’; {имя Файла}
Type Sved=record
Fio:String[50]; {Фамилия}
Nom:String[10]; {Номер группы}
b1,b2,b3:0..10; {Результаты сдачи экзаменов}
sb:Real; {Средний балл}
end;
Var
Fv,Fv1:File of Sved;
Rv: Sved;
i,N:Byte;
{Создание файла записей}
Procedure Vvod;
Begin
Assign (Fv,FileName);
Rewrite(Fv);
While True do
With Rv do
Begin
Clrscr;
Write ('ФИО (признак окончания ввод ***)-->');
ReadLn(Fio);
If Fio=’***’ then
Begin
Close(Fv);
Exit;
end;
Write ('Группа -->');
ReadLn(Nom);
Write ('Оценки -->');
ReadLn(b1,b2,b3);
sb:=(b1+b2+b3)/3;
Write(Fv,Rv);
End
end;
{Вывод исходного файла записей}
Procedure Vivod;
Begin
clrscr;
WriteLn ('Сведения о студентах:');
WriteLn ('Фамилия Группа Оценки Средний балл');
Assign (Fv,FileName);
Reset(Fv);
While not EOF(Fv) do
With Rv do
Begin
Read(Fv,Rv);
WriteLn (Fio:10,Nom:10,b1:2,b2:2,b3:2,sb:5:1);
end;
Close (Fv);
Repeat Until KeyPressed;
end;
{Вывод списка студентов, получающих стипендию}
Procedure Obr;
Begin
clrscr;
WriteLn ('Сведения о студентах:');
WriteLn ('Фамилия Группа Оценки Средний балл');
Assign (Fv,FileName);
Reset(Fv);
While not EOF(Fv) do
With Rv do
Begin
Read(Fv,Rv);
If sb>5 then
WriteLn(Fio:10,Nom:10,b1:2,b2:2,b3:2,sb:5:1);
end;
Close (Fv);
Repeat Until KeyPressed;
end;
{Расширение файла за счет внесения новых компонент}
Procedure Rasch;
Begin
Assign (Fv,FileName);
Reset(Fv);
Seek(Fv,FileSize(Fv));
While True do
With Rv do
Begin
Clrscr;
Write ('ФИО (признак окончания ввод ***)-->');
ReadLn(Fio);
If Fio=’***’ then
Begin
Close(Fv);
Exit;
end;
Write ('Группа -->');
ReadLn(Nom);
Write ('Оценки -->');
ReadLn(b1,b2,b3);
sb:=(b1+b2+b3)/3;
Write(Fv,Rv);
End
end;
{Замена содержимого записи}
Procedure Zam_zapisi;
Begin
Clrscr;
Assign (Fv,FileName);
Reset(Fv);
Write (’Введите номер заменяемой записи N=’);
ReadLn (N);
Seek(Fv,N-1);
Read(Fv,Rv);
Write ('ФИО: ',Fio,'-->');
ReadLn(Fio);
Write ('Группа: ',Nom,' -->');
ReadLn(Nom);
Write ('Оценки: ',b1:2,b2:2,b3:2,' -->');
ReadLn(b1,b2,b3);
sb:=(b1+b2+b3)/3;
Seek(Fv,N-1);
Write(Fv,Rv);
Close(Fv);
end;
{Удаление записи из файла}
Procedure Udal_zapisi;
Begin
Clrscr;
Assign (Fv,FileName);
Reset(Fv);
Write (’Введите номер удаляемой записи N=’);
ReadLn (N);
Assign (Fv1,’Temp.dat’); {создаем промежуточный файл}
Rewrite(Fv1); {открываем его для записи}
For i:=1 to N-1 do{считываем из исходного файла и записываем в промежуточный файл все компоненты до удаляемой}
Begin
Read(Fv,Rv);
Write(Fv1,Rv);
end;
Read(Fv,Rv); {считываем удаляемую компоненту}
{ но не записываем}
While not EOF(Fv) do{считываем все остальные}
{компоненты до конца файла}
Begin
Read(Fv,Rv);
Write(Fv1,Rv);
end;
Close(Fv);
Close(Fv1);
{переписываем данные из промежуточного файла в исходный}
Assign (Fv,FileName);
Rewrite(Fv);
Assign (Fv1,’Temp.dat’);
Reset(Fv1);
While not EOF(Fv1) do
Begin
Read(Fv1,Rv);
Write(Fv,Rv);
end;
Close(Fv);
Close(Fv1);
end;
{Основная программа}
Begin
Vvod;
Vivod;
Obr;
Rasch;
Zam_zapisi;
Udal_zapisi;
End.
Дата добавления: 2015-04-15; просмотров: 711;