Базы данных
Словесное описание предметной области. Построение схемы функциональных зависимостей. Реализация базы данных средствами утилиты 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Описание предметной области, определение функциональных требований к системе и построение диаграммы потока данных. Построение модели "сущность-связь", описание сущностей и атрибутов модели. Построение реляционной базы данных и описание ее таблицы.
курсовая работа [624,5 K], добавлен 30.05.2019Описание первичных и результатных документов, типа связи информационных объектов. Построение информационно-логической модели базы данных и её реализация в СУБД Access (создание таблиц, запросов, форм, отчётов). Разработка интерфейса пользователя.
курсовая работа [2,1 M], добавлен 14.11.2013Разработка базы данных для компании, занимающейся авиагрузоперевозками, снабженной средствами идентификации пользователей. Описание ее предметной области и функций. Разработка интерфейса программы. Построение концептуальной и реляционной модели БД.
курсовая работа [2,1 M], добавлен 15.06.2014Базы данных, содержащие информацию о графических редакторах. Предметная область, словарь понятий и терминов. Построение функциональных зависимостей. Синтез схемы базы данных на основании функциональных зависимостей. Построение неизбыточного покрытия.
курсовая работа [190,8 K], добавлен 12.05.2009