Дата
|
Оценка
|
№ оценки *
|
№ предмета *
|
Название
|
№ преподавателя
|
ФИО
|
Адрес
|
Телефон
|
№ должности
|
Название
|
№ кафедры
|
Название
|
Кабинет
|
Телефон
|
№ специальности
|
Название
|
Название
|
№ студента *
|
ФИО
|
Дата рождения
|
Пол
|
Курс
|
Гражданство
|
Форма обучения
|
Основа
|
Рисунок 2.1.1 - Исходное отношение в 1НФ
Первичными ключами исходного отношения являются
атрибуты: "№ оценки", "№
предмета", "№ студента". Все атрибуты, не вошедшие в первичный
ключ, непосредственно или транзитивно, полностью или частично зависят от
первичного ключа.
.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.
Создается новая таблица, которая будет хранить
данные о предметах. Описываются поля, которые будут присутствовать в таблице.
Описанные поля:
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 - Диаграмма базы данных
. Разработка
алгоритмов работы программы
После запуска программы происходит подключение
модулей. Вход в БД происходит через главную форму. Далее пользователь
необходимо выбрать нужную форму для работы с данными, либо для работы с
отчетами. При открытии форм из меню "Справочники" перед пользователем
отображается форма, где можно выбрать нужную запись и производить необходимые
операции с данными. При открытии формы "Студенты" можно произвести
поиск по указанным характеристикам. При переводе в другую группу или повышении
курса происходит обновление текущей записи. При переходе на форму
"Группа" пользователь может открыть отчеты, которые отображают
информацию о статистике групп и составе текущей. На форме "Оценки"
пользователь может увидеть успеваемость студентов по различным категориям и
получить соответствующую печатную форму.
Блок-схема данного процесса представлена в
приложении А на рисунке А.1.
. Разработка приложения
пользователя БД
.1 Форма "Main"
Навигационная форма, с помощью которой можно
перейти на дочерние формы для работы с данными и отчетами. На ней расположены
следующие компоненты: таблица - Button
(при нажатии переход на дочернюю форму), MainMenu
(для перехода на дочерние формы и выхода).
Рисунок 5.1.1 - Форма "Main"
.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.
.3 Форма "Результаты выборки"
Форма отображает результаты поиска, параметры
для которого указываются на форме "Студенты". Для отображения данных
используется DBGrid1, который
связан с запросом на форме "Студенты" (Form2.DataSource1). Компонент Button1
позволяет
закрыть форму.
Рисунок 5.3 -Форма "Результаты
выборки"
.4 Форма "Студенты"
На рисунке 5.4.1 приведена форма программы -
"Студенты" (несет информацию о студентах деканата). На ней
расположены следующие компоненты: таблица - DBGrid1
(таблица "Студенты"), компоненты DBNavigator,
позволяющие пользователю перемещаться по записям в таблице и изменять их;
компонент DataSource1,
обеспечивающий связь таблиц с соответствующими компонентами ADOQuery1,
который, в свою очередь, необходим для доступа к таблице базы данных, кнопки: Button1,
Button2, Button3,
Button4, Button5
- для удаления текущей записи, перевода студента на следующий курс, перевод в
другую группу, поиска по группе, специальности соответственно; MainMenu
- для перехода на главную форму.
Рисунок 5.4.1 -Форма "Студенты"
Для компонента ADOQuery3 задается следующие SQL-запрос:
DELETE FROM OcenkaFROM Student
Перед выполнением запроса в него добавляется
условие, которое указывает идентификатор студента (текущая запись). Запрос
сначала удаляет все оценки студента, а потом удаляет данные студента.
Для компонента ADOQuery2 задается следующие SQL-запрос:
Update Student Set Kurs = Kurs+1
Для компонента ADOQuery1 задается следующий SQL-запрос:
Select
Student.Famailiya,Student.Imya,Student.Otchestvo,Student.Data_r,
Gruppa.Nazvanie,Student.Pol,Student.KursStudent 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 приведена
форма программы - "Специальность" (несет информацию о специальностях
деканата). На ней расположены следующие компоненты: два поля - DBEdit
(таблица "Специальность"), компоненты DBNavigator,
позволяющие пользователю перемещаться по записям в таблице и изменять их; label1
и label2 отображают на
форме надписи: "Название" и "Описание" соответственно.
Рисунок 5.5 - Форма "Специальность"
.6 Форма "Преподаватели"
Создается новая форма. На рисунке 5.6 приведена
форма программы - "Преподаватели" (несет информацию о
преподавателях). На ней расположены следующие компоненты: таблица - DBGrid1
(таблица "Преподаватели"), компоненты DBNavigator1,
позволяющие пользователю перемещаться по записям в таблице и изменять их.
Рисунок 5.6 - Форма "Преподаватели"
5.7 Форма "Предмет"
Создается новая форма. На рисунке 5.7 приведена
форма программы - "Преподаватели" (несет информацию о
преподавателях). На ней расположены следующие компоненты: поле - DBEdit1
(таблица "Предмет"), компоненты DBNavigator1,
позволяющие пользователю перемещаться по записям в таблице и изменять их. label1
отображает на форме надпись "Название".
Рисунок 5.7 - Форма "Предмет"
.8 Форма "Кафедра"
Создается новая форма. На рисунке 5.8 приведена
форма программы - "Кафедра" (несет информацию о кафедрах). На ней
расположены следующие компоненты: таблица - DBGrid1
(таблица "Кафедра"), компоненты DBNavigator1,
позволяющие пользователю перемещаться по записям в таблице и изменять их.
Рисунок 5.8 - Форма "Кафедра"
5.9 Форма "Должности"
Создается новая форма. На рисунке 5.9 приведена
форма программы - "Должности" (несет информацию о должностях). На ней
расположены следующие компоненты: таблица - DBGrid1
(таблица "Должности"), компоненты DBNavigator1,
позволяющие пользователю перемещаться по записям в таблице и изменять их.
Рисунок 5.9 - Форма "Должности"
.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);
Перед выполнением запроса передаются параметры о
текущем студенте на форме "Студенты" и новую выбранную группу.
.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 - Отчет "Успеваемость по
группе"
.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_rStudentBY 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 VsegoStudent INNER JOIN Gruppa ON
Student.Id_gruppi = Gruppa.Id_gruppiby 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_ Student
ADOQuery2
формирует данные о статистике по каждой группе, а ADOQuery3
формирует суммирующую информацию. Перед открытием запросов передается параметр
о текущей группе. После формирования отчета пользователю отображается отчет о
статистике групп (рисунок 5.12.3).
Рисунок 5.12.3 - Отчет "Статистика
групп"
Данная курсовая работа является актуальной и
отвечает предъявленным к ней требованиям. В ходе работы была разработана база
данных, автоматизирующая работу сотрудника деканата.
Программа предназначена для ведения в базы
данных. В ней пользователю предлагаются следующие возможности: вести учет
успеваемости студентов, а также получать отчеты о текущем положении дел в
разрезе предметов, групп; учет преподавателей на кафедре, а так же
идентифицирующая информация о должности преподавателей.
Список использованной литературы
1. Базы данных: модели, разработки,
реализация / Т.С. Карпова. - СПб.: Питер, 2002.
2. Работа с базами данных в Delphi.
/ Гофман В.Э., Хомоненко А.Д. - СПб.: БХВ - Петербург, 2000. - 656с.: ил.
3. Базы данных: Учебник для ВУЗов /
Под ред. проф. А.Д. Хомоненко. - СПб. КОРОНА принт, 2004
Приложение А
Общая блок-схема программы
Процедура "Работа с данными"
Процедура "Поиск"
Приложение Б
Листинг программы
Форма "Главная"
Main;, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,, Menus, StdCtrls;= class(TForm):
TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;:
TButton;: TButton;: TButton;: TButton;: TMenuItem;: TMenuItem;: TMenuItem;:
TMenuItem;N2Click(Sender: TObject);N3Click(Sender: TObject);N4Click(Sender:
TObject);N5Click(Sender: TObject);Button1Click(Sender:
TObject);Button2Click(Sender: TObject);Button3Click(Sender:
TObject);Button4Click(Sender: TObject);N6Click(Sender: TObject);N7Click(Sender:
TObject);N8Click(Sender: TObject);N9Click(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TForm1;Stud, Gruppa, Predmet, Spec, Ocenka, Prepod, Kafedra, Dolzh;
{$R *.dfm}TForm1.N2Click(Sender:
TObject);.Hide;.Show;;TForm1.N3Click(Sender:
TObject);.Hide;.Show;;TForm1.N4Click(Sender:
TObject);.Hide;.Show;;TForm1.N5Click(Sender:
TObject);.Terminate;;TForm1.N6Click(Sender:
TObject);.Hide;.Show;;TForm1.N7Click(Sender:
TObject);.Hide;.Show;;TForm1.N8Click(Sender:
TObject);.Hide;.Show;;TForm1.N9Click(Sender:
TObject);.Hide;.Show;;TForm1.Button1Click(Sender:
TObject);.Hide;.Show;;TForm1.Button2Click(Sender:
TObject);.Hide;.Show;;TForm1.Button3Click(Sender: TObject);.Hide;.Show;;TForm1.Button4Click(Sender:
TObject);.Hide;.Show;;.
Форма "Студент"
Stud;, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,, Menus, ExtCtrls, DBCtrls, Grids, DBGrids,
StdCtrls, DB, ADODB;= class(TForm): TMainMenu;: TMenuItem;: TDBGrid;:
TDBNavigator;: TGroupBox;: TGroupBox;: TGroupBox;: TDBLookupComboBox;:
TDBLookupComboBox;: TEdit;: TButton;: TButton;: TButton;: TButton;: TButton;:
TButton;: TButton;: TDataSource;: TADOQuery;: TADOQuery;:
TADOQuery;N1Click(Sender: TObject);FormClose(Sender: TObject; var Action:
TCloseAction);Button1Click(Sender: TObject);Button2Click(Sender:
TObject);Button3Click(Sender: TObject);Button4Click(Sender:
TObject);Button7Click(Sender: TObject);Button6Click(Sender:
TObject);Button5Click(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TForm2;Main, Data, Viborka, perevod;
{$R *.dfm}TForm2.N1Click(Sender:
TObject);.Close;.Show;;TForm2.FormClose(Sender: TObject; var Action:
TCloseAction);.Show;;TForm2.Button1Click(Sender: TObject);.Close;.SQL.Clear;.SQL.Add('Select
Student.Famailiya,Student.Imya,Student.Otchestvo,Student.Data_r,Gruppa.Nazvanie,Student.Pol,Student.Kurs');.SQL.Add('
FROM Student INNER JOIN Gruppa ON
Student.Id_gruppi=Gruppa.Id_gruppi');.SQL.Add(' WHERE Student.Famailiya
like'+#39+Edit1.Text+#39);.Open;.Show;.DBGrid1.Columns.Items[0].Width:=80;.DBGrid1.Columns.Items[1].Width:=80;.DBGrid1.Columns.Items[2].Width:=80;.DBGrid1.Columns.Items[3].Width:=80;.DBGrid1.Columns.Items[4].Width:=80;.DBGrid1.Columns.Items[5].Width:=80;.DBGrid1.Columns.Items[6].Width:=80;;TForm2.Button2Click(Sender:
TObject);.Close;.SQL.Clear;.SQL.Add('Select
Student.Famailiya,Student.Imya,Student.Otchestvo,Student.Data_r,Gruppa.Nazvanie,Student.Pol,Student.Kurs');.SQL.Add('
FROM Student INNER JOIN Gruppa ON
Student.Id_gruppi=Gruppa.Id_gruppi');.SQL.Add(' WHERE Gruppa.Nazvanie
like'+#39+DBLookupComboBox2.Text+#39);.Open;.Show;.DBGrid1.Columns.Items[0].Width:=80;.DBGrid1.Columns.Items[1].Width:=80;.DBGrid1.Columns.Items[2].Width:=80;.DBGrid1.Columns.Items[3].Width:=80;.DBGrid1.Columns.Items[4].Width:=80;.DBGrid1.Columns.Items[5].Width:=80;.DBGrid1.Columns.Items[6].Width:=80;;TForm2.Button3Click(Sender:
TObject);.Close;.SQL.Clear;.SQL.Add('Select
Student.Famailiya,Student.Imya,Student.Otchestvo,Student.Data_r,Gruppa.Nazvanie,Student.Pol,Student.Kurs');.SQL.Add('
FROM Student INNER JOIN Gruppa ON
Student.Id_gruppi=Gruppa.Id_gruppi');.SQL.Add(' WHERE Gruppa.id_spec =
'+FloatToStr(DBLookupComboBox1.KeyValue));.Open;.Show;.DBGrid1.Columns.Items[0].Width:=80;.DBGrid1.Columns.Items[1].Width:=80;.DBGrid1.Columns.Items[2].Width:=80;.DBGrid1.Columns.Items[3].Width:=80;.DBGrid1.Columns.Items[4].Width:=80;.DBGrid1.Columns.Items[5].Width:=80;.DBGrid1.Columns.Items[6].Width:=80;;TForm2.Button4Click(Sender:
TObject);(DBGrid1.DataSource.DataSet.FieldByName('Forma').AsString='очная')
then(DBGrid1.DataSource.DataSet.FieldByName('Kurs').AsInteger<5)
then.Close;.SQL.Clear;.SQL.Add('Update Student Set Kurs = Kurs+1 Where
Student.id_student = '+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);2.ExecSQL;
DataModule1.Student.Close;.Student.Open;
else
Application.MessageBox('Невозможно
перевести студента на курс старше (очная форма до 5 курса)','Ошибка',MB_OK);
if
(DBGrid1.DataSource.DataSet.FieldByName('Forma').AsString='очно-заочная')
then(DBGrid1.DataSource.DataSet.FieldByName('Kurs').AsInteger<6)
then.Close;.SQL.Clear;.SQL.Add('Update Student Set Kurs = Kurs+1 Where
Student.id_student =
'+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);.ExecSQL;.Student.Close;.Student.Open;.MessageBox('Невозможно
перевести
студента
на
курс
старше
(очно-заочная
форма
до
6 курса)','Ошибка',MB_OK);;TForm2.Button7Click(Sender:
TObject);.Close;.SQL.Clear;.SQL.Add(' DELETE FROM Ocenka WHERE id_student =
'+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);.ExecSQL;.Close;.SQL.Clear;.SQL.Add('
DELETE FROM Student WHERE id_student =
'+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);.ExecSQL;.Student.Close;.Student.Open;;TForm2.Button8Click(Sender:
TObject);.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);.Variables['Kurs']:=QuotedStr(DBGrid1.DataSource.DataSet.FieldByName('Kurs').AsString);.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;.Open;.Variables['Spec']:=QuotedStr(ADOQuery4.Fields[0].AsString);.PrepareReport;.ShowPreparedReport;;TForm2.Button9Click(Sender:
TObject);.Variables['FIO']:=QuotedStr(DBGrid1.DataSource.DataSet.FieldByName('Famailiya').AsString
+'
'+DBGrid1.DataSource.DataSet.FieldByName('Imya').AsString
+' '+DBGrid1.DataSource.DataSet.FieldByName('Otchestvo').AsString);.Variables['DataR']:=QuotedStr(DBGrid1.DataSource.DataSet.FieldByName('Data_r').AsString);.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;.Open;.Variables['Spec']:=QuotedStr(ADOQuery4.Fields[0].AsString);.PrepareReport;.ShowPreparedReport;;TForm2.Edit2Change(Sender:
TObject);Length(Edit2.Text)>0
then.Student.Filtered:=false;.Student.Filter:='Famailiya like
'+QuotedStr(Edit2.Text+'%')+' or Imya like '+QuotedStr(Edit2.Text+'%')+' or
Otchestvo like '+QuotedStr(Edit2.Text+'%');.Student.Filtered:=true;.Student.Filtered:=false;;TForm2.Button6Click(Sender:
TObject);.Close;.SQL.Clear;.SQL.Add(' INSERT INTO Arhiv
(Famailiya,Imya,Otchestvo,Data_r,Id_gruppi,Pol,Kurs) VALUES ');.SQL.Add('
('+#39+DBGrid1.DataSource.DataSet.FieldByName('Famailiya').AsString+#39);.SQL.Add('
,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Imya').AsString+#39);.SQL.Add('
,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Otchestvo').AsString+#39);.SQL.Add('
,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Data_r').AsString+#39);.SQL.Add('
,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Id_gruppi').AsString+#39);.SQL.Add('
,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Pol').AsString+#39);.SQL.Add('
,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Kurs').AsString+#39+')');.ExecSQL;.Close;.SQL.Clear;.SQL.Add('
DELETE FROM Ocenka WHERE id_student =
'+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);.ExecSQL;.Close;.SQL.Clear;.SQL.Add('
DELETE FROM Student WHERE id_student =
'+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);.ExecSQL;.Student.Close;.Student.Open;;TForm2.Button5Click(Sender:
TObject);
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;.
Форма "Группа"
Gruppa;, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, Menus, ExtCtrls, DBCtrls,
StdCtrls, Mask,, ADODB, frxClass, frxDBSet;= class(TForm): TMainMenu;:
TMenuItem;: TDBLookupComboBox;: TDBEdit;: TLabel;: TLabel;: TDBNavigator;:
TButton;: TButton;: TADOQuery;: TADOQuery;Nazvanie: TStringField;Unoshi:
TIntegerField;Devus: TIntegerField;Vsego: TIntegerField;: TADOQuery;:
TfrxReport;: TfrxDBDataset;Famailiya: TStringField;Imya:
TStringField;Otchestvo: TStringField;Data_r: TDateTimeField;: TfrxDBDataset;:
TfrxDBDataset;: TfrxReport;N1Click(Sender: TObject);FormClose(Sender: TObject;
var Action: TCloseAction);Button1Click(Sender: TObject);Button2Click(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TForm3;Main, Data;
{$R *.dfm}TForm3.N1Click(Sender:
TObject);
Приложение Б
(продолжение)
begin
Form3.Close;
Form1.Show;;TForm3.FormClose(Sender:
TObject; var Action: TCloseAction);.Show;;TForm3.Button1Click(Sender:
TObject);.Close;.SQL.Clear;.SQL.Add(' Select
Famailiya,Imya,Otchestvo,Data_r');.SQL.Add(' FROM Student');.SQL.Add(' WHERE
Id_gruppi
='+DBEdit1.DataSource.DataSet.FieldByName('Id_gruppi').AsString);.SQL.Add('
order by Famailiya,Imya,Otchestvo');.Open;.Variables['Gr']:=QuotedStr(DBEdit1.Text);.PrepareReport;.ShowPreparedReport;;TForm3.Button2Click(Sender:
TObject);.Open;.Open;.PrepareReport;.ShowPreparedReport;;
Форма "Выборка"
Viborka;
interface, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, DBGrids;=
class(TForm): TDBGrid;: TButton;Button1Click(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TForm8;Stud;
{$R
*.dfm}TForm8.Button1Click(Sender: TObject);.Close;;.1:
TDBGrid;
DBNavigator1:
TDBNavigator;FormClose(Sender: TObject; var Action: TCloseAction);
{ Private declarations }
{ Public declarations };: TForm14;
{$R *.dfm}Main,
Data;TForm14.FormClose(Sender: TObject; var Action: TCloseAction);.Show;;.
Форма "Специальность"
{ Private declarations }
{ Public declarations };:
TForm5;Main, Data;
{$R *.dfm}TForm5.N1Click(Sender:
TObject);.Close;.Show;;TForm5.FormClose(Sender: TObject; var Action:
TCloseAction);.Show;;.
Форма "Преподаватели"
unit Prepod;.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.ExtCtrls,
Vcl.DBCtrls,.Grids, Vcl.DBGrids;= class(TForm): TMainMenu;: TMenuItem;:
TDBGrid;: TDBNavigator;FormClose(Sender: TObject; var Action:
TCloseAction);N1Click(Sender: TObject);
{ Private declarations }
{ Public declarations };: TForm11;
{$R *.dfm}Data,
Main;TForm11.FormClose(Sender: TObject; var Action:
TCloseAction);.Show;;TForm11.N1Click(Sender: TObject);.Close;;.
Форма "Предметы"
Predmet;, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, Menus, StdCtrls, ExtCtrls,
DBCtrls, Mask;= class(TForm): TMainMenu;: TMenuItem;: TDBEdit;: TDBNavigator;:
TLabel;N1Click(Sender: TObject);FormClose(Sender: TObject; var Action:
TCloseAction);
{ Private declarations }
{ Public declarations };
var
Form4: TForm4;Main, Data;
{$R *.dfm}TForm4.N1Click(Sender:
TObject);.Close;.Show;;TForm4.FormClose(Sender: TObject; var Action:
TCloseAction);.Show;;.
Форма "Перевод студента"
perevod;
interface, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, StdCtrls, DBCtrls, DB, ADODB;=
class(TForm): TDBLookupComboBox;: TButton;: TLabel;:
TADOQuery;Button1Click(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TForm9;Data, Stud;
{$R
*.dfm}TForm9.Button1Click(Sender: TObject);.Close;.SQL.Clear;.SQL.Add('Update
Student Set Id_gruppi = '+IntToStr(DBLookupComboBox1.KeyValue) +' Where
Student.id_student = '+Form2.DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);.ExecSQL;.Student.Close;.Student.Open;.Close;.Show;;.
Форма "Кафедра"
Kafedra;
interface.Windows, Winapi.Messages,
System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,.Controls,
Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.Grids,.DBGrids;=
class(TForm): TDBGrid;: TDBNavigator;FormClose(Sender: TObject; var Action:
TCloseAction);
{ Private declarations }
{ Public declarations };: TForm12;
{$R *.dfm}Data,
Main;TForm12.FormClose(Sender: TObject; var Action: TCloseAction);.Show;;.
Форма "Оценка"
Ocenka;, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, Menus, Grids, DBGrids, DB,
ADODB, StdCtrls, DBCtrls, ExtCtrls,, frxClass, frxDBSet;= class(TForm):
TMainMenu;: TMenuItem;: TGroupBox;: TADOQuery;: TDataSource;: TDBGrid;:
TPanel;: TLabel;: TLabel;: TDBLookupComboBox;: TDBLookupComboBox;: TButton;:
TButton;: TADOQuery;: TGroupBox;: TLabel;: TLabel;: TDateTimePicker;:
TDateTimePicker;: TGroupBox;: TLabel;: TLabel;: TDateTimePicker;: TDateTimePicker;:
TButton;: TGroupBox;: TLabel;: TLabel;: TDateTimePicker;: TDateTimePicker;:
TButton;: TfrxReport;: TfrxReport;: TfrxDBDataset;Yfpfl1Click(Sender:
TObject);FormClose(Sender: TObject; var Action:
TCloseAction);DBLookupComboBox1CloseUp(Sender: TObject);DBLookupComboBox2CloseUp(Sender:
TObject);FormShow(Sender: TObject);Button1Click(Sender:
TObject);Button2Click(Sender: TObject);Button3Click(Sender:
TObject);Button4Click(Sender: TObject);
{ Private declarations }
{ Public declarations };:
TForm10;Main, Data;
{$R
*.dfm}TForm10.Yfpfl1Click(Sender:
TObject);.Close;.Show;;TForm10.FormClose(Sender: TObject; var Action:
TCloseAction);.Show;;TForm10.DBLookupComboBox1CloseUp(Sender:
TObject);.Close;.SQL.Clear;.SQL.Add('Select Student.Famailiya,Student.Imya,Predmet.Nazvanie,AVG(Ocenka.Ocenka)AS
itog');.SQL.Add(' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON
Ocenka.id_predmeta = Predmet.id_predmeta)');.SQL.Add(' ON Student.id_student =
Ocenka.id_student');.SQL.Add('WHERE Student.Id_gruppi ='+IntToStr(DBLookupComboBox1.KeyValue)+
' AND Predmet.Nazvanie = '+#39+DBLookupComboBox2.Text+#39 );.SQL.Add(' Group by
Student.Famailiya,Student.Imya,Predmet.Nazvanie');.Open;;TForm10.DBLookupComboBox2CloseUp(Sender:
TObject);.Close;.SQL.Clear;.SQL.Add('Select Student.Famailiya,Student.Imya,Predmet.Nazvanie,AVG(Ocenka.Ocenka)AS
itog');.SQL.Add(' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON
Ocenka.id_predmeta = Predmet.id_predmeta)');.SQL.Add(' ON Student.id_student =
Ocenka.id_student');.SQL.Add('WHERE Student.Id_gruppi
='+IntToStr(DBLookupComboBox1.KeyValue)+ ' AND Predmet.Nazvanie =
'+#39+DBLookupComboBox2.Text+#39 );.SQL.Add(' Group by
Student.Famailiya,Student.Imya,Predmet.Nazvanie');.Open;;TForm10.FormShow(Sender:
TObject);.KeyValue:=1;.KeyValue:=1;.Close;.SQL.Clear;.SQL.Add('Select
Student.Famailiya,Student.Imya,Predmet.Nazvanie,AVG(Ocenka.Ocenka)AS
itog');.SQL.Add(' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON
Ocenka.id_predmeta = Predmet.id_predmeta)');.SQL.Add(' ON Student.id_student =
Ocenka.id_student');.SQL.Add('WHERE Student.Id_gruppi
='+IntToStr(DBLookupComboBox1.KeyValue)+ ' AND Predmet.Nazvanie =
'+#39+DBLookupComboBox2.Text+#39 );.SQL.Add(' Group by
Student.Famailiya,Student.Imya,Predmet.Nazvanie');.Open;;TForm10.Button1Click(Sender:
TObject);.Variables['pred']:=QuotedStr(DBLookupComboBox1.Text);.PrepareReport;.ShowPreparedReport;;TForm10.Button2Click(Sender:
TObject);,ch,tr,dva,vsego:integer;,xo,ud,pl:real;.Close;.SQL.Clear;.SQL.Add('Select
AVG (Ocenka),id_student');.SQL.Add('From Ocenka');.SQL.Add(' WHERE
((id_predmeta ='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff
AND :ll))');.SQL.Add(' GROUP BY id_student');.SQL.Add(' HAVING AVG (Ocenka) =
2' );.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker1.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka),id_student');.SQL.Add('From Ocenka');.SQL.Add(' WHERE ((id_predmeta
='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY id_student');.SQL.Add(' HAVING AVG(Ocenka)=3 OR
AVG(Ocenka)=4 OR
AVG(Ocenka)=5');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker1.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka),id_student');.SQL.Add('From Ocenka');.SQL.Add(' WHERE ((id_predmeta
='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY id_student');.SQL.Add(' HAVING (AVG (Ocenka) = 4 OR
AVG (Ocenka)
=5)');.Parameters.ParamByName('ff').Value:=DateToStr(DateTimePicker1.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka),id_student');.SQL.Add('From Ocenka');.SQL.Add(' WHERE ((id_predmeta
='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY id_student');.SQL.Add('HAVING AVG (Ocenka) = 5
');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker1.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka),id_student');.SQL.Add('From Ocenka');.SQL.Add(' WHERE ((id_predmeta
='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY id_student');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker1.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0;p>0 then:=(p*100)/vsego;ch>0 then:=(ch*100)/vsego;tr>0
then:=(tr*100)/vsego;dva>0
then:=(dva*100)/vsego;.Variables['pred']:=QuotedStr('Успеваемость студентов по
предмету
'+DBLookupComboBox2.Text);.Variables['pyat']:=FloatToStr(ot);.Variables['chet']:=FloatToStr(xo);.Variables['tri']:=FloatToStr(ud);.Variables['dva']:=FloatToStr(pl);.PrepareReport;.ShowPreparedReport;;TForm10.Button3Click(Sender:
TObject);,ch,tr,dva,vsego:integer;,xo,ud,pl:real;.Close;.SQL.Clear;.SQL.Add('Select
AVG (Ocenka.Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka INNER JOIN Student
ON Ocenka.id_student = Student.id_student');.SQL.Add('WHERE ((Id_gruppi = '+
IntToStr(DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY Ocenka.id_student');.SQL.Add(' HAVING AVG
(Ocenka.Ocenka) = 2' );.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker3.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker4.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka.Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka INNER JOIN Student ON
Ocenka.id_student = Student.id_student');.SQL.Add('WHERE ((Id_gruppi = '+
IntToStr(DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY Ocenka.id_student');.SQL.Add(' HAVING AVG(Ocenka.Ocenka)=3
OR AVG(Ocenka.Ocenka)=4 OR
AVG(Ocenka.Ocenka)=5');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker3.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker4.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka.Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka INNER JOIN Student ON
Ocenka.id_student = Student.id_student');.SQL.Add('WHERE ((Id_gruppi = '+
IntToStr(DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY Ocenka.id_student');.SQL.Add(' HAVING (AVG
(Ocenka.Ocenka) = 4 OR AVG (Ocenka.Ocenka)
=5)');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker3.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker4.Date);.Open;ADOQuery2.RecordCount>0
then:=
ADOQuery2.RecordCount
Приложение Б
(продолжение)
else:=0
;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka.Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka INNER JOIN Student ON
Ocenka.id_student = Student.id_student');.SQL.Add('WHERE ((Id_gruppi = '+
IntToStr(DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY Ocenka.id_student');.SQL.Add('HAVING AVG
(Ocenka.Ocenka) = 5 ');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker3.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker4.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka.Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka INNER JOIN Student ON
Ocenka.id_student = Student.id_student');.SQL.Add('WHERE ((Id_gruppi = '+
IntToStr(DBLookupComboBox1.KeyValue)+') AND (Data BETWEEN :ff AND
:ll))');.SQL.Add(' GROUP BY
Ocenka.id_student');.Parameters.ParamByName('ff').Value:=DateToStr( DateTimePicker3.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker4.Date);.Open;ADOQuery2.RecordCount>0
then:=
ADOQuery2.RecordCount:=0;:=(p*100);:=(ch*100);:=(tr*100);:=(dva*100);.Variables['pred']:=QuotedStr('Успеваемость
студентов группы '+DBLookupComboBox1.Text);.Variables['pyat']:=FloatToStr(ot);.Variables['chet']:=FloatToStr(xo);.Variables['tri']:=FloatToStr(ud);.Variables['dva']:=FloatToStr(pl);.PrepareReport;.ShowPreparedReport;;TForm10.Button4Click(Sender:
TObject);,ch,tr,dva,vsego:integer;,xo,ud,pl:real;.Close;.SQL.Clear;.SQL.Add('Select
AVG (Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka');.SQL.Add('WHERE Data
BETWEEN :ff AND :ll');.SQL.Add(' GROUP BY id_student');.SQL.Add(' HAVING AVG
(Ocenka) = 2' );.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker5.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker6.Date);2.Open;
if ADOQuery2.RecordCount>0 then:=
ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka');.SQL.Add('WHERE Data
BETWEEN :ff AND :ll');.SQL.Add(' GROUP BY id_student');.SQL.Add(' HAVING
AVG(Ocenka)=3 OR AVG(Ocenka)=4 OR
AVG(Ocenka)=5');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker5.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker6.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka');.SQL.Add('WHERE Data
BETWEEN :ff AND :ll');.SQL.Add(' GROUP BY id_student');.SQL.Add(' HAVING (AVG
(Ocenka) = 4 OR AVG (Ocenka)
=5)');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker5.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker6.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka');.SQL.Add('WHERE Data
BETWEEN :ff AND :ll');.SQL.Add(' GROUP BY id_student');.SQL.Add('HAVING AVG
(Ocenka) = 5 ');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker5.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker6.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0 ;.Close;.SQL.Clear;.SQL.Add('Select AVG
(Ocenka),Ocenka.id_student');.SQL.Add('From Ocenka');.SQL.Add('WHERE Data
BETWEEN :ff AND :ll');.SQL.Add(' GROUP BY
id_student');.Parameters.ParamByName('ff').Value:=DateToStr(
DateTimePicker5.Date);.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker6.Date);.Open;ADOQuery2.RecordCount>0
then:= ADOQuery2.RecordCount:=0; p>0
then
ot:=(p*100)/vsego;ch>0
then:=(ch*100)/vsego;tr>0 then:=(tr*100)/vsego;dva>0
then:=(dva*100)/vsego;.Variables['pred']:=QuotedStr('Успеваемость в
деканате');.Variables['pyat']:=FloatToStr(ot);.Variables['chet']:=FloatToStr(xo);.Variables['tri']:=FloatToStr(ud);.Variables['dva']:=FloatToStr(pl);.PrepareReport;.ShowPreparedReport;;.
Форма "Должности"
Dolzh;
interface.Windows, Winapi.Messages,
System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,.Controls,
Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.Grids,.DBGrids;=
class(TForm): TDBGrid;: TDBNavigator;FormClose(Sender: TObject; var Action:
TCloseAction);
{ Private declarations }
{ Public declarations }; var:
TForm13;
{$R *.dfm}Data, Main;TForm13.FormClose(Sender:
TObject; var Action: TCloseAction);.Show;; end.
Форма "Дата"
Data;, Classes, DB, ADODB;=
class(TDataModule): TADOConnection;: TADOTable;: TADOTable;: TADOTable;:
TADOTable;: TADOTable;: TDataSource;: TDataSource;: TDataSource;: TDataSource;:
TDataSource;_student: TIntegerField;: TStringField;: TStringField;:
TStringField;_r: TDateTimeField;_gruppi: TIntegerField;: TStringField;:
TStringField;_zapisi: TIntegerField;: TIntegerField;_student:
TIntegerField;_predmeta: TIntegerField;: TDateTimeField;: TStringField;:
TStringField;_predmeta: TAutoIncField;: TStringField;: TIntegerField;:
TADOTable;: TADOTable;: TDataSource;: TDataSource;: TADOTable;: TDataSource;:
TIntegerField;_Prepod: TAutoIncField;: TStringField;: TStringField;_dolzhnost:
TIntegerField;_stepen: TIntegerField;_kafedri: TIntegerField;: TStringField;:
TStringField;: TStringField;
{ Private declarations }
{ Public declarations };:
TDataModule1;
{$R *.dfm}.