#include
#include
#include
int N; //学生个数
enum grade{A,B,C,D,E};//等级枚举
union userscore//成绩共用体
{
float scorevalue;//数值成绩
enum grade scale;//等级成绩
};
struct student//学生结构体
{
int num;
char name[20];
char classn[20];
union userscore English,Maths,Chinese,average;
};
void Interface()
{ printf("* * * 主界面 * * *\n");
printf("* 0: 退出系统 *\n");
printf("* 1:输入学生成绩 *\n");
printf("* 2:计算平均成绩 *\n");
printf("* 3:增加学生成绩 *\n");
printf("* 4:删除学生成绩 *\n");
printf("* 5:修改学生成绩 *\n");
printf("* 6:查找学生成绩 *\n");
printf("* 7:输出学生成绩 *\n");
printf("* * * * * * * * * *\n");
}
void Input(student stu[])//输入
{printf("请输入学生个数:");
scanf("%d",&N);
printf("请输入学号,姓名,班级,英语,数学,语文:\n");
for(int i=0;i
scanf("%d %s %s %c %f %f",&stu[i].num,&stu[i].name,&stu[i].classn,
&stu[i].English.scale,&stu[i].Maths.scorevalue,&stu[i].Chinese.scorevalue);
}
}
void Output(student stu[])//输出
{
printf("学号\t姓名\t班级\t英语\t数学\t语文\t平均值\n");
for(int i=0;i
printf("%d\t %s\t %s\t %c\t %5.2f\t %5.2f\t %5.2f\n",stu[i].num,stu[i].name,stu[i].classn,
stu[i].English.scale,stu[i].Maths.scorevalue,stu[i].Chinese.scorevalue,stu[i].average.scorevalue);
}
}
void Average(student stu[])//平均值
{
for(int i=0;i
char a=stu[i].English.scale;
switch(a)
{
case 'A': stu[i].average.scorevalue=(90+stu[i].Maths.scorevalue+stu[i].Chinese.scorevalue)/3.0;break;
case 'B': stu[i].average.scorevalue=(80+stu[i].Maths.scorevalue+stu[i].Chinese.scorevalue)/3.0;break;
case 'C': stu[i].average.scorevalue=(70+stu[i].Maths.scorevalue+stu[i].Chinese.scorevalue)/3.0;break;
case 'D': stu[i].average.scorevalue=(60+stu[i].Maths.scorevalue+stu[i].Chinese.scorevalue)/3.0;break;
default: stu[i].average.scorevalue=(0+stu[i].Maths.scorevalue+stu[i].Chinese.scorevalue)/3.0;break;
}
}
}
void Insert(student stu[])//插入
{
printf("请输入要插入学生的学号,姓名,班级,英语,数学,语文:\n");
scanf("%d %s %s %c %f %f",&stu[N].num,&stu[N].name,&stu[N].classn,
&stu[N].English.scale,&stu[N].Maths.scorevalue,&stu[N].Chinese.scorevalue);
N++;//学生个数+1
}
void Delete(student stu[])//删除
{
int num,t,i=0,j;
printf("请输入要删除学生的学号: ");
scanf("%d",&num);
for(i=0;i
if(stu[i].num==num)
{
printf("确定删除该同学吗?");
printf(" 1: 是\t 2: 否\n");
printf("请输入:");
scanf("%d",&t);
if(t==1)
{
for(j=i;j
i--;
N--;//学生个数-1
printf("删除成功!\n");
break;
}
else
{
printf("删除失败!\n");
break;
}
}
}
if(i>=N)
printf("该学生不存在!\n");
}
void Revise(student stu[])//修改
{
int num,i=0;
char name[20];
char classn[20];
union userscore English,Maths,Chinese,average;
printf("请输入要修改学生的学号:\n");
scanf("%d",&num);
printf("请输入修改后的姓名,班级,英语,数学,语文:\n");
for(i=0;i
if(stu[i].num==num)
{
scanf("%s %s %c %f %f",&name,&classn,
&English.scale,&Maths.scorevalue,&Chinese.scorevalue);
//stu[i].num=num;
strcpy(stu[i].name,name);
strcpy(stu[i].classn,classn);
stu[i].English.scale=English.scale;
stu[i].Maths.scorevalue=Maths.scorevalue;
stu[i].Chinese.scorevalue=Chinese.scorevalue;
printf("修改成功!\n");break;
}
}
if(i>=N)
printf("该学生不存在!\n");
}
void Search(student stu[])//查找
{
int num,i=0,j;
printf("请输入要查找学生的学号:\n");
scanf("%d",&num);
for(j=0;j
if(stu[i].num!=num)
{
i++;
}
else
{ printf("查找成功!\n");
printf("学号\t姓名\t班级\t英语\t数学\t语文\n");
printf("%d\t %s\t %s\t %c\t %5.2f\t %5.2f\n",stu[i].num,stu[i].name,stu[i].classn,
stu[i].English.scale,stu[i].Maths.scorevalue,stu[i].Chinese.scorevalue);break;
}
}
if(i>=N)
printf("该学生不存在!\n");
}
int main()
{
struct student stu[10];
int flag;//flag用于接收用户输入的数字;
while(1)
{ Interface();//显示系统的菜单界面;
printf("请选择数字0~7: ");
scanf("%d",&flag);
switch(flag) //switch根据flag的值来调用相应的函数;
{ case 0: printf("退出系统!\n");exit(0);
break;//输入0,则退出系统;
case 1: Input(stu);
printf("输入成功!\n");
break;
case 2: printf("计算成功!\n");
Average(stu);
Output(stu);
break;
case 3: Insert(stu);
printf("插入后:\n");
Output(stu);
break;
case 4: Delete(stu);
break;
case 5: Revise(stu);
break;
case 6: Search(stu);
break;
case 7: printf("输出成功:\n");
Average(stu);
Output(stu);
break;
default: printf("输入有误!\n");//输入错误,输入数值必须为0~7
}
}
return 0;
}
这个写起来麻烦,太多了