База данных

Автор работы: Пользователь скрыл имя, 27 Марта 2011 в 09:22, курсовая работа

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

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

Содержание работы

1.Введение………………………………………………………………………...3
2.Задача
a.Предметная область и ER-диаграмма……………….………………………………………………..4
b.Физическая модель данных (макеты таблиц)…………………………. 5
c.Список явных ограничений целостности……………………………………………………………….6
3.Описание приложения
a.Функции и процедуры, а так же связи.......………………………...……7
b.Классы, их методы и поля класса………………………………………25
4.Описание функционирования базы данных
a.Процедуры и функции по реализации ограничений целостности, включая SQL запросы……………………………………………….......28
b.SQL запросы по ведению электронного аналога документа…………………………………………………………….…..29
5.Описание экранных форм……………………………………………………...30
6.Руководство по эксплуатации………………………………………………....31
7.Заключение…………………………………………………………………..….32
8.Список литературы………………………………………………………..……33
9.Приложение……………………………………………………………….….…34

Файлы: 1 файл

Курсовая работа.docx

— 546.75 Кб (Скачать файл)

Класс add_disc (добавить дисциплину):

    class add_disc : public QDialog {

    Q_OBJECT

    public:

    add_disc(QWidget *parent = 0);

    ~add_disc();

    protected:

    void changeEvent(QEvent *e);

    private:

    Ui::add_disc *m_ui;

    QSqlDatabase db;

    QSqlTableModel *Disciplina;

    private slots:

    void add();

    }; 

Класс add_nagruz(добавить связь Дисциплина-План):

    class add_nagruz : public QDialog {

    Q_OBJECT

    public:

    add_nagruz(QWidget *parent = 0);

    ~add_nagruz();

    QSqlQueryModel model1,model2;

    //QSqlTableModel *Prep_Plan;

    protected:

    void changeEvent(QEvent *e);

    private:

    Ui::add_nagruz *m_ui;

    QSqlDatabase db;

    QCheckBox *checkBox,*checkBox_2;

    QTextEdit *textEdit,*textEdit_2;

    QSqlTableModel *Prep_Plan,*tmp;

    private slots:

    void add1();

    }; 

Класс add_prepod (Добавить преподавателя):

    class add_prepod : public QDialog {

    Q_OBJECT

    public:

    add_prepod(QWidget *parent = 0);

    ~add_prepod();

    protected:

    void changeEvent(QEvent *e);

    private:

    Ui::add_prepod *m_ui;

    QSqlDatabase db;

    QSqlTableModel *Prepodavatel;

    private slots:

    void add();

    };

 

Класс dis_prep (добавить связь  Дисциплина-Преподаватель):

    class dis_prep : public QDialog {

    Q_OBJECT

    public:

    dis_prep(QWidget *parent = 0);

    ~dis_prep();

    QSqlQueryModel model1, model2, model3, model4 ;

    protected:

    void changeEvent(QEvent *e);

    private:

    Ui::dis_prep *m_ui;

    QSqlDatabase db;

    QSqlTableModel *Prepodavatel,*Disciplina,*Inf_Disc;

    private slots:

    void disc(); void prepod(); void disc_and_prepod(); void add3(); void del();

    };

Класс izmenitnagr (Изменить связь Дисциплина-План):

    class izmenitnagr : public QDialog {

    Q_OBJECT

    public:

    izmenitnagr(QWidget *parent = 0);

    ~izmenitnagr();

    QSqlQueryModel model1,model2;

    protected:

    void changeEvent(QEvent *e);

    private:

    Ui::izmenitnagr *m_ui;

    QSqlDatabase db;

    QCheckBox *checkBox,*checkBox_2;

    QTextEdit *textEdit,*textEdit_2;

    QSqlTableModel Disciplina,*Prep_Plan,*tmp;

    private slots:

    void add1();

    };

Процедуры и функции по реализации ограничений целостности, включая SQL запросы

  1. Не может  быть больше одной дисциплины с одинаковым названием.

    При попытке  добавления дисциплины, уже имеющейся  в базе данных, или при изменении  названия существующей дисциплины на уже имеющееся, выскакивает сообщение  о невозможности данного действия. Листинг представлен на странице 19.

  1. Не может быть двух и более одинаковых учебных планов. При попытке добавления учебного плана, уже имеющейся в базе данных, или при изменении существующего плана на уже имеющееся, выскакивает сообщение о невозможности данного действия. Листинг представлен на странице 15.
  2. Не может быть удалён студент, для которого определён учебный план. При удалении студента необходимо удалять связанные поля в таблице «Студент-План». При удалении студента, имеющего связи с планами, выскакивает диалог об удалении связей. При нажатии «ДА» удаляются студент и его связи. Листинг представлен на странице 13.
  3. При удалении дисциплины необходимо удалять также связанные поля в таблице «Дисциплина-Преподаватель» и «Дисциплина-План. При удалении дисциплины, имеющей связи, выскакивает диалог об удалении связей. При нажатии «ДА» удаляется дисциплина и её связи. Листинг представлен на странице 10.
  4. При удалении учебного плана необходимо также удалять связанные поля в таблице «Дисциплина-План» и «Студент-План». При удалении плана, имеющего связи, выскакивает диалог об удалении связей. При нажатии «ДА» удаляется план и его связи. Листинг представлен на странице 12.
  5. При удалении преподавателя необходимо также удалять связанные поля в таблице «Дисциплина-Преподаватель». При удалении преподавателя, имеющего связи, выскакивает диалог об удалении связей. При нажатии «ДА» удаляется преподаватель и его связи. Листинг представлен на странице 11.
  6. Нельзя добавлять связи для несуществующих студентов, преподавателей, планов и дисциплин. Это ОЦ реализовано с помощью ограничения пользователя в выборе параметров только из справочников.
 

    SQL запросы по созданию таблиц:

    CREATE TABLE Disciplina (ID_DISC INTEGER PRIMARY KEY, b_disc VARCHAR(20));

    CREATE TABLE Student (ID_stud INTEGER PRIMARY KEY, b_stud VARCHAR(30), c_stud VARCHAR(5));

    CREATE TABLE Prepodavatel (ID_PREP INTEGER PRIMARY KEY, b_prep VARCHAR(30));

    CREATE TABLE Plan (ID_plan INTEGER PRIMARY KEY, b_plan VARCHAR(30), year_plan INTEGER,  year_prod INTEGER);

    CREATE TABLE Prep_Plan (ID_disc INTEGER, ID_plan INTEGER, kurs INTEGER, lec INTEGER, labs INTEGER, prakt INTEGER, zach INTEGER, exam INTEGER, PRIMARY KEY(ID_disc,ID_plan,kurs));

    CREATE TABLE Inf_Stud (ID_stud INTEGER, ID_plan INTEGER, PRIMARY KEY(ID_stud));

    CREATE TABLE Inf_Disc (ID_disc INTEGER, ID_prep INTEGER, PRIMARY KEY(ID_disc));

    CREATE TABLE tmp (b_stud VARCHAR(30), year_plan INTEGER PRIMARY KEY);

SQL запросы по ведению электронного аналога документа

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

   При генерации  отчёта выполняется запись выбранной ФИО студента в таблицу tmp. После этого вызывается отчёт, в котором с помощью простого запроса отображается значение полей, относящихся к выбранному студенту. Такой метод позволяет изменять содержимое отчёта в зависимости от конкретных требований. Далее представлен листинг.  

   Листинг в eXaro:

    SELECT Disciplina.b_disc,Student.b_stud,c_stud,b_prep,b_plan,Plan.year_plan,year_prod,kurs,lec, labs, prakt, zach, exam FROM Disciplina,Student,Prepodavatel,Plan,Prep_Plan,Inf_Stud,Inf_Disc,tmp WHERE (Disciplina.ID_disc=Inf_Disc.ID_disc) AND (Prepodavatel.ID_prep=Inf_Disc.ID_prep) AND (Inf_Stud.ID_stud=Student.ID_stud) AND (Plan.ID_plan=Inf_Stud.ID_plan) AND (Prep_Plan.ID_disc=Disciplina.ID_disc) AND (Prep_Plan.ID_plan=Plan.ID_plan)AND (tmp.b_stud=Student.b_stud); 

     Листинг в Qt:

    QString k,y;

    k=ui->comboBox_2->currentText();

    QSqlQuery query;

    query.exec("delete from tmp");

    query.prepare("INSERT INTO tmp (b_stud, year_plan)"

    "VALUES (:id1, :id2)");

    query.bindValue(":id1",k);

    query.bindValue(":id2",y);

    query.exec(); 
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

Описание экранных форм

      1. В первой, второй, третьей и четвёртой экранной форме добавляются и редактируются дисциплины и преподаватели, при этом не может быть добавлены дисциплины с одинаковыми названиями. Также из формы 1 может быть вызвана форма удаления/добавления связи Дисциплина-Преподаватель, при этом нельзя добавить существующую связь (см. приложение 1,2,3,4). При удалении дисциплины или преподавателя, имеющих связи, появляются диалоги (приложение 5). При добавлении существующей связи Дисциплина-Преподаватель появляется диалог (приложение 6).
      2. Во пятой форме добавляются учебные планы и студенты, при этом нельзя добавить два и более одинаковых плана (приложение 7). При удалении связанных объектов выскакивает диалог подобный приложению 5. Также здесь отображается список студентов, учащихся по выбранному плану, и нагрузка по предметам на этот план. Ограничение целостности на удаление/добавление студента в таблицу связи Студент-План осуществляется путём разрешения/запрещения пользователю нажимать соответствующие кнопки. Из этой формы можно вызвать формы добавления нового учебного плана нажатием кнопки «Новый план» (приложение 8) и изменения существующего нажатием кнопки «Изменить» (приложение 9).
      3. В следующей экранной форме отображается вся база данных целиком и здесь же можно выбрать критерий формирования отчёта и получить его в виде, удобном для просмотра и печати (приложение 10).
      4. При нажатии на кнопку «Сгенерировать отчёт» выводится отчёт по выбранному студенту в виде, удобном для сохранения, печати и просмотра (приложение 11).

Руководство по эксплуатации

  1. При внесении информации в приложение используются 7 таблиц: дисциплины, преподаватели, учебные планы, студенты, связь дисциплина-преподаватель, связь студент-план, связь дисциплина-план.
  2. При внесении информации в таблицу «Дисциплины» необходимо учитывать то, что название дисциплины не может повторяться. А при удалении происходит удаление не только самих дисциплин, но и всех их связей». То же самое относится и к таблицам «Студенты», «Преподаватели», «Учебные планы».
  3. Для добавления связи дисциплина-преподаватель необходимо нажать кнопку «Дисциплина-Преподаватель» во вкладке главного окна «Дисциплины и преподаватели». В появившемся окне (приложение 4) необходимо выбрать дисциплину и преподавателя из соответствующих списков, после чего станет активной кнопка «Добавить». Для удаления нужно выбрать удаляемую строку и нажать на кнопку «Удалить».
  4. При добавлении записей в таблицы связей нет необходимости следить, чтобы не добавить запись для несуществующих объектов, т.к. выбор добавляемых объектов осуществляется только из описанных в справочниках. При удалении связи важно помнить, что разрывается связь между дисциплинами, преподавателями, студентами или планами.
  5. Для того чтобы добавлять записи в таблицы связь студент-план и связь дисциплина-план, необходимо выбрать учебный план, с которым будет производиться дальнейшая работа. После данного действия в соответствующих окнах отобразится вся информация по этому плану, а именно список студентов и нагрузка. Чтобы внести изменения в нагрузку учебного плана, необходимо сначала выбрать план, затем выбрать предмет, для которого нужно изменить нагрузку. После этого кнопка «Изменить» станет активной.
  6. Кнопка «Добавить студента» в таблицу связи «студент-план» (зелёная стрелка, направленная влево)  активна только если выделен учебный план, добавляемый студент и если для этого студента ещё не назначено плана. Кнопка «Удалить студента» из таблицы связи «студент-план» (зелёная стрелка, направленная вправо) доступна если выбрать учебный план и студента, который к нему относится.
  7. Таблица «Отчёт» дана для учёта данных, в ней невозможно изменять информацию. В приложении, также реализована возможность выбора студента для формирования отчёта. Кнопка «обновить» служит для обновления таблицы после внесения изменений в базу данных. Кнопка «генерировать отчёт» предназначена для формирования отчёта в зависимости от выбранного студента.

Заключение

В ходе проделанной работы были получены навыки программирования на QT, а также создания простых приложений. Ознакомился с основными запросами SQLite и принципами ведения простейшей базы данных. Были получены навыки формирования отчётов с помощью генератора EXARO. Результатом работы явилось, функциональное и удобное для пользователя приложение, которое может использоваться для работы с учебными планами. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

 
    1. Qt4. Профессиональное  программирование на C++. – СПб.: БХВ-Петербург, 2007. – 880 с: ил.+ CD-ROM – (В подлиннике)
    2. Введение в системы баз данных, 7-е издание. : Пер. с англ. – М. : Издательский дом “Вильямс”, 2001. – 1072 с. : ил. – Парал. тит. англ.
    3. Qt4. Программирование GUI на С++.:Ж.Бланшет, М.Саммерфилд.: КУДИЦ-ПРЕСС Москва, 2007. – 641с

Приложение

     Приложение 1

 

     Приложение 2

 
 
 
 

     Приложение 3

 
 

     Приложение 4

     

 

     Приложение 5

 
 
 

     Приложение 6

                                        
 

     Приложение 7

     

 

     Приложение 8

 
 
 
 
 
 
 
 
 
 
 
 
 

 

            Приложение 9

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