База данных

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

    QSqlRecord record2=Plan->record(b);

    idplan=record2.value("ID_plan").toInt(); //сохранили код изменяемого плана

    idkurs=record1.value("kurs").toInt();

    model55.setQuery(tr("SELECT ID_disc FROM Disciplina WHERE (b_disc=\"%1\")").arg(record1.value("b_disc").toString()));

    record1=model55.record(0);

    iddisc=record1.value("ID_disc").toInt();

    izmenitnagr form;

    form.exec();

    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(record2.value("b_plan").toString()).arg(record2.value("year_plan").toInt()).arg(record2.value("year_prod").toInt()));

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

    } 

Обновить:

    void MainWindow::Refresh()

    {

    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);

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

    int i=0; QString str;

    ui->comboBox_2->clear();

    while(q.next())

    {

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

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

    i++;

    }} 

Генерировать отчёт:

    void MainWindow::Report()

    {

    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();

    rep_int=dynamic_cast<Report::ReportInterface*>(rep_eng.loadReport("myReport.bdrt"));

    rep_int->setDatabase(db);

    rep_int->exec();

    } 

Отображение нагрузки и студентов по нажатию на учебный план:

    void MainWindow::plan_and_students()

    {

    f=true; c=true;

    ui->ok_nagruz->setEnabled(false);

    ui->del_new_stud->setEnabled(false);

    ui->add_nagr->setEnabled(true);

    ui->del_nagruz->setEnabled(false);

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

    QSqlRecord record1=Plan->record(a);

    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);

    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);

    QString str=record1.value("b_plan").toString();

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

    QSqlQuery query;

    query.exec("delete from tmp");

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

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

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

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

    query.exec();

    } 

Функции обеспечения ограничений  целостности (сокрытие кнопок):

    void MainWindow::st()

    {

    ui->del_new_stud->setEnabled(true);

    }

    void MainWindow::st_viev()

    {

    if(f==true)

    ui->add_new_stud->setEnabled(true);

    ui->del_new_stud->setEnabled(false);

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

    QSqlRecord record1=Student->record(a);

    bool k=false;

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

    {

    QSqlRecord record2=Inf_Stud->record(i);

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

    k=true;

    }

    if (k==true)

    {

    ui->add_new_stud->setEnabled(false);

    }

    }

    void MainWindow::izm_nag()

    {

    ui->ok_nagruz->setEnabled(true);

    ui->del_nagruz->setEnabled(true);

    } 

Для неосновного класса add_disc (добавить дисциплину): 

Отображение таблиц:

    Disciplina=new QSqlTableModel(0,db);

    Disciplina->setTable("Disciplina");

     Disciplina->select(); 

Сигналы:

     QObject::connect(m_ui->add, SIGNAL(clicked()),this, SLOT(add())); 

Добавить дисциплину:

    void add_disc::add()

    {

    QString str=m_ui->lineEdit->text();

      bool k=false;

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

        {

            QSqlRecord record1=Disciplina->record(i);

            if(record1.value("b_disc").toString()==str)

            k=true;

        }

       if(k==true)

        {

            QMessageBox::information(this, tr("DUBL"),

                    tr("This discipline is already in the table"));

        }

       else {

    QSqlQuery query;

    query.prepare("INSERT INTO Disciplina (b_disc)"

                     "VALUES (:id2)");

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

       query.exec();

          add_disc::close();

      }

    } 
     

Для неосновного класса add_nagruz (связь Дисциплина-План):  

Отображение таблиц:

    Prep_Plan=new QSqlTableModel(0,db);

    Prep_Plan->setTable("Prep_Plan");

    Prep_Plan->select(); 

Вывод в комбо бокс преподавателей:

    QString str;

    QSqlQuery q("select distinct b_disc from Disciplina"); //вывод  в комбо боксы  преподавателей

    int i=0;

    while(q.next())

    {

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

    m_ui->_prep->addItem(str,i);

      i++; 

Сигналы:

    QObject::connect(m_ui->add1, SIGNAL(clicked()),this, SLOT(add1())); 

Добавить нагрузку: 

    void add_nagruz::add1()

    {

    Qt::CheckState state_1, state_2;

    int zach, exam;

    state_1 = m_ui->checkBox->checkState();

    state_2 = m_ui->checkBox_2->checkState();

    if ( state_1 == Qt::Checked ) {zach=1;}

    else {zach=0;}

    if ( state_2 == Qt::Checked ) {exam=1;}

    else {exam=0;}

    int kurs, lec, labs, prakt;

    kurs=m_ui->spinBox->value();

    lec=m_ui->spinBox_2->value();

    labs=m_ui->spinBox_3->value();

    prakt=m_ui->spinBox_4->value();

    QString k,s;

    k=m_ui->_prep->currentText();

    model1.setQuery("SELECT ID_disc FROM Disciplina WHERE b_disc='"+k+"'");

    QSqlRecord record3=model1.record(0);

    int prep=record3.value("ID_disc").toInt();

    model1.setQuery("SELECT year_plan FROM tmp");

    record3=model1.record(0);

    int plan=record3.value("year_plan").toInt();

    bool d=false;

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

    {

    QSqlRecord record2=Prep_Plan->record(i);

    if(record2.value("ID_disc").toInt()==prep&&record2.value("ID_plan").toInt()==plan&&record2.value("kurs").toInt()==kurs)

    d=true;

    }

    if(d==true){

    QMessageBox::information(this, tr("DUBL"),

    tr("This plan is already in the table"));

    }

    else

    {

    QSqlQuery query;

    query.prepare("INSERT INTO Prep_Plan (ID_disc, ID_plan, kurs, lec, labs, prakt, zach, exam)"

    "VALUES (:id1, :id2, :kurs, :lec, :labs, :prakt, :zach, :exam)");

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

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

    query.bindValue(":kurs",kurs);

    query.bindValue(":lec",lec);

    query.bindValue(":labs",labs);

    query.bindValue(":prakt",prakt);

    query.bindValue(":zach",zach);

    query.bindValue(":exam",exam);

    query.exec();

    }

      } 
       
       
       

Для неосновного класса add_prep  (добавить преподавателя): 

Отображение таблиц:

    Prepodavatel=new QSqlTableModel(0,db);

    Prepodavatel->setTable("Prepodavatel");

    Prepodavatel->select(); 

Сигналы:

     QObject::connect(m_ui->add, SIGNAL(clicked()),this, SLOT(add())); 

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