#include <stdio.h>
#define N 6
struct Student//定义结构体学生信息变量。
{
int num;
int clas;
char name[20];
float score1;
float score2;
float score3;
float aver;
} stu[N],*p=stu;
char no[20]= {'n','o'},yes[20]= {'y','e','s'};//定义全局变量yes,no进行strcmp的比较。
int main()//主函数。
{
int opt,i;
char xuanze[20];
void printmenu(void);
void print(struct Student stu);
void input(struct Student stu[N]);
void delet(struct Student stu[N]);
void select(struct Student stu[N]);
void order(struct Student stu[N]);
void out(struct Student stu[N]);
printmenu();//输出菜单。
scanf("%d",&opt);//输入选项。
while (opt!=6)//进行菜单选择。
{
if (opt==1)
{
input(p);
}
else if (opt==2)
{
delet(p);
}
else if (opt==3)
{
select(p);
}
else if (opt==4)
{
order(p);
}
else if (opt==5)
{
out(p);
}
else
{
printf("Wrong choice.\n");
}
printmenu();//再次输出菜单。
scanf("%d",&opt);//输入选项。
}
return 0;
}
void printmenu(void)//菜单输出函数。
{
printf("1.input\n");
printf("2.delete\n");
printf("3.select\n");
printf("4.order\n");
printf("5.output\n");
printf("6.quit\n");
printf("please input your option\n");
return 0;
}
void print(struct Student stu)//输出学生信息函数。
{
printf("M,",stu.num);
printf("%d,",stu.clas);
printf("%s,",stu.name);
printf("%3.1f,",stu.score1);
printf("%3.1f,",stu.score2);
printf("%3.1f,",stu.score3);
printf("%4.1f\n",stu.aver);
return 0;
}
void input(struct Student stu[N])//输入学生信息函数。
{
int i;
char xuanze[20];
for (i=0; i<N; i++)
{
printf("Id ");
scanf("%d",&stu[i].num);
printf("class ");
scanf("%d",&stu[i].clas);
printf("name ");
scanf("%s",&stu[i].name);
printf("score1 ");
scanf("%f",&stu[i].score1);
printf("score2 ");
scanf("%f",&stu[i].score2);
printf("score3 ");
scanf("%f",&stu[i].score3);
stu[i].aver=(stu[i].score1+stu[i].score2+stu[i].score3);
printf("continue?\n");
scanf("%s",&xuanze);
if ((strcmp(xuanze,no))==0)
break;
}
return 0;
}
void delet(struct Student stu[N])//删除学生信息函数。
{
void order(struct Student stu[N]);
int con(char str[]);
char c[20],xuanze[20],*str=c;
int s=0,i,j;
scanf("%s",&c);
if ((isdigit(c[1]))==1)
{
s=con(str);
for (i=0; i<N; i++)
{
if (stu[i].num==s)
{
for (j=i; j<N; j++)
{
stu[j]=stu[j+1];
}
}
}
}
else
{
for (i=0; i<N; i++)
{
if ((strcmp(c,stu[i].name))==0)
{
for (j=i; j<N; j++)
{
stu[j]=stu[j+1];
}
}
}
}
order(p);
printf("continue?\n");
scanf("%s",&xuanze);
if ((strcmp(xuanze,yes))==0)
delet(p);
return 0;
}
void select(struct Student stu[N])//选择学生信息函数。
{
int banji,i;
char xuanze[20];
scanf("%d",&banji);
for (i=0; i<N; i++)
{
if ((stu[i].clas==banji)||(stu[i].num==banji))
{
print(stu[i]);
}
}
printf("continue?\n");
scanf("%s",&xuanze);
if ((strcmp(xuanze,yes))==0)
select(p);
return 0;
}
void order(struct Student stu[N])//学生信息排序函数。
{
int i,j;
struct Student temp;
void print(struct Student stu);
for (i=0; i<N; i++)
{
for (j=i; j<N; j++)
{
if (stu[i].clas>stu[j].clas)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
else if (stu[i].clas==stu[j].clas)
{
if (stu[i].aver<stu[j].aver)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
}
for (i=0; i<N; i++)
{
if (stu[i].num!=0)
{
print(stu[i]);
}
}
return 0;
}
void out(struct Student stu[N])//学生信息输出函数。
{
order(p) ;
return 0;
}
int con(char str[])//字符转化为数字的函数。
{
int rt=0,i;
for (i=0; i<20&&str[i]!='\0'; i++)
{
rt=rt*10+(str[i]-'0');
}
return rt;
}