Описание задачиРазрабатываемое приложение предназначено для учета поставок медикаментов. Система должна хранить, добавлять, изменять и удалять информацию об ассортименте обуви: ее наименовании, размере, цене и количестве, а также об изготовителе: названии фирмы и ее адресе. Система должна поддерживать следующие функции: - отображать информацию об ассортименте имеющейся обуви - идентификатор ассортимента, наименование обуви, размер, цену, количество, текущую дату; - отображать информацию об изготовителе обуви - идентификатор изготовителя, название фирмы, ее адрес; - формировать сведения об ассортименте обуви; - формировать сведения об изготовителе обуви; - осуществлять запросы к базе данных; - формировать отчетные документы. Тестовый пример 1. Проверка функции учет информации о производителях. При запуске приложения на экране появится главное окно приложения (Рисунок Б.1). Таблица изготовителя будет уже заполнена данными об изготовителе. Чтобы заполнить таблицу изготовителя, необходимо заполнить все соответствующие поля, для этого щелкнуть по кнопке «Добавить». Откроется новое окно приложения, в которое нужно будет ввести необходимые данные и нажать кнопку «ОК» (Рисунок Б.2). Чтобы обновить данные в таблице, следует нажать кнопку «Обновить», в результате чего информация в таблице изготовителя будет обновлена (Рисунок Б.3). Для изменения какой – либо записи таблицы, требуется нажать на кнопку «Изменить» и внести необходимые изменения записи, после чего нажать «ОК» (Рисунок Б.4). Записи из таблицы можно также и удалять. Для этого требуется выделить необходимую запись и нажать на кнопку «Удалить». После этого откроется окно с предупреждением, нужно ли удалять данную запись или нет (Рисунок Б.5). Требуется сделать выбор, нажав на кнопку «Да» или «Нет» (Рисунок Б.6). Тестовый пример 2. Чтобы начать работу с таблицей ассортимент, требуется использовать кнопки «Добавить», «Изменить», «Удалить», «Запросы», а также использовать поле «Фильтр» для фильтрации информации в таблице. Для добавления записи в таблицу требуется использовать кнопку «Добавить» (Рисунок Б.7). При нажатии на эту кнопку осуществляется добавление записи в таблицу ассортимента (Рисунок Б.8). После открытия формы для добавления новой записи, требуется заполнить соответствующие пустые поля «Товар», «Размер», «Цена», «Количество», поле «Текущая дата» заполняется автоматически датой на настоящее время, но если требуется, то можно выбрать другую дату (Рисунок Б.9). После чего, необходимо нажать на кнопку «ОК» (Рисунок Б.10), либо «Отмена» (Рисунок Б.11). Чтобы изменить какую – то запись в таблице, в начале нужно ее выделить и нажать кнопку «Изменить» (Рисунок Б.12). В результате чего откроется окно изменения записи (Рисунок Б.13). Чтобы внести изменения нужно установить курсор в соответствующее поле и отредактировать информацию (Рисунок Б.14). Далее нажать кнопку «ОК» для подтверждения или «Отменить» для выхода из окна изменений записи. Чтобы удалить какую – то запись из таблицы, следует выделить ее, после чего нажать кнопку «Удалить» (Рисунок Б.15). Программа выдаст окно с подтверждением, нужно ли удалять текущую запись или нет (Рисунок Б.16). Сделать выбор при помощи кнопки «Да», для того, чтобы запись была удалена, либо кнопки «Нет» для отмены удаления записи из таблицы. Для выполнения запросов, требуется нажать на кнопку «Запросы» (Рисунок Б.17). Приложение выдаст форму с таблицей и кнопками «Максимальная цена» (Рисунок Б.18), «Средний размер» (Рисунок Б.19), «Значение размера с максимальной ценой больше 1200» (Рисунок Б.20), «Количество размеров» (Рисунок Б.20). Для того, чтобы в таблице отобразилась информация с максимальной ценой обуви, требуется нажать кнопку «Максимальная цена» (Рисунок Б.18), результат будет отображен в таблице (Рисунок Б.21). Для отображения информации обуви среднего размера, нажать кнопку «Средний размер» (Рисунок Б.19). В таблице будет отображен результат данного запроса (Рисунок Б.22). Чтобы приложение вывело в таблицу информацию о том, каково значение размера с максимальной ценой больше 1200, нажать кнопку «Значение размера с максимальной ценой больше 1200» (Рисунок Б.20). В таблице будет выведен результат данного запроса (Рисунок Б.23). Если пользователю необходима информация о количестве размеров обуви, ему необходимо нажать кнопку «Количество размеров» (Рисунок Б.20). После чего приложение выдаст результат данного запроса, который будет выведен в таблице (Рисунок Б.24). Чтобы выйти завершить работу с запросами, необходимо нажать кнопку «Выход» (Рисунок Б.25). При работе с таблицей ассортимента товара обуви можно также еще и произвести фильтрацию всей информации таблицы. Для этого в пустое поле ввода информации для фильтрации (Рисунок Б.26) ввести ту информацию, которая должна быть найдена (Рисунок Б.27). После чего поставить галочку рядом со словом «Фильтр» (Рисунок Б.28). Приложение выведет найденную запись с введенной в поле фильтрации информацию (Рисунок Б.29). На форме «Учет о сведениях работы обувного магазина» приложения SHOP существует главное меню, которое состоит из трех пунктов: Файл (Рисунок Б.30), Таблица (Рисунок Б.31), Отчет (Рисунок Б.32). После нажатия на кнопку главного меню «Файл» будет виден выпадающий список с выбором «Выйти» (Рисунок Б.32) для выхода из приложения и «Обновить» (Рисунок Б.33) для обновления информации в таблице изготовитель. После нажатия на кнопку главного меню «Таблица» (Рисунок Б.31) откроется выпадающий список с выбором действий «Добавить» (Рисунок Б.34) для добавления записи в таблицу, «Изменить» (Рисунок Б.35) для изменения записи в таблице, «Удалить» для удаления какой – либо записи из таблицы. На главной форме приложения в главном меню представлена также кнопка «Отчет (Рисунок Б.36). Это пункт нужен для отображения отчета на экран об ассортименте обуви и ее изготовителе (Рисунок Б.37).
8.4 Входные и выходные данные
Входными данными является информация о производителях и ассортименте обуви. Выходными данными является информация, сформированная по запросам пользователя, а также отчёт, предназначенный для печати. Заключение В результате проведенной работы была разработана база данных учета для сведений работы обувного магазина, разработан алгоритм решения задачи, составлена и отлажена программа, оформлена документация на программу. Проведенные испытания показали, что программа работает правильно. Все требования технического задания выполнены полностью. За время работы над курсовым проектом был значительно повышен уровень практических навыков программирования в среде Delphi, освоен процесс разработки клиент-серверных приложений баз данных.
Список использованных источников 1. Еременко А.В., Бобрышева Г.В., Долгова И.А. Проектирование баз данных с помощью Open ModelSphere. - Пенза: Издательство ПГУ, 2011. - 76 с. 2. Еременко А.В., Долгова И.А., Щербакова С.В. Базы данных. Учебник. - Пенза: Издательство ПГУ, 2010. - 110 с. 3. http://dep_ivs.pnzgu.ru/
Приложение А (Листинг программы)
unit main001;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ComCtrls, ExtCtrls, Grids, DBGrids, ActnList, DM;
type TfmMain = class(TForm) Panel1: TPanel; StatusBar1: TStatusBar; buExit: TButton; buRefresh: TButton; DBGrid1: TDBGrid; buAdd: TButton; buEdit: TButton; buDelete: TButton; MainMenu1: TMainMenu; mFile: TMenuItem; mExit: TMenuItem; mRefresh: TMenuItem; ActionList1: TActionList; acQuit: TAction; acRefresh: TAction; mTable: TMenuItem; mInsert: TMenuItem; mUpdate: TMenuItem; mDelete: TMenuItem; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; DBGrid2: TDBGrid; chbFiltr: TCheckBox; edFilter: TEdit; Panel2: TPanel; N1: TMenuItem; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure acQuitExecute(Sender: TObject); procedure acRefreshExecute(Sender: TObject); procedure buAddClick(Sender: TObject); procedure buEditClick(Sender: TObject); procedure buDeleteClick(Sender: TObject); procedure mInsertClick(Sender: TObject); procedure mUpdateClick(Sender: TObject); procedure mDeleteClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure chbFiltrClick(Sender: TObject); procedure N1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var fmMain: TfmMain;
implementation
uses Add, Edit, EditPrep, AddPrep, Zaproci;
{$R *.dfm}
procedure TfmMain.acQuitExecute(Sender: TObject); begin Application.Terminate; end;
procedure TfmMain.acRefreshExecute(Sender: TObject); begin with dm1 do begin //Обновляем набор данных dstVid_Voisk dstAssortiment.FullRefresh; dstIsgotovitel.FullRefresh; //Выводим количество записей в таблице Vid_Voisk StatusBar1.Panels[1].Text:= IntToStr(dstAssortiment.RecordCount); end; end;
procedure TfmMain.buAddClick(Sender: TObject); begin //Создаем форму Add fmAdd:= TfmAdd.Create(Application); //Выполняем на этой форме добавление записи if fmAdd.ShowModal = mrOK then begin //Подтверждаем транзакцию dm1.dstAssortiment.Post; StatusBar1.Panels[1].Text:= IntToStr(dm1.dstAssortiment.RecordCount); end //или откатываем ее else dm1.dstAssortiment.Cancel; end;
procedure TfmMain.buDeleteClick(Sender: TObject); begin with dm1 do begin if dstAssortiment.RecordCount= 0 then exit; if Application.MessageBox('Удалить текущую запись?', 'Удаление', MB_YESNO) = mrYes then dstAssortiment.Delete; StatusBar1.Panels[1].Text:= IntToStr(dstAssortiment.RecordCount); end; end; procedure TfmMain.buEditClick(Sender: TObject); begin //Проверить существуют ли записи в таблице if dm1.dstAssortiment.RecordCount = 0 then exit; //Создать форму fmEdit fmEdit:= TfmEdit.Create(Application); //Выполняем на этой форме изменение записи if fmEdit.ShowModal = mrOK then begin //Подтверждаем транзакцию dm1.dstAssortiment.Post; StatusBar1.Panels[1].Text:= IntToStr(dm1.dstAssortiment.RecordCount); end //или откатываем ее else dm1.dstAssortiment.Cancel; end;
procedure TfmMain.Button1Click(Sender: TObject); begin fmZaprosi.Show; end;
procedure TfmMain.Button2Click(Sender: TObject); begin //Создаем форму Add fmAddPrep:= TfmAddPrep.Create(Application); //Выполняем на этой форме добавление записи if fmAddPrep.ShowModal = mrOK then begin //Подтверждаем транзакцию dm1.dstIsgotovitel.Post; StatusBar1.Panels[1].Text:= IntToStr(dm1.dstIsgotovitel.RecordCount); end //или откатываем ее else dm1.dstIsgotovitel.Cancel; end;
procedure TfmMain.Button3Click(Sender: TObject); begin //Проверить существуют ли записи в таблице if dm1.dstIsgotovitel.RecordCount = 0 then exit; //Создать форму fmEdit fmEdPrep:= TfmEdPrep.Create(Application); //Выполняем на этой форме изменение записи if fmEdPrep.ShowModal = mrOK then begin //Подтверждаем транзакцию dm1.dstIsgotovitel.Post; StatusBar1.Panels[1].Text:= IntToStr(dm1.dstIsgotovitel.RecordCount); end //или откатываем ее else dm1.dstIsgotovitel.Cancel; end;
procedure TfmMain.Button4Click(Sender: TObject); begin with dm1 do begin if dstIsgotovitel.RecordCount= 0 then exit; if Application.MessageBox('Удалить текущую запись?', 'Удаление', MB_YESNO) = mrYes then dstIsgotovitel.Delete; StatusBar1.Panels[1].Text:= IntToStr(dstIsgotovitel.RecordCount); end; end;
procedure TfmMain.chbFiltrClick(Sender: TObject); var fn: string; begin fn:= ''; if (chbFiltr.Checked) and (edFilter.Text<>'') then begin //Если свойство checked установлено и есть образец для поиска fn:= '(NAME LIKE '''+edFilter.Text+'%'')'; dm1.dstIsgotovitel.Close; dm1.dstIsgotovitel.MainWhereClause:= fn; dm1.dstIsgotovitel.Open; end else begin //Если свойство checked не установлено dm1.dstIsgotovitel.Close; dm1.dstIsgotovitel.MainWhereClause:= fn; dm1.dstIsgotovitel.Open; end; end;
procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin with dm1 do begin //Запрос закрывается. dstAssortiment.Active:= False; //Закрываем связь с базой данных dbShop.Connected:= False; end; end;
procedure TfmMain.FormShow(Sender: TObject); begin //Открыть базу данных with dm1 do begin dbShop.Connected:= True; dstIsgotovitel.Active:= True; StatusBar1.Panels[1].Text:= IntToStr(dstIsgotovitel.RecordCount); end; end;
procedure TfmMain.mDeleteClick(Sender: TObject); begin buDelete.Click; end;
procedure TfmMain.mInsertClick(Sender: TObject); begin buAdd.Click; end;
procedure TfmMain.mUpdateClick(Sender: TObject); begin buEdit.Click; end;
procedure TfmMain.N1Click(Sender: TObject); begin with dm1 do begin frxReport1.ShowReport(); end; end;
end.
unit DM;
interface
uses SysUtils, Classes, DB, pFIBDataSet, FIBDatabase, pFIBDatabase, FIBDataSet, frxClass, frxDBSet;
type Tdm1 = class(TDataModule) dbShop: TpFIBDatabase; ReadTransaction: TpFIBTransaction; WriteTransaction: TpFIBTransaction; dstAssortiment: TpFIBDataSet; dsAssortiment: TDataSource; dsQuery: TDataSource; dstQuery: TpFIBDataSet; dsIsgotovitel: TDataSource; dstIsgotovitel: TpFIBDataSet; dstAssortimentID_F: TFIBIntegerField; dstAssortimentISDELIE: TFIBStringField; dstAssortimentADRES: TFIBStringField; dstIsgotovitelID_ISG: TFIBIntegerField; dstIsgotovitelNAME: TFIBStringField; dstIsgotovitelRAZMER: TFIBIntegerField; dstIsgotovitelCOST: TFIBFloatField; dstIsgotovitelKOL: TFIBIntegerField; dstIsgotovitelTEDATA: TFIBDateField; dstIsgotovitelID_IS: TFIBIntegerField; dstIsgotovitelISG: TStringField; dsAll: TDataSource; dstAll: TpFIBDataSet; frxReport1: TfrxReport; frxDBDataset1: TfrxDBDataset; private { Private declarations } public { Public declarations } end;
var dm1: Tdm1;
implementation
{$R *.dfm}
end.
unit Zaproci;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, ExtCtrls, DM, StdCtrls;
type TfmZaprosi = class(TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button6: TButton; DBGrid1: TDBGrid; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var fmZaprosi: TfmZaprosi;
implementation
{$R *.dfm} procedure TfmZaprosi.Button1Click(Sender: TObject); begin DBGrid1.Columns[0].Visible:= True; DBGrid1.Columns[1].Visible:= False; DBGrid1.Columns[2].Visible:= False; DBGrid1.Columns[3].Visible:= False; DBGrid1.Columns[4].Visible:= False; with dm1 do begin if dstQuery.Active then dstQuery.Close; dstQuery.SelectSQL.Clear; dstQuery.SelectSQL.Add('SELECT MAX(COST)'); dstQuery.SelectSQL.Add('FROM ISGOTOVITEL'); dstQuery.Open; end; end;
procedure TfmZaprosi.Button2Click(Sender: TObject); begin DBGrid1.Columns[0].Visible:= False; DBGrid1.Columns[1].Visible:= True; DBGrid1.Columns[2].Visible:= False; DBGrid1.Columns[3].Visible:= False; DBGrid1.Columns[4].Visible:= False; with dm1 do begin if dstQuery.Active then dstQuery.Close; dstQuery.SelectSQL.Clear; dstQuery.SelectSQL.Add('SELECT AVG(RAZMER)'); dstQuery.SelectSQL.Add('FROM ISGOTOVITEL'); dstQuery.Open; end; end;
procedure TfmZaprosi.Button3Click(Sender: TObject); begin with dm1 do begin DBGrid1.Columns[0].Visible:= True; DBGrid1.Columns[1].Visible:= False; DBGrid1.Columns[2].Visible:= False; DBGrid1.Columns[3].Visible:= True; DBGrid1.Columns[4].Visible:= False; if dstQuery.Active then dstQuery.Close; dstQuery.SelectSQL.Clear; dstQuery.SelectSQL.Add('SELECT RAZMER, MAX(COST)'); dstQuery.SelectSQL.Add('FROM ISGOTOVITEL'); dstQuery.SelectSQL.Add('GROUP BY RAZMER'); dstQuery.SelectSQL.Add('HAVING (MAX(COST))>1200'); dstQuery.Open; end; end;
procedure TfmZaprosi.Button4Click(Sender: TObject); begin fmZaprosi.Close; end;
procedure TfmZaprosi.Button6Click(Sender: TObject); begin DBGrid1.Columns[0].Visible:= False; DBGrid1.Columns[1].Visible:= False; DBGrid1.Columns[2].Visible:= False; DBGrid1.Columns[3].Visible:= False; DBGrid1.Columns[4].Visible:= True; with dm1 do begin if dstQuery.Active then dstQuery.Close; dstQuery.SelectSQL.Clear; dstQuery.SelectSQL.Add('SELECT COUNT (DISTINCT RAZMER)'); dstQuery.SelectSQL.Add('FROM ISGOTOVITEL'); dstQuery.Open; end; end;
end.
unit AddPrep;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls, ExtCtrls, ComCtrls;
type TfmAddPrep = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label7: TLabel; DBLookupComboBox1: TDBLookupComboBox; Panel1: TPanel; Panel2: TPanel; buOK: TButton; buCancel: TButton; dtpTime: TDateTimePicker; procedure buOKClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end;
var fmAddPrep: TfmAddPrep;
implementation
uses DM;
{$R *.dfm}
procedure TfmAddPrep.buOKClick(Sender: TObject); begin with dm1 do begin //Включаем набор данных в режим добавления записи dstIsgotovitel.Insert; //Заносим введенные значения в набор данных dstPhone dstIsgotovitel.FBN('NAME').AsString:= edit1.Text; dstIsgotovitel.FBN('RAZMER').AsInteger:= StrToInt(edit2.Text); dstIsgotovitel.FBN('COST').AsInteger:= StrToInt(edit3.Text); dstIsgotovitel.FBN('KOL').AsInteger:= StrToInt(edit4.Text); dstIsgotovitel.FBN('TEDATA').AsDateTime:= dtpTime.Date; dstIsgotovitel.FBN('ISG').AsString:= DBLookupComboBox1.KeyValue; end; end;
procedure TfmAddPrep.FormClose(Sender: TObject; var Action: TCloseAction); begin //Удаляем форму из памяти компьютера Action:= caFree; fmAddPrep:= nil; end;
end. unit EditPrep;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls, ExtCtrls, ComCtrls;
type TfmEdPrep = class(TForm) Panel1: TPanel; Label7: TLabel; Label5: TLabel; Label4: TLabel; Label3: TLabel; Label2: TLabel; Label1: TLabel; Edit4: TEdit; Edit3: TEdit; Edit2: TEdit; Edit1: TEdit; DBLookupComboBox1: TDBLookupComboBox; Panel2: TPanel; buOK: TButton; buCancel: TButton; dtpTime: TDateTimePicker; procedure buOKClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end;
var fmEdPrep: TfmEdPrep;
implementation
uses DM;
{$R *.dfm}
procedure TfmEdPrep.buOKClick(Sender: TObject); begin with dm1 do begin //Включаем набор данных в режим добавления записи dstIsgotovitel.Insert; //Заносим введенные значения в набор данных dstPhone dstIsgotovitel.FBN('NAME').AsString:= edit1.Text; dstIsgotovitel.FBN('RAZMER').AsInteger:= StrToInt(edit2.Text); dstIsgotovitel.FBN('COST').AsInteger:= StrToInt(edit3.Text); dstIsgotovitel.FBN('KOL').AsInteger:= StrToInt(edit4.Text); dstIsgotovitel.FBN('TEDATA').AsDateTime:= dtpTime.Date; dstIsgotovitel.FBN('ISG').AsString:= DBLookupComboBox1.KeyValue; end; end;
procedure TfmEdPrep.FormClose(Sender: TObject; var Action: TCloseAction); begin //Удаляем форму из памяти компьютера Action:= caFree; fmEdPrep:= nil; end;
procedure TfmEdPrep.FormShow(Sender: TObject); begin with dm1 do begin edit1.Text:=dstIsgotovitel.FBN('NAME').AsString; edit2.Text:=dstIsgotovitel.FBN('RAZMER').AsString; edit3.Text:=dstIsgotovitel.FBN('COST').AsString; edit4.Text:=dstIsgotovitel.FBN('KOL').AsString; dtpTime.Date:= dstIsgotovitel.FBN('TEDATA').AsDateTime; DBLookupComboBox1.KeyValue:=dstIsgotovitel.FBN('ISG').AsString; end; edit1.SetFocus; end;
end.
ЭКРАННЫЕ ФОРМЫ Приложение Б (обязательное)
Рисунок Б.1 – Главное окно приложения Рисунок Б.2 – Добавление записи в таблицу Isgotovitel
Рисунок Б.3 – Обновление данных в таблице Рисунок Б.4 – Изменение записи Рисунок Б.5 – Удаление выбранной записи Рисунок Б.6 – Подтверждение удаления текущей записи
Рисунок Б.7 – Кнопка добавления записи в таблицу Assortiment
Рисунок Б.8 – Добавление записи в таблицу Assortiment
Рисунок Б.9 – Заполнение полей для добавления новой записи
Рисунок Б.10 – Выбор кнопки «ОК» для подтверждения добавления записи Рисунок Б.11 – Выбор кнопки «Отмена» для отмены добавления записи Рисунок Б.12 – Выделение записи и выбор кнопки «Изменить»
Рисунок Б.13 – Изменение записи
Рисунок Б.14 – Установление курсора в поле с необходимой информации и ее редактирование
Рисунок Б.15 – Выделение записи и выбор кнопки «Удалить» для удаления записи из таблицы
Рисунок Б.16 – Сообщение с подтверждением удаления текущей записи Рисунок Б.17 – Выбор кнопки «Запросы» для выполнения программой запросов
Рисунок Б.18 – Выбор кнопки «Максимальная цена» для осуществления запроса и вывода необходимой информации в таблицу
Рисунок Б.19 - Выбор кнопки «Средний размер» для осуществления запроса и вывода необходимой информации в таблицу
Рисунок Б.20 - Выбор кнопки «Значение размера с максимальной ценой больше 1200» для осуществления запроса и вывода необходимой информации в таблицу Рисунок Б.21 - Выбор кнопки «Количество размеров» для осуществления запроса и вывода необходимой информации в таблицу
Рисунок Б.22 – Вывод в таблицу информацию с максимальной ценой обуви
Рисунок Б.23 – Вывод в таблицу информацию со средним размеров обуви
Рисунок Б.24 – Вывод в таблицу информацию об обуви значения размера с максимальной ценой больше 1200 Рисунок Б.25 – Вывод в таблицу информацию об ассортименте обуви с количеством размеров
Рисунок Б.26 – Выбор кнопки «Выход» для выхода из окна запросов Рисунок Б.27 – Поле для ввода информации, которая должна быть отфильтрована
Рисунок Б.28 – Ввод в поле информацию, по которой нужно найти запись
Рисунок Б.29 – Вывод отфильтрованной информации по введенному значению (товар)
Рисунок Б.30 – Расположение пункта «Файл» на главном меню приложения
Рисунок Б.31 – Расположение пункта «Таблица» на главном меню приложения
Рисунок Б.31 – Расположение пункта «Отчет» на главном меню приложения Рисунок Б.32 – Расположение подпункта «Выйти» для выхода из приложения на главном меню приложения
Рисунок Б.33 – Расположение подпункта «Обновить» для выхода из приложения на главном меню приложения Рисунок Б.34 – Расположение пункта «Таблица» для работы с таблицей из приложения
Рисунок Б.35 – Расположение подпункта «Добавить» для добавления записи в таблицу Рисунок Б.35 – Расположение подпункта «Изменить» для изменения записи в таблице
Рисунок Б.36 – Расположение подпункта «Удалить» для удаления записи в таблице Рисунок Б.37 – Расположение пункта «Отчет» выводы отчета с ассортиментом обуви и ее изготовителях
Рисунок 38 – Вывод отчета об ассортименте обуви и ее изготовителях
Приложение В (рекомендуемое) (SQL-скрипт)
/*********************************************************** Прямое проектирование Plugin: Инструмент генерации ANSI DDL операторов (3.2.0 - 05-12-2009), Grandite
Имя базы данных: "База данных" Source file: "f:\projects2009\shop.sms"
Generated on: 16.11.2014 8:56:00 Generated by Open ModelSphere Версия 3.2" ***********************************************************
*********************************************************** CREATE STATEMENTS ***********************************************************/
--/*********************************************************** -- TABLE 'ASSORTIMENT' --***********************************************************/
CREATE TABLE ASSORTIMENT ( AID INTEGER NOT NULL, NAME VARCHAR(20), RAZMER INTEGER, COST DOUBLE PRECISION, KOL INTEGER, TEDATA DATE, IID INTEGER NOT NULL );
--/*********************************************************** -- TABLE 'IZGOTOVITEL' --***********************************************************/
CREATE TABLE IZGOTOVITEL ( IID INTEGER NOT NULL, NAME VARCHAR(30), ADRES VARCHAR(20) );
--/*********************************************************** -- TABLE 'PRODAJI' --***********************************************************/
CREATE TABLE PRODAJI ( PID INTEGER NOT NULL, PDATA DATE, QTY INTEGER, SID INTEGER NOT NULL );
--/*********************************************************** -- TABLE 'SKLAD' --***********************************************************/
CREATE TABLE SKLAD ( SID INTEGER NOT NULL, QTY INTEGER, SDATA DATE, IID INTEGER NOT NULL, AID INTEGER NOT NULL );
--/*********************************************************** -- PRIMARY/UNIQUE KEY 'PK_ASSORTIMENT' --***********************************************************/
ALTER TABLE ASSORTIMENT ADD CONSTRAINT PK_ASSORTIMENT PRIMARY KEY ( IID, AID); --/*********************************************************** -- PRIMARY/UNIQUE KEY 'PK_IZGOTOVITEL' --***********************************************************/
ALTER TABLE IZGOTOVITEL ADD CONSTRAINT PK_IZGOTOVITEL PRIMARY KEY ( IID); --/*********************************************************** -- PRIMARY/UNIQUE KEY 'PK_PRODAJI' --***********************************************************/
ALTER TABLE PRODAJI ADD CONSTRAINT PK_PRODAJI PRIMARY KEY ( SID, PID); --/*********************************************************** -- PRIMARY/UNIQUE KEY 'PK_SKLAD' --***********************************************************/
ALTER TABLE SKLAD ADD CONSTRAINT PK_SKLAD PRIMARY KEY ( SID); ALTER TABLE ASSORTIMENT ADD CONSTRAINT FK_ASSORTIMENT_1 FOREIGN KEY (IID) REFERENCES IZGOTOVITEL;
ALTER TABLE PRODAJI ADD CONSTRAINT FK_PRODAJI_1 FOREIGN KEY (SID) REFERENCES SKLAD;
ALTER TABLE SKLAD ADD CONSTRAINT FK_SKLAD_1 FOREIGN KEY (IID, AID) REFERENCES ASSORTIMENT;
*******************************************************************/ /*** Generated by IBExpert 2012.12.18.1 01.12.2014 22:11:19 ***/ *******************************************************************/
SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE DATABASE 'SQLEDU03:C:\Users\user\Desktop\5 семестр\БД\ЛР16\SHOP.fdb' USER 'SYSDBA' PASSWORD 'masterkey' PAGE_SIZE 16384 DEFAULT CHARACTER SET WIN1251 COLLATION WIN1251;
*******************************************************************/ /*** Stored Procedures ***/ ********************************************************************/ SET TERM ^;
create or alter procedure UVELICHENIE ( UVEL double precision) as begin update ISGOTOVITEL set COST=COST*(:uvel/100+1); end^
SET TERM; ^
/* Following GRANT statetements are generated automatically */
GRANT SELECT,UPDATE ON ISGOTOVITEL TO PROCEDURE UVELICHENIE;
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE UVELICHENIE TO TEAM009; SET TERM ^;
create or alter procedure VSEGO returns ( OK double precision) as begin select sum(COST) from ISGOTOVITEL into:OK; SUSPEND; end^
SET TERM; ^
/* Following GRANT statetements are generated automatically */
GRANT SELECT ON ISGOTOVITEL TO PROCEDURE VSEGO;
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE VSEGO TO TEAM009; /******************************************************************************/ /*** Generated by IBExpert 24.12.2014 22:13:44 ***/ /******************************************************************************/
/******************************************************************************/ /*** Following SET SQL DIALECT is just for the Database Comparer ***/ /******************************************************************************/ SET SQL DIALECT 3; /******************************************************************************/ /*** Tables ***/ /******************************************************************************/
CREATE GENERATOR GEN1;
CREATE TABLE ASSORTIMENT ( ID_F PERCENT NOT NULL /* PERCENT = INTEGER */, ISDELIE PERSON /* PERSON = VARCHAR(20) */, ADRES ADDRESSES /* ADDRESSES = VARCHAR(30) */ ); /******************************************************************************/ /*** Primary Keys ***/ /******************************************************************************/
ALTER TABLE ASSORTIMENT ADD CONSTRAINT PK_ASSORTIMENT PRIMARY KEY (ID_F);
/******************************************************************************/ /*** Triggers ***/ /******************************************************************************/ SET TERM ^; /******************************************************************************/ /*** Triggers for tables ***/ /******************************************************************************/ /* Trigger: ASSORTIMENT_BI0 */ CREATE OR ALTER TRIGGER ASSORTIMENT_BI0 FOR ASSORTIMENT ACTIVE BEFORE INSERT POSITION 0 AS begin if ((new.id_f is null) or (new.id_f = 0)) then begin new.ID_F = gen_id(gen1, 1); end end ^ SET TERM; ^
/******************************************************************************/ /*** Privileges ***/ /******************************************************************************/
/* Privileges of users */ GRANT ALL ON ASSORTIMENT TO TEAM009 WITH GRANT OPTION; /******************************************************************************/ /*** Generated by IBExpert 24.12.2014 22:14:47 ***/ /******************************************************************************/
/******************************************************************************/ /*** Following SET SQL DIALECT is just for the Database Comparer ***/ /******************************************************************************/ SET SQL DIALECT 3;
/******************************************************************************/ /*** Tables ***/ /******************************************************************************/
CREATE GENERATOR GEN2;
CREATE TABLE ISGOTOVITEL ( ID_ISG PERCENT NOT NULL /* PERCENT = INTEGER */, NAME PERSON /* PERSON = VARCHAR(20) */, RAZMER PERCENT /* PERCENT = INTEGER */, COST MONEY /* MONEY = DOUBLE PRECISION */, KOL PERCENT /* PERCENT = INTEGER */, TEDATA DATES /* DATES = DATE */, ID_IS PERCENT NOT NULL /* PERCENT = INTEGER */ );
/******************************************************************************/ /*** Primary Keys ***/ /******************************************************************************/
ALTER TABLE ISGOTOVITEL ADD CONSTRAINT PK_ISGOTOVITEL PRIMARY KEY (ID_ISG);
/******************************************************************************/ /*** Foreign Keys ***/ /******************************************************************************/ ALTER TABLE ISGOTOVITEL ADD CONSTRAINT FK_ISGOTOVITEL_1 FOREIGN KEY (ID_IS) REFERENCES ASSORTIMENT (ID_F) ON DELETE CASCADE; /******************************************************************************/ /*** Triggers ***/ /******************************************************************************/ SET TERM ^;
/******************************************************************************/ /*** Triggers for tables ***/ /******************************************************************************/ /* Trigger: ISGOTOVITEL_BI0 */ CREATE OR ALTER TRIGGER ISGOTOVITEL_BI0 FOR ISGOTOVITEL ACTIVE BEFORE INSERT POSITION 0 AS begin if ((new.id_isg is null) or (new.id_isg = 0)) then begin new.ID_ISG = gen_id(gen2, 1); end end ^ SET TERM; ^
/******************************************************************************/ /*** Privileges ***/ /******************************************************************************/ /* Privileges of users */ GRANT ALL ON ISGOTOVITEL TO TEAM009 WITH GRANT OPTION;
ТЕКСТ DFM - ФАЙЛОВ Приложение Г (справочное)
ТЕКСТ DMF - ФАЙЛОВ Приложение Г (справочное)
object fmAdd: TfmAdd Left = 0 Top = 0 Caption = #1044#1086#1073#1072#1074#1083#1077#1085#1080#1077' '#1079#1072#1087#1080#1089#1080 ClientHeight = 201 ClientWidth = 447 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnClose = FormClose PixelsPerInch = 96 TextHeight = 13 object Panel1: TPanel Left = 0 Top = 160 Width = 447 Height = 41 Align = alBottom TabOrder = 0 object buOK: TButton Left = 40 Top = 8 Width = 75 Height = 25 Caption = 'OK' Default = True ModalResult = 1 TabOrder = 0 OnClick = buOKClick end object buCancel: TButton Left = 144 Top = 8 Width = 75 Height = 25 Cancel = True Caption = #1054#1090#1084#1077#1085#1080#1090#1100 ModalResult = 2 TabOrder = 1 end end object Panel2: TPanel Left = 0 Top = 0 Width = 447 Height = 160 Align = alClient TabOrder = 1 object Label1: TLabel Left = 56 Top = 35 Width = 32 Height = 13 Caption = #1060#1080#1088#1084#1072 end object Label2: TLabel Left = 56 Top = 73 Width = 31 Height = 13 Caption = #1040#1076#1088#1077#1089 end object Edit1: TEdit Left = 144 Top = 32 Width = 225 Height = 21 TabOrder = 0 end object Edit2: TEdit Left = 144 Top = 70 Width = 225 Height = 21 TabOrder = 1 end end end
object fmAddPrep: TfmAddPrep Left = 0 Top = 0 Caption = 'fmAddPrep' ClientHeight = 392 ClientWidth = 455 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnClose = FormClose PixelsPerInch = 96 TextHeight = 13 object Panel1: TPanel Left = 0 Top = 0 Width = 457 Height = 282 TabOrder = 0 object Label5: TLabel Left = 56 Top = 127 Width = 73 Height = 13 Caption = #1058#1077#1082#1091#1097#1072#1103' '#1076#1072#1090#1072 end object Label4: TLabel Left = 56 Top = 100 Width = 66 Height = 13 Caption = #1050#1086#1083#1083#1080#1095#1077#1089#1090#1074#1086 end object Label3: TLabel Left = 56 Top = 73 Width = 26 Height = 13 Caption = #1062#1077#1085#1072 end object Label2: TLabel Left = 56 Top = 46 Width = 35 Height = 13 Caption = #1056#1072#1079#1084#1077#1088 end object Label1: TLabel Left = 56 Top = 19 Width = 30 Height = 13 Caption = #1058#1086#1074#1072#1088 end object Edit4: TEdit Left = 152 Top = 97 Width = 121 Height = 21 TabOrder = 0 end object Edit3: TEdit Left = 152 Top = 70 Width = 121 Height = 21 TabOrder = 1 end object Edit2: TEdit Left = 152 Top = 43 Width = 121 Height = 21 TabOrder = 2 end object Edit1: TEdit Left = 152 Top = 16 Width = 121 Height = 21 TabOrder = 3 end object dtpTime: TDateTimePicker Left = 152 Top = 124 Width = 186 Height = 21 Date = 41983.953054687500000000 Time = 41983.953054687500000000 TabOrder = 4 end end object Panel2: TPanel Left = 0 Top = 280 Width = 457 Height = 113 TabOrder = 1 object buOK: TButton Left = 56 Top = 38 Width = 75 Height = 25 Caption = 'OK' Default = True ModalResult = 1 TabOrder = 0 OnClick = buOKClick end object buCancel: TButton Left = 240 Top = 40 Width = 75 Height = 25 Cancel = True Caption = #1054#1090#1084#1077#1085#1080#1090#1100 ModalResult = 2 TabOrder = 1 end end end
object dm1: Tdm1 OldCreateOrder = False Height = 345 Width = 372 object dbShop: TpFIBDatabase Connected = True DBName = 'sqledu03:D:\DATA\SHOP.FDB' DBParams.Strings = ( 'user_name=TEAM009' 'password=slave009') DefaultTransaction = ReadTransaction DefaultUpdateTransaction = WriteTransaction SQLDialect = 3 Timeout = 0 LibraryName = 'C:\Program Files (x86)\Firebird\Firebird_2_5\bin\fbclient.dll' WaitForRestoreConnect = 0 Left = 24 Top = 16 end object ReadTransaction: TpFIBTransaction Active = True DefaultDatabase = dbShop TimeoutAction = TARollback Left = 104 Top = 16 end object WriteTransaction: TpFIBTransaction Active = True DefaultDatabase = dbShop
|