基于Linux下的QT学生管理系统

基于Linux下的QT学生管理系统

1.项目背景
随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种各样的信息量也成倍的增长。面对庞大的信息量,就需要有学生信息管理系统来提高学生管理工作的效率。通过这样的系统,可以做到信息的管理、科学统计和快速的查询,从而减少管理方面的工作量,从而提高管理效率。所以该项目开发的系统为学校学生信息管理系统,以便方便管理学生信息。

2 系统分析与设计
2.1 需求分析
2.1.1 系统概要
利用QT Creator编程环境编写一个简单的学生信息管理系统,直接对.txt文本进行操作,实现对学生信息的增,删,改,查功能,本系统直接用TXT文本来储存学生数据。本系统还具有学生管理员登陆和注册功能,通过TXT文本来储蓄学生管理员信息,以便下次管理员登陆学生管理系统,管理学生信息。
2.1.2 总体设计
二.总体设计
在窗口刚跳出来时,出现的是管理员登陆界面,点击登陆按钮可以直接进入学生管理系统的管理界面,而点击注册按钮则跳转的是管理员注册界面,注册界面有用户名、密码框、确认密码框,如果注册成功该管理员的信息会记录到管理员TXT文本中。而在学生管理界面中:
在左边的QTextEdit对象中显示所有学生的信息,学生的信息被保存在student.txt文件中。右边是几个QPushButton,分别实现增,删,改,查功能。还有一个QLineEdit,用来编辑学生信息。
1.增加学生信息:在行编辑器内输入学生的信息,点击“增加”按钮,该生的信息就会被写入student.txt文件,并且将增加后的所有的学生信息显示在窗口的QTextEdit对象中。
2.删除学生信息:在行编辑器内输入学生的信息,点击“删除”按钮,该生的信息就会从student.txt文件中删除,并且将删除后的所有的学生信息显示在窗口的QTextEdit对象中。
3.修改学生信息:在行编辑器内输入学生的信息,点击“修改”按钮,该生的新的信息就会被写入文件,并且将修改后的所有的学生信息显示在窗口的QTextEdit对象中。
4.查找学生信息:在行编辑器内输入学生的学号,点击“查找”按钮,该生的信息会显示在窗口上。(如图2.1.2系统流程图)
在这里插入图片描述
2.2 功能模块介绍
2.2.1 管理员注册注册、登陆模块
注册模块:通过语句QFile file(“guanlirenyuan.txt”);
file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append); 创建一个文本文件,然后通过设置只写功能,将管理员的用户名密码数据储存到guanlirenyuan.txt文本中。QString xingming=ui->namelineEdit->text();
int password=ui->passwlineEdit->text().toInt();
int repassword=ui->repasswlineEdit->text().toInt();通过用户名lineEdit,密码lineEdit,确认密码lineEdit,来输入管理员信息。
登录模块:通过QFile file(“guanlirenyuan.txt”);file.open(QIODevice::ReadOnly|QIODevice::Text);语句打开管理员数据文本,并将文本的打开方式的设为只读模式。在文本流中,QTextStream重载了两种运算符以简化输入输出流的用法,运算符<<被称为插入符,顾名思义,是往该流对象中插入数据。另一个运算符>>被称之为提取符,即从流对象中提取出数据。然后通过QTextStream来读取管理员TXT文本文件中的数据inp >> xingming >>password >>repassword;然后通过if判断如果用户名和密码与管理TXT文本数据相匹配则通过跳转槽函数,跳转到管理学生信息界面,如果不匹配则弹出QMessageBox提示窗口,提示密码或用户名错误。
2.2.2 添加学生信息模块
QFilefile(“student.txt”)file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append);通过以上数据创建一个student.txt文本来储存学生的信息,将文件设置只写功能,通过QTextStream out(&file);out<< name<<" “<<sex<<” “<<id<<” “<<linux1<<” “<<c<<” “<< “\n”;语句将学生的姓名、性别、学号、Linux成绩、c++成绩插入到student.txt文本中,从而实现添加学生信息模块,添加完学生信息后file.close();关闭文件流,以防数据丢失,核心代码如下:
QFile file(“student.txt”);
file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append);
if(!file.isOpen()){
QMessageBox::about(NULL, “message”, “Failed to open data file”);
return;
}
QTextStream out(&file);
out<< name<<” “<<sex<<” “<<id<<” “<<linux1<<” “<<c<<” "<< “\n”;
file.close();
2.2.3 查询学生信息模块
用语句打开student.txt文本,并将文本设置打开的方式为只读QFile file(“student.txt”);file.open(QIODevice::ReadOnly|QIODevice::Text);通过学生的学号来查询学生的信息,如果学号与student.txt文本文档的学号信息相匹配则,通过setText方法将学生姓名、成绩等信息显示到label上,这样就简单的实现了学生信息的查询功能,核心代码如下:
while(!inp.atEnd()){
QString name;
QString sex;
int id,linux1,c;
inp >>name >>sex >>id >>linux1 >>c;
allstudentinfo.push_back(studentinfo(name, sex,id,linux1, c ));

   }
   allstudentinfo.pop_back();
   file.close();
   int id=ui->idlineEdit->text().toInt();
   bool flag=false;

for(auto i:allstudentinfo){
if(id==i.getid()){
ui->nalabel->setText(i.getname());
ui->selabel->setText(i.getsex());
ui->lilabel->setText(QString::number(i.getlinux1()));
ui->clabel->setText(QString::number(i.getc()));
ui->avglabel->setText(QString::number(i.getavg()));
flag = true;
break;
}
2.2.4 删除学生信息模块
用语句打开student.txt文本,并将文本设置打开的方式为只读QFile file(“student.txt”);
file.open(QIODevice::ReadOnly|QIODevice::Text);通过for循环将学生信息从头到尾都遍历一遍相关语句为:for(QVector::iterator it = allstudentinfo.begin(); it != allstudentinfo.end()😉
然后通过学生的学号信息来遍历学生student.txt文本,如果student.txt文本的学号信息与要删除学生信息学号相匹配则通过 allstudentinfo.erase(it)删除该学生信息,并同时弹出信息删除成功消息,最后将文本流关闭以防数据丢失。核心代码:
for(QVector::iterator it = allstudentinfo.begin(); it != allstudentinfo.end()😉{
if(it->getid()==id){
allstudentinfo.erase(it);
flag = true;
}
else
it++;
}
if(flag){
QMessageBox::about(NULL,“message”,“delect sucess”);
file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate);
if(!file.isOpen()){
QMessageBox::about(NULL,“message”,“Data file open failed”);
return;
}
QTextStream out(&file);
for(auto i :allstudentinfo){
out << i.getname() <<" “<< i.getsex()<<” “<<i.getid()<<” “<<i.getlinux1() <<” "<< i.getc() << " " <<endl;
}
file.close();
}

2.2.5 修改学生信息模块
首先在lineEdit来向学生输入学生数据,然后通过设置QTextStream out(&file)类来向student.txt文本插入数据,来实现数据插入student.txt中。通过匹配学生学号来修改学生信息,如果学号与学生数据学生相匹配则通过out << i.getname() << " " << i.getsex() <<" “<< i.getid() << " " << i.getlinux1()<<” " << i.getc() << endl;语句将要修改的学生信息重新插入到student.txt,这样就实现了简单的学生数据修改功能,核心代码:
for(QVector::iterator it = allstudentinfo.begin();it!=allstudentinfo.end();it++){
if(it->getid() ==id){
it->setname(name);
it->setsex(sex);
it->setc©;
it->setlinux(linux1);
flag=true;
}
}
if(flag){
QMessageBox::about(NULL,“message”,“Modification successful”);
file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate);
if(!file.isOpen()){
QMessageBox::about(NULL,“message”,“Failed to open data file”);
return;
}
QTextStream out(&file);
for(auto i :allstudentinfo){
out << i.getname() << " " << i.getsex() <<" “<< i.getid() << " " << i.getlinux1()<<” " << i.getc() << endl;
}
file.close();
}else {
QMessageBox::about(NULL,“message”,“Id does not exist!”);
2.2.6 添加时间模块
设置时间事件,通过TextLable显示时间,在每个窗口都设置时间事件核心代码:
oid chaxun::timerEvent(QTimerEvent *event)
{ QDate date = QDate::currentDate();
QTime tm = QTime::currentTime();
ui->label_2->setText(date.toString("yyyy-MM-dd ")+ tm.toString(“hh:mm:ss”));
}
本学生管理系统是用txt文件来存放数据而不是数据库,在以后我会继续完善此项目,尽量用数据库来的存放学生数据,并在数据库层面上对数据进行增删改查的操作,由于本项目代码过多我就不一一附上了,如果有需要该项目作为参考的同学可以私信我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章