Автор работы: Пользователь скрыл имя, 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
Добавить преподавателя:
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.
m_ui->listView_1->setModel(&
m_ui->listView_2->setModel(&
m_ui->tableView->setModel(&
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->
QObject::connect(m_ui->
QObject::connect(m_ui->
m_ui->del->setEnabled(false);
m_ui->add3->setEnabled(false);
Добавление
связи Дисциплина-
void dis_prep::add3()
{
int a=m_ui->listView_1->
QSqlRecord record1=model1.record(a); //записываем в record1 имя дисциплины с этой строки
int b=m_ui->listView_2->
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").
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\")")
model3.setQuery("SELECT
b_disc,b_prep FROM Prepodavatel, Disciplina, Inf_Disc WHERE Prepodavatel.ID_prep=Inf_Disc.
m_ui->tableView->setModel(&
}}
Удаление связи:
void dis_prep::del()
{
int a=m_ui->tableView->
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.
model3.setQuery("SELECT
b_disc,b_prep FROM Prepodavatel, Disciplina, Inf_Disc WHERE Prepodavatel.ID_prep=Inf_Disc.
m_ui->tableView->setModel(&
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_
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(
m_ui->spinBox_3->setValue(
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).
QSqlRecord record1=model1.record(0);
m_ui->spinBox_2->setValue(
m_ui->spinBox_3->setValue(
m_ui->spinBox_4->setValue(
Сигналы:
QObject::connect(m_ui->
Изменение записи:
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).
model1.setQuery(tr("DELETE
FROM Prep_Plan WHERE (ID_plan=\"%1\") AND (ID_disc=\"%2\")
AND (kurs=\"%3\")").arg(idplan).
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").
d=true;}
if(d==true)
{QMessageBox::information(
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",
query.bindValue(":id2",
query.bindValue(":kurs",
query.bindValue(":lec",
query.bindValue(":labs",
query.bindValue(":prakt",
query.bindValue(":zach",
query.bindValue(":exam",
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",
query.bindValue(":id2",idplan)
query.bindValue(":kurs",kurs);
query.bindValue(":lec",lec);
query.bindValue(":labs",labs);
query.bindValue(":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();
};