C语言课程设计学生成绩管理系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《C语言程序设计》课程设计报告学生成绩管理系统学生姓名:学号:班级:指导教师:日期:2011年12月18日1.设计目标设计一个简单的学生成绩管理系统,系统要解决成绩录入、计算学分和平均分成绩排名和成绩查询等几个方面。主要功能分为四部分:①提供成绩录入界面。②统计每个学生的总分和平均分。③按总分由大刀小排出名次。④提供成绩查询功能,即任意输入一个学号,能够查询出该学生在班级中的排名及其考试成绩。2.总体设计根据需求分析的结果,本系统至少要分为以下几个模块:main函数、成绩录入模块、成绩统计模块、成绩排名模块和成绩查询模块。其中各模块的功能说明如下:Main函数模块的主要功能为提供程序入口、前期环境设置、调用主要的执行函数和程序结束前的数据处理。成绩录入模块的主要功能为提供简单的成绩录入界面,将输入的成绩存储在对应的数据结构中。成绩统计模块的主要功能为统计每个学生的总分和平均分并输出。成绩排名模块的主要功能为按总分由大到小排出名次并输出。成绩查询模块的主要功能为根据用户输入一个学号,能够查找该学生在班级中的排名及其考试成绩。根据上述描述,给出该系统的总体设计图,如下图所示:学生成绩管理系统成绩录入模块成绩排名模块成绩查询模块主调函数模块成绩统计模块3.详细设计由于该系统涉及多个学生的成绩存储,因此,定义一个数据结构,用于存储这些信息。现仅对学生语文成绩、数学成绩、英语成绩进行统计管理。建立以下数据结构:classStudent{public:charnumber[Max];//存储学生学号charname[Max];//存储学生姓名doublechinese;//存储语文成绩doublemath;//存储数学成绩doubleenglish;//存储英语成绩doubletotal;//总成绩doubleaverage;//平均成绩intrank;//排名};I、成绩录入模块成绩录入就是对前面定义的类Student中的成员进行赋值。其中,用户需要输入的是学生的学号、姓名两个基本信息和语文、数学和英语三门成绩,其余总成绩、平均成绩和排名由后续的计算函数来实现。实现成绩录入模块的函数代码如下:voidsetData(Student&s)//成绩录入模块{cout输入学号,姓名,语文,数学,英语成绩:;//录入数据cins.numbers.names.chineses.maths.english;s.total=0;//初始化s.average=0;s.rank=0;}该函数运行时其结果如下图所示:输入学生信息的个数可在主函数用修改相应数值。II、成绩统计模块成绩统计模块需要建立在成绩录入模块的基础之上,当系统中已经包含一些数据记录后才能对这些成绩求总分、平均分等操作。本模块包含对输入的数据计算总分和计算平均分,其中,cout()函数用于计算一个同学的总分和平均分,而getAverage()函数则求出整个班级所有的三门课程的平均成绩,其函数代码如下:voidcount(Student&s)//成绩统计{s.total=s.chinese+s.math+s.english;//求三门课程的总分s.average=s.total/3;//求三门课程的平均分}doublegetAverage(StudentS[],intN)//求平均分函数{doubleAverage=0;//变量定义并初始化for(inti=0;iN;i++)//循环Average+=(S[i].chinese+S[i].math+S[i].english);//求所有学生的所有成绩和Average/=(N*3);//求所有学生的成绩平均值returnAverage;//返回该平均值}其中,计算整个班级所有的三门课程的成绩getAverage()函数的实现流程图如下:是否注意:该统计模块中,需要统计一个班级同学的总分和平均分,就需要确定班上同学的人数,这个人数就放在常量N中。III、成绩排名模块在获得整个班级的总分和平均分之后,就可以对该班级中的同学按照某个参数进行排名了。在该系统中,使用每位同学的平均成绩对其进行排名,此处使用插开始Average=0,i=0Average+=(S=[i].chinese+S[i].math+S[i].english)IN?Average/=(N*3)返回Average的值结束入排序来实现。插入排序的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止,其算法流程图如下:否是是否开始初始化i为1取出第i个元素第i个元素值第i+1个元素值?大雨第i个元素的元素后移并插入i减1i=0?排序完成结果根据上述的算法流程图,则乘机排名模块的实现代码如下:voidsort(StudentS[],intN)//插入法排序(成绩排名){intindex;//定义变量Studentinserter;//创建对象for(inti=1;iN;i++)//循环{inserter=S[i];//对象初始化index=i-1;//变量初始化while(index=0&&inserter.averageS[index].average)//比较{S[index+1]=S[index];//元素后移index--;}S[index+1]=inserter;//插入该元素}for(intj=0;jN;j++)S[j].rank=j+1;//设置排名}IV、成绩查询模块该系统中的成绩查询工嫩嫩个是根据用户输入的学生的学号作为关键字,在数据结构中进行查询,并将查询结果即该记录的位置返回,其实现代码如下:intsearch(StudentS[],intN,char*n)//成绩查询模块{for(inti=0;iN;i++)//在所有记录中查询{if(strcmp(S[i].number,n)==0)//找到returni;//返回结果所在的位置}return-1;//没有找到}上述代码,第一行代码函数的生命中,参数字符串n即为用户输入的需要查询的学生学号,将该学号与所有数据元素进行比较,找到则返回该元素的位置,否则返回-1。该函数执行的流程图如下图:是否是否警告:在上述第五行代码中,使用了字符串比较函数strcmp()来实现两个学号的比较,因此在预处理中必须加上string.h头文件。开始i=0Strcmp(S[i].number,n=0returnii++iN?return-1结束V、输出模块事实上,如果对该系统内的成绩做了排序、统计和查询等功能后,都需要将结果输出。下面给出输出学生信息的函数print(),代码如下:voidprint(Student&s)//输出结果{cout排名\t学号\t姓名\t语文:\t//定义输出格式数学:\t英语:\t总分\t平均分endl;couts.rank\ts.number\ts.name\ts.chinese\t//输出成员的值s.math\ts.english\ts.total\ts.averageendl;}提示:该函数中,输出了学生成绩管理系统中所有的成员值。在主函数main()中调用成绩查询、统计等函数后都需要调用该函数,以输出结果到屏幕上。4.调试与测试①调试方法首先,对学生成绩管理系统进行系统实现,利用C++然后,在C++继承开发环境中利用Win32控制台程序,将所有模块代码及主函数代码输入最后,按照提示进行系统调试。②测试结果测试结果正确,运行如下图所示:分别对3个模块测试首先输入3组同学数据信息1)打印所有排名2)打印出成绩在全班平均分以上的学生名单和数据信息3)任意输入一个学号,查找出该学生在班级中的排名及其考试成绩5.分析及结论系统实现功能:该系统实现对学生成绩管理功能,主要包括成绩录入、计算总分和平均分、成绩排名和成绩查询。系统设计中的难点:在程序开发阶段,main函数定义、输出模块及数据结构方面存在一定难点,而后参考部分文献决绝该问题。系统不足之处:为系统实现简单,并没有对班级进行分类,而且仅仅以三门学科进行数据统计。6.参考文献[1]《C++程序设计》(谭浩强编著)[2]《C++程序设计(第2版)》(周志德等编著)[3]《C语言程序设计》(普措才仁)7.附录源程序清单#includestdafx.h#includeiostream#includecstdiousingnamespacestd;constintMax=5;//字符串最大长度classStudent;//类声明voidsetData(Student&s);//设置对象s的数据voidcount(Student&s);//计算对象s的总分,平均分voidsort(StudentS[],intN);//把长度为N的对象数组S,按平均分排序doublegetAverage(StudentS[],intN);//计算全班的平均分voidprint(Student&s);//打印信息intsearch(StudentS[],intN,char*n);//从长度为M的对象数组中,查找学号n的位置classStudent{public:charnumber[Max];//学号charname[Max];//姓名doublechinese;//语文成绩doublemath;//数学成绩doubleenglish;//英语成绩doubletotal;//总分doubleaverage;//平均分intrank;//只有比较才不为了0};voidsetData(Student&s)//成绩录入模块{cout输入学号,姓名,语文,数学,英语成绩:;//录入数据cins.numbers.names.chineses.maths.english;s.total=0;//初始化s.average=0;s.rank=0;}voidcount(Student&s)//成绩统计{s.total=s.chinese+s.math+s.english;//求三门课程的总分s.average=s.total/3;//求三门课程的平均分}voidsort(StudentS[],intN)//插入法排序(成绩排名){intindex;//定义变量Studentinserter;//创建对象for(inti=1;iN;i++)//循环{inserter=S[i];//对象初始化index=i-1;//变量初始化while(index=0&&inserter.averageS[index].average)//比较{S[index+1]=S[index];//元素后移index--;}S[index+1]=inserter;//插入该元素}for(intj=0;jN;j++)S[j].rank=j+1;//设置排名}doublegetAverage(StudentS[],intN)//求平均分函数{doubleAverage=0;//变量定义并初始化for(inti=0;iN;i++)//循环Average+=(S[i].chinese+S[i].math+S[i].english);//求所有学生的所有成绩和Average/=(N*3);//求所有学生的成绩平均值returnAverage;//返回该平均值}voidprint(Student&s)//输出结果{cout排名\t学号\t姓名\t语文:\t//定义输出格式数学:\t英语:\t总分\t平均分endl;couts.rank\ts.number\ts.name\ts.chinese\t//输出成员的值s.math\ts.engl

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功