一个C语言图书管理系统的一部分代码
为什么运行程序,在添加多条的信息时候,删除其中一条的时候,在去查看的时候,会显示代码。是什么问题?程序代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #define error 0 #define ok 1 #define N 100 #define M 100 struct b { char bid[10]; char bname[10]; }; void badd() { system("cls"); struct b book, books[N]; FILE *fp; int count=0,i=0; printf("\n\n\t ********************呵呵图书管理系统******************* \n\n"); printf("\t\t\t 请您输入要增加的书编号:"); scanf("%s",book.bid); printf("\n\t\t\t 请您输入要增加的书名:"); scanf("%s",book.bname); if((fp=fopen("b.txt","r"))!=NULL) { while(!feof(fp)) { fread(&books[count],sizeof(struct b),1,fp); count++; } fclose(fp); for(i=0;i<count-1;i++) { if(strcmp(books[i].bid,book.bid)==0) { printf("\n\t\t\t 对不起,您添加的用户账号已经存在,不能添加。\n"); break; } } if(i>=count-1) { fp=fopen("b.txt","a"); fwrite(&book,sizeof(struct b),1,fp); fclose(fp); printf("\n\t\t\t 您的信息添加成功。\n"); } } else { fp=fopen("b.txt","w"); fwrite(&book,sizeof(struct b),1,fp); fclose(fp); printf("\n\t\t\t 您的信息添加成功。\n"); } system("pause"); } void bdelete() { system("cls"); FILE *fp; struct b books[N]; int count=0,mark=0,i=0,j=0,flag=0; char id[10]; int num[N]; printf("\n\n\t ********************呵呵图书管理系统******************* \n\n"); if((fp=fopen("b.txt","r"))!=NULL) { while(!feof(fp)) { fread(&books[count],sizeof(struct b),1,fp); count++; } fclose(fp); printf("\n\n\t\t 请输入您要删除的图书编号:"); scanf("%s",id); printf("\n\t\t 图书编号 书名"); for(i=0;i<count-1;i++) { if(strcmp(books[i].bid,id)==0) { printf("\n\t\t %-12s %-12s",books[i].bid,books[i].bname); num[mark]=i; mark++; } } if(mark<=0) { printf("\n\n\t\t 对不起,没有找到您要删除的数据。\n"); } else { flag=MessageBox(NULL,"数据一旦删除,将不能恢复,您确定要删除此数据吗?","警告",MB_YESNO|MB_ICONWARNING); if(flag==6) { fp=fopen("b.txt","w"); for(i=0;i<count-1;i++) { for(j=0;j<mark;j++) { if(i==num[j]) break; } } if(j>=mark) { fwrite(&books[i],sizeof(struct b),1,fp); } fclose(fp); printf("\n\n\t 数据删除成功。\n"); } } } else { printf("\n\n\t 账号数据不存在。\n\n\t"); } system("pause"); } void bupdata() { system("cls"); FILE *fp; int count=0,i=0,flag=0; char id[10]; struct b books[N]; printf("\n\n\t ********************呵呵图书管理系统******************* \n\n"); if((fp=fopen("b.txt","r"))!=NULL) { while(!feof(fp)) { fread(&books[count],sizeof(struct b),1,fp); count++; } fclose(fp); printf("\t 请您输入要更改的图书编号:"); scanf("%s",id); for(i=0;i<count-1;i++) { if(strcmp(books[i].bid,id)==0) { printf("\n\t 您要更改的信息如下:"); printf("\t\t 图书编号 书名 "); printf("\n\t\t %-12s %-12s",books[i].bid,books[i].bname); printf("\n\t 请输入更改后的图书编号:"); scanf("%s",books[i].bid); printf("\n\t 请您输入更改后的图书名:"); scanf("%s",books[i].bname ); break; } } if(i>=count-1) { printf("\n\t 对不起,没有您要更改的信息。\n"); } else { flag=MessageBox(NULL,"数据一旦更改,将不能恢复,您确定要更改此数据吗?","警告",MB_YESNO|MB_ICONWARNING); if(flag==6) { fp=fopen("b.txt","w"); for(i=0;i<count-1;i++) { fwrite(&books[i],sizeof(struct b),1,fp); } fclose(fp); printf("\n\t 图书信息修改成功。\n"); } } } else { printf("\n\t 系统中暂无信息可以更改。"); } system("pause"); } void blocate() { system("cls"); FILE *fp; int count=0,i=0; char id[10]; struct b books[N]; printf("\n\n\t ********************呵呵图书管理系统******************* \n\n"); if((fp=fopen("b.txt","r"))!=NULL) { while(!feof(fp)) { fread(&books[count],sizeof(struct b),1,fp); count++; } fclose(fp); printf("\t 请输入您需要查询的图书编号:"); scanf("%s",id); for(i=0;i<count-1;i++) { if(strcmp(books[i].bid,id)==0) { printf("\n\n\t 您查询的图书信息为:"); printf(" 图书编号 书名"); printf("\n\t\t\t\t %-10s %-10s \n",books[i].bid,books[i].bname); break; } } if(i>=count-1) { printf("\n\n\t 对不起,没有查询到您需要查询的信息。\n"); } } else { printf("\n\n\t 对不起,没有信息可以查询。\n"); } system("pause"); } void prt(struct b books[],int count) { int i=0; printf("\n\t\t **********共有%d条记录**********",count); printf("\n\n\t\t 图书编号 书名"); for(i=0;i<count;i++) { printf("\n\t\t %-12s %-12s \n",books[i].bid,books[i].bname); } } void bview() { system("cls"); FILE *fp; int count=0; /*int i=0; */ struct b books[N]; printf("\n\n\t ********************呵呵图书管理系统******************* \n\n"); if((fp=fopen("b.txt","rb"))!=NULL) { while(!feof(fp)) { fread(&books[count],sizeof(struct b),1,fp); count++; } fclose(fp); prt( books, count-1); } else { printf("\n\t\t 系统暂无信息。\n"); } printf("\n"); system("pause"); } void book() { system("cls"); int chioce; printf("\n\n\t ********************呵呵图书管理系统******************* "); printf("\n\n\t ********************图书管理********************** \n\n"); printf("\t\t\t 1.增加图书信息 \n\n"); printf("\t\t\t 2.删除图书信息 \n\n"); printf("\t\t\t 3.更改图书信息 \n\n"); printf("\t\t\t 4.查询图书信息 \n\n"); printf("\t\t\t 5.显示图书信息 \n\n"); printf("\t\t\t 0. 退 出 \n\n"); printf("\t请选择您需要的操作:"); scanf("%d",&chioce); switch(chioce) { case 1: badd();book();break; case 2: bdelete(); book();break; case 3: bupdata(); book();break; case 4: blocate(); book();break; case 5: bview(); book();break; case 0: break; default: printf("您的操作错误。"); break; } } void menu() { system("cls"); int chioce; printf("\n\n\t ********************呵呵图书管理系统******************* \n\n"); printf("\t\t\t 1.图书管理\n\n"); printf("\t\t\t 2.读者管理\n\n"); printf("\t\t\t 0.退出\n\n"); printf("\t请选择您需要的操作:"); scanf("%d",&chioce); switch(chioce) { case 1: book();break; case 2: read();break; case 0: break; default : printf("您的操作错误。");break; } } void login() { system("cls"); char name[10],pwd[10]; int a,b; static int count=0; printf("\n\n\t ********************欢迎登陆图书管理系统****************** \n\n"); printf("\t\t\t 请输入您的用户名:"); scanf("%s",&name); printf("\n"); printf("\t\t\t 请输入您的用户密码:"); scanf("%s",&pwd); printf("\n"); a=strcmp(name,"123"); b=strcmp(pwd,"123"); if(a==0&&b==0) menu(); else { count++; if(count>=3) { printf("\t\t对不起,您不能进入该系统。\n"); exit(0); } else { printf("\t\t对不起,您输入的用户名或密码错误,请您重新输入。\n"); printf("\t\t您还有%d次输入的机会。\n",3-count); system("pause"); login(); } } } int main() { login(); menu(); return ok; }