图7 查询子菜单界面
按书名查询函数如下:
void search_by_name() { FILE *fp; int i;
BOOK b[10]; char s2[20]; system(\
printf(\按书名查询***********************\\n\\n\ fp=fopen(\if(fp==NULL)
{printf(\抱歉,不能打开此文件!\\n\ for(i=0;i fread(&b[i],sizeof(BOOK),1,fp); printf(\请输入要查询的书名: \scanf(\for(i=0;i {if(strcmp(s2,b[i].bookName)==0) {printf(\书名\\t编号\\t价格\\t作者\\t借出状态\\n\ printf(\ b[i].price,b[i].author,b[i].state); break;} i++; if(i==M+g1) printf(\抱歉,找不到此书!\ } fclose(fp); printf(\请按任意键继续!\getch(); } 运行结果如图8: 图8 按书名查询界面 按作者名查询函数如下: void search_by_writer() { int i; FILE *fp; BOOK b[10]; char s3[20]; system(\ printf(\按作者查询***********************\\n\\n\fp=fopen(\if(fp==NULL) {printf(\抱歉,不能打开此文件!\\n\for(i=0;i fread(&b[i],sizeof(BOOK),1,fp); printf(\请输入要查询的书的作者: \scanf(\for(i=0;i {if(strcmp(s3,b[i].author)==0) {printf(\书名\\t编号\\t价格\\t作者\\t借出状态\\n\ printf(\ b[i].price,b[i].author,b[i].state); break;} i++; if(i==M+g1) printf(\抱歉,找不到此书!\ fclose(fp); printf(\请按任意键继续!\ getch(); } 运行结果如图9: 图9 按作者查询界面 (6) 数据删除模块:采用按图书编号查询并删除图书,将文件中的图书信息读 到结构体数组b中,将要删除的图书编号输入到数组bookcode中,再按编号查询(参考查询模块),找到图书的信息在地b[i]中后,用for循环语句将b[i+1]的值赋给b[i],从而达到删除该书的目的,最后将数组b中的信息写入文件中。 删除函数如下: void del() { FILE *fp; char bookcode[20]; /*按登图书编号查询*/ int i,k; BOOK b[10]; system(\清屏*/ printf(\图书信息删除******************\\n\\n\ fp=fopen(\ if(fp==NULL) { printf(\抱歉,不能打开此文件!\\n\ else for(i=0;i fread(&b[i],sizeof(BOOK),1,fp); fclose(fp); printf(\请输入你想删除的图书编号:\ scanf(\ for(i=0;i { if(strcmp(bookcode,b[i].bookCode)==0) {printf(\你要删除的图书如下:\\n\ printf(\书名\\t编号\\t价格\\t作者\\t借出状态\\n\ printf(\ b[i].bookCode,b[i].price,b[i].author,b[i].state); break;} } if(i==M+g1) printf(\抱歉,没有你想要删除的书籍!\\n\ else {for(k=i;k fp=fopen(\ if(fp==NULL){printf(\抱歉,不能打开此文件!\\n\ for(i=0;i fwrite(&b[i],sizeof(BOOK),1,fp); fclose(fp); printf(\删除成功!\\n\ g1--; /*计数一次*/ } printf(\请按任意键继续!\ getch(); } 运行结果如图10: 图10图书信息删除界面 (7) 数据修改模块:办理借书手续时,先要在文件中查找要借的书的存在状态, 若可以出借,则允许借出, 把借书人姓名、性别和学号添加到该书的记录中,并把存在状态改为已经借出;否则,显示 “该书已借出!” 。办理还书手续时,在文件中查找该书的记录,然后把存在状态改为 允许出借,把借书人姓名、性别和学号删除。具体修改操作可以参考删除操作。 修改菜单函数如下: void revise() { int b; system(\ printf(\ printf(\图书信息修改*****************\\n\\n\ printf(\还书\\n\\n\ printf(\借书\\n\\n\ printf(\返回\\n\\n\ printf(\ printf(\请选择:\ scanf(\switch(b) { case 1:returner();break; case 2:borrower();break; case 0:return; } } 运行结果如:图11 图11图书信息修改界面 还书函数如下: void returner() { FILE *fp; int i; char bookcode[20]; BOOK c[10]; system(\清屏*/ printf(\还书***********************\\n\\n\ fp=fopen(\if(fp==NULL) {printf(\抱歉,不能打开此文件!\\n\ else for(i=0;i fread(&c[i],sizeof(BOOK),1,fp); fclose(fp); printf(\请输入你所还图书编号: \