Разработка приложения для составления сметы покупки персонального компьютера

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    884,37 Кб
  • Опубликовано:
    2013-08-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка приложения для составления сметы покупки персонального компьютера

Содержание

 

Введение

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

1.1 Требования к данным

1.2 Требования к транзакциям

2. Инфологическое проектирование

2.1 Определение сущностей и их атрибутов

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

2.3 Схема связей между сущностями

2.4 Предполагаемые информационные запросы

3. Даталогическое проектирование

3.1 Получение начальной модели

3.2 Нормализация отношений

4. Функциональное проектирование

Заключение

Приложения

Введение

Наверное, каждый современный человек, живущий в ногу со временем, а тем более студент ФАВТа, хотя бы раз в жизни сталкивался с проблемой покупки компьютера для домашнего или служебного использования. И после долгих раздумий и накопления необходимой денежной суммы все они неизменно приходили в один из многочисленных специализированных магазинов, занимающихся продажей компьютерных комплектующих. Для своевременного обслуживания всех покупателей и обеспечения должного уровня сервиса система организации подобного заведения должна быть правильно структурирована и автоматизирована. Действительно, при выборе комплектующих очень важно не ошибиться, чтобы потом не пришлось выслушивать жалобы покупателей и не доставить лишних проблем сборщикам компьютеров, вовремя не обеспечив совместимость тех или иных устройств. Именно для устранения всех подобных недоразумений и облегчения работы с клиентами и разработана эта программа.

Данная работа состоит из четырех частей. Первая часть работы посвящена выбору и конкретизации предметной области.

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

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

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

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


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

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

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

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

1.1 Требования к данным


Процессоры

В магазине имеется несколько наименований процессоров, различающихся своей тактовой частотой и ценой. Помимо названия модели сюда заносится информация о технических характеристиках: ядре, частоте шине, кэше и т.д.

Материнские платы

приложение персональный компьютер инфологический

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

Память

В этой категории хранится информация о параметрах модулей ОЗУ, предлагаемых в магазине. Каждому модулю при занесении в базу данных присваивается уникальный идентификационный номер, а также вводятся значения таких параметров, как объем, тип, частота, цена.

Мониторы

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

Журнал смет

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

1.2 Требования к транзакциям


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

Транзакция А. Создание и сопровождение записей со сведениями о процессорах.

Транзакция B. Создание и сопровождение записей со сведениями о материнских платах.

Транзакция C. Создание и сопровождение записей со сведениями о модулях оперативной памяти.

Транзакция D. Создание и сопровождение записей со сведениями о мониторах.

Транзакция Е. Осуществление покупки: выбор конфигурации компьютера на основании требований покупателя и данных о совместимости комплектующих.

Транзакция F. Создание и вывод на принтер итоговой сметы, включающей выбранные комплектующие.

Транзакция G. Формирование архива покупок.

Транзакция H. Поиск и отбор информации о покупках по заданным пользователем параметрам.

2. Инфологическое проектирование


2.1 Определение сущностей и их атрибутов


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

Рассмотрим выделенные сущности вместе с их атрибутами:

1. Процессоры (название, тактовая частота, ядро, частота шины, кэш L2, кэш L1, гнездо, технология, цена).

2. Материнские платы (название модели, гнездо процессора, чипсет, частота шины, тип памяти, скорость шины AGP, формат платы, встроенный звуковой адаптер, цена).

3. Память (название, тип, объем, частота работы, цена).

4. Мониторы (модель, диагональ, тип монитора, максимальное разрешение, рекомендуемое разрешение, соответствие стандартам, цена)

5. Журнал смет (№ покупки, фамилия покупателя, дата покупки, процессор, мат. плата, память, монитор, сумма).

Как видим, в каждой таблице значения первичных ключей будут иметь довольно большую длину (до 50 символов), что может привести к неоправданному увеличению объема информационной базы и замедлению работы при связывании таблиц. Поэтому введем в каждую таблицу поле "ID", которое будет являться первичным ключом и уникально идентифицировать каждую запись таблицы. Это позволит снять требования уникальности с полей "Название", что отразится при спадании ограничений целостности.

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


Сущность "Процессоры"

ü  Атрибут "ID" - целое число от 1 до 2 147 483 648. Уникален для каждой записи.

ü  Атрибут "Название" - символьное значение размером 30 символов. Обязателен для заполнения. Ограничений на уникальность нет.

ü  Атрибут "Тактовая частота" - положительное числовое значение - выражается в мегагерцах. Обязателен для заполнения.

ü  Атрибут "Ядро" - символьное значение размером 20 символов.

ü  Атрибут "Частота шины" - положительное числовое значение в мегагерцах. Обязателен для заполнения.

ü  Атрибут "Кэш L2" - положительное числовое значение - выражается в килобайтах.

ü  Атрибут "Кэш L1" - положительное числовое значение - выражается в килобайтах.

ü  Атрибут "Гнездо" - символьное значение размером 20 символов. Обязателен для заполнения.

ü  Атрибут "Технология" - положительное числовое значение из 1 знака в целой и 2 знаков в дробной части - выражается в микрометрах.

ü  Атрибут "Цена" - числовое выражение из 8 знаков в целой и 2 знаков в дробной части - денежная единица. Всегда положительна. Обязателен для заполнения.

Сущность "Мат. платы"

ü  Атрибут "ID" - целое число от 1 до 2 147 483 648. Уникален для каждой записи.

ü  Атрибут "Название модели" - символьное значение размером 30 символов. Обязателен для заполнения.

ü  Атрибут "Гнездо" - символьное значение размером 20 символов. Обязателен для заполнения. Ограничений на уникальность нет. Соответствует атрибуту "Гнездо" в сущности "Процессоры".

ü  Атрибут "Чипсет" - символьное значение размером 20 символов.

ü  Атрибут "Частота шины" - положительное числовое значение в мегагерцах.

ü  Атрибут "Тип памяти" - множественный атрибут, содержащий символьные значения размером 10 символов. Обязателен для заполнения.

ü  Атрибут "AGP" - положительное числовое значение из 1 знака в целой части.

ü  Атрибут "Формат" - символьное значение размером 10 символов.

ü  Атрибут "Звук" - символьное значение размером 30 символов.

ü  Атрибут "Цена" - числовое выражение из 8 знаков в целой и 2 знаков в дробной части - денежная единица. Всегда положительна. Обязателен для заполнения.

Сущность "Память"

ü  Атрибут "ID" - целое число от 1 до 2 147 483 648. Уникален для каждой записи.

ü  Атрибут "Название" - символьное значение размером 50 символов. Обязателен для заполнения.

ü  Атрибут "Тип" - символьное значения размером 10 символов. Обязателен для заполнения. Ограничений на уникальность нет.

ü  Атрибут "Объем" - положительное числовое значение - выражается в мегабайтах. Обязателен для заполнения.

ü  Атрибут "Частота" - положительное числовое значение в мегагерцах. Обязателен для заполнения.

ü  Атрибут "Цена" - числовое выражение из 8 знаков в целой и 2 знаков в дробной части - денежная единица. Всегда положительна. Обязателен для заполнения.

Сущность "Мониторы"

ü  Атрибут "ID" - целое число от 1 до 2 147 483 648. Уникален для каждой записи.

ü  Атрибут "Название модели" - символьное значение размером 50 символов. Обязателен для заполнения. Ограничений на уникальность нет.

ü  Атрибут "Диагональ" - положительное числовое значение в дюймах.

ü  Атрибут "Тип" - символьное значение размером 10 символов.

ü  Атрибут "Максимальное разрешение" - символьное значение размером 15 символов.

ü  Атрибут "Рекомендуемое разрешение" - символьное значение размером 15 символов.

ü  Атрибут "Стандарты" - множественный атрибут, содержащий символьные значения размером 10 символов.

ü  Атрибут "Цена" - числовое выражение из 8 знаков в целой и 2 знаков в дробной части - денежная единица. Всегда положительна. Обязателен для заполнения.

Сущность "Журнал смет"

ü  Атрибут "№ покупки" - положительное числовое значение. Ограничение на непустоту и уникальность.

ü  Атрибут "Дата покупки" - значение типа "дата". Обязателен для заполнения.

ü  Атрибут "Покупатель" - символьное значение размером 30 символов.

ü  Атрибут "Процессор" - числовое значение, содержит идентификатор выбранного процессора.

ü  Атрибут "Мат плата" - числовое значение, содержит идентификатор выбранной платы.

ü  Атрибут "Память" - числовое значение, содержит идентификатор выбранного модуля памяти.

ü  Атрибут "Монитор" - числовое значение, содержит идентификатор выбранного монитора.

ü  Атрибут "Сумма" - числовое выражение из 8 знаков в целой и 2 знаков в дробной части - денежная единица. Всегда положительна. Обязателен для заполнения.

2.3 Схема связей между сущностями


Рисунок 1 - Схема связей между сущностями

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

Связь "много-ко-многим" у пар сущностей "процессор - мат. плата" и "мат. плата - память" обусловлена довольно сложным взаимодействием данных между отдельными представителями этих сущностей. В частности, определенному процессору соответствуют только некоторые материнские платы и наоборот, для выбранной материнской платы подойдут далеко не все имеющиеся в наличии процессоры, а только их часть. Аналогичная картина взаимодействия наблюдается в паре сущностей "мат. плата - память". Указанные связи имеют обязательный характер, т.к. пользователь, выбрав понравившийся процессор, должен быть на 100% уверен, что для него найдется подходящая материнская плата и память и наоборот.

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

Так как выбор монитора абсолютно не зависит от модели процессора, платы или памяти, то сущность "Монитор" связана лишь сущностью "Журнал смет".

2.4 Предполагаемые информационные запросы


1.      Показать стоимость и характеристики процессора для включения его в смету

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

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

.        Показать стоимость и характеристики монитора для включения его в смету

.        Показать общую сумму покупки

.        Просмотр итоговой сметы

.        Распечатка итоговой сметы

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

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

10. Получение справки о программе

3. Даталогическое проектирование


3.1 Получение начальной модели


После того как была разработана инфологическая модель предметной области, можно приступать к построению даталогической модели применительно к конкретной СУБД (InterBase 5.6).

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

Для перехода от инфологической модели к даталогической воспользуемся методологией, подробно описанной в [2].

. На начальной стадии построения сущности инфологической модели будут представлены в виде отношений, причем атрибуты сущностей будут являться их полями, а ограничения целостности - форматами полей.

Соответственно, каждая сущность инфомодели будет представлена в виде отдельной таблицы с уникальным первичным ключом "ID".

. Множественный атрибут "Тип памяти" сущности "Мат. плата" согласно методологии, должен быть вынесен в отдельное отношение вместе с ключевыми атрибутами. Но в целях улучшения быстродействия и экономии места на жестком диске, исключим этот атрибут из отношения, и введем вместо него атрибут "Частота памяти", который будет содержать в себе максимально возможную частоту оперативной памяти для данной платы.

Множественный атрибут "Стандарты" сущности "Монитор" также в целях упрощения работы с приложением не следует выносить в отдельное отношение вместе с ключом "ID". Гораздо проще сделать этот атрибут единичным, поместив в него название последнего по дате принятия стандарта, которому соответствует данный объект. Например, если монитор соответствует стандарту ТСО-99, то он естественным образом соответствует и стандарту ТСО-95. Поэтому хранение одного последнего стандарта в рассматриваемом атрибуте кажется в данном случае наиболее целесообразным.

. При наличии связи М: М согласно методологии следует ввести дополнительное отношение, содержащее идентификаторы связываемых объектов. Введем 2 отношения:

Связь1 (ID_процессора, ID_матплаты)

Связь2 (ID_матплаты, ID памяти)

3.2 Нормализация отношений


Теперь после получения начальной даталогической модели проведем ее нормализацию по правилам, указанным в [3].

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

Все таблицы разработанной БД соответствуют этому определению.

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

Так как во всех таблицах первичным ключом является "безликий" ID, то все таблицы разработанной БД соответствуют этому определению.

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

Этому требованию не соответствуют отношения "Процессоры" (часть атрибутов зависят от не ключевого атрибута "Ядро") и "Мат. платы" (аналогичная картина с атрибутом "Чипсет"). Для нормализации следует произвести разбиение этих отношений.

Процессор (ID, название, тактовая частота, ядро, частота шины, кэш L2, цена)

Ядро процессора (ядро, кэш L1, гнездо, технология)

Мат. плата (ID, название модели, чипсет, AGP, формат платы, встроенный звук, цена)

Чипсет мат. платы (чипсет, гнездо процессора, частота шины, частота памяти)

После такого разбиения соответствующим образом изменятся и вновь введенные отношения Связь1 и Связь2:

Связь1 (ядро, чипсет)

Связь2 (чипсет, ID)

Таким образом, получив из инфологической даталогическую модель и проведя ее нормализацию до соответствия 3НФ, можно графически представить структуру разработанной реляционной БД (рисунок 2).

Таблицы "Процессоры", "Мат. платы", "Память", "Мониторы" являются справочными, так как они содержат информацию о характеристиках комплектующих, из них мы выбираем элементы при составлении сметы покупки. Таблицы "Ядра" и "Чипсеты" назовем подчиненными справочниками, так как они служат для обслуживания справочников "Процессоры" и "Мат. платы" и непосредственно в составлении сметы не участвуют.

Рисунок 2 - Даталогическая модель

4. Функциональное проектирование


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

Определим необходимые операции для каждой базы данных:

         просмотр содержащихся записей

-        добавление записи

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

         удаление записи

         отбор записей

Определим специфические операции:

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

-        просмотр итоговой сметы

         печать итоговой сметы

         отбор покупок по реквизитам

         просмотр информации о программе

Для реализации всех операций разработаем схему диалога.

Во-первых, рассмотрим главное окно приложения и опишем все его элементы.

Рисунок 3 - Диалоговое окно основной формы

Кнопки "Процессоры", "Мат. платы", "Модули памяти", "Мониторы" позволяют осуществлять просмотр информации, добавление, редактирование и удаление записей в соответствующих таблицах, а также в подчиненных им таблицах "Ядра" и "Чипсеты".

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

Кнопка "Журнал смет" дает возможность пользователю просмотреть все ранее произведенные покупки, а также задать условия для отбора записей журнала.

Справка: просмотр справочной информации.

Выход: выход из приложения с закрытием всех таблиц и окон.

Все кнопки дублируются в главном меню программы.

Далее более подробно остановимся на схеме организации диалога.

Рисунок 4 - Структура диалога

Окно Processors для просмотра информации о процессорах и загружающий по нажатию клавиши "Процессоры" главного окна, представлен ниже:

Рисунок 5 - Окно Processors

Компонент DBDrid представляет общую информацию о процессорах, показывая их название, тактовую частоту, частоту шину, кэш Level2, и цену. При выборе определенного элемента компонента в полях вывода появляются технические данные ядра процессора.

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

При нажатии на кнопку "Добавить" загружается окно Аdd_pr.

Рисунок 6 - Окно добавления элемента справочника

Для добавления нового процессора можно выбрать название ядра с помощью компонента ScrollBox. Это позволяет избежать ненужных ошибок в процессе ввода данных. При нажатии на кнопку "ОК" произойдет запись введенных данных (при нажатии "Cancel" данные не запишутся) и переход к окну Processors.

Если поля формы, помеченные звездочками (обязательные для заполнения), останутся пустыми, то будет выдано сообщение об ошибке.

Рисунок 7 - Сообщение об ошибке

Такое сообщение об ошибке будет выдаваться каждый раз при незаполнении ключевых полей и в дальнейших окнах добавления и редактирования записей.

При нажатии на кнопку "Изменить" загружается окно Edit_pr.

Рисунок 7 - Окно редактирования элемента справочника

По-прежнему изначально необходимо заполнить все поля, отмеченные звездочками. Кнопка "ОК" сохраняет введенные изменения, кнопка "Cancel" осуществляет переход к окну Processors.

При нажатии на кнопку "Удалить" запрашивается подтверждение на удаление.

Рисунок 8 - Подтверждение удаления

При нажатии "Да" выбранная запись удаляется и загружается экран Processors, при нажатии "Нет" просто загружается окно Processors.

Кнопка "Справочник Ядра" переводит пользователя в диалоговое окно подчиненного справочника.

Рисунок 9 - Диалоговое окно подчиненного справочника

Здесь также можно осуществлять, добавление, изменение и удаление записей с помощью компонента DBNavigator. При этом изменения кэшируются и запись обновленных данных в запись произойдет только после нажатия на кнопки "ОК" и "Применить". Кнопка "Отмена" вернет пользователя к окну Processors без сохранения произведенных изменений.

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

Далее перейдем к следующей кнопке главного окна - "Смета покупки", которая загружает последовательность окон для выбора комплектации компьютера.

Окно SmetaProc

Рисунок 10 - Окно выбора процессора

Содержит таблицу для выбора определенного процессора и поля вывода подробной информации о нем. При нажатии на кнопку "Назад" произойдет переход к главному окну, при нажатии на "Далее" - к окну SmetaMP.

Окно SmetaMP

Рисунок 11 - Окно выбора материнской платы

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

Окно SmetaMem

Рисунок 12 - Окно выбора модуля памяти

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

Окно SmetaMon

Рисунок 13 - Окно выбора монитора

Стандартно содержит компонент DBGrid для выбора монитора, поля вывода информации о выбранном мониторе, кнопки возврата к SmetaMem и перехода к окну SmetaItog.

Окно SmetaItog

Рисунок 14 - Итоговое окно сметы

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

При выборе кнопки "Журнал смет" главного окна выводится диалоговая форма журнала введенных документов. Здесь представлены широчайшие возможности для отбора записей, отображаемых на экране.

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

Все это можно легко сделать в данной формк с помощью элементов ComboBox, Edit, DateTimePicker. Причем состав компонентов, отображаемых на форме, зависит от типа выбранного поля для отбора.

Рисунок 15 - Диалоговое окно журнала документов

Также из главного окна можно просмотреть справочную информацию при нажатии кнопки "Справка".

 

Рисунок 17 - Справочная информация

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

Заключение


В данной курсовой работе были рассмотрены основные принципы инфологического и даталогического проектирования на основании выбранной предметной области.

Было спроектировано и разработано приложение, позволяющее быстро и просто производить выбор комплектации компьютеров, а также сопровождать данные по всем имеющимся в наличии комплектующим. Освоены навыки написания SQL-запросов, изучена работа с InterBase и связанными компонентами в C++Builder.

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

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

На следующем этапе в третьей части после проведения нормализации отношений была сформулирована и представлена графически даталогическая модель.

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

Можно сказать, что поставленная задача выполнена в полном объеме.

Библиографический список

 

1.      Архангельский А.Я. Программирование в C++Builder 6. - М.: "Издательство Бином", 2003 - 1152с.

2.      Диго С.М. Проектирование и использование баз данных: Учебник. - М.: Финансы и статистика, 1995

.        Кириллов В.В. Основы проектирования реляционных баз данных. - СПб.: ГИТМО

.        Хансен Г., Хансен Д. Базы данных: разработка и управление. - М.: Бином, 1999

Приложения


Приложение А (обязательное)

 

Листинг скрипта создания базы данных

CREATE DATABASE "computers. gdb" USER "max" PASSWORD "852";GENERATOR Proc_ID;GENERATOR Mat_ID;GENERATOR Mem_ID;GENERATOR Mon_ID;GENERATOR Reg_ID;GENERATOR Proc_ID TO 0;GENERATOR Mat_ID TO 0;GENERATOR Mem_ID TO 0;GENERATOR Mon_ID TO 0;GENERATOR Reg_ID TO 0;TABLE Kernels ((20) NOT NULL Primary Key,INTEGER,(20) NOT NULL,

);TABLE Processors (NOT NULL Primary Key,VARCHAR (30) NOT NULL,NOT NULL,(20) REFERENCES Kernels (kernel) ON UPDATE CASCADE ON DELETE SET NULL,NOT NULL,INTEGER,NOT NULL

);TERM!!;TRIGGER SET_Proc_ID FOR ProcessorsINSERT AS. id = GEN_ID (Proc_ID, 1);!!TERM;!!TABLE Chipsets ((20) NOT NULL Primary Key,(20) NOT NULL,,NOT NULL

);TABLE Matplatas (NOT NULL Primary Key,(30) NOT NULL,(20) REFERENCES Chipsets (chipset) ON UPDATE CASCADE ON DELETE SET NULL,DEFAULT 8,formatVARCHAR (10) DEFAULT "ATX",(10) DEFAULT "AC-97",(10,2) NOT NULL

);TERM!!;TRIGGER SET_Mat_ID FOR MatPlatasINSERT AS. id = GEN_ID (Mat_ID, 1);!!TERM;!!TABLE Memorys (NOT NULL Primary Key,(50) NOT NULL,(10) DEFAULT "DDR" NOT NULL,NOT NULL,NOT NULL,(10,2) NOT NULL

);TERM!!;TRIGGER SET_Mem_ID FOR MemorysINSERT AS. id = GEN_ID (Mem_ID, 1);!!TERM;!!TABLE Monitors (NOT NULL Primary Key,(50) NOT NULL,DEFAULT 17 NOT NULL,(10) NOT NULL,(15),(15),(10),(10,2) NOT NULL

);TERM!!;TRIGGER SET_Mon_ID FOR MonitorsINSERT AS. id = GEN_ID (Mon_ID, 1);!!TERM;!!TABLE Register (NOT NULL Primary Key,NOT NULL,(30) DEFAULT "Частное лицо",,,,,(10,2) NOT NULL

);TERM!!;TRIGGER SET_Reg_ID FOR RegisterINSERT AS. id = GEN_ID (Reg_ID, 1);!!

SET TERM;!!

COMMIT;

Приложение Б (обязательное)

 

Листинги основных функций

Добавление записи в таблицу "Процессоры"

bool flag_close=true;->SQL->Clear ();text="",text1="",text2="";="insert into Processors (NAME, FREQUENCY";(ComboBox1->GetTextLen () >0)

{ text=text+", KERNEL";=",'"+ComboBox1->Text+"'";

}=text+", FREQBUS";(Edit6->GetTextLen () >0)

{ text=text+", CASHL2";=","+Edit6->Text;

}{->SQL->Add (text+", PRICE) values ('" +->Text + "', " + Edit3->Text +text1+", " +->Text + text2+", '"+->Text+"')");->ExecSQL ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);_close=false;

}(flag_close) FormProcAdd->Close ();

Редактирование записи в таблице "Процессоры"

bool flag_close=true;->SQL->Clear ();text;="update Processors Set ID=" +->Text +", NAME='" + Edit2->Text + "', FREQUENCY= " + Edit3->Text;(ComboBox1->GetTextLen () >0)

{ text=text+", KERNEL='"+ComboBox1->Text+"'";

}text=text+", KERNEL=NULL";=text+", FREQBUS= " + Edit5->Text;(Edit6->GetTextLen () >0)

{ text=text+", CASHL2="+Edit6->Text;

}text=text+", CASHL2=NULL";=text+",PRICE= '"+->Text+"' where id="+FormProc->IBQuery1->FieldByName ("ID") - >AsString;{->SQL->Add (text);->ExecSQL ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);_close=false;

}(flag_close) FormProcEdit->Close ();

Удаление записи из таблицы "Процессоры"(Application->MessageBox ("Вы действительно хотите удалить запись?", "Подтверждение", MB_YESNO + MB_ICONQUESTION) ==IDNO)

return;->SQL->Clear ();->SQL->Add ("delete from Processors where id=: id");->ExecSQL ();->SQL->Clear ();->SQL->Add ("select * from kernels where (kernel=: kernel)");->Open ();->Close ();->Open ();

Отбор записей в таблице "Процессоры"

void __fastcall TFormProc:: FormShow (TObject *Sender)

{->Clear ();->Clear ();->GetFieldNames (ComboBox1->Items);->ItemIndex=0;->Clear ();->SQL->Clear ();->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Processors");->Open ();(! IBQuery3->Eof)

{->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);->Next ();

}->ItemIndex=0;

}

}__fastcall TFormProc:: Button7Click (TObject *Sender)

{->SQL->Clear ();->SQL->Add ("Select * From Processors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");->Open ();->SQL->Clear ();->SQL->Add ("Select * From Processors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");->Open ();->Enabled=true;

}

Связывание справочника "Процессоры" и подчиненного справочника "Ядра"

void __fastcall TFormProc:: DataSource1DataChange (TObject *Sender,*Field)

{->SQL->Clear ();->SQL->Add ("SELECT * FROM Kernels WHERE kernel=: kernel");->Open ();->Text=IBQuery2->FieldByName ("KERNEL") - >AsString;->Text=IBQuery2->FieldByName ("CASHL1") - >AsString;->Text=IBQuery2->FieldByName ("PLACE") - >AsString;->Text=FloatToStrF (IBQuery2->FieldByName ("TECHNOLOGY") - >AsFloat,ffFixed,2,2);

}

Листинг формы SmetaProc

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

#include <vcl. h>

#pragma hdrstop

#include "MF_Unit. h"

#include "SmetaProc_unit. h"

#include "SmetaItog_unit. h"

#include "SmetaMat_unit. h"

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

#pragma package (smart_init)

#pragma resource "*. dfm"*SmetaProc;

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

__fastcall TSmetaProc:: TSmetaProc (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------__fastcall TSmetaProc:: Otbor ()

{->Clear ();->SQL->Clear ();->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Processors");->Open ();(! IBQuery3->Eof)

{->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);->Next ();

}->ItemIndex=0;

}__fastcall TSmetaProc:: Button1Click (TObject *Sender)

{>Close ();

}

// ---------------------------------------------------------------------------__fastcall TSmetaProc:: DataSource1DataChange (TObject *Sender,*Field)

{->SQL->Clear ();->SQL->Add ("SELECT * FROM Kernels WHERE kernel=: kernel");->Open ();->Text=IBQuery2->FieldByName ("KERNEL") - >AsString;->Text=IBQuery2->FieldByName ("CASHL1") - >AsString;->Text=IBQuery2->FieldByName ("PLACE") - >AsString;->Text=FloatToStrF (IBQuery2->FieldByName ("TECHNOLOGY") - >AsFloat,ffFixed,2,2);

}

// ---------------------------------------------------------------------------__fastcall TSmetaProc:: FormCreate (TObject *Sender)

{->Clear ();->Clear ();->GetFieldNames (ComboBox1->Items);->ItemIndex=0;();

}

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

{();

}

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

{->SQL->Clear ();->SQL->Add ("Select * From Processors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");->Open ();->SQL->Clear ();->SQL->Add ("Select * From Processors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");->Open ();->Enabled=true;

}

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

{->SQL->Clear ();->SQL->Add ("Select * From Processors");->Open ();->Enabled=false;

}

// ---------------------------------------------------------------------------__fastcall TSmetaProc:: FormShow (TObject *Sender)

{();

}

// ---------------------------------------------------------------------------__fastcall TSmetaProc:: Button2Click (TObject *Sender)

{>Edit1->Text=IBQuery1->FieldByName ("NAME") - >AsString+

" <"+IBQuery2->FieldByName ("PLACE") - >AsString+

", "+IBQuery1->FieldByName ("FREQUENCY") - >AsString+" MHz"+

", "+IBQuery1->FieldByName ("KERNEL") - >AsString+

", FSB "+IBQuery1->FieldByName ("FREQBUS") - >AsString+

">";>ProcID=IBQuery1->FieldByName ("ID") - >AsInteger;>Label5->Caption=StringReplace (FloatToStrF (IBQuery1->FieldByName ("PRICE") - >AsFloat,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);>Close ();>Show ();

}

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

Листинг формы SmetaMP

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

#include <vcl. h>

#pragma hdrstop

#include "SmetaMat_unit. h"

#include "SmetaItog_unit. h"

#include "SmetaProc_unit. h"

#include "SmetaMem_unit. h"

#include "MF_Unit. h"

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

#pragma package (smart_init)

#pragma resource "*. dfm"*SmetaMat;TextQuery="";

__fastcall TSmetaMat:: TSmetaMat (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------__fastcall TSmetaMat:: Otbor ()

{->Clear ();->SQL->Clear ();->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Matplatas "+TextQuery);->Open ();(! IBQuery3->Eof)

{->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);->Next ();

}->ItemIndex=0;

}__fastcall TSmetaMat:: Button1Click (TObject *Sender)

{>Close ();>Show ();

}

// ---------------------------------------------------------------------------__fastcall TSmetaMat:: DataSource1DataChange (TObject *Sender,*Field)

{->SQL->Clear ();->SQL->Add ("select * from CHIPSETS where (CHIPSET=: CHIPSET)");->Open ();->Text=IBQuery2->FieldByName ("CHIPSET") - >AsString;->Text=IBQuery2->FieldByName ("PLACE") - >AsString;->Text=IBQuery2->FieldByName ("FREQCPU") - >AsInteger;->Text=IBQuery2->FieldByName ("FREQMEM") - >AsInteger;

}

// ---------------------------------------------------------------------------__fastcall TSmetaMat:: FormCreate (TObject *Sender)

{->Clear ();->Clear ();->GetFieldNames (ComboBox1->Items);->ItemIndex=0;();

}

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

{();

}

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

{->SQL->Clear ();->SQL->Add ("Select * From Matplatas "+TextQuery+" AND ("+ComboBox1->Text+"='"+ComboBox2->Text+"')");->Open ();->SQL->Clear ();->SQL->Add ("Select * From Matplatas "+TextQuery+" AND ("+ComboBox1->Text+"='"+ComboBox2->Text+"')");->Open ();->Enabled=true;

}

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

{->SQL->Clear ();->SQL->Add ("Select * From Matplatas "+TextQuery);->Open ();->Enabled=false;

}

// ---------------------------------------------------------------------------__fastcall TSmetaMat:: FormShow (TObject *Sender)

{text;->SQL->Clear ();=SmetaProc->IBQuery2->FieldByName ("Place") - >AsString;="where (chipset IN (select Chipset from Chipsets where (place ='"+text+"')))";->SQL->Add ("Select * From Matplatas "+TextQuery);->Open ();();->Caption="Процессор "+SmetaItog->Edit1->Text;

}

// ---------------------------------------------------------------------------__fastcall TSmetaMat:: Button2Click (TObject *Sender)

{>Edit2->Text=IBQuery1->FieldByName ("NAME") - >AsString+

" <"+IBQuery2->FieldByName ("PLACE") - >AsString+

", "+IBQuery1->FieldByName ("CHIPSET") - >AsString+

", FSB"+IBQuery2->FieldByName ("FREQCPU") - >AsString+

", DDR"+IBQuery2->FieldByName ("FREQMEM") - >AsString+

", "+IBQuery1->FieldByName ("FORMAT") - >AsString+

">";>MatID=IBQuery1->FieldByName ("ID") - >AsInteger;>Label6->Caption=StringReplace (FloatToStrF (IBQuery1->FieldByName ("PRICE") - >AsFloat,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);>Close ();>Show ();

// SmetaItog->ShowModal ();

}

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

Листинг формы SmetaMem

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

#include <vcl. h>

#pragma hdrstop

#include "SmetaMat_unit. h"

#include "SmetaItog_unit. h"

#include "MF_Unit. h"

#include "SmetaMon_unit. h"

#include "SmetaMem_unit. h"

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

#pragma package (smart_init)

#pragma resource "*. dfm"*SmetaMem;

AnsiString TextQueryMem="";

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

__fastcall TSmetaMem:: TSmetaMem (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------__fastcall TSmetaMem:: Otbor ()

{->Clear ();->SQL->Clear ();->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Memorys "+TextQueryMem);->Open ();(! IBQuery3->Eof)

{->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);->Next ();

}->ItemIndex=0;

}__fastcall TSmetaMem:: Button1Click (TObject *Sender)

{>Close ();>Show ();

}

// ---------------------------------------------------------------------------__fastcall TSmetaMem:: FormCreate (TObject *Sender)

{->Clear ();->Clear ();->GetFieldNames (ComboBox1->Items);->ItemIndex=0;();

}

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

{();

}

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

{->SQL->Clear ();->SQL->Add ("Select * From Memorys "+TextQueryMem+" AND ("+ComboBox1->Text+"='"+ComboBox2->Text+"')");->Open ();->SQL->Clear ();->SQL->Add ("Select * From Memorys "+TextQueryMem+" AND ("+ComboBox1->Text+"='"+ComboBox2->Text+"')");->Open ();->Enabled=true;

}

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

{->SQL->Clear ();->SQL->Add ("Select * From Memorys "+TextQueryMem);->Open ();->Enabled=false;

}

// ---------------------------------------------------------------------------__fastcall TSmetaMem:: FormShow (TObject *Sender)

{text;->SQL->Clear ();=SmetaMat->IBQuery2->FieldByName ("Freqmem") - >AsString;="where (Frequency <= "+text+")";->SQL->Add ("Select * From Memorys "+TextQueryMem);->Open ();();->Caption="Процессор "+SmetaItog->Edit1->Text;->Caption="Мат. плата "+SmetaItog->Edit2->Text;

}

// ---------------------------------------------------------------------------__fastcall TSmetaMem:: Button2Click (TObject *Sender)

{>Edit3->Text=IBQuery1->FieldByName ("NAME") - >AsString;>MemID=IBQuery1->FieldByName ("ID") - >AsInteger;>Label7->Caption=StringReplace (FloatToStrF (IBQuery1->FieldByName ("PRICE") - >AsFloat,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);>Close ();>Show ();

}

Листинг формы SmetaMon

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

#include <vcl. h>

#pragma hdrstop

#include "SmetaMon_unit. h"

#include "MF_Unit. h"

#include "SmetaItog_unit. h"

#include "SmetaMem_unit. h"

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

#pragma package (smart_init)

#pragma resource "*. dfm"*SmetaMon;

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

__fastcall TSmetaMon:: TSmetaMon (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------__fastcall TSmetaMon:: Otbor ()

{->Clear ();->SQL->Clear ();->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Monitors");->Open ();(! IBQuery3->Eof)

{->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);->Next ();

}->ItemIndex=0;

}__fastcall TSmetaMon:: Button1Click (TObject *Sender)

{>Close ();>Show ();

}

// ---------------------------------------------------------------------------__fastcall TSmetaMon:: FormCreate (TObject *Sender)

{->Clear ();->Clear ();->GetFieldNames (ComboBox1->Items);->ItemIndex=0;();

}

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

{();

}

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

{->SQL->Clear ();->SQL->Add ("Select * From Monitors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");->Open ();->SQL->Clear ();->SQL->Add ("Select * From Monitors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");->Open ();->Enabled=true;

}

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

{->SQL->Clear ();->SQL->Add ("Select * From Monitors");->Open ();->Enabled=false;

}

// ---------------------------------------------------------------------------__fastcall TSmetaMon:: FormShow (TObject *Sender)

{->SQL->Clear ();->SQL->Add ("Select * From Monitors");->Open ();();->Caption="Процессор "+SmetaItog->Edit1->Text;->Caption="Мат. плата "+SmetaItog->Edit2->Text;->Caption="Память "+SmetaItog->Edit3->Text;

}

// ---------------------------------------------------------------------------__fastcall TSmetaMon:: DataSource1DataChange (TObject *Sender,*Field)

{->Text=IBQuery1->FieldByName ("MAXRAZR") - >AsString;->Text=IBQuery1->FieldByName ("REKRAZR") - >AsString;

}

// ---------------------------------------------------------------------------__fastcall TSmetaMon:: Button2Click (TObject *Sender)

{>Edit4->Text=IBQuery1->FieldByName ("Diagonal") - >AsString+"'' "+->FieldByName ("NAME") - >AsString+

" <"+IBQuery1->FieldByName ("TYPE") - >AsString+

", "+IBQuery1->FieldByName ("REKRAZR") - >AsString+

", "+IBQuery1->FieldByName ("STANDART") - >AsString+

">";>MonID=IBQuery1->FieldByName ("ID") - >AsInteger;>Label8->Caption=StringReplace (FloatToStrF (IBQuery1->FieldByName ("PRICE") - >AsFloat,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);>Close ();>Show ();

}

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

Листинг формы SmetaItog

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

#include <vcl. h>

#pragma hdrstop

#include "MF_Unit. h"

#include "SmetaRep_unit. h"

#include "SmetaMon_unit. h"

#include "SmetaItog_unit. h"

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

#pragma package (smart_init)

#pragma resource "*. dfm"*SmetaItog;number;

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

__fastcall TSmetaItog:: TSmetaItog (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------__fastcall TSmetaItog:: Button2Click (TObject *Sender)

{>Close ();

}

// ---------------------------------------------------------------------------__fastcall TSmetaItog:: FormShow (TObject *Sender)

{result;=StrToFloat (Label5->Caption) +StrToFloat (Label6->Caption) +StrToFloat (Label7->Caption) +StrToFloat (Label8->Caption);->Caption=StringReplace (FloatToStrF (result,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);->SQL->Clear ();->SQL->Add ("Select MAX (ID) as Max_ID from Register");->Open ();=IBQuery1->FieldByName ("Max_ID") - >AsInteger+1;->Text="Частное лицо";

}

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

{flag_close=true;text;->SQL->Clear ();{->SQL->Add ("Insert into Register (DATA,CUSTOMER,PROC,MATPL,MEM,MON,SUMMA) values ('"+DateToStr (Date ()) +"','"+->Text+"',"+ProcID+","+MatID+","+MemID+","+MonID+",'"+->Caption+"')");->ExecSQL ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);_close=false;

}(flag_close)

{ text="Покупка успешно зарегестрирована под номером "+IntToStr (number);

Application->MessageBox (text. c_str (), "Сообщение", MB_OK + MB_ICONINFORMATION);

// ShowMessage ("Покупка успешно зарегестрирована под номером "+IntToStr (number));

SmetaItog->Close ();

}

/*IBQuery1->SQL->Clear ();->SQL->Add ("Select * from Register");->Open (); */

}

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

{>QRLabel10->Caption=Edit1->Text;>QRLabel14->Caption=Label5->Caption;>QRLabel11->Caption=Edit2->Text;>QRLabel15->Caption=Label6->Caption;>QRLabel12->Caption=Edit3->Text;>QRLabel16->Caption=Label7->Caption;>QRLabel13->Caption=Edit4->Text;>QRLabel17->Caption=Label8->Caption;>QRLabel4->Caption=Edit5->Text;>QRLabel18->Caption=Label10->Caption;>QRLabel25->Caption=IntToStr (number);>QuickRep1->Preview ();

}

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

{>Close ();>Show ();

}

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

Листинг формы Register

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

#include <vcl. h>

#include <systdate. h>

#pragma hdrstop

#include "MF_Unit. h"

#include "Register_unit. h"

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

#pragma package (smart_init)

#pragma resource "*. dfm"*FormReg;

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

__fastcall TFormReg:: TFormReg (TComponent* Owner)

: TForm (Owner)

{

}__fastcall TFormReg:: Otbor (int flag)

{(flag==1) // число

{ Label7->Visible=true;->Visible=true;->Visible=true;->Visible=true;->Visible=false;->Visible=false;->Visible=false;->Visible=false;

}(flag==2) // дата

{ Label7->Visible=true;->Visible=true;->Visible=false;->Visible=false;->Visible=false;->Visible=false;->Visible=true;->Visible=true;

}(flag==3) // значения

{ Label7->Visible=false;->Visible=false;->Visible=false;->Visible=false;->Visible=true;->Visible=true;->Visible=false;->Visible=false;

}

}

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

{>Close ();

}

// ---------------------------------------------------------------------------__fastcall TFormReg:: DataSource1DataChange (TObject *Sender,*Field)

{->SQL->Clear ();->SQL->Add ("Select name as Proc_Name from Processors where id=: proc");->Open ();->Text=IBQuery2->FieldByName ("Proc_Name") - >AsString;->SQL->Clear ();->SQL->Add ("Select name as Mat_Name from Matplatas where id=: matpl");->Open ();->Text=IBQuery2->FieldByName ("Mat_Name") - >AsString;->SQL->Clear ();->SQL->Add ("Select name as Mem_Name from Memorys where id=: mem");->Open ();->Text=IBQuery2->FieldByName ("Mem_Name") - >AsString;->SQL->Clear ();->SQL->Add ("Select name as Mon_Name from Monitors where id=: mon");->Open ();->Text=IBQuery2->FieldByName ("Mon_Name") - >AsString;

}

// ---------------------------------------------------------------------------__fastcall TFormReg:: FormShow (TObject *Sender)

{->Close ();->Open ();->ItemIndex=0;(1);

}

// ---------------------------------------------------------------------------__fastcall TFormReg:: Button2Click (TObject *Sender)

{(ComboBox1->ItemIndex==0) // ID

{ try {->SQL->Clear ();->SQL->Add ("Select * from Register where Id between "+Edit5->Text+" AND "+Edit6->Text);->Open ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);

}

}(ComboBox1->ItemIndex==1) // Дата

{ try {->SQL->Clear ();->SQL->Add ("Select * from Register where Data between '"+DateToStr (DatePicker1->Date) +"' AND '"+DateToStr (DatePicker2->Date) +"'");->Open ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);

}

}(ComboBox1->ItemIndex==2) // покупатель

{ try {->SQL->Clear ();->SQL->Add ("Select * from Register where Customer = '"+ComboBox2->Text+"'");->Open ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);

}

}(ComboBox1->ItemIndex==3) // сумма

{ try {->SQL->Clear ();->SQL->Add ("Select * from Register where Summa between '"+Edit5->Text+"' AND '"+Edit6->Text+"'");->Open ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);

}

}(ComboBox1->ItemIndex==4) // процессор

{ try {->SQL->Clear ();->SQL->Add ("Select * from Register where proc in (select Id from processors where name= '"+ComboBox2->Text+"')");->Open ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);

}

}(ComboBox1->ItemIndex==5) // мат. плата

{ try {->SQL->Clear ();->SQL->Add ("Select * from Register where matpl in (select Id from matplatas where name = '"+ComboBox2->Text+"')");->Open ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);

}

}(ComboBox1->ItemIndex==6) // память

{ try {->SQL->Clear ();->SQL->Add ("Select * from Register where mem in (select Id from memorys where name= '"+ComboBox2->Text+"')");->Open ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);

}

}(ComboBox1->ItemIndex==7) // монитор

{ try {->SQL->Clear ();->SQL->Add ("Select * from Register where mon in (select Id from monitors where name= '"+ComboBox2->Text+"')");->Open ();

}(.) {>MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);

}

}

}

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

{->SQL->Clear ();->SQL->Add ("Select * from Register");->Open ();

}

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

{(ComboBox1->ItemIndex==0) // ID(1);(ComboBox1->ItemIndex==1) // Дата(2);(ComboBox1->ItemIndex==2) // Покупатель

{->Clear ();->SQL->Clear ();->SQL->Add ("Select Distinct Customer As Par From Register");->Open ();(! IBQuery3->Eof)

{ ComboBox2->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);->Next ();

}->ItemIndex=0;(3);

}(ComboBox1->ItemIndex==3) // Сумма(1);(ComboBox1->ItemIndex==4) // Процессор

{->Clear ();->SQL->Clear ();->SQL->Add ("Select name from Processors where id IN (Select Distinct Proc From Register)");->Open ();(! IBQuery3->Eof)

{ ComboBox2->Items->Add (IBQuery3->FieldByName ("name") - >AsString);->Next ();

}->ItemIndex=0;(3);

}(ComboBox1->ItemIndex==5) // Мат. плата

{->Clear ();->SQL->Clear ();->SQL->Add ("Select name from Matplatas where id IN (Select Distinct Matpl From Register)");->Open ();(! IBQuery3->Eof)

{ ComboBox2->Items->Add (IBQuery3->FieldByName ("name") - >AsString);->Next ();

}->ItemIndex=0;(3);

}(ComboBox1->ItemIndex==6) // Память

{->Clear ();->SQL->Clear ();->SQL->Add ("Select name from Memorys where id IN (Select Distinct Mem From Register)");->Open ();(! IBQuery3->Eof)

{ ComboBox2->Items->Add (IBQuery3->FieldByName ("name") - >AsString);->Next ();

}->ItemIndex=0;(3);

}(ComboBox1->ItemIndex==7) // Монитор

{->Clear ();->SQL->Clear ();->SQL->Add ("Select name from Monitors where id IN (Select Distinct Mon From Register)");->Open ();(! IBQuery3->Eof)

{ ComboBox2->Items->Add (IBQuery3->FieldByName ("name") - >AsString);->Next ();

}->ItemIndex=0;(3);

}

}

// ---------------------------------------------------------------------------__fastcall TFormReg:: Edit5KeyPress (TObject *Sender, char &Key)

{( ( (Key<'0') || (Key>'9')) && (Key! ='. ')) {Key=0; Beep (); }

}

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

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!