学生成绩管理系统
2016-12-11 11:00
417 查看
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> typedef struct Student { int id;//学号 char name[20];//名字 float a,b,c,sum,average;//三科分数,总和,平均数 }Student; //#define size sizeof(Student)//结构体的大小,注释掉的文件操作需要使用 #define MAXSIZE 100 //最大限制 void savefile(Student student[],int n);//保存文件 int readfile(Student student[],int n);//读取文件,返回学生数量值 void mainmenu();//主菜单 void admistermenu();//管理学生信息二级菜单 void lookmenu();//查看学生信息二级菜单 int MainMenu(Student student[],int n);//主菜单处理函数 int AdmisterMenu(Student student[],int n);//管理学生信息二级菜单处理函数 void LookMenu(Student student[],int n);//查看学生信息二级菜单处理函数 int addstudent(Student student[],int n);//录入学生信息 void modifystudent(Student student[],int n);//修改学生信息 void showallstudent(Student student[],int n);//展示所有学生成绩 int deletestudent(Student student[],int n);//删除学生信息 void sortid(Student student[],int n);//按照学号排序 void sortaverage(Student student[],Student std[],int n);//按照平均分排序 void dengji(Student student[],int n);//成绩分析 void geren(Student student[],int n);//查看个人成绩 void last(Student student[],int n);//不及格学生名单 //展示学生成绩信息表头 void showtop() { printf(" ----------------------------------------------------------------\n"); printf("\t\t\t序号\t学号\t姓名\tA\tB\tC\t总分\t平均分\n"); printf(" ----------------------------------------------------------------\n"); } //展示所有学生成绩信息 void showallstudent(Student student[],int n) { int i; system("cls"); printf("\n\n -----------------------------------学生信息管理系统---------------------------------\n\n\n"); printf("\t\t\t\t\t\t所有学生成绩表\n"); showtop(); for(i=0;i<n;i++) { printf("\t\t\t%d\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average); printf(" ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n"); } } //求所有人的学科总分 void zstudent(Student student[],int n) { int i; float sum[3]={0}; float average[3]; for(i=0;i<n;i++) { sum[0]=sum[0]+student[i].a; sum[1]=sum[1]+student[i].b; sum[2]=sum[2]+student[i].c; } average[0]=sum[0]/n; average[1]=sum[1]/n; average[2]=sum[2]/n; if(n==0){} else{ printf("\t\t\t%s\t\t\t%.1f\t%.1f\t%.1f\n","学科总分",sum[0],sum[1],sum[2]); printf(" ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n"); printf("\t\t\t%s\t\t\t%.1f\t%.1f\t%.1f\n","学科平均分",average[0],average[1],average[2]); printf(" ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n"); } } //主菜单 void mainmenu() { system("cls");//刷新页面 printf("\n\n -----------------------------------学生信息管理系统---------------------------------\n\n\n"); printf(" ▉ ▉\n"); printf(" ▉ 1.管理学生信息 ▉\n"); printf(" ▉ 2.查询学生信息 ▉\n"); printf(" ▉ 0.退出系统 ▉\n"); printf(" ▉ ▉\n"); printf(" ▉ ▉\n\n\n"); } //管理学生信息二级菜单 void admistermenu() { system("cls"); printf("\n\n -----------------------------------学生信息管理系统---------------------------------\n\n\n"); printf(" ▉ ▉\n"); printf(" ▉ 1.录入学生信息 ▉\n"); printf(" ▉ 2.修改学生信息 ▉\n"); printf(" ▉ 3.删除学生信息 ▉\n"); printf(" ▉ 0.返回主菜单 ▉\n"); printf(" ▉ ▉\n\n\n"); } //查看学生信息二级菜单 void lookmenu() { system("cls"); printf("\n\n -----------------------------------学生信息管理系统---------------------------------\n\n\n"); printf(" ▉ 1.查看学生成绩 ▉\n"); printf(" ▉ 2.查看学生名次 ▉\n"); printf(" ▉ 3.查看成绩分析 ▉\n"); printf(" ▉ 4.查看个人成绩 ▉\n"); printf(" ▉ 5.查看不及格科目▉\n"); printf(" ▉ 0.返回主菜单 ▉\n\n\n"); } //主菜单处理函数 int MainMenu(Student student[],int n) { system("COLOR 75");//控制台颜色 int select; do{ mainmenu(); printf("请输入您的选项:"); scanf("%d",&select); while(select<0||select>2){ fflush(stdin);//清空缓冲区 printf("输入错误,请重新输入:"); scanf("%d",&select); } switch(select) { case 1: n=AdmisterMenu(student,n);//管理学生信息子菜单 break; case 2: LookMenu(student,n); break; } }while(select!=0); return n; } //管理学生信息二级菜单处理函数 int AdmisterMenu(Student student[],int n) { int select; do{ admistermenu(); printf("请输入您的选项:"); scanf("%d",&select); while(select<0||select>3){ fflush(stdin); printf("输入错误,请重新输入:"); scanf("%d",&select); } switch(select) { case 1: n=addstudent(student,n);//录入学生信息 break; case 2: modifystudent(student,n); break; case 3: n=deletestudent(student,n); break; } }while(select!=0); return n; } //查看学生信息菜单处理函数 void LookMenu(Student student[],int n) { int select; Student std ; do{ lookmenu(); printf("请输入您的选项:"); scanf("%d",&select); while(select<0||select>5){ fflush(stdin); printf("输入错误,请重新输入:"); scanf("%d",&select); } switch(select) { case 1: showallstudent(student,n);//学生成绩展示 zstudent(student,n);//总分平均分输出 system("pause"); break; case 2: sortaverage(student,std,n);//平均分排序展示 showallstudent(std,n); zstudent(student,n); system("pause"); break; case 3: dengji(student,n);//成绩分析展示 break; case 4: geren(student,n);//个人成绩查询 break; case 5: last(student,n);//不及格学生名单 break; } }while(select!=0); } //录入学生信息 int addstudent(Student student[],int n) { int ID,i; char NAME[20]; float A,B,C; printf("请输入学生的学号:"); scanf("%d",&ID); for(i=0;i<n;i++)//防止学号重复 { if(student[i].id==ID){//学号已存在 printf("您输入的学号已存在!\n"); break; } } if(i==n)//输入的学号不存在 { printf("请输入学生的姓名:"); scanf("%s",&NAME); printf("请输入第一科的成绩:"); scanf("%f",&A); printf("请输入第二科的成绩:"); 4000 scanf("%f",&B); printf("请输入第三科的成绩:"); scanf("%f",&C); student .id=ID; strcpy(student .name,NAME); student .a=A; student .b=B; student .c=C; student .sum=A+B+C; student .average=(A+B+C)/3.0; n++; printf("录入成功!\n"); } sortid(student,n); savefile(student,n);//保存学生信息 system("pause");//暂停一下 return n; } //修改学生信息 void modifystudent(Student student[],int n) { int ID,i,c; char y,NAME[20]; float A,B,C; printf("请输入您要修改的学生的学号:"); scanf("%d",&ID); for(i=0;i<n;i++) { if(student[i].id==ID)//查找学号对应的位置 { c=i; break; } } if(c==n) { printf("您输入的学号不存在!"); } else{ printf("请输入修改后的信息:\n"); printf("请输入学生的学号:"); scanf("%d",&ID); for(i=0;i<n;i++)//防止学号重复 { if((student[i].id==ID)&&(i!=c)){//学号已存在 printf("您输入的学号已存在!\n"); break; } } if(i==n)//输入的学号不存在 { printf("请输入学生的姓名:"); scanf("%s",&NAME); printf("请输入第一科的成绩:"); scanf("%f",&A); printf("请输入第二科的成绩:"); scanf("%f",&B); printf("请输入第三科的成绩:"); scanf("%f",&C); student[c].id=ID; strcpy(student[c].name,NAME); student[c].a=A; student[c].b=B; student[c].c=C; student[c].sum=A+B+C; student[c].average=(A+B+C)/3.0; printf("修改成功!\n"); sortid(student,n); savefile(student,n);//保存学生信息 } } system("pause"); } //删除学生信息 int deletestudent(Student student[],int n) { int ID,i,j; printf("请输入您需要删除的学生学号:"); scanf("%d",&ID); for(i=0;i<n;i++) { if(student[i].id==ID) { break; } } if(i==n){ printf("您输入学生学号不存在!\n"); } else{ for(j=i;j<n-1;j++){ student[j]=student[j+1]; } n--; printf("删除成功!\n"); savefile(student,n);//保存学生信息 } system("pause"); return n; } //按照学号排序 void sortid(Student student[],int n) { Student temp; int i,j,s; for(i=0;i<n-1;i++)//简单选择排序 { s=i; for(j=i+1;j<n;j++) { if(student[s].id>student[j].id) { s=j; } } if(s!=i) { temp=student[s]; student[s]=student[i]; student[i]=temp; } } } //按照平均分降序排序 void sortaverage(Student student[],Student std[],int n) { Student temp; int i,j,s; for(i=0;i<n;i++) { std[i]=student[i]; } for(i=0;i<n-1;i++)//简单选择排序 { s=i; for(j=i+1;j<n;j++) { if(std[s].average<std[j].average) { s=j; } } if(s!=i) { temp=std[s]; std[s]=std[i]; std[i]=temp; } } } //成绩分析 void dengji(Student student[],int n) { int i; int n1[5]={0}; int n2[5]={0}; int n3[5]={0}; char d[5][20]={"优秀","良好","中等","及格","不及格"}; for(i=0;i<n;i++) { if(student[i].a>=90&&student[i].a<=100){ n1[0]++; } else if(student[i].a>=80&&student[i].a<90){ n1[1]++; } else if(student[i].a>=70&&student[i].a<80){ n1[2]++; } else if(student[i].a>=60&&student[i].a<70){ n1[3]++; } else{ n1[4]++; } } for(i=0;i<n;i++) { if(student[i].b>=90&&student[i].b<=100) n2[0]++; else if(student[i].b>=80&&student[i].b<90) n2[1]++; else if(student[i].b>=70&&student[i].b<80) n2[2]++; else if(student[i].b>=60&&student[i].b<70) n2[3]++; else n2[4]++; } for(i=0;i<n;i++) { if(student[i].c>=90&&student[i].c<=100) n3[0]++; else if(student[i].c>=80&&student[i].c<90) n3[1]++; else if(student[i].c>=70&&student[i].c<80) n3[2]++; else if(student[i].c>=60&&student[i].c<70) n3[3]++; else n3[4]++; } system("cls"); printf("\n\n -----------------------------------学生信息管理系统---------------------------------\n\n\n"); printf("\t\t\t\t\t\t学生成绩分析表\n"); printf(" ----------------------------------------------------------------\n"); printf("\t\t\t等级\t\tA\t\tB\t\tC\n"); printf(" ----------------------------------------------------------------\n"); for(i=0;i<5;i++) { printf("\t\t\t%s\t\t%d\t\t%d\t\t%d\n",d[i],n1[i],n2[i],n3[i]); printf("\t\t\t\t\t%d%%\t\t%d%%\t\t%d%%\n",100*n1[i]/n,100*n2[i]/n,100*n3[i]/n); printf(" ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n"); } system("pause"); } //个人成绩查询 void geren(Student student[],int n) { int ID; printf("请输入要查询的学生学号:"); scanf("%d",&ID); int i; for(i=0;i<n;i++) { if(student[i].id==ID) { break; } } if(i==n){ printf("您输入的学生学号不存在!\n"); } else{ system("cls"); printf("\n\n -----------------------------------学生信息管理系统---------------------------------\n\n\n"); printf("\t\t\t\t\t\t学生成绩表\n"); showtop(); printf("\t\t\t%d\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n\n",i+1,student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average); } system("pause"); } //不及格学生名单 void last(Student student[],int n) { char c[3][20]={"A","B","C"}; int nn[3] ; int n1=0,n2=0,n3=0,i,max;//三科不及格人数 for(i=0;i<n;i++){ if(student[i].a<60) { nn[0][n1]=i; n1++; } if(student[i].b<60) { nn[1][n2]=i; n2++; } if(student[i].c<60) { nn[2][n3]=i; n3++; } } system("cls"); printf("\n\n -----------------------------------学生信息管理系统---------------------------------\n\n\n"); printf("\t\t\t\t\t\t不及格学生名单\n"); printf(" ----------------------------------------------------------------\n"); printf("\t\t\t\t\tA\t\tB\t\tC\n"); printf(" ----------------------------------------------------------------\n"); max=n1; if(max<n2){ max=n2; } if(max<n3){ max=n3; } for(i=0;i<max;i++) { if(i<n1){ printf("\t\t\t\t\t%s",student[nn[0][i]].name); } else{ printf("\t\t\t\t\t"); } if(i<n2){ printf("\t\t%s",student[nn[1][i]].name); } else{ printf("\t\t"); } if(i<n3) { printf("\t\t%s\n",student[nn[2][i]].name); } else{ printf("\t\t\t\n"); } printf(" ----------------------------------------------------------------\n"); } system("pause"); } //保存文件 void savefile(Student student[],int n) { FILE *fp; int i; if((fp=fopen("student.txt","w"))==0) { printf("ERROR!"); return ; } for(i=0;i<n;i++) { //写入到文件中 fprintf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average); } /* if((fp=fopen("student.dat","wb"))==NULL) { printf("ERROR!"); return ; } for(i=0;i<n;i++) { fwrite(&student[i],size,1,fp); } fwrite(student,size,n,fp);//写入文件 */ fclose(fp); } //读取文件 int readfile(Student student[],int n) { FILE *fp; if((fp=fopen("student.txt","r"))==0) { printf("ERROR"); return 0; } //fscanf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",&student .id,student .name,&student .a,&student .b,&student .c,&student .sum,&student .average); while(!feof(fp)) { // n++; fscanf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",&student .id,student .name,&student .a,&student .b,&student .c,&student .sum,&student .average); n++; } /* if((fp=fopen("student.dat","rb"))==NULL) { printf("ERROR"); return 0; } fread(&student[i],size,1,fp); while(!feof(fp)) { n++; fread(&student[i],size,1,fp); } */ fclose(fp); return n; } int main() { int n=0;//学生数量 Student student[MAXSIZE]; n=readfile(student,n);//读取学生信息 n=MainMenu(student,n); savefile(student,n);//保存学生信息 return 0; }
相关文章推荐
- C#打造:学生成绩管理系统
- 我写的Java学生成绩管理系统源代码
- 学生成绩管理系统完整版
- 大学校园学生成绩管理查询系统
- C语言编写的简单的学生成绩管理系统
- 学生成绩管理系统 2
- 简单的学生成绩管理系统
- vc小技巧(ODBC)(学生成绩管理系统)
- JAVA写的学生成绩管理系统
- 学生成绩管理系统
- 用 c编写的一个学生成绩管理系统
- 学生成绩管理系统下载
- 【原创视频教程】学生信息管理系统4--成绩添加
- 学生成绩管理系统
- 用C写的简单学生成绩管理系统
- 用文件实现学生成绩管理系统
- 学生成绩管理系统(swing环境)
- 【原创视频教程】学生信息管理系统4--成绩添加
- C++学生成绩管理系统
- [转载]学生成绩管理系统C源代码