C语言利用结构体数组实现学生成绩管理系统
2021-03-25 09:26
标签:参数 comment core lsp strong roc col 实现 查询 这篇文章主要为大家详细介绍了C语言利用结构体数组实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入)。定义结构体类型描述学生信息,每个学生信息包括:学号、姓名、多门课的成绩、总成绩和平均成绩。用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统。 代码: C语言利用结构体数组实现学生成绩管理系统 标签:参数 comment core lsp strong roc col 实现 查询 原文地址:https://www.cnblogs.com/ypha/p/13776999.html
(1) 录入每个学生的学号、姓名和各科考试成绩。
(2) 计算每门课程的总分和平均分。
(3) 计算每个学生的总分和平均分。
(4) 按每个学生的总分由高到低排出名次表。
(5) 按学号由小到大排出成绩表。
(6) 按姓名的字典顺序排出成绩表。
(7) 按学号查询学生排名极其考试成绩。
(8) 按姓名查询学生排名极其考试成绩。
(9) 按优秀(90~100)、良好(80~90)、中等(70~80)、及格(60~70)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比。
(10) 输出每个学生的学号、姓名、各科考试成绩以及每门课程的总分和平均分。
#include
#include
#include
#define SN 30 //学生人数
#define CN 6 //科目数
#define NL 20 //名字字节长度
typedef
struct
student{
long
int
num;
char
name[NL];
float
score[CN];
float
sum;
float
aver;
}STU;
STU s[SN];
int
itemSelected=-1;
int
n=0;
//学生数
int
m=0;
//课程数
int
Menu();
//菜单
void
chose(
int
itemSelected);
//选择
void
inputScore();
//输入分数
void
AverofC();
//计算每门课程平均数
void
AverofS();
//每名学生总分和平均分
void
sortByNum();
//学生总分排行
void
sortByGrade();
void
sortByName();
void
findByNum();
void
findByName();
void
statisticsAnalysis();
void
printScore();
void
main(){
printf
(
"请输入学生总数(n
,SN);
scanf
(
"%d"
,&n);
printf
(
"请输入课程总数(m
,CN);
scanf
(
"%d"
,&m);
while
(1){
itemSelected=Menu();
chose(itemSelected);
itemSelected=-1;
}
}
int
Menu(){
int
itemSelected;
system
(
"cls"
);
printf
(
"\n ==============学生成绩管理系统===============\n"
);
printf
(
"\t 1.输入学号、姓名及各科成绩\n"
);
printf
(
"\t 2.计算每门课程总分和平均分\n"
);
printf
(
"\t 3.计算每个学生总分和平局分\n"
);
printf
(
"\t 4.按每个学生总分高低排出名次表\n"
);
printf
(
"\t 5.按学号从小到大排出成绩表\n"
);
printf
(
"\t 6.按学生字典顺序排出成绩表\n"
);
printf
(
"\t 7.按学号查询学生排名和考试成绩\n"
);
printf
(
"\t 8.按姓名查询学生排名和成绩\n"
);
printf
(
"\t 9.结果分析\n"
);
printf
(
"\t 10.输出信息\n"
);
printf
(
"\t 0.退出\n"
);
printf
(
"===============================================\n"
);
printf
(
"请选择选项:"
);
scanf
(
"%d"
,&itemSelected);
return
itemSelected;
}
void
chose(
int
itemSelected){
switch
(itemSelected){
case
1: inputScore();
break
;
case
2: AverofC();
break
;
case
3: AverofS();
break
;
case
4: sortByGrade();
break
;
case
5: sortByNum();
break
;
case
6: sortByName();
break
;
case
7: findByNum();
break
;
case
8: findByName();
break
;
case
9: statisticsAnalysis();
break
;
case
10: printScore();
break
;
case
0:
exit
(0);
printf
(
"即将退出程序"
);
break
;
default
:
printf
(
"输入错误!"
);
break
;
}
}
void
inputScore(){
printf
(
"\n===============================================\n"
);
printf
(
"请输入学生学号、姓名及各科信息(输入0停止信息输入)\n"
);
for
(
int
i=0;i
printf
(
"学号(8位)"
);
scanf
(
"%ld"
,&s[i].num);
if
(s[i].num==0)
break
;
getchar
();
//吸收多余换行符
printf
(
"姓名"
);
gets
(s[i].name);
printf
(
"请输入各科成绩"
);
s[i].sum=0;
for
(
int
j =0;j
scanf
(
"%f"
,&s[i].score[j]);
s[i].sum +=s[i].score[j];
}
}
}
void
AverofC(){
float
sum[CN]={0};
float
average[CN]={0};
for
(
int
i=0;i
for
(
int
j=0;j
sum[i]+=s[j].score[i];
}
average[i]=sum[i]/n;
printf
(
"第%d门课程的总分为:%.2f,平均分为%.2f\n"
,i+1,sum[i],average[i]);
}
getch();
}
void
AverofS(){
float
sum[SN]={0};
float
average[SN]={0};
for
(
int
i=0;i
for
(
int
j=0;j
sum[i]+=s[i].score[j];
}
average[i]=sum[i]/m;
printf
(
"第%d个学生的总分为:%.2f,平均分为%.2f\n"
,i+1,sum[i],average[i]);
}
getch();
}
void
sortByNum(){
//按学号从小到大排序
STU temp1={0};
for
(
int
i=0;i
if
(s[i].num>s[i+1].num){
temp1=s[i];
s[i]=s[i+1];
s[i+1]=temp1;
}
}
printf
(
"\n==============按学号从小到排序===============\n"
);
for
(
int
j=0;j
printf
(
"该学生的学号为:%d\n"
,s[j].num);
printf
(
"该学生的姓名为:"
);
for
(
int
k=0;k
printf
(
"%c"
,s[j].name[k]);
}
printf
(
"\n该学生的各科成绩为\n"
);
for
(
int
c=0;c
printf
(
"第%d门成绩为%.2f\n"
,c+1,s[j].score[c]);
}
printf
(
"\n"
);
}
getch();
}
void
sortByGrade(){
//按总分从高到低排序
STU temp1={0};
for
(
int
i=0;i
if
(s[i].sum
temp1=s[i];
s[i]=s[i+1];
s[i+1]=temp1;
}
}
printf
(
"\n============按总成绩从高到低排序===========\n"
);
for
(
int
j=0;j
printf
(
"该学生的学号为:%d\n"
,s[j].num);
printf
(
"该学生的姓名为:"
);
for
(
int
k=0;k
printf
(
"%c"
,s[j].name[k]);
}
printf
(
"\n该学生的各科成绩为\n"
);
for
(
int
c=0;c
printf
(
"第%d门成绩为%.2f\n"
,c+1,s[j].score[c]);
}
printf
(
"该学生的总成绩为:%.2f"
,s[j].sum);
printf
(
"\n"
);
}
getch();
}
void
sortByName(){
//按姓名首字母字典顺序排序
STU temp1={0};
for
(
int
i=0;i
if
(((
int
)(s[i].name[0])>(
int
)(s[i+1].name[0]))){
//将名字首字母转成成ASCII码从而比较大小排序
temp1=s[i];
s[i]=s[i+1];
s[i+1]=temp1;
}
}
printf
(
"\n==============按学号从小到排序===============\n"
);
for
(
int
j=0;j
printf
(
"该学生的学号为:%d\n"
,s[j].num);
printf
(
"该学生的姓名为:"
);
for
(
int
k=0;k
printf
(
"%c"
,s[j].name[k]);
}
printf
(
"\n该学生的各科成绩为\n"
);
for
(
int
c=0;c
printf
(
"第%d门成绩为%.2f\n"
,c+1,s[j].score[c]);
}
printf
(
"该学生的总成绩为:%.2f"
,s[j].sum);
printf
(
"\n"
);
}
getch();
}
void
findByNum() {
int
find=-1;
//记录需要查找的学号,并作为查找成功与否的标识符
printf
(
"请输入要查找的学号:"
);
scanf
(
"%d"
,&find);
for
(
int
i=0;i
if
(s[i].num==find){
printf
(
"\n查找成功\n"
);
printf
(
"该学生的学号为%d\n"
,s[i].num);
printf
(
"该学生的姓名为:"
);
for
(
int
k=0;k
printf
(
"%c"
,s[i].name[k]);
}
printf
(
"\n该学生的各科成绩为\n"
);
for
(
int
c=0;c
printf
(
"第%d门成绩为%.2f\n"
,c+1,s[i].score[c]);
}
printf
(
"该学生的总成绩为:%.2f"
,s[i].sum);
printf
(
"\n"
);
find=-2;
}
}
if
(find!=-2){
printf
(
"查无此人\n"
);
printf
(
"按任意键继续"
);
}
getch();
}
void
findByName(){
int
is_find=0;
char
find[SN];
printf
(
"请输入要查找的姓名:"
);
getchar
();
gets
(find);
for
(
int
i=0;i
if
(
strcmp
(s[i].name,find)==0){
printf
(
"\n查找成功\n"
);
printf
(
"该学生的学号为%d\n"
,s[i].num);
printf
(
"该学生的姓名为:"
);
for
(
int
k=0;k
printf
(
"%c"
,s[i].name[k]);
}
printf
(
"\n该学生的各科成绩为\n"
);
for
(
int
c=0;c
printf
(
"第%d门成绩为%.2f\n"
,c+1,s[i].score[c]);
}
printf
(
"该学生的总成绩为:%.2f"
,s[i].sum);
printf
(
"\n"
);
is_find=1;
}
}
if
(is_find!=1){
printf
(
"查无此人\n"
);
printf
(
"按任意键继续"
);
}
getch();
}
void
statisticsAnalysis(){
printf
(
"输出每门课程优秀、良好、中等、及格、不及格人数所占的百分比\n"
);
int
a1[CN]={0},a2[CN]={0},a3[CN]={0},a4[CN]={0},a5[CN]={0};
for
(
int
i=0;i
for
(
int
j=0;j
if
(s[i].score[j]>=90 && s[i].score[j]
a1[j]++;
}
else
if
(s[i].score[j]>=80 && s[i].score[j]
a2[j]++;
}
else
if
(s[i].score[j]>=70 && s[i].score[j]
a3[j]++;
}
else
if
(s[i].score[j]>=60 && s[i].score[j]
a4[j]++;
}
else
if
(s[i].score[j]
a5[j]++;
}
}
}
printf
(
"\n====================各们课程概况==================\n"
);
for
(
int
k=0;k
printf
(
"第%d门课的优秀人数占%.2f%%,"
,k+1,(a1[k]/(n*1.0))*100);
printf
(
"良好人数占%.2f%%,"
,(a2[k]/(n*1.0))*100);
printf
(
"中等人数占%.2f%%,"
,(a3[k]/(n*1.0))*100);
printf
(
"及格人数占%.2f%%,"
,(a4[k]/(n*1.0))*100);
printf
(
"不及格人数占%.2f%%,"
,(a5[k]/(n*1.0))*100);
printf
(
"\n"
);
}
getch();
}
void
printScore(){
printf
(
"==============以下为学生信息=============="
);
for
(
int
j=0;j
printf
(
"该学生的学号为:%d\n"
,s[j].num);
printf
(
"该学生的姓名为:"
);
for
(
int
k=0;k
printf
(
"%c"
,s[j].name[k]);
}
printf
(
"\n该学生的各科成绩为\n"
);
for
(
int
c=0;c
printf
(
"第%d门成绩为%.2f\n"
,c+1,s[j].score[c]);
}
printf
(
"该学生的总成绩为:%.2f"
,s[j].sum);
printf
(
"\n"
);
}
getch();
}
文章标题:C语言利用结构体数组实现学生成绩管理系统
文章链接:http://soscw.com/index.php/essay/67908.html