第一次用c语言写的图书管理系统 出现了问题 劳烦大家帮我看一看 明后天就要交作业了
2014-04-21 来自:小欧吖豆 1 人回应

我的问题是 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%-12d\n",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%-10s\n",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<<"\t\t***********************************************"< 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("\t\t-----------欢迎进入书籍查询系统!-----------\n\n");
printf(" 请输入您想查询的书名:");
gets(name);//查询的书名放入bookname
fp=fopen("book","r");//以读方式打开文件
fread(&book1,sizeof(Book),1,fp);//从文件中读取一个结构体数据 放入book1

int 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("\t\t-----------欢迎进入书籍查询系统!-----------\n\n");
printf(" 请输入您想查询的作者:");
gets(writer);//查询的作者放入bookname
fp=fopen("book","r");//以读方式打开文件
fread(&book1,sizeof(Book),1,fp);//从文件中读取一个结构体数据 放入book1

int 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<<"\t\t***********************************************"< 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("\t\t-----------欢迎进入用户查询系统!-----------\n\n");
printf(" 请输入用户的姓名:");
gets(name);
fp=fopen("reader","r");//以读方式打开文件
fread(&User1,sizeof(User),1,fp);//从文件中读取一个结构体数据 放入User1

int 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("\t\t-----------欢迎进入用户查询系统!-----------\n\n");
printf(" 请输入用户的姓名:");
gets(code);
fp=fopen("reader","r");//以读方式打开文件
fread(&User1,sizeof(User),1,fp);//从文件中读取一个结构体数据 放入User1

int 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<<"\t\t***********************************************"<<endl;
    cout<<"\t\t**     * * * * * * * * * * * * * * * * *     **"<<endl;
    cout<<"\t\t**     *              USTB             *     **"<<endl;
    cout<<"\t\t**     *   Library Management System   *     **"<<endl;
    cout<<"\t\t**     * * * * * * * * * * * * * * * * *     **"<<endl;
    cout<<"\t\t*********************MENU**********************"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**             [1] 借书                      **"<<endl; 
    cout<<"\t\t**             [2] 还书                      **"<<endl; 
    cout<<"\t\t**             [3] 返回                      **"<<endl;
    cout<<"\t\t**             [4] 退出系统                  **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t***********************************************"<<endl;
    cout<<"请选择您的服务号码(1-4):[ ]\b\b";

    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<<"\t\t\t\t输入错误,请再尝试!\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%-10s\n",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("\n\n借阅后信息: \n");
printf("--------------------------------------------\n");
printf("学号 姓名 借走的书 \n");
printf("--------------------------------------------\n");
printf("%-10s%-10s%-10s\n",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<<"\t\t***********************************************"<<endl;
    cout<<"\t\t**     * * * * * * * * * * * * * * * * *     **"<<endl;
    cout<<"\t\t**     *              USTB             *     **"<<endl;
    cout<<"\t\t**     *   Library Management System   *     **"<<endl;
    cout<<"\t\t**     * * * * * * * * * * * * * * * * *     **"<<endl;
    cout<<"\t\t*********************MENU**********************"<<endl;
    cout<<"\t\t**                 [1] 登录                  **"<<endl; 
    cout<<"\t\t**                 [2] 注册                  **"<<endl;
    cout<<"请选择您的服务号码(1-2):[ ]\b\b";

    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<<"\t\t\t\t输入错误,请再尝试!\n";break;}           
    }
}while(x=='w');

}

//登录
int login()
{static i=0;
system("cls");

 User user1;
 int flag=0,idcunzai=0;
    cout<<"\t\t***********************************************"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t-------------------欢迎登陆!-------------------"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t*********************MENU**********************"<<endl;
    cout<<"\t\t          ★友情提示:用户名为您的学号          "<<endl;
    cout<<"\t\t***********************************************"<<endl;
    printf("\t\t\t\t用户名:");    
        gets(id);
     printf("\t\t\t\t密码:");
        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);//从文件中读取一个结构体数据 放入user1

while (!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<<"\t\t***********************************************"<<endl;
cout<<"\t\t** "<<endl;
cout<<"\t\t-------------------欢迎注册!-------------------"<<endl;
cout<<"\t\t
"<<endl;
cout<<"\t\t
*******************MENU**********************"<<endl;
cout<<"\t\t ★友情提示:用户名为您的学号 "<<endl;
cout<<"\t\t***********************************************"<<endl;
printf("\t\t请输入您的用户名(学号): ");
gets(user1.code);
printf("\n\t\t请输入您的姓名: ");
gets(user1.name);
printf("\n\t\t请输入您的性别(男/女):");
gets(user1.sex);
printf("\n\t\t请输入您的年龄: ");
gets(user1.age);

printf("\n\t\t请输入您的密码(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<<"\t\t***********************************************"<<endl;
    cout<<"\t\t**               尊敬的用户您好!             **"<<endl;
    cout<<"\t\t**            欢迎进入图书管理系统!          **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**            ┏┛┻━━━┛┻┓             **"<<endl;
    cout<<"\t\t**            ┃|||||||┃             **"<<endl;
    cout<<"\t\t**            ┃   ━   ┃             **"<<endl;
    cout<<"\t\t**            ┃ ┳┛ ┗┳ ┃             **"<<endl;               
    cout<<"\t\t**            ┃       ┃             **"<<endl;
    cout<<"\t\t**            ┃   ┻   ┃             **"<<endl;
    cout<<"\t\t**            ┃       ┃             **"<<endl;
    cout<<"\t\t**            ┗━┓   ┏━┛             **"<<endl;
    cout<<"\t\t**              ┃   ┃               **"<<endl;
    cout<<"\t\t**              ┃   ┃                **"<<endl;
    cout<<"\t\t**              ┃   ┃                 **"<<endl;
    cout<<"\t\t**              ┃   ┗━━━┓         **"<<endl;
    cout<<"\t\t**              ┃       ┣┓       **"<<endl;
    cout<<"\t\t**              ┃             ┃         **"<<endl;
    cout<<"\t\t**              ┗┓┓┏━┳┓┏┛         **"<<endl;
    cout<<"\t\t**               ┃┫┫ ┃┫┫           **"<<endl;
    cout<<"\t\t**               ┗┻┛ ┗┻┛           **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**                谢谢您的使用!              **"<<endl;
    cout<<"\t\t***********************************************"<<endl;

printf("按任意键继续...");
ch=getch();
return;
}

//菜单
void menuu()

{
char x;

do{
    cout<<"\t\t***********************************************"<<endl;
    cout<<"\t\t**     * * * * * * * * * * * * * * * * *     **"<<endl;
    cout<<"\t\t**     *              USTB             *     **"<<endl;
    cout<<"\t\t**     *   Library Management System   *     **"<<endl;
    cout<<"\t\t**     * * * * * * * * * * * * * * * * *     **"<<endl;
    cout<<"\t\t*********************MENU**********************"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**             [1] 查看图书信息              **"<<endl; 
    cout<<"\t\t**             [2] 借阅归还图书              **"<<endl; 
    cout<<"\t\t**             [3] 修改个人资料              **"<<endl; 
    cout<<"\t\t**             [4] 退出系统                  **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t***********************************************"<<endl;
    cout<<"请选择您的服务号码(1-4):[ ]\b\b";

    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<<"\t\t\t\t输入错误,请再尝试!\n";break;}           
    }
}while(x=='w');

}

void menua()

{
char x;

do{
    cout<<"\t\t***********************************************"<<endl;
    cout<<"\t\t**     * * * * * * * * * * * * * * * * *     **"<<endl;
    cout<<"\t\t**     *              USTB             *     **"<<endl;
    cout<<"\t\t**     *   Library Management System   *     **"<<endl;
    cout<<"\t\t**     * * * * * * * * * * * * * * * * *     **"<<endl;
    cout<<"\t\t*********************MENU**********************"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**    [1] 查看图书信息    [5] 查看用户信息   **"<<endl; 
    cout<<"\t\t**    [2] 更改图书信息    [6] 更改用户信息   **"<<endl; 
    cout<<"\t\t**    [3] 添加图书信息    [7] 添加用户信息   **"<<endl;
    cout<<"\t\t**    [4] 删除图书信息    [8] 删除用户信息   **"<<endl;
    cout<<"\t\t**                                           **"<<endl; 
    cout<<"\t\t**                                           **"<<endl; 
    cout<<"\t\t**                [0] 退出系统               **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t**                                           **"<<endl;
    cout<<"\t\t***********************************************"<<endl;
    cout<<"请选择您的服务号码(0-8):[ ]\b\b";


    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<<"\t\t\t\t输入错误,请再尝试!\n";break;}           
    }
}while(x=='w');

}

2014-04-29 来自:凌乱不乱

要看具体报什么错的,看看可不可以定位到那一行?

您的回应

你还未登陆,不能回应!登陆