问题描述
- 第一次用c语言写的图书管理系统 出现了问题 劳烦大家帮我看一看 明后天就要交作业了
-
我的问题是 bbook函数里为什么 if(strcmp(u[i].code,id)==0 总不能满足
AddBook函数运行老中断
程序写的有些乱 没规矩请见谅
#include
#include//颜色调用
#include
#include
#include//输出流调用void menuu();//读者菜单
void menua();//管理者菜单
void print( struct Book p);//显示一条图书记录
void printu( struct User p);//显示一条用户记录
void SearchBooks();//两种方式查询图书
void searchb();//书名查询
void searchw();//作者查询
void allbook();//显示全部图书
void SearchUser();////查找用户
void searchcode();//按学号查找
void searchname();//按用户姓名查找
void alluser();//显示全部用户
void lr();//登录or注册页面
int login();//登陆
void regis();//注册
void help();//欢迎界面
void loadb();/*载入图书文件至结构体数组*/
void loadu();/*载入用户文件至结构体数组*/void ModifyUser();//更改用户
void AddUser();//添加用户
void DelUser();//删除用户
void ModifyBook();//修改图书
void AddBook();//添加图书
void DelBook();//删除图书void BorrowReturnBook();///借还书
void bbook();//借书
void rbook();//还书//图书结构体类型名
typedef struct Book
{
int Num;/*图书书号*/
char Name[20];/*图书书名*/
char Writer[20];/*图书作者*/
char Press[20];///出版社/
float Price; /*图书价格*/
int Total; /*图书总数量*/
int Now;/*图书现有量*/
}Book;Book b[100]={0};//图书结构体数组 导出导入文件数据
//用户结构体类型名
typedef struct User{
char code[20]; /*学号*/
char name[10]; /*姓名*/
char sex[5]; /*性别*/
char age[20]; /*年龄*/
char bookname[20]; /*借走的书*/
char password[20]; /*密码*/
}User;User u[100]={""}; //用户结构体数组
char id[20], pass[20];///记录登陆账号
//**********************************************************************************************************************
/*主函数*/
int main()
{
system("color 3e");
loadb();//加载图书用户文件到数组
loadu();
help();//欢迎界面
system("cls");//清屏
lr();
return 0;
}/*载入图书文件至结构体数组*/
void loadb()
{FILE fp;
if((fp=fopen("book","r"))==NULL)
{
printf("n不能打开图书信息库n");
fp=fopen("book","w+");
printf("n初始化图书信息库,初始化之后要重启程序n");
fclose(fp);
}
int i=0;
while(!feof(fp))//feof(fp)检测文件是否结束 没结束返回0
{
fread(&b[i],sizeof(struct Book),1,fp);
i++;
}
fclose(fp);return;
}
/载入用户文件至结构体数组*/
void loadu()
{FILE *fp;
if((fp=fopen("reader","r"))==NULL)
{
printf("n不能打开用户信息库n");
fp=fopen("reader","w+");
printf("n初始化用户信息库,初始化之后要重启程序n");
fclose(fp);
}
int i=0;
while(!feof(fp))//feof(fp)检测文件是否结束 没结束返回0
{
fread(&u[i],sizeof(struct User),1,fp);
i++;
}
fclose(fp);return;
}//显示一条图书记录
void print(Book p)//形参 结构体变量
{
printf("n**************************************************************************n");
printf("书号 书名 作者 出版社 单价(元) 总量 剩余 n");
printf("--------------------------------------------------------------------------n");
printf("%-10d%-10s%-10s%-15s%-16f%-10d%-12dn",p.Num,p.Name,p.Writer,p.Press,p.Price,p.Total,p.Now);
printf("**************************************************************************n");
return;
}
//显示一条用户记录
void printu(User p)//形参 结构体变量
{
printf("n**************************************************************************n");
printf("学号 姓名 性别 年龄 借走的书 密码 n");
printf("--------------------------------------------------------------------------n");
printf("%-10s%-10s%-10s%-10s%-15s%-10sn",p.code,p.name,p.sex,p.age,p.bookname,p.password);
printf("**************************************************************************n");
return;
}//显示全部书籍
void allbook()
{FILE *fp;
Book book1;
fp=fopen("book","r");//以读方式打开文件
fread(&book1,sizeof(Book),1,fp);//从文件中读取一个结构体数据 放入book1
while(!feof(fp))//feof(fp)检测文件是否结束 没结束返回0
{
print(book1);
fread(&book1,sizeof(Book),1,fp);
}
fclose(fp);
printf("按任意键继续...");
char ch=getch();system("cls");
return;
}
//显示全部用户
void alluser()
{FILE *fp;
User User1;
fp=fopen("reader","r");//以读方式打开文件
fread(&User1,sizeof(User),1,fp);//从文件中读取一个结构体数据 放入User1
while(!feof(fp))//feof(fp)检测文件是否结束 没结束返回0
{
printu(User1);
fread(&User1,sizeof(User),1,fp);
}
fclose(fp);
printf("按任意键继续...");
char ch=getch();system("cls");
return;
}//查找图书
void SearchBooks()
{ system("cls");//清屏
char x;
do
{cout<<"tt***********************************************"<
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cin>>x;
switch(x)
{
case '1':searchb();break;
case '2':searchw();break;
case '3':allbook();break;case '4':system("cls");return;
case '0':exit(0);
default:printf("n输入错误!请重新尝试!n");break;
}}while(x!='0');
}//书名检索
void searchb()
{FILE *fp;//文件指针变量
Book book1;//book1存放从文件读的一个结构体数据
char name[20];printf("tt-----------欢迎进入书籍查询系统!-----------nn");
printf(" 请输入您想查询的书名:");
gets(name);//查询的书名放入bookname
fp=fopen("book","r");//以读方式打开文件
fread(&book1,sizeof(Book),1,fp);//从文件中读取一个结构体数据 放入book1int flag=0;//找到flag=1
while(!feof(fp))//feof(fp)检测文件是否结束 没结束返回0
{
if(strcmp(name,book1.Name)==0)
{print(book1);flag=1;break;}
else fread(&book1,sizeof(Book),1,fp);
}
if(flag==0)printf("查无此书!n");
fclose(fp);
printf("按任意键继续查找...");
char ch=getch();
system("cls");//清屏
return;
}//作者检索
void searchw()
{FILE *fp;//文件指针变量
Book book1;//book1存放从文件读的一个结构体数据
char writer[20];printf("tt-----------欢迎进入书籍查询系统!-----------nn");
printf(" 请输入您想查询的作者:");
gets(writer);//查询的作者放入bookname
fp=fopen("book","r");//以读方式打开文件
fread(&book1,sizeof(Book),1,fp);//从文件中读取一个结构体数据 放入book1int flag=0;//找到flag=1
while(!feof(fp))//feof(fp)检测文件是否结束 没结束返回0
{
if(strcmp(writer,book1.Writer)==0)
{print(book1);flag=1;break;}
else fread(&book1,sizeof(Book),1,fp);
}
if(flag==0)printf("查无此书!n");
fclose(fp);
printf("按任意键继续查找...");
char ch=getch();
system("cls");//清屏
return;
}//查找用户
void SearchUser()
{
system("cls");//清屏
char x;
do
{ cout<<"tt***********************************************"<
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cin>>x;
switch(x)
{
case '1':searchname();break;
case '2':searchcode();break;
case '3':alluser();break;case '4':system("cls");return;
case '5':exit(0);
default:printf("n输入错误!请重新尝试!n");break;
}
}while(x!='0');
}//按用户姓名查找
void searchname()
{
FILE *fp;//文件指针变量
User User1;//User1存放从文件读的一个结构体数据
char name[20];printf("tt-----------欢迎进入用户查询系统!-----------nn");
printf(" 请输入用户的姓名:");
gets(name);
fp=fopen("reader","r");//以读方式打开文件
fread(&User1,sizeof(User),1,fp);//从文件中读取一个结构体数据 放入User1int flag=0;//找到flag=1
while(!feof(fp))//feof(fp)检测文件是否结束 没结束返回0
{
if(strcmp(name,User1.name)==0)
{printu(User1);flag=1;break;}
else fread(&User1,sizeof(User),1,fp);
}
if(flag==0)printf("查无此人!n");
fclose(fp);
printf("按任意键继续查找...");
char ch=getch();
system("cls");//清屏
return;
}
//按用户学号查找
void searchcode()
{
FILE *fp;//文件指针变量
User User1;//User1存放从文件读的一个结构体数据
char code[20];printf("tt-----------欢迎进入用户查询系统!-----------nn");
printf(" 请输入用户的姓名:");
gets(code);
fp=fopen("reader","r");//以读方式打开文件
fread(&User1,sizeof(User),1,fp);//从文件中读取一个结构体数据 放入User1int flag=0;//找到flag=1
while(!feof(fp))//feof(fp)检测文件是否结束 没结束返回0
{
if(strcmp(code,User1.code)==0)
{printu(User1);flag=1;break;}
else fread(&User1,sizeof(User),1,fp);
}
if(flag==0)printf("查无此人!n");
fclose(fp);
printf("按任意键继续查找...");
char ch=getch();
system("cls");//清屏
return;
}//更改用户
void ModifyUser()
{}
//添加用户
void AddUser()
{
int i,n,flag=1;
while(flag)
{flag=0;
printf("请输入需要创建信息的学生人数(1-5):n");
scanf("%d",&n);
if(n5)
{flag=1;
printf("输入错误,检查后请重新输入!n");
}
}for(i=0;i<n;i++)
{printf("请输入第%d个学生的基本信息:n",i+1);
printf("请输入学号:n");
scanf("%s",u[i].code);
printf("请输入姓名:n");
scanf("%s",u[i].name);
getchar();printf("请输入性别(男,女):n");
scanf("%s",u[i].sex);printf("请输入年龄:n");
scanf("%s",u[i].age);
printf("请输入其所借的书名:n");
// if(getch()!='n') 这里要修改
scanf("%s",u[i].bookname);
printf("请输入其密码:n");
scanf("%s",u[i].password);
}FILE*fp; fp = fopen("reader", "a");//追加打开 fwrite(&u,sizeof(User),n,fp);//把n个人写入文件 fclose(fp); printf("录入完毕!任意键返回n"); getch(); system("cls"); return;
}
//删除用户
void DelUser()
{}
//修改图书
void ModifyBook()
{}
//添加图书
void AddBook()
{
int i,n,flag=1;
while(flag)
{flag=0;
printf("请输入需要创建信息的图书本数(1-5):n");
scanf("%d",&n);
if(n5)
{flag=1;
printf("输入错误,检查后请重新输入!n");
}
}for(i=0;i<n;i++)
{printf("请输入第%d本图书的基本信息:n",i+1);
printf("请输入编号:n");
scanf("%d",b[i].Num);
printf("请输入书名:n");
scanf("%s",b[i].Name);
printf("请输入作者:n");
scanf("%s",b[i].Writer);printf("请输入出版社:n");
scanf("%s",b[i].Press);
printf("请输入总数量:n");
scanf("%d",b[i].Total);
printf("请输入剩余量:n");
scanf("%d",b[i].Now);
printf("请输入价格:n");
scanf("%ld",b[i].Price);
}FILE*fp; fp = fopen("reader", "a");//追加打开 fwrite(&u,sizeof(User),n,fp);//把n个人写入文件 fclose(fp); printf("录入完毕!任意键返回n"); getch(); system("cls"); return;
}
//删除图书
void DelBook()
{}///借还书界面
void BorrowReturnBook()
{system("cls");char x; do{ cout<<"tt***********************************************"<<endl; cout<<"tt** * * * * * * * * * * * * * * * * * **"<<endl; cout<<"tt** * USTB * **"<<endl; cout<<"tt** * Library Management System * **"<<endl; cout<<"tt** * * * * * * * * * * * * * * * * * **"<<endl; cout<<"tt*********************MENU**********************"<<endl; cout<<"tt** **"<<endl; cout<<"tt** [1] 借书 **"<<endl; cout<<"tt** [2] 还书 **"<<endl; cout<<"tt** [3] 返回 **"<<endl; cout<<"tt** [4] 退出系统 **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** **"<<endl; cout<<"tt***********************************************"<<endl; cout<<"请选择您的服务号码(1-4):[ ]bb"; cin>>x; switch(x) { case '1':bbook();x='w';break; case '2':rbook();x='w';break; case '3':system("cls");return; case '4':exit(0); default:{x='w';cout<<"tttt输入错误,请再尝试!n";break;} } }while(x=='w');
}
//借书
void bbook()
{
int i;
char name[20];
printf("请输入您想借阅的书籍名称:");
gets(name);
loadb();//加载图书信息到数组
loadu();//加载用户信息到数组
for(i=0;i<100;i++) //改变用户信息中借走的书
if(strcmp(u[i].code,id)==0)
printf("n借阅前信息: n");
printf("--------------------------------------------n");printf("学号 姓名 借走的书 n");
printf("--------------------------------------------n");
printf("%-10s%-10s%-10sn",u[i].code,u[i].name,u[i].bookname);
strcpy(u[i].bookname,name);
FILE *fp1;
fp1 = fopen("reader", "r+");
fwrite(&u,sizeof(User),20,fp1);
fclose(fp1);printf("nn借阅后信息: n");
printf("--------------------------------------------n");
printf("学号 姓名 借走的书 n");
printf("--------------------------------------------n");
printf("%-10s%-10s%-10sn",u[i].code,u[i].name,u[i].bookname);
for(i=0;i<10;i++) //在图书信息中改变图书剩余量
if(strcmp(b[i].Name,name)==0)
b[i].Now--;FILE *fp2;//用数组信息覆盖原文件 fp2=fopen("book","r+");//以读/写方式打开 fwrite(&b,sizeof(Book),20,fp2);//20个数组写入文件 fclose(fp2); printf("借书成功!按任意键继续..."); getch(); system("cls"); return;
}
//还书
void rbook()
{
}//登陆or注册界面
void lr()
{char x;
do{ cout<<"tt***********************************************"<<endl; cout<<"tt** * * * * * * * * * * * * * * * * * **"<<endl; cout<<"tt** * USTB * **"<<endl; cout<<"tt** * Library Management System * **"<<endl; cout<<"tt** * * * * * * * * * * * * * * * * * **"<<endl; cout<<"tt*********************MENU**********************"<<endl; cout<<"tt** [1] 登录 **"<<endl; cout<<"tt** [2] 注册 **"<<endl; cout<<"请选择您的服务号码(1-2):[ ]bb"; cin>>x; switch(x) { case '1': switch(login()) { case 1:system("cls");menua();break; case 2:system("cls");menuu();break; case 0:system("cls");x='w';break; }break; case '2':regis();system("cls");x='w';break; default:{x='w';cout<<"tttt输入错误,请再尝试!n";break;} } }while(x=='w');
}
//登录
int login()
{static i=0;
system("cls");User user1; int flag=0,idcunzai=0; cout<<"tt***********************************************"<<endl; cout<<"tt** **"<<endl; cout<<"tt-------------------欢迎登陆!-------------------"<<endl; cout<<"tt** **"<<endl; cout<<"tt*********************MENU**********************"<<endl; cout<<"tt ★友情提示:用户名为您的学号 "<<endl; cout<<"tt***********************************************"<<endl; printf("tttt用户名:"); gets(id); printf("tttt密码:"); gets(pass);
if (strcmp("admin",id)==0 && strcmp("admin",pass)==0) //判断是否为管理员
return 1;FILE *fp;
fp = fopen("reader", "r");
fread(&user1,sizeof(User),1,fp);//从文件中读取一个结构体数据 放入user1while (!feof(fp)) //feof(fp)检测文件是否结束 没结束返回0
{if (strcmp(user1.code,id)==0)
idcunzai=1;//用户名存在与否if (strcmp(user1.code,id)==0 && strcmp(user1.password, pass)==0 ) {flag=1;break;} //用户名和密码都正确flag=1 else fread(&user1,sizeof(User),1,fp);
}
fclose(fp);if (flag==1)
{printf("登录成功n");return 2;}if(idcunzai==0)
{printf("用户名不存在!任意键返回上一级菜单n");}
else
{printf("密码错误!任意键返回上一级菜单n");}
getch();
return 0;
}//注册
void regis()
{system("cls");
User user1;//存放学生
cout<<"tt***********************************************"<<endl;
cout<<"tt** "<<endl;
cout<<"tt-------------------欢迎注册!-------------------"<<endl;
cout<<"tt "<<endl;
cout<<"tt*******************MENU**********************"<<endl;
cout<<"tt ★友情提示:用户名为您的学号 "<<endl;
cout<<"tt***********************************************"<<endl;
printf("tt请输入您的用户名(学号): ");
gets(user1.code);
printf("ntt请输入您的姓名: ");
gets(user1.name);
printf("ntt请输入您的性别(男/女):");
gets(user1.sex);
printf("ntt请输入您的年龄: ");
gets(user1.age);printf("ntt请输入您的密码(12位以内): ");
gets(user1.password);
strcpy(user1.bookname,"");
FILE *fp;
fp=fopen("reader","a");
fwrite(&user1,sizeof(User),1,fp);
fclose(fp);
printf("注册成功,任意键返回上一级菜单n");
getch();
return;
}/*欢迎页面函数*/
void help(){ system("COLOR 3e");
char ch;cout<<"tt***********************************************"<<endl; cout<<"tt** 尊敬的用户您好! **"<<endl; cout<<"tt** 欢迎进入图书管理系统! **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** ┏┛┻━━━┛┻┓ **"<<endl; cout<<"tt** ┃|||||||┃ **"<<endl; cout<<"tt** ┃ ━ ┃ **"<<endl; cout<<"tt** ┃ ┳┛ ┗┳ ┃ **"<<endl; cout<<"tt** ┃ ┃ **"<<endl; cout<<"tt** ┃ ┻ ┃ **"<<endl; cout<<"tt** ┃ ┃ **"<<endl; cout<<"tt** ┗━┓ ┏━┛ **"<<endl; cout<<"tt** ┃ ┃ **"<<endl; cout<<"tt** ┃ ┃ **"<<endl; cout<<"tt** ┃ ┃ **"<<endl; cout<<"tt** ┃ ┗━━━┓ **"<<endl; cout<<"tt** ┃ ┣┓ **"<<endl; cout<<"tt** ┃ ┃ **"<<endl; cout<<"tt** ┗┓┓┏━┳┓┏┛ **"<<endl; cout<<"tt** ┃┫┫ ┃┫┫ **"<<endl; cout<<"tt** ┗┻┛ ┗┻┛ **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** 谢谢您的使用! **"<<endl; cout<<"tt***********************************************"<<endl;
printf("按任意键继续...");
ch=getch();
return;
}//菜单
void menuu(){
char x;do{ cout<<"tt***********************************************"<<endl; cout<<"tt** * * * * * * * * * * * * * * * * * **"<<endl; cout<<"tt** * USTB * **"<<endl; cout<<"tt** * Library Management System * **"<<endl; cout<<"tt** * * * * * * * * * * * * * * * * * **"<<endl; cout<<"tt*********************MENU**********************"<<endl; cout<<"tt** **"<<endl; cout<<"tt** [1] 查看图书信息 **"<<endl; cout<<"tt** [2] 借阅归还图书 **"<<endl; cout<<"tt** [3] 修改个人资料 **"<<endl; cout<<"tt** [4] 退出系统 **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** **"<<endl; cout<<"tt***********************************************"<<endl; cout<<"请选择您的服务号码(1-4):[ ]bb"; cin>>x; switch(x) { case '1':SearchBooks();x='w';break;///1.作者2.编号 case '2':BorrowReturnBook();x='w';break;//1.借书2.还书3.排行 case '3':ModifyUser();x='w';break;//姓名密码等 case '4':exit(0); default:{x='w';cout<<"tttt输入错误,请再尝试!n";break;} } }while(x=='w');
}
void menua()
{
char x;do{ cout<<"tt***********************************************"<<endl; cout<<"tt** * * * * * * * * * * * * * * * * * **"<<endl; cout<<"tt** * USTB * **"<<endl; cout<<"tt** * Library Management System * **"<<endl; cout<<"tt** * * * * * * * * * * * * * * * * * **"<<endl; cout<<"tt*********************MENU**********************"<<endl; cout<<"tt** **"<<endl; cout<<"tt** [1] 查看图书信息 [5] 查看用户信息 **"<<endl; cout<<"tt** [2] 更改图书信息 [6] 更改用户信息 **"<<endl; cout<<"tt** [3] 添加图书信息 [7] 添加用户信息 **"<<endl; cout<<"tt** [4] 删除图书信息 [8] 删除用户信息 **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** [0] 退出系统 **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** **"<<endl; cout<<"tt** **"<<endl; cout<<"tt***********************************************"<<endl; cout<<"请选择您的服务号码(0-8):[ ]bb"; cin>>x; switch(x) { case '1':SearchBooks();x='w';break;///1.书名2.作者 case '2':ModifyBook();x='w';break; case '3':AddBook();x='w';break; case '4':DelBook();x='w';break; case '5':SearchUser();x='w';break; case '6':ModifyUser();x='w';break; case '7':AddUser();x='w';break; case '8':DelUser();x='w';break; case '0':exit(0); default:{x='w';cout<<"tttt输入错误,请再尝试!n";break;} } }while(x=='w');
}
解决方案
要看具体报什么错的,看看可不可以定位到那一行?