一个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;
}










