Объявление переменных:
type
info=record {тип записей}
fio,gr,faq,predmet,ocenka: string[20];
end;
var
//PagesDlg: TPagesDlg; {Строка есть в заголовке модуля}
f: file of info; {Файл записей}
r: info; {Одна запись}
N: integer; {Количество записей}
Form1: TForm1;
Чтение БД из файла:
procedure TForm1.N2Click(Sender: TObject);
{процедура чтения из файла}
var i: integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(F,OpenDialog1.FileName);
Reset(F);
N:=0;
while not eof(f) do
begin
read(F,r);
stringGrid1.Cells[0,N+1]:=r.fio;
stringGrid1.Cells[1,N+1]:=r.gr;
stringGrid1.Cells[2,N+1]:=r.faq;
stringGrid1.Cells[3,N+1]:=r.predmet;
stringGrid1.Cells[4,N+1]:=r.ocenka;
N:=N+1 {увеличение числа записей на 1}
end;
closeFile(F);
NewCombobox {процедура заполняет комбинированный список второй страницы}
end
end;
Процедура сохранения БД:
procedure TForm1.N3Click(Sender: TObject);
var i:integer;
begin
if SaveDialog1.Execute then
begin
AssignFile(F,SaveDialog1.FileName);
Rewrite(F);
i:=1;
while stringGrid1.Cells[3,i]<>'' do
begin
r.fio:=stringGrid1.Cells[0,i];
r.gr:=stringGrid1.Cells[1,i];
r.faq:=stringGrid1.Cells[2,i];
r.predmet:=stringGrid1.Cells[3,i];
r.ocenka:=stringGrid1.Cells[4,i];
write(F,r);
i:=i+1
end;
closeFile(F)
end
end;
Заполнение таблицы (подготовка):
procedure TForm1.Create_(Sender: TObject);
begin
stringGrid1.Cells[0,0]:='ФИО';
stringGrid1.Cells[1,0]:='Группа';
stringGrid1.Cells[2,0]:='Факультет';
stringGrid1.Cells[3,0]:='Предмет';
stringGrid1.Cells[4,0]:='Оценка';
stringGrid2.Cells[0,0]:='ФИО';
stringGrid2.Cells[1,0]:='Группа';
stringGrid2.Cells[2,0]:='Факультет';
stringGrid2.Cells[3,0]:='Предмет';
stringGrid2.Cells[4,0]:='Оценка';
ComboBox1.Items.Add('<'); {Создаем пустую строку в комбинированном списке}
ComboBox1.ItemIndex:=0 {Активизируем эту строку на случай создания нового справочника}
end;
Фильтр по студентам и рассчитывание среднего бала:
procedure TForm1.NewEdit(Sender: TObject);
var i,j,k:integer; {номер строки данных в таблице}
begin
k:=0;
for i:=0 to stringgrid2.RowCount-1 do
for j:=1 to stringgrid2.ColCount-1 do
stringgrid2.Cells[i,j]:='';
for i:=1 to N do
begin
if StringGrid1.Cells[0,i]=ComboBox1.Items[ComboBox1.ItemIndex]
then
begin
k:=k+1;
stringgrid2.Cells[0,k]:=stringgrid1.Cells[0,i];
stringgrid2.Cells[1,k]:=stringgrid1.Cells[1,i];
stringgrid2.Cells[2,k]:=stringgrid1.Cells[2,i];
stringgrid2.Cells[3,k]:=stringgrid1.Cells[3,i];
stringgrid2.Cells[4,k]:=stringgrid1.Cells[4,i];
end;
end;
i:=1; k:=0;
While Stringgrid2.Cells[0,i]<>'' do
begin
k:=k+strtoint(Stringgrid2.Cells[4,i]);
i:=i+1;
end;
if i<>1 then
i:=i-1;
label3.Caption:= floattostr(k/i);
end;
Заполнение ComboBox (Для фильтра по студентам):
procedure Tform1.NewComboBox;
var i,j,k: integer; key:boolean;
begin
{Запоминаем активную позицию комбинированного списка}
j:=ComboBox1.ItemIndex;
ComboBox1.Clear; {очищаем список}
key:=true;
for i:=1 to n do
begin
for k:=0 to combobox1.Items.Count-1 do
if ComboBox1.Items[k]=StringGrid1.Cells[0,i] then
key:=false;
if key=true then ComboBox1.Items.Add(StringGrid1.Cells[0,i]);
key:=true;
end;
ComboBox1.ItemIndex:=j {Переходим на позицию j}
end;
Кнопка предыдущая запись:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ComboBox1.ItemIndex=0
then ComboBox1.ItemIndex:=N-1
else ComboBox1.ItemIndex:=ComboBox1.ItemIndex-1;
NewEdit(ComboBox1) {Обновляем панель «Найдена запись»}
end;
Кнопка следующая запись:
procedure TForm1.Button2Click(Sender: TObject);
begin
if ComboBox1.ItemIndex=N-1
then ComboBox1.ItemIndex:=0
else ComboBox1.ItemIndex:=ComboBox1.ItemIndex+1;
NewEdit(ComboBox1) {Обновляем панель «Найдена запись»}
end;
Поиск по студентам:
procedure TForm1.Button3Click(Sender: TObject);
var i,j,k:integer; {номер строки данных в таблице}
begin
if Edit5.Text='' then begin showmessage('Введите строку для поиска');exit;end;
k:=0;
for i:=0 to stringgrid2.RowCount-1 do
for j:=1 to stringgrid2.ColCount-1 do
stringgrid2.Cells[i,j]:='';
for i:=1 to N do
begin
if StringGrid1.Cells[0,i]=Edit5.Text
then
begin
k:=k+1;
stringgrid2.Cells[0,k]:=stringgrid1.Cells[0,i];
stringgrid2.Cells[1,k]:=stringgrid1.Cells[1,i];
stringgrid2.Cells[2,k]:=stringgrid1.Cells[2,i];
stringgrid2.Cells[3,k]:=stringgrid1.Cells[3,i];
stringgrid2.Cells[4,k]:=stringgrid1.Cells[4,i];
combobox1.ItemIndex:=i-1;
end;
end;
i:=1; k:=0;
While Stringgrid2.Cells[0,i]<>'' do
begin
k:=k+strtoint(Stringgrid2.Cells[4,i]);
i:=i+1;
end;
if i<>1 then
i:=i-1;
label3.Caption:= floattostr(k/(i));
if stringgrid2.Cells[0,1]='' then Showmessage('Ничего не найдено');
end;
Удаление:
procedure TForm1.Button4Click(Sender: TObject);
var i,j:integer; s:string;
begin
s:=combobox1.Text;
for i:=0 to stringgrid2.RowCount-1 do
for j:=1 to stringgrid2.ColCount-1 do
stringgrid2.Cells[i,j]:='';
for i:=0 to Combobox1.Items.Count do
begin
if Combobox1.Items[i]=s then Combobox1.DeleteSelected;
end;
Button2Click(Sender);
end;
Полностью исходник можно найти в разделе - Исходники на Delphi |