Читайте также:
|
|
Unit 1
В самом начале моей программы мне необходимо было задать структуру успеваемости, указав в листинге программе глобальные переменные:
private
{ Private declarations }
public
{ Public declarations }
end;
usp=record
fio,faq,predmet,ocenka,stud: string[20];
end;
Потом с помощью использования процедуры SaveAndUpdate, которая сохраняет все данные в файл и затем считывает их оттуда.
procedure tform1.SaveAndUpdate;
var k:integer; F:file of usp; s:usp;
begin
if not FileExists('usp.stud') then
begin
AssignFile(F, 'usp.stud');
Rewrite(F);
CloseFile(F);
end else
begin
AssignFile(F,'usp.stud');
reset(F);
k:=1;
while not EOF(F) do begin
Read(F,s);
Form1.StringGrid1.Cells[0,k]:=IntToStr(k);
Form1.StringGrid1.Cells[1,k]:=s.predmet;
Form1.StringGrid1.Cells[2,k]:=s.ocenka;
Form1.StringGrid1.Cells[3,k]:=s.stud;
k:=k+1;
Form1.StringGrid1.RowCount:=k;
end;end;
CloseFile(f);
end;
Первая строка – это описание самой процедуры. Далее следует объявление переменных, переменная k нужна для того, чтобы показывать количество строк, F – это файл. После этого идет условие – если файл «usp.stud» не существует, то связывает его с файлом F. После этого открываем для записи файл, а затем его закрываем. Переменной k задаем значение 1, чтобы он мог считать нумерацию товаров в StringGrid правильно. Далее первой строке в StringGrid присваиваются значения номера строки, оценки, предмет и имя студента. Так же стоит помнить, что процедуру нужно объявить еще в type в самом верху программы, в таком виде: procedure SaveAndUpdate;, в противном случае программа не будет работать.
Далее нужно дать названия столбцам, в которых буду наши данные по успеваемости. Для этого нужно два раза щелкнуть по первой форме и ввести:
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='№';
StringGrid1.Cells [1,0]:='предмет';
StringGrid1.Cells[2,0]:='имя';
StringGrid1.Cells[3,0]:='оценка';
SaveAndUpdate;
end;
После этого следующим действие нужно запрограммировать кнопку «Добавить», чтобы программа могла перейти на форму 2 и уже оттуда можно было бы задавать данные для внесения их в таблицу:
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Edit1.Clear;
form2.ComboBox1.ItemIndex:=0;
form2.Edit2.Clear;
form2.ShowModal;
end;
Далее остается запрограммировать три оставшиеся кнопки на форме 1, для кнопки «Удалить», которая очищает данные в таблице:
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
f:file of usp;
begin
assignfile(f,'usp.stud');
rewrite(f);
closefile(f);
for i:=1 to stringgrid1.rowcount do stringgrid1.Rows[i].Clear;
stringgrid1.RowCount:=2;
end;
После этого осуществляем процедуру вывода всех данных из StringGrid в Memo путе программирования кнопки «Вывести»:
procedure TForm1.Button3Click(Sender: TObject);
Var
i,j,n: integer;
stud:string;
begin
for j:=0 to StringGrid1.RowCount -1 do
for i:=0 to StringGrid1.ColCount -1 do
if StringGrid1.Cells[i,j] = '' then
StringGrid1.Cells[i,j]:= '0';
//StringGrid1.Cells[i,j]:= format('0',[i,j]);
Memo1.Clear;
for i:=0 to StringGrid1.RowCount -1 do
begin
if i>0 then
memo1.Lines.Add('');
for j:=0 to StringGrid1.ColCount -1 do
memo1.seltext:=(''+StringGrid1.Cells[j,i]+'|');
end;
for n:=0 to StringGrid1.ColCount -1 do
begin
stud:=memo1.lines[n]; delete(stud,Length(stud),30); memo1.lines[n]:=stud;
end;
Memo1.Lines.SaveToFile('Текст.txt');
end;
И далее соответственно удаление данных из него с помощью кнопки «Очистить»:
procedure TForm1.Button4Click(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
end.
Так же на форме 1 у меня присутствуют: MainMenu,SaveDialog,OpenDialog, где MainMenu мне позволило создать меню с вложенными действиями, которые я осуществила, определенно функцию сохранения с помощью SaveDialog данных выведенных в Memo в текстовый файл и так же открыть его с помощью OpenDialog и так же в конце совершить выход и работы программы нажатием на «Выход».
procedure TForm1.N2Click(Sender: TObject); // процедура сохранения
var i:integer; F:textfile;
begin
if SaveDialog1.Execute then begin
AssignFile(F, SaveDialog1.FileName+ '.txt');
Rewrite(F);
for i:=0 to Memo1.Lines.Count-1 do
writeln(f, Memo1.Lines[i]);
CloseFile(F);
end; end;
procedure TForm1.N4Click(Sender: TObject); //процедура открытия
var F:TextFile; Stud:string;
begin
Memo1.Clear;
if OpenDialog1.Execute then //вызываем Open Dialog
if OpenDialog1.FileName<> '' then //выбрали ли файл
begin
AssignFile(F,OpenDialog1.FileName); //определяем текстовый файл
Reset(f); //открыть файл для чтения
while not EOF(F) do begin //EOF-end of file
ReadLn(F,Stud); Memo1.Lines.Add(Stud);
end;
CloseFile(F);
end; end;
procedure TForm1.N3Click(Sender: TObject); //процедура выхода из формы
begin
form1.close;
end;
Unit 2
Далее на второй форме нужно в Unit2 записать точно так же, как и на первой форме процедуру SaveAndUpdate для кнопки BitBtn1, которая будет заносить значения из Edit и ComboBox в таблицу StringGrid:
procedure TForm2.BitBtn1Click(Sender: TObject);
var
f:file of usp;
s:usp;
begin
if not fileexists('usp.stud') then
begin
assignfile(f,'stud');
rewrite(f);
closefile(f);
end else
begin
assignfile(f,'usp.stud');
reset(f);
seek(f,filesize(f));
s.predmet:=edit1.Text;
s.ocenka:=combobox1.text;
s.stud:=edit2.text;
write(f,s);
closefile(f);
end;
form1.saveandupdate;
close;
end;
И процедура для BitBtn2, который закрывает форму:
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
Close;
end;
И создадим ограничение ввода в него цифр до 5:
procedure TForm2.Edit2Change(Sender: TObject; var key: char);
begin
if not (key in ['o'..'5',decimalseparator])
then key:=#0;
end;
end.
Дата добавления: 2015-07-26; просмотров: 142 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Компоненты Delphi | | | Иллюстрации показывающие работу программы |