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