База данных

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать файл)

         ui->prep_viev->setColumnHidden(0,true);

     //Вывод таблицы Student

         Student=new QSqlTableModel(0,db);

         Student->setTable("Student");

         Student->select();

         Student->setEditStrategy(QSqlTableModel::OnManualSubmit);

         ui->stud_viev->setModel(Student);

         ui->stud_viev->setColumnHidden(0,true);

     //Вывод таблицы Plan

         Plan=new QSqlTableModel(0,db);

         Plan->setTable("Plan");

         Plan->select();

         Plan->setEditStrategy(QSqlTableModel::OnManualSubmit);

         ui->plan_viev->setModel(Plan);

         ui->plan_viev->setColumnHidden(0,true);

     //Вывод таблицы Prep_Plan

         Prep_Plan=new QSqlTableModel(0,db);

         Prep_Plan->setTable("Prep_Plan");

         Prep_Plan->select();

         Prep_Plan->setEditStrategy(QSqlTableModel::OnManualSubmit);

     //Вывод таблицы Inf_Stud

         Inf_Stud=new QSqlTableModel(0,db);

         Inf_Stud->setTable("Inf_Stud");

         Inf_Stud->select();

         Inf_Stud->setEditStrategy(QSqlTableModel::OnManualSubmit);

     //Вывод таблицы Inf_Disc

         Inf_Disc=new QSqlTableModel(0,db);

         Inf_Disc->setTable("Inf_Disc");

         Inf_Disc->select();

         Inf_Disc->setEditStrategy(QSqlTableModel::OnManualSubmit);

      model44.setQuery("SELECT b_disc,b_prep FROM Prepodavatel, Disciplina, Inf_Disc WHERE Prepodavatel.ID_prep=Inf_Disc.ID_prep AND Inf_Disc.ID_disc=Disciplina.ID_disc");

         ui->tableView_2->setModel(&model44);

     //Вывод таблицы отчёт

         QSqlQueryModel *model = new QSqlQueryModel;

      model->setQuery("SELECT b_disc,b_stud,c_stud,b_prep,b_plan,year_plan,year_prod,kurs,lec, labs, prakt, zach, exam FROM Disciplina,Student,Prepodavatel,Plan,Prep_Plan,Inf_Stud,Inf_Disc 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)");

        ui->tableView->setModel(model); 

Отображение кнопок:

    ui->add_new_stud->setEnabled(false);

    ui->del_new_stud->setEnabled(false);

    ui->add_nagr->setEnabled(false);

    ui->ok_nagruz->setEnabled(false);

    ui->del_nagruz->setEnabled(false);

    ui->ok_nagruz->setEnabled(false); 

Сигналы:

     //Сигналы  для вкладки "Дисциплины  и Преподаватели"

         QObject::connect(ui->add_disc,SIGNAL(clicked()),this,SLOT(add_dis()));

         QObject::connect(ui->del_disc,SIGNAL(clicked()),this,SLOT(del_dis()));

         QObject::connect(ui->ok_disc,SIGNAL(clicked()),this,SLOT(ok_disc()));

         QObject::connect(ui->disc_prep,SIGNAL(clicked()),this,SLOT(disc_prep()));

         QObject::connect(ui->add_prep,SIGNAL(clicked()),this,SLOT(add_prep()));

         QObject::connect(ui->del_prep,SIGNAL(clicked()),this,SLOT(del_prep()));

         QObject::connect(ui->ok_prep,SIGNAL(clicked()),this,SLOT(ok_prep()));

     //Сигналы  для вкладки "Студенты  и Учебные планы"

         QObject::connect(ui->add_plan,SIGNAL(clicked()),this,SLOT(add_plan()));

      QObject::connect(ui->del_plan,SIGNAL(clicked()),this,SLOT(del_plan()));

      QObject::connect(ui->ok_plan,SIGNAL(clicked()),this,SLOT(ok_plan()));

      QObject::connect(ui->can_plan,SIGNAL(clicked()),this,SLOT(can_plan()));

      QObject::connect(ui->add_stud,SIGNAL(clicked()),this,SLOT(add_stud()));

      QObject::connect(ui->del_stud,SIGNAL(clicked()),this,SLOT(del_stud()));

      QObject::connect(ui->ok_stud,SIGNAL(clicked()),this,SLOT(ok_stud()));

      QObject::connect(ui->can_stud,SIGNAL(clicked()),this,SLOT(can_stud()));

      QObject::connect(ui->add_new_stud,SIGNAL(clicked()),this,SLOT(add_new_stud()));

      QObject::connect(ui->del_new_stud,SIGNAL(clicked()),this,SLOT(del_new_stud()));

      QObject::connect(ui->plan_viev,SIGNAL(clicked(QModelIndex)), this,

      this,SLOT(plan_and_students()));

      QObject::connect(ui->add_nagr,SIGNAL(clicked()),this,SLOT(add_nagr()));

      QObject::connect(ui->del_nagruz,SIGNAL(clicked()),this,SLOT(del_nagruz()));

      QObject::connect(ui->ok_nagruz,SIGNAL(clicked()),this,SLOT(ok_nagruz()));

      QObject::connect(ui->stud_viev,SIGNAL(clicked(QModelIndex)),this,SLOT(st_viev()));

      QObject::connect(ui->listView,SIGNAL(clicked(QModelIndex)),this,SLOT(st()));

      QObject::connect(ui->nagruz_viev_2,SIGNAL(clicked(QModelIndex)),this,SLOT(izm_nag()));

      ui->add_new_stud->setEnabled(false);

      ui->del_new_stud->setEnabled(false);

      ui->add_nagr->setEnabled(false);

      ui->ok_nagruz->setEnabled(false);

      ui->del_nagruz->setEnabled(false);

      ui->ok_nagruz->setEnabled(false);

     //Сигналы для вкладки "Отчёт"

         QObject::connect(ui->Refresh,SIGNAL(clicked()),this,SLOT(Refresh()));

         QObject::connect(ui->Report,SIGNAL(clicked()),this,SLOT(Report())); 

  ComboBox для вкладки "Отчёт":

      QSqlQuery q("select distinct b_stud from Student");

      int i=0;

      QString str;

      while(q.next())

      {

      str=q.value(0).toString();

      ui->comboBox_2->addItem(str,i);

      i++;

      } 

Добавить  запись:

     //Описание  функции кнопки  Добавить

      void MainWindow::add_dis()

      {

      add_disc form;

      form.exec();

      Disciplina->select();

      }

      void MainWindow::add_prep()

      {

      add_prepod form;

      form.exec();

      Prepodavatel->select();

      }

      void MainWindow::add_plan()

      {

      Plan->insertRecord(-1,QSqlRecord::QSqlRecord());

      }

      void MainWindow::add_stud()

      {

      Student->insertRecord(-1,QSqlRecord::QSqlRecord());

      }

      void MainWindow::add_nagr()

      {

      Prep_Plan->insertRecord(-1,QSqlRecord::QSqlRecord());

      add_nagruz form;

      form.exec();

      Prep_Plan->select();

      int a=ui->plan_viev->currentIndex().row();

      QSqlRecord record1=Plan->record(a);

      model1.setQuery(tr("SELECT b_disc,kurs,lec,labs,prakt,zach,exam FROM Disciplina, Plan, Prep_Plan WHERE Disciplina.ID_disc=Prep_Plan.ID_disc AND Prep_Plan.ID_plan=Plan.ID_plan AND (b_plan=\"%1\") AND (year_plan=\"%2\") AND (year_prod=\"%3\")").arg(record1.value("b_plan").toString()).arg(record1.value("year_plan").toInt()).arg(record1.value("year_prod").toInt()));

      ui->nagruz_viev_2->setModel(&model1);

      }

      void MainWindow::add_new_stud()

      {

      int a=ui->plan_viev->currentIndex().row();

      QSqlRecord record1=Plan->record(a);

      int n=ui->stud_viev->currentIndex().row();

      QSqlRecord record2=Student->record(n);

      int str=record1.value("ID_plan").toInt();

      int str1=record2.value("ID_stud").toInt();

      QSqlQuery query;

      query.prepare("INSERT INTO Inf_Stud (ID_stud, ID_plan)"

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

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

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

      query.exec();

      model11.setQuery(tr("SELECT b_stud FROM Student, Inf_Stud, Plan WHERE (Student.ID_stud=Inf_Stud.ID_stud) AND (Inf_Stud.ID_plan=Plan.ID_plan) AND (b_plan=\"%1\") AND (year_plan=\"%2\") AND (year_prod=\"%3\")").arg(record1.value("b_plan").toString()).arg(record1.value("year_plan").toInt()).arg(record1.value("year_prod").toInt()));

      ui->listView->setModel(&model11);

      Inf_Stud->submitAll();

      ui->add_new_stud->setEnabled(false);

      } 

Удалить запись:

    void MainWindow::del_dis()

    {

    int a=ui->disc_viev->currentIndex().row();

    QSqlRecord record1=Disciplina->record(a);

    bool k=false,l=false;

    for(int i=0;i<Prep_Plan->rowCount();i++)

    {

    QSqlRecord record2=Prep_Plan->record(i);

    if(record1.value("ID_disc").toInt()==record2.value("ID_disc").toInt())

    k=true;

    }

    for(int i=0;i<Inf_Disc->rowCount();i++)

    {

    QSqlRecord record2=Inf_Disc->record(i);

    if(record1.value("ID_disc").toInt()==record2.value("ID_disc").toInt())

    l=true;

    }

    if (k==false&&l==false)

    {

    Disciplina->removeRow(a);

    Disciplina->submitAll();

    }

    else

    {

    int r = QMessageBox::question(this, tr("DELETE DISCIPLINE"),

    tr("Delete \"%1\" and its links?")

    .arg(record1.value("b_disc").toString()),

    QMessageBox::Yes | QMessageBox::Default,

    QMessageBox::No | QMessageBox::Escape);

    if (r == QMessageBox::No)

    return;

    else

    {

    for(int i=0;i<Prep_Plan->rowCount();i++)

    {

    QSqlRecord record2=Prep_Plan->record(i);

    if(record1.value("ID_disc").toInt()==record2.value("ID_disc").toInt())

    {

    Prep_Plan->removeRow(i);

    Prep_Plan->submitAll();

    }

    }

    for(int i=0;i<Inf_Disc->rowCount();i++)

    {

    QSqlRecord record2=Inf_Disc->record(i);

    if(record1.value("ID_disc").toInt()==record2.value("ID_disc").toInt())

    {

    Inf_Disc->removeRow(i);

    Inf_Disc->submitAll();

    }

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