C语言代码实现学生成绩管理系统
#include
#include
#include
const int N = 40;
int i,j;
typedef struct control
{
int no;
char name[20];
char name1[20];
int cj[7];
int all;
int lave;
} AVA;
// ------------------------函数
void menu();
void menu1();
void menu2();
void menu4(AVA stu[],int n,int n3);
//-------------------------
//-------------------------链接菜单与功能的函数
void basic(AVA stu[]);
//------------------------
//-------------------------信息录入函数
void keyboard(AVA stu[],int n,int n2);
//------------------------功能函数调用总函数
void case1(AVA stu[],int n,int a);
//========================
//------------------------功能函数
void function4(AVA stu[],AVA t,int n);//总分排序
void function5(AVA stu[],AVA t,int n);//学号排序
void function6(AVA stu[],AVA t,int n);//姓名排序
void function7(AVA stu[],AVA t,int n,int w);//学号查找
void function8(AVA stu[],AVA t,int n,char s[]);//姓名查找
void function9(AVA stu[],int n,int a);//数据分析
void function10(AVA stu[],int n,int a,int b1[],int b2[]);//输出学生信息
void function11(AVA stu[],int n,int a);//存进文件里面
void exchange(AVA stu[],int a,int b);//读档函数
//-------------------------
int main()
{
AVA stu[N];
for(i = 0; i < 30; i ++)
{
stu[i].all = 0;
stu[i].lave = 0;
}
basic(stu);
return 0;
}
void menu()
{
printf("_ _
");
printf("| |
");
printf("
");
printf("
");
printf(" 学生信息管理系统
");
printf("
");
printf("
");
printf("
");
printf("| |
");
printf("- -
");
}
void menu1()
{
printf("-> 信息输入 <-
");
printf("-> 学课成绩 <-
");
printf("-> 学生成绩 <-
");
printf("-> 总分排序 <-
");
printf("-> 学号排序 <-
");
printf("-> 姓名排序 <-
");
printf("-> 学号查询 <-
");
printf("-> 姓名查询 <-
");
printf("-> 数据分析 <-
");
printf("-> 信息输出 <-
");
printf("-> 数据存档 <-
");
}
void menu2()
{
printf("_ _
");
printf("| |
");
printf("-> 功能代号 <-
");
printf("-> <1><2><3><4><5><6><7><8><9><10><11> <-
");
printf("| |
");
printf("- -
");
}
void menu4(AVA stu[],int n,int n3)//读档函数总调用
{
printf("如果档案中没有存有足够的学科数,则可能提取乱码
");
printf("如果文件中没有数据则会显示无法打开
");
exchange( stu,n,n3);
case1( stu,n,n3);
}
//中转函数,菜单与功能的桥梁
void basic(AVA stu[])
{
menu();
printf("若无学生信息档案需要先录入
");
printf("<1-录入><2-读档><3-退出>
");
int n,n1,n3;
do
{
scanf("%d",&n1);
if(3 { printf("数据输入错误,请重新输入 "); } }while(3 printf("输入学生数量 "); do { scanf("%d",&n); if(30 { printf("数据输入错误,请重新输入<1-30> "); } }while(30 printf("输入学科数量 "); do { scanf("%d",&n3); if(6 { printf("数据输入错误,请重新输入<3-6> "); } }while(6 if(n1==1) { keyboard( stu,n,n3); case1( stu, n,n3); } else if(n1==2) menu4(stu,n,n3); else { printf("欢迎再次使用 "); exit(0); } } //=========================功能函数调用的函数 void case1(AVA stu[],int n,int a) { AVA t; for(i = 0; i < n; i ++) { for(j = 0; j < a; j ++) { stu[i].all+=stu[i].cj[j]; } stu[i].lave = stu[i].all/a; } int x[10]={0},y[10]={0}; for(j = 0; j < a;j ++) { for(i = 0; i < n; i ++) { y[j]+=stu[i].cj[j]; } } for(i = 0; i < a; i ++) { x[i] = y[i]/n; } menu1(); menu2(); printf("数据录入成功 "); printf("请输入你想选择的功能 "); int n2; while(scanf("%d",&n2)&&n2!=0) { if(n2==2) { for(i = 0; i < a; i ++) { printf("第%d门总分为:%d,平均分为:%d ",i+1,y[i],x[i]); } menu1(); menu2(); printf("完成 "); } else if(n2==3) { int f; printf("计算完成,是否打印?<1 or 0> "); scanf("%d",&f); if(f==1) { for(i = 0; i < n; i ++) { printf("第%d个同学的总分为:%d,平均分为:%d ",i+1,stu[i].all,stu[i].lave); } printf("打印完成 "); menu2(); } else { menu1(); menu2(); } printf("完成 "); } else if(n2==4) { function4( stu, t, n); menu1(); menu2(); printf("完成 "); } else if(n2==5) { function5( stu, t, n); menu1(); menu2(); printf("完成 "); } else if(n2==6) { function6( stu, t, n); menu1(); menu2(); printf("完成 "); } else if(n2==7) { int w; printf("输入你想查询的学号 "); scanf("%d",&w); function7( stu, t, n, w); menu1(); menu2(); printf("完成 "); } else if(n2==8) { char s[30]; printf("输入你想查询的名字 "); scanf("%s",s); function8(stu,t, n,s); menu1(); menu2(); printf("完成 "); } else if(n2==9) { function9( stu, n, a); menu1(); menu2(); printf("完成 "); } else if(n2==10) { function10( stu, n, a, x, y); menu1(); menu2(); printf("完成 "); } else if(n2==11) { function11( stu, n, a); menu1(); menu2(); printf("完成 "); } else menu2(); } } //=========================信息录入函数 void keyboard(AVA stu[],int n,int n2) { for(i = 0; i < n; i ++) { printf("正在输入%d个学生信息 ",i+1); // printf("学号: "); scanf("%d",&stu[i].no); printf("姓名: "); scanf("%s",stu[i].name); printf("姓名拼音简写 "); scanf("%s",stu[i].name1); printf("分别输入%d门学课成绩 ",n2); for(j = 0; j < n2; j ++) { scanf("%d",&stu[i].cj[j]); } } } void function4(AVA stu[],AVA t,int n)//总分排序 { printf("总分排序 "); FILE *fp; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].all { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } printf("正在生成文件 "); printf("请及时拷贝文件,否则会造成数据丢失 "); fp = fopen("总分排序.txt","w"); if(fp==NULL) { printf("打开失败 "); exit(0); } for(i = 0; i < n;i ++) { fprintf(fp,"%s %d ",stu[i].name,stu[i].all); } fclose(fp); } void function5(AVA stu[],AVA t,int n)//学号排序 { printf("学号排序 "); FILE *fp; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].no { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } char name[N]; strcpy(name,"学号为:"); printf("正在生成文件 "); printf("请及时拷贝文件,否则会造成数据丢失 "); fp = fopen("学号排序.txt","w"); if(fp==NULL) { printf("打开失败 "); exit(0); } for(i = 0; i < n;i ++) { fprintf(fp,"%s%d ",name,stu[i].no); fprintf(fp,"%s%d ",stu[i].name,stu[i].all); } fclose(fp); } void function6(AVA stu[],AVA t,int n)//姓氏排序 { printf("姓名排序 "); FILE *fp; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].name1[0]>stu[j+1].name1[0]) { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } printf("正在生成文件 "); printf("请及时拷贝文件,否则会造成数据丢失 "); fp = fopen("姓名排序.txt","w"); if(fp==NULL) { printf("打开失败 "); exit(0); } for(i = 0; i < n;i ++) { fprintf(fp,"%s%d ",stu[i].name,stu[i].all); } fclose(fp); } void function7(AVA stu[],AVA t,int n,int w)//学号查找 { int m = 0; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].all { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } for(i = 0; i { m++; if(stu[i].no==w) { printf("学号为:%d ",stu[i].no); printf("姓名为:%s ",stu[i].name); printf("成绩为:%d ",stu[i].all); printf("排名为:%d ",m); break; } } } void function8(AVA stu[],AVA t,int n,char s[])//姓名查找 { int m = 0; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].all { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } for(i = 0; i { m++; if(strcmp(stu[i].name,s)==0) { printf("学号为:%d ",stu[i].no); printf("姓名为:%s ",stu[i].name); printf("成绩为:%d ",stu[i].all); printf("排名为:%d ",m); break; } } } void function9(AVA stu[],int n,int a)//数据分析 { printf("请在文件夹中查看 "); for(i = 0; i < a; i++) { double k1=0,k2=0,k3=0,k4=0,k5=0; for( j = 0; j < n; j ++) { if(stu[j].cj[i]>=90) k1++; else if(stu[j].cj[i]>=80&&stu[j].cj[i]<=89) k2++; else if(stu[j].cj[i]>=70&&stu[j].cj[i]<=79) k3++; else if(stu[j].cj[i]>=60&&stu[j].cj[i]<=69) k4++; else if(stu[j].cj[i]<=59) k5++; } FILE *fp; fp = fopen("数据分析.txt","a"); if(fp==NULL) { printf("打开失败 "); exit(0); } char s[20]; strcpy(s,"subject"); s[7] = '0'+i; s[8] = '0'; char name1[20]; char name2[20]; char name3[20]; char name4[20]; char name5[20]; strcpy(name1,"优:%"); strcpy(name2,"良好:%"); strcpy(name3,"中等:%"); strcpy(name4,"及格:%"); strcpy(name5,"不及格:%"); fprintf(fp," %s ",s); fprintf(fp,"%s%.2f ",name1,(k1*100)/n); fprintf(fp,"%s%.2f ",name2,(k2*100)/n); fprintf(fp,"%s%.2f ",name3,(k3*100)/n); fprintf(fp,"%s%.2f ",name4,(k4*100)/n); fprintf(fp,"%s%.2f ",name5,(k5*100)/n); k1=0,k2=0,k3=0,k4=0,k5=0; fclose(fp); } } void function10(AVA stu[],int n,int a,int b1[],int b2[])//输出学生信息 { for(i = 0; i < n; i ++) { printf("学号:%d ",stu[i].no); printf("姓名:%s ",stu[i].name); printf("总分:%d ",stu[i].all); printf("平均分:%d ",stu[i].lave); printf("每科分数为:"); for(j = 0; j < a; j ++) { printf("%d ",stu[i].cj[j]); } printf(" "); printf(" "); printf(" "); printf(" "); } printf("学科平均分为: "); for(j = 0; j < a; j ++) { printf("第%d学科平均分为:%d ",j+1,b1[j]); } printf("学科总分: "); for(j = 0; j < a; j ++) { printf("第%d学科总分为:%d ",j+1,b2[j]); } } void function11(AVA stu[],int n,int a)//存进文件中 { FILE *fp; fp = fopen("学生信息存档.txt","a"); if(fp==NULL) { printf("无法打开 "); exit(0); } char name[30]; char name1[30]; char name2[30]; strcpy(name,"每科成绩:"); strcpy(name1,"总平均成绩:"); strcpy(name2,"总成绩:"); for(i = 0; i < n; i ++) { fprintf(fp," %d %s ",stu[i].no,stu[i].name); fprintf(fp,"%s %d ",name2,stu[i].all); fprintf(fp,"%s %d ",name1,stu[i].lave); fprintf(fp,"%s ",name); for(j = 0; j < a;j ++) { fprintf(fp,"%d ",stu[i].cj[j]); } } fclose(fp); FILE *fpk1,*fpk2,*fpk3,*fpk4,*fpk5,*fpk6,*fpk7,*fpk8,*fpk9; fpk1 = fopen("学号.txt","a"); fpk2 = fopen("姓名.txt","a"); fpk3 = fopen("姓名简称.txt","a"); fpk4 = fopen("学科1.txt","a"); fpk5 = fopen("学科2.txt","a"); fpk6 = fopen("学科3.txt","a"); fpk7 = fopen("学科4.txt","a"); fpk8 = fopen("学科5.txt","a"); fpk9 = fopen("学科6.txt","a"); if(fpk1==NULL||fpk2==NULL||fpk3==NULL||fpk4==NULL||fpk5==NULL||fpk6==NULL||fpk7==NULL||fpk8==NULL||fpk9==NULL) { printf("无法打开 "); exit(0); } for(i = 0; i < n; i ++) { fprintf(fpk1,"%d ",stu[i].no); fprintf(fpk2,"%s ",stu[i].name); fprintf(fpk3,"%s ",stu[i].name1); fprintf(fpk4,"%d ",stu[i].cj[0]); fprintf(fpk5,"%d ",stu[i].cj[1]); fprintf(fpk6,"%d ",stu[i].cj[2]); if(a==4||a==5||a==6) { fprintf(fpk7,"%d ",stu[i].cj[3]); } if(a==5||a==6) { fprintf(fpk8,"%d ",stu[i].cj[4]); } if(a==6) { fprintf(fpk9,"%d ",stu[i].cj[5]); } } fclose(fpk1); fclose(fpk2); fclose(fpk3); fclose(fpk4); fclose(fpk5); fclose(fpk6); fclose(fpk7); fclose(fpk8); fclose(fpk9); } void exchange(AVA stu[],int a,int b)//读档函数 a学生b学科 { FILE *fpk1,*fpk2,*fpk3,*fpk4,*fpk5,*fpk6,*fpk7,*fpk8,*fpk9; fpk1 = fopen("学号.txt","r"); fpk2 = fopen("姓名.txt","r"); fpk3 = fopen("姓名简称.txt","r"); fpk4 = fopen("学科1.txt","r"); fpk5 = fopen("学科2.txt","r"); fpk6 = fopen("学科3.txt","r"); fpk7 = fopen("学科4.txt","r"); fpk8 = fopen("学科5.txt","r"); fpk9 = fopen("学科6.txt","r"); if(fpk1==NULL||fpk2==NULL||fpk3==NULL||fpk4==NULL||fpk5==NULL||fpk6==NULL||fpk7==NULL||fpk8==NULL||fpk9==NULL) { printf("无法打开 "); exit(0); } i = 0; char s1[N],s2[N],s3[N],s4[N],s5[N],s6[N],s7[N],s8[N],s9[N]; while(fgets(s1,40,fpk1)!=NULL) { int w; w = strlen(s1); if(w==2) { stu[i].no = s1[0]-'0'; } else if(w==3) { stu[i].no=(s1[0]-'0')*10+s1[1]-'0'; } i++; if(i==a) break; } i=0; while(fgets(s2,40,fpk2)!=NULL) { strcpy(stu[i].name,s2); i++; if(i==a)break; } i=0; while(fgets(s3,40,fpk3)!=NULL) { strcpy(stu[i].name1,s3); i++; if(i==a)break; } i = 0; while(fgets(s4,40,fpk4)!=NULL) { int w; w = strlen(s4); if(w==2) { stu[i].cj[0] = s4[0]-'0'; } else if(w==3) { stu[i].cj[0]=(s4[0]-'0')*10+s4[1]-'0'; } i++; if(i==a) break; } i = 0; while(fgets(s5,40,fpk5)!=NULL) { int w; w = strlen(s5); if(w==2) { stu[i].cj[1] = s5[0]-'0'; } else if(w==3) { stu[i].cj[1]=(s5[0]-'0')*10+s5[1]-'0'; } i++; if(i==a) break; } i = 0; while(fgets(s6,40,fpk6)!=NULL) { int w; w = strlen(s6); if(w==2) { stu[i].cj[2] = s6[0]-'0'; } else if(w==3) { stu[i].cj[2]=(s6[0]-'0')*10+s6[1]-'0'; } i++; if(i==a) break; } if(b==4||b==5||b==6) { i = 0; while(fgets(s7,40,fpk7)!=NULL) { int w; w = strlen(s7); if(w==2) { stu[i].cj[3] = s7[0]-'0'; } else if(w==3) { stu[i].cj[3]=(s7[0]-'0')*10+s7[1]-'0'; } i++; if(i==a) break; } } if(b==5||b==6) { i = 0; while(fgets(s8,40,fpk8)!=NULL) { int w; w = strlen(s8); if(w==2) { stu[i].cj[4] = s8[0]-'0'; } else if(w==3) { stu[i].cj[4]=(s8[0]-'0')*10+s8[1]-'0'; } i++; if(i==a) break; } } if(b==6) { i = 0; while(fgets(s9,40,fpk9)!=NULL) { int w; w = strlen(s9); if(w==2) { stu[i].cj[5] = s9[0]-'0'; } else if(w==3) { stu[i].cj[5]=(s9[0]-'0')*10+s9[1]-'0'; } i++; if(i==a) break; } } fclose(fpk1); fclose(fpk2); fclose(fpk3); fclose(fpk4); fclose(fpk5); fclose(fpk6); fclose(fpk7); fclose(fpk8); fclose(fpk9); printf("读档完成 "); }