#define %s
PR
printf(\ %s %s %s %s %s %s %s %s %s \[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) /*保存函数,保存n个记录*/ {FILE *fp; int i;
if((fp=fopen(\ /*以输出打开方式,在此前的记录被覆盖*/ {printf(\不能打开文件\\n\ getch();return NULL; }
for(i=0;i if(stu[i].ave!=0) /*stu[i].ave=0表此记录已删除*/ if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf(\文件输入错误\\n\ fclose(fp); return 0; } /*加载记录或可以计算记录个数的函数*/ int load() /*加载记录或可以计算记录个数的函数*/ {FILE *fp; int i; if((fp=fopen(\ /*以输出打开方式,在此前的记录被覆盖*/ {printf(\不能打开文件\\n\ getch();return NULL; } for(i=0;!feof(fp);i++) 6 fread(&stu[i],sizeof(struct student),1,fp); fclose(fp); return(i-1); /*返回记录个数*/ } void puts___() /*显出---函数*/ {puts(\} /*显示数据结构项目函数*/ void printf_face() /*显示数据结构项目*/ {printf(\ 学号 姓名 英语 数学 C语言 管理学 信检 体育 近代史 线数 平均分\\n\} /*显示一个记录的函数*/ printf_one(int i) /*显示一个记录的函数*/ {int j; printf(\ %-9s\ for(j=0;j<8;j++) printf(\ printf(\ return 0; } teacher(); /****************浏览(全部)模块****************/ browse() /*浏览(全部)模块*/ {int i,n; n=load(); /*加载记录*/ system(\ puts___(); printf_face(); /*调用显示数据结构项目函数*/ for(i=0;i {if((i!=0)&&(i==0)) /*目的是分屏显示*/ {printf(\ . . .\ getch(); 7 puts(\ } printf_one(i); /*调用显示一个记录的函数*/ } puts___(); printf(\ %d record.\\n\ printf(\ . . .\ getch(); /*按任意健*/ teacher(); return 0; } /*一个任务结束时的选择浏览还是返回的函数*/ void printf_back() /*一个任务结束时的选择浏览还是返回*/ {int w; printf(\★成功★ ^-^\\n\\n\ printf(\请选择:\\n\\n\\t1).现在浏览全部\\t2).返回: [ ]\\b\\b\ scanf(\ if(w==1) browse(); else teacher(); } average(int i) /*对第i个记录的分数求平均值*/ {int j; int sum; for(sum=0,j=0;j<8;j++) sum+=stu[i].score[j]; stu[i].ave=sum/8.0; return 0; } /*学号输入函数*/ no_input(int i,int n) /*i表示第i个的学生信息,n表示比较到第n个学生*/ {int j,k,w1; do {w1=0; printf(\学号:\ scanf(\ for(j=0;stu[i].num[j]!='\\0';j++) /*学号输入函数,作了严格规定*/ if(stu[i].num[j]<'0'||stu[i].num[j]>'9') /*判断学号是否为数字*/ 8 {puts(\ w1=1;break; } if(w1!=1) for(k=0;k if(k!=i&&strcmp(stu[k].num,stu[i].num)==0) /*判断学号是否有雷同*/ {puts(\该记录已存在. 请重新输入!\\n\ w1=1;break; } } while(w1==1); return 0; } /*对分数输入*/ score_input(int i) {int j;printf(\1.英语 2.数学 3.C语言 4.管理学 5.信检 6.体育 7.近代史 8.线性代数\\n\ for(j=0;j<8;j++) {printf(\ scanf(\ } return 0; } /*输入一个记录函数*/ input(int i) /*输入一个记录函数*/ { no_input(i,i); /*调用学号输入函数*/ printf(\姓名:\ scanf(\ score_input(i); /*调用分数输入函数*/ average(i); /*调用求平均值函数*/ return 0; } /*修改记录函数*/ modify_data(int i,int n) /*修改数据函数,修改第i个记录*/ {int c,w1; 9 do /*输入选择作个判断*/ {puts(\ 1).学号 2.姓名 3).英语 4).数学\\n 5).C语言 6).管理学 7).信检 8).体育 9).近代史\\n 10).线性代数 11).all score 12).all data 13).cancel and back\ printf(\请选择: [ ]\\b\\b\ scanf(\ if(c>13||c<1) {puts(\选择错误! 重新选择!\ /*判断选择是否错误,若是则重新选择性*/ getchar(); /*当输入是字符时可以防止死循环*/ } } while(c>13||c<1); do {switch(c) /*选择要修改的项目*/ {case 1:no_input(i,n);break; /*调用学号输入函数*/ case 2:printf(\姓名:\ case 3:printf(\英语:\ case 4:printf(\数学:\ case 5:printf(\语言:\ case 6:printf(\管理学:\ case 7:printf(\信检\ case 8:printf(\体育:\ case 9:printf(\近代史:\ case 10:printf(\线性代数:\ case 11:score_input(i);break; /*调用分数输入函数*/ case 12:input(i);break; /*调用输入整条学生记录*/ case 13:teacher(); /*直接返回教师介面*/ } if(c>2&&c<10) average(i); /*调用求平均值函数*/ puts(\ printf_face(); /*调用显示数据结构项目函数*/ printf_one(i); /*修改后的记录让用户确认*/ printf(\是否确定?\\n\\n\\t1).确定 2).重新修改 3).不保存返回 [ ]\\b\\b\ /*是否确定*/ scanf(\ /*选择2则表示这次修改错误要重新修改*/ } while(w1==2); 10