Торговая фирма

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ и науки РОССИЙСКОЙ ФЕДЕРАЦИИ

РЫБИНСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

имени П. А. Соловьева

Кафедра МПО ЭВС

Специальность

«Программное обеспечение вычислительной техники и автоматических систем»



КУРСОВАЯ РАБОТА

по курсу: «Базы данных»

Вариант № 2

на тему: «Торговая фирма»

Пояснительная записка



Студент гр. ИВП-09

Кулаевский Д.Ю.

Студент гр. ИВП-09

Лукьянченко А. Ю.

Руководитель

Задорина Н. А.





Рыбинск 2012


Оглавление


Постановка задачи

1. Проектирование базы данных

1.1 Описание предметной области

.2 ER-диаграммы и бизнес правила

.3 Отношения

.4 Ограничения целостности

2. Разработка серверной части

2.1 Создание таблиц

.2 Создание представлений

.3 Создание триггеров

3. Реализация клиентской части

3.1 Разработка спецификаций

.2 Описание интерфейса пользователя

4. Текст основных модулей программы

Заключение

Список используемой литературы


Постановка задачи


Торговая фирма занимается оптовой торговлей. Фирма имеет сеть поставщиков товаров. Поставщики находятся в разных городах. Каждый поставщик специализируется на поставке одного товара, склады фирм позволяют разместить ограниченное количество каждого из товаров.

Товар на фирму может поступать по ее заявкам или по предложению поставщика без предварительного заказа. Отпуск товаров производится по заявкам.

Система должна обеспечивать выполнение следующих операций:

прием предложения поставщика о возможности поставить товар в виде накладной;

прием товара на склад или отказ в приеме;

формирование заказа поставщику на поставку товара;

отпуск товара или отказ;

получение справок о сделанных заказах поставщикам, о предложениях поставщиков, о заявках на отпуск товаров;

получение других справок.


1.Проектирование базы данных


.1 Описание предметной области


В рассматриваемой предметной области можно выделить следующие объекты:

-товары;

-поставщики;

-склады;

-города;

-заявки.

Товары имеют уникальный номер, название и дополнительную информацию.

Поставщики имеют уникальный номер, имя, поставляемый товар и код города в котором живут. Каждый поставщик по условию поставляет лишь один товар.

Склады имеют уникальный номер, код города в котором находятся, адрес и телефон. Адрес и код города должны быть уникальны для идентификации склада.

Города имеют уникальный номер, название и дополнительную информацию.

Заявки имеют код поставщика, которому предназначена или получена заявка, количество запрашиваемого или предлагаемого товара, а также предлагаемую цену на товар.

В процессе проектирования необходимо выделить информационные объекты и связи между ними, соответствующие реальным объектам и бизнес-правилам, действующим в предметной области.

Процесс выделения информационных объектов предметной области, отвечающих требованиям нормализации, может производиться на основе интуитивного или формального подхода. Теоретические основы формального подхода были разработаны и полно изложены в монографиях по организации баз данных известного американского ученого Дж. Мартина. При интуитивном подходе легко могут быть выявлены информационные объекты, соответствующие реальным объектам. Однако, получаемая при этом информационно-логическая модель, как правило, требует дальнейших преобразований, в частности, преобразования много-многозначных (M:N) связей между объектами. При таком подходе возможны существенные ошибки, если отсутствует достаточный опыт. Последующая проверка выполнения требований нормализации обычно приводит к необходимости уточнения информационных объектов.


1.2 ER-диаграммы и бизнес правила


Всего в предметной области можно выделить пять связей:

-поставщик поставляет;

-склад хранит;

-склад находится;

-поставщик живет;

-заявка предлагается.

Каждая из связей связывает две сущности, что можно изобразить с помощью ER-диаграмм.


Рисунок 1 - ER-диаграмма для сущностей Товар - Поставщик


Исходя из ER-диаграммы на рисунке 1 можно выделить следующие бизнес-правила.

1.Каждый поставщик поставляет лишь один товар.

.Один товар могут поставлять много разных поставщиков.

.Товар обязан поставляться хотя бы одним поставщиком.

.Поставщик обязан поставлять товар.


Рисунок 2 - ER-диаграмма для сущностей Товар-Склад


Исходя из ER-диаграммы на рисунке 2 можно выделить следующие бизнес-правила.

.На каждом складе может храниться множество разных товаров.

.Каждый товар может храниться на разных складах.

.Товар может не хранится ни на одном складе.

.Склад может не хранить товаров.


Рисунок 3 - ER-диаграмма для сущностей Склад - Город


Исходя из ER-диаграммы на рисунке 3 можно выделить следующие бизнес-правила.

1.Каждый склад обязательно находится в каком-либо городе

.Склад находится только в одном городе.

.В каждом городе может находиться несколько разных складов.

.В городе может не быть складов.


Рисунок 4 - ER-диаграмма для сущностей Поставщик - Город


Исходя из ER-диаграммы на рисунке 4 можно выделить следующие бизнес-правила.

.Каждый поставщик обязательно живет в каком-либо городе.

.Каждый поставщик живет лишь в одном городе.

.В каждом городе могут жить несколько поставщиков.

.В городе может не жить ни одного поставщика.


Рисунок 5 - ER-диаграмма для сущностей Поставщик - Заявка


Исходя из ER-диаграммы на рисунке 4 можно выделить следующие бизнес-правила.

1.Каждый поставщик может получить/предложить сколь угодно много различных заявок на товар.

.Каждая заявка привязана лишь к одному поставщику.

.Каждая заявка обязана иметь целевого поставщика.

.Поставщик может не иметь заявок.

В общем виде ER-диаграмма продемонстрирована на рисунке 6.


Рисунок 6 - ER-диаграмма в общем виде


1.3 Отношения


Главная цель проектирования базы данных заключается в нормализации предварительных отношений. Выполнение требований нормализации обеспечивает построение реляционной базы данных без дублирования данных и возможность поддержки целостности при внесении изменений. В процессе проектирования к отношениям выдвигают следующие требования:

-информационный объект должен содержать уникальный идентификатор (ключ);

-все описательные реквизиты должны быть взаимонезависимы, т.е. между ними не может быть функциональных зависимостей;

-все реквизиты, входящие в составной ключ, должны быть также взаимонезависимы;

-каждый описательный реквизит должен функционально полно зависеть от ключа, т.е. каждому значению ключа соответствует только одно значение описательного реквизита;

-при составном ключе описательные реквизиты должны зависеть целиком от всей совокупности реквизитов, образующих ключ;

-каждый описательный реквизит не может зависеть от ключа транзитивно, т.е. через другой промежуточный реквизит.

Исходя из анализа описания предметной области, выявленных бизнес-правил, а также правил построения отношений, исходя из ER-диаграмм была получена следующая схема базы данных:

.Товары(код_товара,Наименование,Дополнительная информация)

.Поставщики(код_поставщика,Имя,код_города,код_товара)

.Города(код_города,Имя,Дополнительная информация)

.Склады(код_склада, Адрес, код_города, телефон)

.Хранится(код_товара,код_склада, количество, ограничение)

.Заявки(код_заявки,код_поставщика,количество,цена,статус,флаг)


1.4 Ограничения целостности


При реализации полученной схемы следует учитывать, что предметная область накладывает некоторые ограничения на значения атрибутов. Также следует учитывать, что при реализации на атрибуты будут наложены ограничения, связанные с выбранным типом данных. Таблица 1демонстрирует ограничения целостности и соответствия типов атрибутам отношений.


Таблица 1 - Ограничения

ОтношениеАтрибутОписаниеТип атрибутаОграничениеТоварыКод_товараУникальный номер товара, первичный ключЦелое числоУникальное поле, генерируется автоматическиНаименованиеУникальное наименование товараСтрока (40 символов)Уникальное поле, обязательно для заполненияИнформацияДополнительная информацияСтрока(50 символов) ПоставщикиКод_поставщикаУникальный номер поставщика, первичный ключЦелое числоУникальное поле, генерируется автоматическиИмяУникальное имя поставщикаСтрока (40 символов)Уникальное поле, обязательно для заполненияКод_городаКод города, в котором живет поставщикЦелое числоВнешний ключ, должно существовать в таблице «Города»Код_товараКод товара, который поставляется поставщикомЦелое числоВнешний ключ, должно существовать в таблице «Товары»ГородаКод_городаУникальный номер города, первичный ключЦелое числоУникальное поле, генерируется автоматическиНаименованиеУникальное наименование городаСтрока (40 символов)Уникальное поле, обязательно для заполненияИнформацияДополнительная информацияСтрока(50 символов)СкладыКод_складаУникальный номер склада, первичный ключЦелое числоУникальное поле, генерируется автоматическиАдресАдрес склада в городеСтрока (40 символов)Обязательно для заполненияКод_городаКод города, в котором находится складЦелое числоВнешний ключ, должно существовать в таблице «Города»ТелефонТелефон складаСтрока (40 символов)ЗаявкиКод_заявкиУникальный номер заявки, первичный ключЦелое числоУникальное поле, генерируется автоматическиКод_поставщикаКод поставщика оставившего (которому предназначена) заявкаЦелое числоВнешний ключ, должно существовать в таблице «Поставщики»КоличествоКоличество предложенного товараЦелое числоОбязательно для заполненияЦенаПредложенная ценаЧисло с плавающей точкойОбязательно для заполненияСтатусСтатус заявки может иметь три значения: принята не принята не рассмотренаБайтЗначение по умолчанию «не рассмотрена»ФлагФлаг может принимать два значения: Заявка адресована фирме от поставщика Заявка адресована поставщику от фирмыБайтОбязательно для заполненияХранитсяКод_товараКод хранимого на складе товараЦелое числоВнешний ключ, должно существовать в таблице «Товары»Код_складаКод склада на котором хранится товарЦелое числоВнешний ключ, должно существовать в таблице «Склады»КоличествоКоличество товара, хранящегося на складеЦелое числоЗначение по умолчанию 0, должно быть меньше ограниченияОграничениеМаксимальное количество данного товара на складеЦелое числоОбязательно для заполнения

2.Разработка серверной части

Для создания серверной части базы данных в Interbaseпредполагается использовать интерактивную консоль SQL.Для создания различных структур в базе данных предлагается использовать SQL-запросы к серверу. Особенность интерактивной консоли в том, что она моментально позволяет увидеть результат запроса, что заметно упрощает создание структуры базы данных.


2.1 Создание таблиц


Создание таблицы «Города»


CREATE TABLE "CITIES"

(

"ID"INTEGER NOT NULL,

"NAME"VARCHAR(40) NOT NULL,

"INFORMATION"VARCHAR(40) default '',KEY ("ID"),

UNIQUE ("NAME")

);


Создание таблицы «Товары»


CREATE TABLE "GOODS"

(

"ID"INTEGER NOT NULL,

"NAME"VARCHAR(40) NOT NULL,

"INFORMATION"VARCHAR(40) default '',KEY ("ID"),("NAME")

);


Создание таблицы «Поставщики»


CREATE TABLE "SUPPLIERS"

(

"ID"INTEGER NOT NULL,

"NAME"VARCHAR(40) NOT NULL,

"CITY_ID"INTEGER,

"GOOD_ID"INTEGER,KEY ("ID"),("NAME")

);TABLE "SUPPLIERS" ADD FOREIGN KEY ("CITY_ID") REFERENCES "CITIES" ("ID");TABLE "SUPPLIERS" ADD FOREIGN KEY ("GOOD_ID") REFERENCES "GOODS" ("ID");


Создание таблицы «Склады»


CREATE TABLE "STOREAGE"

(

"ID"INTEGER NOT NULL,

"ADDRES"VARCHAR(50) NOT NULL,

"CITY_ID"INTEGER NOT NULL,

"TELEPHONE"VARCHAR(40) default null,KEY ("ID"),("CITY_ID", "ADDRES")

);TABLE "STOREAGE" ADD FOREIGN KEY ("CITY_ID") REFERENCES "CITIES" ("ID");


Создание таблицы «Заявки»


CREATE TABLE "REQUESTS"

(

"ID"INTEGER NOT NULL,

"SUPP_ID"INTEGER NOT NULL,

"AMOUNT"INTEGER NOT NULL,

"PRICE"FLOAT NOT NULL,

"STATUS"INTEGER default 0,

"FLAG"INTEGER NOT NULL,KEY ("ID")

);TABLE "REQUESTS" ADD FOREIGN KEY ("SUPP_ID") REFERENCES "SUPPLIERS" ("ID");


Создание таблицы «Хранение»


CREATE TABLE "STORAGE"

(

"ID"INTEGER NOT NULL,

"ADDRES"VARCHAR(50) NOT NULL,

"CITY_ID"INTEGER NOT NULL,

"TELEPHONE"VARCHAR(40) default null,KEY ("ID"),("CITY_ID", "ADDRES")

);TABLE "STORAGE" ADD FOREIGN KEY ("CITY_ID") REFERENCES "CITIES" ("ID");


2.2 Создание представлений


Представление на связь «Поставщик - Товар»


CREATE VIEW "SUPP_GOODS" (

"SUPP_NAME",

"GOOD_NAME",

"INFORMATION",

"CITY"

) AS.name,b.name,b.information,c.name from suppliers a,goodsb,cities ca.good_id=b.id and a.city_id=c.id;


Представление на связь «Город - Склад»


CREATE VIEW "STORAGE_WITH_CITY" (

"ADDRESS",

"CITY_NAME",

"TELEPHONE"

) AS.addres,b.name,a.telephone,cities b.id = a.city_id;


2.3 Создание триггеров


Триггеры для таблицы «Товары»

Триггер для генерации первичного ключа


CREATE TRIGGER "GEN_ID_GOODS" FOR "GOODS"BEFORE INSERT POSITION 0(new.id is null)new.id = gen_id(id_good,1);


Триггер для удаления всех поставщиков, поставляющих данных товар


CREATE TRIGGER "DEL_FROM_GOODS" FOR "GOODS"BEFORE DELETE POSITION 0from suppliers where good_id=old.id;

end


Триггеры для таблицы «Поставщики»

Триггер для генерации первичного ключа


CREATE TRIGGER "GEN_ID_SUPP" FOR "SUPPLIERS" BEFORE INSERT POSITION 0(new.id is null)new.id = gen_id(id_supp,1);


Триггер для удаления всех заявок, привязанных к данному поставщику


CREATE TRIGGER "DEL_FROM_SUPP" FOR "SUPPLIERS" BEFORE DELETE POSITION 0from requests where supp_id=old.id;

end


Триггеры для таблицы «Склады»

Триггер для генерации первичного ключа


CREATE TRIGGER "GEN_ID_STOREAGE" FOR "STOREAGE" BEFORE INSERT POSITION 0(new.id is null)new.id = gen_id(id_storeage,1);


Триггер для каскадного удаления всех товаров, хранящихся на складе


CREATE TRIGGER "DEL_FROM_STORAGE" FOR "STORAGE" BEFORE DELETE POSITION 0from store where store_id=old.id;

end


Триггеры для таблицы «Города»

Триггер для генерации первичного ключа


CREATE TRIGGER "GEN_ID_CITY" FOR "CITIES" BEFORE INSERT POSITION 0(new.id is null)new.id = gen_id(id_city,1);


Триггер для удаления всех складов и поставщиков из этого города


CREATE TRIGGER "DEL_FROM_CITIES" FOR "CITIES" BEFORE DELETE POSITION 0from suppliers where city_id=old.id;from storeage where city_id=old.id;

end


Триггеры для таблицы «Заявки»

Триггердлягенерациипервичногоключа


CREATE TRIGGER "GEN_ID_REQUEST" FOR "REQUESTS" BEFORE INSERT POSITION 0 begin(new.id is null)new.id = gen_id(id_request,1);

end


Триггеры для таблицы «Хранение»

Триггернавставкувтаблицу


CREATE TRIGGER "STORE_INS" FOR "STORE" BEFORE INSERT POSITION 0variable my_id integer;variable my_good_id integer;variable amount integer;_id,good_id from store where store_id=new.store_id and good_id=new.good_id into my_id,my_good_id;(:my_id is not null)amount from store where store_id=:my_id and good_id=:my_good_id into :amount;(:amount+new.amount<new.st_size).amount=:amount+new.amount;from store where store_id=new.store_id and good_id=new.good_id;_size;

end


Триггеры для представления «Поставщик - Товар»

Триггер на вставку


CREATE TRIGGER "INS_FOR_VIEW" FOR "SUPP_GOODS" BEFORE INSERT POSITION 0variable my_id integer;variable my_city_id integer;id from goods where new.good_name=name into my_id;(:my_id is null) theninto goods(name,information) values(new.good_name,new.information);id from goods where new.good_name=name into my_id;id from cities where new.city=name into my_city_id;(:my_city_id is null) theninto cities(name) values(new.city);id from cities where new.city=name into my_city_id;

insert into suppliers(name,city_id,good_id) values(new.supp_name,:my_city_id,:my_id);


Триггер на обновление


CREATE TRIGGER "UPD_FOR_VIEW" FOR "SUPP_GOODS" BEFORE UPDATE POSITION 0variable my_id integer;variable my_city_id integer;variable my_supp_id integer;id from cities where name=new.city into my_city_id;(:my_city_id is null) then exception wrong_city;id from goods where name=new.good_name into my_id;(:my_id is null) then exception wrong_good;id from suppliers where name=old.supp_name into my_supp_id;suppliers set name=new.supp_name, good_id=:my_id, city_id=:my_city_id where id=:my_supp_id;


Триггер на удаление


CREATE TRIGGER "DEL_FOR_VIEW" FOR "SUPP_GOODS" BEFORE DELETE POSITION 0variable my_id integer;variable my_s_id integer;from suppliers where old.supp_name=name;id from goods where old.good_name=name into my_id;count(*) from suppliers where good_id=:my_id into my_s_id;(:my_s_id = 0)delete from goods where id=:my_id;

end


Триггеры для представления «Склад - Город»

Триггер на вставку


CREATE TRIGGER "ST_W_C_INS" FOR "STORAGE_WITH_CITY" BEFORE INSERT POSITION 0variable my_id integer;variable my_city_id integer;id from cities where new.city_name = name into :my_city_id;(:my_city_id is null)begininto cities(name) values(new.city_name);id from cities where new.city_name = name into :my_city_id;into storeage(addres,city_id,telephone) values(new.address,:my_city_id,new.telephone);


Триггер на обновление


CREATE TRIGGER "ST_W_C_UPD" FOR "STORAGE_WITH_CITY" BEFORE UPDATE POSITION 0variable my_city_id integer;variable my_id integer;id from cities where name=new.city_name into my_city_id;(:my_city_id is null) then exception wrong_city;id from storeage where addres=old.address and telephone=old.telephone into my_id;set addres=new.address, city_id=:my_city_id, telephone=new.telephone where id=:my_id;


Триггер на удаление


CREATE TRIGGER "ST_W_C_DEL" FOR "STORAGE_WITH_CITY" BEFORE DELETE POSITION 0from storeage where addres=old.address and telephone=old.telephone;

end


3.Реализация клиентской части


3.1 Разработка спецификаций


Как следует из задания, клиентское приложение должно обеспечивать следующие функции:

1.Вести учет товаров, позволять редактировать существующую базу товаров, добавлять новые.

2.Вести учет поставщиков, позволять добавлять новых и менять данные уже существующих поставщиков.

.Предоставлять доступ к базе существующих городов, для размещения складов и добавления новых поставщиков.

.Предоставлять доступ к списку складов, позволять добавлять и редактировать уже существующие.

.Предоставлять удобный интерфейс для работы с товарами на каждом складе, представлять информацию о хранимых товарах в виде графической диаграммы.

.Обеспечивать работу с заявками, позволять добавлять новые заявки, отклонять поступившие, либо принимать с отгрузкой товара на выбранный склад.

.Предоставлять справки


3.2 Описание интерфейса пользователя


Ведение учета товаров реализовано с помощью стандартных компонентов C++ Builder. Для отображения таблиц на экране и работы с ними используются компоненты TDBGridи TDBNavigator. Для доступа к базе данных используются стандартные компоненты TTable, TDataSourceи TDatabase. Внешний вид вкладки для учета товаров показан на рисунке 7.


Рисунок 7 - Интерфейс вкладки "Товары"


Для учета поставщиков было создано представление и реализованы триггеры для основных операций: вставка, обновление и удаление. Это позволило осуществить доступ к базе данных с помощью тех же компонентов, что и в случае со вкладкой «Товары». Также были использованны компоненты TDNLookupComboBox, которые позволяют выбрать существующий город и товар, что позволяет избавить пользователя от необходимости ручного ввода и ошибок связанных с ним. Внешний вид вкладки учета поставщиков показан на рисунке 8.


Рисунок 8 - Интерфейс вкладка "Поставщики"


Для просмотра и редактирования базы городов был разработан интерфейс, показанный на рисунке 9. Реализовано с помощью стандартных компонентов, как в случае с таблицей «Товары».


Рисунок 9 - Интерфейс вкладки "Города"


Для реализации интерфейса работы со списком складов, а также с товарами на складе были применены некоторые дополнительные компоненты C++ Builder, такие как TQueryиTChart.

Доступ к списку складов и товаров на складах осуществляется на одной вкладке. Вывод таблицы «Склады», а также основные функции работы с ней реализованы с помощью стандартных компонентов, как в случае с таблицей «Товары». Для TDBGrid, на котором отображаются склады,был написан обработчик, который при изменении положения курсора в таблице перезагружал соседнюю таблицу со списком товаров, а также перерисовывал диаграмму. Таким образом выбирая склад в таблице «Склады» мы видим актуальные данные по товарам на складе. Также рисуется диаграмма, отображающая отношение количества товаров на складе. Существует возможность добавлять на склад место для хранения, а также удалять его.

Работа с вкладкой товаров, а то есть добавление, удаление и выборка данных реализована с помощью компонента TQuery. Для выборки необходимо знать код_склада из которого мы хотим выбрать товары, поэтому запрос на выборку имеет параметры, позволяющие нам получить лишь нужные товары. локальный сервер интерфейсе программа

Для добавления используется компонент TQueryс 4 параметрами, полученными в диалоговом окне добавления товара на склад.

Внешний вид вкладки учета складов и товаров показан на рисунке 10.



Интерфейс вкладки «Заявки» реализован с помощью собственных SQL-запросов (через компонент TQuery)и обработчиков. Таким образом на вкладке было использовано два компонента ComboBox, позволяющих выбирать тип заявки и ее статус. Обработчики на изменение этих полей перезагружают таблицу заявок, таким образом, мы всегда видим нужные нам заявки. На данной вкладке можно добавить новую заявку для поставщика, а также принять или отклонить пришедшую. В этом случае открывается окно диалога, предлагающее нам выбрать склад, на который будет отгружен товар. Особенность SQL-запроса в том, что выборка из предлагаемых целевых складов содержит лишь те склады, на которых данный товар может храниться, при условии, что на нем хватает места. Таким образом, не может возникнуть ситуации с переполнением склада. Следует также заметить, что свойство Enabledу кнопок взводится лишь тогда, когда мы выбираем тип заявки «Нам» и статус «Не рассмотрена», в других случаях кнопки неактивны, что позволяет избежать ошибок.

Внешний вид вкладки «Заявки» показан на рисунке 11.


Рисунок 11 - Интерфейс вкладки "Заявки"


Также реализовано получение справок, выводимых в MSExcelс помощью кнопки «В Excel»на некоторых вкладках.


4. Текст основных модулей программы


//---------------------------------------------------------------------------

#include<vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form1;TForm1::updateQuery()

{->Params->Items[0]->Value = status;->Params->Items[1]->Value = flag;->Active = false;->Active = true;->Update();

}TForm1::addRequest()

{->Params->Items[0]->Value = supp_name;->Active=false;->Active=true;_id = (Query11->FieldByName("ID"))->AsInteger;->Params->Items[0]->Value = supp_id;->Params->Items[1]->Value = amount;->Params->Items[2]->Value = price;->ExecSQL();->Active = false;->Active = true;->Update();

}

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{= true;= true;= 0;= 1;();

}

//---------------------------------------------------------------------------__fastcall TForm1::DBGrid4CellClick(TColumn *Column)

{(this);

/*Query2->Params->Items[0]->Value = DBGrid4->DataSource->DataSet->FieldValues["ADDRESS"];->Params->Items[1]->Value = DBGrid4->DataSource->DataSet->FieldValues["TELEPHONE"];->Active = false;->Active = true;->Update();->DataSource->DataSet->First();->Clear();= 100;(!DBGrid5->DataSource->DataSet->Eof)

{->Add(DBGrid5->DataSource->DataSet->FieldValues["AMOUNT"],DBGrid5->DataSource->DataSet->FieldValues["NAME"],i);->DataSource->DataSet->Next();+= 100;

}->DataSource->DataSet->First();*/

}

//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)

{

//Table4->Active = false;

//Table4->Active = true;->Show();

}

//---------------------------------------------------------------------------TForm1::addStore()

{->Params->Items[0]->Value = amount;->Params->Items[1]->Value = store_id;->Params->Items[2]->Value = good_id;->ExecSQL();->Params->Items[0]->Value = request_id;->ExecSQL();();

}TForm1::addField()

{amount = Form2->CSpinEdit1->Value;_size = Form2->CSpinEdit2->Value;(st_size>= amount)

{

{_id = Form2->DBGrid2->DataSource->DataSet->FieldValues["ID"];->Params->Items[0]->Value = DBGrid4->DataSource->DataSet->FieldValues["ADDRESS"];->Params->Items[1]->Value = DBGrid4->DataSource->DataSet->FieldValues["TELEPHONE"];->Active=false;->Active=true;_id = (Query4->FieldByName("ID"))->AsInteger;

//intstore_id = 1;->Params->Items[0]->Value = good_id;->Params->Items[1]->Value = store_id;->Params->Items[2]->Value = amount;->Params->Items[3]->Value = st_size;->ExecSQL();

}(...)

{("Неправильныйпараметр");->Show();

}

}

//Query2->Active = false;

//Query2->Active = true;

//DBGrid5->Update();(this);

}__fastcall TForm1::Button2Click(TObject *Sender)

{->Params->Items[0]->Value = DBGrid4->DataSource->DataSet->FieldValues["ADDRESS"];->Params->Items[1]->Value = DBGrid4->DataSource->DataSet->FieldValues["TELEPHONE"];->Active=false;->Active=true;_id = (Query4->FieldByName("ID"))->AsInteger;->Params->Items[0]->Value = DBGrid5->DataSource->DataSet->FieldValues["NAME"];->Active=false;->Active=true;_id = (Query6->FieldByName("ID"))->AsInteger;->Params->Items[0]->Value = store_id;->Params->Items[1]->Value = good_id;->ExecSQL();

//Query2->Active = false;

//Query2->Active = true;

//DBGrid5->Update();(this);

}

//---------------------------------------------------------------------------__fastcall TForm1::ComboBox1Change(TObject *Sender)

{f = false;= 0;(ComboBox1->Text == "Принятые")

{= 1;= true;

}(ComboBox1->Text == "Отклоненные")

{= 2;= true;

}();(f)

{->Enabled=false;->Enabled=false;= false;

}

{= true;(fnam)

{Button3->Enabled=true;->Enabled=true;}

}

}

//---------------------------------------------------------------------------__fastcall TForm1::ComboBox2Change(TObject *Sender)

{f = false;= 0;(ComboBox2->Text == "Нам")

{= 1;= true;

}();(f)

{= true;(fprin)

{Button3->Enabled=true;->Enabled=true;}

}

{= false;->Enabled=false;->Enabled=false;

}

}

//---------------------------------------------------------------------------__fastcall TForm1::Button3Click(TObject *Sender)

{

{->Params->Items[0]->Value = DBGrid6->DataSource->DataSet->FieldValues["NAME"];->Active=false;->Active=true;_name = (Query12->FieldByName("NAME"))->AsString;_id = (Query12->FieldByName("ID"))->AsInteger;= DBGrid6->DataSource->DataSet->FieldValues["AMOUNT"];_id = DBGrid6->DataSource->DataSet->FieldValues["ID"];->Show();

}(...)

{("Ошибка");

}

// Query7->Params->Items[0]->Value = DBGrid6->DataSource->DataSet->FieldValues["ID"];

// Query7->ExecSQL();

// updateQuery();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button4Click(TObject *Sender)

{

{->Params->Items[0]->Value = DBGrid6->DataSource->DataSet->FieldValues["ID"];->ExecSQL();();

}(...)

{("Ошибка");

}

}

//---------------------------------------------------------------------------__fastcall TForm1::Button5Click(TObject *Sender)

{->Show();

}

//---------------------------------------------------------------------------__fastcall TForm1::StoreShow(TObject *Sender)

{->Params->Items[0]->Value = DBGrid4->DataSource->DataSet->FieldValues["ADDRESS"];->Params->Items[1]->Value = DBGrid4->DataSource->DataSet->FieldValues["TELEPHONE"];->Active = false;->Active = true;->Update();->DataSource->DataSet->First();->Clear();= 100;(!DBGrid5->DataSource->DataSet->Eof)

{(DBGrid5->DataSource->DataSet->FieldValues["AMOUNT"] > 0)->Add(DBGrid5->DataSource->DataSet->FieldValues["AMOUNT"],DBGrid5->DataSource->DataSet->FieldValues["NAME"],i);->DataSource->DataSet->Next();+= 100;

}->DataSource->DataSet->First();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button6Click(TObject *Sender)

{->Active = false;->Active = true;->Update();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button7Click(TObject *Sender)

{->Active = false;->Active = true;->Update();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button8Click(TObject *Sender)

{();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button9Click(TObject *Sender)

{XL, XLBooks, RpXL, Sh, Range;, lgRp;= false;

{ //Попыткаоткрытьприложение Excel= Variant::CreateObject("Excel.Application");= XL.OlePropertyGet("WorkBooks");= true;

}(...)

{ //Попытка не удалась>MessageBox("Невозможнооткрыть Microsoft Excel!"

"Возможно, Excel не установлен на компьютере.",

"Ошибка",MB_OK+MB_ICONERROR);

}{.OlePropertyGet("WorkBooks").OleProcedure("add");=XL.OlePropertyGet("WorkSheets",1);

} catch(...) {>MessageBox("Ошибкаоткрытиякниги Microsoft Excel!",

"Ошибка",MB_OK+MB_ICONERROR);

}(Rezult)

{.OlePropertySet("Visible",(Variant)true);{i;(int j=1; j<5; j++)

{->First();=2;(!Table1->Eof){(j==1){cur = Sh.OlePropertyGet("Cells", i, j);s = (Table1->FieldValues["SUPP_NAME"]);.OlePropertySet("Value", s.c_str());++;->Next();

}(j==2){cur = Sh.OlePropertyGet("Cells", i, j);s = (Table1->FieldValues["CITY"]);.OlePropertySet("Value", s.c_str());++;->Next();

}(j==3){cur = Sh.OlePropertyGet("Cells", i, j);s = (Table1->FieldValues["GOOD_NAME"]);.OlePropertySet("Value", s.c_str());++;->Next();

}(j==4){s;cur = Sh.OlePropertyGet("Cells", i, j);(!(Table1->FieldValues["INFORMATION"]).IsNull())= (Table1->FieldValues["INFORMATION"]);= "";.OlePropertySet("Value", s.c_str());++;->Next();

}

}

}cur = Sh.OlePropertyGet("Cells", 1, 1);s = "Поставщик";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 2);= "Город";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 3);= "Товар";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 4);= "Информация";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 5);++;

}//for(j)(...)

{

;

}->First();

}

}

//---------------------------------------------------------------------------__fastcall TForm1::Button10Click(TObject *Sender)

{XL, XLBooks, RpXL, Sh, Range;, lgRp;*my_table = DBGrid4->DataSource->DataSet;= false;

{ //Попыткаоткрытьприложение Excel= Variant::CreateObject("Excel.Application");= XL.OlePropertyGet("WorkBooks");= true;

}(...)

{ //Попытка не удалась>MessageBox("Невозможнооткрыть Microsoft Excel!"

"Возможно, Excel не установлен на компьютере.",

"Ошибка",MB_OK+MB_ICONERROR);

}{.OlePropertyGet("WorkBooks").OleProcedure("add");=XL.OlePropertyGet("WorkSheets",1);

} catch(...) {>MessageBox("Ошибкаоткрытиякниги Microsoft Excel!",

"Ошибка",MB_OK+MB_ICONERROR);

}(Rezult)

{.OlePropertySet("Visible",(Variant)true);{;(int j=1; j<4; j++)

{_table->First();=2;(!my_table->Eof){(j==1){cur = Sh.OlePropertyGet("Cells", i, j);s = (my_table->FieldValues["CITY_NAME"]);.OlePropertySet("Value", s.c_str());++;_table->Next();

}(j==2){cur = Sh.OlePropertyGet("Cells", i, j);s = (my_table->FieldValues["ADDRESS"]);.OlePropertySet("Value", s.c_str());++;_table->Next();

}(j==3){cur = Sh.OlePropertyGet("Cells", i, j);s = (my_table->FieldValues["TELEPHONE"]);.OlePropertySet("Value", s.c_str());++;_table->Next();

}

}

}cur = Sh.OlePropertyGet("Cells", 1, 1);s = "Город";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 2);= "Адрес";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 3);= "Телефон";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 4);++;

}//for(j)(...)

{

;

}_table->First();

}

}

//---------------------------------------------------------------------------__fastcall TForm1::Button11Click(TObject *Sender)

{XL, XLBooks, RpXL, Sh, Range;, lgRp;*my_table = DBGrid6->DataSource->DataSet;= false;

{ //Попыткаоткрытьприложение Excel= Variant::CreateObject("Excel.Application");= XL.OlePropertyGet("WorkBooks");= true;

}(...)

{ //Попытка не удалась>MessageBox("Невозможно открыть MicrosoftExcel!"

"Возможно, Excel не установлен на компьютере.",

"Ошибка",MB_OK+MB_ICONERROR);

}{.OlePropertyGet("WorkBooks").OleProcedure("add");=XL.OlePropertyGet("WorkSheets",1);

} catch(...) {>MessageBox("Ошибкаоткрытиякниги Microsoft Excel!",

"Ошибка",MB_OK+MB_ICONERROR);

}(Rezult)

{.OlePropertySet("Visible",(Variant)true);{;(int j=1; j<4; j++)

{_table->First();=3;(!my_table->Eof){(j==1){cur = Sh.OlePropertyGet("Cells", i, j);s = (my_table->FieldValues["NAME"]);.OlePropertySet("Value", s.c_str());++;_table->Next();

}(j==2){cur = Sh.OlePropertyGet("Cells", i, j);s = (my_table->FieldValues["AMOUNT"]);.OlePropertySet("Value", s.c_str());++;_table->Next();

}(j==3){cur = Sh.OlePropertyGet("Cells", i, j);s = (my_table->FieldValues["PRICE"]);.OlePropertySet("Value", s.c_str());++;_table->Next();

}

}

}cur = Sh.OlePropertyGet("Cells", 2, 1);s = "Поставщик";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 2, 2);= "Количество";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 2, 3);= "Цена";.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 1);= ComboBox1->Text;.OlePropertySet("Value", s.c_str());= Sh.OlePropertyGet("Cells", 1, 2);= ComboBox2->Text;.OlePropertySet("Value", s.c_str());++;

}//for(j)(...)

{

;

}_table->First();

}

}

//---------------------------------------------------------------------------


Заключение


В ходе курсовой работы были закреплены навыки работы с SQL-базами данных, полученные в ходе лабораторных работ. Была проведена установка и настройка локального сервера СУБД Interbase. Были изучены дополнительные материалы и создано приложение «Торговая фирма», состоящее из серверной части и клиентской.

Стандарт SQL был принят в 1986 году Международной организацией по стандартизации <#"center">Список используемой литературы


1К. Дж. Дейт. Введение в системы баз данных - IntroductiontoDatabaseSystems. - 8-е изд. - М.: «Вильямс», 2006 г.

2А. Я. Скляр. Введение в interbase, 2006 г.

3В. Г. Шаров. Курс лекций «Базы данных».


МИНИСТЕРСТВО ОБРАЗОВАНИЯ и науки РОССИЙСКОЙ ФЕДЕРАЦИИ РЫБИНСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени П. А. Соловьева Кафедра МПО ЭВ

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ