1.目的实现
实现可添加、查看、修改、删除学生成绩和浏览学生总分、平均分、及全部成绩记录的效果和**按照学生姓名来查看学生各科成绩及删改学生信息的功能
2.代码实现
#include <stdio.h>
#include <string.h>
int main()
{
char name[100][30],str[30],k[30];
int i,j=0,f,t=0,x=0,n=0,a[100];
float b[100],c[100],d[100],e[100],h[100];
//设一维数组分别表示3科成绩及总分、平均分
while(1)
{
printf("*************************\n");
printf("1--添加1个学生的记录\n");
printf("2--查看1个学生的记录\n");
printf("3--修改1个学生的记录\n");
printf("4--浏览所有学生的记录\n");
printf("5--浏览每个学生的总分\n");
printf("6--浏览每个学生的平均分\n");
printf("7--浏览所有学生的全部记录\n");
printf("8--查看总分第一的学生信息\n");
printf("9--查看总分前三的学生信息\n");
printf("10--删除1个学生的信息\n");
printf("0--退出程序\n");
printf("*************************\n");
printf("请选择0~10:");
scanf("%d",&i);//i让用户进行选择,进入多分支选择结构
if(i==0)
{
break;
} //当用户输入0,结束进程
switch(i)
{
case 1:
printf("请输入第%d个学生的姓名:",n+1);
scanf("%s",&name[n]);
printf("请输入第%d个学生的学号:",n+1);
scanf("%d",&a[n]);
printf("请输入第%d个学生的高数成绩:",n+1);
scanf("%f",&b[n]);
printf("请输入第%d个学生的英语成绩:",n+1);
scanf("%f",&c[n]);
printf("请输入第%d个学生的C++成绩:",n+1);
scanf("%f",&d[n]);
n++; //让下一次输入的数存入数组
break;//跳出选择
case 2:
f=0;
printf("请输入要查询学生的姓名:");
scanf("%s",&str);
for(j=0;j<n;j++)
{
if(strcmp(name[j],str)==0)//对比姓名是否相同
{
f++;
printf("学号:%d\n高数成绩:%f\t英语成绩:%f\tC++成绩:%f\n",a[j],b[j],c[j],d[j]);
}
}
if(f==0)//实现输入错误时,提醒用户
{
printf("输入错误,无该学生\n");
}
break;
case 3:
f=0;
printf("请输入要查询学生的姓名:");
scanf("%s",&str);
for(j=0;j<n;j++)
{
if(strcmp(name[j],str)==0)
{
f++;
printf("请输入该学生的高数成绩: ");
scanf("%f",&b[j]);
printf("请输入该学生的英语成绩: ");
scanf("%f",&c[j]);
printf("请输入该学生的C++成绩: ");
scanf("%f",&d[j]);
}
}
if(f==0)
{
printf("输入错误,修改失败\n");
}
break;
case 4:
for(j=0;j<n;j++)
{
printf("姓名:%s\t学号:%d\n高数成绩:%f\t英语成绩:%f\tC++成绩:%f\n",name[j],a[j],b[j],c[j],d[j]);
}
break;
case 5:
for(j=0;j<n;j++)
{
e[j]=b[j]+c[j]+d[j];
printf("姓名:%s\t学号:%d\t总分:%f\n",name[j],a[j],e[j]);
}
break;
case 6:
for(j=0;j<n;j++)
{
h[j]=(b[j]+c[j]+d[j])/3;
printf("姓名:%s\t学号:%d\t平均分:%f\n",name[j],a[j],h[j]);
}
break;
case 7:
for(j=0;j<n;j++)
{
e[j]=b[j]+c[j]+d[j];
h[j]=(b[j]+c[j]+d[j])/3;
printf("姓名:%s\t学号:%d\n高数成绩:%f\t英语成绩:%f\tC++成绩:%f\n",name[j],a[j],b[j],c[j],d[j]);
printf("总分:%f\t平均分:%f\n",e[j],h[j]);
}
break;
case 8:
t=0;
for(j=0;j<n;j++)
{
e[j]=b[j]+c[j]+d[j];
h[j]=(b[j]+c[j]+d[j])/3;
if(e[j]>e[t])
{
t=j; //让t成为为最高总分的学生的下标
}
}
printf("总分第一的学生的姓名:%s\t学号:%d\n高数成绩:%f\t英语成绩:%f\tC++成绩:%f\n",name[t],a[t],b[t],c[t],d[t]);
printf("其总分:%f\t平均分:%f\n",e[t],h[t]);
break;
case 9:
t=0;
for(j=0;j<n;j++)
for(x=j+1;x<n;x++)
{
e[j]=b[j]+c[j]+d[j];
h[j]=(b[j]+c[j]+d[j])/3;
if(e[j]<e[x])
{
strcpy(k,name[j]);
strcpy(name[j],name[x]);
strcpy(name[x],k);
t=a[j];a[j]=a[x];a[x]=t;
t=b[j];b[j]=b[x];b[x]=t;
t=c[j];c[j]=c[x];c[x]=t;
t=d[j];d[j]=d[x];d[x]=t;
t=e[j];e[j]=e[x];e[x]=t;
t=h[j];h[j]=h[x];h[x]=t;
}
}//使用冒泡法,让大的数排在小的前面,输出前三个大的数值及相关的信息
printf("总分前三的学生--\n");
for(j=0;j<3;j++)
{
printf("姓名:%s\t学号:%d\n高数成绩:%f\t英语成绩:%f\tC++成绩:%f\n",name[j],a[j],b[j],c[j],d[j]);
printf("其总分:%f\t平均分:%f\n",e[j],h[j]);
}
break;
case 10:
f=0;
printf("请输入要删除的学生的姓名: ");
scanf("%s",&str);
for(j=0;j<n;j++)
{
if(strcmp(name[j],str)==0)
{
f++;
strcpy(name[j],name[j+1]);
//后个字符串代替前个字符串,让要删的学生的姓名被覆盖
a[j]=a[j+1];
b[j]=b[j+1];
c[j]=c[j+1];
d[j]=d[j+1];
e[j]=e[j+1];
h[j]=h[j+1];
//后个数值代替前个数值,让要删的学生的信息被覆盖
n--;//减少一个存储空间
printf("该学生的信息已删除\n");
}
}
if(f==0)
{
printf("输入错误,无法执行\n");
}
break;
default:printf("输入错误\n");
}
}
return 0;
}