Система рейтингового контроля знаний

Приднестровский Государственный Университет
им. Т. Г. Шевченко
Кафедра АСОИиУ
Курсовая работа
по дисциплине «Технология программирования»
на тему:
Система рейтингого контроля знаний .
Работу выполнили: Работу проверили:
студент ИТФ –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.
Введение
A iauaeoiia i?ia?aiie?iaaiea:
O?aaeoeiiiay oaoiieiaey i?ia?aiie?iaaiey 70-o aiaia - no?oeoo?iia i?ia?aiie?iaaiea:
- iiaoeuiia i?ia?aiie?iaaiea;
- ienoiayuaa i?ia?aiie?iaaiea;
- no?oeoo?iia i?iaeoe?iaaiea i?ioaao? e aaiiuo (i?ia?aiie?iaaiea aac goto).
?cue Ianeaeu - niioaaonoaoao oeacaiiui i?eioeiai e aue ?ac?aaioai iia aeeyieai eaae
no?oeoo?iiai i?ia?aiie?iaaiey.
Aeuoa?iaoeaiue iiaoia - ainoiayuaa i?ia?aiie?iaaiea - i?aaiieaaaao a i?inoaeoai neo?aa
nicaaiea neiy no?oeoo? aaiiuo e i?ioaao?, iaania?eaa?ueo iieiue iaai? aaenoaee iaa
iauaeoaie, eioi?ua i?aanoaaeaiu a aaiiie caaa?a. I?eia? o?aaeoeiiiiai iiaoiaa aeaeeioaea
noaiaa?oiuo ooieoee.
Neaao?uee oaa - aaaaaiea a i?ia?aiio iauaeoia. Iia iauaeoii iiieiaaony no?oeoo?a aaiiuo,
eioi?ay niaa??eo iieio? eioi?iaoe? i ninoiyiee niioaaonoao?uaai oece?aneiai iauaeoa,
eioi?ue ioia?a?aaony i?ia?aiiie. A Ne yoiio ii?ao niioaaonoaiaaou no?oeoo?a struct, a
Ianeaea - caienu (record). Iii?anoai iauaeoia iaiiai oeia ninoaaey?o iiiyoea eeanna. Iauaeoii-
i?eaioe?iaaiiue iiaoia e ?ac?aaioea i?ia?aii i?aaiieaaaao, ?oi a i?ia?aiia onoaiaaeeaaaony
acaeiii-iaiicia?iia niioaaonoaea ia?ao oece?aneeie iauaeoaie,
ioia?a?aaiuie i?ia?aiiie, e i?ia?aiiiuie iauaeoaie, yaey?ueieny, ii nouanoao,
no?oeoo?e?iaaiiuie ia?aiaiiuie (a aaeuiaeoai iia oa?ieiii "iauaeo" aoaai iiieiaou i?ia?aiiiue
iauaeo).
O?aaeoeiiiue iiaoia: ---------- ia?aiaiiay oei aaiiuo
Iauaeoii-i?eaioe?iaaiiue iiaoia:
oece?aneee i?ia?aiiiue eeann iauaeo iauaeo iauaeoia
I?e nicaaiee iauaeoia i?ia?aiieno ii?aaaeyao iii?anoai ooieoee, i?e iiiiue eioi?uo (a
oi?iaa, enee??eoaeuii ?a?ac eioi?ua)iaa iauaeoii auiieiyaony iaeioi?ia aiionoeiia iii?anoai
iia?aoee.
Oaeea ooieoee aie?iu eiaou iaycaoaeuiue ia?aiao? - nnueeo ia oaeouee iauaeo, aey
eioi?iai iie aucuaa?ony. Naie ooieoee yaey?ony iaiouaieeiie ?anou? iiiyoey eeanna
iauaeoia, oae eae iie ii?aaaey?o aicii?iua aaenoaey iaa iauaeoaie iaiiai e oiai ?a oeia (oi
anou eeanna).
Oaeoe?anee ii?aaaeaiea eeanna iauaeoia eae oeia aaiiuo e ecaanoiiai iaai?a ooieoee aey
auiieiaiey iia?aoee iaa ia?aiaiiuie yoiai oeia yeaeaaeaioii iiiyoe? aaciaiai oeia aaiiuo
(AOA) ycuea i?ia?aiie?iaaiey. Aaeinoaaiiia ioee?ea eeanna io AOA caee??aaony a oii, ?oi
ia?aue ii?aaaeyaony i?ia?aiienoii, a aoi?ie ano?iai a ii?aaaeaiea ycuea i?ia?aiie?iaaiey.
?cue i?ia?aiie?iaaiey Ne++ i?aanoaaeyao niaie ?anoe?aiea ycuea Ne aey
i?ia?aiie?iaaiey iauaeoia e eo eeannia. I?e yoii eniieuciaaiea eeannia yeaeaaeaioii aieiou
ai neioaenena eniieuciaaie? aaciauo oeiia aaiiuo.
Глава 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
//---------------------------------------------------------------------------
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
//---------------------------------------------------------------------------
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
//---------------------------------------------------------------------------
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
//---------------------------------------------------------------------------
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
//---------------------------------------------------------------------------
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
//----------------------------------------------------------------------------
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
//----------------------------------------------------------------------------
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
//---------------------------------------------------------------------------
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
//---------------------------------------------------------------------------
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
#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 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;i 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 )
Button2->Enabled=false;
DBEdit4->Visible=false;
Label8->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button5Click(TObject *Sender)
{
if(i Text = name;
r=atoi(name);
ozenka1[i]=r;
delete name;
r=0;
DBEdit5->DataField=predmet1[i];
DBEdit8->DataField=predmet2[i];
i++;
Button3->Enabled=true;
}
else {if(i==9){
int Size = DBEdit8->GetTextLen();
char *name = new char[++Size];
DBEdit8->GetTextBuf(name,Size);
DBEdit8->Text = name;
r=atoi(name);
ozenka1[i]=r;
delete name;
r=0;}
ozenka1[10]=(ozenka1[0]+ozenka1[1]+ozenka1[2]+ozenka1[3]+ozenka1[4]+ozenka1[5]+o
zenka1[6]+ozenka1[7]+ozenka1[8]+ozenka1[9])/10;
DBEdit4->SelText=ozenka1[10];
DM1->Table1->FieldValues["Z"] = ozenka1[10];
Button5->Enabled=false;
Button3->Enabled=false;
DBEdit5->ReadOnly=true;
DBEdit8->ReadOnly=true;
DBEdit1->ReadOnly=true;
DBEdit2->ReadOnly=true;
DBEdit4->ReadOnly=true;
DBEdit6->ReadOnly=true;
DBEdit4->Visible=true;
Label8->Visible=true;
}}
//---------------------------------------------------------------------------
void __fastcall TForm3::Table1AfterOpen(TDataSet *DataSet)
{
if(DM1->Table1->Eof && DM1->Table1->Bof )
Button2->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button3Click(TObject *Sender)
{
if(i>=0)
{i--;
DBEdit5->DataField=predmet1[i];
DBEdit8->DataField=predmet2[i];
}
else
Button3->Enabled=false;
Button5->Enabled=true;}
//---------------------------------------------------------------------------
Список использованной литературы
1. Трахтенгерц Э.А. «Компьютерная поддержка принятия решений»
2. Том Сван «Программирование в Borland C++ 5.02»
3. «Объектно-ориентированный анализ»
4. Мэт Теллес «Borland С++ Builder»