База данных "Кафедра"

Автор работы: Пользователь скрыл имя, 22 Июня 2011 в 07:55, курсовая работа

Описание работы

Исходными данными являются:
данные о студенте (ФИО, группа);
данные о преподавателе (ФИО, должность);
данные о группах (наименование, староста, эдвайзер, год поступления);
сведения о специальностях (наименование, год введения);
данные о дисциплинах (наименования, кредиты, наличие курсовой работы).

Файлы: 1 файл

МУ_СРС_ПБД_рус12.doc

— 655.00 Кб (Скачать файл)
ter">    

    Рисунок 8 - Окно IBConsole после создания генераторов.

    Теперь  присвоим нашему генератору начальное  значение. Так как в таблице  STUDENT уже есть записи, то нужно инициализировать генератор наибольшим имеющимся в базе значением поля kod_student. Посмотреть его можно, набрав в окне ISQL запрос

    select MAX(kod_student) from STUDENT

    В окне результатов появится примерно следующее:

    MAX

    ===

    4

    Значение  поля равно 4 так как мы вручную  внесли уже четыре записи. По умолчанию  у созданного генератора значение равно 0. Наберите и выполните запрос:

    SET GENERATOR kod_student_gen TO 4

    Теперь  текущее значение генератора равно 4. Функция gen_id() увеличивает значение генератора на заданное число и возвращает полученное значение.

    С помощью генератора kod_student_gen автоматизировано получение уникального числового значения для ключевого поля kod_student, однако при каждой вставке новой записи приходится вызывать функцию gen_id(kod_student_gen,1). Сервер позволяет автоматизировать и эту задачу c помощью механизма, который называется триггером.

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

По событию  изменения таблицы БД триггеры различаются  на вызываемые при:

    • добавлении новой записи
    • изменении существующей записи
    • удалении записи

    По  отношению к событию, влекущему их вызов, триггеры различаются на:

  • Выполняемые до наступления события
  • Выполняемые после наступления события
  • Автоматическое обеспечение каскадных воздействий в дочерних таблицах при изменении, удалении записи в родительской таблице выполняется на сервере. Пользователю нет необходимости заботиться о программной реализации каскадных воздействий, поскольку каскадные воздействия выполняет сервер, что снижает загрузку сетевого трафика.
  • Изменения в триггерах не влекут необходимости изменения программного кода в клиентских приложениях и не требует распространения новых версий клиентских приложений у пользователей [8].

    При операциях вставки, удаления и изменения  записи в теле триггера можно обращаться к значениям полей текущей записи при помощи специальных переменных NEW и OLD, например, узнать значение поля first_name при вставке записи можно, воспользовавшись выражением NEW.kod_student. Создадим для таблицы STUDENT триггер, который будет подставлять в поле kod_student очередное уникальное значение. Введите в окне ISQL и выполните следующий запрос:

    SET TERM !! ;

    CREATE TRIGGER kod_student_gen   FOR STUDENT

    BEFORE  INSERT  AS

    BEGIN

          new.kod_student=gen_id(kod_student_gen,1);

    END !!

    SET TERM ; !!

Этот  триггер будет  срабатывать  перед  вставкой записи в таблицу STUDENT, присваивая полю kod_student уникальное значение, полученное от генератора  
kod_student_gen:

          new.kod_student=gen_id(kod_student_gen,1);

    Затем получим еще два генератора и  два триггера для таблиц PREPODAVATEL и DISCIPLINA, чтобы автоматизировать вставку новых записей. Ниже представлены SQL коды для реализации этих задач:

    Для таблицы PREPODAVATEL

    CREATE GENERATOR kod_PREPOD_gen

    select MAX(kod_PREPOD) from prepodavatel

    SET GENERATOR kod_prepod_gen TO 1

    SET TERM !! ;

    CREATE TRIGGER kod_prepod_gen   FOR PREPODAVATEL

    BEFORE  INSERT  AS

    BEGIN

          new.kod_prepod=gen_id(kod_prepod_gen,1);

    END !!

    SET TERM ; !!

    Для таблицы DISCIPLINA

    CREATE GENERATOR kod_disciplina_gen

    select MAX(kod_disciplina) from disciplina

    SET GENERATOR kod_disciplina_gen TO 1

    SET TERM !! ;

    CREATE TRIGGER kod_disciplina_gen   FOR DISCIPLINA

    BEFORE  INSERT  AS

    BEGIN

          new.kod_disciplina=gen_id(kod_disciplina_gen,1);

    END !!

    SET TERM ; !!

 

     3. РЕАЛИЗАЦИЯ БД В СРЕДЕ ПРОГРАММИРОВАНИЯ DELPHI 

    3.1. Формирование справочной системы

    База  данных включает в себя 7 таблиц: Student, Prepodavatel, Gruppa, Disciplina, Specialnost, Uchebnii_plan и Vedomost. Причем Student, Prepodavatel, Gruppa, Disciplina, Specialnost  являются справочными для таблиц Uchebnii_plan и Vedomost. Поэтому первоначально рассмотрим автоматизацию работы данных таблиц. Данные таблицы содержатся на одной форме на компоненте PageControl1, на которой мы создаем 5 страниц, выбрав в контекстном меню PageControl1/New page. В итоге мы получаем TabSheet1.Caption=Список студентов, TabSheet2. Caption =Список групп, TabSheet3. Caption =Список дисциплин, TabSheet4. Caption =Список специальностей, TabSheet5. Caption =Список преподавателей. Для соединения с базой данных поставим на форму DataBase1, установив его свойства AliasName=date_as, DatabaseName=date, Connected=true. 

    3.1.1. Формирование системы  Gruppa

    Перейдя на страницу Список групп расположим на ней Table1, Table2, 2 DataSource, 2 DbGrid, 3 кнопки Button, 4 текстовых поля Edit, 4 Label и 1 GroupBox. Затем установим для них свойства (см. рисунок 9):

    Рисунок 9 - Страница «Список групп»

    Соединяем Table1, Table2 с базой данных устанавливая свойство DatabaseName=date. А также для таблицы Table1 устанавливаем имя таблицы, из которой мы берем записи Tablename=Student, Datasource6 устанавливаем Table1. Для таблицы Table2 устанавливаем имя таблицы, из которой мы берем записи Tablename=Gruppa, Datasource2 устанавливаем Table2. Для того чтобы связать таблицы Table1 и Table2, таким образом чтобы установив в таблице Gruppa курсор на ту или иную группу в таблице Student выводились только те записи, которые соответствуют данной группе. Для этого установим у Table1 Student свойства: Mastersource=Datasource2, MasterFields=gruppa (смотреть рисунок), IndexFieldName=gruppa.

    Для того чтобы внести новую группу необходимо внести значения Группу, Год поступления и Эдвайзера в соответствующие Edit4, Edit5, Edit6, затем нажать кнопку «Вставить», ниже представлен обработчик OnClick: 

    

    Рисунок 10 - Процесс соединения MasterFields для таблиц 

    procedure TForm1.Button8Click(Sender: TObject);

    begin

       table2.Insert;

       Table2.Fields[0].AsString := Edit4.Text;

       Table2.Fields[1].AsString := edit5.Text;

       Table2.Fields[2].AsString := Edit6.Text;

       Table2.Post;

       edit4.Clear;

       edit5.Clear;

       edit6.clear;

    end;

Для удаления записи из таблицы, воспользуемся кнопкой «Удалить», вставив в обработчик события OnClick следующую строчку:

table2.Delete;, которая удалит сведения о  группе, на которой стоит курсор.

Также возможен поиск по группе. Для этого  нам необходимо ввести название группы которую необходимо найти и нажать кнопку «Поиск». Код данной процедуры:

    procedure TForm1.Button13Click(Sender: TObject);

    begin

      Table2.SetKey;

      Table2.Fields[0].AsString := Edit7.Text;

      Table2.GotoKey;

      edit7.Clear;

    end;

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

    3.1.2. Формирование системы Student

    Перейдя на страницу Список студентов расположим на ней Query4, DataSource1, DbGrid, 2 кнопки Button,2 текстовых поля Edit, 2 Label и 4 SpeedButton. Затем установим для них свойства (см. рисунок 11).

    Соединить Query с базой данных, установив DatabaseName=date и записав в SQL: select fio, gruppa from student. Установить у DataSource1 Dataset=Query4, чтобы он хранил набор данных Query, а для Dbrid установить DataSource1, чтобы в таблице мы могли увидеть результат запроса. 4 SpeedButton необходимы нам для перемещения по записям в таблице переходя: на следующую запись, первую, последнюю и предыдущую. Для этого мы запишем в обработчик событий  для каждой из кнопок соответствующую строчку:

query4.Next;//следующая;

query4.First;//первая;

query4.Last;//последняя;

query4.Prior;//предыдущая. 

Для того чтобы внести в таблицу соответствующее  значение запишем для кнопки «Вставить» соответствующий код: 

    procedure TForm1.Button1Click(Sender: TObject);

    begin

      query4.Insert;

      query4.FieldByName('FIO').AsString:= Edit2.Text;

      query4.FieldByName('GRUPPA').AsString:= Edit3.Text;

      query4.Post;

      edit2.Clear;

      edit3.Clear;

    end;

    Рисунок 11 - Страница «Список студентов» 

    Для удаления записи из таблицы, воспользуемся  кнопкой «Удалить», вставив в обработчик события OnClick следующую строчку:

    query4.Delete; 

    Т.к. удаление записи является безвозвратной, то необходимо для query4 записать событие: 

   procedure TForm1.Query4BeforeDelete(DataSet: TDataSet);

   begin

    if  not  (MessageDlg('Вы действительно хотите удалить запись?',

      mtError, [mbYes, mbNo], 0)=mrYes) then

    begin

       Abort;

    end;

   end;

    Итак  мы автоматизировали работу с таблицей Student, которая позволяет работать с записями. На рисунке представлена форма в откомпилированном виде:

    Рисунок 12 - Процесс удаления студента из списка 

    3.1.3. Формирование системы  Disciplina

Перейдя на страницу Список дисциплин расположим на ней Query1, DataSource 3, 1 DbGrid, 2 кнопки Button, 2 текстовых поля Edit, 2 Label. Затем установим для них свойства (см. рисунок 13):

Рисунок 13 - Страница «Список дисциплин»

Информация о работе База данных "Кафедра"