学生信息管理系统,代码与设计流程详解 您所在的位置:网站首页 学生管理系统用户界面设计图 学生信息管理系统,代码与设计流程详解

学生信息管理系统,代码与设计流程详解

2024-07-11 09:13| 来源: 网络整理| 查看: 265

学生信息管理系统,代码与设计流程详解——C++(Qt) 前言

本篇文章主要讲解了整个学生系统的设计流程和思路,基于C++和Qt图形界面。是大二上学期的C++课程设计,主要使用类和链表以及Qt的基础控件的使用,可能会存在一些漏洞,欢迎相互学习和指正。

0.部分功能界面展示 初始界面在这里插入图片描述导入界面 在这里插入图片描述打开界面 在这里插入图片描述查找界面 在这里插入图片描述统计界面 在这里插入图片描述 1.学生类 class CStudent { public: /*学生信息(数据域)*/ int ID; //学号 QString name; //名字 QString gender; //性别 int age; //年龄 QString college; //学院 float Math; //高数成绩 float English; //英语成绩 float Cpp; //C++成绩 CStudent *next; //指针域 CStudent(); //构造函数 //CStudent(string na,float math); ~CStudent(); //析构函数 QString Jud_Grade(float gr); CStudent operator=(CStudent &s); //运算符重载 }; CStudent CStudent::operator=(CStudent &s) { CStudent s1; s1.ID = s.ID; s1.name = s.name; s1.gender = s.gender; s1.age = s.age; s1.college = s.college; s1.Math = s.Math; s1.English = s.English; s1.Cpp = s.Cpp; return s1; } QString CStudent::Jud_Grade(float gr) { if (gr>=90.0&&gr= 80.0&&gr = 70.0&&gr = 60.0&&gr = 0&&gr /*初始化结点*/ head = new CStudent; if (!head) { cout temp = p; p = p->next; delete temp; } delete head; } int CStudentlist::Stu_num() { CStudent *s = head; int count = 0; if (s->next == NULL) return 0; else count = 1; s = s->next; //指向首元结点 while (s->next != NULL) { count++; s = s->next; } return count; //返回结点个数即学生个数 } CStudent *CStudentlist::Stu_find(int i) { CStudent *s = head; int j = 0; while ((s->next != NULL) && (j cout s1 = s1->next; } if (!s2) exit(1); //申请失败则退出 else { s2 = stu; //此时用到运算符重载 s2->next = NULL; s1->next = s2; } } void CStudentlist::Stu_del(int i) { CStudent *s1 = Stu_find(i - 1); //找i-1结点 if ((s1 != NULL) && (s1->next != NULL)) { CStudent *s2 = s1->next; //调整指针域 s1->next = s2->next; delete s2; } else cout CStudent *s = head->next; for (int i = 1;i Q_OBJECT public: QtStu_System(QWidget *parent = Q_NULLPTR); ~QtStu_System(); void create_new(); //创建窗口 void widget_return(); //返回窗口 void file_open(); //文件打开 private: Ui::QtStu_SystemClass *ui; QtStu_list *ne_list; }; 然后继续使用设计器设计主界面 在这里插入图片描述 其实就是表格加按钮 初始界面代码extern CStudentlist Stu; int a = 0; QtStu_System::QtStu_System(QWidget *parent) : QWidget(parent) { ui->setupUi(this); setWindowTitle("Stu_System"); connect(ui->Button_close, &QPushButton::clicked, this, &QtStu_System::close); //关闭主窗口 ne_list = new QtStu_list; connect(ui->Button_new, &QPushButton::clicked, this, &QtStu_System::create_new); //新建窗口 connect(ui->Button_open, &QPushButton::clicked, this,&QtStu_System::file_open); connect(ne_list,&QtStu_list::re_signal,this, &QtStu_System::widget_return); } QtStu_System::~QtStu_System() { delete ne_list; } void QtStu_System::create_new() { int stu_num = Stu.Stu_num(); //得到学生数量 for (int i = 1;i ne_list->hide(); //新建框窗口关闭 this->show(); //本窗口打开 } 关键就是在新建的时候,确保把链表中的学生全部删除,然后关闭本窗口,打开主界面。 4.打开文档导入学生 我的这个系统就两个创建的模式,一是新建,二就是导入提前写好的txt文档。图片见第0步相关代码void QtStu_System::file_open() { //CStudentlist Stu; int stu_num=0; //学生数量 int id; //学号 QString na; //名字 QString ge; //性别 int ag; //年龄 QString co; //学院 float Ma; //高数成绩 float En; //英语成绩 float Cp; //C++成绩 QString path = QFileDialog::getOpenFileName(this, "save", "../", "BIN(*.bin)");//TXT(*.txt)||BIN(*.bin) try { if (path.isEmpty() != false) { throw a; } //关联文件对象 QFile file(path); bool isok = file.open(QIODevice::ReadOnly); if (true == isok) { //创建数据流,和file文件关联 //往数据流中读数据,相当于往文件里读数据 QDataStream stream(&file); //创建二进制流 /*通过行读取统计学生个数*/ while (stream.atEnd() == 0) { stream >> id >> na >> ge >> ag >> co >> Ma >> En >> Cp; qDebug() int stu_num = 0; stu_num = Stu.Stu_num(); //得到学生数量 qDebug() int stu_num = 0; //学生数量 int id; //学号 QString na; //名字 QString ge; //性别 int ag; //年龄 QString co; //学院 float Ma; //高数成绩 float En; //英语成绩 float Cp; //C++成绩 QString path = QFileDialog::getOpenFileName(this, "save", "../", "TXT(*.txt)");//TXT(*.txt)||BIN(*.bin) if (path.isEmpty() == false) { //关联文件对象 QFile file(path); bool isok = file.open(QIODevice::ReadOnly); if (true == isok) { //创建数据流,和file文件关联 //往数据流中读数据,相当于往文件里读数据 QTextStream stream(&file); QTextCodec *codec = QTextCodec::codecForName("UTF-8"); //设置中文编码 stream.setCodec(codec); //QDataStream stream(&file); //创建二进制流 /*通过行读取统计学生个数*/ while (stream.atEnd() == 0) { stream >> id >> na >> ge >> ag >> co >> Ma >> En >> Cp; na = codec->fromUnicode(na); ge = codec->fromUnicode(ge); co = codec->fromUnicode(co); qDebug() QString d_name; bool a =0; int i = 0; d_name = d.get_text(); //qDebug() a = 1; break; } } if (a == 0) { e.show(); } if (a) { Stu.Stu_del(i); //链表删除学生 Set_Text(); d.hide(); } } 其实抛开图形界面,真的没有特别复杂。就是找到这个学生的名字,把他在学生的链表中删除,然后在更新界面即可。当然,找不到学生你也可以新创一个窗口e.show(),我这里就不展示了。 9.设计功能:查找 查找即查找学生,并且显示学生的一定信息。首先要设计查找学生的界面,图片在第0步有展示相关代码 void QtStu_find::Stu_find() { int F_id; int i = 0; int a = 0; CStudent *s; F_id = ui_Find->lineEdit->text().toInt(); for (i = 1;i a = 1; break; } } if (a == 0) { e1.show(); } if (a) { ui_Find->label_name->setText(s->name); ui_Find->label_gender->setText(s->gender); ui_Find->label_age->setText(QString::number(s->age)); ui_Find->label_co->setText(s->college); ui_Find->label_ma->setText(QString::number(s->Math)); ui_Find->label_en->setText(QString::number(s->English)); ui_Find->label_cp->setText(QString::number(s->Cpp)); ui_Find->label_mag->setStyleSheet("color: red"); ui_Find->label_eng->setStyleSheet("color: red"); ui_Find->label_cpg->setStyleSheet("color: red"); ui_Find->label_mag->setText(s->Jud_Grade(s->Math)); ui_Find->label_eng->setText(s->Jud_Grade(s->English)); ui_Find->label_cpg->setText(s->Jud_Grade(s->Cpp)); if ((s->Math + s->English + s->Cpp) / 3 >= 80.0) { ui_Find->label_bad->hide(); ui_Find->label_good->show(); } else { ui_Find->label_good->hide(); ui_Find->label_bad->show(); } } } 繁杂的主要是图形界面信息的设置,其实就是利用了链表的查找学生的函数,然后把学生的信息放到一个个框里面。学生等级设定的代码可以看看第1步。 10.设计功能:统计 首先利用图形设计器设计好窗口,窗口展示见第0步。相关代码void QtStu_count::Click_fen() { QBarSet *set1 = new QBarSet("数学"); QBarSet *set2 = new QBarSet("英语"); QBarSet *set3 = new QBarSet("C++"); *set1 for (i = 1;i for (i = 1;i for (i = 1;i int i = 0; int num = 0; CStudent *s; if (str == "Math") { for (i = 1;i for (i = 1;i for (i = 1;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有