资源描述
#include <stdio。h>
#include 〈stdlib.h>
#include <string。h〉
#define m_l 10
#define m_num 30
#define m_cs 6
typedef struct student
{
long num ;
char name[m_l];
float score[m_cs];
float sum;
float aver;
}STU;
int menu(void);
void Readscore(STU stu[],int n,int m);
void Aversumofeverystudent(STU stu[],int n,int m);
void Aversumofeverycourse(STU stu[],int n,int m);
void Sortbyscore(STU stu[],int n,int m,int (*compare)(float a,float b));
int Ascending(float a,float b);
int Descending(float a,float b);
void swapfloat(float *x,float *y);
void swaplong(long *x,long *y);
void swapchar(char x[],char y[]);
void Assortbynum(STU stu[], int n, int m);
void Sortbyname(STU stu[], int n, int m);
void Searchbynum(STU stu[], int n, int m);
void Searchbyname(STU stu[], int n, int m);
void StatisticAnlysis(STU stu[], int n, int m);
void Printscore(STU stu[], int n, int m);
void Writetofile(STU stu[], int n, int m);
void Readfromfile(STU stu[], int *n, int *m);
int main()
{
char ch;
int n=0,m=0;
STU stu[m_num];
printf(”请输入学生人数(n〈=%d):\n”,m_num);
scanf(”%d",&n);
printf("请输入课程数目(m<=%d):\n",m_cs);
scanf("%d",&m);
while(1)
{
ch=menu();
switch(ch)
{
case 1:
Readscore(stu,n,m);
break;
case 2:
Aversumofeverystudent(stu ,n,m);
break;
case 3:
Aversumofeverycourse(stu ,n,m);
break;
case 4:
Sortbyscore(stu ,n,m,Descending);
printf("\n成绩降序排序\n”);
Printscore( stu ,n, m);
break;
case 5:
Sortbyscore(stu ,n,m,Ascending);
printf(”\n成绩升序排序\n");
Printscore( stu ,n, m);
break;
case 6:
Assortbynum( stu , n, m);
printf(”\n学号升序排序\n");
Printscore( stu ,n, m);
break;
case 7:
Sortbyname( stu , n, m);
printf("\n姓名字典升序排序\n”);
Printscore( stu ,n, m);
break;
case 8:
Searchbynum( stu , n, m);
break;
case 9:
Searchbyname( stu , n, m);
break;
case 10:
StatisticAnlysis( stu , n, m);
break;
case 11:
Printscore( stu ,n, m);
break;
case 12:
Writetofile(stu,n,m);
break;
case 13:
Readfromfile(stu,&n,&m);
break;
case 0:
printf("\n欢迎下次继续使用”);
exit(0);
default:
printf("\n输入错误”);
}
}
return 0;
}
int menu(void)
{
int items;
printf("欢迎使用学生成绩管理系统\n");
printf(”1。输入成绩\n");
printf(”2.计算各个学生总成绩和平均成绩\n”);
printf(”3.计算各门学科总成绩和平均成绩\n”);
printf("4.成绩降序排序\n");
printf("5。成绩升序排序\n”);
printf(”6.学号升序排序\n");
printf(”7。姓名升序排序\n");
printf("8。通过学号查找成绩\n”);
printf(”9。通过姓名查找成绩\n");
printf("10。标准分析\n");
printf("11。显示成绩\n");
printf(”12.写入文件\n”);
printf(”13。读取文件\n”);
printf(”0.退出\n”);
printf("请做出您的选择\n”);
scanf("%d",&items);
return items;
}
void Readscore(STU stu[],int n,int m)
{
int i,j;
printf(”请输入学生学号,姓名,成绩\n”);
for(i=0;i〈n;i++)
{
scanf("%ld%s”,&stu[i].num,stu[i]。name);
stu[i].sum=0;
for(j=0;j<m;j++)
{
scanf("%f”,&stu[i]。score[j]);
stu[i]。sum+=stu[i]。score[j];
}
if(m>0)
stu[i]。aver= m〉0 ? stu[i].sum/m : -1;
}
}
void Aversumofeverystudent(STU stu[],int n,int m)
{
int i,j;
for(i=0;i〈n;i++)
{
printf("学生 %d:总成绩: %.1f,平均成绩: %.1f\n",i+1,stu[i]。sum,stu[i]。aver);
}
}
void Aversumofeverycourse(STU stu[],int n,int m)
{
int i,j;
float sum[m_cs],aver[m_cs];
for(i=0;i<m;i++)
{
sum[i]=0;
for(j=0;j<n;j++)
{
sum[i]+=stu[j]。score[i];
}
aver[i]= n>0?sum[i]/n:—1;
printf("课程 %d:总成绩: %。1f,平均成绩: %。1f\n”,i+1,sum[i],aver[i]);
}
}
void Sortbyscore(STU stu[],int n,int m,int (*compare)(float a,float b))
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if((*compare)(stu[j]。sum,stu[k]。sum))
k=j;
}
if(k!=i)
{
for(t=0;t〈m;t++)
{
swapfloat(&stu[k].score[t],&stu[i]。score[t]);
}
swapfloat(&stu[k].sum,&stu[i].sum);
swapfloat(&stu[k].aver,&stu[i].aver);
swaplong(&stu[k]。num,&stu[i].num);
swapchar(stu[k]。name,stu[i].name);
}
}
}
int Ascending(float a,float b)
{
return a〈b;
}
int Descending(float a,float b)
{
return a〉b;
}
void swapfloat(float *x,float *y)
{
float b;
b=*x;
*x=*y;
*y=b;
}
void swaplong(long *x,long *y)
{
long b;
b=*x;
*x=*y;
*y=b;
}
void swapchar(char x[],char y[])
{
char b[m_l];
strcpy(b,x);
strcpy(x,y);
strcpy(y,b);
}
void Assortbynum(STU stu[], int n, int m)
{
int i,j,k,t;
for(i=0;i〈n—1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(stu[j]。num〈stu[k]。num)
k=j;
}
if(k!=i)
{
for(t=0;t<m;t++)
{
swapfloat(&stu[k].score[t],&stu[i]。score[t]);
}
swapfloat(&stu[k]。sum,&stu[i]。sum);
swapfloat(&stu[k]。aver,&stu[i]。aver);
swaplong(&stu[k].num,&stu[i]。num);
swapchar(stu[k].name,stu[i]。name);
}
}
}
void Sortbyname(STU stu[], int n, int m)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(stu[j].name,stu[i].name)〈0)
{
for(t=0;t<m;t++)
{
swapfloat(&stu[i].score[t],&stu[j].score[t]);
}
swapfloat(&stu[j].sum,&stu[i]。sum);
swapfloat(&stu[j].aver,&stu[i].aver);
swaplong(&stu[j].num,&stu[i]。num);
swapchar(stu[j].name,stu[i].name);
}
}
}
}
void Searchbynum(STU stu[], int n, int m)
{
long num;
int i,j;
printf("输入你所想要查找的学号\n");
scanf(”%ld",&num);
for(i=0;i〈n;i++)
{
if(stu[i]。num==num)
{
printf(”%ld\t%s\t",stu[i]。num,stu[i].name);
for(j=0;j〈m;j++)
{
printf(”%.0f\t”,stu[i].score[j]);
}
printf("%。0f\t%。0f\n”,stu[i].sum,stu[i].aver);
return;
}
}
printf("\n查无此号 \n”);
}
void Searchbyname(STU stu[], int n, int m)
{
char name[m_l];
int i,j;
printf(”输入你所想要查找的姓名\n”);
scanf(”%s”,name);
for(i=0;i〈n;i++)
{
if(strcmp(stu[i].name,name)==0)
{
printf(”%ld\t%s\t”,stu[i]。num,stu[i]。name);
for(j=0;j〈m;j++)
{
printf("%。0f\t”,stu[i]。score[j]);
}
printf("%.0f\t%.0f\n”,stu[i]。sum,stu[i].aver);
return;
}
}
printf("\n查无此人 \n");
}
void StatisticAnlysis(STU stu[], int n, int m)
{
int i,j,total,t[6];
for(j=0;j〈m;j++)
{
printf("学科:%d:\n”,j+1);
memset(t,0,sizeof(t));
for(i=0;i<n;i++)
{
if(stu[i]。score[j]〉=0&&stu[i].score[j]〈60)
t[0]++;
else if(stu[i].score[j]<70)
t[1]++;
else if(stu[i]。score[j]〈80)
t[2]++;
else if(stu[i].score[j]〈90)
t[3]++;
else if(stu[i]。score[j]〈100)
t[4]++;
else if(stu[i].score[j]==100)
t[5]++;
}
total=0;
for(i=0;i<=5;i++)
{
total+=t[i];
}
for(i=0;i<=5;i++)
{
if(i==0)
printf(”〈60\t%d\t%。2f%%\n”,t[i],(float)t[i]/n*100);
else if(i==5)
printf(”=100\t%d\t%.2f%%\n”,t[i],(float)t[i]/n*100);
else
printf("%d-%d\t%d\t%.2f%%\n”,t[i],(i+5)*10,(i+5)*10+9,(float)t[i]/n*100);
}
}
}
void Printscore(STU stu[], int n, int m)
{
int i,j;
for(i=0;i<n;i++)
{
printf("%ld\t%s\t",stu[i].num,stu[i]。name);
for(j=0;j〈m;j++)
{
printf(”%。1f\t”,stu[i].score[j]);
}
printf(”%。1f\t%.1f\n",stu[i]。sum,stu[i]。aver);
}
}
void Writetofile(STU stu[], int n, int m)
{
FILE *fp;
int i,j;
if((fp=fopen("student。txt”,”w"))==NULL)
{
printf(”打开 “student。txt”失败!\n");
exit(0);
}
fprintf(fp,”%d\t%d\n",n,m);
for(i=0;i〈n;i++)
{
fprintf(fp,”%10ld%10s”,stu[i]。num,stu[i]。name);
for(j=0;j<m;j++)
{
fprintf(fp,"%12.0f",stu[i]。score[j]);
}
fprintf(fp,"%12.0f%12.0f\n",stu[i]。sum,stu[i]。aver);
}
fclose(fp);
}
void Readfromfile(STU stu[],int *n,int *m)
{
FILE *fp;
int i,j;
if((fp=fopen("student。txt",”r”))==NULL)
{
printf("打开 score.txt!失败\n");
exit(0);
}
fscanf(fp,”%d\t%d”,n,m);
for(i=0;i<*n;i++)
{
fscanf(fp,"%10ld”,&stu[i].num);
fscanf(fp,”%s”,&stu[i].name);
for(j=0;j<*m;j++)
{
fscanf(fp,”%10f",&stu[i].score[j]);
}
fscanf(fp,"%10f%10f\n”,&stu[i].sum,&stu[i]。aver);
}
fclose(fp);
}
展开阅读全文