学期考试结束,统计某班每个人的平均成绩,每门课的平均成绩,并按个人平均成绩从高到低的顺序输出成绩,输出不及格人名单。输入、输出格式自定。
→程序内容:
考试课程有:高等数学、物理、外语、C语言4门课程。
录入所有同学的成绩,对数据进行处理,输出所要求的内容,程序的功能主要包括以下几个方面:
①输入成绩
②修改记录
③删除记录
④输出成绩并按平均成绩排序,并标记平均分不及格的学生。
⑤界面提供上述功能选择。
⑥学生人数由软件根据输入的成绩记录数自动控制。
⑦提供输出成绩到文件以及从文件读取成绩功能。
【测试数据】
自定模拟数据
#include<stdio.h>
#include<windows.h>
#define Max 25
#define obj_num 5
struct Stu
{
char Name[25]; //姓名
int Number; //学号
int Language_score;//语文成绩
int Math_score; //数学成绩
int English_score; //英语成绩
int PE_score; //体育成绩
int C_score; //C语言成绩
int Sum_score; //总成绩
};
void input(struct Stu Class[],int j)
{
printf("输入第%d位同学姓名:",j+1);
scanf("%s",Class[j].Name);
getchar();
printf("输入第%d位同学学号:",j+1);
scanf("%d",&Class[j].Number);
printf("输入第%d位同学语文成绩:",j+1);
scanf("%d",&Class[j].Language_score);
printf("输入第%d位同学数学成绩:",j+1);
scanf("%d",&Class[j].Math_score);
printf("输入第%d位同学英语成绩:",j+1);
scanf("%d",&Class[j].English_score);
printf("输入第%d位同学体育成绩:",j+1);
scanf("%d",&Class[j].PE_score);
printf("输入第%d位同学C语言成绩:",j+1);
scanf("%d",&Class[j].C_score);
Class[j].Sum_score=Class[j].Language_score+Class[j].Math_score+Class[j].English_score+Class[j].PE_score+Class[j].C_score;
}
void output(struct Stu Class[],int n)
{
printf("---------------------------------------------\n");
printf("姓名 学号 语文 数学 英语 体育 C语言 总分");
printf("\n");
int j;
for(j=0; j<n; j++)
{
printf("%5s",Class[j].Name);
printf("%5d",Class[j].Number);
printf("%6d",Class[j].Language_score);
printf("%6d",Class[j].Math_score);
printf("%6d",Class[j].English_score);
printf("%6d",Class[j].PE_score);
printf("%6d",Class[j].C_score);
printf("%7d",Class[j].Sum_score);
printf("\n");
}
printf("---------------------------------------------\n");
}
void outputOne(struct Stu Class[],int j)
{
printf("姓名 学号 语文 数学 英语 体育 C语言 总分");
printf("\n");
printf("%5s",Class[j].Name);
printf("%5d",Class[j].Number);
printf("%6d",Class[j].Language_score);
printf("%6d",Class[j].Math_score);
printf("%6d",Class[j].English_score);
printf("%6d",Class[j].PE_score);
printf("%6d",Class[j].C_score);
printf("%7d",Class[j].Sum_score);
printf("\n");
}
void Sort(struct Stu Class[],int n)
{
int j,k;
struct Stu t;
for(j=0; j<n-1; j++)
{
for(k=0; k<n-j-1; k++)
{
if(Class[k].Sum_score<Class[k+1].Sum_score)
{
t=Class[k];
Class[k]=Class[k+1];
Class[k+1]=t;
}
}
}
}
int search(int number,int n,struct Stu Class[])
{
int i,p=0;
for(i=0; i<n; i++)
{
if(Class[i].Number==number)
{
p=i;
return p;
}
}
return -1;
}
void modify(int number,int n,struct Stu Class[])
{
int index=search(number,n,Class);
if(index==-1)
{
printf("找不到该学号\n");
}
else
{
printf("学号%d的学生是第%d位\n",number,index+1);
input(Class,index);
printf("修改成功\n");
output(Class,n);
}
}
void del(int number,int n,struct Stu Class[])
{
int index=search(number,n,Class);
if(index==-1)
{
printf("找不到该学号\n");
}
else
{
printf("学号%d的学生是第%d位\n",number,index);
int i;
for(i=index; i<n-1; i++)
{
Class[i]= Class[i+1];
}
printf("删除成功\n");
output(Class,n-1);
}
}
double calave(int n,struct Stu Class[],double ave[])
{
int Language_score_sum=0;
int Math_score_sum=0;
int English_score_sum=0;
int PE_score_sum=0;
int C_score_sum=0;
for(int i=0; i<n; i++)
{
Language_score_sum+=Class[i].Language_score;
Math_score_sum+=Class[i].Math_score;
English_score_sum+=Class[i].English_score;
PE_score_sum+=Class[i].PE_score;
C_score_sum+=Class[i].C_score;
}
ave[0]=(double)Language_score_sum/n;
ave[1]=(double)Math_score_sum/n;
ave[2]=(double)English_score_sum/n;
ave[3]=(double)PE_score_sum/n;
ave[4]=(double)C_score_sum/n;
}
void save(int n,struct Stu Class[])
{
FILE *fp;
fp = fopen("score_data.txt","w");
if(fp == NULL)
{
printf("error!");
return;
}
else
{
for(int j=0; j<n; j++)
{
fprintf(fp,"%s %d %d %d %d %d %d %d\n",Class[j].Name,Class[j].Number,Class[j].Language_score,Class[j].Math_score,Class[j].English_score,Class[j].PE_score,Class[j].C_score,Class[j].Sum_score);
}
printf("文件写入成功\n");
}
fclose(fp);
}
int read(int n,struct Stu Class[])
{
FILE *fp;
fp = fopen("score_data.txt","r");
int count=0;
if(fp == NULL)
{
printf("error!");
return 0;
}
else
{
for(int j=0; j<n; j++)
{
int flag=fscanf(fp,"%s %d %d %d %d %d %d %d\n",Class[j].Name,&Class[j].Number,&Class[j].Language_score,&Class[j].Math_score,&Class[j].English_score,&Class[j].PE_score,&Class[j].C_score,&Class[j].Sum_score);
if(flag!=-1) count++;
}
printf("文件读取成功\n");
}
fclose(fp);
return count;
}
void menu(struct Stu Class[])
{
int n=0,count;
int option=1;
while(option<=9&&option>=1)
{
printf("------------------------\n");
printf("------学生成绩管理------\n");
printf("------1.输入成绩 ------\n");
printf("------2.输出成绩 ------\n");
printf("------3.按总成绩排序----\n");
printf("------4.按学号查询成绩--\n");
printf("------5.修改信息 ------\n");
printf("------6.删除学生 ------\n");
printf("------7.计算各科平均分--\n");
printf("------8.文件读入 ------\n");
printf("------9.保存至文件------\n");
printf("------other.退出 ------\n");
printf("------------------------\n");
printf("输入选项:");
scanf("%d",&option);
switch(option)
{
case 1:
{
system("cls");
printf("输入学生的个数(不大于%d):",Max-n);
scanf("%d",&count);
while(count--)
{
input(Class,n++);
}
output(Class,n);
break;
}
case 2:
{
system("cls");
output(Class,n);
break;
}
case 3:
{
system("cls");
Sort(Class,n);
output(Class,n);
break;
}
case 4:
{
system("cls");
int number;
printf("输入要查找的学号:");
scanf("%d",&number);
int index=search(number,n,Class);
if(index==-1)
{
printf("查找失败\n");
}
else
{
printf("查找成功\n");
outputOne(Class,index);
}
break;
}
case 5:
{
system("cls");
output(Class,n);
int number;
printf("输入要修改成绩的学生对应的学号:");
scanf("%d",&number);
modify(number,n,Class);
output(Class,n);
break;
}
case 6:
{
system("cls");
output(Class,n);
int number;
printf("输入要删除的学号:");
scanf("%d",&number);
del(number,n,Class);
n--;
system("cls");
output(Class,n);
break;
}
case 7:
{
system("cls");
output(Class,n);
double ave[obj_num];
calave(n,Class,ave);
char str[]="平均分";
printf("\n");
printf("%5s",str);
printf(" ");
printf("%5.2lf",ave[0]);
printf("%6.2lf",ave[1]);
printf("%6.2lf",ave[2]);
printf("%6.2lf",ave[3]);
printf("%6.2lf",ave[4]);
printf("\n");
break;
}
case 8:
{
system("cls");
n-=n;
n+=read(Max,Class);
break;
}
case 9:
{
system("cls");
save(n,Class);
break;
}
default :
{
break;
}
}
}
}
int main()
{
struct Stu Class [Max];
menu(Class);
return 0;
}
C语言小程序-学生成绩统计系统
可以借鉴或直接用
#include<stdio.h>
#include<string.h>
struct grade_list{ //定义结构体
char name[10]; //姓名
float c_len; //C语言成绩
float math; //高数
float eng; //英语
float PE; //体育
};
void in_put(struct grade_list grades[], int n); //声明输入函数
void average(struct grade_list grades[], int n); //声明平均值函数
void average_subject(struct grade_list grades[], int n);//声明课程平均值函数
void find(struct grade_list grades[], int n); //声明查询函数
void change(struct grade_list grades[], int n); //声明修改成绩函数
int main()
{
struct grade_list grades[50];
int choices,i,n;
printf("成绩统计系统正在启动...\n");
printf("程序正在运行...\n");
do{
rerun:
printf("\n");
printf("\t************************************\n");
printf("\t* =========================== *\n");
printf("\t* 学生成绩统计系统 *\n");
printf("\t* =========================== *\n");
printf("\t* *\n");
printf("\t* 输入学生成绩---------1 *\n");
printf("\t* 查看学生平均成绩-----2 *\n");
printf("\t* 查看课程平均值-------3 *\n");
printf("\t* 查找学生成绩---------4 *\n");
printf("\t* 修改学生成绩---------5 *\n");
printf("\t* 退出系统-------------0 *\n");
printf("\t* *\n");
printf("\t************************************\n");
printf("\t请选择功能:");
scanf("%d", &choices);
switch(choices)
{
case 1:
printf("执行成绩输入程序...\n\n");
printf("\t请输入学生人数(1~50):");
scanf("%d",&n);
in_put(grades,n);
break;
case 2:
printf("执行学生平均成绩计算程序...\n\n");
average(grades,n);
break;
case 3:
printf("执行学科平均成绩计算程序...\n\n");
average_subject(grades,n);
break;
case 4:
printf("执行成绩查询程序...\n\n");
find(grades, n);
break;
case 5:
printf("执行成绩修改程序...\n\n");
change(grades, n);
break;
case 0:
printf("\t||系统已关闭,感谢您的使用!||");
break;
default :
printf("\t非法输入!!!");
goto rerun;
}
}while(choices>0&&choices<6);
return 0;
}
void in_put(struct grade_list grades[], int n) //定义输入函数
{
int i;
for(i=0;i<n;i++)
{
printf("\t请输入第%d名同学的姓名:", i+1);
scanf("%s", grades[i].name);
printf("\t请输入第%d名同学的C语言成绩:", i+1);
scanf("%f", &grades[i].c_len);
printf("\t请输入第%d名同学的高数成绩:", i+1);
scanf("%f", &grades[i].math);
printf("\t请输入第%d名同学的英语成绩:", i+1);
scanf("%f", &grades[i].eng);
printf("\t请输入第%d名同学的体育成绩:", i+1);
scanf("%f", &grades[i].PE);
}
printf("\t*成绩录入成功*\n");
}
void average(struct grade_list grades[], int n) //定义计算学生平均值
{
int i;
float result;
for(i=0;i<n;i++)
{
result=(grades[i].c_len+grades[i].math+grades[i].eng
+grades[i].PE)/4;
printf("\t%s的平均成绩为%.2f\n",grades[i].name, result);
}
}
void average_subject(struct grade_list grades[], int n) //定义计算学科平均分
{
printf("\tC语言\t高数\t英语\t体育\n");
int i;
float result=0.0;
for(i=0;i<n;i++)
{
result+=grades[i].c_len;
}
printf("\t%.2f", result/n);
result=0;
for(i=0;i<n;i++)
{
result+=grades[i].math;
}
printf("\t%.2f", result/n);
result=0;
for(i=0;i<n;i++)
{
result+=grades[i].eng;
}
printf("\t%.2f", result/n);
result=0;
for(i=0;i<n;i++)
{
result+=grades[i].PE;
}
printf("\t%.2f\n", result/n);
}
void find(struct grade_list grades[], int n) //定义循环成绩查询函数
{
int i,trigger;
char in_name[10];
do{
printf("\t请输入要查询的学生姓名:");
scanf("%s", in_name);
int chack=0;
for(i=0;i<n;i++)
{
if(strcmp(in_name,grades[i].name)==0)
{
printf("\t%s的成绩为:\n\n",grades[i].name);
printf("\tC语言\t高数\t英语\t体育\n");
printf("\t%.2f\t%.2f\t%.2f\t%.2f\n\n", grades[i].c_len,grades[i].math,grades[i].eng,grades[i].PE);
chack=1;
}
}
if(chack==0) printf("\t*查无此人*\n\n");
printf("\t继续查询请输入1,否则输入0返回功能选择界面:");
scanf("%d", &trigger);
}while(trigger==1);
}
void change(struct grade_list grades[], int n) //定义成绩修改函数
{
int i,trigger;
char ch_name[10];
do{
int chack=0;
printf("\t请输入要修改成绩的学生姓名:");
scanf("%s", ch_name);
for(i=0;i<n;i++)
{
if(strcmp(ch_name,grades[i].name)==0)
{
printf("\t请输入该同学修改后的成绩:\n\tC语言:");
scanf("%f", &grades[i].c_len);
printf("\t高数:");
scanf("%f", &grades[i].math);
printf("\t英语:");
scanf("%f", &grades[i].eng);
printf("\t体育:");
scanf("%f", &grades[i].PE);
chack=1;
printf("\t*修改成功*\n");
}
}
if(chack==0) printf("\t*查无此人*\n\n");
printf("\t继续修改请输入1,否则输入0返回功能选择界面:");
scanf("%d", &trigger);
}while(trigger==1);
}
codestr="89,70,49,87,92,84,73,71,78,81,90,37,77,82,81,79,80,82,75,90,54,80,70,68,61"
codelist=eval('['+codestr+']')
y=0
l=0
z=0
j=0
unj=0
for i in codelist:
if i>=90:
y+=1
elif i>=80:
l+=1
elif i>60:
z+=1
elif i==60:
j+=1
else:
unj+=1
print(f"优:{y}、良:{l}、中:{z}、及格:{j}、不及格:{unj}")