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

news/2024/7/8 0:25:47

摘 要
在信息技术不断推陈出新的背景下, 针对传统人工管理学生信息方式效率低, 提出一种基于 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 <QDialog>
#include <QWidget>
#include <QFile>
#include <QMessageBox>
#include <QtDebug>
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;//找到
}

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


http://lihuaxi.xjx100.cn/news/7609.html

相关文章

帅呆了!Kafka移除了Zookeeper!

普天同庆!最新版的Kafka 2.8.0&#xff0c;移除了对Zookeeper的依赖&#xff0c;通过KRaft进行自己的集群管理。很好很好&#xff0c;终于有点质的改变了。 一听到KRaft&#xff0c;我们就想到了Raft协议。Raft协议是当今最流行的分布式协调算法&#xff0c;Etcd、Consul等系统…

JS 对象之扩展、密封和冻结

有时候我们写了一个js库&#xff0c;里面有一些核心对象&#xff0c;我们希望在开发过程中这个核心对象不被修改&#xff0c;这时候就要防止该对象被篡改&#xff0c;以达到保护对象属性的目的&#xff0c;可通过以下三个方法去实现 一、扩展 语法&#xff1a;Object.prevent…

Liunx 部署后端服务jar包脚本

1.停止指定端口进程&#xff0c;部署服务 #!/bin/bash # jar包名称 app_namedigital-service-1.0-SNAPSHOT.jar # 服务器jar包路径 app_path/home/jar/ # 指定端口 app_port9199 # 杀掉指定端口的应用进程 pidnetstat -apn|grep $app_port|awk {print $7}|cut -d/ -f1 echo &qu…

软件测试的学习笔记(1)

一、认识 1.什么是软件测试&#xff1f; 软件测试就是软件测试人员验证软件是否满足用户的需求。 2.软件测试和软件开发的区别&#xff1f; &#xff08;1&#xff09;本身 开发&#xff1a;广度小&#xff0c;专业度高 测试&#xff1a;所需要技能比较…

MySQL数据库之用户管理

一、mysql中常见的的约束/规则 ① 主键约束&#xff08;primary key&#xff09; ② 外键约束&#xff08;foreign key&#xff09;&#xff1a; 如果同一个属性字段在表一中为主键&#xff0c;而在表二中不是主键&#xff0c;则字段称为表二的外键。 ③ 非空约束&#xff08;…

凌恩项目文章|ISMEC:根际菌群移植筑起番茄根际免疫新防线

植物根际定殖着大量有益微生物&#xff0c;在植物抗病能力形成过程中发挥着关键作用&#xff0c;能否把抗病植物根际微生物组移植给感病品种&#xff0c;提升其根际免疫能力已成为热点问题。凌恩客户南京农业大学沈其荣院士团队和广西农科院蔬菜研究所王益奎副所长团队合作在IS…

多商户商城系统功能拆解43讲-平台端应用-客服话术

多商户商城系统&#xff0c;也称为B2B2C&#xff08;BBC&#xff09;平台电商模式多商家商城系统。可以快速帮助企业搭建类似拼多多/京东/天猫/淘宝的综合商城。 多商户商城系统支持商家入驻加盟&#xff0c;同时满足平台自营、旗舰店等多种经营方式。平台可以通过收取商家入驻…

Java:BIO、NIO、AIO

很多文章在谈论到BIO、NIO、AIO的时候仅仅是抛出一堆定义&#xff0c;以及一些生动的例子。看似很好理解。但是并没有将最基础的本质原理显现出来&#xff0c;如果没有没有从IO的原理出发的话是很难理解这三者之间的区别的。所以本篇文章从Java是如何进行IO操作为开头进行分析。…