#include”stdafx.h”
#include #include #include #define N 40 #define PR printf(“\\n\\r%s %s %s %s %s %s %s %s %s %s “, stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].ave) struct student {char num[11]; char name[20]; int score[8]; float ave; }stu[N]; typedef struct node {unsigned long int key; struct node * link;}HNode; typedef struct{int key; float data; }RecNode; /*保存函数*/ save(int n) {FILE *fp; int i; if((fp=fopen("sc.txt","wb"))==NULL) {printf("\\n不能打开文件\\n"); getch();return NULL;} for(i=0;i if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("文件输入错误\\n"); fclose(fp);} /*加载记录或可以计算记录个数的函数*/ load() {FILE *fp; int i; if((fp=fopen("sc.txt","rb"))==NULL) {printf("\\n不能打开文件\\n"); getch();return NULL;} for(i=0;!feof(fp);i++) fread(&stu[i],sizeof(struct student),1,fp); fclose(fp); return(i-1);} /*一个任务结束时的选择浏览还是返回的函数*/ void printf_back() printf("\\n\\n\^-^★成功★ ^-^\\n\\n"); printf("请选择:\\n\\n\1).现在浏览全部\2).返回: [ ]\\b\\b"); scanf("%d",&w); if(w==1) browse(); else teacher();} /*显示数据结构项目函数*/ void printf_face() {printf("\\n\学号 姓名\英语 数学 C语言 管理学 信检 体育 近代史 线数 平均分\\\n");} average(int i) {int j,sum; for(sum=0,j=0;j<8;j++) sum+=stu[i].score[j]; stu[i].ave=sum/8.0;} /*学号输入函数*/ no_input(int i,int n) {int j,k,w1; do {w1=0; printf("学号:"); scanf("%s",stu[i].num); for(j=0;stu[i].num[j]!='\\0';j++) if(stu[i].num[j]<'0'||stu[i].num[j]>'9') {puts("Input error! Only be made up of (0-9).Please reinput!\\n"); w1=1;break; } if(w1!=1) for(k=0;k w1=1;break;} } while(w1==1);} /*对分数输入*/ score_input(int i) {int j;printf(" 1.英语 2.数学 3.C语言 4.管理学 5.信检 6.体育 7.近代史 8.线性代数\\n"); for(j=0;j<8;j++) {printf("score %d:",j+1); scanf("%d",&stu[i].score[j]);}} /*输入一个记录函数*/ input(int i) { no_input(i,i); printf("姓名:"); scanf("%s",stu[i].name); score_input(i); average(i); } /*显示一个记录的函数*/ printf_one(int i) {int j; printf("%11s %-10s",stu[i].num,stu[i].name); for(j=0;j<8;j++) printf("%-6d",stu[i].score[j]); printf("%-7.2f\\n",stu[i].ave); } void puts___() {puts("\\n--------------------------------------------------------------------"); } /*修改记录函数*/ modify_data(int i,int n) {int c,w1; do {puts("\\nmodify by =>\\n\\n 1).学号 2.姓名 3).数据结构 4).数学\\n 5).数据库 6).数学建模 7).信息管理 8).体育 9).毛概\\n 10).线性代数 11).all score 12).all data 13).cancel and back"); printf("请选择: [ ]\\b\\b"); scanf("%d",&c); if(c>13||c<1) {puts("\\n选择错误! 重新选择!"); getchar(); }} while(c>13||c<1); do {switch(c) {case 1:no_input(i,n);break; case 2:printf("姓名:");scanf("%s",stu[i].name);break; case 3:printf("英语:");scanf("%d",&stu[i].score[0]);break; case 4:printf("数学:");scanf("%d",&stu[i].score[1]);break; case 5:printf("C语言:");scanf("%d",&stu[i].score[2]);break; case 6:printf("管理学:");scanf("%d",&stu[i].score[3]);break; case 7:printf(":信检");scanf("%d",&stu[i].score[4]);break; case 8:printf("体育:");scanf("%d",&stu[i].score[5]);break; case 9:printf("近代史:");scanf("%d",&stu[i].score[6]);break; case 10:printf("线性代数:");scanf("%d",&stu[i].score[7]);break; case 11:score_input(i);break; case 12:input(i);break; case 13:teacher(); } if(c>2&&c<10) average(i); puts("\\nNow:\\n"); printf_face(); printf_one(i); printf("\\n是否确定?\\n\\n\1).确定 2).重新修改 3).不保存返回 [ ]\\b\\b"); scanf("%d",&w1); } while(w1==2); return(w1); } /****************输入模块****************/ enter() {int i,n; printf("输入学生总数(0-%d)?:",N); scanf("%d",&n); printf("\\n现在输入数据\\n\\n"); for(i=0;i input(i); } if(i!=0) save(n); printf_back();} /****************追加模块****************/ add() {int i,n,m,k; FILE *fp; n=load(); printf("增加的学生总数(0-%d)?:",N-n); scanf("%d",&m); k=m+n; for(i=n;i input(i); } if((fp=fopen("sc.txt","ab"))==NULL) {printf("不能打开文件\\n"); return;} for(i=n;i printf("文件输入错误\\n"); fclose(fp); printf_back();} /****************修改模块****************/ modify() {struct student s; FILE *fp; int i,n,k,w0=1,w1,w2=0; n=load(); do {system("cls"); k=-1; puts___(); printf_face(); for(i=0;i {printf("\\n\\nRemember NO.which needed modify. pass any key to contiune . . ."); getch(); puts("\\n\\n");} printf_one(i); } puts___(); do{printf("\\n\\n输入修改学号! NO.:"); scanf("%s",s.num); for(i=0;i {k=i; s=stu[i]; } if(k==-1) printf("\\n\\n不存在! 重新输入");} while(k==-1); printf_face(); printf_one(k); w1=modify_data(k,n); if(w1==1) {printf("\\n ^-^ ★成功★ ^-^.\\n\\n是否修改其他?\\n\\n\1).是 2).保存返回\[ ]\\b\\b"); scanf("%d",&w0); w2=1; } else {w0=0; if(w2==1) stu[k]=s;} if(w0!=1&&w2==1) save(n); } while(w0==1); teacher();} /****************删除模块****************/ del() {struct student s; FILE *fp; int i,j,n,k,c,w0=1; n=load(); do {system("cls"); k=-1; /*给用户看全部记录以便确认要删除的记录*/ puts___(); printf_face(); for(i=0;i {if((i!=0)&&(i%10==0)) {printf("\\n\\nRemember NO. which needed del. pass any key to contiune . . ."); getch(); puts("\\n\\n");} printf_one(i); } puts___(); do {printf("\\n\\n输入删除学号! NO.:"); scanf("%s",s.num); for(i=0;i {k=i; s=stu[i];} if(k==-1) printf("\\n\\n不存在! 重新输入"); } while(k==-1); puts("\\n"); printf_face(); printf_one(k); printf("\\n是否确定?\\n\1).是 2).否且删除其他 3).保存全部返回 [ ]\\b\\b"); scanf("%d",&c); if(c==1) {stu[k].ave=0; printf("\\n\\n ^-^ ★成功★ ^-^.\\n\\n是否重输?\\n\1).是 2).返回菜单\[ ]\\b\\b"); scanf("%d",&w0); } if(c==3) w0=0; if(w0!=1&&c!=3) save(n);} while(w0==1); teacher(); } /****************浏览(全部)模块****************/ browse() {int i,j,n; n=load(); system("cls"); puts___(); printf_face(); for(i=0;i {printf("\\n\\nPass any key to contiune . . ."); getch(); puts("\\n\\n");} printf_one(i);} puts___(); printf("\There are %d record.\\n",n); printf("\\nPass any key to back . . ."); getch(); teacher();} /****************查找模块****************/ int h(char k) {return(k%5);} int linkinsert(HNode *t[],char k) {int i; HNode *p; i=h(k); if(t[i]==NULL) {p=(HNode*)malloc(sizeof(HNode)); p->key=k;p->link=NULL; t[i]=p;printf("\\n inserted %lu\\n ",k); return(1);} else {p=t[i]; while(p!=NULL) if(p->key==k) {printf("\\n retrieval %lu\\n ",k);return(0);} else if(p->link!=NULL) p=p->link; else{p->link=(HNode*)malloc(sizeof(HNode)); p=p->link;p->key=k;p->link=NULL; printf("\\n inserted %lu\\n ",k);return(1); getch();}}} HNode *linksearch(HNode *t[],char k) {HNode *p; int i; i=h(k); if(t[i]==NULL)return(NULL); p=t[i]; while(p!=NULL) if(p->key==k) {printf("%lu\\n",p->key); return(p);} else p=p->link; return(NULL);} search() {int i,n,k,w1=1,w2,w3,w4; struct student s; n=load(); do {do {k=-1; printf("\\n\\n输入查找学号! NO.:"); scanf("%s",s.num); printf_face(); for(i=0;i {k=i; printf_one(k);break;} if(k==-1) {printf("\\n\\n不存在! 请重新输入"); printf("\\n\\n是否确定?\\n\1).是 2).否且返回 [ ]\\b\\b"); scanf("%d",&w1);}} while(k==-1&&w1==1); w4=0;w3=0; if(k!=-1) {printf("\\n\\n请选择:\\n\1).查找另一个数据 2).修改 3).删除 4).返回目录 [ ]\\b\\b"); scanf("%d",&w2); switch(w2) {case 2:w3=modify_data(k,n);break; case 3:{printf("\\n是否确定?\\n\1).是 2).否且返回 [ ]\\b\\b"); scanf("%d",&w4); if(w4==1) stu[k].ave=0; break; } } if(w3==1||w4==1) {save(n); printf("\\n\\n ^-^ ★成功★ ^-^."); printf("\\n\\n请选择:\\n\1).查找另一个数据 2).返回 [ ]\\b\\b"); scanf("%d",&w2);} } } while(w2==1); teacher(); } /****************插入模块****************/ insert() {int i,j,n,c; struct student s; n=load(); puts("\\n输入一个数据.\\n"); do {input(n); printf_face(); printf_one(n); printf("\\n\\n是否确定?\\n\\n\1).是\2).取消重输\3).不保存返回 [ ]\\b\\b"); scanf("%d",&c); if(c==1) {for(j=0;j if(stu[i].ave>stu[i-1].ave) {s=stu[i-1];stu[i-1]=stu[i];stu[i]=s;} save(n+1); printf_back(); } else if(c!=2) teacher(); } while(c==2); } /****************排序模块(按平均成绩)****************/ void sift(RecNode r[],int t,int w) {int i,j; RecNode x; i=t; x=r[i]; j=2*i+1; while(j<=w) {if((j j++; if(x.key>r[j].key) {r[i]=r[j];i=j;j=2*j+1;} else break;} r[i]=x;} void heapsort(RecNode r[],int n) {int i; RecNode x; for(i=n/2-1;i>=0;i--) sift(r,i,n-1); for(i=n-1;i>0;i--) {x=r[0];r[0]=r[i]; r[i]=x; sift(r,0,i-1);} } /****************排序模块(按平均成绩)****************/ order() {int i,j,k,n; struct student s; n=load(); for(i=0;i for(j=i+1;j } save(n); puts("\\n\\n"); printf_back();} /*****************统计模块*******************/ void fenduantongji() {int k,u,n,i,j,w1=1,w2; int a,b,c,d,e; a=0;b=0;c=0;d=0;e=0; printf(" 1.英语 2.数学 3.C语言 4.管理学 5.信检 6.体育 7.近代史 8.线性代数 9.平均分\\n"); printf("请输入要统计的科目:"); scanf("%d",&u); if(u<=8) {n=u; for(i=0;i {if(k>=90) a=a+1; else if(k<90&&k>=80) b=b+1; else if(k<80&&k>=70) c=c+1; else if(k<70&&k>=60) d=d+1; else if(k<60) e=e+1; }}} else {n=u; for(i=0;i {if(k>=90) a=a+1; else if(k<90&&k>=80) b=b+1; else if(k<80&&k>=70) c=c+1; else if(k<70&&k>=60) d=d+1; else if(k<60) e=e+1;}}} printf("学生成绩在 90~100 间有:\\n %d\\n",a); printf("学生成绩在 80~ 间有 :\\n %d\\n",b); printf("学生成绩在 70~79 间有 :\\n %d\\n",c); printf("学生成绩在 60~69 间有 :\\n %d\\n",d); printf("低于60的有:\\n %d\\n",e); printf("\\n是否继续?\\n\\n\1).是 2).否 [ ]\\b\\b"); scanf("%d",&w1); if(w1==1) fenduantongji(w1); else teacher();} /****************教师界面****************/ teacher() {int n,w1; do {system("cls"); puts("\\*********************MENU*********************\\n\\n"); puts("\\\\1.输入新数据"); puts("\\\\2.添加数据"); puts("\\\\3.修改数据"); puts("\\\\4.删除数据"); puts("\\\\5.浏览全部"); puts("\\\\6.学号查询"); puts("\\\\7.插入数据"); puts("\\\\8.按平均分排序"); puts("\\\\9.分段统计"); puts("\\\\10.退出"); puts("\\\\11.返回主界面"); puts("\\n\\n\\**********************************************\\n"); printf("请选择序号:(1-11): [ ]\\b\\b"); scanf("%d",&n); if(n<1||n>11) {w1=1;getchar();} else w1=0; } while(w1==1); /*选择功能*/ switch(n) {case 1:enter();break; /*输入模块*/ case 2:add();break; /*追加模块*/ case 3:modify();break; /*修改模块*/ case 4:del();break; /*删除模块*/ case 5:browse();break; /*浏览模块*/ case 6:search();break; /*查找模块*/ case 7:insert();break; /*插入模块*/ case 8:order();break; /*排序模块*/ case 9:fenduantongji();break;/*统计模块*/ case 10:exit(0); /*退出*/ case 11:menu(); /*返回主界面*/ getch();} } /****************密码函数****************/ distin() {int f; char mima[]={"gdut09"}; char mi[6]; printf("输入密码:"); scanf("%s",mi); if(strcmp(mima,mi)==0) {teacher();} else {printf("密码错误!\\n"); printf("\\n\\n请选择:\\n\1).目录 2).退出 [ ]\\b\\b"); scanf("%d",&f); switch(f) {case 1: menu(); break; case 2: exit(0); break;} } } /****************学生界面****************/ st() {int i,n,k,w1=1,w2,w3,w4; struct student s; n=load(); do {system("cls"); do {k=-1; printf("\\n\\n请输入学号 NO.:"); scanf("%s",s.num); printf_face(); for(i=0;i {k=i; printf_one(k);break; if(k==-1) {printf("\\n\\n不存在! 重输入"); printf("\\n\\n是否重新输入?\\n\1).是 [ ]\\b\\b"); scanf("%d",&w1); } } while(k==-1&&w1==1); w4=0;w3=0; if(k!=-1) {printf("\\n\\n请选择:\\n\1).返回目录 [ ]\\b\\b"); scanf("%d",&w2); switch(w2) {case 1:menu();break; case 3:{printf("\\n是否确定?\\n\1).否且返回 [ ]\\b\\b"); scanf("%d",&w4); if(w4==1) stu[k].ave=0; break;} } if(w3==1||w4==1) {save(n); printf("\\n\\n ^-^ ★成功★ ^-^."); printf("\\n\\n请选择:\\n\1).返回 [ ]\\b\\b"); scanf("%d",&w2);} } } while(w2==1); menu();} /****************主界面****************/ menu() int c; {system("cls"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ "); printf("\\n ● ● ■■■■■ ▲ ▲ ■■■■■ "); printf("\\n 〓 〓 ■ 〓 〓 ■ ■"); printf("\\n ■ ■ ■ ■ ■ ■ ■ "); printf("\\n ■■■■■ ■■■■ ■ ■ ■ ■ "); printf("\\n ■ ■ ■ ■ ■ ■ ■ "); printf("\\n ■ ■ ■ ■ ■ ■ ■ "); printf("\\n ■ ■ ■■■■■ ■■■■ ■■■■ ■■■■■ "); printf("\\n ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ "); getch(); system("cls"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n"); printf("\\n\\\ 欢迎使用学生成绩管理系统\\n\\n"); puts("\\★★★★★★★★★★★目录★★★★★★★★★★★\\n\\n"); printf("\\ 1.教师登陆\\n"); printf("\\ 2.学生登录\\n"); printf("\\ 3.退出"); puts("\\n\\n\\★★★★★★★★★★★★★★★★★★★★★★★★\\n"); scanf("%d",&c); switch(c) { case 1: distin(); break; case 2: st(); break; case 3: exit(0); break;} } } /*****************主函数****************/ main() {menu(); getch(); } 运行该程序界面: 3.教师界面下载本文