79797

База данных Учебная часть РПТ

Дипломная

Информатика, кибернетика и программирование

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

Русский

2015-02-15

1.54 MB

18 чел.

Содержание

[1]
Введение

[2]
1 Теория проектирования базы данных

[2.1] 1.1 Основные понятия баз данных

[2.2] 1.2 Информационные, реляционные модели баз данных

[2.3] 1.3 Нормализация баз данных

[2.4] 1.4 Этапы проектирования баз данных

[2.5] 1.5 Базы данных и приложения

[2.6] 1.6 Таблицы баз данных

[2.7] 1.7 Ключи и индексы

[3]
2 Описание работы базы данных

[3.1] 2.1 Программа BDE Administrator

[3.2]
2.2 Работа с псевдонимами

[3.3] 2.3 Создание приложения BDE

[4]
3 Организация интерфейса с пользователем

[4.1] 3.1 Сервисные функции программы РПТ

[4.2] 3.2 Руководство пользователя

[4.3] 3.2.1Запуск программы

[4.4] 3.2.2 Работа с программой

[4.5] 3.2.3 Завершение работы

[5]
Заключение

[6]
Список используемых источников

[6.1] Основное окно


Введение

Современный научно-технический прогресс немыслим без широкого внедрения и использования вычислительной техники в производстве, управлении и научных исследованиях. Сегодня на основе ЭВМ разрабатываются и внедряются различные автоматизированные системы (управления, проектирования, технологической подготовки производства и др.). Успех во внедрении этих систем, их роль в интенсификации развития нашей страны во многом зависит от специалистов, знающих методику анализа и проектирования этих систем, возможности вычислительной техники и владеющих математическими методами, используемыми при постановке и решении задач. Естественно, что содержание разработок должно быть на уровне современных требований и обеспечивать решение поставленных задач на базе новых достижений в области вычислительной техники, информационного обеспечения,  систем образования. Обязательной является разработка вопросов системного анализа объектов проектирования, оптимизации и выбора наилучших вариантов решений, а также разработка методов обеспечения надежности проектируемых систем.

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

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

Государственное образовательное учреждение среднего профессионального образования “Рузаевский политехнический техникум” – единственное образовательное учреждение системы СПО в МР Рузаевка.

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

   Образовательное учреждение ведет  подготовку специалистов на очном отделении по образовательным программам:

-151001 Технология машиностроения

-150203 Сварочное производство

-080110 Экономика и бухгалтерский учет

-050504 Право и организация социального обеспечения

-230103 Автоматизированные системы обработки информации и управления.

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

С этой целью  началась разработка компьютерной программы, обеспечивающая достижение заданной цели при оформлении документации очного отделения -  «Учебная часть РПТ».

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

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

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


1 Теория проектирования базы данных

1.1 Основные понятия баз данных 

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

Современной формой информационных систем являются банки данных, имеющие в своем составе:

вычислительную систему;

систему управления базами данных (СУБД);

одну или несколько баз данных (БД);

набор прикладных программ (приложений БД).

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

непротиворечивой;

не избыточной;

целостной.

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

Персональные СУБД обеспечивают возможность создания локальных БД, работающих на одном компьютере. К персональным СУБД относятся Paradox, dBase, FoxPro, Access и др.

1.2 Информационные, реляционные модели баз данных 

Типы информационных моделей

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

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

Концептуальные модели данных

Концептуальный уровень описания базы данных (концептуальная модель) представляет собой информационные объекты и их взаимосвязи без указания способов описания и хранения данных.

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

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

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

Данные об информационных объектах разных классов должны находиться в разных таблицах.

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

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

Логические модели данных

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

Физические модели данных

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

Первый подход не связан с конкретной СУБД и предполагает описание физических свойств данных каждой таблицы — физические модели таблиц базы данных.

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

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

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

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

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

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

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

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

Точность — число знаков после запятой в числовых полях.

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

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

1.3 Нормализация баз данных 

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

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

Процесс нормализации основан на понятии функциональной зависимости атрибутов: атрибут А зависит от атрибута В (В -» А), если в любой момент времени каждому значению атрибута В соответствует не более одного значения атрибута А.

Зависимость, при которой каждый неключевой атрибут зависит от всего составного ключа и не зависит от его частей, называется полной функциональной зависимостью. Если атрибут А зависит от атрибута В, а атрибут В зависит от атрибута С (С -> В -> А), но обратная зависимость отсутствует, то зависимость С от А называется транзитивной.

Общее понятие нормализации подразделяется на несколько «нормальных форм».

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

Информационный объект находится во второй нормальной форме (2НФ), если он уже находится в первой нормальной форме, и каждый не идентифицирующий (описательный) атрибут зависит от всего уникального идентификатора информационного объекта. Если некий атрибут не зависит полностью от уникального идентификатора сущности, значит, он внесен ошибочно и должен быть удален. Нормализация в этом случае производится путем нахождения существующего информационного объекта, к которому данный атрибут относится, или созданием нового информационного объекта, в который атрибут должен быть помещен.

Информационный объект (или сущность) находится в третьей нормальной форме (ЗНФ), если он уже находится во второй нормальной форме и ни один описательный атрибут не зависит от каких-либо других описательных атрибутов. Атрибуты, зависящие от других неидентифицирующих атрибутов, нормализуются путем перемещения зависимого атрибута и атрибута, от которого он зависит, в новый информационный объект.

1.4 Этапы проектирования баз данных

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

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

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

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

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

• построение информационно-логической модели данных предметной области;

• определение логической структуры реляционной базы данных;
• конструирование таблиц базы данных;

• создание схемы данных;

• ввод данных в таблицы (создание записей);

разработка необходимых форм, запросов, макросов, модулей, отчетов;

разработка пользовательского интерфейса.

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

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

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

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

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

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

определить функциональные зависимости между атрибутами;

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

сгруппировать атрибуты, одинаково зависимые от ключевых
атрибутов. Полученные группы зависимых атрибутов вместе с их ключевыми атрибутами образуют информационные объединение;

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

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

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

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

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

1.5 Базы данных и приложения 

В зависимости от взаимного расположения приложения и БД можно выделить:

- локальные БД;

- удаленные БД.

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

Расположение БД в значительной степени влияет на разработку приложения, обрабатывающего содержащиеся в этой базе данные.

Так, различают следующие виды приложений:

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

данных образуют единую файловую систему;

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

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

1.6 Таблицы баз данных 

Таблицы, образующие БД, находятся в каталоге на жестком диске.

Таблицы хранятся в файлах и похожи на отдельные документы или электронные таблицы, например, табличного процессора Microsoft Excel, их можно перемещать и копировать обычным способом, скажем, с помощью Проводника Windows. Однако в отличие от документов, таблицы БД поддерживают многопользовательский режим доступа, это означает, что их могут одновременно использовать несколько приложений.

Для одной таблицы создается несколько файлов, содержащих данные, индексы, ключи и т. п. Главным из них является файл с данными, его имя совпадает с именем таблицы, которое задается при ее создании. В некотором смысле понятия таблицы и ее главного файла являются синонимами, при выборе таблицы выбирается именно ее главный файл: для таблицы dBase это файл с расширением dbf, а для таблицы Paradox — с расширением

db- Имена остальных файлов таблицы назначаются автоматически — все  файлы имеют одинаковые имена, совпадающие с именами таблиц, и разные расширения, указывающие на содержимое соответствующего файла. Каждая таблица БД состоит из строк и столбцов и предназначена для хранения данных об однотипных объектах информационной системы. Строка таблицы называется записью, столбец таблицы— полем:

Рисунок 1 - Схема таблицы базы данных

Каждое поле должно иметь уникальное в пределах таблицы имя.

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

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

Особенности организации таблиц зависят от конкретной СУБД, используемой для создания и ведения БД.

Основу таблицы составляет описание ее полей (каждая таблица должна иметь хотя бы одно поле). Понятие структуры таблицы является более широким и включает:

- описание полей;

- ключ;

- индексы;

- ограничения на значения полей;

- ограничения ссылочной целостности между таблицами;

- пароли.

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

Отметим, что отдельные элементы структуры зависят от формата таблиц, например, для таблиц dBase нельзя задать ограничения ссылочной целостности (т. к. у них нет ключей). Все элементы структуры задаются на физическом уровне (уровне таблицы) и действуют для всех программ, выполняющих операции с БД, включая средства разработки и ведения БД  (например, программу Database Desktop). Многие из этих элементов можно также

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

С таблицей в целом можно выполнять следующие операции:

- создание (определение структуры);

- изменение структуры (реструктуризация);

- переименование;

- удаление.

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

характеристики полей, состав и наименования ключа и индексов, ограничения. Однако имена таблицы и ее файлов остаются прежними.

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

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

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

1.7 Ключи и индексы 

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

Ключ обеспечивает:

однозначную идентификацию записей таблицы;

ускорение выполнения запросов к БД;

установление связи между отдельными таблицами БД;

использование ограничений ссылочной целостности.

Ключ также называют первичным ключом или первичным (главным) индексом.

Информация о ключе может храниться в отдельном файле или совместно с данными таблицы. Например, в БД Paradox для этой цели используется отдельный файл (ключевой файл или файл главного индекса) с расширением рх. В БД Access вся информация содержится в одном общем файле с расширением mdb. Значения ключа располагаются в определенном порядке.

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

Таблицы различных форматов имеют свои особенности построения ключей.

Вместе с тем существуют и общие правила:

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

ключ должен быть достаточным и не избыточным, т. е. не содержать поля, которые можно удалить без нарушения уникальности ключа;

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

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

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

Удобным вариантом создания ключа является использование для него поля соответствующего типа, которое автоматически обеспечивает поддержку уникальности значений. Например, для таблиц Paradox таким является поле автоинкрементного типа, достоинством которого является небольшой размер. В то же время в таблицах dBase и InterBase поле подобного типа отсутствует, и программист должен обеспечивать уникальность значений ключа самостоятельно, например, используя специальные генераторы автоинкрементных полей.

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

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

Использование индекса обеспечивает:

увеличение скорости доступа к данным (поиска);

сортировку записей;

установление связи между отдельными таблицами БД;

использование ограничений ссылочной целостности.

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

Сортировка представляет собой упорядочивание записей по полю или группе полей в порядке возрастания или убывания их значений. Можно сказать, что индекс служит для сортировки таблиц по индексным полям. В частности, в C++ Builder записи набора Table можно сортировать только по индексным полям. Набор данных Query позволяет выполнить средствами SQL сортировку по любым полям, однако и в этом случае для индексированных полей упорядочивание записей выполняется быстрее.

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

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

Таким образом, использование ключей и индексов позволяет:

однозначно идентифицировать записи;

избегать дублирования значений в ключевых полях;

выполнять сортировку таблиц;

ускорять операции поиска в таблицах;

устанавливать связи между отдельными таблицами БД;

использовать ограничения ссылочной целостности.

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

Связи между таблицами В частном случае БД может состоять из одной таблицы. Однако обычно реляционная БД состоит из набора взаимосвязанных таблиц. Организация связи (отношений) между таблицами называется связыванием или соединением таблиц.

Связи между таблицами можно устанавливать как при создании БД, так и при выполнении приложения, используя средства, предоставляемые СУБД.

Связывать можно две или несколько таблиц. В реляционной БД, кроме связанных таблиц, могут быть и отдельные таблицы, не соединенные ни с одной другой таблицей. Это не меняет сути реляционной БД, которая содержит единую информацию о некоторой системе, связанную не в буквальном (связь между таблицами), а в функциональном смысле — вся информация относится к одной системе.

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

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

Для таблиц Paradox в качестве полей связи главной таблицы должны использоваться поля ключа, а для подчиненной таблицы — поля индекса. Кроме того, в подчиненной таблице обязательно должен быть определен ключ.

Связь между таблицами определяет отношение подчиненности, при котором одна таблица является главной (родительской, или мастером — Master), а вторая — подчиненной  (дочерней, или детальной — Detail). Саму связь (отношение) называют связь "главный-подчиненный", "родительский- дочерний" или "мастер-детальный". Существуют следующие виды связи:

отношение "один-к-одному";

отношение "один-ко-многим";

отношение "много-к-одному";

отношение "много-ко-многим".

Отношение "один-к-одному" означает, что одной записи в главной таблице соответствует одна запись в подчиненной таблице. При этом возможны два варианта:

для каждой записи главной таблицы есть запись в подчиненной таблице;

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

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

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

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

Отношение "много-ко-многим" имеет место, когда одной записи главной

таблицы может соответствовать несколько записей подчиненной таблицы, и одновременно одной записи подчиненной таблицы — несколько записей главной таблицы.

На практике отношение "много-ко-многим" используется достаточно редко.

Причинами являются сложность организации связи между таблицами и взаимодействия между их записями. Кроме того, многие СУБД, в том числе Paradox, не поддерживают организацию ссылочной целостности для подобного отношения. Отметим также, что для отношения "много-ко-многим" понятия главной и подчиненной таблицы не имеют смысла.

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

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

Работа со связанными таблицами имеет следующие особенности:

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

при удалении записи главной таблицы нужно удалять и соответствующие ей записи в подчиненной таблице (каскадное удаление);

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

Ограничения по установке, изменению полей связи и каскадному удалению записей могут быть наложены на таблицы при их создании. Эти ограничения наряду с другими элементами, например, описаниями полей и индексов, входят в структуру таблицы и действуют для всех приложений, которые выполняют операции с БД. Указанные ограничения можно задать при создании или реструктуризации таблицы, например, в среде программы Database Desktop, которая позволяет устанавливать связи между таблицами при их создании.

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

организацию связи между таблицами;

установку значения поля связи подчиненной таблицы (это может выполняться автоматически);

контроль (запрет) редактирования полей связи;

организацию (запрет) каскадного удаления записей.  


2 Описание работы базы данных

2.1 Программа BDE Administrator

Программа BDE Administrator представляет собой инструмент администрирования процессора баз данных BDE (далее Администратор BDE, или Администратор). Для вызова Администратора BDE запускается файл bdeadmin.exe, находящийся в одном каталоге с процессором баз данных. Внесенные изменения сохраняются по окончании работы с Администратором в файле конфигурации idapi32.cfg. Программу также можно вызвать через главное меню Windows выбором пункта Program\Borland C++ Builder 6\BDE Administrator.

Администратор BDE позволяет настраивать параметры БД и операционной системы. Основные параметры: - параметры псевдонима БД:

• название;

• тип;

• путь.

- параметры драйвера:

• тип;

• язык.

- системные установки:

• установки по умолчанию;

• форматы даты, времени и числовые форматы.

Для настройки требуемого параметра в левой части окна Администратора BDE нужно выбрать нужный объект, после чего в правой части окна открывается доступ к списку параметров этого объекта. При редактировании выбранного в панели инструментов объекта становятся доступными кнопки отмены/подтверждения сделанных изменений.

Отменить или подтвердить изменения можно также командами Cancel и Apply главного или контекстного меню.


2.2 Работа с псевдонимами

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

Для создания псевдонима базы данных перед вызовом пункта меню Object\New Администратора BDE нужно выбрать вкладку Database в левой части окна, в противном случае команда New меню будет недоступна. После задания этой команды появляется диалоговое окно New Database Alias (Новый псевдоним БД) представленное на рисунке 2.1, в котором нужно выбрать тип драйвера. Для локальных таблиц Paradox и dBase выбирается тип standard.

Рисунок 2.1 - Новый псевдоним БД

После нажатия кнопки ОК создается псевдоним и его данные отображаются в окне Администратора BDE представленном на рисунке __. Новый псевдоним автоматически получает имя standard1 и параметры по умолчанию. Можно переименовать. Псевдоним, выполнив команду Rename контекстного меню псевдонима.

Псевдоним для работы с локальными БД имеет три параметра:

- default driver — указывает формат таблиц БД (по умолчанию имеет значение paradox). Кроме того, можно установить значения dBase или asciidrv для текстовых файлов, разбитых на колонки;

- enable bcd — указывает на необходимость перевода чисел в формат BCD, что позволяет более точно выполнять вычисления, но уменьшает скорость их выполнения. По умолчанию имеет значение false и, соответственно, формат BCD не используется;

- path — указывает расположение (каталог) БД. После создания псевдонима путь не определен, и мы устанавливаем его самостоятельно С:\Uch1\db.

Рисунок 2.2 - Установка параметров псевдонима

Для работы с таблицами БД при проектировании приложения удобно использовать программу Database Desktop, которая позволяет:

создавать таблицы;

изменять структуры;

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

Кроме того, с помощью Database Desktop можно выполнять и другие действия над БД (создание, редактирование, выполнение визуальных и SQL- запросов, операции с псевдонимами).

Для этого чтобы открыть программу выбираем Пуск/Все программы/ Borland C++ Builder/ Database Desktop.

Процесс создания новой таблицы начинается с вызова команды File\New\Table (Файл\Новая\Таблица) и происходит в интерактивном режиме. При этом необходимо:

выбрать формат (тип) таблицы;

задать структуру таблицы.

В начале создания новой таблицы в окне Create Table (Создание таблицы) выбирается ее формат. По умолчанию предлагается формат таблицы Paradox версии 7, который я использовала.

После выбора формата таблицы появляется окно определения структуры таблицы, в котором выполняются следующие действия:

описание полей;

задание ключа;

задание индексов;

определение ограничений на значения полей;

определение условий (ограничений) ссылочной целостности;

задание паролей;

задание языкового драйвера;

задание таблицы для выбора значений.

В этом списке обязательным является только первое действие, т. е. каждая таблица должна иметь хотя бы одно поле. Остальные действия выполняются при необходимости. Часть действий, таких как задание ключа и паролей, производится только для таблиц определенных форматов, например, для таблиц Paradox.

После определения структуры таблицы ее необходимо сохранить, нажав кнопку Save As и указав расположение таблицы на диске и ее имя. В результате на диск записывается новая таблица, первоначально пустая, при этом все необходимые файлы создаются автоматически.

Рисунок 2.3 - Создание таблицы Paradox

Центральной частью окна определения структуры таблицы является список Field roster (Список полей), в котором указываются поля таблицы. Для каждого поля задаются:

имя поля — в столбце Field Name;

тип поля — в столбце Туре;

размер поля — в столбце Size.

Имя поля вводится по правилам, установленным для выбранного формата таблиц.

Добавление к списку полей новой строки выполняется переводом курсора вниз на несуществующую строку, в результате чего эта строка появляется в конце списка. Вставка новой строки между существующими строками с уже описанными полями выполняется нажатием клавиши <Insert>. Новая строка вставляется перед строкой, в которой расположен курсор. Для удаления строки необходимо установить курсор на эту строку и нажать комбинацию клавиш <Ctrl>+<Delete>.

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

Рисунок 2.4 - Выбор типа поля таблицы Paradox

Для выполнения операций, связанных с заданием ограничений на значения полей, нужно выбрать пункт Validity Checks (Проверка значений) комбинированного списка Table properties, при этом ниже списка появляются флажок Required Field (Обязательное поле), поля редактирования Minimum Value (Минимальное значение), Maximum Value (Максимальное значение), Default Value (значение по умолчанию), Picture (Маска ввода) и кнопка Assist (Помощь). Флажок и поля редактирования отображают установки для поля таблицы, которое выбрано в списке (курсор находится в строке этого поля).

Рисунок 2.5 - Задание парамметров таблицы

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

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

при изменении поля связи в главной таблице автоматически изменяются соответствующие ей поля в подчиненной таблице (каскадное изменение).

Для выполнения операций, связанных с заданием ссылочной целостности, необходимо выбрать пункт Referential Integrity комбинированного списка Table properties. При этом, как и в случае задания индексов, появляются кнопки Define, Modify, Erase и список, в котором выводятся имена созданных условий ссылочной целостности.

Условие ссылочной целостности задается для подчиненной таблицы и определяется следующими элементами:

полями связи подчиненной таблицы;

именем главной таблицы;

полями связи главной таблицы;

параметрами.

Можно создать, изменить или удалить условие ссылочной целостности. Для задания условия ссылочной целостности нужно нажать кнопку Define, после чего появляется окно Referential Integrity.

Рисунок 2.6  - Задание новой ссылочной целостности

Поле связи следует выбрать в списке Fields и нажатием кнопки со стрелкой вправо перевести его в список Child fields (Дочерние поля). Если полей связи несколько, то эти действия выполняются для каждого из них. Кнопка со стрелкой влево удаляет выбранное поле из списка дочерних полей.

Главная таблица указывается в списке Table, имена таблиц выбираются в рабочем каталоге программы Database Desktop (каталог, определенный как Working Directory). После выбора таблицы и нажатия кнопки со стрелкой влево (рядом со списком таблиц) в поле Parent's key автоматически заносятся ключевые поля главной таблицы.

2.3 Создание приложения BDE

Запустите C++ Builder. Далее перейдите на закладку Standard на панели в верхней части программы и вынесите на форму приложения компонент MainMenu — главное меню для будущего приложения. Затем щелкнула по добавленному на форму элементу (MainMenu) дважды левой кнопкой мышки. В открывшемся окне с заголовком Form1->MainMenu1 сформировала основные каскадные меню:

1. Студенты

1.1. Список

-полный

-по группам

1.2 Личная карточка

1.3 Успеваемость

1.4 Оценки по ведомости

2. Ведомости

2.1 Экзаменационная

2.2 Зачетная

2.3 Сводная

3. Преподаватели

3.1 Ввод часов преподавателей

3.2 Ведомость учета часов

3.3 Отчет по часам

4. Справочники

5. Год

Программная реализация меню должна быть очень проста. С каждой командой меню должен быть связан метод-обработчик, содержащий программный код для вызова необходимых функций приложения. Щелкните левой кнопкой мышки по свободной ячейке, вписываете произвольный текст — название пункта — в поле Caption окна инспектора объектов, наконец, щелкаете левой клавишей мышки по полю еще раз, чтобы завершить формирование определенного пункта меню. В верхней части формы будущей программы появилось полноценное главное меню.

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

Для работы с компонентами меню во время разработки используется специализированный Редактор меню представленный на рисунке ____. Он открывается при щелчке на кнопке свойства items компонента меню в Инспекторе объектов или при двойном щелчке на компоненте. Он обеспечивает отображение всех элементов меню, представленных в свойстве items.

Редактор меню активно взаимодействует с Инспектором объектов. Для каждого выбранного в Редакторе элемента в Инспекторе объектов появляются значения его свойств.

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

Рисунок 2.7 - Формируем элементы главного меню в окне Form1.

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

Вид формы приложения на этапе проектирования показан на рисунке ___, где в форме размещены компоненты Table1, DataSource1, DBGrid1 и DBNavigator1.

Компонент Table1 обеспечивает взаимодействие с таблицей БД. Для связи с требуемой таблицей нужно установить соответствующие значения свойству DataBaseName, указывающему путь к БД или алиас, и свойству TableName, указывающему имя таблицы. После задания таблицы для открытия набора данных свойству Active должно быть установлено значение true.

В рассматриваемом приложении использована таблица студентов. Файлы этой и других таблиц находятся в каталоге, путь к которому указывает псевдоним UCH1. Настройка псевдонима может быть выполнена с помощью программы BDE Administrator.

Компонент DataSource1 является промежуточным звеном между компонентом Table1, соединенным с реальной таблицей БД, и визуальными компонентами DBGrid1 и DBNavigator1, с помощью которых пользователь взаимодействует с этой таблицей. На компонент Table1 с которым связан компонент DataSource1, указывает свойство DataSet последнего.

Рисунок 2.8 -  Форма приложения для работы с БД

Компонент DBGrid1 отображает содержимое таблицы БД в виде сетки, в которой столбцы соответствуют полям, а строки — записям таблицы. По умолчанию пользователь может просматривать и редактировать данные. Компонент DBNavigator позволяет пользователю перемещаться по таблице, редактировать, вставлять и удалять записи. Компоненты DBGrid1 и DBNavigator1 связываются со своим источником данных — компонентом DataSource1 — через свойства DataSource.

Схема взаимосвязи компонентов приложения и таблицы БД и используемые при этом свойства компонентов показаны на рисунке 2.9.

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

Рисунок 2.9 - Схема взаимосвязи компонентов приложения и таблицы БД

Доступ к остальным таблицам организуется аналогичным образом. В основном окне программы (Список студентов) находятся:

- Успеваемость студента;

- Успеваемость за семестр;

- Распечатать личную карточку.

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

if(Form3->ShowModal()!=mrOk) return;

Variant A_,B_,T_,D_,V_;

char gg[6],sp[3];

int kurs, sem, i,oc5,oc4,oc3,oc2,kol[6],t=0;

String oo,pre2;

try{

A_ = CreateOleObject("Word.Application");

B_=A_.OlePropertyGet("WordBasic");

B_.OleProcedure("FileNew", (ExtractFilePath(ParamStr(0))+"usp.dot").c_str());

D_=A_.OlePropertyGet("ActiveDocument");

V_=D_.OlePropertyGet("Variables");

strcpy(gg,Form3->DBLookupComboBox1->Text.c_str());

if (gg[1]=='-') {sp[0]=gg[0];sp[1]=0; kurs=gg[2]-48;}

else {sp[0]=gg[0];sp[1]=gg[1];sp[2]=0; kurs=gg[3]-48;}

sem=(kurs-1)*2+(Form3->RadioButton1->Checked?1:2);

V_.OleProcedure("Add", "Nom_kurs", kurs);

V_.OleProcedure("Add", "Nom_gr", (Form3->DBLookupComboBox1->Text) .c_str());

V_.OleProcedure("Add", "Sem", Form3->RadioButton1->Checked?1:2);

V_.OleProcedure("Add", "Uch_god", ((String)uch_god+"-"+(String)(uch_god+1)).c_str());

D_.OlePropertyGet("Fields").OleProcedure("Update");

B_.OleProcedure("AppShow");

//student->Filter="Spec='"+(String)sp+"' AND Nom_kurs="+(String)kurs+" AND Nom_gr="+(String)gr;

student->Filter="Gruppa='"+Form3->DBLookupComboBox1->Text+"'";

student->Filtered=true;

Label23->Caption=Form3->DBLookupComboBox1->Text;

ocenka->Active=false;

ocenkafio_stud->Visible=false;

ocenkafio_stud->FieldKind=fkCalculated;

ocenkan_predmet->FieldKind=fkLookup;

ocenkan_predmet->Visible=true;

ocenka->IndexName="Nom_zach";

ocenka->MasterFields="";

ocenka->MasterSource=dstudent;

ocenka->MasterFields="nom_zach";

ocenka->Active=true;

student->First();

char sss[20];

kol[2]=0;

kol[3]=0;

kol[4]=0;

kol[5]=0;

while(!student->Eof)

{ocenka->First();

char oc[]="Oc0";

oc[2]=sem+48;

oc5=0;oc4=0;oc3=0;oc2=0;t=0;

pre2="";

while(!ocenka->Eof)

{if (ocenka->FieldByName(oc)->IsNull) {ocenka->Next();continue;}

oo=ocenka->FieldByName(oc)->AsString;

if (oo[1]=='2'||oo[1]=='н') {oc2++;pre2=pre2+ocenka->FieldByName("n_predmet")->AsString+" ,";}

if (oo[1]=='3') oc3++;

if (oo[1]=='4') oc4++;

if (oo[1]=='5') oc5++;

ocenka->Next();}

if (oc2>0) {t=2;T_=D_.OlePropertyGet("Tables").OleFunction("Item",5);}

else if (oc3>0) {t=3;T_=D_.OlePropertyGet("Tables").OleFunction("Item",4);}

else if (oc4>0) {t=4;T_=D_.OlePropertyGet("Tables").OleFunction("Item",3);}

else if (oc5>0) {t=5;T_=D_.OlePropertyGet("Tables").OleFunction("Item",2);}

if (t!=0) {

T_.OleFunction("Cell",kol[t]+1,2).OleProcedure("Select");

kol[t]++;

_.OlePropertyGet("Selection").OleProcedure("InsertRowsBelow",(int)kol[t]);

T_.OleFunction("Cell",kol[t]+1,2).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",student->FieldByName("Fio")->AsString.c_str());

T_.OleFunction("Cell",kol[t]+1,1).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",kol[t]);

if (t==2)

{ T_.OleFunction("Cell",kol[t]+1,3).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",pre2.c_str()); } }

student->Next();}

B_.OleProcedure("AppShow");}

catch(EOleException& e){ShowMessage("OleException "+e.Message);}

catch(EOleSysError& e){ShowMessage("OleSyserror "+e.Message);}

catch(Exception& e){ShowMessage("Exception "+e.Message);}

student->Filtered=false;

Label23->Caption=" ";

 TabSheet1->Show(); }

На главной форме разместила PageControl, состоящий из вкладок:

студенты - просмотр, добавление, поиск, изменение и удаление студентов, также с этой вкладки можно распечатать успеваемость студента, группы и личную карточку;

личная карточка - сдержит основные сведения о студенте (номер зачетки, ФИО, группу, приказы о зачислении и переводе с курса на курс) и учебно-производственные практики;

оценки по студенту - при помощи компонента DBGrid выставляются оценки по всем предметам для конкретного студента;

оценки по предмету - выставление оценок по конкретному предмету студентам одной группы;

справочники - просмотр, добавление, поиск, изменение и удаление предметов, преподавателей, групп и специальностей соответственно;

часы - позволяет вводить данные об отработанных часах преподавателя.

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

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

{String aaa=((TMenuItem *)Sender)->Caption;

int aa=aaa.Pos("&");

if (aa) aaa.Delete(aa,1);

student->Filter="Gruppa='"+aaa+"'";

student->Filtered=true;

Label23->Caption=aaa;

TabSheet1->Show();}

При выборе в меню подпункта Личная карточка пользователь имеет возможность просмотреть либо добавить данные по студенту.

Для создания надписей (№ зачетки, ФИО, группа, курс, специальность и т.д) выбрала компонент label (надпись) расположенный на вкладке Standard.

Для группы и специальности поместила DBLookupComboBox, компонент представляющий собой комбинированный список значений поля синхронного просмотра для поля, заданного свойством DataFieid, из набора данных DataSource. Его основное назначение — автоматически устанавливать соответствие между полями двух наборов данных по одинаковому значению заданного поля исходной таблицы и ключевого поля таблицы синхронного просмотра. В списке синхронного просмотра отображаются возможные значения для редактирования поля основной таблицы. По своим функциональным возможностям компонент совпадает с компонентом TDBComboBox.

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

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

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

Если текущее значение связанного поля соответствует значению какого либо переключателя, то он включается. Если пользователь включает другой переключатель, то связанное с переключателем значение заносится в поле. Возможные значения, на которые должны реагировать переключатели в группе, заносятся в свойство Values при помощи специального редактора в Инспекторе объектов или программно посредством методов класса TStrings. Каждому элементу свойства values соответствует один переключатель представленный на рисунке ___ (М, Ж).

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

Текущее значение связанного поля содержится в поле value.

Использование переключателя DBRadioGroup исключает возможность появления ошибок.

Рисунок 2.10 - Задание параметра Values компонента DBRadioGroup

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

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

В нижней части окна программы находится таблица ввода практики созданная элементом DBGrid. Этот компонент инкапсулирует двумерную таблицу, в которой строки представляют собой записи, а столбцы — поля набора данных.

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

Новая колонка добавляется при помощи кнопки Add New, после этого ее название появляется в списке колонок представленном на рисунке ___. Для выбранной в списке колонки доступные для редактирования свойства появляются в Инспекторе объектов. Колонки в списке можно редактировать, удалять, менять местами. При помощи кнопки Add All Fields в сетку можно добавить все поля набора данных.

Каждая колонка компонента TDBGrid описывается специальным классом Column, а совокупность колонок доступна через свойство columns компонента, оно имеет тип DBGridColumns и представляет собой индексированный список объектов колонок. Поле набора данных связывается с конкретной колонкой при помощи свойства FieidName класса Column. При этом в колонку автоматически переносятся все необходимые параметры поля, в частности заголовок поля, настройки шрифтов, ширина поля. После ручного изменения параметров первоначальные значения восстанавливаются методами соответствующих объектов Column.

Рисунок 2.11 - Редактор колонок компонента DBGrid

Для управления записями таблицы установлен навигатор – DBNavigator связанный с таблицей практика (praktika) через DataSource (dpraktika).

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

1. Связать набор данных и компонент DataSource. Для этого используется свойство DataSet компонента DataSource, доступное через Инспектор объектов. Это указатель на экземпляр компонента доступа к данным. В списке этого свойства в Инспекторе объектов перечислены все доступные компоненты наборов данных.

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

Рисунок 2.12 - Таблица ввода учебной и производственной практики студента.

Для перехода на личную карточку делаем активной вкладку 2:

{ TabSheet2->Show();}

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

Ниже расположена таблица DBGrid состоящая из столбцов Наименование предмета и 8 столбцов с оценками за 8 семестров. Установлена связь с таблицей оценка.

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

Перед переходом на вкладку Оценки по студенту для таблицы Ocenka задала связь с таблицей Студенты используя свойства MasterSource (главная таблица) через поле Номер зачетки. Название предмета отображается через Lookup поле n_predmet:

ocenka->Active=false;

ocenkafio_stud->Visible=false;

ocenkafio_stud->FieldKind=fkCalculated;

ocenkan_predmet->FieldKind=fkLookup;

ocenkan_predmet->Visible=true;

ocenka->IndexName="Nom_zach";

ocenka->MasterFields="";

ocenka->MasterSource=dstudent;

ocenka->MasterFields="nom_zach";

ocenka->Active=true;

TabSheet3->Show();}

Для управления данными в таблице установила навигатор, прописав в событиях (Events) команду для OnClick:

{ if (Button==nbInsert)

ocenka->FieldValues["Nom_zach"]=student->FieldValues["Nom_zach"];}

Рисунок 2.13 - Ввод оценок по студенту

При вводе оценок по ведомости (по предмету) необходимо выбрать предмет и группу (поле преподаватель не отображается). Для этого была создана форма (Form2). В свойствах (Properties) установила:

BorderStyle = bsDialog;

Position = poScreenCenter.

На форме разместила кнопки ОК и Отмену используя компонент BitBtn. Для выбора группы и предмета размещен компонент DBLookupComboBox. Форма представлена рисунке 2.14.

Рисунок 2.14 - Форма выбора параметров.

При нажатии в меню на Справочники страница становится активной

{TabSheet5->Show();}

Содержит четыре таблицы со своими навигаторами для управления:

- предметы

- преподаватели

- группы

- специальности.

Для каждой таблицы установлены соответствующие связи в свойствах (Properties): dpredmet, dprepod, dgruppa, dspecial.

Рисунок 2.15 - Справочники открытые в программе C++ Builder.

Мой проект в C++ Builder состоит из шести форм. Форма — это всего лишь окно приложения на этапе разработки. Каждую форму описывают два файла — файл формы, описывающий свойства формы и размещенных на ней компонентов, и модуль, содержащий описание экземпляра класса формы и исходный код.

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

Для создания новой формы проекта выбрала команду New Form из меню File . Форма, на которой находится компонент, становится его владельцем.

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

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

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

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

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

Для формирования и распечатывания ведомостей, личной карточки студента, в Microsoft Word было создано 7 шаблонов [Приложение А].

Для каждого документа были введены соответствующие коды полей:

Наименование документа

Название поля

Код поля

Зачетная ведомость и

Экзаменационная ведомость

предмет

{DOCVARIABLE Predmet \* MERGEFORMAT}

курс

{DOCVARIABLE Nom_kurs \* MERGEFORMAT}

группа

{DOCVARIABLE Nom_gr \* MERGEFORMAT}

специальность

{DOCVARIABLE Spec \* MERGEFORMAT}

экзаменатор

{DOCVARIABLE Prepod \* MERGEFORMAT}

Сводная ведомость

курс

{DOCVARIABLE Nom_kurs \* MERGEFORMAT}

группа

{DOCVARIABLE Nom_gr \* MERGEFORMAT}

семестр

{DOCVARIABLE Sem \* MERGEFORMAT}

Учебный год

{DOCVARIABLE Uch_god \* MERGEFORMAT}

Ведомость учета часов учебной работы преподавателя

группа

{DOCVARIABLE Nom_gr \* MERGEFORMAT}

Месяц

{DOCVARIABLE Mes \* MERGEFORMAT}

Учебный год

{DOCVARIABLE Uch_god \* MERGEFORMAT}

Сводная ведомость учета часов учебной работы преподавателя

Фамилия преподавателя

{DOCVARIABLE Fio \* MERGEFORMAT}

наименование предмета

{DOCVARIABLE Predmet \* MERGEFORMAT}

Отчет по успеваемости группы

курс

{DOCVARIABLE Nom_kurs \* MERGEFORMAT}

группа

{DOCVARIABLE Nom_gr \* MERGEFORMAT}

семестр

{DOCVARIABLE Sem \* MERGEFORMAT}

Учебный год

{DOCVARIABLE Uch_god \* MERGEFORMAT}

Личная карточка

ФИО студента

{DOCVARIABLE Fio \* MERGEFORMAT}

Курс зачисления

{DOCVARIABLE Kurs_post \* MERGEFORMAT}

группа

{DOCVARIABLE Nom_gr \* MERGEFORMAT}

специальность

{DOCVARIABLE Spec \* MERGEFORMAT}

Дата поступления

{DOCVARIABLE Data_post \* MERGEFORMAT}

Пол

{DOCVARIABLE Pol \* MERGEFORMAT}

Число, месяц и год рождения

{DOCVARIABLE Data_rozd \* MERGEFORMAT}

Место рождения

{DOCVARIABLE Mest_rozd \* MERGEFORMAT}

Адрес родителей

{DOCVARIABLE Adr_pod \* MERGEFORMAT}

Национальность

{DOCVARIABLE nacional \* MERGEFORMAT}

Приказ о зачислении

{DOCVARIABLE Prik_zach \* MERGEFORMAT}

Приказ о переводе на 2 курс

{DOCVARIABLE Prik2 \* MERGEFORMAT}

Приказ о переводе на 3 курс

{DOCVARIABLE Prik3 \* MERGEFORMAT}

Приказ о переводе на 4 курс

{DOCVARIABLE Prik4 \* MERGEFORMAT}

Таблица 2.1 - Переменные шаблона Microsoft Word.

При нажатии на сводную ведомость появляется окно (Form3) представленная на рисунке 2.16.

Рисунок 2.16 - Форма для заполнения сводной ведомости.

Пользователю необходимо выбрать группу и семестр, программа формирует сводную ведомость, которая передается в Word:

if(Form3->ShowModal()!=mrOk) return;

Результат помещаю в переменную типа Variant, чтобы можно было впоследствии управлять этим документом.

Variant A_,B_,T_,D_,V_;

char gg[6],sp[3];

int kurs, sem, i,pre[20],kach[20],kol[20],kols=0;

for (i=0;i<20;i++) {pre[i]=0; kach[i]=0; kol[i]=0;}

String oo;

try{

A_ = CreateOleObject("Word.Application");

B_=A_.OlePropertyGet("WordBasic");

B_.OleProcedure("FileNew", (ExtractFilePath(ParamStr(0))+"Svod.dot").c_str());

D_=A_.OlePropertyGet("ActiveDocument");

V_=D_.OlePropertyGet("Variables");

strcpy(gg,Form3->DBLookupComboBox1->Text.c_str());

if (gg[1]=='-') {sp[0]=gg[0];sp[1]=0; kurs=gg[2]-48;}

else {sp[0]=gg[0];sp[1]=gg[1];sp[2]=0; kurs=gg[3]-48;}

sem=(kurs-1)*2+(Form3->RadioButton1->Checked?1:2);

V_.OleProcedure("Add", "Nom_kurs", kurs);

V_.OleProcedure("Add", "Nom_gr", (Form3->DBLookupComboBox1->Text) .c_str());

V_.OleProcedure("Add", "Sem", Form3->RadioButton1->Checked?1:2);

V_.OleProcedure("Add", "Uch_god", ((String)uch_god+"-"+(String)(uch_god+1)).c_str());

D_.OlePropertyGet("Fields").OleProcedure("Update");

B_.OleProcedure("AppShow");

//student->Filter="Spec='"+(String)sp+"' AND Nom_kurs="+(String)kurs+" AND Nom_gr="+(String)gr;

student->Filter="Gruppa='"+Form3->DBLookupComboBox1->Text+"'";

student->Filtered=true;

Label23->Caption=Form3->DBLookupComboBox1->Text;

ocenka->Active=false;

ocenkafio_stud->Visible=false;

ocenkafio_stud->FieldKind=fkCalculated;

ocenkan_predmet->FieldKind=fkLookup;

ocenkan_predmet->Visible=true;

ocenka->IndexName="Nom_zach";

ocenka->MasterFields="";

ocenka->MasterSource=dstudent;

ocenka->MasterFields="nom_zach";

ocenka->Active=true;

T_=D_.OlePropertyGet("Tables").OleFunction("Item",2);

student->First();

char sss[20];

int l=3;

while(!student->Eof)

Прописала команду для заполнения столбца ФИО из базы данных таблицы Student (Студенты).

{ T_.OleFunction("Cell",l,2).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",student->FieldByName("Fio")->AsString.c_str());

ocenka->First();

char oc[]="Oc0";

oc[2]=sem+48;

while(!ocenka->Eof)

Расставляем оценки в зависимости от ФИО студента и предмета в 19 столбцов ведомости.

{if (ocenka->FieldByName(oc)->IsNull) {ocenka->Next();continue;}

for (i=0;i<19;i++) if (pre[i]==0 || pre[i]==ocenka->FieldByName("predmet")->AsInteger) break;

if (i>=19) {ocenka->Next();continue;}

if (pre[i]==0)

{pre[i]=ocenka->FieldByName("predmet")->AsInteger;

T_.OleFunction("Cell",2,3+i).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",ocenka->FieldByName("n_predmet")->AsString.c_str()); }

oo=ocenka->FieldByName(oc)->AsString;

if (oo[1]=='5' || oo[1]=='4' || oo[1]=='з') kach[i]++;

if (oo[1]=='5' || oo[1]=='4' || oo[1]=='3' || oo[1]=='з') kol[i]++;

T_.OleFunction("Cell",l,3+i).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",oo.c_str());

ocenka->Next();}

l++;

kols++;

В одной группе не может быть больше 38 предметов, иначе программа не введет их в сводную таблицу.

if(l>38) break;

student->Next();}

for (i=0;i<19;i++)

{ if (pre[i]==0) break;

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

 T_.OleFunction("Cell",38,3+i).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",kach[i]*100/kols);

T_.OleFunction("Cell",39,3+i).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",kol[i]*100/kols);}

B_.OleProcedure("AppShow");}

catch(EOleException& e){ShowMessage("OleException "+e.Message);}

catch(EOleSysError& e){ShowMessage("OleSyserror "+e.Message);}

catch(Exception& e){ShowMessage("Exception "+e.Message);}

student->Filtered=false;

Label23->Caption=" ";

 TabSheet1->Show();}

Для зачетной ведомости аналогичным образом происходит передача данных из базы в документ Microsoft Word. При выборе в меню Зачетной ведомости открывается форма представленная на рисунке___, при выборе полей из раскрывающихся списков группа, предмет и преподаватель автоматически создается документ на основе шаблона zach. Происходит заполнение прописанных кодов-полей отписанных в таблице 2.1.

Рисунок 2.17 - Форма выбора данных для заполнения зачетной и экзаменационной ведомостей.

Задаем условие, если пользователь нажимает кнопку ОК, выполняется алгоритм:

{Form2->Label2->Visible=true;

Form2->DBLookupComboBox3->Visible=true;

if(Form2->ShowModal()!=mrOk) return;

Variant A_,B_,T_,D_,V_;

char gg[6],sp[3];

int kurs;

wchar_t www[100];

try{

A_ = CreateOleObject("Word.Application");

B_=A_.OlePropertyGet("WordBasic");

B_.OleProcedure("FileNew", (ExtractFilePath(ParamStr(0))+(Sender==N3?"Ekzam_ved.dot":"Zach.dot")).c_str());

D_=A_.OlePropertyGet("ActiveDocument");

V_=D_.OlePropertyGet("Variables");

V_.OleProcedure("Add", "Predmet", Form2->DBLookupComboBox2->Text.c_str());

strcpy(gg,Form2->DBLookupComboBox1->Text.c_str());

if (gg[1]=='-') {sp[0]=gg[0];sp[1]=0; kurs=gg[2]-48;}

else {sp[0]=gg[0];sp[1]=gg[1];sp[2]=0; kurs=gg[3]-48;}

V_.OleProcedure("Add", "Nom_kurs", kurs);

V_.OleProcedure("Add", "Nom_gr", (Form2->DBLookupComboBox1->Text) .c_str());

V_.OleProcedure("Add", "Spec", ((String)special->Lookup("Buk_spec",sp,"Naz_spec") +" ").c_str());

V_.OleProcedure("Add", "Prepod", (Form2->DBLookupComboBox3->Text +" ").c_str());

D_.OlePropertyGet("Fields").OleProcedure("Update");

B_.OleProcedure("AppShow");

Прописала фильтр по группе, которая была выбрана на форме (Form2)

student->Filter="Gruppa='"+Form2->DBLookupComboBox1->Text+"'";

Label23->Caption=Form2->DBLookupComboBox1->Text;

student->Filtered=true;

T_=D_.OlePropertyGet("Tables").OleFunction("Item",2);

student->First();

char sss[20];

int l=2,i;

while(!student->Eof)

Заполнение в таблице столбцов номер по порядку и фамилия, имя, отчество учащегося.

{ T_.OleFunction("Cell",l,1).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",itoa(l-1,sss,10));

T_.OleFunction("Cell",l,3).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",student->FieldByName("Fio")->AsString.c_str());

l++;

if(l>50) break;

student->Next();}

B_.OleProcedure("AppShow");}

Обработка возможной ошибки, которая может возникнуть при взаимодействии  с  MsWord.

 catch(EOleException& e){ShowMessage("OleException "+e.Message);}

catch(EOleSysError& e){ShowMessage("OleSyserror "+e.Message);}

catch(Exception& e){ShowMessage("Exception "+e.Message);}

student->Filtered=false;

Label23->Caption=" ";

 TabSheet1->Show();}

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

Набор данных Query связывается с компонентом UpdateSQL через свое свойство UpdateObject типа TDataSetUpdateObject, В качестве значения которого выбирается имя компонента UpdateSQL. Кроме того, для набора данных Query нужно установить значение true свойствам CachedUpdates и RequestLive.

Роль компонента UpdateSQL заключается в выполнении SQL-запросов, обновляющих необходимые записи связанного с ним набора данных Query

Этот компонент позволяет хранить и выполнять три разных запроса:

- update (редактирование записей);

- insert (вставка записей);

- delete (удаление записей).

Указанные запросы содержатся в свойствах ModifySQL, insertsql и DeleteSQL типа Tstrings соответственно. Таким образом, компонент UpdateSQL частично совмещает функциональность сразу трех компонентов Query.

Ввести тексты соответствующих запросов компонента UpdateSQL можно вручную аналогично тому, как это выполняется для свойства sql компонента Query. На этапе разработки приложения удобно использовать для этих целей Редактор свойств компонента UpdateSQL, окно которого показано на рисунке ____. Редактор свойств вызывается командой UpdateSQL Editor контекстного меню компонента или двойным щелчком на компоненте UpdateSQL.

В названии окна выводятся имена компонента UpdateSQL и соответствующего набора данных Query.

Редактор содержит две вкладки, первоначально выбрана вкладка параметров Options. В списке Table Name выбирается таблица, для записей которой включен механизм кэшированных изменений. Список содержит имена таблиц, указанных в запросе набора данных Query.

После выбора таблицы в списках ключевых (Key Fields) и обновляемых полей (Update Fields) отображается перечень ее столбцов. В первом списке нужно выделить столбцы, входящие в состав индекса и используемые при доступе к данным, а во втором — столбцы, значения которых будут обновляться.

Рисунок 2.18 - Редактирование свойств компонента UpdateSQL.

Запросы компонента UpdateSQL можно выполнить либо через вызов методов Компонента Database, либо через метод самого компонента UpdateSQL.

При подтверждении кэшированных изменений методом ApplyUpdates компонента Database для указанных наборов данных Query автоматически отрабатываются запросы соответствующего компонента updateSQL. Эти запросы и выполняют сохранение кэшированных изменений "своего" набора.

Набор данных Query связан с компонентами Database и UpdateSQL через свои свойства DatabaseName и UpdateObject соответственно.

Рисунок 2.19 - SQL-запросы компонента updateSQL.

Система C++ Builder автоматически учитывает все указанные в SQL- запросе параметры в специальном списке параметров, являющемся для набора данных Query значением свойства Params типа TParams, представляющим собой массив. Это свойство позволяет получить доступ к каждому параметру, как при разработке, так и при выполнении приложения. Чтобы обратиться к параметру во время выполнения приложения, следует указать его номер (индекс) в списке параметров или обратиться по имени параметра. На этапе разработки приложения можно вызвать Редактор параметров представленный на рисунке 2.20 в Инспекторе объектов. Тип каждого параметра целесообразно указать а свойстве DataType типа TFieldType.

Рисунок 2.20 - Окно Редактора параметров.

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

Набор данных Query, в отличие от компонента Table, может включать в себя записи более чем одной таблицы БД.

Текст запроса, на основании которого в набор данных отбираются записи, содержится в свойстве sql типа Tstrings. Запрос включает в себя команды на языке SQL и выполняется при открытии набора данных с помощью вызова его методов ExecSQL или Open. Запрос SQL иногда называют SQL- программой.

При формировании запроса на этапе разработки приложения я использовала текстовый редактор представленный на рисунке 2.21, вызываемый через Инспектор объектов двойным щелчком в области значения свойства sql.

Рисунок 2.21 - Редактирование запроса SQL

При выборе в пункте меню ввод часов преподавателей, открывается форма (Form4) представленная на рисунке 2.22.

Рисунок 2.22 - Выбор параметров для ввода часов преподавателей.

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

Год и месяц установлены компонентом CSpinEdit из вкладки Samples на панели инструментов C++ Builder - контейнеров для ввода значений атрибутов, а также поставьте каждому из них в соответствие объект Label (метка или комментарий, компонент проживает во вкладке Standard).

Далее измените название формы с Form4 (поле Caption окна инспектора свойств) на заголовок вида: «Учет часов». Наконец, поместите на рабочую область программы кнопка типа BitBtn из группы Additional и задайте в свойствах:

- для кнопки ОК Kind->bkOk;

- для отмены: Kind->bkCancel;

Перейдите в окно редактирования исходного кода и встройте после директивы:
#include "uchebka.h"следующую команду:
#include "Unit4.h"
Этим действием мы подключим четвертую форму к нашей основной программе или, проще говоря, активируем рабочую область четвертой формы. Теперь назначим действие ведущее к открытию вкладки часы для редактирования (изменение, удаление, добавление часов). Поместите
 следующий код:

{Form4->CSpinEdit1->Value=year(Date());

Form4->CSpinEdit2->Value=month(Date());

Form4->Label26->Visible=true;

Form4->Label1->Visible=true;

Form4->DBLookupComboBox3->Visible=true;

Form4->CSpinEdit2->Visible=true;

if(Form4->ShowModal()!=mrOk) return;

TLocateOptions Opts;

Opts.Clear();

Variant locvalues[5];

locvalues[0] = Variant(gruppa->FieldValues["gruppa"]);

locvalues[1] = Variant(predmet->FieldValues["Kod_pred"]);

locvalues[2] = Variant(prepod->FieldValues["Kod"]);

locvalues[3] = Variant(Form4->CSpinEdit1->Value);

locvalues[4] = Variant(Form4->CSpinEdit2->Value);

if (!chasi-Locate("Nom_gr;Predmet;Prepod;God;Mes",VarArrayOf(locvalues, 4), Opts))

{chasi->Append();

chasi->FieldValues["Nom_gr"] = gruppa->FieldValues["gruppa"];

chasi->FieldValues["Predmet"] = predmet->FieldValues["Kod_pred"];

chasi->FieldValues["Prepod"] = prepod->FieldValues["Kod"];

chasi->FieldValues["God"] = Form4->CSpinEdit1->Value;

chasi->FieldValues["Mes"] = Form4->CSpinEdit2->Value;

chasi->Post();}

TabSheet6->Show();}
В верхней части открывшейся вкладки отображаются: предмет, преподаватель, группа, год, месяц, которые можно просмотреть но не изменить.

Поля DBEdit от 1 до 31 предназначенные для ввода часов по числам месяца. На кнопку ОК происходит сохранение введенных данных.

Рисунок 2.23 - Вкладка ввода часов учебной работы преподавателя.

После ввода необходимых данных можно вывести ведомость учета часов преподавателей. Для этого в пункте меню выбираем Преподаватели->Ведомость учета часов.

Загружается Microsoft Word и соответствующие данные заполняют шаблон таблицы:

if(Form5->ShowModal()!=mrOk) return;

Variant A_,B_,T_,D_,V_;

int i,c0,cs;

try{ A_ = CreateOleObject("Word.Application");

B_=A_.OlePropertyGet("WordBasic");

B_.OleProcedure("FileNew", (ExtractFilePath(ParamStr(0))+"prep_chac.dot").c_str());

D_=A_.OlePropertyGet("ActiveDocument");

V_=D_.OlePropertyGet("Variables");

V_.OleProcedure("Add", "Nom_gr", (Form5->DBLookupComboBox3->Text) .c_str());

V_.OleProcedure("Add", "Mes", Form5->CSpinEdit2->Value);

V_.OleProcedure("Add", "God", Form5->CSpinEdit1->Value);

D_.OlePropertyGet("Fields").OleProcedure("Update");

B_.OleProcedure("AppShow");

chasi->Filter="Nom_gr='"+Form5->DBLookupComboBox3->Text+"' AND Mes="+(String)Form5->CSpinEdit2->Value+" AND God="+(String)Form5->CSpinEdit1->Value;

chasi->Filtered=true;

T_=D_.OlePropertyGet("Tables").OleFunction("Item",1);

chasi->First();

char sss[20];

int l=4;

while(!chasi->Eof)

{ T_.OleFunction("Cell",l,1).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",((String)predmet->Lookup("Kod_pred", chasi->FieldByName("predmet")->AsInteger, "Naim_pred")).c_str());

T_.OleFunction("Cell",l,2).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",((String)prepod->Lookup("Kod", chasi->FieldByName("prepod")->AsInteger, "Fio")).c_str());

char cc[]="c00";

cs=0;

for (i=1;i<=31;i++)

{ itoa(i,cc+1,10);

c0=chasi->FieldByName(cc)->AsInteger;

T_.OleFunction("Cell",l,2+i).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",c0);

cs+=c0;}

T_.OleFunction("Cell",l,34).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",cs);

l++;

if(l>30) break;

chasi->Next();}

chasi->Filtered=false;

B_.OleProcedure("AppShow");}

catch(EOleException& e){ShowMessage("OleException "+e.Message);}

catch(EOleSysError& e){ShowMessage("OleSyserror "+e.Message);}

catch(Exception& e){ShowMessage("Exception "+e.Message);}

chasi->Filtered=false;}

За год формируется отчет по часам, который передается в Microsoft Word.

{ Form4->Label26->Visible=false;

Form4->Label1->Visible=false;

Form4->DBLookupComboBox3->Visible=false;

Form4->CSpinEdit2->Visible=false;

if(Form4->ShowModal()!=mrOk) return;

Variant A_,B_,T_,D_,V_;

int cs;

char sss[20];

int l=1,i,mes;

int cha[13]; //сумма по строкам

int chag=0; // по столбам

try{

A_ = CreateOleObject("Word.Application");

B_=A_.OlePropertyGet("WordBasic");

B_.OleProcedure("FileNew", (ExtractFilePath(ParamStr(0))+"prep-sv.dot").c_str());

D_=A_.OlePropertyGet("ActiveDocument");

V_=D_.OlePropertyGet("Variables");

V_.OleProcedure("Add", "Fio", (prepod->FieldByName("Fio")->AsString).c_str());

V_.OleProcedure("Add", "Predmet", predmet->FieldByName("Naim_pred")->AsString.c_str());

V_.OleProcedure("Add", "Uch_god", ((String)Form4->CSpinEdit1->Value+"-"+(String)(Form4->CSpinEdit1->Value+1)).c_str()); D_.OlePropertyGet("Fields").OleProcedure("Update");

B_.OleProcedure("AppShow");

chasi->Filter="Prepod='"+prepod->FieldByName("Kod")->AsString+"' AND Predmet="+predmet->FieldByName("Kod_pred")->AsString+" AND (God="+(String)Form4->CSpinEdit1->Value+" AND Mes>8 OR God="+(String)(Form4->CSpinEdit1->Value+1)+" AND Mes<8 )";

chasi->Filtered=true;

T_=D_.OlePropertyGet("Tables").OleFunction("Item",1);

chasi->First();

for (i=1;i<13;i++) cha[i]=0;

grupf="";

while(!chasi->Eof)

{ if (grupf!=chasi->FieldByName("Nom_gr")->AsString)

{ if (chag){

T_.OleFunction("Cell",17,l).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",chag);

chag=0; }

l++;

if(l>13) break;

grupf=chasi->FieldByName("Nom_gr")->AsString;

T_.OleFunction("Cell",2,l).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",grupf.c_str()); }

mes=chasi->FieldByName("Mes")->AsInteger;

char cc[]="c00";

cs=0;

for (i=1;i<=31;i++)

{ itoa(i,cc+1,10);

cs+=chasi->FieldByName(cc)->AsInteger;}

cha[mes]+=cs;

chag+=cs;

T_.OleFunction("Cell",(mes>8? (mes-9):(mes+3))+4,l).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",cs);

chasi->Next();}

chasi->Filtered=false;

if (chag){

T_.OleFunction("Cell",17,l).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",chag); }

for (mes=1;mes<13;mes++)

{ T_.OleFunction("Cell",(mes>8? (mes-9):(mes+3))+4,14).OleProcedure("Select");

A_.OlePropertyGet("Selection").OlePropertySet("Text",cha[mes]);}

B_.OleProcedure("AppShow");}

catch(EOleException& e){ShowMessage("OleException "+e.Message);}

catch(EOleSysError& e){ShowMessage("OleSyserror "+e.Message);}

catch(Exception& e){ShowMessage("Exception "+e.Message);}

chasi->Filtered=false;}

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

Рисунок 2.24 - Форма перехода студентов на следующий учебный год.

char gg[6],sp[3];

hDBIDb hDb;

String kurator;

char dir[DBIMAXPATHLEN + 1];

if(Form7->ShowModal()!=mrOk) return;

hDb=nastr->DBHandle;

DbiGetDirectory(hDb,0,dir);

nastr->Active=false;

special->Active=false;

student->Active=false;

praktika->Active=false;

ocenka->Active=false;

predmet->Active=false;

gruppa->Active=false;

prepod->Active=false;

chasi->Active=false;

String ss=(String)dir+"arh.exe a -x*.rar -x*.exe A"+(String)uch_god+" *.*";

PROCESS_INFORMATION pin;

STARTUPINFO si;

memset(&si, 0, sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO);

si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;

si.wShowWindow = SW_HIDE;

si.hStdOutput = 0;

si.hStdError = 0;

if (!CreateProcess(0,ss.c_str(),0,0,1,0,0,dir,&si,&pin)){MessageBox(Form1->Handle,"Ошибка архивирования продолжение невозможно","Ошибка",MB_OK|MB_ICONERROR);return;}else{

CloseHandle(pin.hThread);

WaitForSingleObject(pin.hProcess, 200000); }

nastr->Active=true;

special->Active=true;

student->Active=true;

praktika->Active=true;

ocenka->Active=true;

predmet->Active=true;

gruppa->Active=true;

prepod->Active=true;

chasi->Active=true;

ocenka->IndexName="Nom_zach";

ocenka->MasterFields="";

ocenka->MasterSource=dstudent;

ocenka->MasterFields="nom_zach";

Label23->Caption="";

student->Filtered=false;

student->First();

while(!student->Eof){

if(special->Lookup("Buk_spec",student->FieldByName("Spec")->AsString,"Let")==student->FieldByName("Nom_kurs")->AsInteger)

{ if (student->RecNo==student->RecordCount) {student->Delete();break;}

student->Delete();

} else {

strcpy(gg,student->FieldByName("Gruppa")->AsString.c_str());

if (gg[1]=='-') {gg[2]++;}

else if (gg[2]=='-') {gg[3]++;}

student->Edit();

switch(student->FieldByName("Nom_kurs")->AsInteger){

case 1: student->FieldByName("Prik2")->AsString=Form7->Edit1->Text; break;

case 2: student->FieldByName("Prik3")->AsString=Form7->Edit1->Text; break;

case 3: student->FieldByName("Prik4")->AsString=Form7->Edit1->Text; break; }

student->FieldByName("Gruppa")->AsString=gg;

student->Post();

student->Next(); }}

int kk;

gruppa->Last();

while(!gruppa->Bof){

strcpy(gg,gruppa->FieldByName("Gruppa")->AsString.c_str());

if (gg[1]=='-') {sp[0]=gg[0];sp[1]=0;gg[2]++;kk=gg[2]-48;}

else if (gg[2]=='-') {sp[0]=gg[0];sp[1]=gg[1];sp[2]=0;gg[3]++;kk=gg[3]-48;}

if(special->Lookup("Buk_spec",sp,"Let")<kk){

gruppa->Delete();

gruppa->Prior();

}else {

gruppa->Edit();

gruppa->FieldByName("Gruppa")->AsString=gg;

gruppa->Post();

gruppa->Prior(); }}

nastr->Edit();

nastr->FieldByName("Uch_god")->AsInteger=++uch_god;

nastr->Post();

Form1->Caption="Учебная часть РПТ "+(String)uch_god+"-"+(String)(uch_god+1)+" учебный год"; }

Ежедневно выполняется проверка и переиндексация баз, по средам архивация. Для архивации вызывается внешний архиватор с параметрами для архивации всех файлов кроме exe и .rar в папке, имя файла соответствует дате архивации:

{char *bas[]={"chasi.db","gruppa.db","ocenka.db","praktika.db","predmet.db","prepod.db","special.db","student.db","propusk.db"};

WORD err;

char bbb[100];

hDBIDb hDb;

hDb=nastr->DBHandle;

char dir[DBIMAXPATHLEN + 1];

DbiGetDirectory(hDb,0,dir);

if (nastr->FieldByName("Datar")->AsDateTime!=Date()) {

if (Date().DayOfWeek()==4){

nastr->Close();

String ss=(String)dir+"arh.exe a -x*.rar -x*.exe "+Date().FormatString("yyyymmdd")+" *.*";

PROCESS_INFORMATION pin;

STARTUPINFO si;

memset(&si, 0, sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO);

si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;

si.wShowWindow = SW_HIDE;

si.hStdOutput = 0;

si.hStdError = 0;

if (!CreateProcess(0,ss.c_str(),0,0,1,0,0,dir,&si,&pin)){MessageBox(Form1->Handle,"Ошибка архивирования","Ошибка",MB_OK|MB_ICONERROR);}else{

CloseHandle(pin.hThread);

WaitForSingleObject(pin.hProcess, 200000); } }

nastr->Close();

nastr->Exclusive=true;

try{

nastr->Open();

}catch(EDatabaseError &E)

{ nastr->Exclusive=false;

nastr->Open();

return; }

for (int i=0;i<9;i++)

{ //err=DbiRegenIndexes(Table1->Handle);

CRTblDesc TblDesc;

memset((void *) &TblDesc, 0, sizeof(CRTblDesc));

lstrcpy(TblDesc.szTblName, bas[i]);

lstrcpy(TblDesc.szTblType, szPARADOX);

TblDesc.bPack = TRUE;

err=DbiDoRestructure(hDb,1,&TblDesc,0,0,0,0);

if (err!=DBIERR_NONE)

{ sprintf(bbb,"Ошибка переиндексации %x",err);

MessageBox(0,bbb,bas[i],MB_OK); } }

nastr->Close();

nastr->Exclusive=false;

nastr->Open();

nastr->Edit();

nastr->FieldValues["Datar"]=Date();

nastr->Post(); }}


3 Организация интерфейса с пользователем 

Программа состоит из исполняемого модуля uch_chast1.exe, шаблонов Ekzam_ved.dot, lichn.dot, svod.dot, pred_chac.dot, pred_sv.dot, usp.dot, zach.dot, эти шаблоны должны находиться в папке куда была установлена программа (C:\Uch1).

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

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

 

3.1 Сервисные функции программы РПТ

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

«Учебная часть РПТ»

Компактное хранение информации. Программа помогает компактно хранить необходимые в работе документы и данные.

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

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

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

Требования являются рекомендуемыми для работы с программой  «Учебная часть РПТ».

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

Общие требования

Привод CD-ROM или DVD-ROM

Требуется наличие устройства чтения CD-ROM или DVD-ROM для установки программы.

Microsoft Word

Версии 2000-2003

BDE

Версии 4.0

Таблица 3.1 – Общие требования к программе Учебная часть РПТ

Процессор

Celeron 500 МГц

Оперативная память

128 Мб

Операционная система

Windows 98 - ХР

Настройки экрана

разрешение 800х600 пикселей

Жесткий диск

Программная оболочка занимает около 2 Мб

Таблица 3.2 – Требования для запуска программной оболочки

Для установки программы необходимо:

Скопировать папку с программой на жесткий диск (рекомендуется в корень диска С:\);

Установить  BDE;

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

Главное окно программы

Композиция главного окна программы  «Учебная часть РПТ»  содержит главное меню, список студентов.

 

Рисунок 3.1 - Главное окно системы и его составляющие.

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

Рисунок 3.2 - Панель навигации.

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

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

Рисунок  3.3 - Список студентов загруженный в основное окно программы.

3.2 Руководство пользователя

3.2.1Запуск программы

Нажмите кнопку Пуск на панели задач и перейдите в меню Мой компьютер/Локальный  диск С:\Uch1\Uch_chast. Запустите систему двойным щелчком по значку.

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

3.2.2 Работа с программой

Данный модуль (окно) в программе предназначен для работы со списками.

Программа позволяет отобразить как полный список учащихся Рузаевского политехнического техникума (в меню Студенты->Список->Полный), так и списки по группам (в меню Студенты->Список->По группам-> выбираем нужную группу, например А-11).


Рисунок 3.4 - Работа со списком студентов в главном окне программы.

Производимые действия над списком (кнопки панели навигации в нижней части окна):

Добавить (+)- добавление новой записи;
Изменить (▲) - редактирование записи (при редактировании списка студентов, программа автоматически переходит на вкладку личная карточка, для перехода на список нажмите ОК, или кнопочку крестик в верхней части рабочей области программы);
Удалить (-)- удаление записи;
Принять изменения (٧) – сохраняет внесенные изменения в базе данных;
Отменить изменения (Х) – оставляет исходный вариант без исправления последний записи;
Первая строка (|<) – переход курсора мыши на первую строку списка;
Последняя строка (|>) – переход курсора мыши на последнюю строку списка;
Следующая строка (>) – переход курсора мыши с активной строки на следующую;
Предыдущая строка (<) – переход курсора мыши с активной строки на предыдущую;
Обновить ( ‎ )  - перечитывает содержимое программы и отображает с внесенными изменениями.

Если в списке  нет студента, то его необходимо добавить. Для этого на панели навигации нажимаем кнопку  Добавить (+). Перед нами отображается окно «Личная карточка студента». Необходимо ввести данные по студенту:

номер зачетки;

Фамилия Имя Отчество;

группа;

выбрать в календаре дату поступления;

Заполнить приказ о зачислении и другие поля.

Курс и специальность устанавливаются автоматически в зависимости от группы.

Рисунок 3.5 - Заполнение личной карточки студента.

Для внесения исправлений  личной карточки  можно перейти из главного меню программы, для этого выбрать Студенты->Личная карточка».

В нижней части основного окна (Список студентов) имеется набор кнопок:

Успеваемость студента;

Успеваемость за семестр;

Распечатать личную карточку.

Справочник предназначен для внесения информации в базу данных. В программе «Учебная часть РПТ» их 4: предметы, преподаватели, группы, специальности.

Рисунок 3.6 - Работа со справочниками программы Учебная часть РПТ.

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

Для того чтобы выставить студенту оценки, необходимо:

Выделить строку с нужной фамилией студента, затем в главном меню программы выбрать Студенты->Успеваемость, или в основном окне программы (Список студентов) нажать на кнопку Успеваемость студента.

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

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

Рисунок 3.7 - Успеваемость студента

В поля оценок допускается вводить: 2, 3, 4, 5, зач, н/з, н/я, и две оценки через /. При расчетах успеваемости в отчетах обрабатывается только первый символ оценки. При этом «з» - означает зачет, «н» - равносильно «2».

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

Отчет формируется в документе Microsoft Word.

Для вывода отчета необходимо:

Перейти на вкладку студенты.

Нажать на кнопку Успеваемость за семестр.

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

В появившимся  документе Microsoft Word можно внести необходимые изменения, сохранить или распечатать отчет.

Примечание/ Для успевающих студентов (обучающихся на 5,4,3) отображаются ФИО, для неуспевающих (имеющих оценку 2) – ФИО и дисциплина по которой есть задолжность.

При нажатии на кнопку Распечатать личную карточку студента запускается приложение Microsoft Word. Документ является двусторонним, поэтому размещается на двух страницах. Если пользователь все правильно оформил в программе, полученный документ можно сразу распечатывать, не внося исправления.

В этом документе автоматически заполняются:

Фамилия имя отчество студента

Курс, группа, специальность

Число, месяц и год рождения

Место рождения, адрес родителей, национальность, пол

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

Оценки успеваемости с 1 по 4 курс

Практики (учебная и производственная).

Рисунок 3.8 -  Выбор параметров из раскрывающихся списков.

При нажатии в панели меню Студенты->Оценки по ведомости открывается страница. В верхней части, которой отображается группа и дисциплина, по которой необходимо выставить оценки, в рабочей части – находится таблица, содержащая ФИО, группу и оценки по семестрам.

Рисунок 3.9 - Ввод оценок по ведомости.

Эта вкладка создана для удобства работы, позволяет вводить оценки по группе.

В конце каждого семестра необходимо заполнить ведомости (экзаменационную, зачетную сводную).

Работа с экзаменационной  и зачетной ведомостями.

Для того чтобы передать ведомость в Word необходимо:

В главном меню выбрать Ведомости->Экзаменационная либо Зачетная.

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

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

Нажать ОК

Для того чтобы передать ведомость в Word необходимо:

В главном меню выбрать Ведомости->Сводная

Выбрать из раскрывающегося списка Группу и указать переключателем семестр. Нажать ОК.

Рисунок 3.11 - Установление параметров для вывода сводной ведомости.

Для учета часов преподавателей выводятся два отчета: учет часов, сводная ведомость по часам. Для заполнения ведомости «Учет часов преподавателей» выберите в главном меню пункт Преподаватели->Учет часов.

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

Рисунок 3.12 - Задание параметров для ввода часов преподавателей.

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

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

Затем для сохранения данных нажать ОК.

3.2.3 Завершение работы

Работа с программой «Учебная часть РПТ» завершается обычным способом - закрытием главного окна программы. При выходе автоматически сохраняются все данные.


Заключение

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

Применение компьютера сокращает время работы, обладает широкими возможностями в области ввода нового материала, позволяет использовать готовые формы, таблицы для предоставления нужной и актуальной информации, чем при работе с документами вручную и т.д. Наиболее перспективным на данный момент для общеобразовательного учреждения Рузаевский политехнический техникум является применение программы «Учебная часть РПТ». Из проведенного анализа существующих ныне программ видно, что есть еще множество проблем в области компьютеризации работы. Многие разработанные системы не позволяют решить требуемые задачи. Основные причины этого – специфика конкретного учебного заведения, высокая стоимость. В дипломном проекте был рассмотрен вопрос об автоматизации учебного процесса очного отделения, которая позволяет повысить эффективность работы.

База данных Учебная часть РПТ позволяет: сформировать личную карточку студента, вывести отчет по успеваемости группы, подготовить на печать заполненные бланки зачетной и экзаменационной ведомостей, автоматически сформировать сводную ведомость за семестр, из введенные данных в базу формирует ведомость учета часов учебной работы преподавателя позволяет вывести отчет в Microsoft Word, для перевода студентов на следующий учебный год предусмотрен ввод приказа для всех студентов учебного заведения. Для внесения изменений в базу данных  предусмотрены справочники, которые вызываются из меню программы. В случае сбоя работы компьютера предусмотрено восстановление баз из архива arh.exe имеющим название год, число, месяц, например 20080604.rar

База данных может работать как независимая вызываемая из программы Учебная часть РПТ так и в связи с программой  АРМ2 (Автоматизированное рабочие место 2), предусмотрена доработка и усовершенствование программы.


Список используемых источников

  1.  Хомоненко А.Д., Ададуров С.Е. Работа с базами данных в C++ Builder, Санкт-Петербург, 2006.- 480 с.
  2.  C++ для «чайников», 4-е издание.: Пер. с англ.: - М.: «Вильямс», 2003. – 336 с.
  3.  Гофман В, Хомоненко А. C++. Секреты программирования,– 289 с.
  4.  Вирт Н. Алгоритмы и структуры данных / Пер. с англ. — М.: Мир, 1999. - 360 с.,
  5.   Гринзоу Лу. Философия программирования для Windows XP/NT / Пер. с англ. — СПб.: Символ-Плюс, 2005. — 640 с.
  6.   Зелковиц М., Шоу А., Гэннон Дж. Принципы разработки программного обеспечения / Пер. с англ. — М.: Мир, 2004. — 386 с.
  7.   Практическое руководство по программированию / Пер. с англ. Б. Мик, П. Хит, Н. Рашби и др.; под ред. Б. Мика, П. Хит, Н. Рашби. — М.: Радио и связь, 2006. — 168 с.
  8.   Фокс Дж. Программное обеспечение и его разработка / Пер. с англ. — М.: Мир, 2005. - 368 с.
  9.   Язык компьютера. Пер. с англ, под ред. и с предисл. В. М. Курочки-на. — М.: Мир, 2007. - 240 с.
  10.  Сайт www.PowerBuilder.sbn.bz
  11.  Программирование на C++ глазами хакера, Флемов М.Е., Изд. БХВ-Петербург, 2004-336 с.
  12.  Рубрика "Кодинг" журнала "Хакер" (Гэймлэнд) — содержит полезные советы и примеры на C++ и Delphi.
  13.  http://www.vr_online.ru .


Выполнила Фомичева Юлия

http://www.fysllia.narod.ru/

PAGE  91

                                                                                                                                      


Запись

Поля

DataSet

DataBaseName

TableName

DataSource

ataSource

DBGrid1

DBNavigator1

Data-

Sourсe1

Table1

Student.dbf

Верхнее меню

Панель навигации

Основное окно

Основное окно


 

А также другие работы, которые могут Вас заинтересовать

50195. ИЗУЧЕНИЕ ПРИНЦИПА ДЕЙСТВИЯ И ХАРАКТЕРИСТИК ЭЛЕКТРОННЫХ ЛАМП 336.5 KB
  Важнейшей характеристикой диода является зависимость силы тока текущего через лампу анодного тока от разности потенциалов между катодом и анодом анодного напряжения. Анодный ток зависит от анодного напряжения и от температуры катода. При постоянной температуре катода анодный ток возрастает с увеличением анодного напряжения . Поскольку механизм возникновения электрического тока в этом случае отличается от механизма возникновения тока в проводниках то зависимость анодного тока от анодного напряжения не описывается законом Ома.
50197. Развитие русской социологической мысли: этапы, школы, представители 17.23 KB
  Социологическая мысль в России развивается как часть общемировой социологической науки. Изменение общественных отношений, вызванное развитием капитализма в России после реформ 60-70-х гг.
50198. Нечеткая логика 68 KB
  Согласно заданным вариантам разработать программу на любом алгоритмическом языке, способную: А. Различать степени изменения лингвистической переменной в трех степенях – «Очень – Нормально – Слабо» Б. Изменять порог чувствительности. Негр – Мулат – Белый
50199. ВИВЧЕННЯ ДИФРАКЦІЇ ФРАУНГОФЕРА НА ДВОХ ЩІЛИНАХ 132 KB
  Всі деталі установки розміщаються в рейтерах. Пластини зі щілинами встановлюються в тримач, який містить пристрій, що дозволяє регулювати і встановлювати пластини відносно світлового променя. На оптичній лаві закріплена масштабна лінійка довжиною 1м з ціною поділки 1мм.
50200. Нечеткая логика 69 KB
  А. Различать степени изменения лингвистической переменной в трех степенях – «Очень – Нормально – Слабо» Б. Изменять порог чувствительности. Адский – земной – святой
50201. Основы построения систем и комплексов подвижной радиосвязи. Методическая разработка 117.5 KB
  МЕТОДИЧЕСКАЯ РАЗРАБОТКА ДЛЯ ПРОВЕДЕНИЯ КУРСОВОЙ РАБОТЫ по учебной дисциплине Средства и комплексы подвижной радиосвязи ДД41505 Тема № 03 Основы построения систем и комплексов подвижной радиосвязи Занятие № 21 Расчет основных характеристик сети подвижной радиосвязи Обсуждена на заседании ПМК . Учебные цели Сформировать навыки самостоятельного применения полученных знаний для расчета и обоснования основных характеристик сети подвижной радиосвязи. Исходные данные: стандарт системы подвижной радиосвязи; ТТХ элементов сети;...
50202. Дослідження спектрального розподілу оптичної густини і визначення концентрацій водних розчинів 591.5 KB
  В даній лабораторній роботі для дослідження спектрального розподілу оптичної густини розчинів використовується фотоелектричний спектрофотометр типу КФК–3 оптична схема якого наведена на рис. Головним елементом оптичної схеми спектрофотометра є дифракційна гратка 4 яка працює на відбивання. За рахунок виникнення оптичної різниці ходу променів що відбиваються від кожного з елементів решітки на “екраніâ€ дзеркало 5 утворюється дифракційний спектр який спрямовується на вихідну діафрагму Д2 так що в її щілину проходить лише невелика...
50203. САПР технологических процессов, конспект лекций 11.79 MB
  С помощью САПР в десятки раз ускоряется разработка конструкторской и технологической документации, при этом обеспечивается возможность обнаружения ошибок, от проектирования на ранних этапах до передачи изделия в производство.