#include "curriculumwizard.h"
#include "ui_curriculumwizard.h"
CurriculumWizard::CurriculumWizard(QWidget *parent) :
QWizard(parent),
ui(new Ui::CurriculumWizard)
{
ui->setupUi(this);
connect(this,SIGNAL(currentIdChanged(int)),this,SLOT(on_CurriculumWizard_currentIdChanged(int)));
connect(this,SIGNAL(finished(int)),this,SLOT(on_CurriculumWizard_finished(int)));
ui->SdeptEdit->setReadOnly(true);
ui->SclassEdit->setReadOnly(true);
ui->step3tableView->setItemDelegateForColumn(0,new readonlyDelegate(this));
ui->step3tableView->setItemDelegateForColumn(1,new readonlyDelegate(this));
ui->step3tableView->setItemDelegateForColumn(2,new readonlyDelegate(this));
seterror = false;
testcount = 0;
}
CurriculumWizard::~CurriculumWizard()
{
delete ui;
}
void CurriculumWizard::on_CurriculumWizard_currentIdChanged(int id)
{
// QMessageBox::aboutQt(this,QString("%1").arg(id));
switch(id)
{
case 1:
{
QSqlQueryModel *model = new QSqlQueryModel(this);
model->setQuery("SELECT DISTINCT Sdept,Sclass,RMlocat \
FROM Student,Classroom \
WHERE Student.Sdept = Classroom.RMdept");
model->setHeaderData(0, Qt::Horizontal, tr("系院"));
model->setHeaderData(1, Qt::Horizontal, tr("班级"));
model->setHeaderData(2, Qt::Horizontal, tr("系教学楼"));
ui->Sdept_Sclasstable->setModel(model);
break;
}
case 2:
{
if(ui->SdeptEdit->text().isEmpty() || ui->SclassEdit->text().isEmpty())
{
QMessageBox::about(this,NULL,tr("您还没有选择班级"));
this->back();
return;
}
QSqlQueryModel *model = new QSqlQueryModel(this);
model->setQuery("SELECT Cno,Cname,Ccredit,Cdept FROM Course");
model->setHeaderData(0, Qt::Horizontal, tr("课程号"));
model->setHeaderData(1, Qt::Horizontal, tr("课程名"));
model->setHeaderData(2, Qt::Horizontal, tr("学分"));
model->setHeaderData(3, Qt::Horizontal, tr("所属院系"));
ui->CoursetableView->setModel(model);
break;
}
case 3:
{
if(wi.Courseinfolist.size() == 0)
{
QMessageBox::about(this,NULL,tr("您还没有选择课程"));
this->back();
return;
}
QStandardItemModel *model;
model = new QStandardItemModel(wi.Courseinfolist.size(),3);
ui->step3tableView->setModel(model);
model->setHeaderData(0, Qt::Horizontal, tr("课程号"));
model->setHeaderData(1, Qt::Horizontal, tr("课程名"));
model->setHeaderData(2, Qt::Horizontal, tr("学分"));
for (int row = 0; row < wi.Courseinfolist.size(); ++row)
{
QSqlQuery query;
QString Command = QString(tr("SELECT Cno,Cname,Ccredit FROM Course Where Cno = '%1'").arg(wi.Courseinfolist.at(row).Cno));
query.exec(Command);
query.next();
for (int column = 0; column < 3; ++column)
{
QModelIndex index = model->index(row, column, QModelIndex());
model->setData(index, query.value(column));
}
}
}
case 4:
{
QString setinfo;
setinfo += QString(tr("班级信息:\n"));
setinfo += QString(tr("系别 : %1 班级 : %2 人数 : %3\n").arg(wi.Sdept)).arg(wi.Sclass).arg(ui->Peoplelabel->text());
setinfo += QString(tr("将安排以下课程:\n"));
for (int row = 0; row < wi.Courseinfolist.size(); ++row)
{
QSqlQuery query;
QString Command = QString(tr("SELECT Cno,Cname,Ccredit FROM Course Where Cno = '%1'").arg(wi.Courseinfolist.at(row).Cno));
query.exec(Command);
query.next();
setinfo += QString(tr("%1 %2 %3学分 每周%4课时 %5 %6 %7\n").arg(query.value(0).toString()).arg(query.value(1).toString()).arg(query.value(2).toString()))
.arg(wi.Courseinfolist.at(row).numweek)
.arg(wi.Courseinfolist.at(row).isMultimedia?tr("需要多媒体教室"):"")
.arg(wi.Courseinfolist.at(row).notin5?tr("不安排在第5节课"):"")
.arg(wi.Courseinfolist.at(row).atdept?QString(tr("安排在系教学楼 %1").arg(wi.RMdept)):"");
}
ui->SetinfotextBrowser->setText(setinfo);
//检查
QString Checkinfo;
seterror = false;
int classtimecount = 0;
for (int row = 0; row < wi.Courseinfolist.size(); ++row)
{
classtimecount += wi.Courseinfolist.at(row).numweek;
}
if(classtimecount > 25)
{
Checkinfo += tr("总课时数不正确 ,已经超过一周最大课时数25.\n");
seterror = true;
}
classtimecount = 0;
for (int row = 0; row < wi.Courseinfolist.size(); ++row)
{
if(wi.Courseinfolist.at(row).notin5)
{
classtimecount += wi.Courseinfolist.at(row).numweek;
}
}
if(classtimecount > 20)
{
Checkinfo += tr("课时数不正确 ,白天课时数超过一周最大值20.\n");
seterror = true;
}
QSqlQuery query;
QString Command = QString(tr("SELECT RMno FROM Classroom Where RMcapacity >= %1").arg(ui->Peoplelabel->text().toInt()));
query.exec(Command);
if(!query.next())
{
Checkinfo += tr("班级人数过多 ,不存在教室可容纳%1 人.\n").arg(ui->Peoplelabel->text().toInt());
seterror = true;
}
Command = QString(tr("SELECT RMno FROM Classroom Where RMcapacity >= %1 AND RMtype = '多媒体教室'").arg(ui->Peoplelabel->text().toInt()));
query.exec(Command);
if(!query.next())
{
Checkinfo += tr("班级人数过多 ,不存在多媒体教室可容纳%1 人.\n").arg(ui->Peoplelabel->text().toInt());
seterror = true;
}
Command = QString(tr("SELECT RMno FROM Classroom Where RMcapacity >= %1 AND RMlocat = '%2'").arg(ui->Peoplelabel->text().toInt())).arg(wi.RMdept);
query.exec(Command);
if(!query.next())
{
Checkinfo += tr("班级人数过多 ,在教学楼 %1 中不存在教室可容纳%2 人.\n").arg(wi.RMdept).arg(ui->Peoplelabel->text().toInt());
seterror = true;
}
Command = QString(tr("SELECT RMno FROM Classroom Where RMcapacity >= %1 AND RMlocat = '%2' AND RMtype = '多媒体教室'").arg(ui->Peoplelabel->text().toInt())).arg(wi.RMdept);
query.exec(Command);
if(!query.next())
{
Checkinfo += tr("班级人数过多 ,在教学楼 %1 中不存在多媒体教室可容纳%2 人.\n").arg(wi.RMdept).arg(ui->Peoplelabel->text().toInt());
seterror = true;
}
if(seterror)
{
Checkinfo += tr("检查过程发现若干错误,请返回前几步修改设置.\n");
}
else
{