#include#include#include
#define N 10
struct student{ /*学生信息结构*/
char no[9]; /*学号*/
char name[10]; /*姓名*/
char sex[3]; /*性别*/
int score[4]; /*成绩和总分*/};int menu(); /*菜单*/
void readsi(struct student stud[],int *n); /*读取数据*/
void printsi(struct student *pstud,int n); /*输出文件内容*/
void ssort(struct student *pstud, int n); /*按总分的降序排序函数*/
void xsort(struct student *pstud, int n);/*按学号的升序排序函数*/
void tjave(struct student *pstud, int n);/*统计各门功课的平均分函数*/
void tjrs(struct student *pstud,int n);/*统计男女同学的人数函数*/
void namesort(struct student *pstud,int n);/*按姓名升序排序*/
void math_excellent(struct student *pstud,int n);/*数学考试成绩优秀(>=90)*/
void all_excellent(struct student *pstud,int n);/*每门考试成绩优秀(>=90)或者总分》=270*/
void main() /*主函数*/{structstudent stud[N];int code, n=0;
readsi(stud,&n);
printf("\n 按, 进入菜单:");
scanf("%*c"); /*暂停*/
while(1)
{
code=menu(); /*调用主控菜单*/
switch(code)
{case 0: exit(1);case 1: printsi(stud,n);
printf("\n 按, 进入菜单:");
scanf("%*c");break;case 2: ssort(stud,n);break;case 3: xsort(stud,n);break;case 4: tjave(stud,n);break;case 5: tjrs(stud,n);break;case 6: namesort(stud,n);break;case 7: math_excellent(stud,n);break;case 8: all_excellent(stud,n);break;
} scanf("%*c");
}
}int menu() /*主控菜单函数*/{intcode;
printf("菜 单\n");
printf("*****************************************************\n");
printf("0. 退出 1. 显示学生信息 \n");
printf("2. 按总分排序 3. 按学号排序\n");
printf("4. 统计各门功课平均分 5. 统计男女同学人数\n");
printf("6. 按姓名排序 7. 数学考试成绩优秀人数\n");
printf("8. 考试成绩优秀人数 \n");
printf("*****************************************************\n");
printf("请按序号选择:\n");
scanf("%d",&code);returncode;
}void readsi(struct student stud[],int *n) /*读数据函数*/ //int *n;n需要返回
{
FILE*fp;inti;//if((fp=fopen("studf.txt","r"))==NULL)
if((fp=fopen("C:/Users/minmin/Desktop/studf.txt","r"))==NULL)//文件存放在指定路径,把路径写上就可以了
{
printf("Cannot open file!\n");
exit(1);
}for(i=0;!feof(fp);i++)
{
(*n)++;
fscanf(fp,"%s %s %s %d %d %d %d", stud[i].no,stud[i].name,stud[i].sex,&stud[i].score[0], &stud[i].score[1], &stud[i].score[2], &stud[i].score[3]);
stud[i].score[3]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];
}
fclose(fp);
}void printsi(struct student *pstud, int n) /*输出数据函数*/{inti;
printf("学号 姓名 性别 数学 英语 C 总分\n");
printf("******************************************************\n");for(i=0;i
{
printf("%-8s %-8s %-2s %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
pstud[i].score[0], pstud[i].score[1], pstud[i].score[2], pstud[i].score[3]);
}
}void ssort(struct student *pstud,int n) /*按总分的降序排序函数*/{structstudent temp;inti,j,min;for(i=0;i
{
min=i; /*找最小值元素的下标*/
for(j=i+1;jpstud[min].score[3]) min=j;if(min!=i) /*交换*/{
temp=pstud[i]; pstud[i]=pstud[min]; pstud[min]=temp;
}
}
}void xsort(struct student *pstud,int n) /*按学号的升序排序函数*/{structstudent temp;inti, j;for(i=0;i
{for(j=i+1;j
{if(strcmp(pstud[i].no,pstud[j].no)>0)
{
temp=pstud[i];
pstud[i]=pstud[j];
pstud[j]=temp;
}
}
}
}void tjave(struct student *pstud, int n) /*统计各门功课的平均分函数*/{float avemath=0,aveeng=0,avec=0,avesum=0;inti;for(i=0;i
{
avemath+=pstud[i].score[0];
aveeng+=pstud[i].score[1];
avec+=pstud[i].score[2];
avesum+=pstud[i].score[3];
}
avemath/=n; aveeng/=n; avec/=n; avesum/=n;
printf("共有%d个同学,各门功课及总分的平均分为:\n",n);
printf("数学 英语 C 总分\n");
printf("%5.2f %5.2f %5.2f %5.2f\n",avemath,aveeng,avec,avesum);
}void tjrs(struct student *pstud,int n) /*统计男女同学的人数函数*/{int i, nummen=0, numwomen=0;for(i=0;i
{if(strcmp(pstud[i].sex,"男")==0) nummen++;else numwomen++;
}
printf("共有%d个同学: \n",n);
printf("其中男同学有%d个,女同学有%d个\n",nummen,numwomen);
}void namesort(struct student *pstud,int n)/*按姓名升序排序*/{structstudent temp;inti, j;for(i=0;i
{for(j=i+1;j
{if(strcmp(pstud[i].name,pstud[j].name)>0)
{
temp=pstud[i];
pstud[i]=pstud[j];
pstud[j]=temp;
}
}
}
}void math_excellent(struct student *pstud,int n)/*数学考试成绩优秀(>=90)*/{int i, num = 0;for(i=0;i
{if(pstud[i].score[0]>=90)
{
num++;
printf("%-8s %-8s %-2s %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
pstud[i].score[0], pstud[i].score[1], pstud[i].score[2], pstud[i].score[3]);
}
}
printf("数学优秀的人数为:%d\n",num);
}void all_excellent(struct student *pstud,int n)/*每门考试成绩优秀(>=90)或者总分》=270*/{int i, num = 0;for(i=0;i
{if(((pstud[i].score[0]>=90)&&(pstud[i].score[1]>=90)&&(pstud[i].score[2]>=90))||(pstud[i].score[3]>=270))
{
num++;
printf("%-8s %-8s %-2s %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
pstud[i].score[0], pstud[i].score[1], pstud[i].score[2], pstud[i].score[3]);
}
}
printf("优秀的人数为:%d\n",num);
}