Реферат Информационная система Преподаватели
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
ПЕРМСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ИСКУССТВА И КУЛЬТУРЫ
ФАКУЛЬТЕТ ДОКУМЕНТАЛЬНО-ИНФОРМАЦИОННЫХ КОММУНИКАЦИЙ
КАФЕДРА ИНФОРМАТИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
Информационная система
«Преподаватели»
Выполнил:
студент 3 курса
группы ИР-33
Карпов К.А.
Руководитель:
преподаватель
Нечаева И.Ю.
Пермь 2009
Оглавление
Введение. 3
1 Анализ предметной области.. 4
2 Проектирование базы данных.. 6
2.1 Инфологическая модель (Построение модели «сущность – связь») 6
2.2 Логическая модель.. 9
2.3 Нормализация.. 11
2.4 Физическая модель.. 15
3 Создание приложения.. 20
Заключение. 26
Приложение 1 Создание таблиц БД.. 27
Приложение 2 Листинг программы (Главной формы) 30
Введение
Целью курсовой работы ИС «Преподаватели» является разработка реляционной базы данных и приложения для работы с ней.
Для достижения данной цели были поставлены следующие задачи для ИС «Преподаватели»:
· хранение данных о преподавателях;
· автоматизация ввода информации;
· автоматизация получения данных о преподавателе;
Бывают случаи, когда эффективность работы сотрудников отдела кадров зависит от вовремя найденных сведений о конкретном преподавателе. Для обеспечения более оперативного и конкретизированного поиска необходимых сведений о преподавателе и была разработана данная ИС.
ИС «Преподаватели» предоставляет возможность хранения информации о преподавателе в базе данных.
ИС «Преподаватели» разработана специально для сотрудников отдела кадров ВУЗа.
1 Анализ предметной области
Анализ предметной области – один из самых сложных и ответственных этапов. Для осуществления данного этапа можно использовать ряд методов. Можно проводить опрос отдельных сотрудников и специалистов в тех областях, для которых создается ИС, наблюдать за деятельностью предприятия или фирмы в целом, изучать документы, которые используются для сбора и представления информации, проводить анкетирование, использовать опыт проектирования подобных систем и т.д.
В процессе исследования предметной области были опрошены сотрудники отдела кадров ПГИИК. В результате опроса, была выявлена информация, которая должна храниться в информационной системе (далее ИС).
Информационная система должна хранить информацию о следующих объектах:
· Объект «Преподаватель» - будет содержать данные о преподавателях. Это объект должен иметь следующие характеристики: ФИО, дата рождения, адрес, телефон, паспортные данные, ученое звание, ученую степень, стаж работы, должность преподавателя, год начала работы в ПГИИК.
· Объект «Предмет» - этот объект будет содержать данные о предметах. Этот объект должен иметь следующие характеристики: название предмета, группа.
· Объект «Факультет» - будет содержать данные о факультете, на котором работает преподаватель. Это объект должен иметь следующие характеристики: название факультета, название кафедр и названия специальностей.
Объект «Преподаватель» связан с объектом «Предмет», т.к. преподаватели читают курс лекций, проводят лабораторные и семинарские занятия по предметам для определенных групп.
Объект «Преподаватель» связан с объектом «Факультет», т.к. каждый преподаватель закреплен за определенным факультетом (см. Рис.1).
Рис. 1
2 Проектирование базы данных
На этапе проектирования базы данных была построена инфологическая модель. В ходе ее построения была проведена нормализация, в результате которой была получена окончательная логическая модель.
2.1 Инфологическая модель (Построение модели «сущность – связь»)
Для построения инфологической модели используется модель «сущность - связь», или
ER-модель, которая должна определить объекты и взаимосвязи между ними. ER-диаграмма представляется в графическом виде с выделенными сущностями и их характеристиками. Между сущностями устанавливаются связи. Тип связи указывается индексами «1» или «М».
В ходе изучения предметной области были выделены следующие объекты: «Преподаватель», «Предмет», «Факультет» .
В результате изучения объект «Преподаватель» преобразовался в сущность «Преподаватель» (стержневая), которая должна характеризоваться следующими свойствами: ФИО, дата рождения, адрес, телефон, паспортные данные, ученое звание, ученую степень, стаж работы, год начала работы в ПГИИК.
Объект «Предмет» преобразовался в сущность «Предмет» (стержневая). Эта сущность должна характеризоваться следующими свойствами: название предмета, название группы.
Объект «Факультет» преобразовался в сущность «Факультет» (стержневая). Эта сущность должна характеризоваться следующими свойствами: название факультета, название кафедр и названия специальностей (см. Рис. 2).
Связи между сущностями в ER-модели наследуются те же, что и связи между объектами.
|
Рис. 2 Модель «Сущность – связь»
2.2 Логическая модель
Следующий этап проектирования – построение логической модели. Задачей этого этапа состоит в преобразование ER-диаграммы в реляционную схему. Реляционный подход, в основе которого лежит принцип разделения данных и связей обеспечивает независимость данных и более простые способы хранения и обработки данных. Первые шаги преобразования состоят в превращении каждой сущности в отношение (таблицу). Поэтому сущности «Предмет», «Факультет» и «Преподаватель» в логической модели становятся отношениями, а каждое свойство в этих отношениях становятся атрибутом – столбцом соответствующей таблицы.
Для того чтобы реализовать связь М:М, нужно создать отдельные отношения, которые должны содержать уникальные идентификаторы отношений – участников связи.
Таким отношением в данном случае будет следующее дополнительное отношение:
Предмет_Преподаватель – это отношение является ассоциативным для однозначной идентификации двух других отношений: «Преподаватели» и «Предмет»;
Рис. 3 Логическая модель
2.3 Нормализация
Отношение «Предмет» находится в 1 нормальной форме, т.к. нет атомарных значений и повторяющихся атрибутов. Первичный ключ однозначно определяет каждый картеж отношения. Отношение «Предмет» находится во 2 нормальной форме, т.к. его атрибуты находятся в 1 нормальной форме и имеют простой первичный ключ. Отношение «Предмет» не соответствует 3 нормальной форме, т.к. есть функциональная зависимость между не ключевыми атрибутами, поэтому для того чтобы устранить эту функциональную зависимость, нужно атрибут название группы вынести в отдельное характеристическое отношение «Группа» с атрибутом – название группы. Так как отношения «Группа» и «Предмет» реализуются через связь М:М, нужно создать отдельное отношение, которое должно содержать уникальные идентификаторы отношений. Таким образом, мы добавляем составной первичный ключ к уже имеющейся ассоциативной сущности Предметы_Преподаватели. В результате этого появляется отношение Группы_Предметы_Преподаватели, которое является ассоциативным для однозначной идентификации трех других отношений: «Преподаватели», «Группа» и «Предмет». Соответственно в таблице «Предмет» останется следующий атрибут: Название предмета. Также таблица «Предмет» соответствует 3 усиленной нормальной форме (Бойса – Кодда), т.к. функциональная зависимость между его атрибутами сводится к полной функциональной зависимости от потенциального ключа.
Отношение «Преподаватели» находится в 1 нормальной форме, т.к. нет атомарных значений и повторяющихся атрибутов. Первичный ключ однозначно определяет каждый картеж отношения. Отношение «Преподаватели» находится во 2 нормальной форме, т.к. атрибуты этого отношения находятся в 1 нормальной форме и имеют простой первичный ключ. Отношение «Преподаватели» не соответствует 3 нормальной форме, т.к. есть функциональная зависимость между не ключевыми атрибутами, поэтому для того чтобы устранить эту функциональную зависимость, нужно атрибуты: Ученая степень, Ученое звание, Должность и Статус вынести в отдельные характеристические отношения «Статус» с атрибутом – статус, «Ученая степень» с атрибутом – ученая степень, «Должность» с атрибутом – должность и «Ученое звание» с атрибутом – ученое звание. Соответственно в таблице «Преподаватели» останутся следующие атрибуты: Фамилия, Имя, Отчество, Дата рождения, Паспортные данные, Год начала работы и Стаж работы. Таблица «Преподаватели» соответствует 3 усиленной нормальной форме (Бойса – Кодда), т.к. функциональная зависимость между его атрибутами сводится к полной функциональной зависимости от потенциального ключа.
Отношение «Факультет» находится в 1 нормальной форме, т.к. нет атомарных значений и повторяющихся атрибутов. Первичный ключ однозначно определяет каждый картеж отношения. Отношение «Факультет» находится во 2 нормальной форме, т.к. атрибуты этого отношения находятся в 1 нормальной форме и имеют простой первичный ключ. Отношение «Факультет» не соответствует 3 нормальной форме, т.к. есть функциональная зависимость между не ключевыми атрибутами, поэтому для того чтобы устранить эту функциональную зависимость, нужно атрибуты: Название кафедры и Название специальности вынести в отдельные характеристические отношения «Кафедра» с атрибутом – название кафедры и «Специальность» с атрибутом – Название специальности. Соответственно в таблице «Факультет» останется следующий атрибут: Название факультета. Таблица «Факультет» соответствует 3 усиленной нормальной форме (Бойса – Кодда), т.к. функциональная зависимость между его атрибутами сводится к полной функциональной зависимости от потенциального ключа.
Отношение «Группы_Предметы_Преподаватели» находится в 1 нормальной форме, т.к. они атомарные и нет повторяющихся атрибутов. Эти отношения находятся во второй нормальной форме, т.к. их атрибуты зависят от составного ключа, а не от его части. Отношение «Группы_Предметы_Преподаватели» соответствует 3 нормальной форме, т.к. нет функциональной зависимости между не ключевыми атрибутами. Также таблица «Группы_Предметы_Преподаватели» соответствует 3 усиленной нормальной форме (Бойса – Кодда), т.к. функциональная зависимость между его атрибутами сводится к полной функциональной зависимости от потенциального ключа (см. рис. 4).
Рис.4 Нормализованная логическая модель
2.4 Физическая модель
Следующей не маловажной задачей является выбор СУБД. Модель предметной области должна быть представлена в терминах модели данных концептуального уровня выбранной СУБД. Физическая модель будет реализована с помощью СУБД InterBase .
Преимущества СУБД InterBase:
· Бесплатно распространяемая СУБД;
· Поддерживает реляционную базу данных;
· Удовлетворяет требованиям к степени защищенности и безопасности;
· Обеспечивает быстродействие и ошибкоустойчивость;
· Использование транзакций для повышения быстродействия;
· Поддержка всех операторов и конструкций, которые используются в SQL;
· Поддержка ссылочной целостности БД.
В физической модели БД показаны названия всех отношений, связи между ними, идентификаторы атрибутов, первичные ключи, а также типы данных для каждого поля. Также определены длины полей, где это возможно. Весь процесс описания физической модели должен быть обязательно на латинице.
В таблице «PREPODAVATELI» содержаться следующие атрибуты и типы данных:
· Атрибут PREP – является первичным ключом, имеет целочисленный тип данных;
· Атрибут F, N, O, DATA, PASSPORT_SERIA, PASSPORT_NAMBER, OTDEL, GOD_NACHALA, STAZH, TELEFONE, ADRES – имеют тип varchar с максимальной длинной до 80 символов;
· Атрибут KAF, STEP, ZV, DOLZHN и STAT имеют целочисленный тип данных и являются внешними ключами к таблицам «KAFEDRY» и «Y_STEPEN», «Y_ZVANIE», «DOLZHNOSTI» и «STATUSY» соответственно.
В таблице «PREDMETY» содержаться следующие атрибуты и типы данных:
· Атрибут PR - является первичным ключом, имеет целочисленный тип данных;
· Атрибут PREDMET – имеет тип varchar с максимальной длинной 50 символов;
В таблице «GRUPPY» содержаться следующие атрибуты и типы данных:
· GR -первичный ключ, имеет целочисленный тип данных;
· GRUPPA
– строковое поле с максимально возможным количеством символов 10.
· SP - внешний ключ целочисленного типа, который ссылается на первичный ключ в таблице «SPECIALNOSTI».
В таблице «SPECIALNOSTI» содержаться следующие атрибуты и типы данных:
· SP - первичный ключ, имеет целочисленный тип данных;
· SPECIALNOST строковое поле с максимально возможным количеством символов 50.
· FC - внешний ключ целочисленного типа, который ссылается на первичный ключ в таблице «FACULTETY».
В таблице «FACULTETY» содержаться следующие атрибуты и типы данных:
· FC - является первичным ключом, имеет целочисленный тип данных;
· FACULTET – строковое поле. Используется тип данных varchar с максимально возможным количеством символов 30.
В таблице «KAFEDRY» содержаться следующие атрибуты и типы данных:
· АтрибутыKAF - первичный составной ключ с целочисленным типом данных;
· Атрибут FC - имеет целочисленный тип данных;
· Атрибут KAFEDRA имеет тип данных varchar с длиной поля не более 50 символов.
В таблице «Y
_
ZVANIE» содержаться следующие атрибуты и типы данных:
· АтрибутZV – первичный ключ, имеет целочисленный тип данных;
· Атрибут ZVANIE будет иметь тип данных varchar с длинной строки 40 символов;
В таблице «DOLZHNOSTI» содержаться следующие атрибуты и типы данных:
· АтрибутDOLZH – первичный ключ, имеет целочисленный тип данных;
· Атрибут DOLZHNOST будет иметь тип данных varchar с длинной строки 20 символов;
В таблице «Y
_
STEPEN» содержаться следующие атрибуты и типы данных:
· АтрибутSTEP – первичный ключ, имеет целочисленный тип данных;
· Атрибут STEPEN будет иметь тип данных varchar с длинной строки 40 символов;
В таблице «STATUSY» содержаться следующие атрибуты и типы данных:
· АтрибутST – первичный ключ, имеет целочисленный тип данных;
· Атрибут STATUS будет иметь тип данных varchar с длинной строки 20 символов;
Ассоциативная таблица «GRUPPY
_
PREDMETY
_
PREPODAVATELI
» имеет первичный составной ключ GR, PR, PREP для однозначной идентификации картежей в таблицах «GRYPPY»,«PREPODAVATELI» и «PREDMETY
».
Для целочисленных данных был использован тип integer. Для строковых атрибутов был использован тип данных varchar с ограничением по количеству символов. Это ограничение вводится для того, чтобы на поле с небольшим количеством знаков не отводилось много памяти, т.е. мы вводим ограничение на максимальное количество символов для одного поля.
Рис. 5 Физическая модель данных
3 Создание приложения
Для создания приложения использовалась интегрированная среда Delphi 6.0.
Приложение включает главную форму, восемь справочников. Справочники содержат информацию о:
· группах
· ученой степени;
· ученом звании;
· статусе преподавателя;
· предметах, которые они читают;
· факультете;
· специальности;
· кафедре;
Модальные формы Ученое звание, Ученая степень, Должность, Факультет и Статус сотрудников содержат компонент DBGrid для отображения соответствующих таблиц, навигатор и по одной кнопке на каждой из форм (закрытие модальной формы). Формы Кафедра, Группа и Cпециальность содержат DBGrid (для отображения соответствующей таблицы) и кнопки (добавить, сохранить, изменить и закрыть форму). При нажатии на кнопку добавить на каждой из этих форм, появляется еще одно модальное окно, в котором заполняются пустые поля или выбираются из предложенного списка. Также есть кнопки для очищения полей и кнопки выхода на предыдущее модальное окно.
Форма Предмет содержит DBGrid (для отображения соответствующей таблицы), два DBLookupComboBox (для выбора преподавателей и групп) и кнопки для манипулирования данными (добавить предмет, сохранить предмет, изменить предмет, закрыть форму, добавить группу и предмет к преподавателю, обновить). При нажатии на кнопку добавить, появляется еще одно модальное окно, в котором заполняются пустые поля или выбираются из предложенного списка. Также есть кнопка сохранения, кнопка для очищения полей и кнопка выхода на предыдущее модальное окно.
Для хранения не визуальных компонентов используется DataModule (DM), куда были помещены четыре IBTable, которые хранят таблицы: Y_Stepen (T_Stepen: IBTable), Y_Zvanie (T_Zvanie: IBTable), Statusy (T_Status: IBTable), Facultet (T_Facultet: IBTable).
На главной форме содержится два DBGrid для отображения информации о преподавателе, предмете и группы, у которых он преподает:
1) DBGrid отображает фамилию, имя, отчество, дату рождения, паспортные данные, адрес, телефон, год начала работы в данном учебном заведении, стаж работы, ученую степень, ученое звание и статус преподавателя.
На DataModule положили Qprepod:IBQuery, который связали с DSPrepod:DataSource. В свойстве Qprepod SQL должен формироваться запрос:
select * from PREPODAVATELI pr, Y_STEPEN s, Y_ZVANIE z, STATUSY st
where pr.step=s.step and pr.zv=z.zv and prepodavateli."stat"=st.st;
2) Второй DBGrid отображает предметы и группы, у которых этот преподаватель читает курс лекций, практических и семинарских занятий. На DataModule положили QPredmet:IBQuery, который связали с DSQPredmet:DataSource. В свойстве QPredmet SQL должен формироваться запрос:
select distinct * from predmety;
Еще имеется на форме сортировка, которая позволяет отображать преподавателей по кафедрам.
Для этого мы используем компоненты RBall:RadioButton и DBLCB_Kaf_Prepod:DBLookupComboBox:
В отлик на событие OnClick компонента RBall:RadioButton формируется SQL запрос
dm.Qprepod.SQL.Text:='select * from prepodavateli order by f';
Для отображения преподавателей по кафедрам компонент DBLCB_Kaf_Prepod:DBLookupComboBox связываем через ListSource c соответствующей таблицей, указывая при этом KeyField и ListField. Также в отлик на событие OnClick компонента DBLookupComboBox формируется SQL запрос:
dm.Qprepod.SQL.Text:='select * from prepodavateli, kafedry where prepodavateli.kaf=kafedry.kaf and kaf=:par2 order by f';
dm.Qprepod.ParamByName('par2').AsInteger:=DBLCB_kaf_prepod.KeyValue;
Также есть кнопки для манипулирования с данными: добавить, изменить, удалить. Соответственно с их помощью можно добавить преподавателя, изменить его анкетные данные и удалить его из базы данных. При нажатии на кнопку добавить появляется модальное окно, в котором нужно заполнить пустые поля: ФИО, паспортные данные, адрес, телефон, дату рождения, год начала работы в ВУЗ, стаж, выбрать ученую степень, звание и статус сотрудника.
Для выбора информации о статусе, степени и звании сотрудника использовали компонент DBLookupComboBox:DBlookupComboBox.
Чтобы DBLookupComboBox отображали информацию их надо связать с соответствующими таблицами через свойство ListSource, указав при этом свойства ListField и KeyField.
Для сохранения всех данных нужно нажать на кнопку Сохранить:
procedure TFPrepod.BT_SaveClick(Sender: TObject);
var i : integer;
begin
Происходит проверка на непустые поля
if (Length(ED_F.Text)>0) and (Length(ED_I.Text)>0) and (Length(ED_O.Text)>0)
and (Length(ME_Data.Text)>0) and (Length(ED_Adress.Text)>0) and
(Length(ED_Tel.Text)>0) and (Length(ED_Hachala.Text)>0) and
(Length(ED_stazh.Text)>0) and (Length(ED_Seria.Text)>0) then
begin
if flag=0 then
Далее происходит вставка новой записи в таблицу преподаватели. Для этого формируется SQL запрос:
dm.Qprepod.SQL.Text:='insert into prepodavateli (F, I, O, data, prepodavateli."Passport_Seria", god_nachala, stazh, prepodavateli."Adres", prepodavateli."telephone", step, zv, prepodavateli."stat", prepodavateli."Otdel", prepodavateli."Passport_namber")'+'values (:par1, :par2, :par3, :par4, :par5, :par6, :par7, :par8, :par9, :par10, :par11, :par12, :par13, :par14)'
Определение параметров в запросе
dm.Qprepod.ParamByName('par1').AsString:=ED_F.Text;
dm.Qprepod.ParamByName('par2').AsString:=ED_I.Text;
dm.Qprepod.ParamByName('par3').AsString:=ED_O.Text;
dm.Qprepod.ParamByName('par4').AsString:=ME_Data.Text;
dm.Qprepod.ParamByName('par5').AsString:=ED_Seria.Text;
dm.Qprepod.ParamByName('par6').AsString:=ED_Hachala.Text;
dm.Qprepod.ParamByName('par7').AsString:=ED_Stazh.Text;
dm.Qprepod.ParamByName('par8').AsString:=ED_Adress.Text;
dm.Qprepod.ParamByName('par9').AsString:=ED_Tel.Text;
dm.Qprepod.ParamByName('par11').AsInteger:=DBLCB_Zvanie.KeyValue;
dm.Qprepod.ParamByName('par12').AsInteger:=DBLCB_Status.KeyValue;
dm.Qprepod.ParamByName('par10').AsInteger:=DBLCB_Stepen.KeyValue;
dm.Qprepod.ParamByName('par13').AsString:=ED_Otdel.Text;
dm.Qprepod.ParamByName('par14').AsString:=ED_Nomer.Text;
end;
end;
Для того чтобы очистить все поля, нужно нажать на кнопку Очистить:
Соответственно очищаются выбранные нами поля
FPrepod.ED_f.Clear;
FPrepod.ED_I.Clear;
FPrepod.ED_O.Clear;
FPrepod.ME_Data.Clear;
FPrepod.ED_Seria.Clear;
FPrepod.ED_Hachala.Clear;
FPrepod.ED_Stazh.Clear;
FPrepod.ED_Adress.Clear;
FPrepod.ED_Tel.Clear;
FPrepod.ED_Otdel.Clear;
FPrepod.ED_Nomer.Clear;
Для выхода на главное окно без сохранения данных нужно нажать на кнопку Закрыть:
…
Fprepod.close;
…
Аналогично манипулирование с данными происходит и в других таблицах.
Заключение
Результатом моей работы стала информационная система «Преподаватели», с помощью которой можно просматривать информацию о преподавателях, изменять существующую информацию, удалять ее и добавлять новую информацию.
Разработанное приложение очень удобно в использовании. ИС «Преподаватели» может помочь в работе сотрудникам отдела кадров, облегчить процесс нахождения нужной им информации о преподавателе и преподавательском составе.
Приложение 1 Создание таблиц БД
CREATE TABLE "Dolzhnosti"
"dolzh" INTEGER NOT NULL,
"dolzhnost" VARCHAR(20) CHARACTER SET WIN1251,
CONSTRAINT "PK_Dolzhnosti" PRIMARY KEY ("dolzh")
);
CREATE TABLE "FACULTETY"
(
"FC" INTEGER NOT NULL,
"FACULTET" VARCHAR(30) CHARACTER SET WIN1251,
PRIMARY KEY ("FC")
);
CREATE TABLE "GRUPPY"
(
"GR" INTEGER NOT NULL,
"GRUPPA" VARCHAR(10) CHARACTER SET WIN1251,
"SP" INTEGER,
PRIMARY KEY ("GR")
);
CREATE TABLE "GRUPPY_PREDMETY_PREPODAVATELI"
(
"GR" INTEGER NOT NULL,
"PR" INTEGER NOT NULL,
"PREP" INTEGER NOT NULL
);
CREATE TABLE "KAFEDRY"
(
"KAF" INTEGER NOT NULL,
"KAFEDRA" VARCHAR(50) CHARACTER SET WIN1251,
"FC" INTEGER,
PRIMARY KEY ("KAF")
);
CREATE TABLE "PREDMETY"
(
"PR" INTEGER NOT NULL,
"PREDMET" VARCHAR(50) CHARACTER SET WIN1251,
PRIMARY KEY ("PR")
);
CREATE TABLE "PREPODAVATELI"
(
"PREP" INTEGER NOT NULL,
"F" VARCHAR(20) CHARACTER SET WIN1251,
"I" VARCHAR(20) CHARACTER SET WIN1251,
"O" VARCHAR(20) CHARACTER SET WIN1251,
"DATA" VARCHAR(20) CHARACTER SET WIN1251,
"Passport_Seria" VARCHAR(4) CHARACTER SET WIN1251,
"GOD_NACHALA" VARCHAR(10),
"STAZH" INTEGER,
"KAF" INTEGER,
"STEP" INTEGER,
"ZV" INTEGER,
"telephone" VARCHAR(50) CHARACTER SET WIN1251,
"Adres" VARCHAR(80) CHARACTER SET WIN1251,
"stat" INTEGER,
"Otdel" VARCHAR(50) CHARACTER SET WIN1251,
"Passport_namber" VARCHAR(10) CHARACTER SET WIN1251,
"dolzhn" INTEGER,
PRIMARY KEY ("PREP")
);
CREATE TABLE "SPECIALNOSTI"
(
"SP" INTEGER NOT NULL,
"SPECIALNOST" VARCHAR(50) CHARACTER SET WIN1251,
"FC" INTEGER,
PRIMARY KEY ("SP")
);
CREATE TABLE "STATUSY"
(
"ST" INTEGER NOT NULL,
"STATUS" VARCHAR(20) CHARACTER SET WIN1251,
PRIMARY KEY ("ST")
);
CREATE TABLE "Y_STEPEN"
(
"STEP" INTEGER NOT NULL,
"STEPEN" VARCHAR(40) CHARACTER SET WIN1251,
PRIMARY KEY ("STEP")
);
CREATE TABLE "Y_ZVANIE"
(
"ZV" INTEGER NOT NULL,
"ZVANIE" VARCHAR(40) CHARACTER SET WIN1251,
PRIMARY KEY ("ZV")
);
ALTER TABLE "GRUPPY" ADD FOREIGN KEY ("SP") REFERENCES SPECIALNOSTI ("SP") ON UPDATE CASCADE;
ALTER TABLE "GRUPPY_PREDMETY_PREPODAVATELI" ADD FOREIGN KEY ("GR") REFERENCES GRUPPY ("GR") ON DELETE CASCADE;
ALTER TABLE "GRUPPY_PREDMETY_PREPODAVATELI" ADD FOREIGN KEY ("PR") REFERENCES PREDMETY ("PR") ON DELETE CASCADE;
ALTER TABLE "GRUPPY_PREDMETY_PREPODAVATELI" ADD FOREIGN KEY ("PREP") REFERENCES PREPODAVATELI ("PREP") ON DELETE CASCADE;
ALTER TABLE "KAFEDRY" ADD FOREIGN KEY ("FC") REFERENCES FACULTETY ("FC") ON DELETE CASCADE;
ALTER TABLE "PREPODAVATELI" ADD CONSTRAINT "FK_PREPODAVATELI" FOREIGN KEY ("stat") REFERENCES STATUSY ("ST") ON DELETE CASCADE;
ALTER TABLE "PREPODAVATELI" ADD CONSTRAINT "FK_dolzh" FOREIGN KEY ("dolzhn") REFERENCES Dolzhnosti ("dolzh");
ALTER TABLE "PREPODAVATELI" ADD FOREIGN KEY ("KAF") REFERENCES KAFEDRY ("KAF") ON DELETE CASCADE;
ALTER TABLE "PREPODAVATELI" ADD FOREIGN KEY ("STEP") REFERENCES Y_STEPEN ("STEP") ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE "PREPODAVATELI" ADD FOREIGN KEY ("ZV") REFERENCES Y_ZVANIE ("ZV") ON DELETE CASCADE;
ALTER TABLE "SPECIALNOSTI" ADD FOREIGN KEY ("FC") REFERENCES FACULTETY ("FC") ON UPDATE CASCADE ON DELETE CASCADE;
CREATE GENERATOR "GEN_AD";
CREATE GENERATOR "GEN_FC";
CREATE GENERATOR "GEN_GR";
CREATE GENERATOR "GEN_KAF";
CREATE GENERATOR "GEN_PR";
CREATE GENERATOR "GEN_PREP";
CREATE GENERATOR "GEN_SP";
CREATE GENERATOR "GEN_ST";
CREATE GENERATOR "GEN_STEP";
CREATE GENERATOR "GEN_TEL";
CREATE GENERATOR "GEN_ZV";
SET TERM ^ ;
CREATE TRIGGER "TRIG_FC" FOR "FACULTETY"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.FC = GEN_ID(GEN_FC, 1);
END
^
CREATE TRIGGER "TRIG_GR" FOR "GRUPPY"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.GR = GEN_ID(GEN_GR, 1);
END
^
CREATE TRIGGER "TRIG_KAF" FOR "KAFEDRY"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.KAF = GEN_ID(GEN_KAF, 1);
END
^
CREATE TRIGGER "TRIG_PR" FOR "PREDMETY"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.PR = GEN_ID(GEN_PR, 1);
END
^
CREATE TRIGGER "TRIG_PREP" FOR "PREPODAVATELI"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.PREP = GEN_ID(GEN_PREP, 1);
END
^
CREATE TRIGGER "TRIG_SP" FOR "SPECIALNOSTI"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.SP = GEN_ID(GEN_SP, 1);
END
^
CREATE TRIGGER "TRIG_ST" FOR "STATUSY"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ST = GEN_ID(GEN_ST, 1);
END
^
CREATE TRIGGER "TRIG_STEP" FOR "Y_STEPEN"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.STEP = GEN_ID(GEN_STEP, 1);
END
^
CREATE TRIGGER "TRIG_ZV" FOR "Y_ZVANIE"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ZV = GEN_ID(GEN_ZV, 1);
END
^
COMMIT WORK ^
SET TERM ;^
Приложение 2 Листинг программы (Главной формы)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Grids, DBGrids, StdCtrls, ComCtrls, Buttons, DBCtrls;
type
TMainForm = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
GroupBox1: TGroupBox;
BT_Add: TButton;
BT_Edit: TButton;
BT_Del: TButton;
GroupBox2: TGroupBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N11: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
GroupBox3: TGroupBox;
DBGrid2: TDBGrid;
DBGrid1: TDBGrid;
GroupBox4: TGroupBox;
DBLCB_kaf_prepod: TDBLookupComboBox;
Label1: TLabel;
RBall: TRadioButton;
procedure N2Click(Sender: TObject);
procedure BT_AddClick(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure BT_EditClick(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure BT_DelClick(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure N10Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure DBLCB_kaf_prepodClick(Sender: TObject);
procedure RBallClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit9, Unit8, Unit10, Unit12,
Unit13, Unit14, Unit11, Unit15, Unit16, Unit17, IBQuery, DB,
IBCustomDataSet, Unit18;
{$R *.dfm}
procedure activ;
begin
dm.Qprepod.Open;
dm.Q_specialnost.Open;
dm.Q_tmp.Open;
dm.T_stepen.Open;
dm.T_facultet.Open;
dm.Q_kafedra.Open;
end;
procedure TMainForm.N2Click(Sender: TObject);
begin
MainForm.Close;
end;
procedure TMainForm.BT_AddClick(Sender: TObject);
begin
FPrepod.ED_f.Clear;
FPrepod.ED_I.Clear;
FPrepod.ED_O.Clear;
FPrepod.ME_Data.Clear;
FPrepod.ED_Seria.Clear;
FPrepod.ED_Hachala.Clear;
FPrepod.ED_Stazh.Clear;
FPrepod.ED_Adress.Clear;
FPrepod.ED_Tel.Clear;
FPrepod.ED_Otdel.Clear;
FPrepod.ED_Nomer.Clear;
dm.T_stepen.Open;
dm.T_zvanie.Open;
dm.T_facultet.Open;
dm.t_status.Open;
dm.T_Dolshnost.Open;
FPrepod.flag:=0;
FPrepod.Show;
FPrepod.ED_f.SetFocus;
end;
procedure TMainForm.N5Click(Sender: TObject);
begin
FY_Stepen.showmodal;
end;
procedure TMainForm.N4Click(Sender: TObject);
begin
FY_Zvanie.showmodal;
end;
procedure TMainForm.N8Click(Sender: TObject);
begin
FSpecialnost.ShowModal;
end;
procedure TMainForm.N7Click(Sender: TObject);
begin
dm.QPredmet.SQL.Text:='select * from predmety';
dm.QPredmet.Open;
FPredmet.Show;
end;
procedure TMainForm.N9Click(Sender: TObject);
begin
FCafedra_add.ShowModal;
end;
procedure TMainForm.N11Click(Sender: TObject);
begin
FFacultet.ShowModal;
end;
procedure TMainForm.BT_EditClick(Sender: TObject);
begin
dm.Qprepod.Open;
dm.Q_specialnost.Open;
dm.T_stepen.Open;
dm.T_facultet.Open;
dm.Q_kafedra.Open;
dm.QGruppa.Open;
dm.Qprepod.Open;
dm.T_zvanie.Open;
dm.t_status.Open;
dm.T_Dolshnost.Open;
FPrepod.flag:=1;
FPrepod.Show;
FPrepod.ED_f.SetFocus;
FPrepod.ED_f.Text:=dm.Qprepod.FieldByName('f').AsString;
FPrepod.ED_I.Text:=dm.Qprepod.FieldByName('i').AsString;
FPrepod.ED_O.Text:=dm.Qprepod.FieldByName('o').AsString;
FPrepod.ME_Data.Text:=dm.Qprepod.FieldByName('data').AsString;
FPrepod.ED_Seria.Text:=dm.Qprepod.FieldByName('Passport_Seria').AsString;
FPrepod.ED_Nomer.Text:=dm.Qprepod.FieldByName('Passport_namber').AsString;
FPrepod.ED_Otdel.Text:=dm.Qprepod.FieldByName('Otdel').AsString;
FPrepod.ED_Hachala.Text:=dm.Qprepod.FieldByName('god_nachala').AsString;
FPrepod.ED_Stazh.Text:=dm.Qprepod.FieldByName('stazh').AsString;
FPrepod.ED_Adress.Text:=dm.Qprepod.FieldByName('Adres').AsString;
FPrepod.ED_Tel.Text:=dm.Qprepod.FieldByName('telephone').AsString;
end;
procedure TMainForm.Button4Click(Sender: TObject);
begin
FSpecialnost_add.flag:=0;
FSpecialnost_add.Show;
FSpecialnost_add.Edit1.SetFocus;
end;
procedure TMainForm.Button5Click(Sender: TObject);
begin
FSpecialnost_add.flag:=1;
FSpecialnost_add.Edit1.Text:=dm.Q_specialnost.FieldByName('specialnost').AsString;
FSpecialnost_add.Show;
FSpecialnost_add.Edit1.SetFocus;
end;
procedure TMainForm.Button6Click(Sender: TObject);
begin
dm.Q_specialnost.SQL.Text:='delete from specialnosti s where s.sp='+IntToStr(dm.Q_specialnost['sp']);
try
dm.Q_specialnost.ExecSQL;
dm.ibtransaction1.commit;
except
showmessage('Ошибка изменений данных в таблице. Возможно нет прав. Обратитесь к администратору');
end;
dm.IBTransaction1.Active:=true;
// showmessage(dm.Q_specialnost.SQL.Text);
dm.Q_specialnost.Open;
dm.Q_specialnost.SQL.Text:='select sp, SPECIALNOST, FACULTET from SPECIALNOSTI, FACULTETY where FACULTETY.FC = SPECIALNOSTI.FC';
dm.Q_specialnost.Open;
dm.Q_kafedra.Open;
dm.T_facultet.Open;}
end;
procedure TMainForm.Button7Click(Sender: TObject);
begin
{dm.QGruppa.Open;
FGruppa.flag:=0;
FGruppa.show;
FGruppa.Edit1.SetFocus;}
end;
procedure TMainForm.Button9Click(Sender: TObject);
begin
FDel_gruppa.ShowModal;
end;
procedure TMainForm.Button8Click(Sender: TObject);
begin
{FGruppa.Edit1.Text:=dm.QGruppa.FieldByName('gruppa').AsString;
FGruppa.flag:=1;
FGruppa.show;
FGruppa.Edit1.SetFocus;}
end;
procedure TMainForm.Button10Click(Sender: TObject);
begin
FKafedra.flag:=0;
FKafedra.Show;
FKafedra.Edit1.SetFocus;
end;
procedure TMainForm.Button11Click(Sender: TObject);
begin
FKafedra.Edit1.Text:=dm.Q_kafedra.FieldByName('kafedra').AsString;
FKafedra.flag:=1;
FKafedra.Show;
FKafedra.Edit1.SetFocus;
end;
procedure TMainForm.Button12Click(Sender: TObject);
begin
dm.Q_kafedra.SQL.Text:='delete from kafedry k where k.kaf='+IntToStr(dm.Q_kafedra['kaf']);
try
dm.Q_kafedra.ExecSQL;
dm.ibtransaction1.commit;
end;
dm.IBTransaction1.Active:=true;
dm.Q_kafedra.Open;
dm.Q_kafedra.SQL.Text:='select * from KAFEDRY k, FACULTETY f where k.fc=f.fc';
dm.Q_kafedra.Open;
dm.QGruppa.Open;
dm.Q_specialnost.Open;
dm.T_facultet.Open;
dm.Qprepod.open;
end;
procedure TMainForm.N6Click(Sender: TObject);
begin
FStatus.ShowModal;
end;
procedure TMainForm.BT_DelClick(Sender: TObject);
begin
dm.Qprepod.SQL.Text:='delete from prepodavateli where prepodavateli.prep='+IntToStr(dm.Qprepod['prep']);
try
dm.Qprepod.ExecSQL;
dm.ibtransaction1.commit;
end;
dm.Qprepod.Transaction.Active:=true;
dm.IBTransaction1.Active:=true;
dm.Qprepod.sql.Text:='select * from prepodavateli';
dm.Qprepod.Open;
dm.Q_specialnost.Open;
dm.T_stepen.Open;
dm.T_facultet.Open;
dm.Q_kafedra.Open;
dm.QGruppa.Open;
dm.Qprepod.Open;
dm.T_zvanie.Open;
dm.t_status.Open;
end;
procedure TMainForm.DBGrid1CellClick(Column: TColumn);
begin
MainForm.GroupBox3.Visible:=true;
dm.QPredmet.SQL.Text:='select distinct * from predmety p, prepodavateli pr, gruppy_predmety_prepodavateli g, gruppy gr where p.pr=g.pr and g.gr=gr.gr and g.prep=pr.prep and pr.prep='+IntToStr(dm.Qprepod['prep']);
dm.QPredmet.Open;
end;
procedure TMainForm.N10Click(Sender: TObject);
begin
Fgruppa_add.ShowModal;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
dm.Qprepod.SQL.Text:='select * from prepodavateli';
dm.Qprepod.open;
end;
procedure TMainForm.DBLCB_kaf_prepodClick(Sender: TObject);
begin
rball.Checked:=false;
dm.Qprepod.SQL.Text:='select * from prepodavateli, kafedry where prepodavateli.kaf=kafedry.kaf and kaf=:par2 order by f';
dm.Qprepod.ParamByName('par2').AsInteger:=DBLCB_kaf_prepod.KeyValue;
dm.Qprepod.Open;
end;
procedure TMainForm.RBallClick(Sender: TObject);
begin
dm.Qprepod.SQL.Text:='select * from prepodavateli order by f';
dm.Qprepod.Open;
end;
end.