学生成绩管理系统,可以输入学生成绩,并且可以查看统计平均分总分等,并可以实现成绩的实时存储。代码有注释哦~
C语言源程序如下:
- #include<stdio.h>
- #include<string.h>
- #include<conio.h>
- #include<stdlib.h>
- #define N 10/*定义学生人数*/
- #define M 4 /*定义学科人数*/
- typedef struct student/*定义结构体数组*/
- {
- int number; /*学号*/
- char name[10];/*姓名*/
- char zhuanye[10];/*专业*/
- int cla;/*班级*/
- float score[M];/*分数*/
- float sum;/*总分*/
- float average;/*平均分*/
- }STU;
- STU stu[N];
- void menu(void);
- void input(void);
- void savescore(void);
- void loadf(void);
- void inoutput(void);
- void sumaverage(STU stu[N]);
- void paixu(STU stu[N]);
- void tongji1(STU stu[N]);
- void tongji2(STU stu[N]);
- void shuchuone(int i);
- void output2(STU stu[N]);
- void xiugai(int n);
- void xianshi(STU stu[N]);
- void chazhao(STU stu[N]);
- void chazhao1(int n);
- void main()
- {
- char choice;
- system("color F0");
- do
- { menu();
- printf("\n\tPress a key for your choice: ");
- switch(choice=getchar())
- { case '1': inoutput();break;/*输入学生成绩并保存加载显示*/
- case '2': chazhao(stu);break;/*查找学生信息及各个统计结果*/
- case '3': xiugai(N);break;/*修改学生信息*/
- case '4': xianshi(stu);break;/*显示统计结果*/
- case '5': goto QUIT;/*安全退出*/
- case '\n': break;
- default: printf("\t输入错误,请重新输入!");/*输入错误时的处理*/
-
- }
- getch();
- }while(1);
- QUIT:
- printf("\n\t谢谢使用,再见!\n\n\t");
- getch();
- exit(0);
- }
- void menu(void)/*定义菜单函数*/
- {
- system("cls");/*清屏*/
- printf("\n\n\t*********欢迎使用学生信息管理系统************\n");
- printf("\n\t 1、添加学生信息并显示:\n");
- printf("\t 2、查找学生信息:\n");
- printf("\t 3、修改学生信息:\n");
- printf("\t 4、显示所有学生信息及统计结果:\n");
- printf("\t 5、退出。\n");
- printf("\n\n\t*********************************************");
- }
- void input(void)/*定义输入函数*/
- {
- int i,j;
- system("CLS");
- printf("输入学生各科成绩:\n");
- puts("学号\t姓名\t专业\t班级\t英语\t高数\t物理\t体育");
- for(i=0;i<N;i++)
- {
- printf("输入%d的学生信息:\n",i+1);
- scanf("%d%s%s%d",&stu[i].number,stu[i].name,stu[i].zhuanye,&stu[i].cla);
- printf("输入%d的学生各科成绩:\n",i+1);
- for(j=0;j<M;j++)
- scanf("%f",&stu[i].score[j]);
- }
- printf("\n已输入%d个学生数据.\n",N);
- }
- void savescore(void)/*定义保存成绩到文件函数*/
- {
- FILE * fp;
- int i,flag=1;
- char m;
- puts("是否现在保存成绩(Y/N)");
- scanf("%s",&m);
- if(m=='Y')
- {
- if((fp=fopen("c:\\student.dat","wb"))==NULL)
- {
- printf("无法打开文件\n");
- return;
- }
- for(i=0;i<N;i++)
- {
- if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
- {
- printf("文件写入错误\n");
- flag=0;
- }
- }
- if(flag==1)
- puts("文件成功保存!");
- fclose(fp);/*及时关闭文件*/
- }
- else
- return;
- }
- void loadf(void)/*定义加载文件函数*/
- {
- FILE *fp;
- int i,flag=1;
- char m;
- puts("是否现在打开文件!(Y/N)");
- scanf("%s",&m);
- if(m=='Y')
- {
- if((fp=fopen("c:\\student.dat","rb"))==NULL)
- {
- printf("无法打开文件\n");
- flag=0;
- return;
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);
- if(flag==1)
- puts("文件加载成功!");
- fclose(fp);
- }
- else
- return;
- }
- void sumaverage(STU stu[N])/*定义求和与求平均值函数*/
- {
- FILE *fp;
- int i,j;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
- fclose(fp);
- for(i=0;i<N;i++)
- {
- stu[i].sum=0.0;
- for(j=0;j<M;j++)
- stu[i].sum+=stu[i].score[j];
- stu[i].average=stu[i].sum/M;
- }
- }
- void paixu(STU stu[N])/*定义排序函数*/
- {
- int i,j,k;
- STU temp;
- for(i=0;i<N-1;i++)
- {
- k=i;
- for(j=i+1;j<N;j++)
- if(stu[i].sum<stu[j].sum)
- k=j;
- if(i!=k)
- {
- temp=stu[i];
- stu[i]=stu[k];
- stu[k]=temp;
- }
- }
- }
- void tongji1(STU stu[N])/*定义统计成绩率函数*/
- {
- int m,i;
- float a=0.0,b=0.0,c=0.0;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
- fclose(fp);
- printf("********************选择统计学科**********************\n"); /*选择功能菜单*/
- printf("统计英语成绩不及格率、通过率及优秀率请按:1\n");
- printf("统计高数成绩不及格率、通过率及优秀率请按:2\n");
- printf("统计物理成绩不及格率、通过率及优秀率请按:3\n");
- printf("统计体育成绩不及格率、通过率及优秀率请按:4\n");
- printf("******************************************************\n");
- scanf("%d",&m);
- for(i=0;i<N;i++)
- {
- if(stu[i].score[m-1]<60)
- a++;
- else
- b++;
- if(stu[i].score[m-1]>=90)
- c++;
- }
- printf("不及格率为%.1f,通过率为%.1f,优秀率为%.1f\n",a/N,b/N,c/N);
- printf(" ******************************************************");
- }
- void tongji2(STU stu[N])/*定义查找最高分函数*/
- {
- int i,m,k=0;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
- fclose(fp);
- printf("********************输入查找选项**********************\n");
- printf("1、查找英语成绩最高学生请按:1\n");
- printf("2、查找高数成绩最高学生请按:2\n");
- printf("3、查找物理成绩最高学生请按:3\n");
- printf("4、查找体育成绩最高学生请按:4\n");
- printf("*****************************************************\n");
- scanf("%d",&m);
- for(i=0;i<N;i++)
- {
- if(stu[i].score[m-1]>stu[k].score[m-1])
- k=i;
- }
- sumaverage(stu);
- printf("最高分学生信息如下:\n");
- shuchuone(k);
- printf(" 输出结束\n");
- printf(" **********************************************************");
- }
- void shuchuone(int i)/*定义输出一个学生函数*/
- {
- printf("学号:%d 姓名:%s 专业:%s 班级:%d\n",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
- printf("英语:%.1f 高数:%.1f 物理:%.1f 体育:%.1f 总分:%.1f 平均分:%.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);
- }
- void inoutput(void)/*定义输入成绩与保存加载显示函数*/
- {
- int i,j;
- input();/*调用输入成绩函数*/
- savescore();/*调用保存函数*/
- loadf();/*定定义加载函数*/
- puts("学号\t姓名\t专业\t班级\t英语\t高数\t物理\t体育");
- for(i=0;i<N;i++)
- {
- printf("%d\t%s\t%s\t%d\t",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
- for(j=0;j<M;j++)
- printf("%.1f\t",stu[i].score[j]);
- printf("\n");
- }
- }
- void output2(STU stu[N])/*定义输出成绩函数*/
- {
- int i,j;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
- fclose(fp);
- puts("学号\t姓名\t专业\t班级\t英语\t高数\t物理\t体育\t总分\t平均分");
- for(i=0;i<N;i++)
- {
- printf("%d\t%s\t%s\t%d\t",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
- for(j=0;j<M;j++)
- {
- printf("%.1f\t",stu[i].score[j]);
- }
- sumaverage(stu);
- printf("%.1f\t",stu[i].sum);
- printf("%.1f\t",stu[i].average);
- }
- }
- void xiugai(int n)/*定义修改信息函数*/
- {
- STU some;
- int k=-1,m,i;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
- fclose(fp);
- printf("\n请输入要修改的同学的学号:");
- scanf("%d",&m);
- for(i=0;i<n;i++)
- {
- if(m==stu[i].number)
- {
- k=i;
- break;
- }
- }
- if(k<0)
- printf("\n输入学号有误,请重新输入!");
- else
- {
- printf("请输入要修改学生修改后的的信息\n");
- printf("学号\t专业\t班级\t英语\t高数\t物理\t体育\n");
- scanf("%d\t%s\t%d\t%f\t%f\t%f\t%f",&some.number,some.zhuanye,&some.cla,&some.score[0],&some.score[1],&some.score[2],&some.score[3]);
- strcpy(some.name,stu[i].name);
- some.sum=(some.score[0]+some.score[1]+some.score[2]+some.score[3]);
- some.average=some.sum/M;
- stu[k]=some;
- shuchuone(k);
- printf("\n修改成功!恭喜!\n");
- }
- }
- void xianshi(STU stu[N])/*定义显示成绩函数*/
- {
- sumaverage(stu);
- paixu(stu);
- output2(stu);
- }
- void chazhao(STU stu[N])/*定义查找函数*/
- {
- int m,i;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
- fclose(fp);
- sumaverage(stu);/*求平均值和总分*/
- printf("********************输入查找选项**********************\n");
- printf("1、查找成绩最高学生请按:1\n");
- printf("2、查看学生的各项成绩率请按:2\n");
- printf("3、查找单个学生信息请按:3\n");
- printf("******************************************************\n");
- scanf("%d",&m);
- if(m==1)
- tongji2(stu);
- if(m==2)
- tongji1(stu);
- if(m==3)
- chazhao1(N);
- }
- void chazhao1(int n)/*定义查找单个学生成绩函数*/
- {
- int k=-1,a,i;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
- fclose(fp);
- printf("请输入要查找的同学的学号:\n");
- scanf("%d",&a);
- for(i=0;i<n;i++)
- {
- if(a==stu[i].number)
- {
- k=i;
- break;
- }
- }
- if(k<0)
- printf("\n输入学号有误,请重新输入!");
- else
- sumaverage(stu);
- shuchuone(k);
- }
复制代码
所有资料51hei提供下载:
学生成绩管理系统.rar
(222 KB, 下载次数: 19)
|