o 编一个学籍管理系统应该就有这些东西了
#define N 3 //定义宏N (默认定义为3)
#include "stdio.h"
struct cjsr //定义结构体
{ long xh; //定义学号
char xm[10]; //定义姓名(可最多输入4个汉字)
int cj[4]; //定义成绩 (0为总成绩,1为英语,2为高数,3为微机)
};
struct cjsr xs[N];
void px (struct cjsr strl[],int k);
void bc();
void dq();
void tj();
main()
{ int i,j,k=0,c;
while(1)
{
printf("\n"); //系统主界面
printf("\t<<<<<<<<<<<<<<< 欢迎使用学生成绩管理系统 >>>>>>>>>>>>>>>");
printf("\n\n\n");
printf("\t\t\t(1): 输入学生信息和成绩\n\n");
printf("\t\t\t(2): 保存\n\n");
printf("\t\t\t(3): 读取\n\n");
printf("\t\t\t(4): 按成绩排序\n\n");
printf("\t\t\t(5): 统计数据\n\n");
printf("\t\t\t(6): 退出\n\n");
printf("\n\n");
printf("\t<<<<<<<<<<<<<<<< @@@@@@@@@@@@@@@@@@@@@@@ >>>>>>>>>>>>>>>");
printf("\n\n\n\t\t请选择对应编号(1,2,3, 4, 5,6):\n");
scanf("%d",&c); //按照提示输入序号进入相应功能模块
if(c<1 || 7<c) //校验输入信息,错误信息提示
{printf("\t输入错误!请重输:\n");printf("\n");continue;}
printf("\n");
switch(c) //switch命令操作系统主界面
{
case 1 : //成绩录入
printf("请输入%d个学生的学号、姓名和英语、高数、微机3科成绩:\n",N);
for(i=0;i<N;i++)
{ scanf("%ld",&xs[i].xh);
scanf("%s",xs[i].xm);
for(k=1;k<4;k++)
{ scanf("%d",&xs[i].cj[k]);
xs[i].cj[0]=xs[i].cj[1]+xs[i].cj[2]+xs[i].cj[3]; //计算学生总成绩
}
}
printf("\t按任意键返回!\n");
getchar();getchar();
printf("\n");
break;
case 2 : //将输入的信息保存于D盘中的student.txt中
bc();
printf("\t已将学生信息已存入D盘中的student.txt中\n");
printf("\t按任意键返回!\n");
getchar();getchar();
printf("\n");
break;
case 3 : //读取student.txt中的已录入信息
dq();
printf("\t按任意键返回!\n");
getchar();getchar();
printf("\n");
break;
case 4 : //按要求对成绩排序,1,2,3分别对应英语,高数,微机。0为总成绩。
printf("请输入按第几学科排序(输入0为总成绩):\n");
scanf("%d",&k);
if(k>=0 && k<=3)
{ px(xs,k);}
else //校验输入信息
{ printf("错误!序号非法,请重新输入!\n\n");
continue;
}
printf("\n按总成绩排序为:\n"); //输出排序结果
printf("学号 姓名 英语 高数 微机 总成绩\n");
for(i=0;i<N;i++)
{ printf("%ld\t%s",xs[i].xh,xs[i].xm);
printf("\t%d\t%d\t%d\t%d\n",xs[i].cj[1],xs[i].cj[2],xs[i].cj[3],xs[i].cj[0]);
printf("\n");
}
printf("\n");
printf("\t按任意键返回!\n");
getchar();getchar();
printf("\n");
break;
case 5 : //统计分数段人数
tj();
printf("\n");
printf("\t按任意键返回!\n");
getchar();getchar();
printf("\n");
break;
case 6 : //退出系统
printf("\t\t按任意键退出! 谢谢使用(*^_^*)!\n\n");
printf("\t\t\t\t作者:\n");
getchar();
exit(1);
}
}
}
//排序函数
void px (struct cjsr strl[],int k)
{ int i,j;
struct cjsr t;
for(i=0;i<N-1;i++)
{ for(j=i+1;j<N;j++)
if(strl[i].cj[k]<strl[j].cj[k])
{ t=strl[i];
strl[i]=strl[j];
strl[j]=t;
}
}
}
//保存数据
void bc()
{ FILE *fp;
int i; //若保存文件不存在显示文件打开失败
if((fp=fopen("D:\\student.txt","w"))==NULL)
{ printf("\n文件打开失败!\n");
return;
}
for(i=0;i<N;i++)
{
fprintf(fp,"%d,%d,%d,%d,%d,%s\n",xs[i].xh,xs[i].cj[1],
xs[i].cj[2],xs[i].cj[3],xs[i].cj[0],xs[i].xm);
}
fclose(fp);
}
//读取函数
void dq()
{ FILE *fp;
int i;
if((fp=fopen("D:\\student.txt","rb"))==NULL) //打开文件输入的信息不存在,打开失败
{ printf("\n文件打开失败!\n");
exit(1);
}
rewind(fp);
for(i=0;i<N;i++) //显示读取的数据
{ fscanf(fp,"%d,%d,%d,%d,%d,%s\n",xs[i].xh,xs[i].cj[1],
xs[i].cj[2],xs[i].cj[3],xs[i].cj[0],xs[i].xm);
printf("%d,%s,%d,%d,%d,%d\n",xs[i].xh,xs[i].xm,xs[i].cj[1],
xs[i].cj[2],xs[i].cj[3],xs[i].cj[0]);
}
fclose(fp);
}
//统计函数
void tj()
{ int i,tj1=0,tj2=0,tj3=0,tj4=0;
int min1=100,min2=100,min3=100,max1=0,max2=0,max3=0;
int z1,z2,z3;
float p1,p2,p3;
for(i=0;i<N;i++)
{if(xs[i].cj[0]<180) tj1++;
if(xs[i].cj[0]>=180 && xs[i].cj[0]<225) tj2++;
if(xs[i].cj[0]>=225 && xs[i].cj[0]<255) tj3++;
if(xs[i].cj[0]>=255) tj4++;
if(xs[i].cj[1]>max1) max1=xs[i].cj[1];
if(xs[i].cj[2]>max2) max2=xs[i].cj[2];
if(xs[i].cj[3]>max3) max3=xs[i].cj[3];
if(xs[i].cj[1]<min1) min1=xs[i].cj[1];
if(xs[i].cj[2]<min2) min2=xs[i].cj[2];
if(xs[i].cj[3]<min3) min3=xs[i].cj[3];
z1=z1+xs[i].cj[1];
z2=z2+xs[i].cj[2];
z3=z3+xs[i].cj[3];
}
p1=z1/N; p2=z2/N; p3=z3/N;
printf("\t成绩情况统计如下: 人数\n"); //按分数段统计
printf("\t分数<3*60(及格) %d\n",tj1);
printf("\t3*60<=分数<3*75(中等) %d\n",tj2);
printf("\t3*75<=分数<3*85(良好) %d\n",tj3);
printf("\t3*85<=分数(优秀) %d\n",tj4);
printf("\n");
printf("\t英语学科\n\t平均分为: %.2f\n\t最高分为: %d\n\t最低分为: %d",p1,max1,min1);
printf("\t高数学科\n\t平均分为: %.2f\n\t最高分为: %d\n\t最低分为: %d",p2,max2,min2);
printf("\t微机学科\n\t平均分为: %.2f\n\t最高分为: %d\n\t最低分为: %d",p3,max3,min3);
}
温馨提示:答案为网友推荐,仅供参考