1、 1南 昌 大 学C+ 选 修 课课程设计报告题 目:学 院:专 业:姓 名:学 号:电 话:2016 年 6 月 17 日2目录1需求分析32概要设计33程序实现思路44设计总结45参考文献56源代码63一、需求分析经 过 研 一 下 学 期 C+选 修 课 的 学 习 , 对 C+基 于 对 象 的 程 序设 计 有 了 一 定 的 认 识 , 根 据 所 学 的 知 识 , 设 计 学 生 成 绩 管 理 系 统 。学 生 成 绩 统 计 管 理 系 统 是 为 某 班 级 成 绩 统 计 管 理 的 一 个 系 统 。为 方 便 班 级 的 管 理 人 员 对 学 生 的 信 息 进
2、行 管 理 , 该 系 统 中 包 括 学号 、 姓 名 、 大 学 物 理 、 高 数 、 C+语 言 , 各 科 平 均 成 绩 、 各 科 成绩 “优 秀 ”、 “良 好 ”、 “中 等 ”、 “及 格 ”、 “不 及 格 ”的 人 数 及 其 所占 比 例 , 学 生 的 总 成 绩 、 平 均 成 绩 及 成 绩 排 名 。通过仔细研究借鉴众多相关毕业设计研究等文献资料(见参考文献一) ,学习书籍谭浩强面向对象的 C+程序设计编写了该成绩管理系统。主要的功能有学生数据的增加、删除、修改、查询,另外实现一些统计的功能,例如:成绩的输入、成绩统计、总成绩统计、成绩的统计结果显示。4二、概
3、要设计1、 本 程 序 所 用 到 的 所有抽象数据类型的定义如下:序号 成员名 数据类型 含义1 num long 学号2 name string 姓名3 sum double 总分4 range int 排名5 ave double 平均分6 score double 记录数组2、各程序模块的功能void input(); /输入void count(); /计算void sort(); /按学号升序排列void selectsort(); /按总成绩降序排列void insert(); /增加int del(); /删除void student:Exit(); /修改void searc
4、h(); /查询void display(); /显示以下为统计模块:5void count(); /计算成员函数void average(); /计算平均值成员函数void display(); /显示成员函数三、程序实现思路1.设计菜单实现功能成绩的输入(学号、姓名、大学物理、高数、C+语言) 。成绩统计(各科平均成绩、各科成绩“优秀” 、 “良好” 、 “中等” 、“及格” 、 “不及格”的人数及其所占比例) 。总成绩统计(学生的总成绩、平均成绩及成绩排名) 。成绩的统计结果显示。学生数据的增加、修改、与删除。学生数据的读取与存储。2.设计类与对象class student /建立 学生
5、 student 类,目的是存储学生个人信息public:long num; /学号string name; /姓名double scoren; /学生科目成绩double sum; /总成绩6double ave; /平均成绩int range; /排名void insert(); /增加int del(); /删除void search(); /查询void student:Exit();/修改void display(); /显示void input(); /输入void count(); /计算void sort(); /按学号升序排列void selectsort(); /按总成绩降
6、序排列stuN;class all /建立整体 all 类,目的是存放学生整体信息public:double ave; /每学科的平均成绩int people5; /每学科的各等级人数double percent5; /每学科的各等级人数比例void count(); /计算成员函数7void average(); /计算平均值成员函数void display(); /显示成员函数 aln;3.通过类的调用实现功能设计case 0:cout /引用库函数#include /引用控制符处理#include /字符串using namespace std;#define N 100 /宏定义#de
7、fine n 3class student /建立 学生类,用于存储学生个人信息public:long num; /学号string name; /姓名double scoren; /学生科目成绩double sum; /总成绩double ave; /平均成绩int range; /排名void input(); /输入void count(); /计算void sort(); /按学号升序排列15void selectsort(); /按总成绩降序排列void search(); /查询void insert(); /增加int del(); /删除void student:Exit();
8、 /修改数据void display(); /显示stuN;class all /建立整体类,用来存放学生整体信息public:double ave; /每学科的平均成绩int people5; /每学科的各等级人数double percent5; /每学科的各等级人数比例void count(); /计算成员函数void average(); /计算平均值成员函数void display(); /显示成员函数aln;int total=0; /定义全局变量void student:input() /输入学生个人信息16coutsetw(10)stutotal.num;cinsetw(10)s
9、tutotal.name;for(int j=0;jsetw(10)stutotal.scorej;void student:selectsort() /按总成绩降序排列student aa;int i,j;for(i=0;istuj.num)abc=stuj;stuj=stui;18stui=abc;void student:display() /显示学生个人信息selectsort(); /调用按总成绩降序排列函数coutfind_num;for(int i=0;iID;cinname1;for(int i=0;iaaaxyz;stutotal.num=a;stutotal.name=aa
10、;stutotal.score0=x;stutotal.score1=y;stutotal.score2=z;int student:del() /删除26int i,j,abc;coutabc;stutotal.sort(); /调用按学号升序排列函数for(i=0;iselect;system(“cls“);switch(select)28case 1:dosystem(“cls“);stutotal.input();total+; /人数+1cout“输入成功,继续输入请输入 Y/y:“endl;cout“退出请输入其他键 “endl;fflush(stdin);ch=getchar()
11、;while(ch=Y|ch=y);coutendl;break;case 2:if(total=0)cout“数组为空,请在主菜单中选择 1 增加数据“endl;elsecout“学生信息为:“endl;stutotal.count();29stutotal.display(); /显示coutendl;break;case 3:if(total=0)cout“数组为空,请在主菜单中选择 1 增加数据“endl;elsecout“各科学生成绩为 :“endl;aln.average();aln.count();aln.display();coutendl;break;case 4:if(to
12、tal=0)cout“数组为空,请在主菜单中选择 1 增加数据“endl;elsedo30stutotal.search();cout“查询成功,继续查询请输入 Y/y:“endl;cout“退出请按其他键 “endl;fflush(stdin);ch=getchar();while(ch=Y|ch=y);break;case 5:if(total=0)cout“数组为空,请在主菜单中选择 1 增加数据“endl;elsedostutotal.Exit(); /修改cout“修改成功,继续修改请输入 Y/y:“endl;cout“退出请按其他键 “endl;fflush(stdin);ch=getchar();while(ch=Y|ch=y);break;