【Qt C++】不带数据库的学生管理系统

本文详细描述了一个使用Qt6.5.2开发的无数据库学生管理系统,包括登录、学生信息管理(导入、增删改查)、权限划分(管理员、老师、学生),以及文本文件操作、数据排序、用户显示等功能的实现过程。
摘要由CSDN通过智能技术生成

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

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值