Базы данных
Разработка алгоритмов работы программы После запуска программы происходит подключение модулей. Вход в БД происходит через главную форму. Далее пользователь необходимо выбрать нужную форму для работы с данными, либо для работы с отчетами. При открытии форм из меню «Справочники» перед пользователем отображается форма, где можно выбрать нужную запись и производить необходимые операции с данными. При… Читать ещё >
Базы данных (реферат, курсовая, диплом, контрольная)
Введение
Индустрия разработки автоматизированных информационных систем управления появилась в 50 — 60-х годах и к концу века приобрела вполне законченные формы.
Производительность является главным фактором, определяющим эффективность системы. Правильное проектное решение служит основой высокопроизводительной системы.
На этапе проектирования формируется модель данных. Проектировщики в качестве исходной информации получают результаты анализа. Конечным продуктом этапа проектирования являются:
· схема базы данных (на основании ER-модели, разработанной на этапе анализа);
· набор спецификаций модулей системы (они строятся на базе моделей функций).
Проектирование информационных систем охватывает три основные области:
· проектирование объектов данных, которые будут реализованы в базе данных;
· проектирование программ, экранных форм, отчетов, которые будут обеспечивать выполнение запросов к данным;
· учет конкретной среды или технологии, а именно: топологии сети, конфигурации аппаратных средств, используемой архитектуры (файл-сервер или клиент-сервер), параллельной обработки, распределенной обработки данных и т. п.
В реальных условиях проектирование — это поиск способа, который удовлетворяет требованиям функциональности системы средствами имеющихся технологий с учетом заданных ограничений.
В курсовой работе будет разработана информационная система «Электронный деканат». Данная система направлена на информационную поддержку деканата, автоматизирует такие виды деятельности как: сбор, хранение, анализ данных об успеваемости студентов и данных о преподавателях. В ходе проектирования информационной системы будет произведено проектирование объектов данных, проектирование экранных форм, отчетов, которые будут обеспечивать выполнение запросов к данным.
1. Словесное описание предметной области Автоматизированная система «Электронный деканат», основанная на современной базе данных, представляет собой программно-технический комплекс, предназначенный для автоматизации деятельности сотрудника деканата. Основной функцией Электронного деканата является хранение и обработка информации о ходе учебного процесса и его участниках. Электронный деканат позволяет выполнять ряд функций традиционного деканата на более технологичном уровне, значительно сокращая время выполнения определенной работы традиционного деканата.
Автоматизация деятельности деканата позволяет:
· Значительно сократить время, затрачиваемое сотрудниками деканата на выполнение регламентных процедур (например, редактирование информации, поиск личных данных студентов и т. д.);
· Упростить процедуру действий с данными, которые используются в период учебного процесса;
· Автоматизировать формирование и подготовку на печать необходимых документов.
База данных обеспечивает хранение, накопление и предоставление всей информации об учащихся, предметах, преподавателях, успеваемости учащихся.
Задачи Электронного деканата:
1. Учет контингента
2. Автоматизированная подготовка документов:
· формирование и печать ведомостей
· ведение карточек студентов
· печать (экспорт в MS Excel) любой таблицы с экрана
· формирование и печать справок, академических справок
· формирование и печать списков студентов, имеющих одну или более задолженностей по предметам
· подготовка сведений об отличниках (на повышенную стипендию), студентах, не имеющих троек (на стипендию)
3. Хранение и выдача информации по текущему состоянию и истории учебного процесса.
Потребителями информации из БД являются сотрудники деканата.
Входная информация поступает в БД в виде:
? данных о студентах;
? данных о преподавателях;
На выходе пользователи системы получают информацию в виде:
? списков студентов по группам;
? ведомостей;
? личных карточек студентов;
? справок;
? академических справок.
Проанализировав предметную область и сферу работы сотрудника деканата, можно сказать, что разработка рассматриваемой базы данных весьма актуальна и действительно позволит автоматизировать работу пользователя.
2. Построение схемы функциональных зависимостей На основе проведенного анализа предметной области строится схема функциональных зависимостей, включающая в себя все атрибуты, определенные на предыдущем этапе, и зависимости объединяющие их.
Схема функциональных зависимостей представлена на рисунке 2.1.
Рисунок 2.1 — Схема функциональных зависимостей Из приведенной схемы видно, что атрибуты «дата», «оценка» функционально зависят от атрибута «№ оценки». Аналогично атрибуты «ФИО», «Дата рождения», «Пол», «Курс», «Гражданство», «Форма обучения», «Основа» функционально зависят от атрибута «№ студента» .
Атрибут «Название» зависит от атрибута «№ специальности». Каждая специальность может включать в себя несколько групп.
Атрибут «Название» зависит от атрибута «№ группы». Каждая группа включает множество студентов.
Также атрибут «Название» зависит от атрибута «№ должности». Одну должность могут занимать несколько преподавателей.
Атрибуты «Название», «Кабинет», «Телефон» зависят от атрибута «№ кафедры». Каждая кафедра включает несколько преподавателей.
Атрибуты «ФИО», «Адрес» «Телефон» зависят от атрибута «№ преподавателя». Каждый преподаватель может вести несколько предметов.
2.1 Формирование 1НФ Исходное отношение, находящееся в 1НФ, строится из всех атрибутов, выделенных в предметной области, и представлено на рисунке 2.1.1.
Дата | |
Оценка | |
№ оценки * | |
№ предмета * | |
Название | |
№ преподавателя | |
ФИО | |
Адрес | |
Телефон | |
№ должности | |
Название | |
№ кафедры | |
Название | |
Кабинет | |
Телефон | |
№ специальности | |
Название | |
№ группы | |
Название | |
№ студента * | |
ФИО | |
Дата рождения | |
Пол | |
Курс | |
Гражданство | |
Форма обучения | |
Основа | |
Рисунок 2.1.1 — Исходное отношение в 1НФ Первичными ключами исходного отношения являются атрибуты: «№ оценки», «№ предмета», «№ студента». Все атрибуты, не вошедшие в первичный ключ, непосредственно или транзитивно, полностью или частично зависят от первичного ключа.
2.2 Нормализация отношений Для перевода отношения из 1НФ в 2НФ необходимо исключить из исходного отношения частичные функциональные зависимости неключевых атрибутов от первичного ключа. В представленном на рисунке 2.2 отношении в соответствии со схемой функциональных зависимостей присутствуют частичные функциональные зависимости одних атрибутов от других атрибутов, которые являются частью составного первичного ключа исходного отношения. Так присутствуют следующие частичные функциональные зависимости: атрибутов «ФИО», «Дата рождения», «Пол», «Курс», «№ группы», «Название», «Гражданство», «Форма обучения», «Основа» от атрибута «№ студента»; атрибутов «№ преподавателя», «№ студента», «№ предмета», «Оценка», «Дата» от атрибута «№ оценки»; атрибута «Название» от атрибута «№ предмета». Для исключения этих зависимостей по правилам декомпозиции исходное отношение R разбивается на четыре отношения R1, R2, R3, R4.
Рисунок 2.2.1 — Схема отношений в 2НФ Далее необходимо привести полученные отношения R1, R2, R3, R4 к 3НФ. Для этого требуется исключить присутствующие в них транзитивные зависимости. В отношении R3 атрибуты «Название группы», «№ специальности», «Название» зависят от первичного ключа транзитивно через атрибут «№ группы». Для перевода этого отношения в 3НФ его необходимо разбить по атрибуту «№ группы» на два отношения R3 и R5. В отношении R5 атрибут «Название» зависит от первичного ключа транзитивно через атрибут «№ специальности». Для перевода этого отношения в 3НФ его необходимо разбить по атрибуту «№ специальности» на два отношения R5 и R6. В отношении R1 атрибут «Название должности» зависит от первичного ключа транзитивно через атрибут «№ должности». Для перевода этого отношения в 3НФ его необходимо разбить по атрибуту «№ должности» на два отношения R1 и R7. В отношении R1 атрибуты «Название кафедры», «Кабинет», «Телефон» зависят от первичного ключа транзитивно через атрибут «№ кафедры». Для перевода этого отношения в 3НФ его необходимо разбить по атрибуту «№ кафедры» на два отношения R1 и R8.
В результате получим отношения R1, R2, R3, R4, R5, R6, R7, R8. Поскольку во всех полученных отношениях все функциональные зависимости сводятся к полной нетранзитивной зависимости от первичного ключа (т. е. отсутствуют зависимости частей составных первичных ключей от неключевых атрибутов) эта схема удовлетворяет всем требованиям НФБК и является конечным результатом концептуального проектирования (рисунок 2.2.2).
Рисунок 2.2.2 — Схема отношений в 3НФ
3. Реализация БД
3.1 Создание БД средствами утилиты Enterprise Manager в формате MS SQL
база данные утилита программа Запускается среда SQL Server Management Studio. Проводится соединение с сервером ADMIN. В обозревателе выбирается подкаталог Базы данных, в котором создается своя база данных (БД, рисунок 3.1).
Рисунок 3.1 — Создание базы данных После создания базы данных в ней формируются необходимые таблицы.
Первой создается таблица, которая будет хранить данные о кафедрах. Описываются поля, которые будут присутствовать в таблице, указывается тип поля, а при необходимости — спецификации идентификатора и будет ли поле ключевым.
Описанные поля:
— id_kafedra — уникальный номер кафедры, ключевое поле, тип — целое (int);
— nazvanie — название кафедры, текстовое поле (nvarchar), размер 50 символов;
— kabinet — номер кабинета, в котором располагается кафедра, текстовое поле (nvarchar), размер 50 символов;
— telephone — контактный телефон, текстовое поле (nvarchar), размер 50 символов;
Для всех полей отключается свойство «Разрешить значения NULL» (поля обязательны для ввода). Далее таблица сохраняется с именем «Kafedra» .
Таблица представлена на рисунке 3.2.
Рисунок 3.2 — Таблица «Кафедра»
Создается новая таблица, которая будет хранить данные о должностях. Описываются поля, которые будут присутствовать в таблице.
Описанные поля:
— id_dolzhnost — уникальный номер должности, ключевое поле, тип — целое (int);
— nazvanie — название должности, которую занимают преподаватели, тип — текстовый (varchar), размер 50 символов. Далее таблица сохраняется с именем «Dolzhnost» .
Таблица представлена на рисунке 3.3.
Рисунок 3.3 — Таблица «Должность»
Создается новая таблица, которая будет хранить данные о специальностях, которые есть на факультете. Описываются поля, которые будут присутствовать в таблице.
Описанные поля:
— id_spec — уникальный номер специальности, ключевое поле, тип — целое (int);
— nazvanie — название специальности, текстовое поле (varchar), размер 50 символов;
— opisanie — описание специальности, текстовое поле (varchar), размер 50 символов.
Для поля «Nazvanie» отключается свойство «Разрешить значения NULL» (поле обязательно для ввода). Далее таблица сохраняется с именем «Specialnost». Таблица представлена на рисунке 3.4.
Рисунок 3.4 — Таблица «Специальности»
Создается новая таблица, которая будет хранить данные о группах. Описываются поля, которые будут присутствовать в таблице.
Описанные поля:
— id_gruppi — уникальный номер группы, ключевое поле, тип — целое (int);
— id_spec — идентификатор специальности, тип — целое (int);
— nazvanie — название группы, текстовое поле (char), размер 50 символов;
Для всех полей отключается свойство «Разрешить значения NULL» (поля обязательны для ввода). Далее таблица сохраняется с именем «Gruppa» .
Таблица представлена на рисунке 3.5.
Рисунок 3.5 — Таблица «Группа»
Создается новая таблица, которая будет хранить данные о преподавателях. Описываются поля, которые будут присутствовать в таблице.
Описанные поля:
— id_prepod — уникальный номер преподавателя, ключевое поле, тип — целое (int);
— id_dolzhnost — идентификатор должности, тип — целое (int);
— id_kafedri — идентификатор кафедры, тип — целое (int);
— FIO — ФИО преподавателя, текстовое поле (varchar), размер 250 символов;
— Adres — адрес преподавателя, текстовое поле (varchar), размер 50 символов;
— Telephone — контактный телефон преподавателя, текстовое поле (varchar), размер 50 символов.
Для всех полей кроме «Telephone» отключается свойство «Разрешить значения NULL» (поля обязательны для ввода). Далее таблица сохраняется с именем «Prepodavatel». Таблица представлена на рисунке 3.6.
Рисунок 3.6 — Таблица «Преподаватель»
Создается новая таблица, которая будет хранить данные о предметах. Описываются поля, которые будут присутствовать в таблице.
Описанные поля:
— id_predmeta — уникальный номер предмета, ключевое поле, тип — целое (int);
— prepodavatel — идентификатор преподавателя, тип — целое (int);
— nazvanie — название предмета, текстовое поле (varchar), размер 20 символов;
Для всех полей отключается свойство «Разрешить значения NULL» (поля обязательны для ввода). Далее таблица сохраняется с именем «Predmet» .
Таблица представлена на рисунке 3.7.
Рисунок 3.7 — Таблица «Предмет»
Создается новая таблица, которая будет хранить данные о студентах. Описываются поля, которые будут присутствовать в таблице.
Описанные поля:
— id_student — уникальный номер студента, ключевое поле, тип — целое (int);
— id_gruppi — идентификатор группы, тип — целое (int);
— Familiya — фамилия студента, текстовое поле (varchar), размер 30 символов;
— Imya — имя студента, текстовое поле (varchar), размер 30 символов;
— Otchestvo — отчество студента, текстовое поле (varchar), размер 30 символов;
— Data_r — дата рождения студента, тип — дата (datetime);
— Pol — пол студента, текстовое поле (varchar), размер 30 символов;
— Kurs — текущий курс, тип — целое (int);
— Forma — форма обучения, текстовое поле (varchar), размер 50 символов;
— Osnova — основа обучения, текстовое поле (varchar), размер 50 символов.
Для всех полей, отключается свойство «Разрешить значения NULL» (поля обязательны для ввода). Далее таблица сохраняется с именем «Student» .
Таблица представлена на рисунке 3.8.
Рисунок 3.8 — Таблица «Студенты»
Создается новая таблица, которая будет хранить данные об оценках студентов. Описываются поля, которые будут присутствовать в таблице.
Описанные поля:
— id_zapisi — уникальный номер выставленной оценки, ключевое поле, тип — целое (int);
— id_student — идентификатор студента, тип — целое (int);
— id_predmeta — идентификатор предмета, тип — целое (int);
— ocenka — оценка, тип — целое (int);
— data — дата, тип — дата (datetime).
Для всех полей, отключается свойство «Разрешить значения NULL» (поля обязательны для ввода). Далее таблица сохраняется с именем «Ocenka» .
Таблица представлена на рисунке 3.9.
Рисунок 3.9 — Таблица «Оценка»
После создания всех необходимых таблиц создается диаграмма базы данных. Для этого в поле создания диаграммы данных добавляются все таблицы. Затем указываются связи между таблицами. Связь ведется от неподчиненной таблицы к подчиненной. Диаграмма базы данных представлена на рисунке 3.10.
Рисунок 3.10 — Диаграмма базы данных
4. Разработка алгоритмов работы программы После запуска программы происходит подключение модулей. Вход в БД происходит через главную форму. Далее пользователь необходимо выбрать нужную форму для работы с данными, либо для работы с отчетами. При открытии форм из меню «Справочники» перед пользователем отображается форма, где можно выбрать нужную запись и производить необходимые операции с данными. При открытии формы «Студенты» можно произвести поиск по указанным характеристикам. При переводе в другую группу или повышении курса происходит обновление текущей записи. При переходе на форму «Группа» пользователь может открыть отчеты, которые отображают информацию о статистике групп и составе текущей. На форме «Оценки» пользователь может увидеть успеваемость студентов по различным категориям и получить соответствующую печатную форму.
Блок-схема данного процесса представлена в приложении, А на рисунке А.1.
5. Разработка приложения пользователя БД
5.1 Форма «Main»
Навигационная форма, с помощью которой можно перейти на дочерние формы для работы с данными и отчетами. На ней расположены следующие компоненты: таблица — Button (при нажатии переход на дочернюю форму), MainMenu (для перехода на дочерние формы и выхода).
Рисунок 5.1.1 — Форма «Main»
5.2 Форма «Data»
Форма содержит компоненты для подключения к базе. Компонент ADOConnection (для создания соединения с БД, расположенной на сервере); компонент DataSource, обеспечивающий связь таблиц с соответствующими компонентами ADOTable, который, в свою очередь, необходим для доступа к таблицам базы данных.
Рисунок 5.2.1 — Форма «Дата»
Чтобы создать соединение необходимо в свойстве ConnectionString компонента ADOConnection указать источник БД (рисунок 5.2.2, рисунок 5.2.3).
Рисунок 5.2.2 — Окно ADOConnection ConnectionString
Рисунок 5.2.3 — Создание соединения Для компонента ADOTable указывается свойство Connection:=ADOConnection1, а для того чтобы осуществить доступ к необходимой таблице указывается в свойстве TableName.
5.3 Форма «Результаты выборки»
Форма отображает результаты поиска, параметры для которого указываются на форме «Студенты». Для отображения данных используется DBGrid1, который связан с запросом на форме «Студенты» (Form2.DataSource1). Компонент Button1 позволяет закрыть форму.
Рисунок 5.3 -Форма «Результаты выборки»
5.4 Форма «Студенты»
На рисунке 5.4.1 приведена форма программы — «Студенты» (несет информацию о студентах деканата). На ней расположены следующие компоненты: таблица — DBGrid1 (таблица «Студенты»), компоненты DBNavigator, позволяющие пользователю перемещаться по записям в таблице и изменять их; компонент DataSource1, обеспечивающий связь таблиц с соответствующими компонентами ADOQuery1, который, в свою очередь, необходим для доступа к таблице базы данных, кнопки: Button1, Button2, Button3, Button4, Button5 — для удаления текущей записи, перевода студента на следующий курс, перевод в другую группу, поиска по группе, специальности соответственно; MainMenu — для перехода на главную форму.
Рисунок 5.4.1 -Форма «Студенты»
Для компонента ADOQuery3 задается следующие SQL-запрос:
DELETE FROM Ocenka
DELETE FROM Student
Перед выполнением запроса в него добавляется условие, которое указывает идентификатор студента (текущая запись). Запрос сначала удаляет все оценки студента, а потом удаляет данные студента.
Для компонента ADOQuery2 задается следующие SQL-запрос:
Update Student Set Kurs = Kurs+1
Перед выполнением запроса в него добавляется условие, которое указывает идентификатор студента (текущая запись). Запрос увеличивает для текущего студента курс на 1.
Для компонента ADOQuery1 задается следующий SQL-запрос:
Select Student. Famailiya, Student. Imya, Student. Otchestvo, Student. Data_r, Gruppa. Nazvanie, Student. Pol, Student. Kurs
FROM Student INNER JOIN Gruppa ON Student. Id_gruppi=Gruppa.Id_gruppi
Из запроса видно, что выбираются все поля из таблицы «Студент», связанные с главной таблицей «Группа» через поле Id_gruppi. Перед открытием формы «Результат выборки» компоненту DBGrid1 (форма «Результат выборки») свойству DataSource указывается ADOQuery1.
Для студента можно распечатать академическую справку (рис 5.4.2) и справку с места учебы (рис 5.4.3.)
Рисунок 5.4.2 — Отчет «Академическая справка»
Рисунок 5.4.3 — Отчет «Справка»
Кнопка «Печать» предназначена для активирования SQL запроса и формирования списка студентов группы. Данный отчет формируется в MS Excel (рисунок 5.4.4).
Рисунок 5.4.4 — Отчет «Студенты группы»
5.5 Форма «Специальность»
Создается новая форма. На рисунке 5.5 приведена форма программы — «Специальность» (несет информацию о специальностях деканата). На ней расположены следующие компоненты: два поля — DBEdit (таблица «Специальность»), компоненты DBNavigator, позволяющие пользователю перемещаться по записям в таблице и изменять их; label1 и label2 отображают на форме надписи: «Название» и «Описание» соответственно.
Рисунок 5.5 — Форма «Специальность»
5.6 Форма «Преподаватели»
Создается новая форма. На рисунке 5.6 приведена форма программы — «Преподаватели» (несет информацию о преподавателях). На ней расположены следующие компоненты: таблица — DBGrid1 (таблица «Преподаватели»), компоненты DBNavigator1, позволяющие пользователю перемещаться по записям в таблице и изменять их.
Рисунок 5.6 — Форма «Преподаватели»
5.7 Форма «Предмет»
Создается новая форма. На рисунке 5.7 приведена форма программы — «Преподаватели» (несет информацию о преподавателях). На ней расположены следующие компоненты: поле — DBEdit1 (таблица «Предмет»), компоненты DBNavigator1, позволяющие пользователю перемещаться по записям в таблице и изменять их. label1 отображает на форме надпись «Название» .
Рисунок 5.7 — Форма «Предмет»
5.8 Форма «Кафедра»
Создается новая форма. На рисунке 5.8 приведена форма программы — «Кафедра» (несет информацию о кафедрах). На ней расположены следующие компоненты: таблица — DBGrid1 (таблица «Кафедра»), компоненты DBNavigator1, позволяющие пользователю перемещаться по записям в таблице и изменять их.
Рисунок 5.8 — Форма «Кафедра»
5.9 Форма «Должности»
Создается новая форма. На рисунке 5.9 приведена форма программы — «Должности» (несет информацию о должностях). На ней расположены следующие компоненты: таблица — DBGrid1 (таблица «Должности»), компоненты DBNavigator1, позволяющие пользователю перемещаться по записям в таблице и изменять их.
Рисунок 5.9 — Форма «Должности»
5.10 Форма «Перевод студента в группу»
Создается новая форма. На рисунке 5.10 приведена форма программы — «Перевод студента в группу». На ней расположены следующие компоненты: таблица — DBLookupComboBox1 (список групп); компонент label1, отображающий надпись «Укажите название группы»; кнопка осуществляет изменение данных.
Рисунок 5.10 — Форма «Перевод студента в группу»
Для компонента ADOQuery1 задается следующий SQL-запрос:
'Update Student Set Id_gruppi = '+IntToStr (DBLookupComboBox1.KeyValue) +' Where Student. id_student = '+Form2.DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString);
Перед выполнением запроса передаются параметры о текущем студенте на форме «Студенты» и новую выбранную группу.
5.11 Форма «Оценка»
Создается новая форма. На рисунке 5.11 приведена форма программы — «Экзаменационные оценки» (несет информацию об оценках). На ней расположены следующие компоненты: DBLookupComboBox1 отображает данные о группе, DBLookupComboBox2 отображает данные о предмете, DateTimePicker позволяет выбрать временной диапазон для отчетов; компоненты DBNavigator1, позволяющие пользователю удалять данные. MainMenu — позволяет перейти на главную форму. Button’ы открывают запросы ADOQuery (для отчетов) и отображают данные в виде отчета (frxReport). Для передачи данных в отчет используется frxDBDataSet.
Рисунок 5.11.1 — Форма «Экзаменационные оценки»
Отчеты «Статистика по дисциплине», «Статистика по группе», «Статистика деканата» формируются на основании однотипных запросов (рисунок 5.11.2). Обработчики событий на нажатие соответствующих кнопок имеет следующий вид:
ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add ('Select AVG (Ocenka) AS Sred, Student. Famailiya,'); ADOQuery1.SQL.Add (' (case when AVG (Ocenka)>=4 and AVG (Ocenka)<5 THEN ''Стипендия'''); ADOQuery1.SQL.Add (' when AVG (Ocenka)=5 THEN ''Повышенная стипендия'''); ADOQuery1.SQL.Add (' when AVG (Ocenka)<4 THEN ''Без стипендии'''); ADOQuery1.SQL.Add (' end) AS Стипендия'); ADOQuery1.SQL.Add (' From Ocenka INNER JOIN Student ON Ocenka. id_student=Student.id_student'); ADOQuery1.SQL.Add (' WHERE Data BETWEEN: ff AND: ll'); ADOQuery1.SQL.Add (' GROUP BY Student. id_student, Student. Famailiya'); ADOQuery1.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker5.Date); ADOQuery1.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker6.Date); ADOQuery1.Open; frxReport2.Variables['pred']: =QuotedStr ('Успеваемость в деканате'); frxReport2.PrepareReport; frxReport2.ShowPreparedReport; | Закрытие запроса Очистка Формирование sql-запроса для выборки Задаем параметры для отчета Подготовка отчета Открытие отчета | |
Рисунок 5.11.2 — Отчет «Успеваемость по деканату»
Отчет об успеваемости группы имеет следующий вид:
Рисунок 5.11.3 — Отчет «Успеваемость по группе»
5.12 Форма «Группа»
Создается новая форма. На рисунке 5.12.1 приведена форма программы — «Группа» (несет информацию о группах). На ней расположены следующие компоненты: DBLookupComboBox1 отображает данные о специальности, к которой относиться группа, поле — DBEdit (таблица «Группа»), компоненты DBNavigator1, позволяющие пользователю удалять данные. MainMenu — позволяет перейти на главную форму. Button1 и Button2 открывают запросы ADOQuery1 (для списка студентов группы) и ADOQuery2, ADOQuery3 (Для отображения успеваемости группы) и отображает данные в виде отчета (frxReport1 и frxReport2). Для передачи данных в отчет используется frxDBDataSet.
Рисунок 5.12.1 — Форма «Группа»
Для компонента ADOQuery1 задается следующий SQL-запрос:
Select Famailiya, Imya, Otchestvo, Data_r
FROM Student
ORDER BY Famailiya, Imya, Otchestvo
Перед открытием запроса передается параметр о текущей группе. После формирования отчета пользователю отображается отчет о списке студентов группы (рисунок 5.12.2).
Рисунок 5.12.2 — Отчет «Список группы»
Для компонента ADOQuery2 задается следующий SQL-запрос:
Select Gruppa. Nazvanie,(Select Count (*)FROM Student WHERE Pol = 'Муж' and Student. Id_gruppi = Gruppa. Id_gruppi) AS Unoshi,
(Select Count (*)FROM Student WHERE Pol = 'Жен' and Student. Id_gruppi = Gruppa. Id_gruppi) AS Devus,
(Select Count (*)FROM Student WHERE Student. Id_gruppi = Gruppa. Id_gruppi) AS Vsego
FROM Student INNER JOIN Gruppa ON Student. Id_gruppi = Gruppa. Id_gruppi
Group by Gruppa. Nazvanie, Gruppa. Id_gruppi
Для компонента ADOQuery3 задается следующий SQL-запрос:
Select (Select Count (*)FROM Student WHERE Pol = 'Муж') AS U_all,
(Select Count (*)FROM Student WHERE Pol = 'Жен') AS D_all,
(Select Count (*)FROM Student) AS All_
FROM Student
ADOQuery2 формирует данные о статистике по каждой группе, а ADOQuery3 формирует суммирующую информацию. Перед открытием запросов передается параметр о текущей группе. После формирования отчета пользователю отображается отчет о статистике групп (рисунок 5.12.3).
Рисунок 5.12.3 — Отчет «Статистика групп»
Заключение
Данная курсовая работа является актуальной и отвечает предъявленным к ней требованиям. В ходе работы была разработана база данных, автоматизирующая работу сотрудника деканата.
Программа предназначена для ведения в базы данных. В ней пользователю предлагаются следующие возможности: вести учет успеваемости студентов, а также получать отчеты о текущем положении дел в разрезе предметов, групп; учет преподавателей на кафедре, а так же идентифицирующая информация о должности преподавателей.
1. Базы данных: модели, разработки, реализация / Т. С. Карпова. — СПб.: Питер, 2002.
2. Работа с базами данных в Delphi. / Гофман В. Э., Хомоненко А. Д. — СПб.: БХВ — Петербург, 2000. — 656с.: ил.
3. Базы данных: Учебник для ВУЗов / Под ред. проф. А. Д. Хомоненко. — СПб. КОРОНА принт, 2004
Приложение, А Общая блок-схема программы Процедура «Работа с данными»
Процедура «Поиск»
Приложение Б Листинг программы Форма «Главная»
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;
type
TForm1 = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
procedure N2Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure N4Click (Sender: TObject);
procedure N5Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button4Click (Sender: TObject);
procedure N6Click (Sender: TObject);
procedure N7Click (Sender: TObject);
procedure N8Click (Sender: TObject);
procedure N9Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Stud, Gruppa, Predmet, Spec, Ocenka, Prepod, Kafedra, Dolzh;
{$R *.dfm}
procedure TForm1. N2Click (Sender: TObject);
begin
Form1.Hide;
Form2.Show;
end;
procedure TForm1. N3Click (Sender: TObject);
begin
Form1.Hide;
Form3.Show;
end;
procedure TForm1. N4Click (Sender: TObject);
begin
Form1.Hide;
Form10.Show;
end;
procedure TForm1. N5Click (Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1. N6Click (Sender: TObject);
begin
Form1.Hide;
Form11.Show;
end;
procedure TForm1. N7Click (Sender: TObject);
begin
Form1.Hide;
Form12.Show;
end;
procedure TForm1. N8Click (Sender: TObject);
begin
Form1.Hide;
Form13.Show;
end;
procedure TForm1. N9Click (Sender: TObject);
begin
Form1.Hide;
Form14.Show;
end;
procedure TForm1. Button1Click (Sender: TObject);
begin
Form1.Hide;
Form4.Show;
end;
procedure TForm1. Button2Click (Sender: TObject);
begin
Form1.Hide;
Form5.Show;
end;
procedure TForm1. Button3Click (Sender: TObject);
begin
Form1.Hide;
Form6.Show;
end;
procedure TForm1. Button4Click (Sender: TObject);
begin
Form1.Hide;
Form7.Show;
end;
end.
Форма «Студент»
unit Stud;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, DB, ADODB;
type
TForm2 = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ADOQuery3: TADOQuery;
procedure N1Click (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button4Click (Sender: TObject);
procedure Button7Click (Sender: TObject);
procedure Button6Click (Sender: TObject);
procedure Button5Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Main, Data, Viborka, perevod;
{$R *.dfm}
procedure TForm2. N1Click (Sender: TObject);
begin
Form2.Close;
Form1.Show;
end;
procedure TForm2. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
procedure TForm2. Button1Click (Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('Select Student. Famailiya, Student. Imya, Student. Otchestvo, Student. Data_r, Gruppa. Nazvanie, Student. Pol, Student. Kurs');
ADOQuery1.SQL.Add (' FROM Student INNER JOIN Gruppa ON Student. Id_gruppi=Gruppa.Id_gruppi');
ADOQuery1.SQL.Add (' WHERE Student. Famailiya like'+#39+Edit1.Text+#39);
ADOQuery1.Open;
Form8.Show;
Form8.DBGrid1.Columns.Items[0]. Width:=80;
Form8.DBGrid1.Columns.Items[1].Width:=80;
Form8.DBGrid1.Columns.Items[2].Width:=80;
Form8.DBGrid1.Columns.Items[3].Width:=80;
Form8.DBGrid1.Columns.Items[4].Width:=80;
Form8.DBGrid1.Columns.Items[5].Width:=80;
Form8.DBGrid1.Columns.Items[6].Width:=80;
end;
procedure TForm2. Button2Click (Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('Select Student. Famailiya, Student. Imya, Student. Otchestvo, Student. Data_r, Gruppa. Nazvanie, Student. Pol, Student. Kurs');
ADOQuery1.SQL.Add (' FROM Student INNER JOIN Gruppa ON Student. Id_gruppi=Gruppa.Id_gruppi');
ADOQuery1.SQL.Add (' WHERE Gruppa. Nazvanie like'+#39+DBLookupComboBox2.Text+#39);
ADOQuery1.Open;
Form8.Show;
Form8.DBGrid1.Columns.Items[0]. Width:=80;
Form8.DBGrid1.Columns.Items[1].Width:=80;
Form8.DBGrid1.Columns.Items[2].Width:=80;
Form8.DBGrid1.Columns.Items[3].Width:=80;
Form8.DBGrid1.Columns.Items[4].Width:=80;
Form8.DBGrid1.Columns.Items[5].Width:=80;
Form8.DBGrid1.Columns.Items[6].Width:=80;
end;
procedure TForm2. Button3Click (Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('Select Student. Famailiya, Student. Imya, Student. Otchestvo, Student. Data_r, Gruppa. Nazvanie, Student. Pol, Student. Kurs');
ADOQuery1.SQL.Add (' FROM Student INNER JOIN Gruppa ON Student. Id_gruppi=Gruppa.Id_gruppi');
ADOQuery1.SQL.Add (' WHERE Gruppa. id_spec = '+FloatToStr (DBLookupComboBox1.KeyValue));
ADOQuery1.Open;
Form8.Show;
Form8.DBGrid1.Columns.Items[0]. Width:=80;
Form8.DBGrid1.Columns.Items[1].Width:=80;
Form8.DBGrid1.Columns.Items[2].Width:=80;
Form8.DBGrid1.Columns.Items[3].Width:=80;
Form8.DBGrid1.Columns.Items[4].Width:=80;
Form8.DBGrid1.Columns.Items[5].Width:=80;
Form8.DBGrid1.Columns.Items[6].Width:=80;
end;
procedure TForm2. Button4Click (Sender: TObject);
begin
if (DBGrid1.DataSource.DataSet.FieldByName ('Forma').AsString='очная') then
if (DBGrid1.DataSource.DataSet.FieldByName ('Kurs').AsInteger<5) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Update Student Set Kurs = Kurs+1 Where Student. id_student = '+DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString);
ADOQuery2.ExecSQL;
DataModule1.Student.Close;
DataModule1.Student.Open;
end
else
Application.MessageBox ('Невозможно перевести студента на курс старше (очная форма до 5 курса)','Ошибка', MB_OK);
if (DBGrid1.DataSource.DataSet.FieldByName ('Forma').AsString='очно-заочная') then
if (DBGrid1.DataSource.DataSet.FieldByName ('Kurs').AsInteger<6) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Update Student Set Kurs = Kurs+1 Where Student. id_student = '+DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString);
ADOQuery2.ExecSQL;
DataModule1.Student.Close;
DataModule1.Student.Open;
end
else
Application.MessageBox ('Невозможно перевести студента на курс старше (очно-заочная форма до 6 курса)','Ошибка', MB_OK);
end;
procedure TForm2. Button7Click (Sender: TObject);
begin
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add (' DELETE FROM Ocenka WHERE id_student = '+DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString);
ADOQuery3.ExecSQL;
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add (' DELETE FROM Student WHERE id_student = '+DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString);
ADOQuery3.ExecSQL;
DataModule1.Student.Close;
DataModule1.Student.Open;
end;
procedure TForm2. Button8Click (Sender: TObject);
begin
frxReport1.Variables['FIO']: =QuotedStr (DBGrid1.DataSource.DataSet.FieldByName ('Famailiya').AsString
+' '+DBGrid1.DataSource.DataSet.FieldByName ('Imya').AsString
+' '+DBGrid1.DataSource.DataSet.FieldByName ('Otchestvo').AsString
+' '+DBGrid1.DataSource.DataSet.FieldByName ('Data_r').AsString);
frxReport1.Variables['Kurs']: =QuotedStr (DBGrid1.DataSource.DataSet.FieldByName ('Kurs').AsString);
ADOQuery4.SQL.Text:='SELECT Specialnost. Nazvanie'
+' FROM Specialnost INNER JOIN Gruppa ON Specialnost. id_spec=Gruppa.id_spec'
+' INNER JOIN Student ON Student. id_gruppi = Gruppa. id_gruppi'
+' WHERE id_student='+DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString;
ADOQuery4.Open;
frxReport1.Variables['Spec']: =QuotedStr (ADOQuery4.Fields[0].AsString);
frxReport1.PrepareReport;
frxReport1.ShowPreparedReport;
end;
procedure TForm2. Button9Click (Sender: TObject);
begin
frxReport2.Variables['FIO']: =QuotedStr (DBGrid1.DataSource.DataSet.FieldByName ('Famailiya').AsString
+' '+DBGrid1.DataSource.DataSet.FieldByName ('Imya').AsString
+' '+DBGrid1.DataSource.DataSet.FieldByName ('Otchestvo').AsString);
frxReport2.Variables['DataR']: =QuotedStr (DBGrid1.DataSource.DataSet.FieldByName ('Data_r').AsString);
ADOQuery4.SQL.Text:='SELECT Specialnost. Nazvanie'
+' FROM Specialnost INNER JOIN Gruppa ON Specialnost. id_spec=Gruppa.id_spec'
+' INNER JOIN Student ON Student. id_gruppi = Gruppa. id_gruppi'
+' WHERE id_student='+DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString;
ADOQuery4.Open;
frxReport2.Variables['Spec']: =QuotedStr (ADOQuery4.Fields[0].AsString);
frxReport2.PrepareReport;
frxReport2.ShowPreparedReport;
end;
procedure TForm2. Edit2Change (Sender: TObject);
begin
if Length (Edit2.Text)>0 then
begin
DataModule1.Student.Filtered:=false;
DataModule1.Student.Filter:='Famailiya like '+QuotedStr (Edit2.Text+'%')+' or Imya like '+QuotedStr (Edit2.Text+'%')+' or Otchestvo like '+QuotedStr (Edit2.Text+'%');
DataModule1.Student.Filtered:=true;
end
else
DataModule1.Student.Filtered:=false;
end;
procedure TForm2. Button6Click (Sender: TObject);
begin
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add (' INSERT INTO Arhiv (Famailiya, Imya, Otchestvo, Data_r, Id_gruppi, Pol, Kurs) VALUES ');
ADOQuery3.SQL.Add (' ('+#39+DBGrid1.DataSource.DataSet.FieldByName ('Famailiya').AsString+#39);
ADOQuery3.SQL.Add (' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName ('Imya').AsString+#39);
ADOQuery3.SQL.Add (' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName ('Otchestvo').AsString+#39);
ADOQuery3.SQL.Add (' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName ('Data_r').AsString+#39);
ADOQuery3.SQL.Add (' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName ('Id_gruppi').AsString+#39);
ADOQuery3.SQL.Add (' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName ('Pol').AsString+#39);
ADOQuery3.SQL.Add (' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName ('Kurs').AsString+#39+')');
ADOQuery3.ExecSQL;
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add (' DELETE FROM Ocenka WHERE id_student = '+DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString);
ADOQuery3.ExecSQL;
ADOQuery3.Close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add (' DELETE FROM Student WHERE id_student = '+DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString);
ADOQuery3.ExecSQL;
DataModule1.Student.Close;
DataModule1.Student.Open;
end;
procedure TForm2. Button5Click (Sender: TObject);
begin
Form9.Show;
Form2.Hide;
Form9.Caption:='Перевод студента '+DBGrid1.DataSource.DataSet.FieldByName ('Famailiya').AsString +DBGrid1.DataSource.DataSet.FieldByName ('Imya').AsString + DBGrid1.DataSource.DataSet.FieldByName ('Otchestvo').AsString;
end;
end.
Форма «Группа»
unit Gruppa;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, DBCtrls, StdCtrls, Mask,
DB, ADODB, frxClass, frxDBSet;
type
TForm3 = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
DBLookupComboBox1: TDBLookupComboBox;
DBEdit1: TDBEdit;
Label1: TLabel;
Label2: TLabel;
DBNavigator1: TDBNavigator;
Button1: TButton;
Button2: TButton;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ADOQuery2Nazvanie: TStringField;
ADOQuery2Unoshi: TIntegerField;
ADOQuery2Devus: TIntegerField;
ADOQuery2Vsego: TIntegerField;
ADOQuery3: TADOQuery;
frxReport1: TfrxReport;
frxDBDataset1: TfrxDBDataset;
ADOQuery1Famailiya: TStringField;
ADOQuery1Imya: TStringField;
ADOQuery1Otchestvo: TStringField;
ADOQuery1Data_r: TDateTimeField;
frxDBDataset2: TfrxDBDataset;
frxDBDataset3: TfrxDBDataset;
frxReport2: TfrxReport;
procedure N1Click (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Main, Data;
{$R *.dfm}
procedure TForm3. N1Click (Sender: TObject);
Приложение Б
(продолжение)
begin
Form3.Close;
Form1.Show;
end;
procedure TForm3. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
procedure TForm3. Button1Click (Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add (' Select Famailiya, Imya, Otchestvo, Data_r');
ADOQuery1.SQL.Add (' FROM Student');
ADOQuery1.SQL.Add (' WHERE Id_gruppi ='+DBEdit1.DataSource.DataSet.FieldByName ('Id_gruppi').AsString);
ADOQuery1.SQL.Add (' order by Famailiya, Imya, Otchestvo');
ADOQuery1.Open;
frxReport1.Variables['Gr']: =QuotedStr (DBEdit1.Text);
frxReport1.PrepareReport;
frxReport1.ShowPreparedReport;
end;
procedure TForm3. Button2Click (Sender: TObject);
begin
ADOQuery2.Open;
ADOQuery3.Open;
frxReport2.PrepareReport;
frxReport2.ShowPreparedReport;
end;
end
Форма «Выборка»
unit Viborka;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids;
type
TForm8 = class (TForm)
DBGrid1: TDBGrid;
Button1: TButton;
procedure Button1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form8: TForm8;
implementation
uses Stud;
{$R *.dfm}
procedure TForm8. Button1Click (Sender: TObject);
begin
Form8.Close;
end;
end.
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
procedure FormClose (Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form14: TForm14;
implementation
{$R *.dfm}
uses Main, Data;
procedure TForm14. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
end.
Форма «Специальность»
unit Spec;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, DBCtrls, StdCtrls, Mask;
type
TForm5 = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
DBEdit1: TDBEdit;
DBMemo1: TDBMemo;
Label1: TLabel;
Label2: TLabel;
DBNavigator1: TDBNavigator;
procedure N1Click (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
uses Main, Data;
{$R *.dfm}
procedure TForm5. N1Click (Sender: TObject);
begin
Form5.Close;
Form1.Show;
end;
procedure TForm5. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
end.
Форма «Преподаватели»
unit Prepod;
interface
uses
Winapi.Windows, Winapi. Messages, System. SysUtils, System. Variants, System. Classes, Vcl. Graphics,
Vcl.Controls, Vcl. Forms, Vcl. Dialogs, Vcl. Menus, Vcl. ExtCtrls, Vcl. DBCtrls,
Vcl.Grids, Vcl. DBGrids;
type
TForm11 = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure N1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form11: TForm11;
implementation
{$R *.dfm}
uses Data, Main;
procedure TForm11. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
procedure TForm11. N1Click (Sender: TObject);
begin
Form11.Close;
end;
end.
Форма «Предметы»
unit Predmet;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ExtCtrls, DBCtrls, Mask;
type
TForm4 = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
DBEdit1: TDBEdit;
DBNavigator1: TDBNavigator;
Label1: TLabel;
procedure N1Click (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses Main, Data;
{$R *.dfm}
procedure TForm4. N1Click (Sender: TObject);
begin
Form4.Close;
Form1.Show;
end;
procedure TForm4. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
end.
Форма «Перевод студента»
unit perevod;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, DB, ADODB;
type
TForm9 = class (TForm)
DBLookupComboBox1: TDBLookupComboBox;
Button1: TButton;
Label1: TLabel;
ADOQuery1: TADOQuery;
procedure Button1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form9: TForm9;
implementation
uses Data, Stud;
{$R *.dfm}
procedure TForm9. Button1Click (Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('Update Student Set Id_gruppi = '+IntToStr (DBLookupComboBox1.KeyValue) +' Where Student. id_student = '+Form2.DBGrid1.DataSource.DataSet.FieldByName ('id_student').AsString);
ADOQuery1.ExecSQL;
DataModule1.Student.Close;
DataModule1.Student.Open;
Form9.Close;
Form2.Show;
end;
end.
Форма «Кафедра»
unit Kafedra;
interface
uses
Winapi.Windows, Winapi. Messages, System. SysUtils, System. Variants, System. Classes, Vcl. Graphics,
Vcl.Controls, Vcl. Forms, Vcl. Dialogs, Vcl. ExtCtrls, Vcl. DBCtrls, Vcl. Grids,
Vcl.DBGrids;
type
TForm12 = class (TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
procedure FormClose (Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form12: TForm12;
implementation
{$R *.dfm}
uses Data, Main;
procedure TForm12. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
end.
Форма «Оценка»
unit Ocenka;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Grids, DBGrids, DB, ADODB, StdCtrls, DBCtrls, ExtCtrls,
ComCtrls, frxClass, frxDBSet;
type
TForm10 = class (TForm)
MainMenu1: TMainMenu;
Yfpfl1: TMenuItem;
GroupBox1: TGroupBox;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid2: TDBGrid;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
Button1: TButton;
Button2: TButton;
ADOQuery2: TADOQuery;
GroupBox2: TGroupBox;
Label7: TLabel;
Label8: TLabel;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
GroupBox3: TGroupBox;
Label3: TLabel;
Label4: TLabel;
DateTimePicker3: TDateTimePicker;
DateTimePicker4: TDateTimePicker;
Button3: TButton;
GroupBox4: TGroupBox;
Label5: TLabel;
Label6: TLabel;
DateTimePicker5: TDateTimePicker;
DateTimePicker6: TDateTimePicker;
Button4: TButton;
frxReport1: TfrxReport;
frxReport2: TfrxReport;
frxDBDataset1: TfrxDBDataset;
procedure Yfpfl1Click (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure DBLookupComboBox1CloseUp (Sender: TObject);
procedure DBLookupComboBox2CloseUp (Sender: TObject);
procedure FormShow (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button4Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form10: TForm10;
implementation
uses Main, Data;
{$R *.dfm}
procedure TForm10. Yfpfl1Click (Sender: TObject);
begin
Form10.Close;
Form1.Show;
end;
procedure TForm10. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end;
procedure TForm10. DBLookupComboBox1CloseUp (Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('Select Student. Famailiya, Student. Imya, Predmet. Nazvanie, AVG (Ocenka.Ocenka)AS itog');
ADOQuery1.SQL.Add (' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON Ocenka. id_predmeta = Predmet. id_predmeta)');
ADOQuery1.SQL.Add (' ON Student. id_student = Ocenka. id_student');
ADOQuery1.SQL.Add ('WHERE Student. Id_gruppi ='+IntToStr (DBLookupComboBox1.KeyValue)+ ' AND Predmet. Nazvanie = '+#39+DBLookupComboBox2.Text+#39);
ADOQuery1.SQL.Add (' Group by Student. Famailiya, Student. Imya, Predmet. Nazvanie');
ADOQuery1.Open;
end;
procedure TForm10. DBLookupComboBox2CloseUp (Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('Select Student. Famailiya, Student. Imya, Predmet. Nazvanie, AVG (Ocenka.Ocenka)AS itog');
ADOQuery1.SQL.Add (' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON Ocenka. id_predmeta = Predmet. id_predmeta)');
ADOQuery1.SQL.Add (' ON Student. id_student = Ocenka. id_student');
ADOQuery1.SQL.Add ('WHERE Student. Id_gruppi ='+IntToStr (DBLookupComboBox1.KeyValue)+ ' AND Predmet. Nazvanie = '+#39+DBLookupComboBox2.Text+#39);
ADOQuery1.SQL.Add (' Group by Student. Famailiya, Student. Imya, Predmet. Nazvanie');
ADOQuery1.Open;
end;
procedure TForm10. FormShow (Sender: TObject);
begin
DBLookupComboBox1.KeyValue:=1;
DBLookupComboBox2.KeyValue:=1;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('Select Student. Famailiya, Student. Imya, Predmet. Nazvanie, AVG (Ocenka.Ocenka)AS itog');
ADOQuery1.SQL.Add (' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON Ocenka. id_predmeta = Predmet. id_predmeta)');
ADOQuery1.SQL.Add (' ON Student. id_student = Ocenka. id_student');
ADOQuery1.SQL.Add ('WHERE Student. Id_gruppi ='+IntToStr (DBLookupComboBox1.KeyValue)+ ' AND Predmet. Nazvanie = '+#39+DBLookupComboBox2.Text+#39);
ADOQuery1.SQL.Add (' Group by Student. Famailiya, Student. Imya, Predmet. Nazvanie');
ADOQuery1.Open;
end;
procedure TForm10. Button1Click (Sender: TObject);
begin
frxReport2.Variables['pred']: =QuotedStr (DBLookupComboBox1.Text);
frxReport2.PrepareReport;
frxReport2.ShowPreparedReport;
end;
procedure TForm10. Button2Click (Sender: TObject);
var
p, ch, tr, dva, vsego: integer;
ot, xo, ud, pl: real;
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add (' WHERE ((id_predmeta ='+ IntToStr (DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.SQL.Add (' HAVING AVG (Ocenka) = 2');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker1.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker2.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
dva:= ADOQuery2. RecordCount
else
dva:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add (' WHERE ((id_predmeta ='+ IntToStr (DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.SQL.Add (' HAVING AVG (Ocenka)=3 OR AVG (Ocenka)=4 OR AVG (Ocenka)=5');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker1.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker2.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
tr:= ADOQuery2. RecordCount
else
tr:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add (' WHERE ((id_predmeta ='+ IntToStr (DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.SQL.Add (' HAVING (AVG (Ocenka) = 4 OR AVG (Ocenka) =5)');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker1.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker2.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
ch:= ADOQuery2. RecordCount
else
ch:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add (' WHERE ((id_predmeta ='+ IntToStr (DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.SQL.Add ('HAVING AVG (Ocenka) = 5 ');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker1.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker2.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
p:= ADOQuery2. RecordCount
else
p:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add (' WHERE ((id_predmeta ='+ IntToStr (DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker1.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker2.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
vsego:= ADOQuery2. RecordCount
else
vsego:=0;
if p>0 then
ot:=(p*100)/vsego;
if ch>0 then
xo:=(ch*100)/vsego;
if tr>0 then
ud:=(tr*100)/vsego;
if dva>0 then
pl:=(dva*100)/vsego;
frxReport1.Variables['pred']: =QuotedStr ('Успеваемость студентов по предмету '+DBLookupComboBox2.Text);
frxReport1.Variables['pyat']: =FloatToStr (ot);
frxReport1.Variables['chet']:=FloatToStr (xo);
frxReport1.Variables['tri']:=FloatToStr (ud);
frxReport1.Variables['dva']:=FloatToStr (pl);
frxReport1.PrepareReport;
frxReport1.ShowPreparedReport;
end;
procedure TForm10. Button3Click (Sender: TObject);
var
p, ch, tr, dva, vsego: integer;
ot, xo, ud, pl: real;
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka.Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka INNER JOIN Student ON Ocenka. id_student = Student. id_student');
ADOQuery2.SQL.Add ('WHERE ((Id_gruppi = '+ IntToStr (DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY Ocenka. id_student');
ADOQuery2.SQL.Add (' HAVING AVG (Ocenka.Ocenka) = 2');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker3.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker4.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
dva:= ADOQuery2. RecordCount
else
dva:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka.Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka INNER JOIN Student ON Ocenka. id_student = Student. id_student');
ADOQuery2.SQL.Add ('WHERE ((Id_gruppi = '+ IntToStr (DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY Ocenka. id_student');
ADOQuery2.SQL.Add (' HAVING AVG (Ocenka.Ocenka)=3 OR AVG (Ocenka.Ocenka)=4 OR AVG (Ocenka.Ocenka)=5');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker3.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker4.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
tr:= ADOQuery2. RecordCount
else
tr:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka.Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka INNER JOIN Student ON Ocenka. id_student = Student. id_student');
ADOQuery2.SQL.Add ('WHERE ((Id_gruppi = '+ IntToStr (DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY Ocenka. id_student');
ADOQuery2.SQL.Add (' HAVING (AVG (Ocenka.Ocenka) = 4 OR AVG (Ocenka.Ocenka) =5)');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker3.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker4.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
ch:= ADOQuery2. RecordCount
Приложение Б
(продолжение)
else
ch:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka.Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka INNER JOIN Student ON Ocenka. id_student = Student. id_student');
ADOQuery2.SQL.Add ('WHERE ((Id_gruppi = '+ IntToStr (DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY Ocenka. id_student');
ADOQuery2.SQL.Add ('HAVING AVG (Ocenka.Ocenka) = 5 ');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker3.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker4.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
p:= ADOQuery2. RecordCount
else
p:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka.Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka INNER JOIN Student ON Ocenka. id_student = Student. id_student');
ADOQuery2.SQL.Add ('WHERE ((Id_gruppi = '+ IntToStr (DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN: ff AND: ll))');
ADOQuery2.SQL.Add (' GROUP BY Ocenka. id_student');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker3.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker4.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
vsego:= ADOQuery2. RecordCount
else
vsego:=0;
ot:=(p*100);
xo:=(ch*100);
ud:=(tr*100);
pl:=(dva*100);
frxReport1.Variables['pred']: =QuotedStr ('Успеваемость студентов группы '+DBLookupComboBox1.Text);
frxReport1.Variables['pyat']: =FloatToStr (ot);
frxReport1.Variables['chet']:=FloatToStr (xo);
frxReport1.Variables['tri']:=FloatToStr (ud);
frxReport1.Variables['dva']:=FloatToStr (pl);
frxReport1.PrepareReport;
frxReport1.ShowPreparedReport;
end;
procedure TForm10. Button4Click (Sender: TObject);
var
p, ch, tr, dva, vsego: integer;
ot, xo, ud, pl: real;
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add ('WHERE Data BETWEEN: ff AND: ll');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.SQL.Add (' HAVING AVG (Ocenka) = 2');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker5.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker6.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
dva:= ADOQuery2. RecordCount
else
dva:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add ('WHERE Data BETWEEN: ff AND: ll');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.SQL.Add (' HAVING AVG (Ocenka)=3 OR AVG (Ocenka)=4 OR AVG (Ocenka)=5');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker5.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker6.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
tr:= ADOQuery2. RecordCount
else
tr:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add ('WHERE Data BETWEEN: ff AND: ll');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.SQL.Add (' HAVING (AVG (Ocenka) = 4 OR AVG (Ocenka) =5)');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker5.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker6.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
ch:= ADOQuery2. RecordCount
else
ch:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add ('WHERE Data BETWEEN: ff AND: ll');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.SQL.Add ('HAVING AVG (Ocenka) = 5 ');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker5.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker6.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
p:= ADOQuery2. RecordCount
else
p:=0 ;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add ('Select AVG (Ocenka), Ocenka. id_student');
ADOQuery2.SQL.Add ('From Ocenka');
ADOQuery2.SQL.Add ('WHERE Data BETWEEN: ff AND: ll');
ADOQuery2.SQL.Add (' GROUP BY id_student');
ADOQuery2.Parameters.ParamByName ('ff').Value:=DateToStr (DateTimePicker5.Date);
ADOQuery2.Parameters.ParamByName ('ll').Value:=DateToStr (DateTimePicker6.Date);
ADOQuery2.Open;
if ADOQuery2. RecordCount>0 then
vsego:= ADOQuery2. RecordCount
else
vsego:=0;
if p>0 then
ot:=(p*100)/vsego;
if ch>0 then
xo:=(ch*100)/vsego;
if tr>0 then
ud:=(tr*100)/vsego;
if dva>0 then
pl:=(dva*100)/vsego;
frxReport1.Variables['pred']: =QuotedStr ('Успеваемость в деканате');
frxReport1.Variables['pyat']: =FloatToStr (ot);
frxReport1.Variables['chet']:=FloatToStr (xo);
frxReport1.Variables['tri']:=FloatToStr (ud);
frxReport1.Variables['dva']:=FloatToStr (pl);
frxReport1.PrepareReport;
frxReport1.ShowPreparedReport;
end;
end.
Форма «Должности»
unit Dolzh;
interface
uses
Winapi.Windows, Winapi. Messages, System. SysUtils, System. Variants, System. Classes, Vcl. Graphics,
Vcl.Controls, Vcl. Forms, Vcl. Dialogs, Vcl. ExtCtrls, Vcl. DBCtrls, Vcl. Grids,
Vcl.DBGrids;
type
TForm13 = class (TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
procedure FormClose (Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form13: TForm13;
implementation
{$R *.dfm}
uses Data, Main;
procedure TForm13. FormClose (Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end; end.
Форма «Дата»
unit Data;
interface
uses
SysUtils, Classes, DB, ADODB;
type
TDataModule1 = class (TDataModule)
ADOConnection1: TADOConnection;
Gruppa: TADOTable;
Predmet: TADOTable;
Spec: TADOTable;
Student: TADOTable;
Ocenka: TADOTable;
DGruppa: TDataSource;
DPredmet: TDataSource;
DSpec: TDataSource;
DStudent: TDataSource;
DOcenka: TDataSource;
Studentid_student: TIntegerField;
StudentFamailiya: TStringField;
StudentImya: TStringField;
StudentOtchestvo: TStringField;
StudentData_r: TDateTimeField;
StudentId_gruppi: TIntegerField;
StudentPol: TStringField;
StudentGr: TStringField;
Ocenkaid_zapisi: TIntegerField;
OcenkaOcenka: TIntegerField;
Ocenkaid_student: TIntegerField;
Ocenkaid_predmeta: TIntegerField;
OcenkaData: TDateTimeField;
OcenkaStud: TStringField;
OcenkaDisci: TStringField;
Predmetid_predmeta: TAutoIncField;
PredmetNazvanie: TStringField;
PredmetPrepodavatel: TIntegerField;
Kafedra: TADOTable;
Dolzhnost: TADOTable;
DKafedra: TDataSource;
DDolzhnost: TDataSource;
Prepodavatel: TADOTable;
DPrepodavatel: TDataSource;
StudentKurs: TIntegerField;
Prepodavatelid_Prepod: TAutoIncField;
PrepodavatelFIO: TStringField;
PrepodavatelTelephone: TStringField;
Prepodavatelid_dolzhnost: TIntegerField;
Prepodavatelid_stepen: TIntegerField;
Prepodavatelid_kafedri: TIntegerField;
PrepodavatelDol: TStringField;
PrepodavatelStepen: TStringField;
PrepodavatelKafedri: TStringField;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule1: TDataModule1;
implementation
{$R *.dfm}
end.