48674

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

Курсовая

Информатика, кибернетика и программирование

Структура проектируемой базы данных. Создание базы данных программными средствами. Создание базы данных Создание модуля данных

Русский

2013-12-13

501 KB

3 чел.

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

Курсовая работа по дисциплине

ВЫСОКОУРОВНЕВЫЕ МЕТОДЫ ИНФОРМАТИКИ

И ПРОГРАММИРОВАНИЯ

на тему: «Определение стоимости поставок товара на склад»

Выполнил студент 3 курса

Кондаков Сергей Сергеевич

Шифр 0515-п/ЭИ-1132

Москва, 2008

Содержание

[0.1] ВЫСОКОУРОВНЕВЫЕ МЕТОДЫ ИНФОРМАТИКИ

[0.2] И ПРОГРАММИРОВАНИЯ

[1] Содержание

[2] 1. Экономико-организационная постановка задачи.

[3] 2. Структура проектируемой базы данных.

[4] 3. Описание технических и программных средств

[5] 4. Архитектура проекта

[5.1] 4.1. Основные понятия и принципы системы Delphi 7.

[5.1.1] 4.1.1 Среда Delphi 7 и ее составляющие.

[5.1.2] 4.1.2. Компонентный подход.

[6] 4.2 Описание модулей проекта

[7] 5.1. Создание базы данных программными средствами.

[7.1] 5.1.1. Создание базы данных

[7.2] 5.1.2. Программа SQL Explorer

[7.3] 5.1.3. Программа Database Desktop

[8] 5.2. Создание программы в системе Delphi 7

[8.1] 5.2.1 Создание модуля данных

[8.2] 5.2.2 Создание SQL-запросов к базе данных

[8.3] 5.2.3. Создание основного модуля

[8.4] 5.2.4. Создание модуля редактирования таблиц

[8.5] 5.2.5. Создание модуля стоимости поставок и предварительного просмотра

[9] 6.1. Листинг текста программы и формы модулей

[10] 6.2. Результат работы программы

[11] Используемая литература

1. Экономико-организационная постановка задачи.

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

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

2. Структура проектируемой базы данных.

База данных задачи представляет собой четыре входных таблицы, связанных между собой по внешним ключам (табл. 1-4). Структура и описание таблиц базы данных представлены ниже (рис. 1).

Таблица 1. Postavka

Имя поля

Тип данных

Длина поля

Примечание

Tip

N

1-приход, 0-расход

Ntovar

N

Код товара

Kol

N

Количество товара

Nfirm

N

Код фирмы

Dat

D

8

Дата поставки/отправки

Таблица 2. Reestr

Имя поля

Тип данных

Длина поля

Примечание

Nfirm

N

Код фирмы

Ntovar

N

Код товара

Opt

N

Оптовая цена за ед. измерения

Rozn

N

Розничная цена за ед. измерения

Таблица 3. Tovar

Имя поля

Тип данных

Длина поля

Примечание

Ntovar

N

Код товара

Tovar

A

15

Наименование товара

Таблица 4. Firma

Имя поля

Тип данных

Длина поля

Примечание

Nfirm

N

Код фирмы

Firma

A

8

Наименование фирмы

Adres

A

12

Адрес фирмы

В таблице Postavka храниться информация о факте поставки/отправки товара. Таблица Reestr содержит информацию об оптовой и розничной цене товаров поступающих от различных фирм. Списки всех товаров и фирм хранятся соответственно в таблицах Tovar и Firma. Ключевые поля таблиц выделены в схеме данных жирным цветом.

Tovar

Postavka

Reestr

Firma

Рис. 1 Схема данных

Результативная информация представляет собой таблицу – StPost (таб. 5), получаемую в результате SQL-запроса к входным таблицам. В таблице содержится информация о стоимости поставок товаров за 1-й квартал 2008 года.

Таблица 5. StPost

Имя поля

Тип данных

Длина поля

Примечание

Tovar

A

15

Наименование товара

Firma

A

8

Наименование фирмы поставщика

Dat

D

8

Дата поставки

Summa

N

Стоимость товара

3. Описание технических и программных средств

В качестве программной среды разработки выбрана объектно-ориентированная среда Delphi 7. Таблицы базы данных хранятся в формате Paradox, доступ к которым осуществляется с использованием технологии BDE.

Минимальные системные требования для компьютера, на котором может быть решена задача:

- Операционная система Windows 98, 2000, XP;

- Процессор с частотой 166 МГц, 32 разрядный, x86-совместимый;

- Оперативная память объемом 128 Мб;

- VGA – совместимый монитор;

- Мышь или другое указывающее устройство.

4. Архитектура проекта

4.1. Основные понятия и принципы системы Delphi 7.

4.1.1 Среда Delphi 7 и ее составляющие.

Среда Delphi 7 представляет собой интегрированную оболочку разработчика, в которую входи набор специальных программ, ответственных за разные этапы создания готового приложения (рис. 2).

Исходный текст программы готовиться в среде Delphi 7 с помощью встроенного редактора исходных текстов. Этот редактор специализирован. Он отличается гибкими возможностями цветового выделения различных элементов текста программы (ключевых слов, названий, операций, чисел и строк) и предоставляет возможность быстрого ввода часто встречающихся конструкций.

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

Важнейшая характеристика разрабатываемой программы – удобство ее пользовательского интерфейса, наличие и доступность необходимых элементов управления. В среде Delphi 7 имеется специальный проектировщик форм, с помощью которого окна бедующей программы подготавливаются в виде форм. Проектировщик позволяет подобрать оптимальные размеры окон, разместить и настроить всевозможные элементы управления и меню, добавить готовые изображения, указать заголовки, подсказки, подписи и так далее.

Рис. 2. Основные окна системы Delphi 7

4.1.2. Компонентный подход.

На этапе проектирования форм программа как бы составляется из готовых компонентов – частей машинного кода, которые можно добавлять к ней с помощью всего нескольких щелчков мыши. Компоненты располагаются на палитре компонентов, разделенной на несколько самостоятельных панелей (рис. 3).

Рис. 3. Палитра компонентов

Компоненты обладают наборами свойств, характеризующими их отличительные особенности. Некоторые свойства имеются практически у всех компонентов – таково например свойство Name (Имя). Другие свойства, например Caption (Заголовок) имеются у большинства компонентов – ведь заголовок необходим и для окна, и для кнопки. Некоторые свойства уникальны для конкретных компонентов, например SimpleText (Простой текст), содержащее текст для компонента Строка состояния.

Свойства компонентов в процессе проектирования форм настраиваются с помощью Инспектора объектов. Это специальная программа, показывающая список всех свойств данного компонента, отсортированных по категориям или в алфавитном порядке.

Значение любого свойства можно изменить, введя в соответствующее поле Инспектора объектов новую строку или выбрав нужное значение в раскрывающемся списке доступных значений. Некоторые свойства содержат вложенные подсвойства, например свойство Font (Шрифт) характеризуется размером, стилем, цветом, гарнитурой. Такие свойства удобнее редактировать с помощью специальных редакторов, как стандартных (шрифт), так и специально разработанных для конкретного компонента.

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

Правильно подбирая компоненты и настраивая их совместную работу путем использования свойств, предназначенных для связи компонентов друг с другом, нередко удается создать приложение, не написав вручную ни сточки исходного текста. В системе Delphi 7 существуют сотни готовых компонентов, и при решении многих задач бывает полезно предварительно поискать нужный компонент (например, в Интернете) вместо того, чтобы выполнить работу по программированию, возможно, уже сделанную другими людьми. Компонентный подход к созданию программ позволяет повторно использовать готовые разработки и во многих случаях значительно повышает эффективность труда.

Потребность в ручном программировании возникает, только когда обойтись готовыми компонентами не удается. В вышеприведенном примере поля ввода А1, А2 и поле для вывода итогового результата А3 можно представить в виде стандартных компонентов Delphi 7, но чтобы сложение введенных чисел, необходим соответствующий оператор в тексте программы, срабатывающий, например, по щелчку на компоненте-кнопке.

4.2 Описание модулей проекта

Проект составлен из шести модулей и форм.

1. Основной модуль

Основной модуль реализует возможность просмотра и редактирования таблицы Postavka. На форме основного модуля (рис. 4) находится компонент, позволяющий отображать и редактировать таблицу – DBGrid1 (TDBGrid) и компонент для редактирования – DBNavigator1 (TDBNavigator). В верхней части формы находиться главное меню, компонент MainMenu1 (TMainMenu).

Рис. 4. Форма основного модуля

Главное меню формы содержит следующие пункты:

Файл->Выход – выход из программы;

Таблицы->Реестр – открытие формы для просмотра таблицы Reestr;

Таблицы->Товары – открытие формы для просмотра таблицы Tovar;

Таблицы->Фирмы – открытие формы для просмотра таблицы Firm;

Отчет->Поставка товаров – открытие формы для просмотра и вывода на печать результирующей таблицы StPost.

2. Модуль данных

Рис. 5. Модуль данных

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

Database (TDatabase) – реализует доступ к файлам базы данных через метку в системе BDE;

tFirm, tPostavka, tReestr, tTovar (TTable) – компоненты для доступа к таблицам базы данных: Firm, Postavka, Reestr, Tovar.

qStPost, qSumPost (TQuery) – компоненты формирующие запрос к базе данных для результирующего отчета.

dsFirma, dsPostavka, dsReestr, dsTovar, dsStPost, dsSumPost (TDataSource) – реализуют интерфейс источника данных, необходимый для связи визуальных компонентов позволяющих отображать и редактировать таблицы базы данных с компонентами доступа к базе данных - TTable.

3. Модуль редактирования таблиц

Модуль редактирования таблиц реализует возможность просмотра и редактирования таблиц Firma, Tovar и Reestr. На форме модуля редактирования таблиц (рис. 6) находится компонент, позволяющий отображать и редактировать таблицы – dbgTable (TDBGrid) и компонент для редактирования – dbnTable (TDBNavigator). Кнопка ОК – компонент Button1 (TButton), позволяет закрыть форму модуля редактирования таблиц.

Рис. 6. Форма модуля редактирования таблиц

4. Модуль стоимости поставок

Модуль стоимости поставок (Рис. 7) реализует возможность просмотра результирующей таблицы StPost.

Рис. 7. Модуль стоимости поставок

На форме модуля стоимости поставок (рис. 7) находится компонент, позволяющий отображать результирующую таблицу – DBGrid1 (TDBGrid) и компонент для перемещения по таблице – DBNavigator1 (TDBNavigator). Кнопка ОК – компонент Button1 (TButton), позволяет закрыть форму модуля стоимости поставок. При щелчке на Печать – компонент Button2 (TButton), открывается форма модуля предварительного просмотра. В компоненте DBText1 (TDBText) выводятся результаты запроса компонента qSumPost в модуле данных.

5. Модуль предварительного просмотра

На форме модуля предварительного просмотра (рис. 8) находятся компоненты реализующие возможность предварительного просмотра результирующей таблицы StPost:

qrPreview (TQuickRep) – виртуальный образ бумажного листа, который в дальнейшем воспроизводится на принтере.

QRLabel1 – QRLabel6 – предназначен для создания в отчете всевозможных текстовых подписей. Компонент QRLabel1 отображает заголовок печатного листа. QRLabel2 – QRLabel5 отображают заголовки столбцов результирующей таблицы. QRLabel6 выводит на печать надпись «Итого:».

qrdbTovar, qrdbFirma, qrdbDat, qrdbSumma – выводят на печать занчения полей результирующей таблицы.

qreSumma – выводят на печать результат запроса компонента qSumPost, сумма поставок товаров за 1-й квартал 2008-го года.

QRBand1 – QRBand4 – реализуют группировку в отчете элементов оформления.

Рис. 8. Форма модуля предварительного просмотра

5. Алгоритм и технология решения задачи

5.1. Создание базы данных программными средствами.

5.1.1. Создание базы данных

В качестве базы данных используем локальную базу данных в Paradox. Для создания базы данных воспользуемся программами SQL Explorer и Database Desktop.

5.1.2. Программа SQL Explorer

Создадим на локальном диске папку, где будет располагаться наша база. Зададим метку базы (Alias). Для этого войдем в меню Database системы Delphi 7 и выберем пункт Explor.

В запущенной программе SQL Explorer выберем пункт меню Object->New и выберем тип базы данных STANDART. На вкладке Databases в дереве меток появится новая метка STANDART1. Зададим её новое имя в SKLAD. В окне свойств метки (рис. 9), в свойстве PATH зададим путь к созданной папке базы. Для сохранения метки выберем пункт меню Object->Apply и в появившемся диалоговом окне нажмем кнопку OK.

Рис. 9. Программа SQL Explorer

5.1.3. Программа Database Desktop

После создания метки базы данных можно с помощью программы Database Desktop описать таблицы базы данных. Для запуска программы в меню системы Delphi 7 выберем пункт Tools->Database Desktop.

В меню File программы Desktop выберем опцию Working Directoryабочая директория) и назначим ей путь к папке базы. Зададим метку нашей базы – Aliases: SKLAD и нажмем кнопку OK. В меню File выберем пункт New->Table. В появившемся диалоговом окне выберем тип базы данных Paradox 7 и нажмем кнопку OK. В появившемся диалоговом окне опишем таблицу Tovar согласно проекту. Пометим ключевое поле Ntovar звездочкой в столбце Key. После описания структуры таблицы сохраним её, нажав кнопку «Save As» и задав имя таблицы Tovar. Таким же образом создадим таблицы Firma, Postavka и Reestr.

Далее необходимо занести данные, в каждую таблицу выбрав пункт меню File->Open->Table. В открытой таблице необходимо включить режим редактирования, выбрав в меню Table опцию Edit Data. После занесения данных таблицу необходимо закрыть пунктом меню File->Close. Ниже приведены таблицы с данными, которые необходимо занести в базу данных.

Таблица 6. Postavka

№ п/п

Ntovar

Tip

Kol

Nfirm

Dat

1

10

1

100,00

1

01.01.08

2

11

0

212,00

2

05.01.08

3

12

1

178,00

1

12.01.08

4

13

0

213,00

3

23.01.08

5

14

0

145,00

2

30.01.08

6

15

1

189,00

1

02.02.08

7

16

0

165,00

2

07.02.08

8

17

0

231,00

4

11.02.08

9

18

1

432,00

3

15.03.08

10

19

1

256,00

2

23.03.08

11

20

1

300,00

4

19.02.08

12

21

1

232,00

5

21.02.08

13

22

1

144,00

6

23.02.08

Таблица 7. Reestr

№ п/п

Nfirm

Ntovar

Opt

Rozn

1

1

10

120,00

140,00

2

2

11

128,00

136,00

3

1

12

100,00

123,00

4

3

13

98,00

104,00

5

2

14

120,00

130,00

6

1

15

200,00

240,00

7

2

16

220,00

250,00

8

4

17

180,00

210,00

9

3

18

90,00

100,00

10

2

19

160,00

180,00

11

4

20

222,00

233,00

12

5

21

333,00

344,00

13

6

22

444,00

455,00

Таблица 8. Firma

№ п/п

Nfirm

Firma

Adres

1

1

VENUS

Moskva

2

2

ALFA

Minsk

3

3

COBRA

Moskva

4

4

BARRO

Riga

5

5

CODAK

Rgev

6

6

DELTA

Kiev

7

7

GAMMA

Moskva

8

8

BETA

Kiev

9

9

ARGO

Riga

10

10

BRIGET

Minsk

Таблица 9. Tovar

№ п/п

Ntovar

Name

1

10

brus1

2

11

brus2

3

12

doska1

4

13

brus3

5

14

doska2

6

15

vagonka1

7

16

vagonka2

8

17

vagonka4

9

18

doska3

10

19

rama2

11

20

okno1

12

21

okno2

13

22

okno3

5.2. Создание программы в системе Delphi 7

5.2.1 Создание модуля данных

Для создания модуля данных выберем пункт меню File->New->Data Module. Зададим имя модуля данных (свойство Name) – DataUnit.

В палитре компонентов перейдем на закладку BDE и поместим на форму модуля данных компонент TDatabase, зададим ему значения свойств как в таблице 10.

Таблица 10. Компонент TDatabase

Свойства компонента

Присваиваемое значение

AliasName

SKLAD

Connected

True

DatabaseName

SKLAD

Name

Database

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

Таблица 11. Компонент TTable

Имя компонента

Свойство компонента

Присваимое значение

tFirma

Active

True

DatabaseName

SKLAD

TableName

Firma.DB

tPostavka

Active

True

DatabaseName

SKLAD

TableName

Postavka.DB

tReestr

Active

True

DatabaseName

SKLAD

TableName

Reestr.DB

tTovar

Active

True

DatabaseName

SKLAD

TableName

Tovar.DB

Для реализации запроса к базе, поместим на форму модуля данных два компонента TQuery. Зададим им следующие имена: qStPost, qSumPost. Установим свойство DatabaseName этих компонент значением SKLAD.

Для связи визуальных компонент с таблицами базы и компонентами формирующими запросы необходимо реализовать интерфейс источника данных, поместив на форму модуля данных 6 компонентов типа TDataSource. Зададим имена и значения свойства DataSet в соответствии с таблицей 12.

Таблица 12. Компонент TDataSource

Имя компонента

Значение свойства DataSet

dsFirma

tFirma

dsPostavka

tPostavka

dsReestr

tReestr

dsTovar

tTovar

dsStPost

qStPost

dsSumPost

qSumPost

5.2.2 Создание SQL-запросов к базе данных

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

Одним из языков, появившихся в результате разработки реляционной модели данных, является язык SQL (Structured Query Language), который в настоящее время получил очень широкое распространение и фактически превратился в стандартный язык реляционных баз данных. Стандарт на язык SQL был выпущен Американским национальным институтом стандартов (ANSI) в 1986 г., а в 1987 г. Международная организация стандартов (ISO) приняла его в качестве международного. Нынешний стандарт SQL известен под названием SQL/92.

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

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

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

Все языки манипулирования данными, созданные для многих СУБД до появления реляционных баз данных, были ориентированы на операции с данными, представленными в виде логических записей файлов. Разумеется, это требовало от пользователя детального знания организации хранения данных и серьезных усилий для указания того, какие данные необходимы, где они размещаются и как их получить.

Язык SQL ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц-отношений. Важнейшая особенность его структур – ориентация на конечный результат обработки данных, а не на процедуру этой обработки. Язык SQL сам определяет, где находятся данные, индексы и даже какие наиболее эффективные последовательности операций следует использовать для получения результата, а потому указывать эти детали в запросе к базе данных не требуется.

Для получения результирующей таблицы StPost на основе входных, создадим запрос к базе данных, для этого выберем свойство SQL компонента qStPost и введем следующий текст:

SELECT Tovar.Tovar, Firma.Firma, Postavka.Dat, Postavka.Kol * Reestr.Opt AS Summa

FROM "Firma.DB" Firma

  INNER JOIN "Postavka.DB" Postavka

  ON  (Firma.Nfirm = Postavka.Nfirm)  

  INNER JOIN "Tovar.DB" Tovar

  ON  (Tovar.Ntovar = Postavka.Ntovar)  

  INNER JOIN "Reestr.DB" Reestr

  ON  (Reestr.Ntovar = Postavka.Ntovar)  

  AND  (Reestr.Nfirm = Postavka.Nfirm)  

WHERE   (Postavka.Tip = 1)  

  AND  (Postavka.Dat >= '01/01/2008')  

  AND  (Postavka.Dat < '04/01/2008')

После внесения текста запроса установим свойство Active компонента qStPost значение True.

В компонент qSumPost внесем текст запроса необходимый для вычисления общей суммы поставки товаров за 1-й квартал 2008-го года:

SELECT SUM(  Postavka.Kol * Reestr.Opt  ) Summa

FROM "Reestr.DB" Reestr

  INNER JOIN "Postavka.DB" Postavka

  ON  (Reestr.Ntovar = Postavka.Ntovar)  

  AND  (Reestr.Nfirm = Postavka.Nfirm)  

WHERE   (Postavka.Dat >= '01/01/2008')  

  AND  (Postavka.Dat < '04/01/2008')  

  AND  (Postavka.Tip = 1)

5.2.3. Создание основного модуля

Форма основного модуля по умолчанию создается вместе с проектом. Поместим на него компоненты, необходимые для отображения и редактирования таблицы Postavka: TDBGrid, TDBNavigator,- и настроим их в окне инспектора объектов согласно приведенной ниже таблице.

Талица 13.

Имя и класс компонента

Свойство компонента

Присваиваемое значение

DBGrid1: TDBGrid

DataSource

DataUnit.dsPostavka

DBNavigator1: TDBNavigator

DataSource

DataUnit.dsPostavka

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

В редакторе меню создадим пункт Файл->Выход и введем в обработчик событий текст, закрывающий программу, при выборе пункта меню:

procedure TfmPostavka.N2Click(Sender: TObject);

begin

 if CloseQuery then Application.Terminate;

end;

Для отображения формы редактирования таблиц создадим пункты меню: Таблицы->Реестр, Таблицы->Поставка и Таблицы->Товары,- и для каждого из них зададим обработчик настраивающий форму на соответствующую таблицы:

procedure TfmPostavka.N4Click(Sender: TObject);

begin

 fmEditTable.Caption := 'Таблица Tovar';

 fmEditTable.dbgTable.DataSource := DataUnit.dsTovar;

 fmEditTable.dbnTable.DataSource := DataUnit.dsTovar;

 fmEditTable.ShowModal;

end;

procedure TfmPostavka.N5Click(Sender: TObject);

begin

 fmEditTable.Caption := 'Таблица Firma';

 fmEditTable.dbgTable.DataSource := DataUnit.dsFirma;

 fmEditTable.dbnTable.DataSource := DataUnit.dsFirma;

 fmEditTable.ShowModal;

end;

procedure TfmPostavka.N8Click(Sender: TObject);

begin

 fmEditTable.Caption := 'Таблица Reestr';

 fmEditTable.dbgTable.DataSource := DataUnit.dsReestr;

 fmEditTable.dbnTable.DataSource := DataUnit.dsReestr;

 fmEditTable.ShowModal;

end;

5.2.4. Создание модуля редактирования таблиц

Для просмотра и редактирования таблиц Tovar, Firma, Reestr создадим форму редактирования таблиц выбрав пункт меню: File->New->Form. Зададим имя формы fmEditTable и поместим на форму компоненты для доступа к таблицам базы данных: dbgTable (TDBGrig) и dbnTable (TDBNavigator).

Установим в правом нижнем углу кнопку Button1 (TButton)  с заголовком OK и свойством ModalResultmrOK. При щелчке на кнопке будет происходить закрытие формы редактирования таблиц.

5.2.5. Создание модуля стоимости поставок и предварительного просмотра

Выберем пункт меню File->New->Form и зададим имя новой формы fmStForm. Создадим в форме основного модуля пункт меню Отчеты->Поставка товаров и зададим обработчик для открытия созданной формы:

procedure TfmPostavka.N10Click(Sender: TObject);

begin

 fmStForm.ShowModal;

end;

На форму поместим компоненты указанные в таблице 14 и зададим им соответствующие свойства.

Таблица 14.

Имя и класс компонента

Свойство компонента

Присваиваемое значение

DBGrid1: TDBGrid

DataSource

DataUnit.dsStPost

DBNavigator1: TDBNavigator

DataSource

DataUnit.dsStPost

Label1: TLabel

Caption

Итого:

DBText1: TDBText

DataField

Summa

DataSource

DataUnit.dsSumPost

Button1: TButton

Caption

OK

ModalResult

mrOK

Button2: TButton

Caption

Печать

Для кнопки Печать зададим обработчик вызывающий форму предварительного просмотра:

procedure TfmStForm.Button2Click(Sender: TObject);

begin

 fmPreviewReport.qrPreview.Preview;

end;

Для размещения  компонентов необходимых для предварительного просмотра печатного листа создадим новую форму и разместим на ней компонент генератра отчетов TQuickRep и настроим его, задав имя qrPreview и установив свойство  DataSet значением DataUnit.qStPost. Настроим свойство Font на русский язык, нажав TFont и выбрав кириллицу и нужный размер шрифта.

Перейдем на форму  разместим на ней компонент TQRBand (в виде полосы) из вкладки QReport. Настроим его задав тип полосы в свойстве BandTitle: rbTitle (заголовок) и настроив свойтво Font на русский язык как написано выше. Щелкнем мышью на полосе заголовка и разместим на ней компонент метки (TQRLabel) и зададим ему заголовок «Поставка товаров» через свойства Caption и Font.

Щелкнем мышью под полосой заголовка в области отчета и поместим там еще один компонент TQRBand, которому определим свойство BandType: rbColumnHeader (заголовок столбцов). Поместим на этой полосе метки заголовков столбцов (TQRLabel) и дадим им имена аналогично настройке метки заголовка отчета.

Опять щелкнем ниже этой полосы в области отчета и поместим там еще один компонент TQRBand со свойством BandType: rbDetail (это полоса строки таблицы). На этой полосе разместим компоненты QRDBText по числу выводимых полей и настроим в каждом компоненте свойства: источник данных DataSet: DataUnit. qStPost, имя поля DataField (для каждого компонента свое имя) и Font с кириллицей.

Щелкнем опять в области отчета и разместим последнюю полосу TQRBand со свойством BandType: rbSummary для печати итогов. На этой полосе разместим компонент метки (TQRLabel) с заголовком «Итого:» и еще один компонент TQRExpr со свойством агрегатной функции Expression: Sum(DataUnit.qStPost.Summa).

6. Результаты проекта

6.1. Листинг текста программы и формы модулей

Модуль проекта программы

program KURS;

uses

 Forms,

 fmMain in 'fmMain.pas' {fmPostavka},

 duMain in 'duMain.pas' {DataUnit: TDataModule},

 fmTable in 'fmTable.pas' {fmEditTable},

 fmAbout in 'fmAbout.pas' {fmAboutProg},

 fmPreview in 'fmPreview.pas' {fmPreviewReport},

 fmStPost in 'fmStPost.pas' {fmStForm};

{$R *.res}

begin

 Application.Initialize;

 Application.CreateForm(TfmPostavka, fmPostavka);

 Application.CreateForm(TDataUnit, DataUnit);

 Application.CreateForm(TfmEditTable, fmEditTable);

 Application.CreateForm(TfmAboutProg, fmAboutProg);

 Application.CreateForm(TfmPreviewReport, fmPreviewReport);

 Application.CreateForm(TfmStForm, fmStForm);

 Application.Run;

end.

Основной модуль

unit fmMain;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Grids, DBGrids, Menus, ExtCtrls, DBCtrls;

type

 TfmPostavka = class(TForm)

   DBGrid1: TDBGrid;

   DBNavigator1: TDBNavigator;

   MainMenu1: TMainMenu;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   N5: TMenuItem;

   N6: TMenuItem;

   N7: TMenuItem;

   N8: TMenuItem;

   N9: TMenuItem;

   N10: TMenuItem;

   procedure N2Click(Sender: TObject);

   procedure N4Click(Sender: TObject);

   procedure N5Click(Sender: TObject);

   procedure N7Click(Sender: TObject);

   procedure N8Click(Sender: TObject);

   procedure N10Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 fmPostavka: TfmPostavka;

implementation

uses duMain, fmTable, fmAbout, fmStPost;

{$R *.dfm}

procedure TfmPostavka.N2Click(Sender: TObject);

begin

 if CloseQuery then Application.Terminate;

end;

procedure TfmPostavka.N4Click(Sender: TObject);

begin

 fmEditTable.Caption := 'Таблица Tovar';

 fmEditTable.dbgTable.DataSource := DataUnit.dsTovar;

 fmEditTable.dbnTable.DataSource := DataUnit.dsTovar;

 fmEditTable.ShowModal;

end;

procedure TfmPostavka.N5Click(Sender: TObject);

begin

 fmEditTable.Caption := 'Таблица Firma';

 fmEditTable.dbgTable.DataSource := DataUnit.dsFirma;

 fmEditTable.dbnTable.DataSource := DataUnit.dsFirma;

 fmEditTable.ShowModal;

end;

procedure TfmPostavka.N7Click(Sender: TObject);

begin

 fmAboutProg.ShowModal();

end;

procedure TfmPostavka.N8Click(Sender: TObject);

begin

 fmEditTable.Caption := 'Таблица Reestr';

 fmEditTable.dbgTable.DataSource := DataUnit.dsReestr;

 fmEditTable.dbnTable.DataSource := DataUnit.dsReestr;

 fmEditTable.ShowModal;

end;

procedure TfmPostavka.N10Click(Sender: TObject);

begin

 fmStForm.ShowModal;

end;

end.

Рис 10. Форма основного модуля

Модуль редактирования таблиц

unit fmTable;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids;

type

 TfmEditTable = class(TForm)

   dbgTable: TDBGrid;

   dbnTable: TDBNavigator;

   Button1: TButton;

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 fmEditTable: TfmEditTable;

implementation

uses duMain;

{$R *.dfm}

end.

Рис 11. Таблица Reestr

Рис 12. Таблица Tovar

Рис 13. Таблица Firma

Модуль стоимости поставок

unit fmStPost;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls;

type

 TfmStForm = class(TForm)

   DBGrid1: TDBGrid;

   DBNavigator1: TDBNavigator;

   Label1: TLabel;

   Button1: TButton;

   DBText1: TDBText;

   Button2: TButton;

   procedure Button2Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 fmStForm: TfmStForm;

implementation

uses duMain, fmPreview;

{$R *.dfm}

procedure TfmStForm.Button2Click(Sender: TObject);

begin

 fmPreviewReport.qrPreview.Preview;

end;

end.

Рис 14. Форма модуля стоимости поставок

Модуль предварительного просмотра

unit fmPreview;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ExtCtrls, QuickRpt, QRCtrls, DB, DBTables;

type

 TfmPreviewReport = class(TForm)

   qrPreview: TQuickRep;

   QRBand1: TQRBand;

   QRLabel1: TQRLabel;

   QRBand2: TQRBand;

   QRLabel2: TQRLabel;

   QRLabel3: TQRLabel;

   QRLabel4: TQRLabel;

   QRLabel5: TQRLabel;

   QRBand3: TQRBand;

   qrdbTovar: TQRDBText;

   qrdbFirma: TQRDBText;

   qrdbData: TQRDBText;

   qrdbSumma: TQRDBText;

   QRBand4: TQRBand;

   QRLabel6: TQRLabel;

   qreSumma: TQRExpr;

   qStPost: TQuery;

   qStPostTovar: TStringField;

   qStPostFirma: TStringField;

   qStPostDat: TDateField;

   qStPostSumma: TFloatField;

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 fmPreviewReport: TfmPreviewReport;

implementation

uses duMain;

{$R *.dfm}

end.

Модуль данных

unit duMain;

interface

uses

 SysUtils, Classes, DB, DBTables, DBClient;

type

 TDataUnit = class(TDataModule)

   Database: TDatabase;

   tFirma: TTable;

   tPostavka: TTable;

   tReestr: TTable;

   tTovar: TTable;

   dsFirma: TDataSource;

   dsPostavka: TDataSource;

   dsReestr: TDataSource;

   dsTovar: TDataSource;

   tFirmaNfirm: TIntegerField;

   tFirmaFirma: TStringField;

   tFirmaAdres: TStringField;

   tPostavkaTip: TIntegerField;

   tPostavkaNtovar: TIntegerField;

   tPostavkaKol: TFloatField;

   tPostavkaNfirm: TIntegerField;

   tPostavkaDat: TDateField;

   tReestrNfirm: TIntegerField;

   tReestrNtovar: TIntegerField;

   tReestrOpt: TFloatField;

   tReestrRozn: TFloatField;

   tTovarNtovar: TIntegerField;

   tTovarTovar: TStringField;

   qStPost: TQuery;

   qStPostTovar: TStringField;

   qStPostFirma: TStringField;

   qStPostDat: TDateField;

   qStPostSumma: TFloatField;

   dsStPost: TDataSource;

   qSumPost: TQuery;

   qSumPostSumma: TFloatField;

   dsSumPost: TDataSource;

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 DataUnit: TDataUnit;

implementation

{$R *.dfm}

end.

6.2. Результат работы программы

Рис 15. Форма модуля предварительного просмотра

Используемая литература

  1.  Бобровский С. Delphi 5: учебный курс. – СПб.: Питер, 2002.
  2.  Полякова Л. Н. Основы SQL: Курс лекций. Учебное пособие. – М.: ИНТУИТ.РУ, Интернет-Университет Информационных Технологий, 2004.
  3.  Сорокин А. В. Delphi. Разработка баз данных.- СПб.: Питер, 2005.
  4.  Фаронов В. В., Шумаков П. В. Delphi 5 Руководство разработчика баз данных. – М.: «Нолидж», 2000.
  5.  Борисенко В. В. Основы программирования. Учебное пособие. – М.: ИНТУИТ.РУ, Интернет-Университет Информационных Технологий, 2005 г.
  6.  Кузнецов С. Д. Основы баз данных. Учебное пособие. – М.: ИНТУИТ.РУ, Интернет-Университет Информационных Технологий, 2005 г.
  7.  Советов Б. Я. Базы данных: теория и практика: Учебник для вузов / Б. Я. Советов, В. В. Цехановский, В. Д. Чертовский. – М.: Высш. шк., 2005.


 

А также другие работы, которые могут Вас заинтересовать

81483. Синтез желчных кислот из холестерина. Конъюгация желчных кислот, первичные и вторичные желчные кислоты. Выведение желчных кислот и холестерина из организма 104.99 KB
  Конъюгация желчных кислот первичные и вторичные желчные кислоты. Выведение желчных кислот и холестерина из организма. Жёлчные кислоты синтезируются в печени из холестерола.
81484. ЛПНП и ЛПВП - транспортные, формы холестерина в крови, роль в обмене холестерина. Гиперхолестеринемия. Биохимические основы развития атеросклероза 110.43 KB
  Содержание холестерола и его эфиров в ЛППП достигает 45; часть этих липопротеинов захватывается клетками печени через рецепторы ЛПНП которые взаимодействуют и с апоЕ и с апоВ100. Транспорт холестерола в составе ЛПНП. Рецепторы ЛПНП. На ЛППП оставшиеся в крови продолжает действовать ЛПлипаза и они превращаются в ЛПНП содержащие до 55 холестерола и его эфиров.
81485. Механизм возникновения желчнокаменной болезни (холестериновые камни). Применение хенодезокеихолевой кислоты для лечения желчнокаменной болезни 103 KB
  Выделение холестерола в жёлчь должно сопровождаться пропорциональным выделением жёлчных кислот и фосфолипидов удерживающих гидрофобные молекулы холестерола в жёлчи в мицеллярном состоянии У большинства больных желчнокаменной болезнью активность ГМГКоАредуктазы повышена следовательно увеличен синтез холестерола а активность 7αгидроксилазы участвующей в синтезе жёлчных кислот снижена. В результате синтез холестерола увеличен а синтез жёлчных кислот из него замедлен что приводит к диспропорции количества холестерола и жёлчных кислот...
81486. Общая схема источников и путей расходования аминокислот в тканях. Динамическое состояние белков в организме 134.22 KB
  Значение аминокислот для организма в первую очередь определяется тем что они используются для синтеза белков метаболизм которых занимает особое место в процессах обмена веществ между организмом и внешней средой. Аминокислоты непосредственно участвуют в биосинтезе не только белков но и большого количества других биологически активных соединений регулирующих процессы обмена веществ в организме таких как нейромедиаторы и гормоны производные аминокислот. Аминокислоты служат донорами азота при синтезе всех азотсодержащих небелковых...
81487. Переваривание белков. Протеиназы - пепсин, трипсин, химотрипсин; проферменты протеиназ и механизмы их превращения в ферменты. Субстратная специфичность протеиназ. Экзопептидазы и эндопептидазы 110.2 KB
  Подавляющее их количество входит в состав белков которые гидролизуются в ЖКТ под действием ферментов протеаз пептидщцролаз. Под действием всех протеаз ЖКТ белки пищи распадаются на отдельные аминокислоты которые затем поступают в клетки тканей. Источником Н является Н2СО3 которая образуется в обкладочных клетках желудка из СО2 диффундирующего из крови и Н2О под действием фермента карбоангидразы карбонатдегидратазы: Н2О СО2 → Н2СО3 → НСО3 H Диссоциация Н2СО3 приводит к образованию бикарбоната который с участием специальных...
81488. Диагностическое значение биохимического анализа желудочного и дуоденального сока. Дать краткую характеристику состава этих соков 109.1 KB
  Анализ желудочного сока является очень важным методом исследования больных с заболеваниями желудка кишечника печени желчного пузыря крови и пр Составная часть Единицы СИ Азот: небелковый 143 343 ммоль л мочевины и аммиака 499 999 ммоль л аминокислот 143 57 ммоль л Хлориды 1551 ммоль л Свободная хлористоводородная кислота 20 ммоль л Мочевая кислота 476 1189 мкмоль л Калий 56 353 мэкв л ммоль л Натрий 313 1893 мэкв л ммоль л Общая кислотность 4060 ммоль л Свободная соляная кислота 2040 ммоль л Связанная соляная кислота...
81489. Протеиназы поджелудочной железы и панкреатиты. Применение ингибиторов протеиназ для лечения панкреатитов 115.09 KB
  Протеолитические ферменты трипсин химотрипсин эластаза карбоксипептидазы А и В выделяются панкреацитами в неактивном состоянии что предотвращает самопереваривание клеток. Трипсин. Трипсиноген и трипсин получены в кристаллическом виде полностью расшифрована их первичная структура и известен молекулярный механизм превращения профермента в активный фермент. В опытах in vitro превращение трипсиногена в трипсинкатализируют не только энтеропептидаза и сам трипсин но и другие протеиназы и ионы Са2.
81490. Трансаминирование: аминотрансферазы; коферментная функция витамина В6. Специфичность аминотрансфераз 144.39 KB
  Из реакции переноса NH2 наиболее важны реакции трансаминирования . 346 относится к альдиминам или шиффовым основаниям во время реакции аминокислота 1 вытесняет остаток лизина и образуется новый альдимин 2. На второй частиреакции те же стадии протекают в противоположном направлении: пиридоксаминфосфат и вторая 2кетокислота образуют кетимин который иэомеризуется в альдимин. Механизм реакции трансаминирования открыт в 1937 году советскими учеными А.
81491. Аминокислоты, участвующие в трансаминировании; особая роль глутаминовой кислоты. Биологическое значение реакций трансаминирования. Определение трансаминаз в сыворотке крови при инфаркте миокарда и болезнях печени 119.25 KB
  Определение трансаминаз в сыворотке крови при инфаркте миокарда и болезнях печени. Чрезвычайно широкое распространение трансаминаз в животных тканях у микроорганизмов и растений их высокая резистентность к физическим химическим и биологическим воздействиям абсолютная стереохимическая специфичность по отношению к Lаминокислотам а также высокая каталитическая активность в процессах трансаминирования послужили предметом детального исследования роли этих ферментов в обмене аминокислот. Таким образом трансаминазы катализируют опосредованное...