1.项目介绍
开发环境:qt6.5.2
不带数据库,学生信息为文件存储和操作。
主要功能:登录,学生信息导入,增删改查学生信息,根据学号,单科成绩,总成绩排序,用户显示,查看平均成绩与不及格,及格,优... ...的占比。
权限规划:管理员,老师,学生。管理员有上述全部功能,老师没有用户显示功能,学生没有用户显示,增删改学生信息功能。
演示视频Qt C++不带数据库的学生管理系统_哔哩哔哩_bilibili
2.功能实现
登录三个权限设置三个账号写死,登录不同权限显示不同界面。学生信息放在.txt文件里,由“,”分割开(用.csv文件会乱码,未解决),代码内用QList<QStringList>存储和操作。
1.学生信息导入
清空QList<QStringList> m_stu,清空QString filePath,打开文件对话框,选择存放学生信息的.txt文件,按行读取,逗号分割,存入QList<QStringList> m_stu。
m_stu.clear();
m_filePath.clear();
m_filePath = QFileDialog::getOpenFileName(nullptr,"打开");//文件对话框可自选文件
if(!m_filePath.isEmpty()){
QFile f(m_filePath); //创建文件对象
f.open(QFile::ReadOnly); //只读方式打开
while(!f.atEnd()){
QString str = f.readLine(); //一行读取
auto l = str.split(","); //逗号分割每一个元素
if(l.size() != 10){ //一行10个元素
QMessageBox::information(nullptr,"信息","导入失败");
return;
}
l[l.size()-1] = l[l.size()-1].chopped(2);//去除两位的换行符
m_stu.push_back(l);
}
updTableWidget();
f.close();
}
2.增添学生,修改学生
函数void DlgAdd::setType(bool isAdd, QStringList stu)判断是增添还是修改(传入true为添加,false为修改),增添时显示的模态对话框全部为空(stu传递空),修改时显示的模态对话框会显示所点击所在行的信息(stu保存所点击行信息)。最后点击保存,对话框已经知道是添加还是修改,所以以信号和槽的方式传递不同信号,widget界面会调用不同函数,来对QList<QStringList> m_stu执行不同操作。最后写入文件,刷新界面。
if(m_isAdd){
emit add(stu); //增添
}
else{
emit upd(stu);//修改
}
3.删除学生
获得点击行的行号,删除m_stu的对应下标的QStringList,写入文件,刷新界面。
4.搜索学生
获取lineEdit输入的信息,为空时消息对话框提示,并刷新界面。根据姓名查询学生信息,遍历m_stu,用contain()函数模糊查询,显示新的tableWidget。
5.各种排序
基于冒牌排序,根据不同信息对m_stu排序,显示新的tableWidget。
6.显示用户
主要是为了区分出管理员的权限,账号写死,直接显示新的tableWidget。
7.平均成绩与占比
对m_stu遍历,计算平均分,统计不同优良不及格的个数,计算占比,显示新的tableWidget。
8.写入文件
前面多次调用过本函数了,将m_stu写入.txt文件。
QFile file(m_filePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text){
return;
}
QTextStream out(&file);
for (const auto& strList : m_stu){
out << strList.join(",") << "\n";
}
file.close();