Задача: Требуется организовать запись TPupil, содержащую в себе поля:
- Name - имя ученика
- Surname - фамилия ученика
- Age - возраст
- Sex - пол
- На форме создать таблицу StringGrid, в которой подписать столбцы, в соответствии с полями: Имя, Фамилия, Возраст, Поло нажатию на кнопку “Добавить и сохранить”, из полей ввода (Edit) внести данные в таблицу, в переменную типа TTable и дозаписать в файл info.dat. Очистить эти поля ввода.
- По нажатию на кнопку “Сохранить” записать данные в массив типа TTable и в типизированный файл info.dat (файл перезаписывать)
- По нажатию на кнопку “Загрузить”, загрузить данные из файла info.dat в массив типа TTable и вывести в таблицу
Рассмотрим программу.
На форме расположим три компонента типа TLabel (подписи), два поля для ввода данных типа TEdit - для ввода имени и фамилии и компонент типа TSpinEdit для ввода возраста - целого числа. Кроме того, на форму поместим компонент RadioGroup1 - для указания пола, три кнопки, соответственно для выполнения задания №№4,3,2 и компонент тип TStringGrid для просмотра данных.
Объявления нового типа реализуем следующим образом:
type
TPupil = record
Name: string[20]; // указываем фиксированную длину строки
Surname: string[20]; //
Age: integer;
Sex: boolean;
end;
Рассмотрим процедуру добавления данных в файл и в таблицу:
procedure TForm1.Button1Click(Sender: TObject);
var
F: file of TPupil; // объявляем файловую переменную
P: TPupil;
i: integer;
begin
AssignFile(F,’info.dat’); // связываем переменную с файлом на диске
if FileExists(’info.dat’) then //проверяем, существует ли файл
begin
Reset(f); //если файл существует, открываем его
Seek(f,system.FileSize(f)); //устанавливаем указатель на коне
файла
//после последней записи
end
else Rewrite(f); //если файла не существует, создаем его
//считываем данные из Edit-ов в поля записи
P.Name:=Edit1.Text;
P.Surname:=Edit2.Text;
P.Age:=Spinedit1.Value;
if RadioGroup1.ItemIndex=0 then P.Sex:=true //"true" обозначает мужской пол
else P.Sex:=false; //"false" обозначает женский пол
write(F,P); //записываем значение переменной P файл F на текущую позицию
//при этом позиция указателя сместится на одну вправо, то есть в конец файла
SG.RowCount:=SG.RowCount+1; //добавим одну пустую строку в таблицу
//заносим данные из переменной типа TPupil в ячейки таблицы
SG.Cells[0,SG.RowCount-1]:=P.Name;
SG.Cells[1,SG.RowCount-1]:=P.Surname;
SG.Cells[2,SG.RowCount-1]:=IntToStr(P.Age);
if P.Sex then SG.Cells[3,SG.RowCount-1]:='М'
else SG.Cells[3,SG.RowCount-1]:='Ж';
closefile(f); //обязательно закрываем файл по окончании работы с ним!
edit1.Clear; //очищаем поля для ввода
edit2.Clear;
end;
Далее рассмотрим реализацию процедуры загрузки данных из файла в таблицу на форме:
procedure TForm1.Button3Click(Sender: TObject);
var
F: file of TPupil; // объявляем файловую переменную
P: array[1..100] of TPupil;
i: integer;
begin
if FileExists(FName) then //проверяем, существует ли файл
begin
i:=1;
AssignFile(F,FName);//связываем переменную с файлом на диске
Reset(f); //открываем файл
//будем читать содержимое, пока указатель на достигнет конца файла
while not(EOF(F)) do
begin
read(f,P[i]);//считываем данные в переменную типа TPupil
// указатель смещается на следующую запись в файле
SG.RowCount:=SG.RowCount+1; //увеличиваем количество строк в таблице
// заносим данные из полей записи в ячейки таблицы в новую строку
SG.Cells[0,SG.RowCount-1]:=P[i].Name;
SG.Cells[1,SG.RowCount-1]:=P[i].Surname;
SG.Cells[2,SG.RowCount-1]:=IntToStr(P[i].Age);
if P[i].Sex then SG.Cells[3,SG.RowCount-1]:='М'
else SG.Cells[3,SG.RowCount-1]:='Ж';
inc(i);//увеличиваем счетчик записей
end;
CloseFile(f); //обязательно закрываем файл!
end;
end;
Процедура сохранения данных в файл с полной перезаписью данных:
procedure TForm1.Button2Click(Sender: TObject);
var
F: file of TPupil;// объявляем файловую переменную
P: array[1..100] of TPupil;
i: integer;
begin
AssignFile(F,FName);// связываем переменную с файлом на диске
Rewrite(f); // открываем файл, перезаписываем его содержимое
i:=1; //запускаем счетчик записей
while i<SG.RowCount do //пройдем по всем строкам в таблице
begin
//считываем данные из ячеек таблицы в переменную типа TPupil
P[i].Name:=SG.Cells[0,i];
P[i].Surname:=SG.Cells[1,i];
P[i].Age:=StrToInt(SG.Cells[2,i]);
if SG.Cells[3,i] = 'М' then P[i].Sex:=true
else P[i].Sex:=false;
write(f,P[i]); //записываем данные в файл
inc(i); //увеличиваем счетчик
end;
CloseFile(f); //обязательно закрываем файл!
end;
Комментариев нет:
Отправить комментарий