База данных

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

Добавить  преподавателя:

    void add_prepod::add()

    {

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

    QSqlQuery query;

    query.prepare("INSERT INTO Prepodavatel (b_prep)"

    "VALUES (:id2)");

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

    query.exec();

    add_prepod::close();

     } 

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

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

    model1.setQuery("SELECT b_disc FROM Disciplina");

    model2.setQuery("SELECT b_prep FROM Prepodavatel");

    model3.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");

    m_ui->listView_1->setModel(&model1);

    m_ui->listView_2->setModel(&model2);

    m_ui->tableView->setModel(&model3);

    Inf_Disc=new QSqlTableModel(0,db);

    Inf_Disc->setTable("Inf_Disc");

    Inf_Disc->select(); 

 Сигналы:

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

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

    QObject::connect(m_ui->tableView,SIGNAL(clicked(QModelIndex)),this,SLOT(disc_and_prepod()));

    QObject::connect(m_ui->listView_1,SIGNAL(clicked(QModelIndex)),this,SLOT(disc()));

    QObject::connect(m_ui->listView_2,SIGNAL(clicked(QModelIndex)),this,SLOT(prepod()));

    m_ui->del->setEnabled(false);

    m_ui->add3->setEnabled(false); 

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

    void dis_prep::add3()

    {

    int a=m_ui->listView_1->currentIndex().row(); //номер строки дисциплины

    QSqlRecord record1=model1.record(a); //записываем в record1 имя дисциплины с этой строки

    int b=m_ui->listView_2->currentIndex().row(); //номер строки препода

    QSqlRecord record2=model2.record(b); //записываем в record2 имя препода с этой строки

    bool k=false;

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

    {

    QSqlRecord record3=model3.record(i);

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

    k=true;

    }

    if(k==true)

    {

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

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

    }

    else

    {

    model3.setQuery(tr("INSERT INTO Inf_Disc (ID_disc,ID_prep) SELECT ID_disc, ID_prep FROM Disciplina, Prepodavatel WHERE (Disciplina.b_disc=\"%1\") AND (Prepodavatel.b_prep=\"%2\")").arg(record1.value("b_disc").toString()).arg(record2.value("b_prep").toString()));

    model3.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");

    m_ui->tableView->setModel(&model3);

    }} 

Удаление связи:

    void dis_prep::del()

    {

    int a=m_ui->tableView->currentIndex().row();

    QSqlRecord record1=model3.record(a);

    model3.setQuery(tr("DELETE FROM Inf_Disc WHERE ID_disc IN (SELECT ID_prep FROM Prepodavatel WHERE b_prep=\"%1\")").arg(record1.value("b_prep").toString()));

    model3.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");

    m_ui->tableView->setModel(&model3);

    m_ui->del->setEnabled(false);

    }

Активность/пассивность кнопок:

    void dis_prep::disc_and_prepod()

    {

    m_ui->del->setEnabled(true);

    }

    void dis_prep::disc()

    {

    a=true;

    if(a&&b) m_ui->add3->setEnabled(true);

    }

    void dis_prep::prepod()

    {

    b=true;

    if(a&&b) m_ui->add3->setEnabled(true);

    } 
     

Для неосновного класса izmenitnagr  (Изменение выбранной нагрузки): 

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

    Prep_Plan=new QSqlTableModel(0,db);

    Prep_Plan->setTable("Prep_Plan");

    Prep_Plan->select(); 

Отображение дисциплин в ComboBox:

    QString str;

    QSqlQuery query;

    query.prepare("select distinct b_disc from Disciplina where ID_disc=:id1");

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

    query.exec();

    int i=0;

    while(query.next())

    {str=query.value(0).toString();

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

    i++;}

    query.prepare("select distinct b_disc from Disciplina no where ID_disc!=:id1");

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

    query.exec();

    i=0;

    while(query.next())

    {str=query.value(0).toString();

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

    i++;} 

Отображение исходных значений в spinBox:

    m_ui->spinBox->setValue(idkurs);

    m_ui->spinBox_3->setValue(iddisc);

    model1.setQuery(tr("SELECT lec,labs,prakt,zach,exam FROM Prep_Plan WHERE (ID_plan=\"%1\") AND (ID_disc=\"%2\") AND (kurs=\"%3\")").arg(idplan).arg(iddisc).arg(idkurs));

    QSqlRecord record1=model1.record(0);

    m_ui->spinBox_2->setValue(record1.value("lec").toInt());

    m_ui->spinBox_3->setValue(record1.value("labs").toInt());

    m_ui->spinBox_4->setValue(record1.value("prakt").toInt()); 

  Сигналы:

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

Изменение записи:

    void izmenitnagr::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;

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

    model1.setQuery(tr("SELECT ID_disc FROM Disciplina WHERE (b_disc=\"%1\")").arg(k));

    QSqlRecord record1=model1.record(0);

    model2.setQuery(tr("SELECT ID_disc, ID_plan, kurs,lec,labs,prakt,zach,exam FROM Prep_Plan WHERE (ID_plan=\"%1\") AND (ID_disc=\"%2\") AND (kurs=\"%3\")").arg(idplan).arg(iddisc).arg(idkurs));

    model1.setQuery(tr("DELETE FROM Prep_Plan WHERE (ID_plan=\"%1\") AND (ID_disc=\"%2\") AND (kurs=\"%3\")").arg(idplan).arg(iddisc).arg(idkurs));

    Prep_Plan->select();

    QSqlRecord record3=model2.record(0);

    bool d=false;

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

    {QSqlRecord record2=Prep_Plan->record(i);

    if(record2.value("ID_disc").toInt()==record1.value("ID_disc").toInt()&&record2.value("ID_plan").toInt()==idplan&&record2.value("kurs").toInt()==kurs)

    d=true;}

    if(d==true)

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

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

    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",record3.value("ID_disc").toInt());

    query.bindValue(":id2",record3.value("ID_plan").toInt());

    query.bindValue(":kurs",record3.value("kurs").toInt());

    query.bindValue(":lec",record3.value("lec").toInt());

    query.bindValue(":labs",record3.value("labs").toInt());

    query.bindValue(":prakt",record3.value("prakt").toInt());

    query.bindValue(":zach",record3.value("zach").toInt());

    query.bindValue(":exam",record3.value("exam").toInt());

    query.exec();}

    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",record1.value("ID_disc").toInt());

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

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

Классы, их методы и поля

Основной  класс:

    class MainWindow : public QMainWindow

    {

    Q_OBJECT

    public:

    MainWindow(QWidget *parent = 0);

    ~MainWindow();

    QSqlQueryModel model1,model11, model3, model33, model44, model55 ;

    private:

    Ui::MainWindow *ui;

    Report::ReportEngine rep_eng;

    Report::ReportInterface* rep_int;

    QSqlDatabase db;

    QSqlTableModel *Disciplina;

    QSqlTableModel *Student;

    QSqlTableModel *Prepodavatel;

    QSqlTableModel *Plan;

    QSqlTableModel *Prep_Plan;

    QSqlTableModel *Inf_Stud;

    QSqlTableModel *Inf_Disc;

    QSqlQueryModel *model2;

    private slots:

    void add_dis(); void add_prep(); void add_plan(); void add_stud();

    void del_dis(); void del_prep(); void del_plan(); void del_stud();

    void ok_disc(); void ok_prep(); void ok_plan(); void ok_stud();

    void can_plan(); void can_stud();

    void add_nagr(); void disc_prep(); void plan_and_students();

    void del_nagruz(); void Refresh(); void add_new_stud();

    void ok_nagruz(); void Report(); void del_new_stud();

    void st();

    void st_viev();

    void izm_nag();

     }; 
 

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