Средства и порядок испытаний
Во время испытания приложения «SHOP» необходимо использовать персональный компьютер с установленной операционной системой Windows XP и выше. К тому же на компьютере должны быть установлены Delphi 2009, Firebird 2.5, IBExpert.
Для проверки правильности работы системы был принят следующий порядок действий:
а) запустить программу на выполнение;
б) провести тестирование программы по тестам;
в) сравнить реакции программы с ожидаемым результатом;
г) сделать выводы по результатам тестирования о работоспособности программы.
7.6 Методы испытаний
Для проверки правильности работы программы были разработаны тестовые примеры.
Тестовый пример 1. Проверка функции учет информации о производителях.
При запуске приложения на экране появится главное окно приложения (Рисунок Б.1). Таблица изготовителя будет уже заполнена данными об изготовителе. Чтобы заполнить таблицу изготовителя, необходимо заполнить все соответствующие поля, для этого щелкнуть по кнопке «Добавить». Откроется новое окно приложения, в которое нужно будет ввести необходимые данные и нажать кнопку «ОК» (Рисунок Б.2). Чтобы обновить данные в таблице, следует нажать кнопку «Обновить», в результате чего информация в таблице изготовителя будет обновлена (Рисунок Б.3). Для изменения какой – либо записи таблицы, требуется нажать на кнопку «Изменить» и внести необходимые изменения записи, после чего нажать «ОК» (Рисунок Б.4). Записи из таблицы можно также и удалять. Для этого требуется выделить необходимую запись и нажать на кнопку «Удалить». После этого откроется окно с предупреждением, нужно ли удалять данную запись или нет (Рисунок Б.5). Требуется сделать выбор, нажав на кнопку «Да» или «Нет» (Рисунок Б.6).
Тестовый пример 2. Чтобы начать работу с таблицей ассортимент, требуется использовать кнопки «Добавить», «Изменить», «Удалить», «Запросы», а также использовать поле «Фильтр» для фильтрации информации в таблице. Для добавления записи в таблицу требуется использовать кнопку «Добавить» (Рисунок Б.7). При нажатии на эту кнопку осуществляется добавление записи в таблицу ассортимента (Рисунок Б.8). После открытия формы для добавления новой записи, требуется заполнить соответствующие пустые поля «Товар», «Размер», «Цена», «Количество», поле «Текущая дата» заполняется автоматически датой на настоящее время, но если требуется, то можно выбрать другую дату (Рисунок Б.9). После чего, необходимо нажать на кнопку «ОК» (Рисунок Б.10), либо «Отмена» (Рисунок Б.11).
Чтобы изменить какую – то запись в таблице, в начале нужно ее выделить и нажать кнопку «Изменить» (Рисунок Б.12). В результате чего откроется окно изменения записи (Рисунок Б.13). Чтобы внести изменения нужно установить курсор в соответствующее поле и отредактировать информацию (Рисунок Б.14). Далее нажать кнопку «ОК» для подтверждения или «Отменить» для выхода из окна изменений записи.
Чтобы удалить какую – то запись из таблицы, следует выделить ее, после чего нажать кнопку «Удалить» (Рисунок Б.15). Программа выдаст окно с подтверждением, нужно ли удалять текущую запись или нет (Рисунок Б.16). Сделать выбор при помощи кнопки «Да», для того, чтобы запись была удалена, либо кнопки «Нет» для отмены удаления записи из таблицы.
Для выполнения запросов, требуется нажать на кнопку «Запросы» (Рисунок Б.16). Приложение выдаст форму с таблицей и кнопками «Максимальная цена» (Рисунок Б.17), «Средний размер» (Рисунок Б.18), «Значение размера с максимальной ценой больше 1200» (Рисунок Б.19), «Количество размеров» (Рисунок Б.19). Для того, чтобы в таблице отобразилась информация с максимальной ценой обуви, требуется нажать кнопку «Максимальная цена» (Рисунок Б.17), результат будет отображен в таблице (Рисунок Б.20). Для отображения информации обуви среднего размера, нажать кнопку «Средний размер» (Рисунок Б.18). В таблице будет отображен результат данного запроса (Рисунок Б.21). Чтобы приложение вывело в таблицу информацию о том, каково значение размера с максимальной ценой больше 1200, нажать кнопку «Значение размера с максимальной ценой больше 1200» (Рисунок Б.19). В таблице будет выведен результат данного запроса (Рисунок Б.22). Если пользователю необходима информация о количестве размеров обуви, ему необходимо нажать кнопку «Количество размеров» (Рисунок Б.19). После чего приложение выдаст результат данного запроса, который будет выведен в таблице (Рисунок Б.23).
Чтобы выйти завершить работу с запросами, необходимо нажать кнопку «Выход» (Рисунок Б.24).
При работе с таблицей ассортимента товара обуви можно также еще и произвести фильтрацию всей информации таблицы. Для этого в пустое поле ввода информации для фильтрации (Рисунок Б.25) ввести ту информацию, которая должна быть найдена (Рисунок Б.26). После чего поставить галочку рядом со словом «Фильтр» (Рисунок Б.27). Приложение выведет найденную запись с введенной в поле фильтрации информацию (Рисунок Б.28).
На форме «Учет о сведениях работы обувного магазина» приложения SHOP существует главное меню, которое состоит из трех пунктов: Файл (Рисунок Б.29), Таблица (Рисунок Б.30), Отчет (Рисунок Б.31). После нажатия на кнопку главного меню «Файл» будет виден выпадающий список с выбором «Выйти» (Рисунок Б.31) для выхода из приложения и «Обновить» (Рисунок Б.32) для обновления информации в таблице изготовитель. После нажатия на кнопку главного меню «Таблица» (Рисунок Б.30) откроется выпадающий список с выбором действий «Добавить» (Рисунок Б.33) для добавления записи в таблицу, «Изменить» (Рисунок Б.34) для изменения записи в таблице, «Удалить» для удаления какой – либо записи из таблицы. На главной форме приложения в главном меню представлена также кнопка «Отчет (Рисунок Б.35). Это пункт нужен для отображения отчета на экран об ассортименте обуви и ее изготовителе (Рисунок Б.36).
8.2 Условия применения
Приложение предназначено для работы на персональных компьютерах стандартной комплектации с операционной системой Windows XP и выше.
Приложение работает как на локальном компьютере, так и в сети. Для работы на сервере на нем установлены СУБД Firebird 2.5 и файл с БД, а на рабочей станции – приложение для работы с БД. Для работы на локальном компьютере на нем установлены СУБД Firebird, приложение для работы с БД, файл с БД.
Описание задачи
8.1 Назначение программы
Разрабатываемое приложение предназначено для учета поставок обуви в обувной магазин. Система должна хранить, добавлять, изменять и удалять информацию об изготовителях обуви и ее ассортименте.
Разрабатываемое приложение предназначено для учета поставок обуви в обувной магазин. Система должна хранить, добавлять, изменять и удалять информацию об изготовителях обуви и ее ассортименте. Система должна поддерживать следующие функции:
- учет данных об изготовителях;
- учет данных об ассортименте;
- осуществлять запросы к базе данных;
- формировать отчетные документы об ассортименте обуви и ее производителях.
8.2 Условия применения
Приложение предназначено для работы на персональных компьютерах стандартной комплектации с операционной системой Windows XP и выше.
Приложение работает как на локальном компьютере, так и в сети. Для работы на сервере на нем установлены СУБД Firebird 2.5 и файл с БД, а на рабочей станции – приложение для работы с БД. Для работы на локальном компьютере на нем установлены СУБД Firebird, приложение для работы с БД, файл с БД. Программа должна быть совместима с операционной системой Windows XP/7/8.
Описание задачи
Разрабатываемое приложение предназначено для учета поставок медикаментов. Система должна хранить, добавлять, изменять и удалять информацию об ассортименте обуви: ее наименовании, размере, цене и количестве, а также об изготовителе: названии фирмы и ее адресе. Система должна поддерживать следующие функции:
- отображать информацию об ассортименте имеющейся обуви - идентификатор ассортимента, наименование обуви, размер, цену, количество, текущую дату;
- отображать информацию об изготовителе обуви - идентификатор изготовителя, название фирмы, ее адрес;
- формировать сведения об ассортименте обуви;
- формировать сведения об изготовителе обуви;
- осуществлять запросы к базе данных;
- формировать отчетные документы.
Тестовый пример 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 - ФАЙЛОВ
Приложение Г
(справочное)
*** Файл базы данных: ***
D:\DATA\ЛР16\SHOP.FDB
*** Файл архива: ***
D:\DATA\ЛР16\архивирование\SHOP-arh.FDB
================== Начало архивирования ==================
gbak:readied database D:\DATA\ЛР16\SHOP.FDB for backup
gbak:creating file D:\DATA\ЛР16\архивирование\SHOP-arh.FDB
gbak:starting transaction
gbak:database D:\DATA\ЛР16\SHOP.FDB has a page size of 16384 bytes.
gbak:writing domains
gbak: writing domain MONEY
gbak: writing domain PERSON
gbak: writing domain PERCENT
gbak: writing domain BIRTHDAY
gbak: writing domain TELEFON
gbak: writing domain GENDER
gbak: writing domain DATES
gbak: writing domain ADRESSES
gbak: writing domain TELEPHONE
gbak: writing domain ADDRESSES
gbak: writing domain RDB$22
gbak: writing domain RDB$27
gbak:writing shadow files
gbak:writing character sets
gbak:writing collations
gbak:writing functions
gbak:writing tables
gbak: writing table ISGOTOVITEL
gbak: writing column COST
gbak: writing column ID_IS
gbak: writing column ID_ISG
gbak: writing column RAZMER
gbak: writing column KOL
gbak: writing column TEDATA
gbak: writing column NAME
gbak: writing table ASSORTIMENT
gbak: writing column ADRES
gbak: writing column ID_F
gbak: writing column ISDELIE
gbak:writing types
gbak:writing filters
gbak:writing id generators
gbak: writing generator GEN1 value 8
gbak: writing generator GEN2 value 21
gbak:writing stored procedures
gbak:writing stored procedure VSEGO
gbak:writing parameter OK for stored procedure
gbak:writing stored procedure UVELICHENIE
gbak:writing parameter UVEL for stored procedure
gbak:writing exceptions
gbak:writing exception ASSORTIMENTY
gbak:writing exception RAZMERY
gbak: writing index PK_ASSORTIMENT
gbak: writing data for table ASSORTIMENT
gbak:8 records written
gbak: writing index PK_ISGOTOVITEL
gbak: writing index FK_ISGOTOVITEL_1
gbak: writing data for table ISGOTOVITEL
gbak:7 records written
gbak:writing triggers
gbak: writing trigger CHECK_2
gbak: writing trigger ASSORTIMENT_BI0
gbak: writing trigger ISGOTOVITEL_BI0
gbak:writing trigger messages
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user PUBLIC
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user PUBLIC
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user PUBLIC
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak: writing privilege for user TEAM009
gbak:writing table constraints
gbak:writing constraint PK_ISGOTOVITEL
gbak:writing constraint INTEG_26
gbak:writing constraint FK_ISGOTOVITEL_1
gbak:writing constraint PK_ASSORTIMENT
gbak:writing referential constraints
gbak:writing check constraints
gbak:writing SQL roles
gbak:writing names mapping
gbak:closing file, committing, and finishing. 6144 bytes written
================== Конец архивирования ==================