1、C 语言程序设计课程设计报告学生成绩管理系统学生姓名:学 号:班 级:指导教师:日 期:2011 年 12 月 18 日1. 设计目标设计一个简单的学生成绩管理系统,系统要解决成绩录入、计算学分和平均分成绩排名和成绩查询等几个方面。主要功能分为四部分: 提供成绩录入界面。 统计每个学生的总分和平均分。 按总分由大刀小排出名次。 提供成绩查询功能,即任意输入一个学号,能够查询出该学生在班级中的排名及其考试成绩。2. 总体设计根据需求分析的结果,本系统至少要分为以下几个模块:main 函数、成绩录入模块、成绩统计模块、成绩排名模块和成绩查询模块。其中各模块的功能说明如下: Main 函数模块的主要
2、功能为提供程序入口、前期环境设置、调用主要的执行函数和程序结束前的数据处理。 成绩录入模块的主要功能为提供简单的成绩录入界面,将输入的成绩存储在对应的数据结构中。 成绩统计模块的主要功能为统计每个学生的总分和平均分并输出。 成绩排名模块的主要功能为按总分由大到小排出名次并输出。 成绩查询模块的主要功能为根据用户输入一个学号,能够查找该学生在班级中的排名及其考试成绩。根据上述描述,给出该系统的总体设计图,如下图所示:学生成绩管理系统成绩录入模块 成绩排名模块 成绩查询模块主调函数模块成绩统计模块3. 详细设计由于该系统涉及多个学生的成绩存储,因此,定义一个数据结构,用于存储这些信息。现仅对学生语
3、文成绩、数学成绩、英语成绩进行统计管理。建立以下数据结构:class Studentpublic:char numberMax; /存储学生学号char nameMax; /存储学生姓名double chinese; /存储语文成绩double math; /存储数学成绩double english; /存储英语成绩double total; /总成绩double average; /平均成绩int rank; /排名;I、成绩录入模块成绩录入就是对前面定义的类 Student 中的成员进行赋值。其中,用户需要输入的是学生的学号、姓名两个基本信息和语文、数学和英语三门成绩,其余总成绩、平均成绩
4、和排名由后续的计算函数来实现。实现成绩录入模块的函数代码如下:void setData(Student s.total=0; /初始化 s.average=0; s.rank=0; 该函数运行时其结果如下图所示:输入学生信息的个数可在主函数用修改相应数值。II、成绩统计模块成绩统计模块需要建立在成绩录入模块的基础之上,当系统中已经包含一些数据记录后才能对这些成绩求总分、平均分等操作。本模块包含对输入的数据计算总分和计算平均分,其中,cout()函数用于计算一个同学的总分和平均分,而getAverage()函数则求出整个班级所有的三门课程的平均成绩,其函数代码如下:void count(Stud
5、ent /求三门课程的总分s.average=s.total/3; /求三门课程的平均分double getAverage(Student S,int N) /求平均分函数 double Average=0; /变量定义并初始化for(int i=0;i=0?排序完成结果根据上述的算法流程图,则乘机排名模块的实现代码如下:void sort(Student S,int N) /插入法排序 (成绩排名) int index; /定义变量Student inserter; /创建对象for(int i=1;i=0 /元素后移index-; Sindex+1=inserter; /插入该元素 for
6、(int j=0;j头文件。开始i=0Strcmp(Si.number,n=0return ii+i #include using namespace std; const int Max=5; /字符串最大长度 class Student;/类声明 void setData(Student /设置对象 s 的数据 void count(Student /计算对象 s 的总分,平均分 void sort(Student S,int N);/把长度为 N 的对象数组 S,按平均分排序 double getAverage(Student S,int N);/计算全班的平均分 void print(
7、Student /打印信息 int search(Student S,int N,char *n);/从长度为 M 的对象数组中,查找学号 n 的位置 class Student public:char numberMax; /学号char nameMax; /姓名double chinese; /语文成绩double math; /数学成绩double english; /英语成绩double total; /总分double average; /平均分int rank; /只有比较才不为了 0 ; void setData(Student s.total=0;/初始化 s.average=
8、0; s.rank=0; void count(Student /求三门课程的总分s.average=s.total/3; /求三门课程的平均分void sort(Student S,int N) /插入法排序 (成绩排名) int index; /定义变量Student inserter; /创建对象for(int i=1;i=0 /元素后移index-; Sindex+1=inserter; /插入该元素 for(int j=0;jorder; switch(order) case 1: for(int j=0;jcompare) print(Sk); break; case 3: char codeMax; coutcode; int result=search(S,M,code); if(result=-1) cout“您输入的学号不存在!“endl; else print(Sresult); break; case 4:break; default:cout“输入的命令不存在!“endl; return 0;