C++成绩管理系统设计与实现实验报告Word文档下载推荐.docx
- 文档编号:22519553
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:39
- 大小:173.06KB
C++成绩管理系统设计与实现实验报告Word文档下载推荐.docx
《C++成绩管理系统设计与实现实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++成绩管理系统设计与实现实验报告Word文档下载推荐.docx(39页珍藏版)》请在冰豆网上搜索。
编译器:
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<
iostream>
cstring>
iomanip>
cstdlib>
fstream>
string>
cctype>
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<
s_num;
i++)
{
if(i>
0)
{
cout<
<
"
《****************************************************************************》"
;
《********************************请继续输入**********************************》"
endl;
}
cout<
请输入第"
<
i+1<
个学生的班级(例如:
网络142):
"
cin.get(p[i].classnum,SIZE);
cin.get();
while(!
cin.good())
cin.clear();
cin.sync();
输入有误!
请重新输入:
cin.get(p[i].classnum,SIZE);
cin.get();
请输入"
个学生的学号:
cin.get(p[i].id,SIZE);
cin.get(p[i].id,SIZE);
for(intk=0;
k<
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.clear();
cin.sync();
cout<
cin.get(p[i].id,SIZE);
cin.get();
}
}
请输入其姓名:
cin.getline(p[i].name,SIZE);
cin.getline(p[i].name,SIZE);
for(intj=0;
j<
c_num;
j++)
c_name[j]<
的成绩:
cin>
>
*(p[i].score+j);
while(!
cin.clear();
cin.sync();
cin>
while(*(p[i].score+j)>
100||*(p[i].score+j)<
输入有误,请输入0到100之内的数:
cin>
system("
pause"
);
cls"
}
}
voidshow(studentp[],stringc_name[],ints_num,intc_num)
cout<
********************************************************************************"
科目:
\t\t"
for(intj=0;
j<
c_num;
\t"
c_name[j];
p[i].classnum<
班:
p[i].name<
:
*(p[i].score+j)<
system("
voidstatistic(studentp[],stringc_name[],ints_num,intc_num)
intsum,ave,max,min,pass,trigger,cl_num;
doublepass_rate;
【"
c_name[i]<
科目】"
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;
k;
if(strcmp(p[k].classnum,p[j].classnum)==0)
trigger=1;
if(trigger==1)
continue;
for(j=k;
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)
min=*(p[j].score+i);
if(*(p[j].score+i)>
=60)
pass++;
《"
p[k].classnum<
班》"
总分为:
sum<
ave=sum/cl_num;
平均分为:
ave<
最高分为:
max<
最低分为:
min<
pass_rate=(1.0*pass)/cl_num;
及格率为:
pass_rate*100<
%"
voidsection(studentp[],stringc_name[],ints_num,intc_num)
ints_nopass,s_60,s_70,s_80,s_90,trigger;
】"
s_nopass=0;
s_60=0;
s_70=0;
s_80=0;
s_90=0;
for(intj=0;
for(intj=k;
=90)
s_90++;
elseif(*(p[j].score+i)>
=80)
s_80++;
=70)
s_70++;
s_60++;
elseif(*(p[j].score+i)<
60)
s_nopass++;
不及格:
s_nopass<
人"
60至70分:
s_60<
70至80分:
s_70<
80至90分:
s_80<
90至100分:
s_90<
voidsearch(studentp[],stringc_name[],ints_num,intc_num)
charname_or_id[SIZE];
请输入学号或名字:
cin.get(name_or_id,SIZE);
cin.get();
while(!
cin.clear();
cin.sync();
cin.get(name_or_id,SIZE);
intn=0;
if(strcmp(p[i].name,name_or_id)==0||strcmp(p[i].id,name_or_id)==0)
n++;
学号"
p[i].id<
的"
同学的成绩如下:
分"
if(n==0)
没有这名同学的信息。
voidsort(studentp[],stringc_name[],ints_num,intc_num)
int*score_s=newint[s_num];
score_s[j]=*(p[j].score+i);
quicksort(score_s,0,s_num-1);
】由高到低的分数排序如下:
score_s[j]<
分"
delete[]score_s;
voidupdate(studentp[],stringc_name[],ints_num,intc_num)
charch;
请选择要执行的操作:
(a)更新学生的基本信息(b)更新学生的成绩"
(q)结束"
输入:
cin.get(ch);
********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 成绩管理系统 设计 实现 实验 报告