"Phone" - контактирующий телефон (char 15);
"E_mail" - адрес электронной почты (char 20);
Таблица "Productions" будет иметь следующие атрибуты:
1 "Production_name" - является уникальным названием продукции, выступающим в роли первичного ключа таблицы (char 10);
2 "Price_for_one" - цена за единицу (int);
3 "Num_in_depository" - количество единиц данной продукции на складе (int);
И соответственно в таблицу "Sale" необходимо поместить следующие атрибуты:
"nakladnaya" - является уникальным номером накладной, выступающим в роли первичного ключа таблицы (int);
"Organization_name" - название организации (char 20);
"Production_name" - наименование продукции (char 10);
"Number" - количество проданной продукции (int)
"Date" - дата продажи (datetime)
"Payment" - вид оплаты (char 20)
Поступающая от менеджера (пользователя) информация будет вноситься в основные таблицы базы данных ("Organizations", "Productions", "Sale").
Существующие связи между этими таблицами служат для обеспечения целостности данных. Наглядно связь между таблицами изображена на рисунке 1.
Рисунок 1 - Связь между таблицами БД "Отдел сбыта"
Вид связи между таблицами "один-ко-многим". Связующими полями являются поле "Organization_name" таблицы "Organizations" с полем "Organization_name" таблицы "Sale", и аналогично поле "Production_name" таблицы "Productions" с полем "Production_name" таблицы "Sale".
Концептуальное моделирование - это переход от неформализованного описания предметной области к ее формальному изложению с помощью специальных языковых средств. В приложении А представлена концептуальная модель данной базы данных "Отдел сбыта".
Запрос 1 - Выводит организации с общим видом деятельности, указанным пользователем
select *
from Organizations
where Activity=activ,
где activ - указанный вид деятельности организации
Запрос 2 - Выводит список продукций с ценой за единицу большей указанной цены:
select *
from Productions
where Price_for_one>=price
order by Production_name,
где price - указанная цена продукции за еденицу
Запрос 3 - Выводит список указанной пользователем продукции, которая имеет заявки на продажу превышающие указанного количества единиц:
select *
from Sale
where Production_name=prod and number>=col,
где prod - указанная продукция, а col - указанное количество единиц продукции
Запрос 4 - Выводит количество проданной продукции
select Sum (number) as Number_saled
from Sale
where Productio_ name] =prod,
где prod - указанная продукция
Запрос 5 - Выводит список организаций с указанного города с указанным общим видом деятельности:
select *
from Organizations
where Address=town and Activity=active,
где town - указанный город, active - вид деятельности организации
Запрос 6 - Выводит все информацию о проданной продукции за раз превышающей указанного количества единиц продукции:
select *
from Sale
where number>=col
где col - количество единиц продукции
Запрос 7 -Выводит информацию о максимальном количестве продукции, проданной за 1 заявку:
select Production_name, MAX (number) as МАХ
from Sale
group by Production_name
Запрос 8 - Выводит список организаций и наименования продукции с наибольшими партиями закупок:
select distinct Organization_name, Production_name, MAX (number) as МАХ
from Sale
group by Production_name,Organization_name
При запуске приложения открывается главное окно программы с активной вкладкой "Организации" (рисунок 3). Оно содержит главное меню и четыре вкладки: "Организации", "Продукция", "Продажа" и "Запросы". Каждая вкладка имеет соответствующую названию вкладки таблицу и компонент манипулирования этой таблицей. Для необходимо можно выделить нужную организацию (признаком выделенности является черный треугольник напротив организации, на рисунке выделенным организацией является "Building").
Рисунок 3 - Главное окно программы
При нажатии на вкладке "Продукция" появится таблица со списком продукций и соответствующей им информацией. Аналогично, если щелкнуть по вкладке "Продажа" - перед пользователем появится таблица с информацией о продажах.
Рисунок 4 - Окно программы со списком запросов
Четвертая вкладка содержит список запросов (Рисунок 4). Здесь пользователь может выбрать из списка один из предложенных запросов, либо в списке запросов выбрать "создать запрос…", либо в меню Action выбрать Make query. В результате появится диалоговое окно (Рисунок 5), где можно ввести нужные критерии запроса и нажать "ОК". Результат запросов отображается в таблице на вкладке "Запросы".
Рисунок 5 - Окно создания запроса
В меню Action есть команда Show report, после нажатия которой появится окно отчета по запросу (Рисунок 6). Отчет будет содержать информацию запроса, который выбран в списке запросов. Команда Show report доступна не всегда. Отчет предоставляется лишь следующим запросам:
список организаций (указать вид деятельности)
список организаций (указать город и вид деятельности)
максимальные заявки на продукцию
организации с макс числом куп продукции
Рисунок 6 - Окно отчета
Для получения справки об использовании программы пользователю необходимо в меню About выбрать Program…. Появится окно справки программы (Рисунок 7).
Рисунок 7 - Окно справки программы
Результатом данного курсового проекта является разработанная база данных "Отдел сбыта", которая включает в себя основную необходимую информацию об организациях, продукции и продажах. Эта информация была упорядочена в таблицы. Система выполняет следующие функции: хранение, добавление, удаление и изменение данных.
Разработанная база данных проста и легка в использовании. Ее применение позволит уменьшить бумажной волокиты и сократит время сотрудников завода, работающих в отделе сбыта продукции.
Клиент-серверная технология SQL позволит организовать централизованное хранение информации и возможность обращения к ней физически удаленных сотрудников.
1. Мартин Груббер, "Понимание SQL", Москва, 2003 г
2. Т. Карпова - Базы данных: модели, разработка, реализация. Питер, 2001
3. Курс лекций по разработке баз данных, Терлецкая А.М., 2007 г
Приложение А Концептуальная модель данных
Приложение Б. Листинг программного кода
Unit1
procedure TForm1. TabControl1Change (Sender: TObject);
begin
case Tabcontrol1. TabIndex of
0: // управление вкладками
begin
DBGrid1. Visible: =true;
DBNavigator1. Visible: =true;
DBGrid2. Visible: =false;
DBNavigator2. Visible: =false;
DBGrid3. Visible: =false;
DBNavigator3. Visible: =false;
DBGrid4. Visible: =false;
ComboBox1. Visible: =false;
end;
1:
begin
DBGrid1. Visible: =false;
DBNavigator1. Visible: =false;
DBGrid2. Visible: =true;
DBNavigator2. Visible: =true;
DBGrid3. Visible: =false;
DBNavigator3. Visible: =false;
DBGrid4. Visible: =false;
ComboBox1. Visible: =false;
end;
2:
begin
DBGrid1. Visible: =false;
DBNavigator1. Visible: =false;
DBGrid2. Visible: =false;
DBNavigator2. Visible: =false;
DBGrid3. Visible: =true;
DBNavigator3. Visible: =true;
DBGrid4. Visible: =false;
ComboBox1. Visible: =false;
end;
3:
begin
DBGrid1. Visible: =false;
DBNavigator1. Visible: =false;
DBGrid2. Visible: =false;
DBNavigator2. Visible: =false;
DBGrid3. Visible: =false;
DBNavigator3. Visible: =false;
DBGrid4. Visible: =true;
ComboBox1. Visible: =true;
end;
end;
end;
procedure TForm1. Exit1Click (Sender: TObject);
begin
Close; закрытие программы
end;
procedure TForm1.comboBox1Change (Sender: TObject);
var
town: string;
prod: string;
price: string;
aktiv: string;
begin
case ComboBox1. ItemIndex of
0: // первый запрос
begin
ADOQuery1. Active: = false;
aktiv: =InputBox ('Введите','Вид деятельности предприятия',aktiv);
aktiv: =Edit1. Text+aktiv+Edit1. Text;
if aktiv<>'' then
ADOQuery1. SQL. Text: = 'select * from Organizations where Activity='+aktiv;
ADOQuery1. Active: = true;
// ------------------report----------------------------------------------
N2. Enabled: =true;
Form3. QRLabel2. Caption: ='Организации';
Form3. QRLabel4. Caption: ='Адрес';
Form3. QRLabel5. Caption: ='Деятельность';
Form3. QRLabel6. Caption: ='Телефон';
Form3. QRLabel7. Caption: ='E-mail';
end;
1: // второй запрос
begin
ADOQuery1. Active: = false;
price: =InputBox ('Введите','Цена за единицу продукции',price);
if (price<>'') or (StrToInt (price) >=1000) then
ADOQuery1. SQL. Text: = 'select * from Productions where Price_for_one>='+price+' order by Production_name';
ADOQuery1. Active: = true;
N2. Enabled: =false;
end;
2: // третий запрос
begin
ADOQuery1. Active: = false;
prod: =InputBox ('Введите','Наименование продукции',prod);
prod: =Edit1. Text+prod+Edit1. Text;
if prod<>'' then
aktiv: =InputBox ('Введите','Количество проданной продукции',aktiv);
if (aktiv<>'') or (StrToInt (aktiv) >0) then
ADOQuery1. SQL. Text: = 'select * from Sale where Production_name='+prod+' and number>='+aktiv;
ADOQuery1. Active: = true;
N2. Enabled: =false;
end;
3: // четвертый запрос
begin
ADOQuery1. Active: = false;
prod: =InputBox ('Введите','Наименование продукции',prod);
prod: =Edit1. Text+prod+Edit1. Text;
if prod<>'' then
ADOQuery1. SQL. Text: = 'select Production_name, Sum (number) as Number_saled from Sale where Production_name='+prod+' group by Production_name';
ADOQuery1. Active: = true;
N2. Enabled: =false;
end;
4: // пятый запрос
begin
ADOQuery1. Active: = false;
town: =InputBox ('Введите','Название города',town);
town: =Edit1. Text+town+Edit1. Text;
if town<>'' then
aktiv: =InputBox ('Введите','Вид деятельности предприятия',aktiv);
aktiv: =Edit1. Text+aktiv+Edit1. Text;
if aktiv<>'' then