不知道为什么程序用不了 找不到那里出错了 ,求解
#include<stdio.h>#include <stdlib.h>
#include<conio.h> /*getch函数使用的头文件*/
#include<string.h> /*strcmp函数使用的头文件*/
#define LEN_BOOK sizeof(struct book)
#define LEN_READER sizeof(struct reader)
#define BOOK_NUM 200
#define book_data book[i].num,book[i].num,book[i].name,book[i].author,book[i].press,book[i].amount
struct book
{
int num; /*图书编码*/
char name[10]; /*图书名称*/
char author[10]; /*图书作者*/
char press[20]; /*图书出版社*/
int amount; /*图书存货量*/
};
struct book book[BOOK_NUM];
/*函数声明*/
int login(); /*用户登录函数*/
void showmainmenu(); /*显示主菜单函数*/
void managebook(); /*图书馆管理子系统*/
void showbook(); /*显示图书信息*/
void addbook(); /*增加图书信息*/
int searchbook(); /*查找图书信息*/
void deletebook(); /*删除图书信息*/
void modifybook(); /*修改图书信息*/
int readbookfile(char *pcMode); /*从图书文件中读取图书记录*/
void savebookfile(int iBookId); /*将记录号为 的图书存入文件*/
int login() /*用户登录函数*/
{ char username[10]; /*用户名*/
char password[20]; /*密码*/
int n=1; /*登录次数*/
int ok=0; /*登录成功标志*/
while(n<=3)
{
system("cls");
printf("\t\t------------------用户登录------------------\n\n\n");
printf("\t\t\t\t用户名:"); scanf("%s",username);
printf("\t\t\t\t密 码:"); scanf("%s",password);
if(strcmp(username,"1")==0 && strcmp(password,"1")==0)
{ ok=1;
break; }
else
{ printf("\n用户名或密码不正确,你还有%d次机会,请按任意键重新登录!\n",3-n);
n++;
system("pause"); }
}
return ok;
}
void init() /*系统初始化函数*/
{
FILE *fp1;
char ch;
int n=0;
printf("\n初始化操作将删除原来的所有数据,继续吗?(Y/N)\n");
scanf(" %c",&ch);
if(ch!='Y' && ch!='y')
return;
else
{
if((fp1=fopen("book.dat","wb"))==NULL)/*二进制写方式打开文件*/
{ printf("\n文件打开失败,请按任意键返回!\n");
system("pause");/*getch();*/
return ; }
fclose(fp1);
}
printf("初始化完毕,请按任意键返回\n");
system("pause"); /*等待按键,返回主菜单*/
return;
}
void main()
{
if(login())
{init();
managebook();
}
}
void managebook() /*图书馆管理系统*/
{
int choice;
while(1)
{
system("cls");
printf("\t\t*************图书馆管理系统****************\n");
printf("\t\t* 主菜单 *\n");
printf("\t\t* 1.显示图书信息 *\n");
printf("\t\t* 2.增加图书信息 *\n");
printf("\t\t* 3.图书信息查询 *\n");
printf("\t\t* 4.图书信息删除 *\n");
printf("\t\t* 5.图书信息修改 *\n");
printf("\t\t* 6.初 始 化 *\n");
printf("\t\t* 0.退 出 *\n");
printf("\t\t*********************************************\n");
printf("\t\t请选择 0-5\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
showbook(); /*显示图书信息*/
break;
case 2:
addbook(); /*增加图书信息*/
break;
case 3:
searchbook(); /*查找图书信息*/
break;
case 4:
deletebook(); /*删除图书信息*/
break;
case 5:
modifybook(); /*修改图书信息*/
break;
case 6:
init();
break;
case 0:
return;
default:
printf("请输入0-6的数字");
managebook();
return;
}
}
}
void showbook() /*显示图书信息*/
{
int i,flag;
system("cls");
flag=readbookfile("rb");
if(flag==-1)
printf("文件打开失败!请先增加图书信息");
else if(flag==0)
printf("文件中没有图书信息");
else
{
printf("\t|-------------------------------------------------|");
printf("\t编号\t书名\t作者\t出版社\t库存\n");
for(i=0;i<flag;i++)
printf("\t%d\t%s\t%s\t%s\t%d\n",book[i].num,book[i].num,book[i].name,book[i].author,book[i].press,book[i].amount);
printf("\t|-------------------------------------------------|");
}
}
void addbook() /*增加图书信息*/
{
FILE *pfbook;
int flag,iFlagExist,i;
char ch;
system("cls");
flag=readbookfile("ab+");
if(flag==-1)
{
printf("文件打开失败!\n");
return;
}
else if(flag==0)
printf("没有图书记录!\n");
else
showbook();
//以下代码为循环录入图书信息
printf("请选择是否输入信息(y/n):");
getchar();
ch=getchar();
if(ch=='n'||ch=='N')
return;
pfbook=fopen("book.dat","ab+");
if(pfbook==NULL)
{
printf("文件打开失败!\n");
return;
}
while(ch=='y'||ch=='Y')
{
printf("请输入图书编号:");
do{
iFlagExist=0;
scanf("%d",&book[flag].num);
getchar();
for(i=0;i<flag;i++)
{
if(book[i].num==book[flag].num)
{
iFlagExist=1;
printf("该图书编号已存在,请重新输入:");
break;
}
}
}while(iFlagExist==1);
/*新增图书的基本信息*/
printf("请输入图书名称:");
gets(book[flag].name);
printf("请输入图书作者:");
gets(book[flag].author);
printf("请输入图书出版社:");
gets(book[flag].press);
printf("请输入图书库存量:");
scanf("%d",&book[flag].amount);
getchar();
/*将新增的图书信息写入文件中*/
if(fwrite(&book[flag],LEN_BOOK,1,pfbook)!=1)
{
printf("无法保存该信息!\n");
return;
}
else
{ printf("*d号图书信息已保存\n",book[flag].num);
flag++;
}
printf("继续输入信息吗(y/n)");
ch=getchar();
getchar();
}
fclose(pfbook);
printf("添加图书执行完毕!\n");
}
int searchbook() /*查找图书信息*/
{
int iBookNum,flag,iBookId,i;
system("cls");
flag=readbookfile("rb");
if(flag==-1)
{
printf("文件打开失败!\n");
printf("I按任意键返回子菜单|");
getch();
return -2; //文件打开失败,返回-2
}
else if(flag==0)
{
printf("没有图书记录!\n");
printf("|按任意键返回子菜单|");
getch();
return -3;
}
/*以下进入查找程序*/
printf("请输入图书编号:");
scanf("%d",&iBookNum);
getchar();
for(i=0;i<flag;i++)
{
if(iBookNum==book[i].num)
{
iBookId=i;/*找到记录,返回记录号*/
printf("*d号图书信息如下:\n",iBookNum);
printf("\t|-------------------------------------------------|"); /////////////////
printf("\t编号\t书名\t作者\t出版社\t库存\n");
printf("\t\t%d\t%s\t%s\t%s\t%d\n",book[i].num,book[i].num,book[i].name,book[i].author,book[i].press,book[i].amount);
printf("\t|-------------------------------------------------|");
break;
}
}
if(i==flag)/*遍历循环,没有找到记录,提示用户*/
{
printf("找不到%d号图书信息!\n",iBookNum);
iBookId=-1; /*找不到记录,返回-1*/
}
return iBookId;
}
void deletebook() /*删除图书信息*/
{
FILE *pfBook;
int iBookId,flag,i;/*文件指件*/
char cFlag; /*字符型变量,用于选择*/
system("cls");
iBookId=searchbook();
if(iBookId==-1)
return;
flag=readbookfile("rb");
printf("已找到该图书,是否删除?(y/n)");
cFlag=getchar();
getchar();
if(cFlag=='n'||cFlag=='N')
return;
else if(cFlag=='y'||cFlag=='Y')
{
for(i=iBookId;i<flag-1;i++)
book[i]=book[i+1];/*数组依次前移*/
flag--;
}
pfBook=fopen("book.dat","wb");
if(pfBook!=NULL)
{
for(i=0;i<flag;i++)/*将修改过的图书信息写人文件*/
{
if(fwrite(&book[i],LEN_BOOK,1,pfBook)!=1)
{
printf("无法保存该信息!\n");
return;
}
}
fclose(pfBook);
printf("%d号图书信息已删除!\n",book[iBookId].num);
}
}
int readbookfile(char *pcMode) /*从图书文件中读取图书记录*/
{
int flag=0;
FILE *pfBook;/*文件指针*/
pfBook=fopen("book.txt",pcMode);
if(pfBook==NULL)
return -1;
while(!feof(pfBook))
{
if(fread(&book[flag],LEN_BOOK,1,pfBook))
flag++;
}
fclose(pfBook);
return flag;
}
void savebookfile(int iBookId) /*将记录号为 的图书存入文件*/
{
FILE *pfBook;
pfBook=fopen("book.dat","rb+");
if(pfBook!=NULL)
{
fseek(pfBook,LEN_BOOK *iBookId,SEEK_SET);
if(fwrite(&book[iBookId],LEN_BOOK,1,pfBook)!=1)
printf("无法保存该信息!\n");
}
fclose(pfBook);
}
void modifybook() /*修改图书信息*/
{int iBookId,iBookRecord,iFlagExist,iItem,num,i;
system("cls");
iBookId=searchbook(); /*调用查找图书函数获得图书记录*/
if(iBookId==-1) /*未找到该序号的图书,直接返回*/
return;
/*找到该序号的图书,可以进行修改操作*/
iBookRecord=readbookfile("rb");
printf("\t\t*******************修改******************\n");
printf("\t\t* 子菜单 *\n");
printf("\t\t* 1.编码 *\n");
printf("\t\t* 2.书名 *\n");
printf("\t\t* 3.作者 *\n");
printf("\t\t* 4.出版社 *\n");
printf("\t\t* 5.库存 *\n");
printf("请输入想输入的信息\n");
scanf("%d",&iItem);
getchar();
switch(iItem)
{ case 1:
printf("请输入图书编号:");
do{
iFlagExist=0;
scanf("%d",&num);
getchar();
for(i=0;i<iBookRecord;i++)
{
if(num==book[i].num &&i!=iBookId)
{ iFlagExist=1;
printf("错误,该图书编号已存在,请重新输入:");
break;
}
}
} while(iFlagExist==1);
book[iBookId].num=num;
break;
case 2:
printf("请输入图书名称:");
gets(book[iBookId].name);
break;
case 3:
gets(book[iBookId].author);
break;
printf("请输入图书作者:");
case 4:
printf("请输入图书出版社:");
gets(book[iBookId].press);
break;
case 5:
printf("请输入图书库存量:");
scanf("%d",&book[iBookId].amount);
getchar();
break;
}
/*调用SaveBookFile函数将修改记录存人文件*/
savebookfile(iBookId);
printf("图书信息修改成功!\n");
}