#include<stdio.h> #include<stdlib.h> #define N 50 #include<string.h> #include<conio.h> int max,min; float ave; struct student { int sx,yw,total; char name[10],xh[12]; };//定义基本信息 struct student stu[N]; //定义结构体个数
void mune() { printf("\t\t|-----------------------------|\n"); printf("\t\t| 学生成绩管理系统 |\n"); printf("\t\t| 1.输入学生成绩 |\n");//\t水平制表符 printf("\t\t| 2.显示学生成绩 |\n"); printf("\t\t| 3.查询学生成绩 |\n"); printf("\t\t| 4.增加学生成绩 |\n"); printf("\t\t| 5.删除学生成绩 |\n"); printf("\t\t| 6.修改学生成绩 |\n"); printf("\t\t| 7.总分和平均分 |\n"); printf("\t\t| 8.最高分和最低分 |\n"); printf("\t\t| 9.输出各分数段人数 |\n"); printf("\t\t| 10.成绩排序 |\n"); printf("\t\t| 0.退出 |\n"); printf("\t\t|-----------------------------|\n"); }
int luru(int sum)//输入成绩函数 { int i; printf("请输入录入个数:\n"); scanf("%d",&sum); for(i=0;i<sum;i++) { printf("请输入第%d个同学姓名:\n",i+1); scanf("%s",stu[i].name); printf("请输入第%d个同学学号:\n",i+1); scanf("%s",stu[i].xh); printf("请输入数学成绩\n"); scanf("%d",&stu[i].sx); printf("请输入语文成绩\n"); scanf("%d",&stu[i].yw); } return sum; }
void display(int sum)//显示成绩函数 { int i; printf("__\n"); printf("姓名*学号数学语文*****\n"); printf(" | | | | | | | | \n"); for(i=0;i<sum;i++) { printf("%8s %8s %8d %8d\n",stu[i].name,stu[i].xh,stu[i].sx,stu[i].yw); } } void query(int sum)//查询函数 按照学号进行查询 { int i,k,falg=0; char xh[12]; printf("请输入你要查询的学号:\n"); scanf("%s",&xh); for(i=0;i<sum;i++) { if(strcmp(xh,stu[i].xh)==0)//strcmp为比较字符串大小,如前面的大于后面则返回值为1反之为负一 { printf("该学生的信息为:\n"); printf("姓名:%s 学号:%s\n数学:%d 语文:%d\n",stu[i].name,stu[i].xh,stu[i].sx,stu[i].yw); falg++; } } if(falg==0) printf("输入学号错误\n"); }
int add(int sum)//添加学生信息函数 { int i,j; printf("请输入增加个数\n"); scanf("%d",&j); for(i=sum;i<sum+j;i++)//循环输入j个数 { printf("请输入第%d位同学姓名\n",i+1); scanf("%s",stu[i].name); printf("请输入第%d位同学学号\n",i+1); scanf("%s",stu[i].xh); printf("请输入数学成绩\n"); scanf("%d",&stu[i].sx); printf("请输入语文成绩\n"); scanf("%d",&stu[i].yw); } return sum+j; } int del(int sum)//使用学号进行删除学生信息函数 { int i,temp,flag=0;//flag进行记录 ,以免输入错误学号时,导致返回值减少,输入正确返回值则会减少一个 char xh[12]; printf("请输入要删除学生的学号:\n"); scanf("%s",xh); for(i=0;i<sum;i++) { if(strcmp(xh,stu[i].xh)==0) { flag++; temp=sum--; for(i=temp;i<sum;i++) { stu[i]=stu[i+1]; } } } if(flag!=0) printf("删除成功!\n"); if(flag==0) printf("输入错误\n"); return sum; }
int change(int sum)//通过查询学号进行修改成绩函数 { int i,temp,falg=0,choose,sx,yw; char xh[12]; printf("请输入想修改学生成绩的学号\n"); scanf("%s",xh); for(i=0;i<sum;i++) { if(strcmp(xh,stu[i].xh)==0) { temp=i; falg++; printf("请选择想修改的科目\n"); printf("1.语文\n"); printf("2.数学\n"); scanf("%d",&choose); switch(choose) { case 1: printf("请输入修改的分数:\n"); scanf("%d",&yw); stu[temp].yw=yw; break; case 2: printf("请输入修改的分数:\n"); scanf("%d",&sx); stu[temp].sx=sx;//赋值 break; } } if(falg==0) { printf("输入学号不存在\n"); } } return sum; } int tj1(int sum)//统计总分和平均分的函数 { int i,total; for(i=0;i<sum;i++) { total=total+stu[i].sx+stu[i].yw; } for(i=0;i<sum;i++) { stu[i].total=stu[i].sx+stu[i].yw; } ave=(float)total/sum; printf("__\n"); printf("姓名*学号*****总分\n"); for(i=0;i<sum;i++) { printf("%8s %8s %8d\n",stu[i].name,stu[i].xh,stu[i].total);
}
printf("全班平均分:%.2f\n",ave);
return total;
}
int tj2(int sum)//统计总分最高分和最低分的函数 { int i,j,k; for(i=0;i<sum;i++) { stu[i].total=stu[i].sx+stu[i].yw; } max=stu[0].total; min=stu[0].total; for(i=1;i<sum;i++) { if(max<stu[i].total) { max=stu[i].total; j=i; } if(min>stu[i].total) { min=stu[i].total; k=i; }
}
printf("最高总分为:%s %d分\n最低总分为:%s %d分\n",stu[j].name,max,stu[k].name,min);
}
void tj3(int sum)//统计各分数段人数
{
int fail=0,pass=0,good=0,excellent=0,i;//设定初使值方便计数
for(i=0;i<sum;i++)
{
if(stu[i].sx+stu[i].yw<120)
fail++;
if((stu[i].sx+stu[i].yw>=120)&&(stu[i].sx+stu[i].yw<160))
good++;
if(stu[i].sx+stu[i].yw>=160)
excellent++;
}
printf("0-120(不及格):%d人\n120-160(良好):%d人\n160-200(优秀):%d人\n",fail,good,excellent);
}
void sort(int sum)//总分排序
{
int i,j,temp;
for(i=0;i<sum;i++)
{
stu[i].total=stu[i].sx+stu[i].yw;
}
for(i=0;i<sum;i++)//外循环
{
for(j=i+1;j<sum;j++)
if(stu[i].total<stu[j].total)//满足则置换
{
temp=stu[i].total;
stu[i].total=stu[j].total;
stu[j].total=temp;
}
}
printf("总分排名为:\n");
printf("**\n");
printf("姓名 * 学号 * 总分\n");
printf("**\n");
for(i=0;i<sum;i++)
{
printf(" %s %s %d\n",stu[i].name,stu[i].xh,stu[i].total);
}
}
void exit()//退出函数
{
exit(0);
}
main()
{
int choose,n,sum;
while(1)
{
mune();
printf("请选择功能\n");
scanf("%d",&choose);
switch(choose)
{
case 0:exit();break;
case 1:n=luru(sum);break;
case 2:display(n);break;
case 3:query(n);break;
case 4:n=add(n);break;
case 5:n=del(n);break;
case 6:n=change(n);break;
case 7:tj1(n);break;
case 8:tj2(n);break;
case 9:tj3(n);break;
case 10:sort(n);break;
}
printf("按任意键返回\n");
getch();
system("cls");
}
}