• 基于C++QT5的学生信息综合管理系统


    摘 要
    在信息技术不断推陈出新的背景下, 针对传统人工管理学生信息方式效率低, 提出一种基于 C++ 语言的学生信息管理系统。
    本设计主要通过使用 C++ 程序设计语言,按照大作业的相关要求在实现增删改查功能时,数据结构均采用链表实现,同时程序均采用文件将信息储存,也设计了具有分角色使用或管理系统功能。
    设计程序时首先完成了 win32 位窗口程序的设计,在 win32 位窗口程序的代码基础之上,利用 QT5 框架完成了图形化 (GUI) 的改造,使之更加符合用户的使用习惯,并且支持在不同系统环境下的使用。本程序设计是在单机情况下的较为完善的学生信息管理系统。

    关 键 词: 学生信息管理系统,链表,C++,图形化程序设计,QT5 开发

    山东大学(威海)大作业报告

    ABSTRACT
    Under the background of continuos innovation of information technology, aiming at the low efficiency of manual management of student information, a student information management system based on C++ programming language is proposed.
    This design uses the C++ programming language, according to the relevant requirements of major works. When implementing the ad- dition, deletion, modification and inspection functions, the data struc- ture is implemented by a linked list. At the same time, the program uses files to store the information. A role-based use or management system is also designed.
    When designing the program, the design of win32-bit windows program was first completed. On the basis of the code of the win32- bit windows program, the QT5 framework was used to complete the graphical (GUI) transformation to make it more in line with the user’s habits and support different Use in system environment. This pro- gram design is a relatively complete student information management system under the stand-alone situation.

    Key words: student information management system,linked list,C++,GUI,QT5

    目 录
    一、项目分工情况 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
    二、系统需求分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
    三、系统概要分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
    (一)对于 win32 位程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1. 程序运行架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
    2. 代码文件组成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
    3. 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
      (二)对于 GUI 程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
    4. 程序运行架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
    5. 代码文件组成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
    6. 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    四、win32 位界面系统代码设计 10
    (一)增加学生信息函数 10
    (二)输入学生信息函数 10
    (三)输出学生信息函数 11
    (四)删除学生信息函数 11
    (五)修改学生信息函数 13
    (六)查找学生信息函数 13
    (七)将成绩按照从大到小排序函数 14
    (八)将学号按照从小到大排序 14
    (九)设置排名函数 16
    (十)登录菜单设计 16
    五、图形化界面系统代码设计 17
    (一)登录界面设置 17
    (二)菜单界面设计 17
    山东大学(威海)大作业报告
    (三)各功能界面设计 18
    1.添加学生信息 18
    2.查询学生信息 19
    3.删除学生信息 19
    4.修改学生信息 19
    5.学生信息排序 20
    6.node 类中的函数实现 20
    六、系统实现情况 21
    (一)win32 位程序 21
    (二)图形化界面程序 34
    七、系统程序调试 38
    (一)win32 位系统设计 38
    1.SetScore() 函数 38
    2.DeleteStudent() 函数 38
    3.ChangeStudent() 函数 38
    4.InputStudent() 函数 39
    5.OutputStudent() 函数 39
    6.AddStudent() 函数 39
    7.menu_login() 函数 39
    (二)图形化程序设计 40
    1.addstudentwidget 类 40
    2.mainwidget 类 40
    3.modifywidget 类 40
    4.node 类 40
    5.登录界面 40
    八、总结与不足 41
    参考文献 42
    谢辞 43

    #include "node.h"
    
    #include 
    #include 
    #include 
    #include 
    #include 
    Node::Node() {
    
    }
    
    void Node::InputStudent() {
    	QFile file("stuinfo.txt");
    	file.open(QIODevice::ReadOnly|QIODevice::Text);
    	if(!file.isOpen()) { //如果数据文件没有打开,弹出对话框提示用户
    		QMessageBox::about(NULL, "反馈", "数据文件打开失败");
    		return;
    	}
    	QTextStream inp(&file);
    	pHead = new NODE[sizeof(NODE)];
    	if (NULL == pHead) {
    		QMessageBox::about(NULL,"反馈","动态内存分配失败,无法修改删除!");
    		return;
    	}
    	PNODE pTail = pHead;//创建一个指向头结点的指针
    	pTail->pNext = NULL;//初始化指针的指针域为NULL
    	QString name;//姓名
    	long long number;//学号
    	QString age;//年龄
    	QString gender;//性别
    	QString address;//地址
    	long long tel; //电话号码 1XXXXXXXXXX
    	QString bir;//生日
    	double score;//学生成绩(0-100)
    	while(!inp.atEnd()) {
    		PNODE pNew = new NODE[sizeof(NODE)];
    		if (NULL == pNew) {
    			QMessageBox::about(NULL,"反馈","动态内存分配失败,无法修改删除!");
    			return;
    		}
    		inp>>name>>number>>age>>gender>>tel>>bir>>address>>score;
    		pNew->st.setname(name);//学生的姓名
    		pNew->st.setnumber(number);//学生的学号
    		pNew->st.setage(age);//学生的年龄
    		pNew->st.setgender(gender);//设置学生的性别
    		pNew->st.settel(tel); //设置学生的电话
    		pNew->st.setbir(bir);//设置学生的生日
    		pNew->st.setaddress(address);//设置学生的地址
    		pNew->st.setscore(score);//设置学生的成绩
    
    		pTail->pNext = pNew;//将pNew挂在老结点的后面
    		pTail = pNew;//将指针pTail移到pNew上
    		pTail->pNext = NULL;
    	}
    	file.close();
    }
    
    void Node::DeleteStudent(long long number) {
    	PNODE p, be, bp;
    	p = pHead->pNext;
    	if (number == p->st.getnumber()) {
    		pHead->pNext = pHead->pNext->pNext;
            delete[]pHead->pNext->pNext;//删除
    		QMessageBox::about(NULL,"反馈","已成功删除该学生信息!");
    	} else {
    		be = bp = p;
    		while (number != bp->st.getnumber() && bp->pNext != NULL) {
    			be = bp;
    			bp = bp->pNext;
    		}
    		if (number == bp->st.getnumber()) {
    			be->pNext = bp->pNext;
    			delete[]bp;
    			QMessageBox::about(NULL,"反馈","已成功删除该学生信息!");
    		} else
    			QMessageBox::about(NULL,"反馈","查无此人!");
    	}
    }
    
    void Node::OutputStudent() {
    	QFile file("stuinfo.txt");
    	file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate);
    	if(!file.isOpen()) { //如果数据文件没有打开,弹出对话框提示用户
    		QMessageBox::about(NULL, "反馈", "数据文件打开失败");
    		return;
    	}
    	QTextStream out(&file);
    	PNODE p = pHead->pNext;
        for(; p; p=p->pNext) {//输出
    		if(p->st.getname()=="") break;
    		out<<p->st.getname()<<" "<<p->st.getnumber()<<" "<<p->st.getage()<<" "<<p->st.getgender()<<" "<<p->st.gettel()<<" "<<p->st.getbir()<<" "<<p->st.getaddress()<<" "<<p->st.getscore()<<"\n";
    	}
    	file.close();
    }
    
    void Node::ChangeStudent(QString name,long long number,QString age,QString gender,long long tel,QString bir,QString address,double score) {
    	PNODE p = pHead->pNext;
    	bool flag = false;
    	for(; p; p = p->pNext) {
    		if(number==p->st.getnumber()) {
    			flag = true;
    			break;
    		}
    	}
    	if(flag == false) {
    		QMessageBox::about(NULL,"反馈","查无此人!");
    		return;
    	}
    	p->st.setname(name);//学生的姓名
    	p->st.setnumber(number);//学生的学号
    	p->st.setage(age);//学生的年龄
    	p->st.setgender(gender);//设置学生的性别
    	p->st.settel(tel); //设置学生的电话
    	p->st.setbir(bir);//设置学生的生日
    	p->st.setaddress(address);//设置学生的地址
    	p->st.setscore(score);//设置学生的成绩
    	QMessageBox::about(NULL,"反馈","已成功修改该学生信息!");
    
    }
    bool Node::SearchStudent(QString &name,long long number,QString &age,QString &gender,long long &tel,QString &bir,QString &address,double &score) {
    	PNODE p = pHead->pNext;
    	bool flag = false;
        for(; p; p = p->pNext) {//循环查找
    		if(number==p->st.getnumber()) {
    			flag = true;
    			name = p->st.getname();
    			age = p->st.getage();
    			gender = p->st.getgender();
    			address = p->st.getaddress();
    			tel = p->st.gettel();
    			bir = p->st.getbir();
    			score = p->st.getscore();
    			break;
    		}
    	}
    	if(flag == false) {
            return false;//没有找到
    	}
        return true;//找到
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    数据新增的常用方法(es6-es12)-今天一定要学会
    小程序Springboot基层慢性病信息管理系统毕业设计-附源码221550
    一文了解循环神经网络
    广义表基础知识
    去 BAT 面试完的 Spring 面试题(70 道,史上最全)
    MySQL半同步复制源码解析
    C++超复杂的构造和析构函数执行顺序详解
    计算机网络自学笔记008_Real(应用层)
    画CMB天图使用Planck配色方案
    loT行业生死竞速:Aqara绿米得用户得天下
  • 原文地址:https://blog.csdn.net/newlw/article/details/126847342