Приднестровский Государственный Университет им. Т. Г. Шевченко
Кафедра АСОИиУ
Курсовая работа
по дисциплине «Технология программирования»
на тему:
Система рейтингого контроля знаний .
Работу выполнили: Работу проверили:
студент ИТФ –96В преподаватели:
Кольцов Е.С. Галюшина О.В.
Тирасполь 1999 г.
Содержание:
Задание на курсовую работу
1.1 Задание
4
1.2 Реализация
4
Введение
Глава I:Системы поддержки принятия решений
1. Система Paradox
Глава II: Особенности объектно-ориентированного анализа
19
Информационная модель
21
Модель состояний для объекта «Операции над БД»
22
Модель состояний для объекта «Ввод в базу»
25
Модель взаимодействия объектов
26
Таблица переходов в состояния для объекта «Операции над БД»
27
Таблица переходов в состояния для объекта «Ввод в бузу»
28
Список событий
29
ДПДД для состояния «Инициализация» объекта «Операции над БД»
40
ДПДД для состояния «Создание БД» объекта «Операции над БД»
40
ДПДД для состояния «Открытие БД» объекта «Операции над БД»
41
ДПДД для состояния «Редактирование БД» объекта «Операции над БД»
41
ДПДД для состояния «Закрытие БД» объекта «Операции над БД»
42
ДПДД для состояния «Ввод данных» объекта «Операции над БД»
42
ДПДД для состояния «Сохранение БД» объекта «Операции над БД»
43
ДПДД для состояния «Неуспешное открытие БД» объекта «Операции над БД»
43
ДПДД для состояния «Обновление БД» объекта «Операции над БД»
44
Текст программы
47
Список использованной литературы
77
Задание на курсовую работу
по дисциплине «Технология программирования»
тема:
Система рейтингого контроля знаний .
1.1 Задание
В данной курсовой работе было необходимо написать программу, с использованием объектно-ориентированного метода программирования и объектно-ориентированного анализа, которая позволяла бы вести учетную запись студентов по десяти предметам с оценкам. В программу заноситься
Ф.И.О. студента, факультет на котором он учится, специальность, которую приобретает и группа соответственно. Программа автоматически считает средней балл и заносит его в базу. Данная программа сортирует, находит и фильтрует данные по студентам, что облегчает поиск или просмотр перед печатью нужных студентов. Результатом программы является вывод перед печатью всех студентов или по каждому студенту соответственно.
1.2 Реализация
Данная программа была реализована на объектно-ориентированном языке С++ и написана в среде разработчика программного обеспечения С++Builder.
Введение
В объектное программирование:
Традиционная технология программирования 70-х годов - структурное
программирование:
- модульное программирование;
- нисходящее программирование;
- структурное проектирование процедур и данных (программирование без goto).
Язык Паскаль - соответствует указанным принципам и был разработан под влиянием идей структурного программирования.
Альтернативный подход - восходящее программирование - предполагает в
простейшем случае создание слоя структур данных и процедур, обеспечивающих
полный набор действий над объектами, которые представлены в данной задаче.
Пример традиционного подхода библиотека стандартных функций.
Следующий шаг - введение в программу объектов. Под объектом
понимается структура данных, которая содержит полную информацию о состоянии
соответствующего физического объекта, который отображается программой. В
Си этому может соответствовать структура struct, в Паскале - запись
(record). Множество объектов одного типа составляют понятие класса.
Объектно-ориентированный подход к разработке программ предполагает, что в
программе устанавливается взаимно-однозначное соответствие между
физическими объектами,
отображаемыми программой, и програмнными объектами, являющимися, по
существу, структурированными переменными (в дальнейшем под термином
"объект" будем понимать программный объект).
Традиционный подход: ---------- переменная тип данных
Объектно-ориентированный подход: физический программный класс объект объект объектов
При создании объектов программист определяет множество функций, при
помощи которых (а точнее, исключительно через которые)над объектом
выполняется некоторое допустимое множество операций.
Такие функции должны иметь обязательный параметр - ссылку на текущий
объект, для которого они вызываются. Сами функции являются неотъемлимой
частью понятия класса объектов, так как они определяют возможные
действия над объектами одного и того же типа (то есть класса).
Фактически определение класса объектов как типа данных и известного набора
функций для выполнения операций над переменными этого типа эквивалентно
понятию базового типа данных (БТД) языка программирования. Единственное
отличие класса от БТД заключается в том, что первый определяется
программистом, а второй встроен в определение языка программирования.
Язык программирования Си++ представляет собой расширение языка Си для программирования объектов и их классов. При этом использование классов эквивалентно вплоть до синтаксиса использованию базовых типов данных.
Глава I
Системы поддержки принятия решений
1. Система Paradox
Paradox представляет из себя реляционную базу данных,
разработанную формой Borland. Данная база данных предназначена как для
непрофессионалов, которым нужно решать задачи типа картотеки и пр.,
так как обладает достаточно развитой и понятной системой меню и
подсказки, так и для профессиональных программистов,
разрабатывающих сложные информационные системы, используя при этом
язык запросов QBE или язык разработки приложений PAL. Кроме версий
под DOS, разработана версия Paradox for Windows. Требования к техническим
средствам и сравнительные характеристики по быстродействию см. Глава ??.
Поддерживаются следующие типы полей:
- алфавитно-цифровые (строковые);
- числовые;
- денежные;
- дата;
- Memo - поля;
- графические;
- OLE - поля;
- BLOB (Binary Large OBject);
Причем, типы полей от Memo до Blob поддерживаются только в Paradox for Windows.
Строковые поля позволяют содержать любую последовательность символов длиной до 255 байт.
Числовые поля могут содержать как целые, так и действительные числа с числов цифр до 15.
Денежные поля - тоже что и числовые с двумя знаками после запятой, отдельный тип служит только для определения Paradox-ом формата вывода данных полей.
Поля даты - соответственно содержат дату и позволяют проводить над собой соответствующие операции сравнения и вычитания.
Мемо - поля содержат любой текст неограниченной длины (вместе с атрибутами текста - шрифт, начертание, цвет и др.)
В графических полях могут содержаться графика типа bitmat.
В OLE - полях могут содержаться объекты от других приложений
Windows.
В BLOB - полях можно хранить любые данные по выбору
пользователя (на самом деле с точки зрения Paradox, Memo, Graphic и
OLE - поля также являются полями типа BLOB). В настоящий момент
возможно хранение объектов MultiMedia, чертежи и другие приложения.
Достаточно удобным является тот факт, что для всех типов полей существует значение "пустое поле".
Также следует отметить тип данных "BLOB", т.к. в полях такого типа можно хранить любые данные произвольного размера, что выгодно отличается от MEMO-полей в dBASE и Clipper, которые позволяют хранить только текст, да и то ограниченного об'ема (4K).
Вся работа по созданию и работе с таблицами, подготовке отчетов и запросов, созданию достаточно сложных приложений, не требующих каких-либо сложных расчетов проводится в единой интегрированной среде при помощи системы меню. Система обладает достаточно широкими возможностями по манипулированию данными и построению отчетов, некоторыми полезными статистическими и алгебраическими функциями для создания расчетных задач.
Функции манипулирования данными можно разделить на следующие достаточно стандартные группы:
- работа с таблицами;
- работа с отдельными записями;
- подготовки отчетов;
- работа с запросами;
- работа с сетью;
- работа с макросами;
- работы с деловой графикой.
Функии работы с таблицами позволяют создавать таблицы,
переименовывать, удалять, копировать и, что достаточно важно,
модифицировать структуру таблиц, даже если в них уже находятся данные.
Также, что немаловажно, все эти операции производятся не над отдельными
файлами (как, скажем, в dBase), а над всем семейством таблиц (включая
файлы данных, индексов, запросов и отчетов). Имеются и такие операции реляционной алгебры, как объединение и вычитание ?таблиц?отношений?.
Функции работы с записями - стандартные (добавить, удалить, отредактировать).
Удобными средствами обладает генератор отчетов - форму отчета
можно "нарисовать" на экране и получить фактически то, что вы видите.
Генератор отчетов позволяет создавать как отчеты в "стандартной"
(табличной) форме, так и отчет в свободной форме (в т.ч. наклейки, деловые
письма и пр.), производить группировку отчета по значениям полей
(причем нескольких уровней вложенности), использовать вычисляемые поля.
Функции запросов реализованы на реляционном языке QBE, причем
отчеты можно формировать и по запросным формам. В Paradox for
Windows построение запросов еще более
упрощено - для связей таблиц друг с другом достаточно просто провести
линии между соответствующими полями.
Функции работы с сетью позволяют получить доступ к удаленной
БД, заблокировать данные для защиты от доступа других пользователей на
время модификации, установить защиту по паролю от несанкционированного
доступа.
Функции работы с макросами позволяют практически создавать сценарий работы с пользователем и делать некоторые простые приложения.
Система деловой графики позволяет по таблицам строить до шести функций в виде различного рода диаграмм и графиков.
Если всех перечисленных возможностей недостаточно, то можно воспользоваться языком построения приложений PAL. Данный язык позволяет воспользоваться всеми перечисленными выше возможностями, т.к. из него можно иметь доступ к функциям основного меню, а также обладает дополнительными средствами, характерными для языков программирования (управляющие структуры типы if - then - else, циклы, переменные, операторы ввода- вывода, дополнительные математические и статистические функции, возможность создания процедур и библиотек процедур) и средствами доступа к продукту фирмы Borland - SQL-link. Средствами Pal можно создавать пользовательские меню, окна и прочие радости для неискушенного пользователя, для которого картинка важнее, чем содержание.
В системе имеется отладчик, с помощью которого можно достаточно удобно отлаживать программы на PAL. К сожалению, для работы программ на PAL необходима либо система Paradox, либо соответствующий модуль исполнения, т.е. проблематичной становится возможность распространения программ (каждый пользователь должен приобрести соответствующий Run-time модуль для исполнения программ.
По показателям быстродействия система находится в первых рядах среди подобных.
Система поддерживает следующие индексы - первичный (не может быть
повторяющихся ключевых полей), вторичный - по одному полю, и составной -
по группе полей. К сожалению, если таблица имеет несколько индексов, то
при работе с записями производится модификация только одного индекса, а
все остальные будут перестраиваться либо по окончании работы с
таблицей, либо по запросу пользователя. Можно сделать этот процесс
"прозрачным" для пользователя (первая возможность - индексы
перестраиваются при закрытии таблицы), на ясно, что это достаточно
сильно замедляет работу с подобными таблицами и причиняет пользователю
некоторые неудобства (особенно если таблицы больших размеров).
Система поддерживает доступ к БД на сервере по сети типа Novell,
3Com, Starlan, Banyan, а также другими, совместимыми с NetBios и
обеспечивает необходимую блокировку данных как на уровне таблиц, так и
на уровне отдельных записей. Paradox for Windows позволяет работать со
всеми типами сетей, поддерживаемых Windows. Система имеет и такую
полезную особенность, как возможность определить во время работы ,
менялись ли данные в таблицах, к которым имеют доступ несколько
пользователей одновременно, хотя это и увеличивает нагрузку на сеть и
может создать некоторые проблемы при наличии большого числа
пользователей .
Данные в таблицах хранятся в их естественном виде без преобразования, а не в виде символьных строк, как это принято в формате dBase, что сказывается на ускорении работы и уменьшении размеров самой базы данных.
Имеются средства экспорта и импорта данных из/в формат
Qattro/Pro, 1-2-3, Symphony, dBase, VisiCalc, а в системе Paradox
for Windows возможно работать с файлами dBase без преобразования.
Таким образом, система достаточна удобна как для неподготовленного пользователя, который хочет решить свою мелкую задачку типа записной книжки - за счет развитой системы меню и подсказки; и удобна для профессионального программиста, который решает достаточно сложные задачи - за счет богатых возможностей, предоставляемых системой, мощного реляционного языка запросов QBE, развитых средств построения отчетов, наличия языка построения приложений, имеющего выход на SQL-link; развитые средства защиты данных от несанкционированного доступа. Все это позволяет строить сложные приложения, работающие в сети со многими пользователями. Но отсутствие возможности получить исполняемый модуль накладывает ограничения на широкое распространение разработанных программ (хотя Run-Time модуль стоит достаточно дешево, все-таки психологически лучше купить одну или несколько программ у одного изготовителя, чем связываться с несколькими) А работа фактически в режиме интерпретации PAL хоть и практически не сказывается при построении сложных информационныо-поисковых систем, в которых время на поиск данных значительно превышает время выполнения расчетов, но накладывает ограничения на системы, в которых кроме задач поиска стоят достаточно сложные задачи обработки данных. Но Paradox for Windows позволяет преодолеть это ограничение, т.к. в нем возможно иметь доступ к функциям, написанных на обычных языках программирования и собранные в динамические библиотеки (DDL). Так что можно пользоваться этой возможностью, хотя перенос программ в среду Windows (в том числе и СУБД) работу этих программ явно не ускоряет.
В пользу выбора данной системы для нашей задачи могут служить следующие факторы (наверное):
- программирование на языке программирования PAL позволяет проводить достаточно сложную обработку данных, позволяет использовать развитые средства диалога с пользователем;
- данные в БД хранятся в их естественном виде, что позволяет увеличить скорость обработки и уменьшить необходимое для хранения данных пространство;
- очень полезные поля типа BLOB - позволяют хранить текст произвольной длины, например, тексты методичек и пр.;
- возможность сетевого взаимодействия позволяет проводить дальнейшее расширение системы до уровня института с подключением других подсистем (скажем, УэО, деканат и пр.) и обеспечивать необходимую в рамках подобных систем защиту данных;
- богатые возможности по экспорту и импорту данных;
- возможность работы под Windows;
- относительно простые, но мощные средства для построения запросов к базе данных.
Хотя, конечно, вышеуказанные ограничения (невозможность получить
.ЕХЕ - файл и интерпретатор) - это для нас явные минусы.
Глава IV
Особенности объектно-ориентированного анализа
При разработке данной курсовой работы был использован объектно- ориентированный подход к написанию данной программы. Проектирование происходило следующим образом:
1. Была сформирована информационная модель, на которой были выделены объекты, оказывающие влияние на ход процесса. В процессе проектирования намеренно в информационную модель были включены некоторые абстрактные типы данных, которые при дальнейшей разработке не образовали объекты. Это было сделано с целью более полно отобразить все отношения и взаимодействия, возникающие при работе программы.
2. Для каждого объекта была сформирована модель состояний, которая отражала события и состояния, в которых мог находиться объект, т.е. его жизненный цикл. Для нескольких объектов не было модели состояний. Это связано с тем, что характер поведения данных объектов является сугубо статическим и не претерпевает значительных изменений. Наоборот, объекты, имеющие динамическое поведение были полно отображены на моделях состояний. Особенность представленных моделей состояний заключается в том, что на них представлены события и действия, которые возникают при возникновении первых.
3. Модель взаимодействия объектов представляет собой графическое представление связей и взаимодействий между всеми объектами, определенными на информационной модели.
4. У объектов, с моделью состояний, была сформирована таблица переходов в состояния, демонстрирующая непротиворечивость модели состояний.
5. Для всех объектов была сформирована таблица всех возможных событий объектов.
6. Для каждого действия у каждого определенного объекта была сформирована ДПДД, отражающая последовательность действий, возникающих при определенном действии.
Информационная модель
Модель состояний для объекта «Операции над БД»
7
Модель состояний для объекта «Ввод данных»
Модель взаимодействия объектов
Таблица переходов в состояния
для объекта «Операции над БД»
|Состоя|O1 |O2 |O3 |O4 |O5 |O6 |O7 |O8 |O9 |
|ние | | | | | | | | | |
|Инициа|- |2 |3 |- |- |- |- |- |- |
|лизаци| | | | | | | | | |
|я | | | | | | | | | |
|Создан|- |- |- |- |- |6 |- |- |- |
|ие | | | | | | | | | |
|Открыт|- |- |- |4 |- |6 |- |- |- |
|ие | | | | | | | | | |
|Неуспе|- |- |- |- |5 |- |- |- |- |
|х | | | | | | | | | |
|Закрыт|1 |- |- |- |- |- |- |- |- |
|ие | | | | | | | | | |
|Редакт|- |- |- |- |- |- |7 |- |- |
|ирован| | | | | | | | | |
|ие | | | | | | | | | |
|Обновл|- |- |- |- |- |6 |- |8 |- |
|ение | | | | | | | | | |
|Ввод в|- |- |- |- |- |- |- |- |9 |
|базу | | | | | | | | | |
|Схране|1 |- |- |- |- |- |- |- |- |
|ние | | | | | | | | | |
Таблица переходов в состояния
для объекта «Ввод данных»
|Состояние|В1 |В2 |В3 |В4 |В5 |В6 |
|Инициализ|- |2 |- |- |- |- |
|ация | | | | | | |
|Отключени|- |- |3 |- |- |- |
|я | | | | | | |
|редактиро| | | | | | |
|вания | | | | | | |
|Формирова|- |- |- |4 |- |- |
|ние | | | | | | |
|поиска, | | | | | | |
|фильт., | | | | | | |
|сортир., | | | | | | |
|Формирова|- |- |- |- |5 |- |
|ние групп| | | | | | |
|Просмотр | | | | | |6 |
|Перед | | | | | | |
|печ. | | | | | | |
|Печать |- |- |- |- |- |- |
Список событий
|Метка |Значение |Данные события|Источник |Предназначение|
|О1 |Инициализация |ID Основной |Основной |Операции |
| | |интерфейс.ID |интерфейс | |
| | |Операции | | |
|О2 |Создание БД |ID Основной |Операция |Создание |
| | |интерфейс.ID | | |
| | |Операции.Созда| | |
| | |ние | | |
|О3 |Открытие БД |ID Основной |Операция |Открытие |
| | |интерфейс.ID | | |
| | |Операции.Откры| | |
| | |тие | | |
|О4 |Неуспех |ID Основной |Операция |Статус |
| | |интерфейс.ID | | |
| | |Операции.Откры| | |
| | |тие.Статус | | |
|О5 |Закрытие БД |ID Основной |Операция |Закрытие |
| | |интерфейс.ID | | |
| | |Операции.Закры| | |
| | |тие | | |
|О6 |Редактирование БД |ID Основной |Операция |Редактирование|
| | |интерфейс.ID | | |
| | |Операции.Редак| | |
| | |тирование | | |
|О7 |Обновление БД |ID Основной |Операция |Обновление |
| | |интерфейс.ID | | |
| | |Операции.Обнов| | |
| | |ление | | |
|О8 |Ввод в БД |ID Основной |Операция |Редактирование|
| | |интерфейс.ID | | |
| | |Операции. | | |
|О9 |Сохранение БД |ID Основной |Операция |Сохранение |
| | |интерфейс.ID | | |
| | |Операции.Сохра| | |
| | |нение | | |
|В1 |Инициализация |ID Основной |Основной |База данных |
| | |интерфейс.ID |интерфейс | |
| | |Операции | | |
|В2 |Отключения |ID Основной |Операция |Переход в |
| |редактирования |интерфейс.ID | |основной |
| | |Операции. | |интерфейс |
|В3 |Формирование поиска, |ID Основной |Основной |Формирование |
| |фильтра, сортировки |интерфейс.ID |интерфейс |фильтра |
| | |Операции.ID | | |
|В4 |Формирование групп |ID Основной |Основной |Формировать |
| | |интерфейс.ID |интерфейс | |
| | |Операции. | | |
|В5 |Просмотр перед |ID Основной |Основной |Просмотр |
| |печатью |интерфейс.ID |интерфейс |учащихся |
| | |Операции.ID | | |
|В6 |Печать |ID Основной |Основной |Учащихся |
| | |интерфейс.ID |интерфейс | |
| | |Операции.ID | | |
ДПДД для состояния Инициализация объекта «Операции над БД»
ДПДД для состояния Создание базы объекта «Операции над БД»
ДПДД для состояния Открытие базы объекта «Операции над БД»
ДПДД для состояния Редактирование базы объекта «Операции над БД»
ДПДД для состояния Закрытие базы объекта «Операции над БД»
ДПДД для состояния Сохранение БД объекта «Операции над БД»
ДПДД для состояния Неуспешное открытие БД объекта «Операции над БД»
ДПДД для состояния Обновление БД объекта «Операции над БД»
Текст программы
В листинг программы был включен весь тот код, который был написан в процессе разработки и включения тех строк кода, которые были автоматически сгенерированы С++ Builder:
1. Заголовочные файлы:
Kur1.h:
//--------------------------------------------------------------------------
-
#ifndef kur1H
#define kur1H
//--------------------------------------------------------------------------
-
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "Grids.hpp"
#include
#include
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
-
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N10;
TMenuItem *N14;
TMenuItem *N16;
TMenuItem *N17;
TOpenDialog *OpenDialog1;
TSaveDialog *SaveDialog1;
TMenuItem *N18;
TMenuItem *N20;
TPrintDialog *PrintDialog1;
TPrinterSetupDialog *PrinterSetupDialog1;
TStatusBar *StatusBar1;
TPanel *Panel1;
TDBGrid *DBGrid1;
TDBNavigator *DBNavigator1;
TMenuItem *N2;
TMenuItem *N5;
TMenuItem *N6;
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
TBitBtn *BitBtn3;
TMenuItem *N7; void __fastcall N10Click(TObject *Sender); void __fastcall N17Click(TObject *Sender); void __fastcall N14Click(TObject *Sender);
void __fastcall N5Click(TObject *Sender); void __fastcall N2Click(TObject *Sender); void __fastcall N16Click(TObject *Sender); void __fastcall N20Click(TObject *Sender); void __fastcall BitBtn1Click(TObject *Sender); void __fastcall BitBtn2Click(TObject *Sender); void __fastcall BitBtn3Click(TObject *Sender); void __fastcall N7Click(TObject *Sender); void __fastcall N4Click(TObject *Sender);
private: // User declarations
public: // User declarations
// AnsiString file2;
__fastcall TForm1(TComponent* Owner);
};
//--------------------------------------------------------------------------
-
extern TForm1 *Form1;
//--------------------------------------------------------------------------
-
#endif
Datam.h:
//--------------------------------------------------------------------------
-
#ifndef DatamH
#define DatamH
//--------------------------------------------------------------------------
-
#include
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
-
class TDM1 : public TDataModule
{
__published: // IDE-managed Components
TDataSource *DataSource1;
TTable *Table1;
TQuery *Query1;
TDataSource *DataSource2; private: // User declarations public: // User declarations
__fastcall TDM1(TComponent* Owner);
};
//--------------------------------------------------------------------------
-
extern TDM1 *DM1;
//--------------------------------------------------------------------------
-
#endif
filename.h:
//--------------------------------------------------------------------------
-
#ifndef filenameH
#define filenameH
//--------------------------------------------------------------------------
-
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
-
class TForm6 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TLabel *Label2;
TBevel *Bevel1;
TButton *Button1;
TButton *Button2; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations
__fastcall TForm6(TComponent* Owner);
};
//--------------------------------------------------------------------------
-
extern TForm6 *Form6;
//--------------------------------------------------------------------------
-
#endif
filter.h:
//--------------------------------------------------------------------------
-
#ifndef filterH
#define filterH
//--------------------------------------------------------------------------
-
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
-
class TForm5 : public TForm
{
__published: // IDE-managed Components
TBevel *Bevel1;
TLabel *Label1;
TLabel *Label2;
TComboBox *ComboBox1;
TEdit *Edit1;
TButton *Button1;
TButton *Button2;
TButton *Button3; void __fastcall Button3Click(TObject *Sender); private: // User declarations public: // User declarations
__fastcall TForm5(TComponent* Owner);
};
//--------------------------------------------------------------------------
-
extern TForm5 *Form5;
//--------------------------------------------------------------------------
-
#endif
Findcust.h:
//--------------------------------------------------------------------------
-
#ifndef filterH
#define filterH
//--------------------------------------------------------------------------
-
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
-
class TForm5 : public TForm
{
__published: // IDE-managed Components
TBevel *Bevel1;
TLabel *Label1;
TLabel *Label2;
TComboBox *ComboBox1;
TEdit *Edit1;
TButton *Button1;
TButton *Button2;
TButton *Button3; void __fastcall Button3Click(TObject *Sender); private: // User declarations public: // User declarations
__fastcall TForm5(TComponent* Owner);
};
//--------------------------------------------------------------------------
-
extern TForm5 *Form5;
//--------------------------------------------------------------------------
-
#endif
Repopt.h:
//--------------------------------------------------------------------------
--
#ifndef ReportH
#define ReportH
//--------------------------------------------------------------------------
--
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
--
class TQRListForm : public TForm
{
__published:
TQuickReport *QuickReport;
TQRBand *Title;
TQRBand *PageHeader;
TQRBand *Detail;
TQRBand *PageFooter;
TQRLabel *QRLabel4;
TQRLabel *QRLabel1;
TQRLabel *QRLabel2;
TQRLabel *QRLabel3;
TQRLabel *QRLabel5;
TQRLabel *QRLabel6;
TQRGroup *QRGroup1;
TQRSysData *QRSysData1;
TQRShape *QRShape1;
TQRDBText *QRDBText3;
TQRDBText *QRDBText1;
TQRDBText *QRDBText9;
TQRDBText *QRDBText10;
TQRDBText *QRDBText2; void __fastcall QRGroup1NeedData(AnsiString &Value);
private:
public: virtual __fastcall TQRListForm(TComponent* AOwner);
};
//--------------------------------------------------------------------------
--
extern TQRListForm *QRListForm;
//--------------------------------------------------------------------------
--
#endif
RichАbt.h:
//--------------------------------------------------------------------------
--
#ifndef RichAbtH
#define RichAbtH
//--------------------------------------------------------------------------
--
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
--
class TForm2 : public TForm
{
__published:
TImage *ProgramIcon;
TButton *OKButton;
public: virtual __fastcall TForm2(TComponent *Owner);
};
//--------------------------------------------------------------------------
--
extern TForm2 *Form2;
//--------------------------------------------------------------------------
--
#endif
Sort.h:
//--------------------------------------------------------------------------
-
#ifndef SortH
#define SortH
//--------------------------------------------------------------------------
-
#include
#include
#include
#include
#include
//--------------------------------------------------------------------------
-
class TForm4 : public TForm
{
__published: // IDE-managed Components
TBevel *Bevel1;
TComboBox *ComboBox1;
TLabel *Label1;
TButton *Button1;
TButton *Button2; void __fastcall ComboBox1Change(TObject *Sender); private: // User declarations public: // User declarations
__fastcall TForm4(TComponent* Owner);
};
//--------------------------------------------------------------------------
-
extern TForm4 *Form4;
//--------------------------------------------------------------------------
-
#endif
Unit1.h:
//--------------------------------------------------------------------------
-
#ifndef Unit1H
#define Unit1H
//--------------------------------------------------------------------------
-
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "Grids.hpp"
#include
//--------------------------------------------------------------------------
-
class TForm3 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TDBEdit *DBEdit3;
TDBEdit *DBEdit6;
TLabel *Label6;
TLabel *Label7;
TDBEdit *DBEdit8;
TButton *Button1;
TButton *Button2;
TButton *Button5;
TLabel *Label5;
TDBEdit *DBEdit4;
TDBEdit *DBEdit1;
TDBEdit *DBEdit2;
TLabel *Label8;
TDBEdit *DBEdit5;
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
TButton *Button3;
TStatusBar *StatusBar1; void __fastcall FormCreate(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Button6Click(TObject *Sender); void __fastcall Button4Click(TObject *Sender); void __fastcall Button5Click(TObject *Sender); void __fastcall Table1AfterOpen(TDataSet *DataSet); void __fastcall Button3Click(TObject *Sender);
private: // User declarations public: // User declarations
__fastcall TForm3(TComponent* Owner);
};
//--------------------------------------------------------------------------
-
extern TForm3 *Form3;
//--------------------------------------------------------------------------
-
#endif
2. Файлы с методами:
Project1.cpp:
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop
//--------------------------------------------------------------------------
-
USEFORM("kur1.cpp", Form1);
USEFORM("Richabt.cpp", Form2);
USERES("Project1.res");
USEFORM("Report.cpp", QRListForm);
USEDATAMODULE("Datam.cpp", DM1);
USEFORM("Unit1.cpp", Form3);
USEFORM("Findcust.cpp", fmFindCust);
USEFORM("Sort.cpp", Form4);
USEFORM("filter.cpp", Form5);
USEFORM("filename.cpp", Form6);
//--------------------------------------------------------------------------
-
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{ try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TQRListForm), &QRListForm);
Application->CreateForm(__classid(TDM1), &DM1);
Application->CreateForm(__classid(TForm3), &Form3);
Application->CreateForm(__classid(TfmFindCust), &fmFindCust);
Application->CreateForm(__classid(TForm4), &Form4);
Application->CreateForm(__classid(TForm5), &Form5);
Application->CreateForm(__classid(TForm6), &Form6);
Application->Run();
} catch (Exception &exception)
{
Application->ShowException(&exception);
} return 0;
}
//--------------------------------------------------------------------------
-
Kur1.cpp:
#include
#include
#pragma hdrstop
#include "kur1.h"
#include "RichAbt.h"
#include "Datam.h"
#include "Report.h"
#include "Unit1.h"
#include "Findcust.h"
#include "Sort.h"
#include "filter.h"
#include "filename.h"
//--------------------------------------------------------------------------
-
#pragma link "Grids"
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString ff;
//--------------------------------------------------------------------------
-
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ ff=Form1->Caption;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N10Click(TObject *Sender)
{
Form1->Caption=ff;
Form6->ShowModal();
N2->Enabled=true;
N20->Enabled=true;
N5->Enabled=true;
N14->Enabled=true;
N16->Enabled=true;
Form1->Caption =Form1->Caption+"->"+DM1->Table1->TableName;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N17Click(TObject *Sender)
{
Close();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N14Click(TObject *Sender)
{
QRListForm->QuickReport->Print();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N5Click(TObject *Sender)
{
DBGrid1->Visible=false;
DBNavigator1->Enabled=false;
BitBtn1->Enabled=false;
BitBtn2->Enabled=false;
BitBtn3->Enabled=false;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N2Click(TObject *Sender)
{
DBGrid1->Visible=true;
DBNavigator1->Enabled=true;
BitBtn1->Enabled=true;
DBGrid1->ReadOnly=true;
BitBtn2->Enabled=true;
BitBtn3->Enabled=true;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N16Click(TObject *Sender)
{
QRListForm->QuickReport->Preview();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N20Click(TObject *Sender)
{
Form3->ShowModal();
DM1->Table1->Refresh();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
DBGrid1->DataSource=DM1->DataSource2; fmFindCust->ShowModal(); if (fmFindCust->ModalResult == mrOk)
DM1->Table1->GotoCurrent(DM1->Table1);
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
DBGrid1->DataSource=DM1->DataSource1;
Form4->ShowModal(); if (Form4->ModalResult == mrOk)
DM1->Table1->GotoCurrent(DM1->Table1);
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
DBGrid1->DataSource=DM1->DataSource1;
Form5->ShowModal(); if (Form4->ModalResult == mrOk)
DM1->Table1->GotoCurrent(DM1->Table1);
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N7Click(TObject *Sender)
{ if ( OpenDialog1->Execute() )
{
Form1->Caption=ff;
N2->Enabled=true;
N20->Enabled=true;
N5->Enabled=true;
N14->Enabled=true;
N16->Enabled=true; if (DM1->Table1->Active == true )
DM1->Table1->Active = false;
DM1->Table1->DatabaseName = ExtractFilePath( OpenDialog1->FileName );
DM1->Table1->TableName = ExtractFileName( OpenDialog1->FileName );
DM1->Table1->Active = true;
Form1->Caption =Form1->Caption+"->"+DM1->Table1->TableName;
}
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N4Click(TObject *Sender)
{
Form2= new TForm2(Application);
Form2->ShowModal();
delete Form2;
}
//--------------------------------------------------------------------------
-
Datam.cpp:
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop
#include "Datam.h"
//--------------------------------------------------------------------------
-
#pragma resource "*.dfm"
TDM1 *DM1;
//--------------------------------------------------------------------------
-
__fastcall TDM1::TDM1(TComponent* Owner)
: TDataModule(Owner)
{
}
//--------------------------------------------------------------------------
-
filename.cpp:
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop
#include "filename.h"
#include "Datam.h"
#include "kur1.h"
//--------------------------------------------------------------------------
-
#pragma resource "*.dfm"
TForm6 *Form6;
//--------------------------------------------------------------------------
-
__fastcall TForm6::TForm6(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
-
void __fastcall TForm6::Button1Click(TObject *Sender)
{
DM1->Table1->Active=false;
DM1->Query1->Active=false;
if (Edit1->Text == "")
Edit1->Text="ITF.db";
TFileStream *Old = new TFileStream("baza1.db", fmOpenRead);
TFileStream *New = new TFileStream(Edit1->Text,fmCreate);
New->CopyFrom(Old, Old->Size);
delete Old; delete New;
DM1->Table1->TableName=Edit1->Text;
DM1->Query1->Active=true;
DM1->Table1->Active=true;
}
//--------------------------------------------------------------------------
-
filter.cpp:
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop
#include "filter.h"
#include "Datam.h"
#include "kur1.h"
//--------------------------------------------------------------------------
-
#pragma resource "*.dfm"
TForm5 *Form5;
//--------------------------------------------------------------------------
-
__fastcall TForm5::TForm5(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
-
void __fastcall TForm5::Button3Click(TObject *Sender)
{
AnsiString filter;
filter=Edit1->Text;
if(ComboBox1->Text != ""){
if(Edit1->Text != "" ){ if (ComboBox1->Text == "L.L.+."){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Where A=""+filter+""");
DM1->Query1->Open();
DM1->Table1->Open();} else if (ComboBox1->Text == "Lръєы№ЄхЄ"){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Where W=""+filter+""");
DM1->Query1->Open();
DM1->Table1->Open();} else if (ComboBox1->Text == "TяхЎшры№эюёЄ№"){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Where Q=""+filter+""");
DM1->Query1->Open();
DM1->Table1->Open();} else if (ComboBox1->Text == "+Ёєяяр"){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Where S=""+filter+""");
DM1->Query1->Open();
DM1->Table1->Open();} else if (ComboBox1->Text == "TЁ.+рыы"){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Where Z>="+filter);
DM1->Query1->Open();
DM1->Table1->Open();}} else
{
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza ");
DM1->Query1->Open();
DM1->Table1->Open();}} else{
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza ");
DM1->Query1->Open();
DM1->Table1->Open();}
DM1->Table1->Refresh();}
//--------------------------------------------------------------------------
-
findcust.cpp:
#include
#pragma hdrstop
#include "FindCust.h"
#include "Datam.h"
//--------------------------------------------------------------------------
-
#pragma resource "*.dfm"
TfmFindCust* fmFindCust;
char field[2]={'A','Z'};
char w1;
//--------------------------------------------------------------------------
-
__fastcall TfmFindCust::TfmFindCust(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
-
void __fastcall TfmFindCust::ComboBox1Change(TObject *Sender)
{ if (ComboBox1->Text == "L.L.+.") w1=field[0]; else if (ComboBox1->Text == "TЁ.+рыы")
{w1=field[1];
//Edit1->Text = "";
} else
ComboBox1->Text ="L.L.+."; w1=field[0];
}
//---------------------------------------------------------------------
void __fastcall TfmFindCust::Edit1Change(TObject *Sender)
{ bool Success;
Set flags; flags Locate(w1,Edit1->Text,flags);
DM1->Table1->Refresh();
}
//--------------------------------------------------------------------------
-
Report.cpp:
//---------------------------------------------------------------------
#include
#pragma hdrstop
#include "Report.h"
#include "Datam.h"
#include "kur1.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TQRListForm *QRListForm;
//---------------------------------------------------------------------
// QuickReport simple list
// - Connect a datasource to the QuickReport component
// - Put QRDBText components on the Detail band
//---------------------------------------------------------------------
__fastcall TQRListForm::TQRListForm(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------
void __fastcall TQRListForm::QRGroup1NeedData(AnsiString &Value)
{
//QuickReport->NewPage();
}
//--------------------------------------------------------------------------
-
RichAbt.cpp:
//--------------------------------------------------------------------------
--
//Borland C++Builder
//Copyright (c) 1987, 1997 Borland International Inc. All Rights Reserved.
//--------------------------------------------------------------------------
--
//---------------------------------------------------------------------
#include
#pragma hdrstop
#include "RichAbt.h"
//--------------------------------------------------------------------------
--
#pragma resource "*.dfm"
TForm2 *Form2;
//--------------------------------------------------------------------------
--
__fastcall TForm2::TForm2(TComponent *Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
--
Sort.cpp:
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop
#include "Sort.h"
#include "Datam.h"
//--------------------------------------------------------------------------
-
#pragma resource "*.dfm"
TForm4 *Form4;
//--------------------------------------------------------------------------
-
__fastcall TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
-
void __fastcall TForm4::ComboBox1Change(TObject *Sender)
{ if (ComboBox1->Text == "L.L.+."){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Order by A asc");
DM1->Query1->Open();
DM1->Table1->Open();} else if (ComboBox1->Text == "Lръєы№ЄхЄ"){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Order by W asc");
DM1->Query1->Open();
DM1->Table1->Open();} else if (ComboBox1->Text == "TяхЎшры№эюёЄ№"){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Order by Q asc");
DM1->Query1->Open();
DM1->Table1->Open();} else if (ComboBox1->Text == "+Ёєяяр"){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Order by S asc");
DM1->Query1->Open();
DM1->Table1->Open();} else if (ComboBox1->Text == "Lръєы№ЄхЄ"){
DM1->Query1->SQL->Clear();
DM1->Query1->SQL->Append("Select * From baza Order by Z asc");
DM1->Query1->Open();
DM1->Table1->Open();}
DM1->Table1->Refresh();
}
//--------------------------------------------------------------------------
-
Unit1.cpp:
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop
#include "Unit1.h"
#include "Datam.h"
//--------------------------------------------------------------------------
-
#pragma link "Grids"
#pragma resource "*.dfm"
TForm3 *Form3;
char predmet1[9]={'H','N','U','J','M','I','K','1','O'};
char predmet2[9]={'E','D','C','R','F','V','T','G','B'};
double ozenka1[12];
int i=0;
double r;
//--------------------------------------------------------------------------
-
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::FormCreate(TObject *Sender)
{
//-юсрты хь эютє¦ чряшё№ т срчє
DM1->Table1->Append();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::Button1Click(TObject *Sender)
{ if(DM1->Table1->State == dsInsert||DM1->Table1->State == dsEdit)
DM1->Table1->Post();
DM1->Table1->Append(); for(i=0;iEnabled=true;
Button2->Enabled=true;
DBEdit8->DataField='x';
DBEdit5->DataField='y';
DBEdit5->ReadOnly=false;
DBEdit8->ReadOnly=false;
DBEdit1->ReadOnly=false;
DBEdit2->ReadOnly=false;
DBEdit4->ReadOnly=false;
DBEdit6->ReadOnly=false;
DBEdit4->Visible=false;
Label8->Visible=false;
DM1->Table1->Refresh();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::Button6Click(TObject *Sender)
{ if ( !DM1->Table1->Bof )
DM1->Table1->Prior(); i=10;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::Button4Click(TObject *Sender)
{ if ( !DM1->Table1->Eof )
DM1->Table1->Next(); i=10;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::Button2Click(TObject *Sender)
{
DM1->Table1->Delete();
DM1->Table1->Refresh(); if(DM1->Table1->Eof && DM1->Table1->Bof )