Разработка приложения для составления сметы покупки персонального компьютера
Составление сметы покупки персонального компьютера на основе имеющихся в продаже отдельных комплектующих как основная функция приложения. Основные требования к данным и транзакциям. Инфологическое, даталогическое и функциональное проектирование.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.08.2013 |
Размер файла | 1,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 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-моделей можно выделить ряд необходимых сущностей вместе с их атрибутами.
Рассмотрим выделенные сущности вместе с их атрибутами:
Процессоры (название, тактовая частота, ядро, частота шины, кэш L2, кэш L1, гнездо, технология, цена).
Материнские платы (название модели, гнездо процессора, чипсет, частота шины, тип памяти, скорость шины AGP, формат платы, встроенный звуковой адаптер, цена).
Память (название, тип, объем, частота работы, цена).
Мониторы (модель, диагональ, тип монитора, максимальное разрешение, рекомендуемое разрешение, соответствие стандартам, цена)
Журнал смет (№ покупки, фамилия покупателя, дата покупки, процессор, мат. плата, память, монитор, сумма).
Как видим, в каждой таблице значения первичных ключей будут иметь довольно большую длину (до 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. Показать стоимость и характеристики материнской платы, соответствующей ранее выбранному процессору, для включения ее в смету
3. Показать стоимость и характеристики модуля памяти, соответствующего ранее выбранной материнской плате, для включения его в смету
4. Показать стоимость и характеристики монитора для включения его в смету
5. Показать общую сумму покупки
6. Просмотр итоговой сметы
7. Распечатка итоговой сметы
8. Просмотр данных об имеющихся комплектующих
9. Просмотр данных о ранее сделанных покупках, удовлетворяющих определенным условиям
10. Получение справки о программе
3. Даталогическое проектирование
3.1 Получение начальной модели
После того как была разработана инфологическая модель предметной области, можно приступать к построению даталогической модели применительно к конкретной СУБД (InterBase 5.6).
Для реляционной базы данных проектирование логической структуры (или даталогическое проектирование) заключается в том, чтобы разбить всю информацию по файлам (или в терминах реляционной модели - по отношениям), а также определить состав полей (в терминах реляционной модели - атрибутов) для каждого из этих файлов.
Для перехода от инфологической модели к даталогической воспользуемся методологией, подробно описанной в [2].
1. На начальной стадии построения сущности инфологической модели будут представлены в виде отношений, причем атрибуты сущностей будут являться их полями, а ограничения целостности - форматами полей.
Соответственно, каждая сущность инфомодели будет представлена в виде отдельной таблицы с уникальным первичным ключом "ID".
2. Множественный атрибут "Тип памяти" сущности "Мат. плата" согласно методологии, должен быть вынесен в отдельное отношение вместе с ключевыми атрибутами. Но в целях улучшения быстродействия и экономии места на жестком диске, исключим этот атрибут из отношения, и введем вместо него атрибут "Частота памяти", который будет содержать в себе максимально возможную частоту оперативной памяти для данной платы.
Множественный атрибут "Стандарты" сущности "Монитор" также в целях упрощения работы с приложением не следует выносить в отдельное отношение вместе с ключом "ID". Гораздо проще сделать этот атрибут единичным, поместив в него название последнего по дате принятия стандарта, которому соответствует данный объект. Например, если монитор соответствует стандарту ТСО-99, то он естественным образом соответствует и стандарту ТСО-95. Поэтому хранение одного последнего стандарта в рассматриваемом атрибуте кажется в данном случае наиболее целесообразным.
3. При наличии связи М: М согласно методологии следует ввести дополнительное отношение, содержащее идентификаторы связываемых объектов. Введем 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
3. Кириллов В.В. Основы проектирования реляционных баз данных. - СПб.: ГИТМО
4. Хансен Г., Хансен Д. Базы данных: разработка и управление. - М.: Бином, 1999
Приложения
Приложение А (обязательное)
Листинг скрипта создания базы данных
CREATE DATABASE "computers. gdb" USER "max" PASSWORD "852";
CREATE GENERATOR Proc_ID;
CREATE GENERATOR Mat_ID;
CREATE GENERATOR Mem_ID;
CREATE GENERATOR Mon_ID;
CREATE GENERATOR Reg_ID;
SET GENERATOR Proc_ID TO 0;
SET GENERATOR Mat_ID TO 0;
SET GENERATOR Mem_ID TO 0;
SET GENERATOR Mon_ID TO 0;
SET GENERATOR Reg_ID TO 0;
CREATE TABLE Kernels (
kernelVARCHAR (20) NOT NULL Primary Key,
cashl1INTEGER,
placeVARCHAR (20) NOT NULL,
technologyFLOAT
);
CREATE TABLE Processors (
idINTEGER NOT NULL Primary Key,
name VARCHAR (30) NOT NULL,
frequencyINTEGER NOT NULL,
kernelVARCHAR (20) REFERENCES Kernels (kernel) ON UPDATE CASCADE ON DELETE SET NULL,
freqbusINTEGER NOT NULL,
cashl2INTEGER,
priceFLOAT NOT NULL
);
SET TERM!!;
CREATE TRIGGER SET_Proc_ID FOR Processors
BEFORE INSERT AS
BEGIN
NEW. id = GEN_ID (Proc_ID, 1);
END!!
SET TERM;!!
CREATE TABLE Chipsets (
chipsetVARCHAR (20) NOT NULL Primary Key,
placeVARCHAR (20) NOT NULL,
freqcpuINTEGER,
freqmemINTEGER NOT NULL
);
CREATE TABLE Matplatas (
idINTEGER NOT NULL Primary Key,
nameVARCHAR (30) NOT NULL,
chipsetVARCHAR (20) REFERENCES Chipsets (chipset) ON UPDATE CASCADE ON DELETE SET NULL,
agpINTEGER DEFAULT 8,formatVARCHAR (10) DEFAULT "ATX",
soundVARCHAR (10) DEFAULT "AC-97",
priceDECIMAL (10,2) NOT NULL
);
SET TERM!!;
CREATE TRIGGER SET_Mat_ID FOR MatPlatas
BEFORE INSERT AS
BEGIN
NEW. id = GEN_ID (Mat_ID, 1);
END!!
SET TERM;!!
CREATE TABLE Memorys (
idINTEGER NOT NULL Primary Key,
nameVARCHAR (50) NOT NULL,
typeVARCHAR (10) DEFAULT "DDR" NOT NULL,
volumeINTEGER NOT NULL,
frequencyINTEGER NOT NULL,
priceDECIMAL (10,2) NOT NULL
);
SET TERM!!;
CREATE TRIGGER SET_Mem_ID FOR Memorys
BEFORE INSERT AS
BEGIN
NEW. id = GEN_ID (Mem_ID, 1);
END!!
SET TERM;!!
CREATE TABLE Monitors (
idINTEGER NOT NULL Primary Key,
nameVARCHAR (50) NOT NULL,
diagonalINTEGER DEFAULT 17 NOT NULL,
typeVARCHAR (10) NOT NULL,
maxrazrVARCHAR (15),
rekrazrVARCHAR (15),
standartVARCHAR (10),
priceDECIMAL (10,2) NOT NULL
);
SET TERM!!;
CREATE TRIGGER SET_Mon_ID FOR Monitors
BEFORE INSERT AS
BEGIN
NEW. id = GEN_ID (Mon_ID, 1);
END!!
SET TERM;!!
CREATE TABLE Register (
idINTEGER NOT NULL Primary Key,
dataDATE NOT NULL,
customerVARCHAR (30) DEFAULT "Частное лицо",
procINTEGER,
matplINTEGER,
memINTEGER,
monINTEGER,
summaDECIMAL (10,2) NOT NULL
);
SET TERM!!;
CREATE TRIGGER SET_Reg_ID FOR Register
BEFORE INSERT AS
BEGIN
NEW. id = GEN_ID (Reg_ID, 1);
END!!
SET TERM;!!
COMMIT;
Приложение Б (обязательное)
Листинги основных функций
Добавление записи в таблицу "Процессоры"
bool flag_close=true;
IBQuery1->SQL->Clear ();
AnsiString text="",text1="",text2="";
text="insert into Processors (NAME, FREQUENCY";
if (ComboBox1->GetTextLen () >0)
{ text=text+", KERNEL";
text1=",'"+ComboBox1->Text+"'";
}
text=text+", FREQBUS";
if (Edit6->GetTextLen () >0)
{ text=text+", CASHL2";
text2=","+Edit6->Text;
}
try {
IBQuery1->SQL->Add (text+", PRICE) values ('" +
Edit2->Text + "', " + Edit3->Text +text1+", " +
Edit5->Text + text2+", '"+
Edit7->Text+"')");
IBQuery1->ExecSQL ();
}
catch (.) {
Application->MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);
flag_close=false;
}
if (flag_close) FormProcAdd->Close ();
Редактирование записи в таблице "Процессоры"
bool flag_close=true;
IBQuery1->SQL->Clear ();
AnsiString text;
text="update Processors Set ID=" +
Edit1->Text +", NAME='" + Edit2->Text + "', FREQUENCY= " + Edit3->Text;
if (ComboBox1->GetTextLen () >0)
{ text=text+", KERNEL='"+ComboBox1->Text+"'";
}
else text=text+", KERNEL=NULL";
text=text+", FREQBUS= " + Edit5->Text;
if (Edit6->GetTextLen () >0)
{ text=text+", CASHL2="+Edit6->Text;
}
else text=text+", CASHL2=NULL";
text=text+",PRICE= '"+
Edit7->Text+"' where id="+FormProc->IBQuery1->FieldByName ("ID") - >AsString;
try {
IBQuery1->SQL->Add (text);
IBQuery1->ExecSQL ();
}
catch (.) {
Application->MessageBox ("Неверно введены данные", "Ошибка", MB_OK + MB_ICONSTOP);
flag_close=false;
}
if (flag_close) FormProcEdit->Close ();
Удаление записи из таблицы "Процессоры"
if (Application->MessageBox ("Вы действительно хотите удалить запись?", "Подтверждение", MB_YESNO + MB_ICONQUESTION) ==IDNO)
return;
IBQuery2->SQL->Clear ();
IBQuery2->SQL->Add ("delete from Processors where id=: id");
IBQuery2->ExecSQL ();
IBQuery2->SQL->Clear ();
IBQuery2->SQL->Add ("select * from kernels where (kernel=: kernel)");
IBQuery2->Open ();
IBQuery1->Close ();
IBQuery1->Open ();
Отбор записей в таблице "Процессоры"
void __fastcall TFormProc:: FormShow (TObject *Sender)
{
ComboBox1->Clear ();
ComboBox2->Clear ();
IBQuery3->GetFieldNames (ComboBox1->Items);
ComboBox1->ItemIndex=0;
ComboBox2->Clear ();
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Processors");
IBQuery3->Open ();
while (! IBQuery3->Eof)
{
ComboBox2->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);
IBQuery3->Next ();
}
ComboBox2->ItemIndex=0;
}
}
void __fastcall TFormProc:: Button7Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Processors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");
IBQuery1->Open ();
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Processors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");
IBQuery1->Open ();
Button8->Enabled=true;
}
Связывание справочника "Процессоры" и подчиненного справочника "Ядра"
void __fastcall TFormProc:: DataSource1DataChange (TObject *Sender,
TField *Field)
{
IBQuery2->SQL->Clear ();
IBQuery2->SQL->Add ("SELECT * FROM Kernels WHERE kernel=: kernel");
IBQuery2->Open ();
Edit1->Text=IBQuery2->FieldByName ("KERNEL") - >AsString;
Edit3->Text=IBQuery2->FieldByName ("CASHL1") - >AsString;
Edit2->Text=IBQuery2->FieldByName ("PLACE") - >AsString;
Edit4->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"
TSmetaProc *SmetaProc;
// ---------------------------------------------------------------------------
__fastcall TSmetaProc:: TSmetaProc (TComponent* Owner)
: TForm (Owner)
{
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaProc:: Otbor ()
{
ComboBox2->Clear ();
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Processors");
IBQuery3->Open ();
while (! IBQuery3->Eof)
{
ComboBox2->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);
IBQuery3->Next ();
}
ComboBox2->ItemIndex=0;
}
void __fastcall TSmetaProc:: Button1Click (TObject *Sender)
{
SmetaProc->Close ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaProc:: DataSource1DataChange (TObject *Sender,
TField *Field)
{
IBQuery2->SQL->Clear ();
IBQuery2->SQL->Add ("SELECT * FROM Kernels WHERE kernel=: kernel");
IBQuery2->Open ();
Edit1->Text=IBQuery2->FieldByName ("KERNEL") - >AsString;
Edit3->Text=IBQuery2->FieldByName ("CASHL1") - >AsString;
Edit2->Text=IBQuery2->FieldByName ("PLACE") - >AsString;
Edit4->Text=FloatToStrF (IBQuery2->FieldByName ("TECHNOLOGY") - >AsFloat,ffFixed,2,2);
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaProc:: FormCreate (TObject *Sender)
{
ComboBox1->Clear ();
ComboBox2->Clear ();
IBQuery3->GetFieldNames (ComboBox1->Items);
ComboBox1->ItemIndex=0;
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaProc:: ComboBox1Change (TObject *Sender)
{
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaProc:: Button7Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Processors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");
IBQuery1->Open ();
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Processors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");
IBQuery1->Open ();
Button8->Enabled=true;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaProc:: Button8Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Processors");
IBQuery1->Open ();
Button8->Enabled=false;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaProc:: FormShow (TObject *Sender)
{
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaProc:: Button2Click (TObject *Sender)
{
SmetaItog->Edit1->Text=IBQuery1->FieldByName ("NAME") - >AsString+
" <"+IBQuery2->FieldByName ("PLACE") - >AsString+
", "+IBQuery1->FieldByName ("FREQUENCY") - >AsString+" MHz"+
", "+IBQuery1->FieldByName ("KERNEL") - >AsString+
", FSB "+IBQuery1->FieldByName ("FREQBUS") - >AsString+
">";
SmetaItog->ProcID=IBQuery1->FieldByName ("ID") - >AsInteger;
SmetaItog->Label5->Caption=StringReplace (FloatToStrF (IBQuery1->FieldByName ("PRICE") - >AsFloat,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);
SmetaProc->Close ();
SmetaMat->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"
TSmetaMat *SmetaMat;
AnsiString TextQuery="";
// ---------------------------------------------------------------------------
__fastcall TSmetaMat:: TSmetaMat (TComponent* Owner)
: TForm (Owner)
{
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMat:: Otbor ()
{
ComboBox2->Clear ();
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Matplatas "+TextQuery);
IBQuery3->Open ();
while (! IBQuery3->Eof)
{
ComboBox2->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);
IBQuery3->Next ();
}
ComboBox2->ItemIndex=0;
}
void __fastcall TSmetaMat:: Button1Click (TObject *Sender)
{
SmetaMat->Close ();
SmetaProc->Show ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMat:: DataSource1DataChange (TObject *Sender,
TField *Field)
{
IBQuery2->SQL->Clear ();
IBQuery2->SQL->Add ("select * from CHIPSETS where (CHIPSET=: CHIPSET)");
IBQuery2->Open ();
Edit1->Text=IBQuery2->FieldByName ("CHIPSET") - >AsString;
Edit3->Text=IBQuery2->FieldByName ("PLACE") - >AsString;
Edit2->Text=IBQuery2->FieldByName ("FREQCPU") - >AsInteger;
Edit4->Text=IBQuery2->FieldByName ("FREQMEM") - >AsInteger;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMat:: FormCreate (TObject *Sender)
{
ComboBox1->Clear ();
ComboBox2->Clear ();
IBQuery3->GetFieldNames (ComboBox1->Items);
ComboBox1->ItemIndex=0;
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMat:: ComboBox1Change (TObject *Sender)
{
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMat:: Button7Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Matplatas "+TextQuery+" AND ("+ComboBox1->Text+"='"+ComboBox2->Text+"')");
IBQuery1->Open ();
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Matplatas "+TextQuery+" AND ("+ComboBox1->Text+"='"+ComboBox2->Text+"')");
IBQuery1->Open ();
Button8->Enabled=true;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMat:: Button8Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Matplatas "+TextQuery);
IBQuery1->Open ();
Button8->Enabled=false;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMat:: FormShow (TObject *Sender)
{
AnsiString text;
IBQuery1->SQL->Clear ();
text=SmetaProc->IBQuery2->FieldByName ("Place") - >AsString;
TextQuery="where (chipset IN (select Chipset from Chipsets where (place ='"+text+"')))";
IBQuery1->SQL->Add ("Select * From Matplatas "+TextQuery);
IBQuery1->Open ();
Otbor ();
Label7->Caption="Процессор "+SmetaItog->Edit1->Text;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMat:: Button2Click (TObject *Sender)
{
SmetaItog->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+
">";
SmetaItog->MatID=IBQuery1->FieldByName ("ID") - >AsInteger;
SmetaItog->Label6->Caption=StringReplace (FloatToStrF (IBQuery1->FieldByName ("PRICE") - >AsFloat,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);
SmetaMat->Close ();
SmetaMem->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"
TSmetaMem *SmetaMem;
AnsiString TextQueryMem="";
// ---------------------------------------------------------------------------
__fastcall TSmetaMem:: TSmetaMem (TComponent* Owner)
: TForm (Owner)
{
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMem:: Otbor ()
{
ComboBox2->Clear ();
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Memorys "+TextQueryMem);
IBQuery3->Open ();
while (! IBQuery3->Eof)
{
ComboBox2->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);
IBQuery3->Next ();
}
ComboBox2->ItemIndex=0;
}
void __fastcall TSmetaMem:: Button1Click (TObject *Sender)
{
SmetaMem->Close ();
SmetaMat->Show ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMem:: FormCreate (TObject *Sender)
{
ComboBox1->Clear ();
ComboBox2->Clear ();
IBQuery3->GetFieldNames (ComboBox1->Items);
ComboBox1->ItemIndex=0;
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMem:: ComboBox1Change (TObject *Sender)
{
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMem:: Button7Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Memorys "+TextQueryMem+" AND ("+ComboBox1->Text+"='"+ComboBox2->Text+"')");
IBQuery1->Open ();
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Memorys "+TextQueryMem+" AND ("+ComboBox1->Text+"='"+ComboBox2->Text+"')");
IBQuery1->Open ();
Button8->Enabled=true;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMem:: Button8Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Memorys "+TextQueryMem);
IBQuery1->Open ();
Button8->Enabled=false;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMem:: FormShow (TObject *Sender)
{
AnsiString text;
IBQuery1->SQL->Clear ();
text=SmetaMat->IBQuery2->FieldByName ("Freqmem") - >AsString;
TextQueryMem="where (Frequency <= "+text+")";
IBQuery1->SQL->Add ("Select * From Memorys "+TextQueryMem);
IBQuery1->Open ();
Otbor ();
Label1->Caption="Процессор "+SmetaItog->Edit1->Text;
Label3->Caption="Мат. плата "+SmetaItog->Edit2->Text;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMem:: Button2Click (TObject *Sender)
{
SmetaItog->Edit3->Text=IBQuery1->FieldByName ("NAME") - >AsString;
SmetaItog->MemID=IBQuery1->FieldByName ("ID") - >AsInteger;
SmetaItog->Label7->Caption=StringReplace (FloatToStrF (IBQuery1->FieldByName ("PRICE") - >AsFloat,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);
SmetaMem->Close ();
SmetaMon->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"
TSmetaMon *SmetaMon;
// ---------------------------------------------------------------------------
__fastcall TSmetaMon:: TSmetaMon (TComponent* Owner)
: TForm (Owner)
{
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMon:: Otbor ()
{
ComboBox2->Clear ();
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add ("Select Distinct "+ComboBox1->Text+" As Par From Monitors");
IBQuery3->Open ();
while (! IBQuery3->Eof)
{
ComboBox2->Items->Add (IBQuery3->FieldByName ("Par") - >AsString);
IBQuery3->Next ();
}
ComboBox2->ItemIndex=0;
}
void __fastcall TSmetaMon:: Button1Click (TObject *Sender)
{
SmetaMon->Close ();
SmetaMem->Show ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMon:: FormCreate (TObject *Sender)
{
ComboBox1->Clear ();
ComboBox2->Clear ();
IBQuery3->GetFieldNames (ComboBox1->Items);
ComboBox1->ItemIndex=0;
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMon:: ComboBox1Change (TObject *Sender)
{
Otbor ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMon:: Button7Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Monitors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");
IBQuery1->Open ();
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Monitors where "+ComboBox1->Text+"='"+ComboBox2->Text+"'");
IBQuery1->Open ();
Button8->Enabled=true;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMon:: Button8Click (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Monitors");
IBQuery1->Open ();
Button8->Enabled=false;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMon:: FormShow (TObject *Sender)
{
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select * From Monitors");
IBQuery1->Open ();
Otbor ();
Label4->Caption="Процессор "+SmetaItog->Edit1->Text;
Label5->Caption="Мат. плата "+SmetaItog->Edit2->Text;
Label7->Caption="Память "+SmetaItog->Edit3->Text;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMon:: DataSource1DataChange (TObject *Sender,
TField *Field)
{
Edit1->Text=IBQuery1->FieldByName ("MAXRAZR") - >AsString;
Edit2->Text=IBQuery1->FieldByName ("REKRAZR") - >AsString;
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaMon:: Button2Click (TObject *Sender)
{
SmetaItog->Edit4->Text=IBQuery1->FieldByName ("Diagonal") - >AsString+"'' "+
IBQuery1->FieldByName ("NAME") - >AsString+
" <"+IBQuery1->FieldByName ("TYPE") - >AsString+
", "+IBQuery1->FieldByName ("REKRAZR") - >AsString+
", "+IBQuery1->FieldByName ("STANDART") - >AsString+
">";
SmetaItog->MonID=IBQuery1->FieldByName ("ID") - >AsInteger;
SmetaItog->Label8->Caption=StringReplace (FloatToStrF (IBQuery1->FieldByName ("PRICE") - >AsFloat,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);
SmetaMon->Close ();
SmetaItog->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"
TSmetaItog *SmetaItog;
int number;
// ---------------------------------------------------------------------------
__fastcall TSmetaItog:: TSmetaItog (TComponent* Owner)
: TForm (Owner)
{
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaItog:: Button2Click (TObject *Sender)
{
SmetaItog->Close ();
}
// ---------------------------------------------------------------------------
void __fastcall TSmetaItog:: FormShow (TObject *Sender)
{
float result;
result=StrToFloat (Label5->Caption) +StrToFloat (Label6->Caption) +StrToFloat (Label7->Caption) +StrToFloat (Label8->Caption);
Label10->Caption=StringReplace (FloatToStrF (result,ffGeneral,6,2),',','. ',TReplaceFlags () <<rfReplaceAll);
IBQuery1->SQL->Clear ();
IBQuery1->SQL->Add ("Select MAX (ID) as Max_ID from Register");
IBQuery1->Open ();
Подобные документы
Состав и обоснование выбора компонентов персонального компьютера (процессора, материнской платы, комплектующих и периферийных устройств), требования к ним и характеристики. Структурная схема компьютера, его программное обеспечение и расчёт стоимости.
контрольная работа [1,3 M], добавлен 12.02.2015Сущность глобальной компьютеризации и ее распространенность на современном этапе. Основные характеристики персонального компьютера и требования к нему, главные критерии выбора и оценка ассортимента. Порядок выбора конфигурации персонального компьютера.
реферат [398,1 K], добавлен 31.10.2010Конфигурирование персонального компьютера для Вооруженных сил Российской Федерации и обоснование выбора комплектующих для него. Анализ характеристик комплектующих: процессора, материнской платы, видеокарты, жесткого диска и периферийных устройств.
курсовая работа [1,9 M], добавлен 16.07.2013Состав вычислительной системы - конфигурация компьютера, его аппаратные и программные средства. Устройства и приборы, образующие аппаратную конфигурацию персонального компьютера. Основная память, порты ввода-вывода, адаптер периферийного устройства.
презентация [143,8 K], добавлен 15.04.2013Конструкция системного блока, монитора, клавиатуры и мыши персонального компьютера, как элементов его минимальной комплектации, а также их назначение, особенности работы и современные тенденции развития. Отрывки статей о новинках архитектуры компьютера.
реферат [43,4 K], добавлен 25.11.2009Аппаратно-программные средства компьютера, позиционируемого в качестве учебного. Модернизация компонентов персонального компьютера, его потребляемая мощность. Исходная конфигурация компьютера. Установка дополнительных модуля памяти и жесткого диска.
курсовая работа [120,3 K], добавлен 21.01.2013Архитектура персонального компьютера, функциональные и технические характеристики его устройств. Компоненты материнской платы, строение процессора, виды памяти. Принципы работы процессора и обращение к данным. Пути развития персонального компьютера.
курсовая работа [102,4 K], добавлен 11.02.2011Компоновка частей компьютера и связь между ними. Понятие архитектуры персонального компьютера, принципы фон Неймана. Назначение, функции базовых программных средств, исполняемая программа. Виды, назначение, функции, специфика периферийных устройств.
контрольная работа [433,2 K], добавлен 23.09.2009Конфигурация современного персонального компьютера. Назначение и типы монитора, модема, системного блока, принтера, клавиатуры. Материнская плата, процессор, оперативная память. Сборка компьютера, установка компонентов. Безопасность на рабочем месте.
курсовая работа [557,9 K], добавлен 19.11.2009Понятие архитектуры персонального компьютера, компоновка частей компьютера и связи между ними. Составляющие системного блока ПК. Функции центрального процессора, системной платы, оперативного запоминающего устройства, видеокарты и жесткого диска.
реферат [30,7 K], добавлен 28.01.2014