学生成绩管理C语言

#include
#define N 2
struct student
{int xh;
float score[4];
char name[20];
float average;
int num;
}std[100];

int n=0; /*学生总人数*/

/* 输入学生数据*/
void srsj()
{ FILE *fp;
fp=fopen("lishengjie.txt","w");
int i,j;
for(i=0;i{printf("请输入第%d个学生的信息:\n",i+1);
printf("请输入学生学号:\n");
scanf("%d",&std[i].xh);
for(j=0;j{if(std[i].xh==std[j].xh)
{printf("学生学号重复,请重新输入\n");
printf("请输入学生学号:\n");
scanf("%d",&std[i].xh);
}
}
printf("请输入学生姓名:\n");
scanf("%s",&std[i].name);
printf("请输入学生c程序设计成绩:\n");
scanf("%f",&std[i].score[0]);
printf("请输入学生高数成绩:\n");
scanf("%f",&std[i].score[1]);
printf("请输入学生英语成绩:\n");
scanf("%f",&std[i].score[2]);
printf("请输入学生线代成绩:\n");
scanf("%f",&std[i].score[3]);
n++;
fprintf(fp,"\n%d\n%s\nc程序设计成绩:%.2f\n高数成绩:%.2f\n英语成绩:%.2f\n线代成绩:%.2f\n",std[i].xh,std[i].name,
std[i].score[0],std[i].score[1],std[i].score[2],std[i].score[3]);
}
fprintf(fp,"%d",n);
fclose(fp);
}




/*计算单个同学的平均分*/
void average(int i)
{ float sum;
sum=std[i].score[0]+std[i].score[1]+std[i].score[2]+std[i].score[3];
std[i].average=sum/4;
}



/*计算每位同学的平均分*/
void pjf1()
{ int i,m;
float sum;
for(i=0;i{ sum=std[i].score[0]+std[i].score[1]+std[i].score[2]+std[i].score[3];
std[i].average=sum/4;
}
for(m=0;mprintf("%s的平均分为:%.2f\n",std[m].name,std[m].average);
}

/*计算各科成绩的平均分*/
void pjf2()
{ int m;
float i=0.0,j=0.0,k=0.0,l=0.0;
float average[4];
for(m=0;m{ i=i+std[m].score[0];
j=j+std[m].score[1];
k=k+std[m].score[2];
l=l+std[m].score[3];
}
average[0]=i/n;
average[1]=j/n;
average[2]=k/n;
average[3]=l/n;
printf("C语言 高数 英语 线代各科成绩平均分为:\n");
printf("%.2f %.2f %.2f %.2f",average[0],average[1],average[2],average[3]);
}

/*统计各分段人数*/
void tj()
{ int i;
int a[4]={0,0,0,0}; /*C语言*/
int b[4]={0,0,0,0}; /*高数*/
int c[4]={0,0,0,0}; /*英语*/
int d[4]={0,0,0,0}; /*线代*/
int e[4]={0,0,0,0}; /*平均分*/
for(i=0;i{if(std[i].score[0]>=90)
a[0]++;
else
if(std[i].score[0]>=80&&std[i].score[0]<=89)
a[1]++;
else
if(std[i].score[0]>=60&&std[i].score[0]<=79)
a[2]++;
else
a[3]++;
if(std[i].score[1]>=90)
b[0]++;
else
if(std[i].score[1]>=80&&std[i].score[1]<=89)
b[1]++;
else
if(std[i].score[1]>=60&&std[i].score[1]<=79)
b[2]++;
else
b[3]++;
if(std[i].score[2]>=90)
c[0]++;
else
if(std

[i].score[2]>=80&&std[i].score[2]<=89)
c[1]++;
else
if(std[i].score[2]>=60&&std[i].score[2]<=79)
c[2]++;
else
c[3]++;
if(std[i].score[3]>=90)
d[0]++;
else
if(std[i].score[3]>=80&&std[i].score[3]<=89)
d[1]++;
else
if(std[i].score[3]>=60&&std[i].score[3]<=79)
d[2]++;
else
d[3]++;
if(std[i].average>=90)
e[0]++;
else
if(std[i].average>=80&&std[i].average<=89)
e[1]++;
else
if(std[i].average>=60&&std[i].average<=79)
e[2]++;
else
e[3]++;
}
printf(" C语言 高数 英语 线代 平均分\n");
printf("90-100: %d %d %d %d %d \n",a[0],b[0],c[0],d[0],e[0]);
printf("80-89: %d %d %d %d %d \n",a[1],b[1],c[1],d[1],e[1]);
printf("60-79: %d %d %d %d %d \n",a[2],b[2],c[2],d[2],e[2]);
printf("60以下: %d %d %d %d %d \n",a[3],b[3],c[3],d[3],e[3]);
}




/*按各个同学平均分排序,给出名次*/
void px()
{int m,i,j,t=1;
for(i=0;i{for(j=0;j{if(std[i].averaget++;
}
std[i].num=t;
}
printf("学号 姓名 平均分 名次\n");
for(m=0;mprintf(" %d %s %.2f %d\n",std[m].xh,std[m].name,std[m].average,std[m].num);
}


/*通过学号返回数组下标*/
int search(int xh)
{ int i;
for (i=0;i<=n;i++)
{ if (std[i].xh==xh)
return i;
}
return -1;
}




/*显示单个学生信息*/
void xx(int p)
{
printf("学号 姓名 C语言 高数 英语 线代 平均分\n");
printf(" %d %s %.2f %.2f %.2f %.2f %.2f",std[p].xh,std[p].name,
std[p].score[0],std[p].score[1],std[p].score[2],std[p].score[3],std[p].average);

}


/*增加数据*/
void increase()
{ do
{printf("请输入学生学号:\n");
scanf("%d",&std[n].xh);
printf("请输入学生姓名:\n");
scanf("%s",&std[n].name);
printf("请输入学生c程序设计成绩:\n");
scanf("%f",&std[n].score[0]);
printf("请输入学生高数成绩:\n");
scanf("%f",&std[n].score[1]);
printf("请输入学生英语成绩:\n");
scanf("%f",&std[n].score[2]);
printf("请输入学生线代成绩:\n");
scanf("%f",&std[n].score[3]);
average(n);
n++;
printf("\n是否继续输入?(y/n)\n");
getchar();
}while(getchar()=='y');
}



/*删除数据*/
void Delete()
{ int p,i,xh;
while(1)
{printf("请输入要删除的学生的学号:");
scanf("%d",&xh);
p=search(xh);
if(p==-1)
printf("您所查找的学生不存在");
else
{ printf("要删除的学生信息为:\n");
xx(p);
printf("\n是否删除?(y/n)");
getchar();
if(getchar()=='y')
{ for(i=p;istd[i]=std[i+1];
n--;
}
}
printf("\n是否继续?(y/n)\n");
getchar();
if(getchar()=='n')
break;
}
}



/*修改数据*/
void repair()
{ int xh,p;
while(1)
{ printf("请输入要修改的学生的学号:");
scanf("%d",&xh);
p=search(xh);
if(p==-1)
printf("您所查找的学生不存在");
else
{ printf("要修改的学生信息为:\n");
xx(p);
printf("\n是否修改?(y/n)");
getchar();
if(getchar()=='y')
{printf("---请输入新数据---\n");
printf("请输入学生学号:\n");
scanf("%d",&std[p].xh);
printf("请输入学生姓名:\n");
scanf("%s",&std[p].name);
printf("请输入学生c程序设计成绩:\n");
scanf("%f",&std[p].score[0]);
printf("请输入学生高数成绩:\n");
scanf("%f",&std[p].score[1]);
printf("请输入学生英语成绩:\n");
scanf("%f",&std[p].score[2]);
printf("请输入学生线代成绩:\n");
scanf("%f",&std[p].score[3]);
average(p);
}
}
printf("\n是否继续?(y/n)\n");
getchar();
if(getchar()=='n')
break;
}
}



/*按学号进行查询*/
void inquire()
{ int xh,p;
while(1)
{ printf("请输入要查询的学生的学号:");
scanf("%d",&xh);
p=search(xh);
if(p==-1)
printf("所查询的学生不存在\n");
else
{printf("所查询的学生信息为:\n");
xx(p);
}
printf("\n是否继续?(y/n)\n");
getchar();
if(getchar()=='n')
break;
}
}

/*输出结果*/
void out()
{ FILE *fp;
int p,t;
fp=fopen("lishengjie.txt","r");
for(t=0;t{ fscanf(fp,"%d%s%.2f%.2f%.2f%.2f\n",&std[t].xh,&std[t].name,&std[t].score[0],&std[t].score[1],&std[t].score[2],&std[t].score[3]);
}
printf("学号 姓名 C语言设计 高等数学 英语 线性代数 平均分 名次 \n");
for(p=0;p<2;p++)
printf(" %d %s %.2f %.2f %.2f %.2f %.2f %d \n",std[p].xh,std[p].name,
std[p].score[0],std[p].score[1],std[p].score[2],std[p].score[3],std[p].average,std[p].num);
pjf2();
printf("\n");
tj();
fclose(fp);
}






/*菜单*/
void main()
{ int gongneng;
while(1)
{printf("\n=============欢迎进入学生管理系统============\n");
printf("1.输入学生数据\n");
printf("2.计算每位同学的平均分\n");
printf("3.计算每门课程的平均分\n");
printf("4.计算各分数段(90-100、80-89、60-79、60以下)的人数\n");
printf("5.对这20位同学的成绩平均分排序,给出名次\n");
printf("6.对学生数据进行增加的编辑操作\n");
printf("7.对学生数据进行删除的编辑操作\n");
printf("8.对学生数据进行修改的编辑操作\n");
printf("9.对学生数据进行查询\n");
printf("10.输出结果\n");
printf("请输入1-10数字选择功能:\n");
scanf("%d",&gongneng);
switch(gongneng)
{case 1:srsj(); break;
case 2:pjf1(); break;
case 3:pjf2(); break;
case 4:tj(); break;
case 5:px(); break;
case 6:incr

ease();break;
case 7:Delete() ;break;
case 8:repair() ;break;
case 9:inquire() ;break;
case 10:out() ;break;
default:printf("输入错误,请输入1-8的数字\n");
}
}
}

相关文档
最新文档