printf(\│ │\\n\printf(\│ 5. 修改记录 6. 删除记录 │\\n\printf(\│ │\\n\printf(\│ 0. 退出程序 │\\n\printf(\└─────────────—┘\\n\printf(\请您选择(0-6):\c=getchar();
}while(c<'0'||c>'6');
return (c-'0'); 字符减去’0‘得到的是数字整型 }
void add() 成绩的录入与添加函数 {
FILE *fp; int i=0,n=0;
char sign='y'; 首先定义sing='y' system(\清屏函数 系统中调用 while(sign!='n'&&sign!='N') 其实只有当输入N或n时才跳出循环 {
printf(\学生纪录添加----\\n\printf(\学号:\\n\scanf(\printf(\
scanf(\printf(\年龄:\\n\scanf(\printf(\英语:\\n\scanf(\printf(\专业:\\n\scanf(\printf(\是否继续添加?(yn)\
13
scanf(\i++; n=n+1;
system( \
}system(\等待命令
if((fp=fopen(filename,\以2进制形式进行文件尾追加 {
printf(\system(\
return; 如果文件出现错误 就返回 }
for(i=0;i if(fwrite(&per[i],sizeof(person),1,fp)!=1) 以2进制形式写入文件中一次写入一个数组 printf(\fclose(fp); 关闭文件 system(\} ^^^^^^^^^^^^^^^^^ void scan() 显示记录 进行全面信息浏览 { void amend(); 声明修改函数 char sign='y'; FILE *fp; int i=0,n; system(\ if((fp=fopen(filename,\ 以2进制方式读取文件信息 { 14 printf(\system(\return; } while(!feof(fp)) 一直读取知道文件尾结束 { fread(&per[i],sizeof(person),1,fp); 以2进制方式将文件信息读到数组内存中一次读取一个 i++; } fclose(fp); printf(\printf(\学号 年龄 英语 专业\\n\printf(\for(n=0;n \\t%s \\t\\t%d \\t%d\\n\ printf(\system(\system(\ printf(\是否需要修改?(yn)\scanf(\ if(sign!='n'&&sign!='N') 选择是否在浏览后进行修改 amend(); system(\} 数据查询 void query() 学生信息的不同方式查询 { FILE *fp; 15 \\t%d int i=0,n=0; int m; system(\ printf(\请选择查询方式:\\n\printf(\┌──────┐\\n\printf(\│1--模糊查询 │\\n\printf(\└──────┘\\n\printf(\请输入你要查询的方式\\n\scanf(\ while(m!=1&&m!=2&&m!=3&&m!=4) { printf(\输入错误请重新查询\\n\scanf(\} if((fp=fopen(filename,\ 以2进制方式读取文件信息 { printf(\system(\return; } while(!feof(fp)) { fread(&per[i],sizeof(person),1,fp); 读到数组内存中一次读取一个 i++;n=n+1; } if(m==1) { char s[3]; 16 以2进制方式将文件信息模糊查询 定义输入的文字所占的字节 一个汉字占2个字节 外加一结尾符此处小心溢出 int i=0; system(\ printf(\请输入想查询的姓:\scanf(\ for(i=0;i if(per[i].name[0]==s[0]&&per[i].name[1]==s[1]) 所输入的前俩个字符是否相同 { printf(\学号: %s\\n\printf(\printf(\年龄: %d\\n\printf(\英语: %d\\n\printf(\计算机: %d\\n\printf(\} } } if(m==2) { char s[20]; int i=0; printf(\请输入想查询的\scanf(\ while(strcmp(per[i].name,s)!=0&&i 17 比较per[i].name与查询 比较per[i].name与所输入是