Qt学生管理系统选课功能的实现

阅读: 评论:0

Qt学生管理系统选课功能的实现

Qt学生管理系统选课功能的实现

本人只是Qt小白,最近在做期末大作业——学生管理系统的时候发现实现选课功能的时候走了很多弯路,因此写了这篇文章,帮助和当时的我一样不会写选课的朋友们~功能比较简单,但是可以解燃眉之急。

最终效果

这是我的选课界面。因为比较懒,所以设置了一旦选课不得退课要求(如果后期实现了退课会更新在后面)

当我勾选选课勾选框之后,会把该课添加到第一页的课程界面(这里以勾选编号0004的选修课为例)

因为是刚选的课,所以我把得分都设置为了0。

实现方法

选修课的储存

这里我定义了一个储存course类型的vector数组optcourseForAll;course结构体的定义也放在下面了;

struct course{QString c_name;//课程名字QString teacher;QString score;//学分QString grades;//成绩QString number;//课程编号course(QString name,QString teacher,QString score,QString g,QString num){c_name=name;this->teacher=teacher;this->score=score;this->grades=g;this->number=num;}course& operator=(const course& other) {if (this != &other) { // 避免自我赋值this->c_name = other.c_name;this->teacher = acher;this->score = other.score;this->grades = ades;this->number = other.number;}return *this; // 返回引用,以便可以连续赋值}};

我在初始化的时候选择了比较原始的方法,先把这些课程的名字放在list5中,再让gpt帮我想了一些虚拟的老师的名字,然后储存到list6中;最后全部放到optcourseForAll中。

    //选修课初始化QStringList list5;//artlist5<<"中国古代文学";list5<<"中国现代文学";list5<<"外国文学";list5<<"历史学";list5<<"哲学";list5<<"社会学";list5<<"政治学";list5<<"法学";list5<<"经济学";list5<<"管理学";list5<<"线性代数";list5<<"概率论与数理统计";list5<<"大学物理";list5<<"大学化学";list5<<"大学生物学";list5<<"计算机科学";list5<<"电子技术";list5<<"机械设计";list5<<"建筑设计";list5<<"篮球";list5<<"足球";list5<<"乒乓球";list5<<"羽毛球";list5<<"游泳";list5<<"田径";list5<<"健身操";list5<<"瑜伽";list5<<"跆拳道";list5<<"武术";list5<<"西班牙语";list5<<"日语";list5<<"诗词中的音乐";QStringList list6;list6<<"李华阳";list6<<"张子萱";list6<<"王思敏";list6<<"刘欣怡";list6<<"赵文博";list6<<"绥佳悦";list6<<"周凯旋";list6<<"吴梦婷";list6<<"郑博文";list6<<"陈韵熙";list6<<"林子涵";list6<<"谭雅琪";list6<<"宋宇轩";list6<<"杨瑾瑜";list6<<"马浩然";list6<<"张晨曦";list6<<"赵立诚";list6<<"孙磊岩";list6<<"周洁如";list6<<"吴佳霓";list6<<"郑凯风";list6<<"李娜莎";list6<<"王浩宇";list6<<"陈曦蕾";list6<<"林雪瑶";list6<<"谭超然";list6<<"宋翔宇";list6<<"杨莉娜";list6<<"马奔腾";list6<<"张思琪";list6<<"赵梓宇";list6<<"孙悦心";for(int i=0;i<list5.size();i++){int num=4;QString number1;if(num+i<10){number1="000"+QString::number(num+i);}else  number1="00"+QString::number(num+i);course temp(list5[i],list6[i],"2","0",number1);optcourseForAll.push_back(temp);}

ui界面

在ui界面,我选择了使用tabwidget和tablewidget相结合的方式来实现分页和表格

tablewidget设置

            ui->tableWidget_2->setRowCount(Widget::optcourseForAll.size());//设置行数ui->tableWidget_2->setColumnCount(5);//设置列数QStringList labels2;QString str2;QTableWidgetItem *item2;labels2<<"课程编号"<<"课程名称"<<"授课教师"<<"学分"<<"选课状态";ui->tableWidget_2->setHorizontalHeaderLabels(labels2);//设置表头for(int i=0;i<Widget::optcourseForAll.size();i++){for(int j=0;j<ui->tableWidget_2->columnCount();j++){if(j==0){str2=Widget::optcourseForAll[i].number;qDebug()<<Widget::optcourseForAll[i].number;item2=new QTableWidgetItem(str2);ui->tableWidget_2->setItem(i,j,item2);ui->tableWidget_2->item(i,j)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//设置居中显示}else if(j==1){str2=Widget::optcourseForAll[i].c_name;item2=new QTableWidgetItem(str2);ui->tableWidget_2->setItem(i,j,item2);ui->tableWidget_2->item(i,j)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);}else if(j==2){str2=Widget::optcourseForAll[i].teacher;item2=new QTableWidgetItem(str2);ui->tableWidget_2->setItem(i,j,item2);ui->tableWidget_2->item(i,j)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);}else if(j==3){str2=Widget::optcourseForAll[i].score;item2=new QTableWidgetItem(str2);ui->tableWidget_2->setItem(i,j,item2);ui->tableWidget_2->item(i,j)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);}else if(j==4){QTableWidgetItem *check=new QTableWidgetItem;check->setText("选课");check->setCheckState(Qt::Unchecked);ui->tableWidget_2->setItem(i,j,check);ui->tableWidget_2->item(i,j)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);}}}ui->tableWidget_2->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//设置列宽自适应ui->tableWidget_2->setSelectionBehavior(QAbstractItemView::SelectRows);//设置整行选中ui->tableWidget_2->setEditTriggers(QAbstractItemView::NoEditTriggers);//双击禁止修改

其他都比较简单,重点在于j=4的时候插入checkBox的方式。

输入完以上代码,你就能看到这个界面了

checkBox状态检测

接下来是实现选课功能的重点,如何做到当勾选一个选课勾选框之后,能马上在“课程信息”界面显示出我们选的课呢?这里用到了connect函数

这里的changeTest函数要求先在头文件的private slots里面声明:

函数具体实现如下:就是先把显示课程信息的tablewidget先用clear()清空,再显示一遍。

void mainPage::changeTest(int row, int col){qDebug()<<Widget::student.schedule.size();if(ui->tableWidget_2->item(row, col)->checkState() == Qt::Checked)//如果选中{Widget::student.schedule.push_back(Widget::optcourseForAll[row]);//把这个选修课添加到学生课表里面ui->tableWidget->clear();//清空页面//以下是重新显示“课程信息”界面的代码ui->tableWidget->setRowCount(Widget::student.schedule.size());ui->tableWidget->setColumnCount(5);QStringList labels;labels<<"课程编号"<<"课程名称"<<"授课教师"<<"学分"<<"成绩";ui->tableWidget->setHorizontalHeaderLabels(labels);QString str1;QTableWidgetItem *newItem1;for(int i=0;i<Widget::student.schedule.size();i++){for(int j=0;j<ui->tableWidget->columnCount();j++){if(j==0){str1=Widget::student.schedule[i].number;}else if(j==1){str1=Widget::student.schedule[i].c_name;}else if(j==2){str1=Widget::student.schedule[i].teacher;}else if(j==3){str1=Widget::student.schedule[i].score;}else if(j==4){str1=Widget::student.schedule[i].grades;}newItem1=new QTableWidgetItem(str1);ui->tableWidget->setItem(i,j,newItem1);ui->tableWidget->item(i,j)->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);}}ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//设置整行选中ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//双击禁止修改}
}

本文发布于:2024-01-30 13:57:46,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170659427020490.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:管理系统   功能   学生   Qt
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23