Автоматизация расчёта нагрузки и преподавателей ВУЗа
Курсовая работа
По дисциплине Информатика и программирование
Автоматизация расчёта нагрузки и преподавателей ВУЗа
программирование база данных приложение
Введение
Целью данной курсовой
работы является разработка прикладной программы в среде Borland C++Builder 6.0 для реализации функции
автоматизации расчёта и преподавателей ВУЗа. Для достижения цели необходимо создание
гибкого интерфейса, а также осуществление следующих задач:
автоматизация
ввода информации о курсах и группах, составление расписания проведения занятий для
каждого преподавателя и каждой группы, реализация возможности сохранения, просмотра,
изменения составленных документов, реализация возможности работы с буфером обмена,
настойка внешнего вида окна, а также обеспечение защиты информации. Дополнительной
задачей является представление разработанной программы как единого проекта, управляемого
через пользовательский интерфейс.
В качестве среды
разработки в данной курсовой работе использована визуальная среда Borland C++Builder. Данный выбор обусловлен
следующими факторами:
Borland C++ Builder
является средой быстрой разработки приложений. В На сегодняшний день С++ является
одним из самых распространенных языков программирования. Его преимуществами являются
гибкость, переносимость, универсальность. На этом языке написаны самые распространённые
на сегодняшний день операционные системы, такие как Windows и Linux. Язык С++ может быть использован
для решения практически любых задач.
Язык С++ не требует
обязательного применения объектов в программах Это позволяет модернизировать ранее
на писанные и создавать новые программы, пользуясь практически синтаксисом С и выполняя
лишь более строгие требования С++ к типам: наличие в начале программы прототипов
всех функций, определенных пользователей явного приведения типов для указателей
на разные типы и некоторых других. Архитектура современных операционных систем становится
все более и более объектно-ориентированной. При работе в таких системах не обойтись
без понимания использования таких основополагающих понятий объектно-ориентированного
программирования, как объекты, инкапсуляция и полиморфизм. основе систем быстрой
разработки (RAD-систем, Rapid Application Development — среда быстрой paзpa6oтки
приложений) лежит технология визуального проектирования и событийного программирования,
суть которой заключается в том, что среда разработки берет на себя большую часть
работы по генерации кода программы, оставляя программисту работу по конструированию
диалоговых окон и написанию функций обработки событий. Производительность программиста
при использовании RAD систем существенно увеличивается. Система объектно-ориентированного
программирования Borland C++ Builder, предназначена для операционных систем Windows.
Интегрированная среда C++ Builder обеспечивает скорость визуальной разработки, продуктивность
повторно используемых компонентов в сочетании с мощью языковых средств C++, усовершенствованными
инструментами и разномасштабными средствами доступа к базам данных.
Профессиональные
средства языка C++ интегрированы в визуальную среду разработки. C++Builder предоставляет
быстродействующий компилятор с языка Borland C++, эффективный инкрементальный загрузчик
и гибкие средства отладки как на уровне исходных инструкций, так и на уровне ассемблерных
команд - в расчете удовлетворить высокие требования программистов-профессионалов.
С++ Builder может
быть использован везде, где требуется дополнить существующие приложения расширенным
стандартом языка C++, повысить быстродействие и придать пользовательскому интерфейсу
качества профессионального уровня.
Профессиональные
средства языка C++ интегрированы в визуальную среду разработки. C++Builder предоставляет
быстродействующий компилятор с языка Borland C++, эффективный инкрементальный загрузчик
и гибкие средства отладки как на уровне исходных инструкций, так и на уровне ассемблерных
команд - в расчете удовлетворить высокие требования программистов-профессионалов.
Конструирование
по способу "drag-and-drop " позволяет создавать приложение простым перетаскиванием
захваченных мышью визуальных компонентов из Палитры на форму приложения. Инспектор
объектов предоставляет возможность оперировать со свойствами и событиями компонентов,
автоматически создавая заготовки функций обработки событий, которые наполняются
кодом и редактируются в процессе разработки.
Свойства, методы
и события - это именно те элементы языка, которые обеспечивают быструю разработку
приложений в рамках объектно-ориентированного программирования. «Свойства» позволяют
легко устанавливать разнообразные характеристики объектов. «Методы» производят определенные,
иногда довольно сложные, операции над объектом. «События» связывают воздействия
пользователя на объекты с кодами реакции на эти воздействия. События могут возникать
при таких специфических изменениях состояния объектов как обновление данных в интерфейсных
элементах доступа к базам данных. Работая совместно, свойства, методы и события
образуют среду RAD (Rapid Application Development) быстрого и интуитивного программирования
надежных приложений для Windows.
Визуальное наследование
форм воплощает важнейший аспект объектно-ориентированного программирования в удобном
для пользования инструменте визуального проектирования. Характеристики новой формы
приложения могут быть унаследованы от любой другой существующей формы, что обеспечивает
централизованную репродукцию изменений пользовательского интерфейса, облегчает контроль
за кодом и уменьшает временные затраты на введение новых качественных атрибутов.
Мастер инсталляции
руководит созданием унифицированных дистрибутивных пакетов для разработанных приложений.
Исходные тексты
Библиотеки Визуальных Компонентов облегчают разработку новых компонентов на базе
готовых примеров.
Отрытые инструменты
API могут быть непосредственно интегрированы в визуальную среду системы. Вы сможете
подключить привычный текстовый редактор или создать собственного мастера для автоматизации
выполнения повторяющихся процедур.
Расширенная математическая
библиотека содержит дополнительные унифицированные функции статистических и финансовых
вычислений.
Интерфейс Borland
C++ Builder.
В состав интерфейса
С++ Builder входят:
• Палитра компонент содержит более 100 повторно
используемых компонентов, предлагаемых для построения приложений.
• Редактор
форм предназначен
для создания интерфейса программы с пользователем.
• Редактор
кода предназначен
для написания текста программы, в частности, функций обработки событий.
• Инспектор
объектов
позволяет визуально устанавливать свойства объектов без необходимости рутинного
программирования и содержит события, которые можно связывать с кодами реакции объектов
на их возникновение.
• Хранилище
объектов
содержит такие объекты, как формы и модули данных, которые разделяются многими приложениями
с целью уменьшения временных затрат при разработке.
C++Builder реализует
визуальную методику построения приложений посредством выбора из Палитры компонентов
нужных управляющих элементов . С каждым компонентом (например, кнопкой) связаны
свойства, которые меняют ее вид и поведение. Любой компонент может вызывать серию
событий, которые определяют его реакцию на различные воздействия[1].
1.Основные
подходы к разработке программных средств
В разработанном приложении интерфейс
пользователя организован при помощи компонентов меню, компонентов работы с базами
данных, а также при помощи механизма обмена, осуществляемого при помощи буфера обмена.
Визуальная разработка приложений
баз данных.
Разработка Систем Управления Базами Данных
(СУБД) раньше всегда была очень трудоемким и медленным процессом, отягощенным необходимостью
учитывать массу специфических деталей подсистем обслуживания различных баз данных
на низком уровне. C++Builder принимает на себя выполнение этих рутинных операций
позволяя сосредоточиться на решении основной задачи.
Все приложения СУБД, создаваемые в среде
C++Builder, являются клиентами в архитектуре программного взаимодействия клиент/сервер.
Клиент выдает запросы к серверу базы данных на получение или передачу информации.
Сервер обрабатывает запросы от множества клиентов одновременно, координируя
доступ к данным и их обновление.
Все приложения СУБД, создаваемые в среде
C++Builder, основаны на компонентах пользовательского интерфейса с некоторой базой
данных, которые предоставляют удивительно легкие в использовании средства разработки
специальных приложений. Львиная доля времени процесса разработки уходит на визуальную
установку свойств выбранных компонент. Удачно спроектированное приложение всегда
обеспечивает простоту просмотра и редактирования данных пользователем, независимо
от сложности структуры используемой модели данных. Данная глава с очевидностью покажет,
что формы приложений СУБД для типично сложной системы в архитектуре взаимодействия
клиент/сервер действительно могут быть созданы в интегрированной среде C++Builder
весьма быстро и с малыми усилиями.
Воздействия на компоненты многогранны: их
реакция на события обеспечивается стандартными методами, а установка значений свойств
может производиться во время работы приложения. Таким образом, простое вначале приложение
в процессе разработки постепенно усложняется, чтобы в конце концов выглядеть совершенно
профессиональным программным изделием.
Организация доступа к базам данных
C++Builder организует доступ приложения к
данным таким образом, чтобы полностью отстранить разработчика от специфики обслуживания
конкретной базы данных.
Механизм BDE
Ключевой механизм BDE (Borland Database Engine),
обеспечивающий работу визуальных компонент баз данных, действует как интерфейс между
вашим приложением и самой базой данных. BDE реализован в виде набора системных DLL
файлов. Взаимодействие компонентных объектов с BDE никак не специфицирует конкретную
базу данных и не зависит от реализации обмена информацией на нижнем уровне иерархии.
Именно BDE обращается в свою очередь к драйверам, специфическим для базы данных
указанного типа, возвращая вашему приложению запрошенные фактические данные. BDE
играет роль, аналогичную контроллеру драйверов ODBC (Open Database Connectivity)
производства фирмы Microsoft, изолируя приложения от нижнего уровня взаимодействия
с базой данных и увеличивая общую производительность связи за счет использования
кэш-памяти. Используя BDE, вы получаете доступ ко всем локальным стандартным базам
данных вашего компьютера, к источникам данных ODBC и к SQL серверам баз данных в
архитектуре сетевой связи клиент/сервер.
Унифицированная технология BDE применяется
во всех продуктах производства корпорации Borland: C++Builder, Borland C++, Delphi,
IntraBuilder и JBuilder. Чтобы получить доступ к содержимому базы данных, приложению
необходимо знать только идентификатор ее псевдонима (alias).
Рис. 1 изображает иерархическую структуру
взаимодействия вашего приложения с базами данных.
Рис. 1. Структура взаимодействия приложений
с базами данных
При добавлении компонент баз данных к форме
вашего приложения соединение с BDE происходит автоматически - никакого программирования
не требуется. Визуальный процесс соединения полностью находится под вашим контролем.
Во время выполнения программы BDE делает необходимые запросы и получает данные,
заказанные свойствами каждой используемой компоненты.[6]
Шаги создания
таблицы БД при помощи DataBase Desktop представлены на рис.2,3,4,5.
Рис2 Внешний вид
окна Database Desktop
Рис 3Подключение
к БД
Рис4Окно выбора
типа подключения
Рис 5Создание
таблицы БД
2.Характеристика
визуальных компонентов среды разработки Builder 6.0, используемых в
приложении
2.1 Компоненты
главное и всплывающее меню(Main Menu, Popur Menu(Standart))
Компоненты оформления
приложений:
MainMenu создаёт на форме главное меню
в виде строки с ниспадающими списками.
Содержимое пункта
меню определяется свойством –Items[i]-задаёт значение пункта меню с номером i.
Значение пункта
меню можно вводить программно: MainMenu->Items->Items[0]= “ ”.
В разработанном
приложении данные компоненты обеспечивают удобный интерфейс между приложением и
пользователем, позволяют пользователю управлять приложением (использованы на формах:
«Управление приложением» и «Автоматизация расчёта нагрузки и преподавателей ВУЗа»).
2.2 Компоненты,
реализующие работу с БД
Компонент TDataSource
Компонент DataSource
действует как посредник между компонентами TDataSet (TTable, TQuery, TStoredProc)
и компонентами Data Controls - элементами управления, обеспечивающими представление
данных на форме. Компоненты TDataSet управляют связями с библиотекой Borland Database
Engine (BDE), а компонент DataSource управляет связями с данными в компонентах Data
Controls.
В типичных приложениях БД компонент DataSource,
как правило, связан с одним компоненом TDataSet (TTable или TQuery) и с одним или
более компонентами Data Controls (такими, как DBGrid, DBEdit и др.). Связь этого
компонента с компонентами TDataSet и DataControls осуществляется с использованием
следующих свойств и событий:
·
Cвойство
DataSet компонента DataSource идентифицирует имя компонента TDataSet. Можно присвоить
значение свойству DataSet на этапе выполнения или с помощью инспектора объектов
на этапе проектирования.
·
Cвойство
Enabled компонента DataSource активизирует или останавливает взаимосвязь между компонентами
TDataSource и Data Controls. Если значение свойства Enabled равно true, то компоненты
Data Controls, связанные с TDataSource, воспринимают изменения набора данных. Использование
свойства Enabled позволяет временно разъединять визуальные компоненты Data Controls
и TDataSource, например, для того, чтобы в случае поиска в таблице с большим количеством
записей не отображать на экране пролистывание всей таблицы.
Компонент TTable
Наиболее простым
способом обращения к таблицам баз данных является использование компонента TTable,
предоставляющего доступ к одной таблице. Для этой цели наиболее часто используются
следующие свойства:
·
Active
- указывает, открыта (true) или нет (false) данная таблица.
·
DatabaseName
- имя каталога, содержащего искомую таблицу, либо псевдоним (alias) удаленной БД
(псевдонимы устанавливаются с помощью утилиты конфигурации BDE, описание которой
присутствует во многих источниках, посвященных продуктам Borland, либо с помощью
SQL Explorer, вызываемого с помощью пункта меню Database/Explore). Это свойство
может быть изменено только в случае, если таблица закрыта (ее свойство Active равно
false).
·
TableName
- имя таблицы.
·
Exclusive
- если это свойство принимает значение true, то никакой другой пользователь не может
открыть таблицу, если она открыта данным приложением. Если это свойство равно false
(значение по умолчанию), то другие пользователи могут открывать эту таблицу.
·
IndexName
- идентифицирует вторичный индекс для таблицы. Это свойство нельзя изменить, пока
таблица открыта.
·
MasterFields
- определяет имя поля для создания связи с другой таблицей.
·
MasterSource
- имя компонента TDataSource, с помощью которого TTable будет получать данные из
связанной таблицы.
Наиболее часто
при работе с компонентом TTable используются следующие методы:
·
Open и
Close устанавливают значения свойства Active равными True и False соответственно.
·
Refresh
позволяет заново считать набор данных из БД.
·
First,
Last, Next, Prior перемещают указатель текущей записи на первую, последнюю, следующую
и предыдущую записи соответственно.
·
Insert,
Edit, Delete, Append - переводят таблицу в режимы вставки записи, редактирования,
удаления, добавления записи соответственно.
·
Post -
осуществляет физическое сохранение измененных данных.
·
Cancel
- отменяет внесенные изменения, не сохраненные физически.
·
FieldByName
- предоставляет возможность обращения к данным в полях по имени поля.
В данном приложение компоненты,
реализующие работу с БД использованы с целью обеспечения простоты просмотра и редактирования
данных пользователем, независимо от сложности структуры используемой модели данных.[1]
3.Программная
реализация приложения
3.1 Дерево
форм приложения
Рис.1
3.2.1Форма
«Автоматизация расчёта нагрузки и преподавателей ВУЗа» является главной формой разработанного
приложения, выполняет следующие функции:
1.Возможность
выбора режима работы с приложением;
1.1Переключение
на режим просмотра (файлы базы данных недоступны для просмотра);
1.2Переключение
на режим редактирования файлов баз данных (файлы можно просматривать и редактировать);
1.3Остановка работы
приложения, выход из приложения;
1.4Поддерживается
режим быстрого вызова через заранее фиксированные сочетания клавиш;
2.Защита информации
(функция поддерживается только в режиме редактирования);
2.1Обеспечен ввод
кода в появившееся окно ввода;
2.2Обеспечен ввод
графического кода;
3Возможность управлять
цветом формы при помощи пунктов меню;
4.Возможность
использовать «горячих клавиш»
5.Возможность
использовать всплывающие подсказки для комфорта работы пользователя.
Её внешний вид
представлен на рис6
Рис6 Внешний вид
формы «Автоматизация расчёта нагрузки и преподавателей ВУЗа»
Листинг модуля
формы приведён в приложении А
3.2.2Форма
«Управление приложением» вызывается автоматически в процессе работы приложения при
условии правильно введённого кода (в случае выбора режима редактирования) или при
выборе режима просмотра.
Форма служит для
реализации следующих функций:
1.Возможность
модификации базы данных;
2.Функция, использующая
вычисляемое поле;
3.Функция фильтрации
данных БД;
4.Функция поиска
сведений БД;
5.Возможность
переключения на другие формы приложения.
Её внешний вид
представлен на рис7
Рис7 Внешний вид
формы «Форма управления приложением»
Листинг модуля
формы приведён в приложении В
3.2.3Форма
«Текстовый редактор» организует следующие функции:
1.Создание нового
документа;
2Открытие файла;
3Сохранение файла;
4Сохранение файла
под указанным именем;
2.Использование
буфера обмена :
2.1Функция «вырезать»;
2.2Функция «копировать»;
2.3Функция «вставить»;
3.Вызов формы
«О программе» через пункт меню «Справка»;
Её внешний вид
представлен на рисунке
Рис8 Внешний вид
формы «Текстовый редактор»
Листинг модуля
формы приведён в приложении А
3.2.4Форма
«Справка» содержит сведения о программе, её вызов инициализируется через пункт меню
формы «Текстовый редактор»;
Её внешний вид
представлен на рис9
Рис9 Внешний вид
формы «Справка»
Листинг модуля
формы приведён в приложении А
3.2.5Форма
«Создание расписания» содержит три вкладки. Вкладка «Расписание для групп» организует
следующие функции:
1.Возможность
использования механизма базы данных с целью создания расписания для групп;
2.Поддерживает
функцию фильтрации данных таблицы;
Внешний вид первой
вкладки представлен на рис10
Рис10 Внешний
вид вкладки «Расписание для групп»
3.2.5.1.Вкладка
«Расписание для преподавателей»:
1.Возможность
выбора преподавателя из списка преподавателей с целью создания расписания.
2.Автоматическое
вызов формы, содержащей расписание для преподавателя на основе данных таблицы с
вкладки «Расписание для групп» Её внешний вид представлен на рис11
Рис11 Внешний
вид вкладки «Расписание для преподавателей»
3.2.5.2.Вкладка
«Справка» служит для реализации следующих функций:
1.Выбор раздела
справки;
2.Загрузка файла
данных, содержащего текст справки;
3.6Форма «Расписание»
служит для отображения расписания для преподавателей. Форма создаётся автоматически
при нажатии на кнопку в процессе работы приложения. Содержит таблицу, в которую
автоматически записываются данные. Данные, содержащиеся в таблице уничтожаются при
закрытии формы.
Внешний вид вкладки
представлен на рис12
Рис12 Внешний
вид вкладки «Справка»
Листинг модуля
формы «Создание расписания» приведён в приложении А
4.Тестирование
приложения
Протестируем разработанное
приложение на возможность реализации перечисленных функций с целью проверки работоспособности
приложения.
4.1 Тест 1
При тестировании
приложения на возможность изменения внешнего вида окна получены следующие результаты
(рис. 13)
Рис.13Выбор цвета
формы приложения из перечня возможных цветов
Изменение цвета
формы происходит в момент нажатия кнопки пункта меню «Закраска формы».(рис14,15)
Рис.14Результат
изменения цвета1
Рис 15Результат
изменения цвета2
4.2Тест2
Протестируем приложение
на возможность выбора режима работы с базами данных.
Рис16 Выбор режима
работы
После выбора режима
необходимо нажать на кнопку «Работать!».
В режиме просмотра
сведения, содержащиеся в базе данных остаются недоступными для пользователя.(рис16,17)
Рис 17Работа в
режиме просмотра
При выбранном
режиме редактирования нажатие кнопки «Работать!» даст следующий результат:
На форме появится
ещё одно окно ввода, служащее для ввода пароля, а также ещё одна кнопка «Подтвердите
правильность пароля».
Кроме того, высветится
сообщение следующего вида (рис 18)
Рис18 Сообщение
о необходимости ввода пароля
Рис19 Организация
защиты информации в процессе работы в разработанном приложении.
При правильном
вводе пароля нажатие на кнопку «подтвердите правильность пароля спровоцирует следующую
реакцию приложения (рис19)
Рис 20Реакция
на правильный ввод пароля
На форме высветится
новое сообщение с другим запросом (рис
Рис.20Запрос на
ввод графического кода
В том случае,
если в окно ввода пароля на момент нажатия кнопки находится сообщение, не являющееся
паролем, программа оповестит об этом пользователя при помощи сообщения следующего
вида (рис21)
Рис21 Сообщение
об ошибке при вводе пароля
В случае ошибки
требуется снова ввести пароль, иначе приложение не допустит работы с ним.
Для ввода графического
кода предусмотрены некоторые атрибуты, вызываемые через меню рабочей формы.
Код распознаётся
по параметрам: цвет линии (рис22), тип линии (рис23), цвет заливки компонента Image, который в данном приложении
предназначен для рисования.
Рис22 выбор цвета
линии
Рис 23выбор
типа линии
Рис 24 Ввод неверного
графического кода
При несоответствии
выбранных параметров условиям(рис , заданным программно появляется сообщение (рис25)
Рис25 Сообщение
об ошибке
При необходимости
вновь ввести графический код можно воспользоваться кнопкой «Очистить», отвечающей
за очистку компонента Image (рис 26)
Рис 26Очистка
компонента Image
В случае правильного
задания графического кода, нажатие на кнопку «Добро пожаловать!» инициирует появление
другой формы (рис27)
Рис 27Реакция
приложения на ввод верного графического кода
4.3Тест3
Протестируем появившуюся
форму на возможность модификации баз данных, а также на реализацию функции защиты
информации, содержащейся в таблицах базы данных.
Для этого попытаемся
ввести какие-либо сведения в одну из ячеек таблицы, затем переместимся на другую
ячейку данной таблицы (рис28)
Рис28 Попытка
модификации базы данных
Если проделать
все вышеперечисленные действия, появится сообщение (рис29)
Рис29 Предупреждение
нежелательной модификации БД
Далее при нажатии
на кнопку OK модифицированная ячейка сохраняет своё состояние, в обратном случае
данные таблицы приобретают первоначальный вид.
4.4 Тест4
Протестируем разработанное
приложение на возможность создания вычисляемых полей в рамках используемых баз данных.
В данном случае
вычисляемым поле будет поле «Возраст», которое рассчитывается на основе содержания
поля «Год рождения» (рис30)
Рис 30 Использование
вычисляемого поля
4.5Тест5
Протестируем приложение
на возможность поиска по заданному ключу, а также фильтрации данных в соответствии
с заданным условием.
Выберем пункт
меню «Поиск», на форме появится панель поиска (рис31) В число параметров поиска
включены поле, по которому необходимо осуществить поиск, и запись, которую требуется
найти.
Рис 31Остановка
указателя на строке с найденной записью
Для осуществления
фильтрации выберем пункт меню «Сортировка».рис(32,33)
Рис32 Режим фильтрации
включен
Рис 33Режим фильтрации
отключён
Для удобства по
отношению к GroupBox1, содержащей компоненты фильтрации, возможно применение функции «Скрыть»,
вызываемой через Popur Menu правым щелчком мыши по компоненту (рис34,35)
Рис 34 Вызов функции
«Скрыть»
Рис 35Результат
применения функции «Скрыть»
4.6Тест6
Протестируем функцию
переключения между формами, реализуемую при помощи одноимённого пункта Главного
меню формы управления приложением.
При выборе пункта
«Создание файла» получим следующий результат (рис36)
В случае выбора
пункта «Переключение режима» появится окно главной формы (рис37)
Рис36 Открытие
формы «Текстовый редактор»
Рис 37 Переключение
на главную форму
4.7Тест7
Протестируем функциональные
возможности формы «Текстовый редактор».
Вторая группа
кнопок на панели инструментов отвечает за сохранение и создание новых файлов (рис38,39).
Рис 38 Открытие
файла
Рис39 Результат
открытия файла
Возможно сохранение
содержимого окна при нажатии на кнопку «Сохранить как» (рис40)
Рис 40 Сохранение
файла под выбранным именем
Вторая группа
кнопок отвечает за редактирование введённого текста.
Кнопки поддерживают
функции соответственно «вырезать», «копировать», вставить».(рис41)
Рис41 Внесение
фрагмента текста в буфер обмена
Последняя кнопка
организует вызов формы, содержащей сведения о программе (рис 42)
Рис 42 Внешний
вид окна справки
Самая первая кнопка
служит для закрытия окна редактора.
Параллельно может
осуществляться сохранение данных, содержащихся в окне (рис43)
Рис43 Событие
на нажатие кнопки «Выход»
4.8Тест8
Протестируем форму
«Создание расписания» на возможность реализации вложенных функций. Вкладка «Расписание
для групп» формы реализует функции ввода(рис 44)и фильтрации (рис45) данных таблицы
БД
Рис44 Реализация
функции ввода
Рис45 Реализация
функции фильтрации данных
Вкладка «Расписание
для преподавателей» реализует функцию
Выбора преподавателя
из общего списка (рис46,47,48), а также инициирует появление формы, содержащей расписание
для данного преподавателя(рис.49,50)
Рис46 список преподавателей
Рис 47Осуществление
выбора 1
Рис 48Осуществление
выбора 2
Рис 49Расписание
для преподавателя а
Рис 50Расписание
для преподавателя б
При тестировании
вкладки «Справка» получены следующие результаты (рис51,52,53)
Рис51 Реализация
функции «справка»1
Рис 52Реализация
функции «справка»2
Рис53 Реализация
функции «справка»3
Заключение
В ходе разработки
приложения была достигнута цель данной курсовой работы, а именно: реализации функции
автоматизации расчёта и преподавателей ВУЗа. Поставленные в данной курсовой работе
задачи были решены в ходе тестирования полученного приложения.
Готовая программа
способна облегчить работу пользователя за счёт экономии времени и усилий, однако
приложение не совершенно. Гибкость выбранной визуальной среды позволяет вносить
в приложения необходимые коррективы. Удобный интерфейс позволяет создать необходимые
условия для комфортной работы с приложением.
Список использованных
источников
1. "Работа с локальными
базами данных в C++ Builder 5", Аpхангельский .
2. "Введение в Borland
C++ Builder", Елманова.
3.Джарод Холингвэрт, Дэн Баттерфилд,
Боб Сворт, Джэйми Оллсоп C++Builder 5. Руководство разработчика.
4.Borland C++ Builder 5. Энциклопедия
программиста. Калверт Ч., Рейсдорф К., "ДиаСофт" - 2001, 944 стр.
5.Borland C++ Builder and MS SQL 2000 developer
Приложение
А
Листинг формы
«Автоматизация расчёта нагрузки и преподавателей ВУЗа.
#ifndef
KurH
#define
KurH
//---------------------------------------------------------------------------
#include
<Classes.hpp>
#include
<Controls.hpp>
#include
<StdCtrls.hpp>
#include
<Forms.hpp>
#include
<ExtCtrls.hpp>
#include
<Menus.hpp>
#include
"CGRID.h"
#include
"PERFGRAP.h"
#include
<Mask.hpp>
#include
<jpeg.hpp>
#include
<ComCtrls.hpp>
#include
"Word_2K_SRVR.h"
#include
<OleServer.hpp>
//---------------------------------------------------------------------------
class
TForm1 : public TForm
{
__published://
IDE-managed Components
TMainMenu
*MainMenu1;
TButton
*Button1;
TMenuItem
*N2;
TMenuItem
*N4;
TMenuItem
*N5;
TCColorGrid
*CColorGrid1;
TPanel
*Panel1;
TComboBox
*ComboBox1;
TButton
*Button2;
TEdit
*Edit1;
TImage
*Image1;
TColorBox
*ColorBox1;
TLabel
*Label1;
TMenuItem
*N1;
TMenuItem
*N3;
TMenuItem
*N6;
TMenuItem
*N7;
TButton
*Button3;
TButton
*Button4;
void
__fastcall N5Click(TObject *Sender);
void
__fastcall Button1Click(TObject *Sender);
void
__fastcall N8Click(TObject *Sender);
void
__fastcall N9Click(TObject *Sender);
void
__fastcall N2Click(TObject *Sender);
void
__fastcall Button2Click(TObject *Sender);
void
__fastcall Image1MouseDown(TObject *Sender,
TMouseButton
Button, TShiftState Shift, int X, int Y);
void
__fastcall CColorGrid1Change(TObject *Sender);
void
__fastcall N4Click(TObject *Sender);
void
__fastcall N10Click(TObject *Sender);
void
__fastcall N1Click(TObject *Sender);
void
__fastcall FormCreate(TObject *Sender);
void
__fastcall Button3Click(TObject *Sender);
void
__fastcall N6Click(TObject *Sender);
void
__fastcall Button4Click(TObject *Sender);
private:
int
fbMouseDown;// User declarations
public://
User declarations
__fastcall
TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern
PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
#include
<vcl.h>
#pragma
hdrstop
#include
"Kur.h"
#include
"Unit4.h"
bool
OK;
//---------------------------------------------------------------------------
#pragma
package(smart_init)
#pragma
link "CGRID"
#pragma
link "PERFGRAP"
#pragma
link "Word_2K_SRVR"
#pragma
resource "*.dfm"
TForm1
*Form1;
TForm4
*Form4;
//---------------------------------------------------------------------------
__fastcall
TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
fbMouseDown=0;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N5Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::Button1Click(TObject *Sender)
{
int
i,j;
for
(i=0;i<Image1->Width;i++)
{for
(j=0;j<Image1->Height;j++)
Image1->Canvas->Pixels[i][j]=clWhite;}
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N8Click(TObject *Sender)
{
Image1->Canvas->Pen->Style=psDot;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N9Click(TObject *Sender)
{
Image1->Canvas->Pen->Style=psClear;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N2Click(TObject *Sender)
{
CColorGrid1->Width=90;
CColorGrid1->Height=90;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::Button2Click(TObject *Sender)
{ if
(ComboBox1->ItemIndex==0)
{
Form4=new
TForm4(Application);
Form4->Table1->Active=false;
Form4->Table2->Active=false;
Form4->Show();
}
else
{Application->MessageBox("Защита конфиденциальности информации","Введите пароль",MB_OK);
Edit1->Visible=true;
Button3->Visible=true;}}
//---------------------------------------------------------------------------
void
__fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton
Button, TShiftState Shift, int X, int Y)
{
Image1->Canvas->LineTo(X,Y);
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::CColorGrid1Change(TObject *Sender)
{
Image1->Canvas->Brush->Color=CColorGrid1->BackgroundColor;
Image1->Canvas->Rectangle(0,0,265,385);
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Pen->Color=CColorGrid1->ForegroundColor;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N4Click(TObject *Sender)
{
Form1->Color=ColorBox1->Selected;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N10Click(TObject *Sender)
{
Image1->Canvas->Pen->Style=psSolid;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N1Click(TObject *Sender)
{
Image1->Canvas->Pen->Style=psDot;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Visible=false;
Button3->Visible=false;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::Button3Click(TObject *Sender)
{
if
(Edit1->Text!="пэ-81")
Application->MessageBox("Пароль введён неверно","Сообщение об ошибке",MB_OK);
else
{Application->MessageBox("Введите
графический код","Добро пожаловать!",MB_OK);}
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N6Click(TObject *Sender)
{
Image1->Canvas->Pen->Style=psDash;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::N3Click(TObject *Sender)
{
Image1->Canvas->Pen->Style=psDot;
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::Button4Click(TObject *Sender)
{
if
(Image1->Canvas->Pen->Style==psDash)
{Form4=new
TForm4(Application);
Form4->Show();}
else
Application->MessageBox("","Попробуйте ещё раз",MB_OK);
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::Image1Click(TObject *Sender)
{}
Листинг формы
«Форма управления приложением»
#include
<vcl.h>
#pragma
hdrstop
#include
"Unit4.h"
#include
"Unit2.h"
#include
"Kur.h"
#include
"Unit3.h"
#include
"uni.h"
#include
"Unit7.h"
#include
"Unit8.h"
#include
"Unit5.h"
bool
Success;
//---------------------------------------------------------------------------
#pragma
package(smart_init)
#pragma
link "CGRID"
#pragma
resource "*.dfm"
TForm4
*Form4;
TForm1
*Form1;
TForm3
*Form3;
//---------------------------------------------------------------------------
__fastcall
TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::Button1Click(TObject *Sender)
{
GroupBox1->Visible=true;
Edit2->Visible=false;
GroupBox1->Caption="Èñõîäíûå
äàííûå";
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N11Click(TObject *Sender)
{
Form4->Close();
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::Table1BeforePost(TDataSet *DataSet)
{
if
(MessageBox(0,"Âû äåéñòâèòåëüíî
õîòèòå ñîõðàíèòü
èçìåíåíèÿ?","Ïðåäóïðåæäåíèå
î íåæåëàòåëüíîé
ìîäèôèêàöèè
ÁÄ",MB_YESNO)==IDNO)
Table1->Cancel();
else
{Table1->Post();
Table1->Append();}
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::Table1CalcFields(TDataSet *DataSet)
{
Table1Voz->Value=2009-Table1God->Value;
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N7Click(TObject *Sender)
{ Form1=new
TForm1(Application);
Form1->Show();
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::O1Click(TObject *Sender)
{
Panel1->Visible=1;
ProgressBar1->Visible=true;
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::Edit1Change(TObject *Sender)
{int
i;
Timer1->Enabled=true;
ProgressBar1->Visible=true;
TLocateOptions
Options;
Success=Table1->Locate(ComboBox1->Text,Edit1->Text,Options);
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::Timer1Timer(TObject *Sender)
{
if
(Edit1->Text!=""&&!Success)
Application->MessageBox("íå
íàéäåíî íè îäíîé
çàïèñè",MB_OK);
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N6Click(TObject *Sender)
{
Form3=new
TForm3(Application);
Form3->Show();
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::Timer2Timer(TObject *Sender)
{if
(Edit1->Text!="")
ProgressBar1->StepIt();
if
(ProgressBar1->Position==80)
{Timer1->Enabled=false;
ProgressBar1->Visible=false;}
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N18Click(TObject *Sender)
{
Form8=new
TForm8(Application);
Form8->Show();
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::FormCreate(TObject *Sender)
{
GroupBox1->Visible=false;
ProgressBar1->Visible=false;
Table1->FilterOptions>>foNoPartialCompare;
Table1->FilterOptions<<foCaseInsensitive;
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N19Click(TObject *Sender)
{
GroupBox1->Visible=false;
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N20Click(TObject *Sender)
{
Panel1->Visible=false;
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N8Click(TObject *Sender)
{
Form6=new
TForm6(Application);
Form6->Show();
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N1Click(TObject *Sender)
{
GroupBox1->Visible=true;
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::CheckBox1Click(TObject *Sender)
{
if
(!CheckBox1->Checked)
Table1->Filtered=false;
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::Edit2Change(TObject *Sender)
{float
m;
String
StrFiltr;
if
(CheckBox1->Checked)
{Table1->Filtered=false;
Table1->Refresh();
StrFiltr=Edit2->Text+"*";
if
(ListBox1->Items->Strings[ListBox1->ItemIndex]=="FIO")
{Table1->Filter="FIO='"+StrFiltr+"'";}
else
{if
(ListBox1->Items->Strings[ListBox1->ItemIndex]=="God")
Table1->Filter="God='"+FloatToStr(m)+"'";
else
{if (ListBox1->Items->Strings[ListBox1->ItemIndex]=="Pol")
Table1->Filter="Pol='"+StrFiltr+"'";
else
{if (ListBox1->Items->Strings[ListBox1->ItemIndex]=="Spec")
Table1->Filter="Spec='"+StrFiltr+"'";
else
Table1->Filter="Group='"+StrFiltr+"'";}}}}
{
Table1->Filtered=true;}
}
//---------------------------------------------------------------------------
void
__fastcall TForm4::N13Click(TObject *Sender)
{
GroupBox1->Visible=false;
}
//---------------------------------------------------------------------------
Листинг формы
«О программе»
#include
<vcl.h>
#pragma
hdrstop
#include
"Unit3.h"
//---------------------------------------------------------------------
#pragma
resource "*.dfm"
TForm7
*Form7;
//---------------------------------------------------------------------
__fastcall
TForm7::TForm7(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------
void
__fastcall TForm7::OKButtonClick(TObject *Sender)
{
Form7->Close();
}
//---------------------------------------------------------------------------
Листинг формы
«Текстовый редактор»
#include
<vcl.h>
#pragma
hdrstop
#include
"uni.h"
#include
"Unit3.h"
//---------------------------------------------------------------------
#pragma
resource "*.dfm"
TForm3
*Form3;
//---------------------------------------------------------------------
__fastcall
TForm3::TForm3(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton1Click(TObject *Sender)
{
if
(OpenDialog1->Execute())
{Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
StatusBar1->Panels->Items[0]->Text=OpenDialog1->FileName;
}
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton3Click(TObject *Sender)
{
if
(Memo1->Lines->Count>0)
{
if
(MessageBox(0,"Ñîõðàíèòü
ñîäåðæèìîå îêíà
ðåäàêòèðîâàíèÿ?
","Ïîäòâåðäèòå
ñîõðàíåíèå",MB_YESNO)==IDYES)
{
SpeedButton4Click(Sender);
}
}
Memo1->Clear();
StatusBar1->Panels->Items[0]->Text="Áåç
èìåíè";
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton5Click(TObject *Sender)
{
if
(StatusBar1->Panels->Items[0]->Text=="Áåç èìåíè")
else
{Memo1->Lines->SaveToFile(StatusBar1->Panels->Items[0]->Text);
}
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton2Click(TObject *Sender)
{
SpeedButton3Click(Sender);
Close();
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton4Click(TObject *Sender)
{
if
(SaveDialog1->Execute())
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
StatusBar1->Panels->Items[0]->Text=SaveDialog1->FileName;
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton6Click(TObject *Sender)
{
Memo1->CutToClipboard();
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton7Click(TObject *Sender)
{
Memo1->CopyToClipboard();
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton8Click(TObject *Sender)
{
Memo1->PasteFromClipboard();
}
//---------------------------------------------------------------------------
void
__fastcall TForm3::SpeedButton9Click(TObject *Sender)
{
Form7=new
TForm7(Application);
Form7->Show();
}
//---------------------------------------------------------------------------
Листинг формы
«Создание расписания»
#include <vcl.h>
#pragma
hdrstop
#include
"Unit7.h"
//---------------------------------------------------------------------
#pragma
resource "*.dfm"
TForm6
*Form6;
//---------------------------------------------------------------------
__fastcall
TForm6::TForm6(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------
void
__fastcall TForm6::CancelBtnClick(TObject *Sender)
{
Table1->Cancel();
Form6->Close();
}
//---------------------------------------------------------------------------
void
__fastcall TForm6::OKBtnClick(TObject *Sender)
{
Table1->Post();
Form6->Close();
}
//---------------------------------------------------------------------------
void
__fastcall TForm6::Button1Click(TObject *Sender)
{
Table1->Bof;
while
(Table1->Eof)
{Table1->Next();
}
TForm*
GridForm=new TForm((TComponent *)NULL);
GridForm->Caption="Расписание";
GridForm->Width=300;
GridForm->Height=300;
TStringGrid
*Grid=new TStringGrid(GridForm);
Grid->ColCount=Table1->FieldCount;
Grid->RowCount=Table1->FieldCount;
Grid->Parent=GridForm;
Grid->Align=alClient;
GridForm->Show();
Grid->FixedCols=1;
Grid->FixedRows=1;
Grid->Cells[0][1]="8.20";
Grid->Cells[0][2]="10.00";
Grid->Cells[0][3]="11.45";
Grid->Cells[0][4]="13.20";
Grid->Cells[0][5]="15.00";
Grid->Cells[0][6]="16.45";
Grid->Cells[0][7]="18.00";
Grid->Cells[0][8]="19.45";
Grid->Cells[1][0]="Понедельник";
Grid->Cells[2][0]="Вторник";
Grid->Cells[3][0]="Среда";
Grid->Cells[4][0]="Четверг";
Grid->Cells[5][0]="Пятница";
Grid->Show();
GridForm->Handle;
String
StrFiltr;
Table1->Filtered=false;
Table1->Refresh();
StrFiltr=ListBox1->Items->Strings[ListBox1->ItemIndex]+"*";
Table1->Filter="FIO1='"+StrFiltr+"'";
Table1->Filtered=true;
int
i;
while
(!Table1->Eof)
{for
(i=1;i<Table1->FieldCount;i++)
{if
(Table1Time->Value==Grid->Cells[0][i])
Grid->Cells[1][i]=Table1Group->Value+Table1N1->Value;}
Table1->Next();
}
Table1->Filtered=false;
Table1->Bof;
Table1->Filter="FIO2='"+StrFiltr+"'";
Table1->Filtered=true;
while
(!Table1->Eof)
{for
(i=1;i<Table1->FieldCount;i++)
{if
(Table1Time->Value==Grid->Cells[0][i])
Grid->Cells[2][i]=Table1Group->Value+Table1N2->Value;}
Table1->Next();}
Table1->Filtered=false;
Table1->Bof;
Table1->Filter="FIO3='"+StrFiltr+"'";
Table1->Filtered=true;
while
(!Table1->Eof)
{for
(i=1;i<Table1->FieldCount;i++)
{if
(Table1Time->Value==Grid->Cells[0][i])
Grid->Cells[3][i]=Table1Group->Value+Table1N3->Value;}
Table1->Next();}
Table1->Filtered=false;
Table1->Bof;
Table1->Filter="FIO4='"+StrFiltr+"'";
Table1->Filtered=true;
while
(!Table1->Eof)
{for
(i=1;i<Table1->FieldCount;i++)
{if
(Table1Time->Value==Grid->Cells[0][i])
Grid->Cells[4][i]=Table1Group->Value+Table1N4->Value;}
Table1->Next();}
Table1->Filtered=false;
Table1->Bof;
Table1->Filter="FIO5='"+StrFiltr+"'";
Table1->Filtered=true;
while
(!Table1->Eof)
{for
(i=1;i<Table1->FieldCount;i++)
{if
(Table1Time->Value==Grid->Cells[5][i])
Grid->Cells[5][i]=Table1Group->Value+Table1N5->Value;}
Table1->Next();}
}
//---------------------------------------------------------------------------
void
__fastcall TForm6::Button2Click(TObject *Sender)
{
RichEdit1->Lines->LoadFromFile(ListBox2->Items->Strings[ListBox2->ItemIndex]+".txt");
}
//---------------------------------------------------------------------------
void
__fastcall TForm6::Edit1Change(TObject *Sender)
{
String
StrFiltr;
Table1->Filtered=false;
Table1->Refresh();
StrFiltr=Edit1->Text+"*";
Table1->Filter="Group='"+StrFiltr+"'";
if
(CheckBox1->Checked)
Table1->Filtered=true;
}
//---------------------------------------------------------------------------
.ru