现有学生成绩信息,内容如下
姓名 学号 语文 数学 英语
张明明 01 67 78 82
李成友 02 78 91 88
张辉灿 03 68 82 56
王露 04 56 45 77
陈东明 05 67 38 47
…. .. .. .. …
(一)功能要求:
(1) 信息维护:
要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
(2) 信息查询:
要求:查询时可实现按姓名查询、按学号查询
(3) 成绩统计:
要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。
(4) 排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)
(二)其它要求:
(1) 只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3) 学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档[/color]
13 个解决方案
#1
课程设计还是自己查查资料,学习学习吧。
看看链表相关操作,创建,添加,删除。。。
看看链表相关操作,创建,添加,删除。。。
#2
可以找书熟悉熟悉结构体的应用以及指针的运用
#3
每一部分都涉及一些编程的知识点,你只要把每个知识点弄明白了,然后再做,就会发现其实也没那么难,还是自己做吧,既学习又锻炼自己的动手能力。
#4
楼主就如同当年的我一样,啥都不会,课程设计都要抄袭别人的,这样不好哦,除非以后不想干这一行,亲身体会啊
#5
学习了,新手
#6
去年,我也像你这样,在网上找,其实可以搜到很多。不过最后还是自己写,虽然自己的很差,但却很高兴。要学到东西,只有自己点滴积累。非最终代码:
http://pan.baidu.com/share/link?shareid=1582404962&uk=1443974747
#7
这种东西网上很多的。。你找来自己改改就行。。别连这个都想懒。。
#8
这不就是传说中的学生信息管理系统的翻版么。。。哎,当年也像楼主这么悲催的到处求助,啥也不懂,其实网上到处都是,等应付了答辩,还是好好学习一下吧
#9
1、C++课程设计实验目的
这次C++课程设计实验通过设计一个《学生成绩管理系统》,使学生分析模块的实现并用掌握系统各功能模块的基本工作原理,从而掌握C++的面向对象基本编程原理和及基本的编程方法,在编写模板过程中学会系统调试分部调试。进而培养分析、解决问题的能力,与此同时提高软件文档写作能力。
2、课程设计内容
2.1课程设计的题目及简介
请用C++编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:
(一) 功能要求:
(1) 信息维护: 要求:学生信息数据要以文件的形式保存,能实现学生信息的
维护,此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
(2) 信息查询: 要求:查询时可实现按姓名查询、按学号查询
(3) 成绩统计: 要求:A输入任意的一个课程名(如数学)和一个分数段(60--70),
统计出在此分数段的学生情况。 B能统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序
(4) 排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示,排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)
(二) 其它要求:
(1) 只能使用C++语言,源程序要有适当的注释,使程序容易阅读
(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3) 学生可自动增加新功能模块(视情况可另外加分)
(4) 写出课程设计报告,具体要求见相关说明文档
2.2 设计思路说明
(1) 定义student类,然后进行全局变量声明及初始化,这些变量包含了Save(保存学生信息); Add(增加学生信息); Delete(删除学生信息); Modify(修改学生信息); Show(打印学生信息); Search(查找学生信息); GradeSelect(按分数查询); SortNum(根据学号排序); SortGrade(成绩分段统计)
(2) 文件流实现对文件的打开读取和保存
(3) 设置一个验证函数bool Find来验证学号的存在与否
(4) 各函数功能的实现及主函数(包含了文本菜单界面)
2.3 程序实现
(1) 取再以write_file对文件进行保存,使之本身有一个学生成绩数据库,方便实现程序功能的操作,避免了每次测试程序都输入学生信息
(2) switch语句的多次使用使程序简便易读,僻如对学生信息进行修改,用switch语句针对要修改的项目而不用将不要修改的重新输入,同时主菜单界面也是通过它实现的
(3) 各程序模块间相互调用,以实现功能,例如Modify函数调用了Search函数
(4) 在main函数中运用了switch语句对菜单进行选择。运行时菜单显示如图所示:通过ifstream& open file实现对文件的打开,通过read_file对文件进行读取,再通过ofstream fout函数对文件进行保存。
2.4 程序流程图
(1) 流程图说明:
输出欢迎界面,输入功能选项;通过调用各模块功能函数实现以下功能:
添加学生信息:调用Add函数
删除学生信息:调用Delete函数
学生信息列表:调用Show函数
学生信息修改:调用Modify函数
查找学生信息:调用Search函数
根据学号排序:调用SortNum函数
根据成绩排序:调用SortGrade函数
成绩分段统计:调用GradeSelect函数
通过switch语句实现多条件分支功能选择,通过循环实现所选功能结束后重选操作。
(2) 定义study类的成员数据:
Num//学生学号,定义为string型
Name//学生姓名,定义为string型
Math//数学成绩,定义为int型
English //英语成绩,定义为int型
Computer //计算机成绩,定义为int型
Grade //平均成绩,定义为int型
定义一个bool Find函数对学号进行判断看该学号是否存在,bool函数的判断中只有true和false,所以判断过程简便。
Setw函数控制字符域宽。
(3) Add函数流程图
Delete函数流程图说明:开始之后就用if语句调用bool Find函数以判断学号是否存在,若存在则结束返回,若不存在则输入信息并存入数组然后数组总条数加1,最后结束返回菜单。
Delete函数流程图:
Delete函数流程图说明:开始之后先输入要删除的学生学号,而后调用Find函数判断是否是存在的学号,如果学号存在则输出该学号的学生信息,然后确认删除该生成绩信息,如果确认,则该生信息删除,最后结束。如果该学号不存在,则提示“该学号不存在!”结束回到主菜单。
其它模块的实现流程图与以上的类似就不一一列举了,下面进入整个课设最重要的部分——文件流的使用。
2.5文件流的实现
(1) 文件的打开,代码如图所示:
in.open(file.c_str())用一般的文件打开方式不能打开字符串,打开是乱码,
不直接用in.open("file")打开文件,而要在要在file 后面加.c_str。
(2) 文件的读取,代码如下图所示:
之所以定义string word,并且之后有atoi(word.c_str())是因为word里面存了一个单词,这样可以读取。atoi函数的作用是将字符转换为整形,由于我没有和数组保存数据信息,故用字符串的话用书上的文件流读取方式后打开是乱码,不是可以看懂的整形,故些处使用atoi函数进行转换克服这一难题。使用getline获取数据时遇空格可接受。
(3) 写文件,代码如图所示:
用ofstream fout函数打开文件是因为如果打开的文件不存在,它会为你自动创建一个文件,,而fout.open(file.c_str())中的“c_str()”是因为文件被申明为了string类型。然后用for循环语句可使用户持续输入数据。最后用fout.close()关闭文件,若不关闭将损坏文件。
3、运行结果截图
4、学习小结
通过这次C++的课设,我进一步了解了C++面对对象的编程方法,印象最深的是文件流的使用。在文件流的使用中遇到许多问题,比如打开TXT文档是乱码,因为使用的文件打开方式是适合数组而不适合字符串的。同样在这样艰难的过程中我也学会很多,对原本一知半解的文件流有了进一步的认识,现在已经可以进行简单使用了。其实各部分的模块大部分都是面向过程的,所以遇到的问题可以通过查资料或者问同学老师等方式解决,虽然不是课设的主要内容,但是也遇到很多问题,程序在不断调试修改中才逐渐成型,逐渐完善。只有自己认真做了这个课设,在其中可以学到很多知识,有平时自己根本就注意不到的细节问题,可能导致整个程序大乱,比如我只是在一个分模块中漏了一个“}”,最后出现七个错误,全是提示成员函数定义不合法。
另外我还学习到,在编程的过程中,千万不能急于写代码,应先规划一下设计思路,这样写代码时就可以一气呵成;最大的收获应该算是发现了一个优秀的软件开发人员的秘密,那就是自学,不能什么都依赖老师,老师毕竟不能把所有的知识全都教给我们,只要我们学会了自学,那么就相当于学会了一半的语言。
最后,通过这次做课设,我常常地了解到我们所学的C++知识毕竟很浅显,如果要有更大的进步和发展,要求自己必须在课后主动查资料,经常写代码,这样出的错误越多,日后发现问题就可以很快发现,水平才能提升。在C++这条路上我们要做的还有很多。
这次C++课程设计实验通过设计一个《学生成绩管理系统》,使学生分析模块的实现并用掌握系统各功能模块的基本工作原理,从而掌握C++的面向对象基本编程原理和及基本的编程方法,在编写模板过程中学会系统调试分部调试。进而培养分析、解决问题的能力,与此同时提高软件文档写作能力。
2、课程设计内容
2.1课程设计的题目及简介
请用C++编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:
(一) 功能要求:
(1) 信息维护: 要求:学生信息数据要以文件的形式保存,能实现学生信息的
维护,此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
(2) 信息查询: 要求:查询时可实现按姓名查询、按学号查询
(3) 成绩统计: 要求:A输入任意的一个课程名(如数学)和一个分数段(60--70),
统计出在此分数段的学生情况。 B能统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序
(4) 排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示,排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)
(二) 其它要求:
(1) 只能使用C++语言,源程序要有适当的注释,使程序容易阅读
(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3) 学生可自动增加新功能模块(视情况可另外加分)
(4) 写出课程设计报告,具体要求见相关说明文档
2.2 设计思路说明
(1) 定义student类,然后进行全局变量声明及初始化,这些变量包含了Save(保存学生信息); Add(增加学生信息); Delete(删除学生信息); Modify(修改学生信息); Show(打印学生信息); Search(查找学生信息); GradeSelect(按分数查询); SortNum(根据学号排序); SortGrade(成绩分段统计)
(2) 文件流实现对文件的打开读取和保存
(3) 设置一个验证函数bool Find来验证学号的存在与否
(4) 各函数功能的实现及主函数(包含了文本菜单界面)
2.3 程序实现
(1) 取再以write_file对文件进行保存,使之本身有一个学生成绩数据库,方便实现程序功能的操作,避免了每次测试程序都输入学生信息
(2) switch语句的多次使用使程序简便易读,僻如对学生信息进行修改,用switch语句针对要修改的项目而不用将不要修改的重新输入,同时主菜单界面也是通过它实现的
(3) 各程序模块间相互调用,以实现功能,例如Modify函数调用了Search函数
(4) 在main函数中运用了switch语句对菜单进行选择。运行时菜单显示如图所示:通过ifstream& open file实现对文件的打开,通过read_file对文件进行读取,再通过ofstream fout函数对文件进行保存。
2.4 程序流程图
(1) 流程图说明:
输出欢迎界面,输入功能选项;通过调用各模块功能函数实现以下功能:
添加学生信息:调用Add函数
删除学生信息:调用Delete函数
学生信息列表:调用Show函数
学生信息修改:调用Modify函数
查找学生信息:调用Search函数
根据学号排序:调用SortNum函数
根据成绩排序:调用SortGrade函数
成绩分段统计:调用GradeSelect函数
通过switch语句实现多条件分支功能选择,通过循环实现所选功能结束后重选操作。
(2) 定义study类的成员数据:
Num//学生学号,定义为string型
Name//学生姓名,定义为string型
Math//数学成绩,定义为int型
English //英语成绩,定义为int型
Computer //计算机成绩,定义为int型
Grade //平均成绩,定义为int型
定义一个bool Find函数对学号进行判断看该学号是否存在,bool函数的判断中只有true和false,所以判断过程简便。
Setw函数控制字符域宽。
(3) Add函数流程图
Delete函数流程图说明:开始之后就用if语句调用bool Find函数以判断学号是否存在,若存在则结束返回,若不存在则输入信息并存入数组然后数组总条数加1,最后结束返回菜单。
Delete函数流程图:
Delete函数流程图说明:开始之后先输入要删除的学生学号,而后调用Find函数判断是否是存在的学号,如果学号存在则输出该学号的学生信息,然后确认删除该生成绩信息,如果确认,则该生信息删除,最后结束。如果该学号不存在,则提示“该学号不存在!”结束回到主菜单。
其它模块的实现流程图与以上的类似就不一一列举了,下面进入整个课设最重要的部分——文件流的使用。
2.5文件流的实现
(1) 文件的打开,代码如图所示:
in.open(file.c_str())用一般的文件打开方式不能打开字符串,打开是乱码,
不直接用in.open("file")打开文件,而要在要在file 后面加.c_str。
(2) 文件的读取,代码如下图所示:
之所以定义string word,并且之后有atoi(word.c_str())是因为word里面存了一个单词,这样可以读取。atoi函数的作用是将字符转换为整形,由于我没有和数组保存数据信息,故用字符串的话用书上的文件流读取方式后打开是乱码,不是可以看懂的整形,故些处使用atoi函数进行转换克服这一难题。使用getline获取数据时遇空格可接受。
(3) 写文件,代码如图所示:
用ofstream fout函数打开文件是因为如果打开的文件不存在,它会为你自动创建一个文件,,而fout.open(file.c_str())中的“c_str()”是因为文件被申明为了string类型。然后用for循环语句可使用户持续输入数据。最后用fout.close()关闭文件,若不关闭将损坏文件。
3、运行结果截图
4、学习小结
通过这次C++的课设,我进一步了解了C++面对对象的编程方法,印象最深的是文件流的使用。在文件流的使用中遇到许多问题,比如打开TXT文档是乱码,因为使用的文件打开方式是适合数组而不适合字符串的。同样在这样艰难的过程中我也学会很多,对原本一知半解的文件流有了进一步的认识,现在已经可以进行简单使用了。其实各部分的模块大部分都是面向过程的,所以遇到的问题可以通过查资料或者问同学老师等方式解决,虽然不是课设的主要内容,但是也遇到很多问题,程序在不断调试修改中才逐渐成型,逐渐完善。只有自己认真做了这个课设,在其中可以学到很多知识,有平时自己根本就注意不到的细节问题,可能导致整个程序大乱,比如我只是在一个分模块中漏了一个“}”,最后出现七个错误,全是提示成员函数定义不合法。
另外我还学习到,在编程的过程中,千万不能急于写代码,应先规划一下设计思路,这样写代码时就可以一气呵成;最大的收获应该算是发现了一个优秀的软件开发人员的秘密,那就是自学,不能什么都依赖老师,老师毕竟不能把所有的知识全都教给我们,只要我们学会了自学,那么就相当于学会了一半的语言。
最后,通过这次做课设,我常常地了解到我们所学的C++知识毕竟很浅显,如果要有更大的进步和发展,要求自己必须在课后主动查资料,经常写代码,这样出的错误越多,日后发现问题就可以很快发现,水平才能提升。在C++这条路上我们要做的还有很多。
#10
希望楼主看完之后能理解代码的意思,之后最好要亲自敲一遍代码
#11
很感谢您的答案,虽然以我目前的知识水平还不能理解,但是我会努力地把你这些弄通透!
#12
对于那几个函数的调用不怎么会写,能不能写一个让我借鉴一下啊。麻烦您了。
#13
大神有没有c++语言成绩管理系统的代码
#1
课程设计还是自己查查资料,学习学习吧。
看看链表相关操作,创建,添加,删除。。。
看看链表相关操作,创建,添加,删除。。。
#2
可以找书熟悉熟悉结构体的应用以及指针的运用
#3
每一部分都涉及一些编程的知识点,你只要把每个知识点弄明白了,然后再做,就会发现其实也没那么难,还是自己做吧,既学习又锻炼自己的动手能力。
#4
楼主就如同当年的我一样,啥都不会,课程设计都要抄袭别人的,这样不好哦,除非以后不想干这一行,亲身体会啊
#5
学习了,新手
#6
去年,我也像你这样,在网上找,其实可以搜到很多。不过最后还是自己写,虽然自己的很差,但却很高兴。要学到东西,只有自己点滴积累。非最终代码:
http://pan.baidu.com/share/link?shareid=1582404962&uk=1443974747
#7
这种东西网上很多的。。你找来自己改改就行。。别连这个都想懒。。
#8
这不就是传说中的学生信息管理系统的翻版么。。。哎,当年也像楼主这么悲催的到处求助,啥也不懂,其实网上到处都是,等应付了答辩,还是好好学习一下吧
#9
1、C++课程设计实验目的
这次C++课程设计实验通过设计一个《学生成绩管理系统》,使学生分析模块的实现并用掌握系统各功能模块的基本工作原理,从而掌握C++的面向对象基本编程原理和及基本的编程方法,在编写模板过程中学会系统调试分部调试。进而培养分析、解决问题的能力,与此同时提高软件文档写作能力。
2、课程设计内容
2.1课程设计的题目及简介
请用C++编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:
(一) 功能要求:
(1) 信息维护: 要求:学生信息数据要以文件的形式保存,能实现学生信息的
维护,此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
(2) 信息查询: 要求:查询时可实现按姓名查询、按学号查询
(3) 成绩统计: 要求:A输入任意的一个课程名(如数学)和一个分数段(60--70),
统计出在此分数段的学生情况。 B能统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序
(4) 排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示,排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)
(二) 其它要求:
(1) 只能使用C++语言,源程序要有适当的注释,使程序容易阅读
(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3) 学生可自动增加新功能模块(视情况可另外加分)
(4) 写出课程设计报告,具体要求见相关说明文档
2.2 设计思路说明
(1) 定义student类,然后进行全局变量声明及初始化,这些变量包含了Save(保存学生信息); Add(增加学生信息); Delete(删除学生信息); Modify(修改学生信息); Show(打印学生信息); Search(查找学生信息); GradeSelect(按分数查询); SortNum(根据学号排序); SortGrade(成绩分段统计)
(2) 文件流实现对文件的打开读取和保存
(3) 设置一个验证函数bool Find来验证学号的存在与否
(4) 各函数功能的实现及主函数(包含了文本菜单界面)
2.3 程序实现
(1) 取再以write_file对文件进行保存,使之本身有一个学生成绩数据库,方便实现程序功能的操作,避免了每次测试程序都输入学生信息
(2) switch语句的多次使用使程序简便易读,僻如对学生信息进行修改,用switch语句针对要修改的项目而不用将不要修改的重新输入,同时主菜单界面也是通过它实现的
(3) 各程序模块间相互调用,以实现功能,例如Modify函数调用了Search函数
(4) 在main函数中运用了switch语句对菜单进行选择。运行时菜单显示如图所示:通过ifstream& open file实现对文件的打开,通过read_file对文件进行读取,再通过ofstream fout函数对文件进行保存。
2.4 程序流程图
(1) 流程图说明:
输出欢迎界面,输入功能选项;通过调用各模块功能函数实现以下功能:
添加学生信息:调用Add函数
删除学生信息:调用Delete函数
学生信息列表:调用Show函数
学生信息修改:调用Modify函数
查找学生信息:调用Search函数
根据学号排序:调用SortNum函数
根据成绩排序:调用SortGrade函数
成绩分段统计:调用GradeSelect函数
通过switch语句实现多条件分支功能选择,通过循环实现所选功能结束后重选操作。
(2) 定义study类的成员数据:
Num//学生学号,定义为string型
Name//学生姓名,定义为string型
Math//数学成绩,定义为int型
English //英语成绩,定义为int型
Computer //计算机成绩,定义为int型
Grade //平均成绩,定义为int型
定义一个bool Find函数对学号进行判断看该学号是否存在,bool函数的判断中只有true和false,所以判断过程简便。
Setw函数控制字符域宽。
(3) Add函数流程图
Delete函数流程图说明:开始之后就用if语句调用bool Find函数以判断学号是否存在,若存在则结束返回,若不存在则输入信息并存入数组然后数组总条数加1,最后结束返回菜单。
Delete函数流程图:
Delete函数流程图说明:开始之后先输入要删除的学生学号,而后调用Find函数判断是否是存在的学号,如果学号存在则输出该学号的学生信息,然后确认删除该生成绩信息,如果确认,则该生信息删除,最后结束。如果该学号不存在,则提示“该学号不存在!”结束回到主菜单。
其它模块的实现流程图与以上的类似就不一一列举了,下面进入整个课设最重要的部分——文件流的使用。
2.5文件流的实现
(1) 文件的打开,代码如图所示:
in.open(file.c_str())用一般的文件打开方式不能打开字符串,打开是乱码,
不直接用in.open("file")打开文件,而要在要在file 后面加.c_str。
(2) 文件的读取,代码如下图所示:
之所以定义string word,并且之后有atoi(word.c_str())是因为word里面存了一个单词,这样可以读取。atoi函数的作用是将字符转换为整形,由于我没有和数组保存数据信息,故用字符串的话用书上的文件流读取方式后打开是乱码,不是可以看懂的整形,故些处使用atoi函数进行转换克服这一难题。使用getline获取数据时遇空格可接受。
(3) 写文件,代码如图所示:
用ofstream fout函数打开文件是因为如果打开的文件不存在,它会为你自动创建一个文件,,而fout.open(file.c_str())中的“c_str()”是因为文件被申明为了string类型。然后用for循环语句可使用户持续输入数据。最后用fout.close()关闭文件,若不关闭将损坏文件。
3、运行结果截图
4、学习小结
通过这次C++的课设,我进一步了解了C++面对对象的编程方法,印象最深的是文件流的使用。在文件流的使用中遇到许多问题,比如打开TXT文档是乱码,因为使用的文件打开方式是适合数组而不适合字符串的。同样在这样艰难的过程中我也学会很多,对原本一知半解的文件流有了进一步的认识,现在已经可以进行简单使用了。其实各部分的模块大部分都是面向过程的,所以遇到的问题可以通过查资料或者问同学老师等方式解决,虽然不是课设的主要内容,但是也遇到很多问题,程序在不断调试修改中才逐渐成型,逐渐完善。只有自己认真做了这个课设,在其中可以学到很多知识,有平时自己根本就注意不到的细节问题,可能导致整个程序大乱,比如我只是在一个分模块中漏了一个“}”,最后出现七个错误,全是提示成员函数定义不合法。
另外我还学习到,在编程的过程中,千万不能急于写代码,应先规划一下设计思路,这样写代码时就可以一气呵成;最大的收获应该算是发现了一个优秀的软件开发人员的秘密,那就是自学,不能什么都依赖老师,老师毕竟不能把所有的知识全都教给我们,只要我们学会了自学,那么就相当于学会了一半的语言。
最后,通过这次做课设,我常常地了解到我们所学的C++知识毕竟很浅显,如果要有更大的进步和发展,要求自己必须在课后主动查资料,经常写代码,这样出的错误越多,日后发现问题就可以很快发现,水平才能提升。在C++这条路上我们要做的还有很多。
这次C++课程设计实验通过设计一个《学生成绩管理系统》,使学生分析模块的实现并用掌握系统各功能模块的基本工作原理,从而掌握C++的面向对象基本编程原理和及基本的编程方法,在编写模板过程中学会系统调试分部调试。进而培养分析、解决问题的能力,与此同时提高软件文档写作能力。
2、课程设计内容
2.1课程设计的题目及简介
请用C++编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:
(一) 功能要求:
(1) 信息维护: 要求:学生信息数据要以文件的形式保存,能实现学生信息的
维护,此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
(2) 信息查询: 要求:查询时可实现按姓名查询、按学号查询
(3) 成绩统计: 要求:A输入任意的一个课程名(如数学)和一个分数段(60--70),
统计出在此分数段的学生情况。 B能统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序
(4) 排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示,排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)
(二) 其它要求:
(1) 只能使用C++语言,源程序要有适当的注释,使程序容易阅读
(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3) 学生可自动增加新功能模块(视情况可另外加分)
(4) 写出课程设计报告,具体要求见相关说明文档
2.2 设计思路说明
(1) 定义student类,然后进行全局变量声明及初始化,这些变量包含了Save(保存学生信息); Add(增加学生信息); Delete(删除学生信息); Modify(修改学生信息); Show(打印学生信息); Search(查找学生信息); GradeSelect(按分数查询); SortNum(根据学号排序); SortGrade(成绩分段统计)
(2) 文件流实现对文件的打开读取和保存
(3) 设置一个验证函数bool Find来验证学号的存在与否
(4) 各函数功能的实现及主函数(包含了文本菜单界面)
2.3 程序实现
(1) 取再以write_file对文件进行保存,使之本身有一个学生成绩数据库,方便实现程序功能的操作,避免了每次测试程序都输入学生信息
(2) switch语句的多次使用使程序简便易读,僻如对学生信息进行修改,用switch语句针对要修改的项目而不用将不要修改的重新输入,同时主菜单界面也是通过它实现的
(3) 各程序模块间相互调用,以实现功能,例如Modify函数调用了Search函数
(4) 在main函数中运用了switch语句对菜单进行选择。运行时菜单显示如图所示:通过ifstream& open file实现对文件的打开,通过read_file对文件进行读取,再通过ofstream fout函数对文件进行保存。
2.4 程序流程图
(1) 流程图说明:
输出欢迎界面,输入功能选项;通过调用各模块功能函数实现以下功能:
添加学生信息:调用Add函数
删除学生信息:调用Delete函数
学生信息列表:调用Show函数
学生信息修改:调用Modify函数
查找学生信息:调用Search函数
根据学号排序:调用SortNum函数
根据成绩排序:调用SortGrade函数
成绩分段统计:调用GradeSelect函数
通过switch语句实现多条件分支功能选择,通过循环实现所选功能结束后重选操作。
(2) 定义study类的成员数据:
Num//学生学号,定义为string型
Name//学生姓名,定义为string型
Math//数学成绩,定义为int型
English //英语成绩,定义为int型
Computer //计算机成绩,定义为int型
Grade //平均成绩,定义为int型
定义一个bool Find函数对学号进行判断看该学号是否存在,bool函数的判断中只有true和false,所以判断过程简便。
Setw函数控制字符域宽。
(3) Add函数流程图
Delete函数流程图说明:开始之后就用if语句调用bool Find函数以判断学号是否存在,若存在则结束返回,若不存在则输入信息并存入数组然后数组总条数加1,最后结束返回菜单。
Delete函数流程图:
Delete函数流程图说明:开始之后先输入要删除的学生学号,而后调用Find函数判断是否是存在的学号,如果学号存在则输出该学号的学生信息,然后确认删除该生成绩信息,如果确认,则该生信息删除,最后结束。如果该学号不存在,则提示“该学号不存在!”结束回到主菜单。
其它模块的实现流程图与以上的类似就不一一列举了,下面进入整个课设最重要的部分——文件流的使用。
2.5文件流的实现
(1) 文件的打开,代码如图所示:
in.open(file.c_str())用一般的文件打开方式不能打开字符串,打开是乱码,
不直接用in.open("file")打开文件,而要在要在file 后面加.c_str。
(2) 文件的读取,代码如下图所示:
之所以定义string word,并且之后有atoi(word.c_str())是因为word里面存了一个单词,这样可以读取。atoi函数的作用是将字符转换为整形,由于我没有和数组保存数据信息,故用字符串的话用书上的文件流读取方式后打开是乱码,不是可以看懂的整形,故些处使用atoi函数进行转换克服这一难题。使用getline获取数据时遇空格可接受。
(3) 写文件,代码如图所示:
用ofstream fout函数打开文件是因为如果打开的文件不存在,它会为你自动创建一个文件,,而fout.open(file.c_str())中的“c_str()”是因为文件被申明为了string类型。然后用for循环语句可使用户持续输入数据。最后用fout.close()关闭文件,若不关闭将损坏文件。
3、运行结果截图
4、学习小结
通过这次C++的课设,我进一步了解了C++面对对象的编程方法,印象最深的是文件流的使用。在文件流的使用中遇到许多问题,比如打开TXT文档是乱码,因为使用的文件打开方式是适合数组而不适合字符串的。同样在这样艰难的过程中我也学会很多,对原本一知半解的文件流有了进一步的认识,现在已经可以进行简单使用了。其实各部分的模块大部分都是面向过程的,所以遇到的问题可以通过查资料或者问同学老师等方式解决,虽然不是课设的主要内容,但是也遇到很多问题,程序在不断调试修改中才逐渐成型,逐渐完善。只有自己认真做了这个课设,在其中可以学到很多知识,有平时自己根本就注意不到的细节问题,可能导致整个程序大乱,比如我只是在一个分模块中漏了一个“}”,最后出现七个错误,全是提示成员函数定义不合法。
另外我还学习到,在编程的过程中,千万不能急于写代码,应先规划一下设计思路,这样写代码时就可以一气呵成;最大的收获应该算是发现了一个优秀的软件开发人员的秘密,那就是自学,不能什么都依赖老师,老师毕竟不能把所有的知识全都教给我们,只要我们学会了自学,那么就相当于学会了一半的语言。
最后,通过这次做课设,我常常地了解到我们所学的C++知识毕竟很浅显,如果要有更大的进步和发展,要求自己必须在课后主动查资料,经常写代码,这样出的错误越多,日后发现问题就可以很快发现,水平才能提升。在C++这条路上我们要做的还有很多。
#10
希望楼主看完之后能理解代码的意思,之后最好要亲自敲一遍代码
#11
很感谢您的答案,虽然以我目前的知识水平还不能理解,但是我会努力地把你这些弄通透!
#12
对于那几个函数的调用不怎么会写,能不能写一个让我借鉴一下啊。麻烦您了。
#13
大神有没有c++语言成绩管理系统的代码