}while(right==1);
switch(chose) { case 1:add(); break; //添加模块 case 2:modify(); break; //修改模块 case 3:browse(); break; //浏览模块 case 4:quiry(); break; //查询模块 case 5:stastic(); break; //统计模块 case 6:Delete(); break; //删除模块 case 7:exit(0); }
}
5.3 添加模块
首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件StuInfo.txt。输入格式要求:性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。此外,如果以读写的方式打开,还要判断记录数num //退出 - 6 - void add() { int num; //表示记录数 int i; int age; //临时变量,用于验证输入的性别是否满足条件 char sno[20]; //临时变量,用于验证输入的学号是否满足条件 char sex[20]; //临时变量,用于验证输入的性别是否满足条件 char cno[20]; //临时变量,用于验证输入的班号是否满足条件 int right; FILE*fp; if((fp=fopen(\ //以读写方式打开 { if((fp=fopen(\ //文件不存在就创建文件 { printf(\文件不存在且创建失败,返回!\\n\ menu(); } printf(\请按照提示输入学生信息:\\n\\n\ printf(\姓名:\ scanf(\ do { printf(\性别(男或女):\ scanf(\ if((strcmp(sex,\男\女\ { printf(\输入错误,请输入男或女!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[0].Sex,sex); do { printf(\学号(11位):\ scanf(\ if(strlen(sno)!=11) { printf(\输入错误,学号长度应为11位数!\\n\ right=1; getchar(); } else right=0; - 7 - }while(right==1); strcpy(StuInfo[0].Sno,sno); do { printf(\年龄:\ scanf(\ if(age<=0||age>100) { printf(\年龄应在0-100之间,请重新输入年龄!\\n\ right=1; getchar(); } else right=0; }while(right==1); StuInfo[0].Age=age; do { printf(\班号(6位):\ scanf(\ if(strlen(cno)!=6) { printf(\输入错误,班号长度应为6位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[0].CInfo.Cno,cno); printf(\班名:\ scanf(\ fprintf(fp,\Info[0].CInfo.Cno,StuInfo[0].CInfo.Cname); fclose(fp); printf(\保存成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } //以上的输入是以写的方式输入,下面是以读写的方式输入数据 for(i=0;!feof(fp);i++) { fscanf(fp,\nfo[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } - 8 - num=i; //记录数 if(num==N) { printf(\保存记录数超出结构体数组数的大小,请先修改N的值!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } printf(\请按照提示输入学生信息:\\n\\n\ printf(\姓名:\ scanf(\ do { printf(\性别(男或女):\ scanf(\ if((strcmp(sex,\男\女\ { printf(\输入错误,请输入男或女!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[num].Sex,sex); do { printf(\学号(11位):\ scanf(\ if(strlen(sno)!=11) { printf(\输入错误,学号长度应为11位数!\\n\ right=1; getchar(); } else right=0; for(i=0;i { if(strcmp(sno,StuInfo[i].Sno)==0) { printf(\该学号已经存在,请重新输入!\\n\ right=1; getchar(); } - 9 - } }while(right==1); strcpy(StuInfo[num].Sno,sno); do { printf(\年龄:\ scanf(\ if(age<=0||age>100) { printf(\年龄应在0-100之间,请重新输入年龄!\\n\ right=1; getchar(); } else right=0; }while(right==1); StuInfo[num].Age=age; do { printf(\班号(6位):\ scanf(\ if(strlen(cno)!=6) { printf(\输入错误,班号长度应为6位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[num].CInfo.Cno,cno); printf(\班名:\ scanf(\ //把该记录写到文件末尾 fprintf(fp,\m].Age,StuInfo[num].CInfo.Cno,StuInfo[num].CInfo.Cname); fclose(fp); printf(\保存成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } - 10 -