大一上学期C++课程设计——学生成绩管理系统(QT项目)
这里是一个大一的萌新!仅做学习分享
工程文件在评论区置顶!!
近期整理了一下大一上学期的课程设计报告作为学习总结,使用的软件是Qt Creator,主界面效果如下图
——————————以下为课程设计报告———————————
*学生成绩管理系统设计*
1 基本功能描述
学生成绩管理系统包括以下功能
(1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行统计。能统计学生人数、总分、单科的平均分等。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
(9)排序功能:可按总分和单科成绩排名次。
2 设计思路
如图是整个学生成绩管理系统的流程图,本程序使用QT来设计图形界面。
如流程图所示,在主函数中先创建一个主窗口类来作为功能导航,操作者可以在主窗口选择点击添加信息、查询和修改、统计和操作进入对应的子窗口来进行各项功能的使用
在添加学生窗口类中可以进行学生信息的录入,学号重复会有提示
在查询和修改窗口类中可以点击对应查询的条目显示出对应学号信息并选择修改或者删除,点击修改会进入到修改子窗口进行信息的修改
在统计和排序窗口类中可以查看到对应学生的各种信息和计算得到的平均分总分等,并能通过点击排序按钮进行排序
(每一个窗口类都涉及到读文件和传递字符串到显示model上的操作、对存入信息是否合法的判断、清空界面、修改显示内容等等保证功能实现的成员函数,具体请看代码)
图1 流程图
图2 主窗口
3 软件设计
3.1 设计步骤
打开Qt Creator,在文件中点击新建,在弹出框内选择Application的QT widgets模板,输入工程名stumanager及其所在位置,点击确定,如图3所示。
图3 新建QT工程
将弹出的对话框,选择主窗口mainwindow类,点击下一步,如图4所示。
图4 基本对话框
这样,Qt Creator就建立了一个基于主窗口的程序框架,如图5所示。
图5 新建的主窗口框
3.2 界面设计
1、创建控件
在图5所示的Forms选项卡中双击打开ui界面,在窗口左边。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“添加学生”为例进行介绍,其他按钮的创建可参照此进行操作。
图6 选择ui设计界面
图7 UI设计界面
1)在图6中左侧列表选择合适的控件拖拽到设计界面中间进行摆放。
2)在图6中“Buttons”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图7所示,在该对话框中输入控件的ID值和标题属性。
图8 Push Button属性
按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
表1 添加学生类中 各按钮和编辑框等对象的属性
对象 | ID | 标题或说明 |
---|---|---|
编辑框 | lid | 输入学号 |
按钮 | btnok | 确认按钮 |
按钮 | btncancel | 取消按钮 |
下拉列表 | lage | 选择年龄 |
按钮组 | stuchoose | 选择小中大学生 |
… | … | 控件实在太多… |
完成后界面如图8所示。
图9添加学生界面
2、连接变量和代码
\1) 给按钮连接变量。在按钮上单击鼠标右键,在弹出菜单中选择转到槽,就可以给该窗口类添加一个槽函数来进行点击输入等事件的操作,如图9所示。
图10 转到槽
在转到槽列表框中选择信号clicked(),就能添加该事件对应的槽函数如图11所示
图11 新建的槽函数
创建成功后,在槽函数中写下实现相应功能的代码即可
3.3 关键功能的实现
1)学生信息的输入
编辑框所关联的变量为lid,lname等,还有按钮组、下拉列表等实现信息填入的控件,当点击确认按钮且信息合法时,将进行录入信息函数
2)查询功能的实现
一开始和添加功能类似,先将选择搜索的对应信息存入key字符串,读取文件后作为关键字在文件中搜索出对应条目,点击时会显示对应学号供操作者修改或删除对应信息
3)删除和修改的实现
由于学号有唯一性,所以按照学号来对对应信息条目进行删除和修改,点击删除后弹框提醒确认删除后进行删除操作,点击修改则弹出修改子窗口进行信息的更改
删除功能:将对应信息作为字符串存起来,遍历存储信息的list容器进行覆盖存储文件,当遍历到要删除的信息时不存储即可
修改功能:将要修改的信息存储起来填到修改信息窗口上给操作者进行修改,注意此处由于学号唯一,学号不可修改,若有需要则在删除操作中删除对应学号信息
4)统计和排序的实现
当选择小中大学生时按默认顺序显示全部学生信息,在传入list容器时直接计算统计后显示各科平均分等,选择对应排序条件后点击排序按钮,将使用tableview类中自带的排序方法对数据进行排序
4 结论与心得体会
经过长时间的调试修改,得出结论该学生成绩管理系统符合题目所需要求
心得体会:花费了一整周时间来学习QT来设计自己的图形界面实现课设所需功能,最终实现用了自己喜欢的图案完成程序,真的很有成就感,也实现了自己在程序设计上的一个小目标——写出自己的第一个设计项目(虽然还比较简单)。
在编写过程中遇到非常多的困难,一般都是通过搜索对应问题和上CSDN看大佬的博客解决,掌握了学习程序设计遇到困难的解决办法、也收获了大量的编程知识
5 参考文献
[1] 谭浩强 C++程序设计(第3版)清华大学出版社 2015
[2] Henrik-Yao C++的QT项目打包成独立可执行和发布的exe文件
CSDN网址:https://blog.csdn.net/qq_50216270/article/details/121374493
6 附录
6.1 调试报告
1、编译时提示错误:
E:\Code\QT\classwork\StudentManager\main.cpp:31: error: expected ‘;’ before ‘return’
return a.exec();//涓昏繍琛屽惊鐜
^
原因为分号是在中文输入法状态下输入,将其改为英文输入状态下了分号即可。
2、添加学生后出现信息重复学号写入的问题,在成员函数中添加一个判断添加信息是否合法的判断:即信息是否与之前重复,若重复则弹出窗口提示操作者
3、统计和排序显示时切换小中大学生会出现小学生也有地理历史成绩的情况,解决方法为添加一个槽函数,当下拉列表对应的文本改变时,清空tableview显示再继续进行显示信息
6.2 测试结果
主窗口如下
图12 主窗口
1.在主窗口点击添加信息,输入各种学生信息,并点击确认按钮,得到结果如图13。
图13 结果图一
在主窗口点击统计和排序,在统计和排序中可看到存入的信息如图14(学生名:测试)
并且该窗口下方显示的即为统计得到的信息,处理成功
图14 结果图二
2.选择按英语成绩排序、升序,点击排序按钮,结果如图15.
图15 结果图三
可以看到成功实现排序且左侧有子列显示当前所排序的项的成绩信息
3.在主窗口中点击查询和修改,选择学生就读情况,搜索对应信息学生名字“测试”
图16 结果图四
成功显示搜索结果,证明搜索功能实现正常。
4.点击搜索结果行,在下方显示出对应学号,按搜索出的学号进行修改或删除
图17 结果图五
点击修改,弹出修改信息框进行修改如图17
图18 结果图六
点击删除,如图18点击确认删除后,提示成功删除信息
在统计和排序中再次查看信息发现信息均成功修改或删除,实现成功
5.添加学生时输入作者名字海蛋作为学生姓名,将弹出小彩蛋
6.3 关键源代码
*1.主函数main*
int main(int argc, char *argv[]){QApplication a(argc, argv);//创建QT实例MainWindow w;w.show();return a.exec();//主运行循环}
*2.读写文件的操作函数(基本每个窗口类都有)*
int addstu::readFile()//读文件{QFile file("stu.txt");if(!file.**open**(QIODevice::ReadOnly|QIODevice::Text))//打开不成功{ return -1;}QTextStream in(&file);while(!in.atEnd())//没读到文件尾则继续读{ QString line =in.readLine();//读取一行 stu_lines.append(line);//每行都存放到list中}file.**close**();//关闭return 0;//读取成功}//读写文件:void addstu::writeToFile(QString cnt)//保存学生信息{QFile file("stu.txt");if(!file.**open**(QIODevice::Append|QIODevice::Text)){ QMessageBox::warning(this,"错误","文件打开失败,信息未保存","确定"); return;}QTextStream out(&file);out<<cnt;//写cnt进文件中file.**close**();}
*3.实现统计和排序函数*
void sortstu::on_sortbtn_clicked()//点击排序{int flag;//要排的列,升序或降序//已经获取过what了flag=ui->sortflag->currentIndex();//int way=ui->sortway->currentIndex();if(way==0||what==0){ QMessageBox::warning(this,"提示","请选择排序方式"); return;}if(what==1)//小学生{ Student *stu=new StudentS;//建一个学生类指针 col=stu->sortTable(way);//得到要排的序号 delete stu;}else if(what==2)//中学生{ Student *stu=new StudentM;//建一个学生类指针 col=stu->sortTable(way); delete stu;}else if(what==3)//大学生{ Student *stu=new StudentL;//建一个学生类指针 col=stu->sortTable(way); delete stu;}//设置对应搜索条件的表头this->model3->setHorizontalHeaderItem(0,new QStandardItem(this->model->**headerData**(col,Qt::Horizontal).toString()));docopy();//复制对应列//排序在这里!!!!!!!!!!!!!!!!!!!!!---------------------------------------------------------------if(flag==1)//降序{ this->model->**sort**(col,Qt::DescendingOrder); this->model3->**sort**(0,Qt::DescendingOrder);}else if(flag==0)//升序{ this->model->**sort**(col,Qt::AscendingOrder); this->model3->**sort**(0,Qt::AscendingOrder);}}
基本上全部重要的代码都附上了,但因为代码量过大无法一一CV过来,若要深入研究可查看工程文件
上传日期:22.4.10
作者:海蛋
大一上学期C++课程设计——学生成绩管理系统(QT项目)相关推荐
- c语言课程设计查找分数与删除元素,c语言课程设计学生成绩管理系统
<c语言课程设计学生成绩管理系统>由会员分享,可在线阅读,更多相关<c语言课程设计学生成绩管理系统(31页珍藏版)>请在人人文库网上搜索. 1.河南理工大学计算机科学与技术学院 ...
- MFC课程设计 --学生成绩管理系统
MFC课程设计 ,C++课程设计 --学生成绩管理系统 ps:因为课设完成的过程大家都不太一样,以下的代码仅供学习一下在MFC下各个控件的用法,有问题欢迎留言讨论. 实验目的 使用MFC类库编制应用程 ...
- C语言成绩统计源代码,C语言课程设计学生成绩管理系统+源码
<C语言课程设计学生成绩管理系统+源码>由会员分享,可在线阅读,更多相关<C语言课程设计学生成绩管理系统+源码(25页珍藏版)>请在人人文库网上搜索. 1.简易教学管理系统的设 ...
- C语言学生成绩管理设计总结,C语言课程设计学生成绩管理系统个人总结
C语言课程设计学生成绩管理系统个人总结 C语言课程设计--学生成绩管理系统 个人心得体会 (徐州工程学院 14计嵌1班 07组 张凯) 这一周以来的课程设计,不仅让我明白了C语言的确是一门很有用的,但 ...
- 课程设计——学生成绩管理系统 C语言
课程设计--学生成绩管理系统 基本要求: 1.程序功能 编程实现一个基础的成绩管理系统. 2.设计目的 通过本程序综合掌握结构体类型.指针.函数.文件等知识的综合使用. 3.功能要求(可扩充功能) ( ...
- c语言学生成绩管理系统课设作业,C语言课程设计——学生成绩管理系统
摘 要 学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段.但一直以来人们使用传统人工的方式 ...
- C语言课程设计——学生成绩管理系统(详细报告)
欢迎来到<IT_WEH_coder>的博客.我是小魏,一名普通的在校大学生.希望大家多多关照,我们一起成长一起进步,也希望大家多多支持我鸭,喜欢我就给我一个关注吧! 本课程设计的编程部分所 ...
- java web期末课程设计 学生成绩管理系统(mysql,jstl+el,Javabean)+增删改查,session域+servlet(基础易理解)
学生成绩管理系统 一.实验目的 为了更好的学习理解JavaWeb,创建了此系统.此系统可以帮助学习Java web基础,特别是javaweb入门,此系统使用大部分Java web基础知识.Java w ...
- C++课程设计 学生成绩管理系统
学生成绩管理系统 1.编译器 2.系统功能需求分析 2.1学生成绩管理系统需求分析 2.2三个类功能需求分析 2.2.1 Person类 2.2.2 Student类 2.2.3 Undergradu ...
最新文章
- ognl 表达式常用表达式语言
- 看职场老人教你如何平稳度过职场“更年期”
- chosen ajax获取数据,Jquery Chosen插件 - 由Ajax动态填充列表
- html纯css页面滑动效果,纯css3滑动按钮动画效果
- SQL语言之子查询(Oracle)
- cp命令复制目录 不覆盖
- Node.js基础知识普及
- SpringBoot+Dubbo集成ELK实战
- 无聊的一天_一人互联网公司背后的无聊技术
- Codeforces 229D
- IOS经常使用的性能优化策略
- java 防止证书导出_如何把安全证书导入到java中的cacerts证书库
- linux之openssh配置
- extjs计算两个DateField所间隔的月份(天数)
- tensorflow之读取jpg图像长和宽
- rtthread qspi w25q256
- 【软件安装】MacBook 安装 MATLAB 2020a
- 如何写软件设计文档[转]
- 手机话费充值 java实例_手机话费充值接口调用示例
- ubuntu安装企业微信