Базы данных

 

Введение


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

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

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

·схема базы данных (на основании ER-модели, разработанной на этапе анализа);

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

Проектирование информационных систем охватывает три основные области:

·проектирование объектов данных, которые будут реализованы в базе данных;

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

·учет конкретной среды или технологии, а именно: топологии сети, конфигурации аппаратных средств, используемой архитектуры (файл-сервер или клиент-сервер), параллельной обработки, распределенной обработки данных и т.п.

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

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



. Словесное описание предметной области


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

Автоматизация <http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F> деятельности деканата позволяет:

·Значительно сократить время, затрачиваемое сотрудниками деканата на выполнение регламентных процедур (например, редактирование информации, поиск личных данных студентов и т. д.);

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

·Автоматизировать формирование и подготовку на печать необходимых документов.

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

Задачи Электронного деканата:

. Учет контингента

. Автоматизированная подготовка документов:

·формирование и печать ведомостей

·ведение карточек студентов

·печать (экспорт в MS Excel) любой таблицы с экрана

·формирование и печать справок, академических справок

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

·подготовка сведений об отличниках (на повышенную стипендию), студентах, не имеющих троек (на стипендию)

. Хранение и выдача информации по текущему состоянию и истории учебного процесса.

Потребителями информации из БД являются сотрудники деканата.

Входная информация поступает в БД в виде:

?данных о студентах;

?данных о преподавателях;

На выходе пользователи системы получают информацию в виде:

?списков студентов по группам;

?ведомостей;

?личных карточек студентов;

?справок;

?академических справок.

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



2. Построение схемы функциональных зависимостей


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

Схема функциональных зависимостей представлена на рисунке 2.1.


Рисунок 2.1 - Схема функциональных зависимостей


Из приведенной схемы видно, что атрибуты "дата", "оценка" функционально зависят от атрибута "№ оценки". Аналогично атрибуты "ФИО", "Дата рождения", "Пол", "Курс", "Гражданство", "Форма обучения", "Основа" функционально зависят от атрибута "№ студента".

Атрибут "Название" зависит от атрибута "№ специальности". Каждая специальность может включать в себя несколько групп.

Атрибут "Название" зависит от атрибута "№ группы". Каждая группа включает множество студентов.

Также атрибут "Название" зависит от атрибута "№ должности". Одну должность могут занимать несколько преподавателей.

Атрибуты "Название", "Кабинет", "Телефон" зависят от атрибута "№ кафедры". Каждая кафедра включает несколько преподавателей.

Атрибуты "ФИО", "Адрес" "Телефон" зависят от атрибута "№ преподавателя". Каждый преподаватель может вести несколько предметов.


2.1 Формирование 1НФ


Исходное отношение, находящееся в 1НФ, строится из всех атрибутов, выделенных в предметной области, и представлено на рисунке 2.1.1.


Дата Оценка№ оценки *№ предмета *Название№ преподавателяФИОАдресТелефон№ должностиНазвание№ кафедрыНазваниеКабинетТелефон№ специальностиНазвание№ группыНазвание№ студента *ФИОДата рожденияПолКурсГражданствоФорма обученияОсноваРисунок 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.


Рисунок 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

Перед выполнением запроса в него добавляется условие, которое указывает идентификатор студента (текущая запись). Запрос увеличивает для текущего студента курс на 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;;.



Форма "Специальность"

Spec;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Menus, ExtCtrls, DBCtrls, StdCtrls, Mask;= class(TForm): TMainMenu;: TMenuItem;: TDBEdit;: TDBMemo;: TLabel;: TLabel;: TDBNavigator;N1Click(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);

{ 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}.


Введение Индустрия разработки автоматизированных информационных систем управления появилась в 50 - 60-х годах и к концу века приобрела вполне законченные

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ