Для реализации данного запроса создадим еще один ADOTable и DataSourse, которые подсоединяются к той же таблице Студенты, но выполняют чуть другие функции.
Данный запрос содержит поля КодСтудента, Фамилия, Год рождения, Группа и Стипендия. Последнее поле является вычисляемым. Для его создания нужно щелкнуть правой кнопкой на элементе ADOTable2 и выбрать пункт New Field. В появившемся окне свойств нового поля заполнить следующие поля: Name - назвать поле Summa: Type - тип Float: Field Type (тип поля) - выбрать calculated, чтобы создать вычисляемое поле.
Теперь создадим обработчик события OnCalcFields. Это событие вызывается каждый раз, когда надо пересчитать вычисляемые поля.
Для этого выделим компонент ADOTable2 и выберем в Инспекторе объектов вкладку «События». Затем сделаем двойной щелчок в пустой строке, справа от пункта OnCalcFields. Появится окно кода. В этом обработчике для нахождения стипендии каждого студента пишем код (см. Приложение).
Для отображения данных в элементе DBGrid1 по компоненту ADOTable2 в код включаем следующие строки:
procedure TForm1.N23Click(Sender: TObject);
begin
DBGrid1.DataSource:=DataModule2.DataSource2;
end;
При выборе пункта меню Ведомость - Ведомость по стипендии выходит отчет, который содержит информацию о стипендии каждого студента. Данный показатель зависит от степени активности каждого студента. При этом базовая стипендия = 500 руб.
Для данного запроса также реализованы функции сортировки, поиска, отбора студентов по видам деятельности, но добавить и редактировать запись здесь не возможно.
Заключение
Использование компьютерных технологий, при использовании автоматизированных программ позволяет избежать ненужных бумажных проволочек и повышает надежность работы, обеспечивает надлежащую наглядность, экономит немалое количество времени.
В любой момент времени в создаваемую по ходу процесса решения задачи базу данных можно вносить необходимые изменения. В обычных документах и ведомостях, написанных от руки и на бумажном носителе, делать такое гораздо проблематичнее, а порой и просто недопустимо.
Ещё десять лет назад, программирование баз данных было очень сложным занятием. За какие-либо достижения в этой области многие программисты получили в своё время докторские степени. Сейчас уже такое трудно себе представить, потому что благодаря Delphi, процесс написания программ упростился, а количество разновидностей баз данных уже исчисляется десятками.
В данном курсовом проекте разработана архитектура базы «Студенты» и показана реализация связи данной базы данных с программой Delphi через компонент ADOConnection.
Разработанное приложение может существенно облегчить работу деканата любого учебного заведения.
Работа базы на контрольных данных (вымышленных) показала ее работоспособность и эффективность.
Список используемых источников
1. Архангельский А.Я. Программирование в Delphi7 - М.: ООО «Бином-Пресс», 2005 г., 1150 стр.
2. База данных: способы модернизации // Журнал «Справочник по управлению персоналом» № 9, сентябрь 2003.
3. Барановская Т.П., Лойко В.И. Информационные системы и технологии в экономике: Учебник. - 2-е изд.,доп. и перераб./. - М.: Финансы и статистика, 2003.
4. Компьютерные программы для службы кадров // Журнал «Справочник кадровика» №2, февраль 2002.
5. Теоретическое учебное пособие РГТК «Тантал» по дисциплине «Технология разработки программного обеспечения».
6. Титоренко Г.А. Информационные технологии управления: Учеб. Пособие для вузов /- 2-е изд., доп. - М.:ЮНИТИ-ДАНА, 2003.
7. Фленов М.Е. Библия Delphi. - СПб.: БХВ-Петербург, 2004. - 880 с: ил.
Электронные учебники:
8. Иллюстрированный самоучитель по Delphi 7 для начинающих
9. Иллюстрированный самоучитель по Delphi 7 для профессионалов
Приложение
Form 1
unit Unit 1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Grids, DBGrids, StdCtrls;
Type
TForm1 = class(TForm)
DBGridUTDBGrid;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
Button1:TButton;
N25: TMenuItem;
N26: TMenuItem;
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure N19Click(Sender: TObject);
procedure N20Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure N18Click(Sender: TObject);
procedure N23Click(Sender: TObject);
procedure N24Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N25Click(Sender: TObject);
procedure N26Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Forml: TForm1;
implementation
uses Unit2, Unit3, Unit4, Unit5;
{$R *.dfm}
procedure TForm1.N2Click(Sender: TObject);
begin
if DataModule2.ADOTablel .Modified then DataModule2.ADOTablel .Post;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
DataModule2.ADOTable1.Insert;
Form3.ShowModal;
end;
procedure TForml.N6Click(Sender: TObject);
begin
Form3.ShowModal;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
if application.MessageBox(PChar('Вы действительно хотите удалить запись'+ DataModule2.ADOTable1.DesignerData), 'Внимание!!!',MB_OKCANCEL)=id_OK
then DataModule2.ADOTablel .Delete;
end;
procedure TForml.N9Click(Sender: TObject);
begin
DataModule2.ADOTable1.IndexFieldNames:='Фамилия';
DataModule2.ADOTable2.IndexFieldNames:='Фамилия';
end;
procedure TForml.N10Click(Sender: TObject);
begin
DataModule2.ADOTable1.IndexFieldNames:= 'Гpyппa';
DataModule2.ADOTable2.IndexFieldNames:= 'Гpyппa';
end;
procedure TForml.N11Click(Sender: TObject);
begin
DataModule2.ADOTable1.IndexFieldNames:=";
DataModule2.ADOTable2.IndexFieldNames:=";
end;
procedure TForml.N13Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TForml.N14Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=false;
DataModule2.ADOTable2.Filtered:=false;
end;
procedure TForml.N19Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=true;
DataModule2.ADOTable2.Filtered:=true;
DataModule2.ADOTable1.Filter:='Cпopт="+'";
DataModule2.ADOTable2.Filter:='Cпopт="+'";
end;
procedure TForm1.N20Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=true;
DataModule2.ADOTable2.Filtered:=true;
DataModule2.ADOTable1.Filter:='KBH="+'";
DataModule2.ADOTable2.Filter:='KBH="+'";
end;
procedure TForml.N21Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=true;
DataModule2.ADOTable2.Filtered:=true;
DataModule2.ADOTable1.Filter:='Cтароста="+'";
DataModule2.ADOTable2.Filter:='Староста="+'";
end;
procedure TForml.N17Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=true;
DataModule2.ADOTable2.Filtered:=true;
DataModule2.ADOTable1.Filter:='Cпopт="+" and KBH="+" and Староста="+'";
DataModule2.ADOTable2.Filter:='Cпopт="+" and KBH="+" and Староста="+'";
end;
procedure TForml.N18Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=true;
DataModule2.ADOTable2.Filtered:=true;
DataModule2.ADOTable1.Filter:='Cпopт="-" and KBH="-" and Староста="-'";
DataModule2.ADOTable2.Filter:='Cпopт="-" and KBH="-" and Староста="-'";
end;
procedure TForml.N23Click(Sender: TObject);
begin
DBGrid1.DataSource:=datamodule2.DataSource2;
end;
procedure TForm1.N24Click(Sender: TObject);
begin
Form5.Show;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForml.N25Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=false;
DataModule2.ADOTable2.Filtered:=false;
end;
procedure TForm1.N26Click(Sender: TObject);
begin
DBGrid1.DataSource:=datamodule2.DataSource1;
end;
end.
DataModule2
unit Unit2;
interface
uses
SysUtils, Messages, Classes, DB, ADODB;
type
TDataModule2 = class(TDataModule)
ADOConnection1: TADOConnection;
ADOTablel:TADOTable;
DataSourcel: TDataSource;
ADOTablelDSDesigner: TAutoIncField;
ADOTable1DSDesigner2: TWideStringField;
ADOTable1DSDesigner3: TWideStringField;
ADOTable1DSDesigner4: TDateTimeField;
ADOTable1DSDesigner5: TWideStringField;
ADOTable1DSDesigner6: TWideStringField;
ADOTable1DSDesigner7: TWideStringField;
ADOTable1DSDesigner8: TWideStringField;
ADOTable1DSDesigner9: TWideStringField;
ADOTable2: TADOTable;
DataSource2: TDataSource;
ADOTable2DSDesigner: TWideStringField;
ADOTable2DSDesigner2: TWideStringField;
ADOTable2DSDesigner3: TDateTimeField;
ADOTable2DSDesigner4: TWideStringField;
ADOTable2DSDesigner5: TWideStringField;
ADOTable2DSDesigner6: TWideStringField;
ADOTable2DSDesigner7: TWideStringField;
ADOTable2Summa: TFloatField;
ADOTable2DSDesigner8: TAutoIncField;
procedure ADOTable2CalcFields(DataSet: TDataSet);
procedure ADOTable2AfterOpen(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule2: TDataModule2;
implementation
uses Unit1, Unit3, Unit4;
{$R *.dfm}
procedure TDataModule2.ADOTable2CalcFields(DataSet: TDataSet);
var
stip: Real;
const
bazstip: Integer=500;
profsous: Real= 0.01;
begin
//--Проверка на активиста
if (ADOTable2DSDesigner4.Value='+') OR
(ADOTable2DSDesigner5.Value='+')OR
(ADOTable2DSDesigner6.Value='+')then
begin
//--Студент точно активист,
//--проверка на старосту.
if (ADOTable2DSDesigner6.Value='+') AND
((ADOTable2DSDesigner4.Value='+') OR (ADOTable2DSDesigner5.Value='+')) then
begin
//--Студент староста,
//--проверка занимается ли он еще и всем остальным
if (ADOTable2DSDesigner4.Value='+') AND
(ADOTable2DSDesigner5.Value='+')then
//--Студент староста и занимается еще 2 видами деятельности
//стипендия базовая +300
begin
stip:=(bazstip+300)*(1-profsous);
ADOTable2Summa.Value:=stip;
end
else
//--Студент староста, и занимается еще 1 видом деятельности
//--стипендия базовая +200
begin
stip:=(bazstip+200)*(l-profsous);
ADOTable2Summa.Value:=stip;
end;
end
else
//--Студент активист, но не староста
//--проверка на 2 вида деятельности
begin
if (ADOTable2DSDesigner4.Value='+') AND
(ADOTable2DSDesigner5.Value='+') then
//--Студент занимается 2 видами деятельности
//--стипендия базовая +150
begin
stip:= (bazstip+150)*(1-profsous);
ADOTable2Summa.Value:=stip;
end
else
//--Студент занимается только 1 видом деятельности
//--стипендия базовая +100
begin
stip:=(bazstip+100)*(1-profsous);
ADOTable2Summa.Value:=stip;
end;
end;
end
else
begin
//--Студент не активист, базовая
stip:= bazstip;
ADOTable2Summa.Value:=stip;
end;
end;
procedure TDataModule2.ADOTable2AfterOpen(DataSet: TDataSet);
begin
ADOTable2.First;
end;
end.
Form3
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask;
type
TForm3 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
DBEditl: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit8: TDBEdit;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
DBNavigator1: TDBNavigator;
Buttonl: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1, Unit2;
{$R *.dfm}
procedure TForm3.Button2Click(Sender: TObject);
begin
if DataModule2.ADOTablel .Modified then DataModule2.ADOTablel .Post;
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
DataModule2.ADOTable1.Cancel;
end;
end.
Form4
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm4 = class(TForm)
Label 1: TLabel;
Label2: TLabel;
Edit1:TEdit;
Edit2:TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses Unit1, Unit2, Unit3;
{$R*.dfm}
procedure TForm4.ButtonlClick(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=true;
DataModule2.ADOTable2.Filtered:=true;
DataModule2.ADOTable1.Filter:='Фамилия='"+Edit1.Text+"";
DataModme2.ADOTable2.Filter:='Фамилия='"+Edit1.Text+"";
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=true;
DataModule2.ADOTable2.Filtered:=true;
DataModule2.ADOTable1.Filter:= 'Группа='''+Edit2.Text+'''';
DataModule2.ADOTable2.Filter:= 'Группа='''+Edit2.Text+'''';
end;
procedure TForm4.Button3Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=true;
DataModule2.ADOTable2.Filtered:=true;
DataModule2.ADOTable1.Filter:='Фамилия='"+Edit1.Text+'" or Группа='"+Edit2.Text+"";
DataModule2.ADOTable2.Filter:='Фамилия='"+Edit1.Text+'" or Группа='"+Edit2.Text+"";
end;
procedure TForm4.Button5Click(Sender: TObject);
begin
DataModule2.ADOTable1.Filtered:=false;
DataModule2.ADOTable2.Filtered:=false;
end;
procedure TForm4.Button4Click(Sender: TObject);
begin
Form4.close;
end;
end.
Form5
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg;
type
TForm5 = class(TForm)
Image 1: TImage;
Label 1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
var Form5: TForm5;
implementation
{$R *.dfm}
end.
Дата: 2019-12-10, просмотров: 201.