Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодичкаРГР_Программирование.doc
Скачиваний:
5
Добавлен:
17.11.2019
Размер:
1.13 Mб
Скачать

4.1.5.2Процедура вывода файла в StringGrid

Необходимость вывода файла в компонент TStringGrid в нашем проекте будет возникать неоднократно. Поэтому эту операцию целесообразно оформить как процедуру, которой в качестве параметра передается файловая переменная и ссылка на компонент TStringGrid.

//Процедура вывода файла в StringGrid

procedure showFileInGrid(var f: TAttFile; g: TStringGrid);

var i:integer; r: TAttRec;

begin

//Настраиваем StringGrid

g.RowCount:=fileSize(f)+1;

i:=1; // счетчик строк StringGrid

//Файл в начало

Reset(f);

//Организуем цикл по записям файла

while not eof(f) do

begin

// читаем запись

read(f,r);

// Переносим запись в StringGrid

g.Cells[0, i]:=r.Name;

g.Cells[1, i]:= FloatToStr(r.ball);

g.Cells[2, i]:= IntToStr(r.neud);

i:=i+1;

end;

end;

4.1.6Процедуры работы со StringGrid1

Эти процедуры используются для управления компонентом StringGrid1, который служит для подготовки записей перед занесением их в файл.

Первая из процедур связана с пунктом меню «Добавить строку».

// Добавление строки в StringGrid1

procedure TfrmAtt.mnuAddRowClick(Sender: TObject);

begin

StringGrid1.RowCount := StringGrid1.RowCount + 1;

end;

Вторая процедура связана с пунктом меню «Удалить строку». Удаление строки производится циклическим сдвигом записей на место удаляемой.

//Удаление строки из StringGrid1

procedure TfrmAtt.mnuDelRowClick(Sender: TObject);

var i, j:integer;

begin

with StringGrid1 do

begin

for i:=Row to RowCount - 2 do

for j:=0 to ColCount-1 do Cells[j,i]:= Cells[j, i+1];

RowCount := RowCount -1;

end;

end;

4.1.7Процедуры реализации пунктов меню fileMenu

4.1.7.1Добавление данных из StringGrid1 в файл

Эта процедура должна быть связана с пунктом меню «Добавить в файл из StringGrid1».

// Добавление данных из StringGrid1 в файл

procedure TfrmAtt.mnuAddToFileClick(Sender: TObject);

var f: TAttFile; i: integer; r: TAttRec;

begin

//Открываем файл

openAttFile(f);

//Переходим в конец файла

seek(f, FileSize(f));

// Дописываем записи из StringGrid1

for i := 1 to StringGrid1.RowCount - 1 do

begin

r.Name := StringGrid1.Cells[0,i];

r.ball := strToFloat(StringGrid1.Cells[1,i]);

r.neud := strToInt(StringGrid1.Cells[2,i]);

write(f, r);

end;

showMessage('Данные записаны');

showFileInGrid(f, StringGrid2);

//закрываем файл

closeFile(f);

end;

4.1.7.2Поиск записи по фамилии

Эта процедура должна быть связана с пунктом меню «Поиск записи по фамилии».

// Поиск записи по фамилии

procedure TfrmAtt.mnuFindFamClick(Sender: TObject);

var fam:TName; r:TAttRec; ok:boolean; f:TAttFile;

begin

fam := inputBox('Поиск записи по фамилии', 'Введите фамилию', '');

//Открываем файл

openAttFile(f);

//Организуем цикл по записям файла

ok:=false; // Признак того, что запись найдена

while not eof(f) do

begin

// Читаем запись

read(f,r);

if r.Name = fam then begin

showMessage( 'Результаты аттестации ' + fam + #13 +

'Ср.балл = ' + floatToStr(r.ball) + #13 +

'Количество неуд = ' + intToStr(r.neud));

ok := true;

break; // Прерываем цикл когда нашли

end;

end;

if not ok then showMessage(fam + ' не найдено');

end;