p align="left">procedure N12Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure N15Click(Sender: TObject); procedure N16Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N13Click(Sender: TObject); procedure N14Click(Sender: TObject); procedure N11Click(Sender: TObject); procedure N21Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FRMMain: TFRMMain; implementation uses UnitDM, UnitSprav, UnitTable; {$R *.dfm} procedure TFRMMain.N7Click(Sender: TObject); begin FRMSPRAV.DBGrid1.DataSource:=DM.DS_KLIENT; FRMSPRAV.DBNavigator1.DataSource:=DM.DS_KLIENT; FRMSPRAV.Caption:='Клиенты'; FRMSPRAV.Show; end; procedure TFRMMain.N8Click(Sender: TObject); begin FRMSPRAV.DBGrid1.DataSource:=DM.DS_PROC; FRMSPRAV.DBNavigator1.DataSource:=DM.DS_PROC; FRMSPRAV.Caption:='Процессоры'; FRMSPRAV.Show; end; procedure TFRMMain.N9Click(Sender: TObject); begin FRMSPRAV.DBGrid1.DataSource:=DM.DS_HDD; FRMSPRAV.DBNavigator1.DataSource:=DM.DS_HDD; FRMSPRAV.Caption:='Жесткие диски'; FRMSPRAV.Show; end; procedure TFRMMain.N10Click(Sender: TObject); begin FRMSPRAV.DBGrid1.DataSource:=DM.DS_MEM; FRMSPRAV.DBNavigator1.DataSource:=DM.DS_MEM; FRMSPRAV.Show; FRMSPRAV.Caption:='Память'; end; procedure TFRMMain.N11Click(Sender: TObject); begin FRMTable.Label1.Caption:=('Введите название машины'); FRMTable.DBGrid1.DataSource:=DM.DSQ_Dogovor; FRMTable.ClientHeight:=211; FRMTable.Show; FRMTable.Panel1.Visible:=false; FRMTable.Panel2.Visible:=true; FRMTable.Caption:='Поиск арендаторов'; end; procedure TFRMMain.N12Click(Sender: TObject); begin FRMSPRAV.DBGrid1.DataSource:=DM.DS_SPEED; FRMSPRAV.DBNavigator1.DataSource:=DM.DS_SPEED; FRMSPRAV.Show; FRMSPRAV.Caption:='Скорость'; end; procedure TFRMMain.N13Click(Sender: TObject); begin FRMTable.DBGrid1.DataSource:=DM.DSv_DOGOVOR; FRMTable.Show; FRMTable.ClientHeight:=169; FRMTable.Caption:='Договора'; end; procedure TFRMMain.N14Click(Sender: TObject); begin FRMTable.DBGrid1.DataSource:=DM.DSV_MASHINS; FRMTable.Show; FRMTable.ClientHeight:=169; FRMTable.Caption:='Прайс-лист'; end; procedure TFRMMain.N15Click(Sender: TObject); begin FRMTable.DBGrid1.DataSource:=DM.DS_DOGOVOR; FRMTable.ClientHeight:=211; FRMTable.Show; FRMTable.Panel1.Visible:=true; FRMTable.Panel2.Visible:=false; FRMTable.Caption:='Договора'; end; procedure TFRMMain.N16Click(Sender: TObject); begin FRMTable.DBGrid1.DataSource:=DM.DS_MASHIN; FRMTable.ClientHeight:=211; FRMTable.Show; FRMTable.Panel1.Visible:=true; FRMTable.Panel2.Visible:=false; FRMTable.Caption:='Прайс-лист'; end; procedure TFRMMain.N21Click(Sender: TObject); begin FRMTable.Label1.Caption:=('Введите требуемый объем памяти'); FRMTable.DBGrid1.DataSource:=DM.DSP_Poisk; FRMTable.ClientHeight:=211; FRMTable.Show; FRMTable.Panel1.Visible:=false; FRMTable.Panel2.Visible:=true; FRMTable.Caption:='Поиск машины'; end; procedure TFRMMain.N5Click(Sender: TObject); begin DM.RvDogovora.Execute; end; procedure TFRMMain.N6Click(Sender: TObject); begin close; end; end. unit UnitDM; interface uses SysUtils, Classes, DB, ADODB, RpCon, RpConDS, RpDefine, RpRave, RpRender, RpRenderCanvas, RpRenderPreview, DBClient; type TDM = class(TDataModule) T_KLIENTS: TADOTable; T_DOGOVOR: TADOTable; T_MASHIN: TADOTable; T_SPEED: TADOTable; T_MEM: TADOTable; T_HDD: TADOTable; T_PROC: TADOTable; DS_DOGOVOR: TDataSource; DS_MASHIN: TDataSource; DS_SPEED: TDataSource; DS_MEM: TDataSource; DS_HDD: TDataSource; DS_PROC: TDataSource; DS_KLIENT: TDataSource; ADOConnection1: TADOConnection; T_HDDID_HDD: TAutoIncField; T_HDDNAIM: TWideStringField; T_HDDHARACT: TWideStringField; T_PROCID_PROC: TAutoIncField; T_PROCNAIM: TWideStringField; T_PROCHARACT: TWideStringField; T_MEMID_MEM: TAutoIncField; T_MEMNAIM: TWideStringField; T_MEMHARACT: TWideStringField; T_KLIENTSID_KLIENT: TAutoIncField; T_KLIENTSNAIM: TWideStringField; T_SPEEDID_SPEED: TAutoIncField; T_SPEEDNAIM: TWideStringField; T_SPEEDHARACT: TWideStringField; RvDogovora: TRvProject; RvDogovor: TRvDataSetConnection; TV_DOGOVOR: TADOTable; DSV_DOGOVOR: TDataSource; TV_MASHINS: TADOTable; DSV_MASHINS: TDataSource; TV_MASHINSNAIM_MASH: TWideStringField; TV_MASHINSNAIM_MEM: TWideStringField; TV_MASHINSNAIM_SPEED: TWideStringField; TV_MASHINSNAIM_PROC: TWideStringField; TV_MASHINSNAIM_HDD: TWideStringField; TV_MASHINSCENA: TFloatField; TV_DOGOVORNAIM_MASH: TWideStringField; TV_DOGOVORCENA: TFloatField; TV_DOGOVORDate_zakl: TDateTimeField; TV_DOGOVORDate_okonch: TDateTimeField; TV_DOGOVORStoimost: TFloatField; TV_DOGOVORNAIM_KLIENT: TWideStringField; QP_Dogovor: TADOQuery; DSQ_Dogovor: TDataSource; P_Poisk: TADOStoredProc; DSP_Poisk: TDataSource; T_KLIENTSHARACT: TWideStringField; T_DOGOVORID_DOGOVOR: TAutoIncField; T_DOGOVORID_KLIENT: TIntegerField; T_DOGOVORID_MASHIN: TIntegerField; T_DOGOVORDate_zakl: TDateTimeField; T_DOGOVORDate_okonch: TDateTimeField; T_DOGOVORStoimost: TFloatField; T_MASHINID_MASHIN: TAutoIncField; T_MASHINID_PROC: TIntegerField; T_MASHINID_HDD: TIntegerField; T_MASHINID_MEM: TIntegerField; T_MASHINID_SPEED: TIntegerField; T_MASHINNAIM: TWideStringField; T_MASHINCENA: TFloatField; QP_DogovorNAIM_KLIENT: TWideStringField; QP_DogovorNAIM_MASH: TWideStringField; QP_DogovorCENA: TFloatField; QP_DogovorDate_zakl: TDateTimeField; QP_DogovorDate_okonch: TDateTimeField; QP_DogovorStoimost: TFloatField; P_PoiskNAIM_MASH: TWideStringField; P_PoiskNAIM_MEM: TWideStringField; P_PoiskNAIM_SPEED: TWideStringField; P_PoiskNAIM_PROC: TWideStringField; P_PoiskNAIM_HDD: TWideStringField; P_PoiskCENA: TFloatField; procedure T_DOGOVORCalcFields(DataSet: TDataSet); private { Private declarations } public { Public declarations } end; var DM: TDM; implementation uses UnitMain; {$R *.dfm} procedure TDM.T_DOGOVORCalcFields(DataSet: TDataSet); begin T_Dogovor.Fields[5].AsFloat:=round(T_Dogovor.Fields[4].AsDateTime-T_Dogovor.Fields[3].AsDateTime)*(T_Mashin.Fields[6].AsInteger/30); end; end. unit UnitTable; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, StdCtrls, ExtCtrls; type TFRMTable = class(TForm) DBGrid1: TDBGrid; Panel1: TPanel; Button3: TButton; Button2: TButton; Button1: TButton; Panel2: TPanel; Edit1: TEdit; Button4: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FRMTable: TFRMTable; implementation uses UnitDM, UnitAdd; {$R *.dfm} procedure set_add_form_dogovor; begin FRMAdd.DBLookupComboBoxD1.Visible:=true; FRMAdd.DBLookupComboBoxD2.Visible:=true; FRMAdd.DBEditD1.Visible:=true; FRMAdd.DBEditD2.Visible:=true; FRMAdd.DBLookupComboBoxM1.Visible:=false; FRMAdd.DBLookupComboBoxM2.Visible:=false; FRMAdd.DBLookupComboBoxM3.Visible:=false; FRMAdd.DBLookupComboBoxM4.Visible:=false; FRMAdd.DBEditm1.Visible:=false; FRMAdd.DBEditm2.Visible:=false; FRMAdd.Label1.Caption:=('ФИО Клиента'); FRMAdd.Label2.Caption:=('Название машины'); FRMAdd.Label3.Caption:=('Дата заключения'); FRMAdd.Label4.Caption:=('Дата окончания'); FRMAdd.Label5.Caption:=(''); FRMAdd.Label6.Caption:=(''); end; procedure set_add_form_mashin; begin FRMAdd.DBLookupComboBoxD1.Visible:=false; FRMAdd.DBLookupComboBoxD2.Visible:=false; FRMAdd.DBEditD1.Visible:=false; FRMAdd.DBEditD2.Visible:=false; FRMAdd.DBLookupComboBoxM1.Visible:=true; FRMAdd.DBLookupComboBoxM2.Visible:=true; FRMAdd.DBLookupComboBoxM3.Visible:=true; FRMAdd.DBLookupComboBoxM4.Visible:=true; FRMAdd.DBEditm1.Visible:=true; FRMAdd.DBEditm2.Visible:=true; FRMAdd.Label1.Caption:=('Процессор'); FRMAdd.Label2.Caption:=('Жесткий диск'); FRMAdd.Label3.Caption:=('Память'); FRMAdd.Label4.Caption:=('Скорость подключения'); FRMAdd.Label5.Caption:=('Название'); FRMAdd.Label6.Caption:=('Цена'); end; procedure TFRMTable.Button1Click(Sender: TObject); begin if DBGrid1.DataSource=DM.DS_DOGOVOR then begin DM.T_DOGOVOR.Append; set_add_form_dogovor; FRMAdd.Caption:='Добавить договор'; end else if DBGrid1.DataSource=DM.DS_MASHIN then begin DM.T_MASHIN.Append; set_add_form_mashin; FRMAdd.Caption:='Добавить конфигурацию'; end; FRMAdd.show; end; procedure TFRMTable.Button2Click(Sender: TObject); begin if DBGrid1.DataSource=DM.DS_DOGOVOR then begin DM.T_DOGOVOR.Edit; set_add_form_dogovor; FRMAdd.Caption:='Редактировать договор'; end else if DBGrid1.DataSource=DM.DS_MASHIN then begin DM.T_MASHIN.Edit; set_add_form_mashin; FRMAdd.Caption:='Редактировать конфигурацию'; end; FRMAdd.show; end; procedure TFRMTable.Button3Click(Sender: TObject); begin if DBGrid1.DataSource=DM.DS_DOGOVOR then begin DM.T_DOGOVOR.Delete; end else if DBGrid1.DataSource=DM.DS_MASHIN then begin DM.T_MASHIN.Delete; end; end; procedure TFRMTable.Button4Click(Sender: TObject); var s:string; begin if DBGrid1.DataSource=DM.DSQ_DOGOVOR then begin DM.QP_Dogovor.Close; s:='SELECT NAIM_KLIENT, NAIM_MASH, CENA, Date_zakl, Date_okonch, '; s:=s+' Stoimost FROM PR_DOGOVOR '; s:=s+'WHERE NAIM_MASH =('''+edit1.Text+''')'; DM.QP_Dogovor.SQL.Clear; DM.QP_Dogovor.SQL.Add(s); try dm.QP_Dogovor.Open; except showmessage('ошибка'); end; end else if DBGrid1.DataSource=DM.DSP_Poisk then begin dm.P_Poisk.close; dm.P_Poisk.Parameters.ParamByName('@p').Value:=Edit1.Text; dm.P_Poisk.Open; end; end; end. unit UnitAdd; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls, Mask; type TFRMAdd = class(TForm) Button1: TButton; DBEditD1: TDBEdit; DBEditD2: TDBEdit; DBLookupComboBoxD1: TDBLookupComboBox; DBLookupComboBoxD2: TDBLookupComboBox; Button2: TButton; DBLookupComboBoxM1: TDBLookupComboBox; DBLookupComboBoxM2: TDBLookupComboBox; DBLookupComboBoxM3: TDBLookupComboBox; DBLookupComboBoxM4: TDBLookupComboBox; DBEditM1: TDBEdit; DBEditM2: TDBEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FRMAdd: TFRMAdd; implementation uses UnitDM, UnitTable; {$R *.dfm} procedure TFRMAdd.Button1Click(Sender: TObject); begin if FRMTable.DBGrid1.DataSource=DM.DS_DOGOVOR then begin DM.T_Dogovor.Fields[5].AsFloat:=round(DM.T_Dogovor.Fields[4].AsDateTime-DM.T_Dogovor.Fields[3].AsDateTime)*(round(DM.T_Mashin.Fields[6].AsInteger/30)); DM.T_DOGOVOR.Post; DM.T_DOGOVOR.Active:=false; DM.T_DOGOVOR.Active:=true; DM.T_DOGOVOR.Append; end else if FRMTable.DBGrid1.DataSource=DM.DS_MASHIN then begin DM.T_MASHIN.Post; DM.T_MASHIN.Active:=false; DM.T_MASHIN.Active:=true; DM.T_MASHIN.Append; end; end; procedure TFRMAdd.Button2Click(Sender: TObject); begin close; end; end. 3.2 Руководство пользователя Главная форма (рис. 3.1) позволяет получить доступ ко всем функциям программы, путем использования главного меню. Так же на ней отображен весь список договоров.Рисунок 3.1 Главная формаС помощью главного меню открывается редактор таблиц, путем использования кнопок «Добавить», «Редактировать», «Удалить» можно внести изменения в состав таблиц (рис. 3.2, 3.3). При нажатии кнопки «Ок» на форме добавления/редактирования записи автоматически посчитается сумма договора на основании длительности договора и стоимости аренды данной конфигурации.Рисунок 3.2 Таблица «Договора» и форма для внесения изменений.Рисунок 3.3 Таблица «Прайс-лист» и форма для внесения изменений.При использовании второго пункта меню «Справочники» Можно внести изменения в имеющиеся в базе данных справочники (рис. 3.4 - 3.8)Рисунок 3.4 Справочник «Клиенты».Рисунок 3.5 Справочник «Процессоры».Рисунок 3.6 Справочник «Жесткие диски».Рисунок 3.7 Справочник «Оперативная память».Рисунок 3.8 Справочник «Скорость».Для удобства просмотра хранящейся в базе данных информации сделаны представления, которые можно увидеть с помощью пункта меню «Представления» (рис. 3.9, 3.10)Рисунок 3.9 Представление Договоров.Рисунок 3.10 Представление Прайс-листа.Для получения каких-либо сведений из базы данных используются запросы. На рис 3.11 показан результат запроса на выборку всех арендаторов заданной конфигурации.Рисунок 3.11 Запрос.Для удобства просмотра и возможности вывода информации на печать была использована программа RaveReports с помощью которой можно создавать отчеты. На рис. 3.12 показан внешний вид получаемого отчета.Рисунок 3.12 Вид отчета.ЗаключениеВ результате работы была создана реляционная база данных в Microsoft SQL Server, содержащая 7 таблиц, 5 из которых справочники. Клиентское приложение написанное с помощью CodeGear Delphi позволяющее просматривать, изменять и искать нужную информацию. Были рассмотрены различные способы внесения и получения данных из базы данных. Построен отчет для вывода на печать с помощью программы RaveReports. Изучены свойства и методы компонентов CodeGear Delphi для работы с базами данных.
Страницы: 1, 2, 3, 4
|