【鱼币福利】学生成绩管理系统(c++实现)(单科)
本帖最后由 青出于蓝 于 2022-8-5 10:54 编辑学习C++有一段时间了,近几周看到互助平台有问学习成绩管理系统的,java,python板块也有好多老师做了这个,所以我也用c++做了一个学生成绩管理系统。
技术不精进,程序不很完美,如果有问题,请在楼下发帖,感谢!{:10_268:}
效果图:
https://xxx.ilovefishc.com/album/202107/28/124554zwjgiogdicijkbmz.png
使用指南
1,停止使用
这个程序为了方便使用,所以在外面套了一个大循环,这个大循环只用5个有效输入,程序内会有说明。
想要退出循环,输入0即可。
2,添加学生
添加学生要按1。添加学生一般来说是批量的,所以有个小循环,退出循环要按q(内有说明)
https://xxx.ilovefishc.com/album/202107/28/123250wpxrspxk6w6dp8mw.png
3,删除学生
删除学生需要按2。删除学生一般是一次性的,没有设置循环,比较需要注意的是:
如果输入的学生不在已添加的学生名单里,程序依然会返回 XXX已经删除完毕,但学生名单不会有改变
https://xxx.ilovefishc.com/album/202107/28/123256unyjsyhsnmygrsgh.png
4,录入学生成绩
录入学生成绩要按3,这里会把所有学生提出来挨个录入。
https://xxx.ilovefishc.com/album/202107/28/123254pmujqjj3alg8hvlb.png
5,查看学生信息
查看学生信息要按4,会把每个学生的成绩以及平均分全部打印。
https://xxx.ilovefishc.com/album/202107/28/123259u7x223x02f332ot7.png
使用顺序:添加学生——>删除学生——>录入成绩——>查看信息
打乱顺序会卡死或不返回任何内容
下一环节开始讲解程序实现
添加学生实现
保存数据
初学c++,在保存数据到一个文件这块,并不会太多知识,所以选择了比较简单的txt文件来保存数据
需要注意的是:
因为是添加学生,所以写入文件时一定要注意open模式,应该是ios::app(这里将学生名单保存为学生.txt)
File.open("学生.txt",ios::app);
涉及语法
ios::in 打开文件用于读取数据。如果文件不存在,则打开出错。
ios::out 打开文件用于写入数据。如果文件不存在,则新建该文件;如果文件原来就存在,则打开时清除原来的内容。
ios::app打开文件,用于在其尾部添加数据。如果文件不存在,则新建该文件。
添加学生完整代码**** Hidden Message *****
注意:
写入时每一行都是一个学生的名字!
删除学生实现
大体思路
打开文件学生.txt,遍历每一行,每一行都是一个学生的名字,如果用户输入的内容与学生的名字相符,那么忽略;如果不相符,则把它加到一个string类型的变量里。
等每一行都判断完,再把这个变量重新写入到学生.txt。
举个例子:
原有学生:
a , b , c
输入内容:
b
将原有学生遍历,如果学生名不等于b,那么就把他加到名叫f的字符串内,后面加个换行
这时也要注意:
打开类型是ios::out,因为我们要重新创建一个文件。
补充:
文件写入要用<<
例如:ofstream a;
a.open(........);
a<<"hello world";
删除学生完整代码:
**** Hidden Message *****
成绩输入实现
1,接收输入
输入成绩绝对不会是单人输入,大多数情况下是多人的。
序号1,2代表的功能已经为成绩接收并管理做下的资源上的基础,有了学生的名单,我们可以遍历学生名单,依次输入每个学生的成绩
2,接收处理
收到的数据需要处理并保存,序号3代表的成绩输入功能本身就是为完成序号4代表的查看学生成绩做铺垫,为了方便后期调用,这里把数据保存为了两个文件
第一个文件:学生成绩.txt
这里面就是现成的话,里面每一行都是
xxx的成绩是xxx
之所以要这样,就是怕学生一旦删除后,学生名字与成绩就对不上了。
这个文件非常方便的,在后期打印学生信息时只需要打印这个文件的每一行就可以了~
这里的文件格式是ios::out,每次都打开一个新的文件,原有文件会被顶替。
第二个文件:成绩.txt
这里面每一行就是简单的数字,没有任何的有关学生的信息。
这样做是方便打印学生信息时实现里面的求平均分的功能。
这里的模式也要是ios::out
成绩输入源码:
**** Hidden Message *****
打印信息实现
1,打印每位学生的成绩
前面已经生成了学生成绩.txt,这里仅仅需要fstream打开学生成绩.txt再逐行打印即可。
2,求平均分
前面已经生成了成绩.txt,这里需要定义一个计数的变量,遍历这个文件每一行,在利用stoi将里面的string类型的数字转变为int型,没遍历一次,计数遍历加一,总和加一
平均分公式:总分/人数=总和/计数
注意:
stoi是C++11的,需要在编译器选项里面调整一下。
打印信息源码:
**** Hidden Message *****
问题总结
1,注意分号
c/c++不像python这么严格对于缩进,所以写代码时可能会不太整洁,各种大循序小循环,各种判断,一定要注意分号!
2,注意头文件
涉及了内容,不是仅仅需要c++标准输入输出库iostream就可以得,这里需要导入三个
#include<iostream>
#include <fstream>
#include <string>
3,注意写入文件的模式
区分ofstream,ifstream,fstream和导入时的各种模式,ios::app和ios::out不要混淆
4,注意<<和>>
不同流向混淆了,程序就会报错。
源码:
**** Hidden Message ***** 有问题欢迎指出,欢迎评分,回复~{:10_303:} @柿子饼同学 @不二如是 @liuzhengyuan 本帖最后由 柿子饼同学 于 2022-8-5 19:13 编辑
青出于蓝 发表于 2021-7-28 21:33
@柿子饼同学 @不二如是 @liuzhengyuan
厉害{:10_275:} 学习学习 {:5_109:} 牛的,我没学过c用python能不能做出来呢、! 这个怕是不方便 至少整个图形化界面啊
1 youxiu {:5_103:} 厉害,跟着大神学习一下{:5_109:} 666 康康 支持 鱼C有你更精彩^_^ 666 学习学习 66 源码呢?