Базы данных

Словесное описание предметной области. Построение схемы функциональных зависимостей. Реализация базы данных средствами утилиты Enterprise Manager в формате SQL Server Management Studio. Разработка алгоритмов работы программы и приложения пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 26.03.2015
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

Автоматизация деятельности деканата позволяет:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

? справок;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дата

Оценка

№ оценки *

№ предмета *

Название

№ преподавателя

ФИО

Адрес

Телефон

№ должности

Название

№ кафедры

Название

Кабинет

Телефон

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

Название

№ группы

Название

№ студента *

ФИО

Дата рождения

Пол

Курс

Гражданство

Форма обучения

Основа

Рисунок 2.1.1 - Исходное отношение в 1НФ

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

2.2 Нормализация отношений

Для перевода отношения из 1НФ в 2НФ необходимо исключить из исходного отношения частичные функциональные зависимости неключевых атрибутов от первичного ключа. В представленном на рисунке 2.2 отношении в соответствии со схемой функциональных зависимостей присутствуют частичные функциональные зависимости одних атрибутов от других атрибутов, которые являются частью составного первичного ключа исходного отношения. Так присутствуют следующие частичные функциональные зависимости: атрибутов "ФИО", "Дата рождения", "Пол", "Курс", "№ группы", "Название", "Гражданство", "Форма обучения", "Основа" от атрибута "№ студента"; атрибутов "№ преподавателя", "№ студента", "№ предмета", "Оценка", "Дата" от атрибута "№ оценки"; атрибута "Название" от атрибута "№ предмета". Для исключения этих зависимостей по правилам декомпозиции исходное отношение R разбивается на четыре отношения R1, R2, R3, R4.

Рисунок 2.2.1 - Схема отношений в 2НФ

Далее необходимо привести полученные отношения R1, R2, R3, R4 к 3НФ. Для этого требуется исключить присутствующие в них транзитивные зависимости. В отношении R3 атрибуты "Название группы", "№ специальности", "Название" зависят от первичного ключа транзитивно через атрибут "№ группы". Для перевода этого отношения в 3НФ его необходимо разбить по атрибуту "№ группы" на два отношения R3 и R5. В отношении R5 атрибут "Название" зависит от первичного ключа транзитивно через атрибут "№ специальности". Для перевода этого отношения в 3НФ его необходимо разбить по атрибуту "№ специальности" на два отношения R5 и R6. В отношении R1 атрибут "Название должности" зависит от первичного ключа транзитивно через атрибут "№ должности". Для перевода этого отношения в 3НФ его необходимо разбить по атрибуту "№ должности" на два отношения R1 и R7. В отношении R1 атрибуты "Название кафедры", "Кабинет", "Телефон" зависят от первичного ключа транзитивно через атрибут "№ кафедры". Для перевода этого отношения в 3НФ его необходимо разбить по атрибуту "№ кафедры" на два отношения R1 и R8.

В результате получим отношения R1, R2, R3, R4, R5, R6, R7, R8. Поскольку во всех полученных отношениях все функциональные зависимости сводятся к полной нетранзитивной зависимости от первичного ключа (т. е. отсутствуют зависимости частей составных первичных ключей от неключевых атрибутов) эта схема удовлетворяет всем требованиям НФБК и является конечным результатом концептуального проектирования (рисунок 2.2.2).

Рисунок 2.2.2 - Схема отношений в 3НФ

3. Реализация БД

3.1 Создание БД средствами утилиты Enterprise Manager в формате MS SQL

база данные утилита программа

Запускается среда SQL Server Management Studio. Проводится соединение с сервером ADMIN. В обозревателе выбирается подкаталог Базы данных, в котором создается своя база данных (БД, рисунок 3.1).

Рисунок 3.1 - Создание базы данных

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

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

Описанные поля:

- id_kafedra - уникальный номер кафедры, ключевое поле, тип - целое (int);

- nazvanie - название кафедры, текстовое поле (nvarchar), размер 50 символов;

- kabinet - номер кабинета, в котором располагается кафедра, текстовое поле (nvarchar), размер 50 символов;

- telephone - контактный телефон, текстовое поле (nvarchar), размер 50 символов;

Для всех полей отключается свойство "Разрешить значения NULL" (поля обязательны для ввода). Далее таблица сохраняется с именем "Kafedra".

Таблица представлена на рисунке 3.2.

Рисунок 3.2 - Таблица "Кафедра"

Создается новая таблица, которая будет хранить данные о должностях. Описываются поля, которые будут присутствовать в таблице.

Описанные поля:

- id_dolzhnost - уникальный номер должности, ключевое поле, тип - целое (int);

- nazvanie - название должности, которую занимают преподаватели, тип - текстовый (varchar), размер 50 символов. Далее таблица сохраняется с именем "Dolzhnost".

Таблица представлена на рисунке 3.3.

Рисунок 3.3 - Таблица "Должность"

Создается новая таблица, которая будет хранить данные о специальностях, которые есть на факультете. Описываются поля, которые будут присутствовать в таблице.

Описанные поля:

- id_spec - уникальный номер специальности, ключевое поле, тип - целое (int);

- nazvanie - название специальности, текстовое поле (varchar), размер 50 символов;

- opisanie - описание специальности, текстовое поле (varchar), размер 50 символов.

Для поля "Nazvanie" отключается свойство "Разрешить значения NULL" (поле обязательно для ввода). Далее таблица сохраняется с именем "Specialnost". Таблица представлена на рисунке 3.4.

Рисунок 3.4 - Таблица "Специальности"

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

Описанные поля:

- id_gruppi - уникальный номер группы, ключевое поле, тип - целое (int);

- id_spec - идентификатор специальности, тип - целое (int);

- nazvanie - название группы, текстовое поле (char), размер 50 символов;

Для всех полей отключается свойство "Разрешить значения NULL" (поля обязательны для ввода). Далее таблица сохраняется с именем "Gruppa".

Таблица представлена на рисунке 3.5.

Рисунок 3.5 - Таблица "Группа"

Создается новая таблица, которая будет хранить данные о преподавателях. Описываются поля, которые будут присутствовать в таблице.

Описанные поля:

- id_prepod - уникальный номер преподавателя, ключевое поле, тип - целое (int);

- id_dolzhnost - идентификатор должности, тип - целое (int);

- id_kafedri - идентификатор кафедры, тип - целое (int);

- FIO - ФИО преподавателя, текстовое поле (varchar), размер 250 символов;

- Adres - адрес преподавателя, текстовое поле (varchar), размер 50 символов;

- Telephone - контактный телефон преподавателя, текстовое поле (varchar), размер 50 символов.

Для всех полей кроме "Telephone" отключается свойство "Разрешить значения NULL" (поля обязательны для ввода). Далее таблица сохраняется с именем "Prepodavatel". Таблица представлена на рисунке 3.6.

Рисунок 3.6 - Таблица "Преподаватель"

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

Описанные поля:

- id_predmeta - уникальный номер предмета, ключевое поле, тип - целое (int);

- prepodavatel - идентификатор преподавателя, тип - целое (int);

- nazvanie - название предмета, текстовое поле (varchar), размер 20 символов;

Для всех полей отключается свойство "Разрешить значения NULL" (поля обязательны для ввода). Далее таблица сохраняется с именем "Predmet".

Таблица представлена на рисунке 3.7.

Рисунок 3.7 - Таблица "Предмет"

Создается новая таблица, которая будет хранить данные о студентах. Описываются поля, которые будут присутствовать в таблице.

Описанные поля:

- id_student - уникальный номер студента, ключевое поле, тип - целое (int);

- id_gruppi - идентификатор группы, тип - целое (int);

- Familiya - фамилия студента, текстовое поле (varchar), размер 30 символов;

- Imya - имя студента, текстовое поле (varchar), размер 30 символов;

- Otchestvo - отчество студента, текстовое поле (varchar), размер 30 символов;

- Data_r - дата рождения студента, тип - дата (datetime);

- Pol - пол студента, текстовое поле (varchar), размер 30 символов;

- Kurs - текущий курс, тип - целое (int);

- Forma - форма обучения, текстовое поле (varchar), размер 50 символов;

- Osnova - основа обучения, текстовое поле (varchar), размер 50 символов.

Для всех полей, отключается свойство "Разрешить значения NULL" (поля обязательны для ввода). Далее таблица сохраняется с именем "Student".

Таблица представлена на рисунке 3.8.

Рисунок 3.8 - Таблица "Студенты"

Создается новая таблица, которая будет хранить данные об оценках студентов. Описываются поля, которые будут присутствовать в таблице.

Описанные поля:

- id_zapisi - уникальный номер выставленной оценки, ключевое поле, тип - целое (int);

- id_student - идентификатор студента, тип - целое (int);

- id_predmeta - идентификатор предмета, тип - целое (int);

- ocenka - оценка, тип - целое (int);

- data - дата, тип - дата (datetime).

Для всех полей, отключается свойство "Разрешить значения NULL" (поля обязательны для ввода). Далее таблица сохраняется с именем "Ocenka".

Таблица представлена на рисунке 3.9.

Рисунок 3.9 - Таблица "Оценка"

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

Рисунок 3.10 - Диаграмма базы данных

4. Разработка алгоритмов работы программы

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

Блок-схема данного процесса представлена в приложении А на рисунке А.1.

5. Разработка приложения пользователя БД

5.1 Форма "Main"

Навигационная форма, с помощью которой можно перейти на дочерние формы для работы с данными и отчетами. На ней расположены следующие компоненты: таблица - Button (при нажатии переход на дочернюю форму), MainMenu (для перехода на дочерние формы и выхода).

Рисунок 5.1.1 - Форма "Main"

5.2 Форма "Data"

Форма содержит компоненты для подключения к базе. Компонент ADOConnection (для создания соединения с БД, расположенной на сервере); компонент DataSource, обеспечивающий связь таблиц с соответствующими компонентами ADOTable, который, в свою очередь, необходим для доступа к таблицам базы данных.

Рисунок 5.2.1 - Форма "Дата"

Чтобы создать соединение необходимо в свойстве ConnectionString компонента ADOConnection указать источник БД (рисунок 5.2.2, рисунок 5.2.3).

Рисунок 5.2.2 - Окно ADOConnection ConnectionString

Рисунок 5.2.3 - Создание соединения

Для компонента ADOTable указывается свойство Connection:=ADOConnection1, а для того чтобы осуществить доступ к необходимой таблице указывается в свойстве TableName.

5.3 Форма "Результаты выборки"

Форма отображает результаты поиска, параметры для которого указываются на форме "Студенты". Для отображения данных используется DBGrid1, который связан с запросом на форме "Студенты" (Form2.DataSource1). Компонент Button1 позволяет закрыть форму.

Рисунок 5.3 -Форма "Результаты выборки"

5.4 Форма "Студенты"

На рисунке 5.4.1 приведена форма программы - "Студенты" (несет информацию о студентах деканата). На ней расположены следующие компоненты: таблица - DBGrid1 (таблица "Студенты"), компоненты DBNavigator, позволяющие пользователю перемещаться по записям в таблице и изменять их; компонент DataSource1, обеспечивающий связь таблиц с соответствующими компонентами ADOQuery1, который, в свою очередь, необходим для доступа к таблице базы данных, кнопки: Button1, Button2, Button3, Button4, Button5 - для удаления текущей записи, перевода студента на следующий курс, перевод в другую группу, поиска по группе, специальности соответственно; MainMenu - для перехода на главную форму.

Рисунок 5.4.1 -Форма "Студенты"

Для компонента ADOQuery3 задается следующие SQL-запрос:

DELETE FROM Ocenka

DELETE FROM Student

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

Для компонента ADOQuery2 задается следующие SQL-запрос:

Update Student Set Kurs = Kurs+1

Перед выполнением запроса в него добавляется условие, которое указывает идентификатор студента (текущая запись). Запрос увеличивает для текущего студента курс на 1.

Для компонента ADOQuery1 задается следующий SQL-запрос:

Select Student.Famailiya,Student.Imya,Student.Otchestvo,Student.Data_r, Gruppa.Nazvanie,Student.Pol,Student.Kurs

FROM Student INNER JOIN Gruppa ON Student.Id_gruppi=Gruppa.Id_gruppi

Из запроса видно, что выбираются все поля из таблицы "Студент", связанные с главной таблицей "Группа" через поле Id_gruppi. Перед открытием формы "Результат выборки" компоненту DBGrid1 (форма "Результат выборки") свойству DataSource указывается ADOQuery1.

Для студента можно распечатать академическую справку (рис 5.4.2) и справку с места учебы (рис 5.4.3.)

Рисунок 5.4.2 - Отчет "Академическая справка"

Рисунок 5.4.3 - Отчет "Справка"

Кнопка "Печать" предназначена для активирования SQL запроса и формирования списка студентов группы. Данный отчет формируется в MS Excel (рисунок 5.4.4).

Рисунок 5.4.4 - Отчет "Студенты группы"

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

Создается новая форма. На рисунке 5.5 приведена форма программы - "Специальность" (несет информацию о специальностях деканата). На ней расположены следующие компоненты: два поля - DBEdit (таблица "Специальность"), компоненты DBNavigator, позволяющие пользователю перемещаться по записям в таблице и изменять их; label1 и label2 отображают на форме надписи: "Название" и "Описание" соответственно.

Рисунок 5.5 - Форма "Специальность"

5.6 Форма "Преподаватели"

Создается новая форма. На рисунке 5.6 приведена форма программы - "Преподаватели" (несет информацию о преподавателях). На ней расположены следующие компоненты: таблица - DBGrid1 (таблица "Преподаватели"), компоненты DBNavigator1, позволяющие пользователю перемещаться по записям в таблице и изменять их.

Рисунок 5.6 - Форма "Преподаватели"

5.7 Форма "Предмет"

Создается новая форма. На рисунке 5.7 приведена форма программы - "Преподаватели" (несет информацию о преподавателях). На ней расположены следующие компоненты: поле - DBEdit1 (таблица "Предмет"), компоненты DBNavigator1, позволяющие пользователю перемещаться по записям в таблице и изменять их. label1 отображает на форме надпись "Название".

Рисунок 5.7 - Форма "Предмет"

5.8 Форма "Кафедра"

Создается новая форма. На рисунке 5.8 приведена форма программы - "Кафедра" (несет информацию о кафедрах). На ней расположены следующие компоненты: таблица - DBGrid1 (таблица "Кафедра"), компоненты DBNavigator1, позволяющие пользователю перемещаться по записям в таблице и изменять их.

Рисунок 5.8 - Форма "Кафедра"

5.9 Форма "Должности"

Создается новая форма. На рисунке 5.9 приведена форма программы - "Должности" (несет информацию о должностях). На ней расположены следующие компоненты: таблица - DBGrid1 (таблица "Должности"), компоненты DBNavigator1, позволяющие пользователю перемещаться по записям в таблице и изменять их.

Рисунок 5.9 - Форма "Должности"

5.10 Форма "Перевод студента в группу"

Создается новая форма. На рисунке 5.10 приведена форма программы - "Перевод студента в группу". На ней расположены следующие компоненты: таблица - DBLookupComboBox1 (список групп); компонент label1, отображающий надпись "Укажите название группы"; кнопка осуществляет изменение данных.

Рисунок 5.10 - Форма "Перевод студента в группу"

Для компонента ADOQuery1 задается следующий SQL-запрос:

'Update Student Set Id_gruppi = '+IntToStr(DBLookupComboBox1.KeyValue) +' Where Student.id_student = '+Form2.DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);

Перед выполнением запроса передаются параметры о текущем студенте на форме "Студенты" и новую выбранную группу.

5.11 Форма "Оценка"

Создается новая форма. На рисунке 5.11 приведена форма программы - "Экзаменационные оценки" (несет информацию об оценках). На ней расположены следующие компоненты: DBLookupComboBox1 отображает данные о группе, DBLookupComboBox2 отображает данные о предмете, DateTimePicker позволяет выбрать временной диапазон для отчетов; компоненты DBNavigator1, позволяющие пользователю удалять данные. MainMenu - позволяет перейти на главную форму. Button'ы открывают запросы ADOQuery (для отчетов) и отображают данные в виде отчета (frxReport). Для передачи данных в отчет используется frxDBDataSet.

Рисунок 5.11.1 - Форма "Экзаменационные оценки"

Отчеты "Статистика по дисциплине", "Статистика по группе", "Статистика деканата" формируются на основании однотипных запросов (рисунок 5.11.2). Обработчики событий на нажатие соответствующих кнопок имеет следующий вид:

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('Select AVG (Ocenka) AS Sred,Student.Famailiya,');

ADOQuery1.SQL.Add(' (case when AVG (Ocenka)>=4 and AVG (Ocenka)<5 THEN ''Стипендия''');

ADOQuery1.SQL.Add(' when AVG (Ocenka)=5 THEN ''Повышенная стипендия''');

ADOQuery1.SQL.Add(' when AVG (Ocenka)<4 THEN ''Без стипендии''');

ADOQuery1.SQL.Add(' end) AS Стипендия');

ADOQuery1.SQL.Add(' From Ocenka INNER JOIN Student ON Ocenka.id_student=Student.id_student');

ADOQuery1.SQL.Add(' WHERE Data BETWEEN :ff AND :ll');

ADOQuery1.SQL.Add(' GROUP BY Student.id_student,Student.Famailiya');

ADOQuery1.Parameters.ParamByName('ff').Value:=DateToStr( DateTimePicker5.Date);

ADOQuery1.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker6.Date);

ADOQuery1.Open;

frxReport2.Variables['pred']:=QuotedStr('Успеваемость в деканате');

frxReport2.PrepareReport;

frxReport2.ShowPreparedReport;

Закрытие запроса

Очистка

Формирование sql-запроса для выборки

Задаем параметры для отчета

Подготовка отчета

Открытие отчета

Рисунок 5.11.2 - Отчет "Успеваемость по деканату"

Отчет об успеваемости группы имеет следующий вид:

Рисунок 5.11.3 - Отчет "Успеваемость по группе"

5.12 Форма "Группа"

Создается новая форма. На рисунке 5.12.1 приведена форма программы - "Группа" (несет информацию о группах). На ней расположены следующие компоненты: DBLookupComboBox1 отображает данные о специальности, к которой относиться группа, поле - DBEdit (таблица "Группа"), компоненты DBNavigator1, позволяющие пользователю удалять данные. MainMenu - позволяет перейти на главную форму. Button1 и Button2 открывают запросы ADOQuery1 (для списка студентов группы) и ADOQuery2, ADOQuery3 (Для отображения успеваемости группы) и отображает данные в виде отчета (frxReport1 и frxReport2). Для передачи данных в отчет используется frxDBDataSet.

Рисунок 5.12.1 - Форма "Группа"

Для компонента ADOQuery1 задается следующий SQL-запрос:

Select Famailiya,Imya,Otchestvo,Data_r

FROM Student

ORDER BY Famailiya,Imya,Otchestvo

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

Рисунок 5.12.2 - Отчет "Список группы"

Для компонента ADOQuery2 задается следующий SQL-запрос:

Select Gruppa.Nazvanie,(Select Count(*)FROM Student WHERE Pol = 'Муж' and Student.Id_gruppi = Gruppa.Id_gruppi) AS Unoshi,

(Select Count(*)FROM Student WHERE Pol = 'Жен' and Student.Id_gruppi = Gruppa.Id_gruppi) AS Devus,

(Select Count(*)FROM Student WHERE Student.Id_gruppi = Gruppa.Id_gruppi) AS Vsego

FROM Student INNER JOIN Gruppa ON Student.Id_gruppi = Gruppa.Id_gruppi

Group by Gruppa.Nazvanie,Gruppa.Id_gruppi

Для компонента ADOQuery3 задается следующий SQL-запрос:

Select (Select Count(*)FROM Student WHERE Pol = 'Муж' ) AS U_all,

(Select Count(*)FROM Student WHERE Pol = 'Жен' ) AS D_all,

(Select Count(*)FROM Student ) AS All_

FROM Student

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

Рисунок 5.12.3 - Отчет "Статистика групп"

Заключение

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

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

Список использованной литературы

1. Базы данных: модели, разработки, реализация / Т.С. Карпова. - СПб.: Питер, 2002.

2. Работа с базами данных в Delphi. / Гофман В.Э., Хомоненко А.Д. - СПб.: БХВ - Петербург, 2000. - 656с.: ил.

3. Базы данных: Учебник для ВУЗов / Под ред. проф. А.Д. Хомоненко. - СПб. КОРОНА принт, 2004

Приложение А

Общая блок-схема программы

Процедура "Работа с данными"

Процедура "Поиск"

Приложение Б

Листинг программы

Форма "Главная"

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, StdCtrls;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N9Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Stud, Gruppa, Predmet, Spec, Ocenka, Prepod, Kafedra, Dolzh;

{$R *.dfm}

procedure TForm1.N2Click(Sender: TObject);

begin

Form1.Hide;

Form2.Show;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

Form1.Hide;

Form3.Show;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

Form1.Hide;

Form10.Show;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

Application.Terminate;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

Form1.Hide;

Form11.Show;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

Form1.Hide;

Form12.Show;

end;

procedure TForm1.N8Click(Sender: TObject);

begin

Form1.Hide;

Form13.Show;

end;

procedure TForm1.N9Click(Sender: TObject);

begin

Form1.Hide;

Form14.Show;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Form1.Hide;

Form4.Show;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Form1.Hide;

Form5.Show;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Form1.Hide;

Form6.Show;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Form1.Hide;

Form7.Show;

end;

end.

Форма "Студент"

unit Stud;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, DB, ADODB;

type

TForm2 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

GroupBox3: TGroupBox;

DBLookupComboBox1: TDBLookupComboBox;

DBLookupComboBox2: TDBLookupComboBox;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

DataSource1: TDataSource;

ADOQuery1: TADOQuery;

ADOQuery2: TADOQuery;

ADOQuery3: TADOQuery;

procedure N1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Main, Data, Viborka, perevod;

{$R *.dfm}

procedure TForm2.N1Click(Sender: TObject);

begin

Form2.Close;

Form1.Show;

end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Show;

end;

procedure TForm2.Button1Click(Sender: TObject);

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('Select Student.Famailiya,Student.Imya,Student.Otchestvo,Student.Data_r,Gruppa.Nazvanie,Student.Pol,Student.Kurs');

ADOQuery1.SQL.Add(' FROM Student INNER JOIN Gruppa ON Student.Id_gruppi=Gruppa.Id_gruppi');

ADOQuery1.SQL.Add(' WHERE Student.Famailiya like'+#39+Edit1.Text+#39);

ADOQuery1.Open;

Form8.Show;

Form8.DBGrid1.Columns.Items[0].Width:=80;

Form8.DBGrid1.Columns.Items[1].Width:=80;

Form8.DBGrid1.Columns.Items[2].Width:=80;

Form8.DBGrid1.Columns.Items[3].Width:=80;

Form8.DBGrid1.Columns.Items[4].Width:=80;

Form8.DBGrid1.Columns.Items[5].Width:=80;

Form8.DBGrid1.Columns.Items[6].Width:=80;

end;

procedure TForm2.Button2Click(Sender: TObject);

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('Select Student.Famailiya,Student.Imya,Student.Otchestvo,Student.Data_r,Gruppa.Nazvanie,Student.Pol,Student.Kurs');

ADOQuery1.SQL.Add(' FROM Student INNER JOIN Gruppa ON Student.Id_gruppi=Gruppa.Id_gruppi');

ADOQuery1.SQL.Add(' WHERE Gruppa.Nazvanie like'+#39+DBLookupComboBox2.Text+#39);

ADOQuery1.Open;

Form8.Show;

Form8.DBGrid1.Columns.Items[0].Width:=80;

Form8.DBGrid1.Columns.Items[1].Width:=80;

Form8.DBGrid1.Columns.Items[2].Width:=80;

Form8.DBGrid1.Columns.Items[3].Width:=80;

Form8.DBGrid1.Columns.Items[4].Width:=80;

Form8.DBGrid1.Columns.Items[5].Width:=80;

Form8.DBGrid1.Columns.Items[6].Width:=80;

end;

procedure TForm2.Button3Click(Sender: TObject);

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('Select Student.Famailiya,Student.Imya,Student.Otchestvo,Student.Data_r,Gruppa.Nazvanie,Student.Pol,Student.Kurs');

ADOQuery1.SQL.Add(' FROM Student INNER JOIN Gruppa ON Student.Id_gruppi=Gruppa.Id_gruppi');

ADOQuery1.SQL.Add(' WHERE Gruppa.id_spec = '+FloatToStr(DBLookupComboBox1.KeyValue));

ADOQuery1.Open;

Form8.Show;

Form8.DBGrid1.Columns.Items[0].Width:=80;

Form8.DBGrid1.Columns.Items[1].Width:=80;

Form8.DBGrid1.Columns.Items[2].Width:=80;

Form8.DBGrid1.Columns.Items[3].Width:=80;

Form8.DBGrid1.Columns.Items[4].Width:=80;

Form8.DBGrid1.Columns.Items[5].Width:=80;

Form8.DBGrid1.Columns.Items[6].Width:=80;

end;

procedure TForm2.Button4Click(Sender: TObject);

begin

if (DBGrid1.DataSource.DataSet.FieldByName('Forma').AsString='очная') then

if (DBGrid1.DataSource.DataSet.FieldByName('Kurs').AsInteger<5) then

begin

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('Update Student Set Kurs = Kurs+1 Where Student.id_student = '+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);

ADOQuery2.ExecSQL;

DataModule1.Student.Close;

DataModule1.Student.Open;

end

else

Application.MessageBox('Невозможно перевести студента на курс старше (очная форма до 5 курса)','Ошибка',MB_OK);

if (DBGrid1.DataSource.DataSet.FieldByName('Forma').AsString='очно-заочная') then

if (DBGrid1.DataSource.DataSet.FieldByName('Kurs').AsInteger<6) then

begin

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('Update Student Set Kurs = Kurs+1 Where Student.id_student = '+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);

ADOQuery2.ExecSQL;

DataModule1.Student.Close;

DataModule1.Student.Open;

end

else

Application.MessageBox('Невозможно перевести студента на курс старше (очно-заочная форма до 6 курса)','Ошибка',MB_OK);

end;

procedure TForm2.Button7Click(Sender: TObject);

begin

ADOQuery3.Close;

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add(' DELETE FROM Ocenka WHERE id_student = '+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);

ADOQuery3.ExecSQL;

ADOQuery3.Close;

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add(' DELETE FROM Student WHERE id_student = '+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);

ADOQuery3.ExecSQL;

DataModule1.Student.Close;

DataModule1.Student.Open;

end;

procedure TForm2.Button8Click(Sender: TObject);

begin

frxReport1.Variables['FIO']:=QuotedStr(DBGrid1.DataSource.DataSet.FieldByName('Famailiya').AsString

+' '+DBGrid1.DataSource.DataSet.FieldByName('Imya').AsString

+' '+DBGrid1.DataSource.DataSet.FieldByName('Otchestvo').AsString

+' '+DBGrid1.DataSource.DataSet.FieldByName('Data_r').AsString);

frxReport1.Variables['Kurs']:=QuotedStr(DBGrid1.DataSource.DataSet.FieldByName('Kurs').AsString);

ADOQuery4.SQL.Text:='SELECT Specialnost.Nazvanie'

+' FROM Specialnost INNER JOIN Gruppa ON Specialnost.id_spec=Gruppa.id_spec'

+' INNER JOIN Student ON Student.id_gruppi = Gruppa.id_gruppi'

+' WHERE id_student='+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString;

ADOQuery4.Open;

frxReport1.Variables['Spec']:=QuotedStr(ADOQuery4.Fields[0].AsString);

frxReport1.PrepareReport;

frxReport1.ShowPreparedReport;

end;

procedure TForm2.Button9Click(Sender: TObject);

begin

frxReport2.Variables['FIO']:=QuotedStr(DBGrid1.DataSource.DataSet.FieldByName('Famailiya').AsString

+' '+DBGrid1.DataSource.DataSet.FieldByName('Imya').AsString

+' '+DBGrid1.DataSource.DataSet.FieldByName('Otchestvo').AsString);

frxReport2.Variables['DataR']:=QuotedStr(DBGrid1.DataSource.DataSet.FieldByName('Data_r').AsString);

ADOQuery4.SQL.Text:='SELECT Specialnost.Nazvanie'

+' FROM Specialnost INNER JOIN Gruppa ON Specialnost.id_spec=Gruppa.id_spec'

+' INNER JOIN Student ON Student.id_gruppi = Gruppa.id_gruppi'

+' WHERE id_student='+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString;

ADOQuery4.Open;

frxReport2.Variables['Spec']:=QuotedStr(ADOQuery4.Fields[0].AsString);

frxReport2.PrepareReport;

frxReport2.ShowPreparedReport;

end;

procedure TForm2.Edit2Change(Sender: TObject);

begin

if Length(Edit2.Text)>0 then

begin

DataModule1.Student.Filtered:=false;

DataModule1.Student.Filter:='Famailiya like '+QuotedStr(Edit2.Text+'%')+' or Imya like '+QuotedStr(Edit2.Text+'%')+' or Otchestvo like '+QuotedStr(Edit2.Text+'%');

DataModule1.Student.Filtered:=true;

end

else

DataModule1.Student.Filtered:=false;

end;

procedure TForm2.Button6Click(Sender: TObject);

begin

ADOQuery3.Close;

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add(' INSERT INTO Arhiv (Famailiya,Imya,Otchestvo,Data_r,Id_gruppi,Pol,Kurs) VALUES ');

ADOQuery3.SQL.Add(' ('+#39+DBGrid1.DataSource.DataSet.FieldByName('Famailiya').AsString+#39);

ADOQuery3.SQL.Add(' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Imya').AsString+#39);

ADOQuery3.SQL.Add(' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Otchestvo').AsString+#39);

ADOQuery3.SQL.Add(' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Data_r').AsString+#39);

ADOQuery3.SQL.Add(' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Id_gruppi').AsString+#39);

ADOQuery3.SQL.Add(' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Pol').AsString+#39);

ADOQuery3.SQL.Add(' ,'+#39+DBGrid1.DataSource.DataSet.FieldByName('Kurs').AsString+#39+')');

ADOQuery3.ExecSQL;

ADOQuery3.Close;

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add(' DELETE FROM Ocenka WHERE id_student = '+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);

ADOQuery3.ExecSQL;

ADOQuery3.Close;

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add(' DELETE FROM Student WHERE id_student = '+DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);

ADOQuery3.ExecSQL;

DataModule1.Student.Close;

DataModule1.Student.Open;

end;

procedure TForm2.Button5Click(Sender: TObject);

begin

Form9.Show;

Form2.Hide;

Form9.Caption:='Перевод студента '+DBGrid1.DataSource.DataSet.FieldByName('Famailiya').AsString +DBGrid1.DataSource.DataSet.FieldByName('Imya').AsString + DBGrid1.DataSource.DataSet.FieldByName('Otchestvo').AsString;

end;

end.

Форма "Группа"

unit Gruppa;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, ExtCtrls, DBCtrls, StdCtrls, Mask,

DB, ADODB, frxClass, frxDBSet;

type

TForm3 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

DBLookupComboBox1: TDBLookupComboBox;

DBEdit1: TDBEdit;

Label1: TLabel;

Label2: TLabel;

DBNavigator1: TDBNavigator;

Button1: TButton;

Button2: TButton;

ADOQuery1: TADOQuery;

ADOQuery2: TADOQuery;

ADOQuery2Nazvanie: TStringField;

ADOQuery2Unoshi: TIntegerField;

ADOQuery2Devus: TIntegerField;

ADOQuery2Vsego: TIntegerField;

ADOQuery3: TADOQuery;

frxReport1: TfrxReport;

frxDBDataset1: TfrxDBDataset;

ADOQuery1Famailiya: TStringField;

ADOQuery1Imya: TStringField;

ADOQuery1Otchestvo: TStringField;

ADOQuery1Data_r: TDateTimeField;

frxDBDataset2: TfrxDBDataset;

frxDBDataset3: TfrxDBDataset;

frxReport2: TfrxReport;

procedure N1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses Main, Data;

{$R *.dfm}

procedure TForm3.N1Click(Sender: TObject);

Приложение Б

(продолжение)

begin

Form3.Close;

Form1.Show;

end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Show;

end;

procedure TForm3.Button1Click(Sender: TObject);

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add(' Select Famailiya,Imya,Otchestvo,Data_r');

ADOQuery1.SQL.Add(' FROM Student');

ADOQuery1.SQL.Add(' WHERE Id_gruppi ='+DBEdit1.DataSource.DataSet.FieldByName('Id_gruppi').AsString);

ADOQuery1.SQL.Add(' order by Famailiya,Imya,Otchestvo');

ADOQuery1.Open;

frxReport1.Variables['Gr']:=QuotedStr(DBEdit1.Text);

frxReport1.PrepareReport;

frxReport1.ShowPreparedReport;

end;

procedure TForm3.Button2Click(Sender: TObject);

begin

ADOQuery2.Open;

ADOQuery3.Open;

frxReport2.PrepareReport;

frxReport2.ShowPreparedReport;

end;

end

Форма "Выборка"

unit Viborka;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, DBGrids;

type

TForm8 = class(TForm)

DBGrid1: TDBGrid;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form8: TForm8;

implementation

uses Stud;

{$R *.dfm}

procedure TForm8.Button1Click(Sender: TObject);

begin

Form8.Close;

end;

end.

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form14: TForm14;

implementation

{$R *.dfm}

uses Main, Data;

procedure TForm14.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Show;

end;

end.

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

unit Spec;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, ExtCtrls, DBCtrls, StdCtrls, Mask;

type

TForm5 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

DBEdit1: TDBEdit;

DBMemo1: TDBMemo;

Label1: TLabel;

Label2: TLabel;

DBNavigator1: TDBNavigator;

procedure N1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form5: TForm5;

implementation

uses Main, Data;

{$R *.dfm}

procedure TForm5.N1Click(Sender: TObject);

begin

Form5.Close;

Form1.Show;

end;

procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Show;

end;

end.

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

unit Prepod;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.ExtCtrls, Vcl.DBCtrls,

Vcl.Grids, Vcl.DBGrids;

type

TForm11 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure N1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form11: TForm11;

implementation

{$R *.dfm}

uses Data, Main;

procedure TForm11.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Show;

end;

procedure TForm11.N1Click(Sender: TObject);

begin

Form11.Close;

end;

end.

Форма "Предметы"

unit Predmet;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, StdCtrls, ExtCtrls, DBCtrls, Mask;

type

TForm4 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

DBEdit1: TDBEdit;

DBNavigator1: TDBNavigator;

Label1: TLabel;

procedure N1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

implementation

uses Main, Data;

{$R *.dfm}

procedure TForm4.N1Click(Sender: TObject);

begin

Form4.Close;

Form1.Show;

end;

procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Show;

end;

end.

Форма "Перевод студента"

unit perevod;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, DBCtrls, DB, ADODB;

type

TForm9 = class(TForm)

DBLookupComboBox1: TDBLookupComboBox;

Button1: TButton;

Label1: TLabel;

ADOQuery1: TADOQuery;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form9: TForm9;

implementation

uses Data, Stud;

{$R *.dfm}

procedure TForm9.Button1Click(Sender: TObject);

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('Update Student Set Id_gruppi = '+IntToStr(DBLookupComboBox1.KeyValue) +' Where Student.id_student = '+Form2.DBGrid1.DataSource.DataSet.FieldByName('id_student').AsString);

ADOQuery1.ExecSQL;

DataModule1.Student.Close;

DataModule1.Student.Open;

Form9.Close;

Form2.Show;

end;

end.

Форма "Кафедра"

unit Kafedra;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.Grids,

Vcl.DBGrids;

type

TForm12 = class(TForm)

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form12: TForm12;

implementation

{$R *.dfm}

uses Data, Main;

procedure TForm12.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Show;

end;

end.

Форма "Оценка"

unit Ocenka;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, Grids, DBGrids, DB, ADODB, StdCtrls, DBCtrls, ExtCtrls,

ComCtrls, frxClass, frxDBSet;

type

TForm10 = class(TForm)

MainMenu1: TMainMenu;

Yfpfl1: TMenuItem;

GroupBox1: TGroupBox;

ADOQuery1: TADOQuery;

DataSource1: TDataSource;

DBGrid2: TDBGrid;

Panel1: TPanel;

Label1: TLabel;

Label2: TLabel;

DBLookupComboBox1: TDBLookupComboBox;

DBLookupComboBox2: TDBLookupComboBox;

Button1: TButton;

Button2: TButton;

ADOQuery2: TADOQuery;

GroupBox2: TGroupBox;

Label7: TLabel;

Label8: TLabel;

DateTimePicker1: TDateTimePicker;

DateTimePicker2: TDateTimePicker;

GroupBox3: TGroupBox;

Label3: TLabel;

Label4: TLabel;

DateTimePicker3: TDateTimePicker;

DateTimePicker4: TDateTimePicker;

Button3: TButton;

GroupBox4: TGroupBox;

Label5: TLabel;

Label6: TLabel;

DateTimePicker5: TDateTimePicker;

DateTimePicker6: TDateTimePicker;

Button4: TButton;

frxReport1: TfrxReport;

frxReport2: TfrxReport;

frxDBDataset1: TfrxDBDataset;

procedure Yfpfl1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure DBLookupComboBox1CloseUp(Sender: TObject);

procedure DBLookupComboBox2CloseUp(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form10: TForm10;

implementation

uses Main, Data;

{$R *.dfm}

procedure TForm10.Yfpfl1Click(Sender: TObject);

begin

Form10.Close;

Form1.Show;

end;

procedure TForm10.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Show;

end;

procedure TForm10.DBLookupComboBox1CloseUp(Sender: TObject);

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('Select Student.Famailiya,Student.Imya,Predmet.Nazvanie,AVG(Ocenka.Ocenka)AS itog');

ADOQuery1.SQL.Add(' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON Ocenka.id_predmeta = Predmet.id_predmeta)');

ADOQuery1.SQL.Add(' ON Student.id_student = Ocenka.id_student');

ADOQuery1.SQL.Add('WHERE Student.Id_gruppi ='+IntToStr(DBLookupComboBox1.KeyValue)+ ' AND Predmet.Nazvanie = '+#39+DBLookupComboBox2.Text+#39 );

ADOQuery1.SQL.Add(' Group by Student.Famailiya,Student.Imya,Predmet.Nazvanie');

ADOQuery1.Open;

end;

procedure TForm10.DBLookupComboBox2CloseUp(Sender: TObject);

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('Select Student.Famailiya,Student.Imya,Predmet.Nazvanie,AVG(Ocenka.Ocenka)AS itog');

ADOQuery1.SQL.Add(' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON Ocenka.id_predmeta = Predmet.id_predmeta)');

ADOQuery1.SQL.Add(' ON Student.id_student = Ocenka.id_student');

ADOQuery1.SQL.Add('WHERE Student.Id_gruppi ='+IntToStr(DBLookupComboBox1.KeyValue)+ ' AND Predmet.Nazvanie = '+#39+DBLookupComboBox2.Text+#39 );

ADOQuery1.SQL.Add(' Group by Student.Famailiya,Student.Imya,Predmet.Nazvanie');

ADOQuery1.Open;

end;

procedure TForm10.FormShow(Sender: TObject);

begin

DBLookupComboBox1.KeyValue:=1;

DBLookupComboBox2.KeyValue:=1;

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('Select Student.Famailiya,Student.Imya,Predmet.Nazvanie,AVG(Ocenka.Ocenka)AS itog');

ADOQuery1.SQL.Add(' FROM Student LEFT JOIN (Predmet FULL JOIN Ocenka ON Ocenka.id_predmeta = Predmet.id_predmeta)');

ADOQuery1.SQL.Add(' ON Student.id_student = Ocenka.id_student');

ADOQuery1.SQL.Add('WHERE Student.Id_gruppi ='+IntToStr(DBLookupComboBox1.KeyValue)+ ' AND Predmet.Nazvanie = '+#39+DBLookupComboBox2.Text+#39 );

ADOQuery1.SQL.Add(' Group by Student.Famailiya,Student.Imya,Predmet.Nazvanie');

ADOQuery1.Open;

end;

procedure TForm10.Button1Click(Sender: TObject);

begin

frxReport2.Variables['pred']:=QuotedStr(DBLookupComboBox1.Text);

frxReport2.PrepareReport;

frxReport2.ShowPreparedReport;

end;

procedure TForm10.Button2Click(Sender: TObject);

var

p,ch,tr,dva,vsego:integer;

ot,xo,ud,pl:real;

begin

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('Select AVG (Ocenka),id_student');

ADOQuery2.SQL.Add('From Ocenka');

ADOQuery2.SQL.Add(' WHERE ((id_predmeta ='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND :ll))');

ADOQuery2.SQL.Add(' GROUP BY id_student');

ADOQuery2.SQL.Add(' HAVING AVG (Ocenka) = 2' );

ADOQuery2.Parameters.ParamByName('ff').Value:=DateToStr( DateTimePicker1.Date);

ADOQuery2.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);

ADOQuery2.Open;

if ADOQuery2.RecordCount>0 then

dva:= ADOQuery2.RecordCount

else

dva:=0 ;

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('Select AVG (Ocenka),id_student');

ADOQuery2.SQL.Add('From Ocenka');

ADOQuery2.SQL.Add(' WHERE ((id_predmeta ='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND :ll))');

ADOQuery2.SQL.Add(' GROUP BY id_student');

ADOQuery2.SQL.Add(' HAVING AVG(Ocenka)=3 OR AVG(Ocenka)=4 OR AVG(Ocenka)=5');

ADOQuery2.Parameters.ParamByName('ff').Value:=DateToStr( DateTimePicker1.Date);

ADOQuery2.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);

ADOQuery2.Open;

if ADOQuery2.RecordCount>0 then

tr:= ADOQuery2.RecordCount

else

tr:=0 ;

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('Select AVG (Ocenka),id_student');

ADOQuery2.SQL.Add('From Ocenka');

ADOQuery2.SQL.Add(' WHERE ((id_predmeta ='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND :ll))');

ADOQuery2.SQL.Add(' GROUP BY id_student');

ADOQuery2.SQL.Add(' HAVING (AVG (Ocenka) = 4 OR AVG (Ocenka) =5)');

ADOQuery2.Parameters.ParamByName('ff').Value:=DateToStr(DateTimePicker1.Date);

ADOQuery2.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);

ADOQuery2.Open;

if ADOQuery2.RecordCount>0 then

ch:= ADOQuery2.RecordCount

else

ch:=0 ;

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('Select AVG (Ocenka),id_student');

ADOQuery2.SQL.Add('From Ocenka');

ADOQuery2.SQL.Add(' WHERE ((id_predmeta ='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND :ll))');

ADOQuery2.SQL.Add(' GROUP BY id_student');

ADOQuery2.SQL.Add('HAVING AVG (Ocenka) = 5 ');

ADOQuery2.Parameters.ParamByName('ff').Value:=DateToStr( DateTimePicker1.Date);

ADOQuery2.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);

ADOQuery2.Open;

if ADOQuery2.RecordCount>0 then

p:= ADOQuery2.RecordCount

else

p:=0 ;

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('Select AVG (Ocenka),id_student');

ADOQuery2.SQL.Add('From Ocenka');

ADOQuery2.SQL.Add(' WHERE ((id_predmeta ='+ IntToStr(DBLookupComboBox2.KeyValue)+') AND (Data BETWEEN :ff AND :ll))');

ADOQuery2.SQL.Add(' GROUP BY id_student');

ADOQuery2.Parameters.ParamByName('ff').Value:=DateToStr( DateTimePicker1.Date);

ADOQuery2.Parameters.ParamByName('ll').Value:=DateToStr(DateTimePicker2.Date);

ADOQuery2.Open;

if ADOQuery2.RecordCount>0 then

vsego:= ADOQuery2.RecordCount

else

vsego:=0;

if p>0 then

ot:=(p*100)/vsego;

if ch>0 then

xo:=(ch*100)/vsego;

if tr>0 then

ud:=(tr*100)/vsego;

if dva>0 then

pl:=(dva*100)/vsego;

frxReport1.Variables['pred']:=QuotedStr('Успеваемость студентов по предмету '+DBLookupComboBox2.Text);


Подобные документы

  • Концептуальное проектирование базы данных: разработка схемы и структуры таблиц, описание атрибутов. Реализация базы данных в среде СУБД MS SQL Server 2000. Основные принципы создания таблиц. Доступ и обработка данных с помощью утилиты Enterprise Manager.

    курсовая работа [3,8 M], добавлен 22.01.2013

  • Системный анализ предметной области. Разработка концептуальной модели базы данных. Построение схемы функциональных зависимостей. Создание таблиц базы данных в Database Desktop и псевдонима в BDE Administrator. Разработка алгоритма работы программы.

    курсовая работа [911,3 K], добавлен 20.12.2014

  • Выбор методологии проектирования и системы управления базами данных. Описание предметной области и проектирование физической структуры базы данных. Реализация проекта в MS SQL Server 2008. Построение инфологической модели. Ограничения целостности связи.

    курсовая работа [679,2 K], добавлен 22.01.2013

  • Разработка базы данных с целью автоматизации процессов составления, ведения и распространения информации об расписании занятий в спортивном комплексе "Маяк". Анализ предметной области. Разработка алгоритмов работы программы и приложения пользователя.

    дипломная работа [1,0 M], добавлен 12.07.2015

  • Информационно-логическая модель предметной области по нотациям Ричарда Баркера. Даталогическая модель реляционной базы данных в виде диаграммы схемы отношений. Приложение интерфейса для базы данных на языке программирования С# в среде Visual Studio.

    курсовая работа [3,6 M], добавлен 23.12.2014

  • Освоение сервисной системы управления базами данных Microsoft SQL. Разработка базы данных "Служба АТС" в среде Microsoft SQL Server Management Studio и создание запросов на языке SQL. Апробация инфологической модели "сущность - связь" базы данных.

    курсовая работа [2,9 M], добавлен 29.06.2015

  • Описание первичных и результатных документов, типа связи информационных объектов. Построение информационно-логической модели базы данных и её реализация в СУБД Access (создание таблиц, запросов, форм, отчётов). Разработка интерфейса пользователя.

    курсовая работа [2,1 M], добавлен 14.11.2013

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

    курсовая работа [2,1 M], добавлен 15.06.2014

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

    курсовая работа [190,8 K], добавлен 12.05.2009

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

    курсовая работа [2,0 M], добавлен 14.12.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.