C++成绩管理系统设计与实现实验报告.docx
- 文档编号:9383488
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:39
- 大小:173.06KB
C++成绩管理系统设计与实现实验报告.docx
《C++成绩管理系统设计与实现实验报告.docx》由会员分享,可在线阅读,更多相关《C++成绩管理系统设计与实现实验报告.docx(39页珍藏版)》请在冰豆网上搜索。
C++成绩管理系统设计与实现实验报告
面向对象编程实验报告
题目:
成绩管理系统设计与实现
学生姓名:
学号:
院(系):
专业:
2016年7月5日
一、实验目的
用C++语言,实现对成绩管理系统的设计与实现,程序要有信息维护,信息查询,成绩统计,成绩排序这些功能,通过本次设计,提高用C++编写程序的能力,更加熟悉C++编程语言。
实验内容
二、实验内容
用C++编写成绩管理系统,实现了以下功能:
(1)信息维护:
学生信息数据要以文件的形式保存,能实现学生信息数据的维护。
此模块包括子模块有:
增加学生信息、删除学生信息、修改学生信息
(2) 信息查询:
要求:
查询时可实现按姓名查询、按学号查询
(3) 成绩统计:
可统计出所有课程在各个分数段的情况。
(4) 排序:
把每一门的课程的成绩进行降序排列
三、实验环境
编译器:
VS2013
操作系统:
Windows8.0
四、设计思路或方案
1.信息录入:
初次使用成绩管理系统,我们让用户将必要的信息录入进去。
由用户设置学生总数,课程总数,学期数,以及一些基本信息。
之后就可以直接从文件里读取数据。
2.采用文件保存信息的方法
将学生基本信息,课程信息,成绩信息,分别保存在三个文件里,打开文件时,依次将三个文件打开。
每次保存文件时,由用户自己输入文件名,可多次录入不同批次的学生,只要将这些信息保存到不同的文件中即可。
需要哪些学生的信息,再次进入系统就读入哪些文件信息。
比如,可将不同年级的学生信息分开存放。
3.定义结构体
内容包括,学生班级,学号,姓名,成绩。
4.设计函数接口完成相关功能
1>输入学生的成绩信息,包括学号、姓名、性别等基本信息和各科成绩函数
2>显示全部学生各科成绩信息函数
3>对各科分班进行成绩统计分析,计算总分、平均分、最高分、最低分、及格率函数
4>统计各个科目各分数段人数及班级信息函数
5>按学号或姓名查找并显示某个学生的各科成绩函数
6>按课程成绩或总分由高到低排序显示函数
7>更新某个学生的基本信息或课程成绩函数
五、程序清单
1.头文件:
#define_CRT_SECURE_NO_WARNINGS1
#ifndef_GRADE_H__
#define_GRADE_H__
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
constintSIZE=20;
structstudent
{
charclassnum[SIZE];//班级
charid[SIZE];//学号
charname[SIZE];//姓名
int*score;
};
voidinput(studentp[],stringc_name[],ints_num,intc_num);//输入学生的成绩信息,包括学号、姓名、性别等基本信息和各科成绩
voidshow(studentp[],stringc_name[],ints_num,intc_num);//显示全部学生各科成绩信息;
voidstatistic(studentp[],stringc_name[],ints_num,intc_num);//对各科分班进行成绩统计分析,计算总分、平均分、最高分、最低分、及格率等;
voidsection(studentp[],stringc_name[],ints_num,intc_num);//统计各个科目各分数段人数及班级信息;
voidsearch(studentp[],stringc_name[],ints_num,intc_num);//按学号或姓名查找并显示某个学生的各科成绩;
voidsort(studentp[],stringc_name[],ints_num,intc_num);//按课程成绩或总分由高到低排序显示;
voidupdate(studentp[],stringc_name[],ints_num,intc_num);//更新某个学生的基本信息或课程成绩;
voidquicksort(ints[],intl,intr);//快速排序
voidfileout(studentp[],stringc_name[],ints_num,intc_num,intsemester);//文件形式输出
#endif
2.函数实现
#include"head.h"
voidinput(studentp[],stringc_name[],ints_num,intc_num)
{
for(inti=0;i { if(i>0) { cout<<"《****************************************************************************》"; cout<<"《********************************请继续输入**********************************》"; cout<<"《****************************************************************************》"; cout< } cout<<"请输入第"< 网络142): "; cin.get(p[i].classnum,SIZE); cin.get(); while(! cin.good()) { cin.clear(); cin.sync(); cout<<"输入有误! 请重新输入: "; cin.get(p[i].classnum,SIZE); cin.get(); } cout<<"请输入"< "; cin.get(p[i].id,SIZE); cin.get(); while(! cin.good()) { cin.clear(); cin.sync(); cout<<"输入有误! 请重新输入: "; cin.get(p[i].id,SIZE); cin.get(); } for(intk=0;k { if(k==i) k++; if(strcmp(p[k].id,p[i].id)==0) { cout<<"与已有学生的学号重复,请重新输入: "; cin.get(p[i].id,SIZE); cin.get(); while(! cin.good()) { cin.clear(); cin.sync(); cout<<"输入有误! 请重新输入: "; cin.get(p[i].id,SIZE); cin.get(); } } } cout<<"请输入其姓名: "; cin.getline(p[i].name,SIZE); while(! cin.good()) { cin.clear(); cin.sync(); cout<<"输入有误! 请重新输入: "; cin.getline(p[i].name,SIZE); } for(intj=0;j { cout<<"请输入"< "; cin>>*(p[i].score+j); cin.get(); while(! cin.good()) { cin.clear(); cin.sync(); cout<<"输入有误! 请重新输入: "; cin>>*(p[i].score+j); cin.get(); } while(*(p[i].score+j)>100||*(p[i].score+j)<0) { cout<<"输入有误,请输入0到100之内的数: "; cin>>*(p[i].score+j); cin.get(); while(! cin.good()) { cin.clear(); cin.sync(); cout<<"输入有误! 请重新输入: "; cin>>*(p[i].score+j); cin.get(); } } } system("pause"); system("cls"); } } voidshow(studentp[],stringc_name[],ints_num,intc_num) { cout<<"********************************************************************************"; cout<<"科目: \t\t"; for(intj=0;j { cout<<"\t"< } cout< cout<<"********************************************************************************"; for(inti=0;i { cout< "< "; cout<<"\t"; for(intj=0;j cout<<*(p[i].score+j)<<"\t"; cout< cout<<"********************************************************************************"; } system("pause"); system("cls"); } voidstatistic(studentp[],stringc_name[],ints_num,intc_num) { intsum,ave,max,min,pass,trigger,cl_num; doublepass_rate; for(inti=0;i { cout<<"【"< for(intk=0;k { sum=0; trigger=0; ave=0; cl_num=0; pass_rate=0; pass=0; max=*(p[k].score+i); min=*(p[k].score+i); intj; for(j=0;j if(strcmp(p[k].classnum,p[j].classnum)==0) trigger=1; if(trigger==1) continue; for(j=k;j { if(strcmp(p[k].classnum,p[j].classnum)==0) { sum+=*(p[j].score+i); cl_num++; if((*p[j].score+i)>max) max=*(p[j].score+i); if((*p[j].score+i) min=*(p[j].score+i); if(*(p[j].score+i)>=60) pass++; } } cout<<"《"< cout<<"********************************************************************************"; cout<<"总分为: "< ave=sum/cl_num; cout<<"平均分为: "< cout<<"最高分为: "< cout<<"最低分为: "< pass_rate=(1.0*pass)/cl_num; cout<<"及格率为: "< cout<<"********************************************************************************"; } } system("pause"); system("cls"); } voidsection(studentp[],stringc_name[],ints_num,intc_num) { ints_nopass,s_60,s_70,s_80,s_90,trigger; for(inti=0;i { cout<<"【"< for(intk=0;k { trigger=0; s_nopass=0; s_60=0; s_70=0; s_80=0; s_90=0; for(intj=0;j if(strcmp(p[k].classnum,p[j].classnum)==0) trigger=1; if(trigger==1) continue; for(intj=k;j { if(strcmp(p[k].classnum,p[j].classnum)==0) { if(*(p[j].score+i)>=90) s_90++; elseif(*(p[j].score+i)>=80) s_80++; elseif(*(p[j].score+i)>=70) s_70++; elseif(*(p[j].score+i)>=60) s_60++; elseif(*(p[j].score+i)<60) s_nopass++; } } cout< cout<<"《"< cout<<"********************************************************************************"; cout<<"不及格: "< cout<<"60至70分: "< cout<<"70至80分: "< cout<<"80至90分: "< cout<<"90至100分: "< cout<<"********************************************************************************"; } } system("pause"); system("cls"); } voidsearch(studentp[],stringc_name[],ints_num,intc_num) { charname_or_id[SIZE]; cout<<"请输入学号或名字: "; cin.get(name_or_id,SIZE); cin.get(); while(! cin.good()) { cin.clear(); cin.sync(); cout<<"输入有误! 请重新输入: "; cin.get(name_or_id,SIZE); cin.get(); } cout<<"********************************************************************************"; intn=0; for(inti=0;i { if(strcmp(p[i].name,name_or_id)==0||strcmp(p[i].id,name_or_id)==0) { n++; cout<<"学号"< "< cout<<"********************************************************************************"; for(intj=0;j cout< "<<*(p[i].score+j)<<"分"<<""; cout< cout<<"********************************************************************************"; } } if(n==0) cout<<"没有这名同学的信息。 "< system("pause"); system("cls"); } voidsort(studentp[],stringc_name[],ints_num,intc_num) { int*score_s=newint[s_num]; for(inti=0;i { for(intj=0;j score_s[j]=*(p[j].score+i); quicksort(score_s,0,s_num-1); cout<<"【"< "< cout<<"********************************************************************************"; for(intj=0;j cout< cout< cout<<"********************************************************************************"; } system("pause"); system("cls"); delete[]score_s; } voidupdate(studentp[],stringc_name[],ints_num,intc_num) { charname_or_id[SIZE]; cout<<"请输入学号或名字: "; cin.get(name_or_id,SIZE); cin.get(); charch; intn=0; for(inti=0;i { if(strcmp(p[i].name,name_or_id)==0||strcmp(p[i].id,name_or_id)==0) { n++; cout<<"请选择要执行的操作: "< cout<<"********************************************************************************"; cout<<"(a)更新学生的基本信息(b)更新学生的成绩"< cout<<"(q)结束"< cout<<"********************************************************************************"; cout<<"输入: "; cin.get(ch); cin.get(); cout<<"********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 成绩管理系统 设计 实现 实验 报告