#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1024
void login();
//void readermenu();
void managemenu();
void changebook();
void deletebook();
void inquirebook();
//void addbook();
void getInput(struct Book *book );
void printBook(struct Book *book);
void login()
{
printf("欢迎进入图书管理系统登入页面!\n");
printf("1.管理员登入界面\n");
printf("2.用户登录界面\n");
printf("3.退出\n");
printf("请选择你的操作:"); //起始登录页面
int choice;
scanf("%d",&choice);
if(choice==1) //选择菜单并调用相对函数
{
char username[10],password[10];
printf ("请输入用户名和密码\n");
printf("用户名:\n");
scanf("%s",&username);
printf("密码:\n");
scanf("%s",&password);
getchar();
if((strcmp(username,"620")==0)&&(strcmp(password,"620")==0)) //管理员正确账号和密码均为620并用strcmp函数进行判断两个字符串是否相同
{
printf("进入管理员菜单\n");
managemenu();
}
else
{
printf("密码错误,请重新输入:\n");
return;
}
getchar();
}
else if(choice==2)
{
char name[10],readerpassword[10];
printf ("请输入用户名和密码\n");
printf("用户名:\n");
scanf("%s",&name);
printf("密码:\n");
scanf("%s",&readerpassword);
if((strcmp(name,"520")==0)&&(strcmp(readerpassword,"520")==0))
{
printf("进入读者菜单\n");
//readermenu();
return;
}
printf("密码错误,请重新输入:\n");
return;
}
else (choice==3);
{
exit(0);
}
}
void managemenu()
{
int a=1;
system("cls"); //清屏
while(a) //定义非零常量a,使其在未选择返回的情况下一直处于菜单页面
{
int choice;
printf("1.查询图书信息\n");
printf("2.删除图书信息\n");
printf("3.修改图书信息\n");
printf("4.录入图书信息\n");
printf("5.返回\n");
printf("请选择你的操作\n");
scanf("%d",&choice);
switch(choice)
{
case 1: inquirebook();break;
// case 2: changebook();break;
// case 3: deletebook();break;
case 4: getInput;break;
case 5: a=0;break; //将非零常a改为0,从而达到退出while循环目的
}
}
}
void inquirebook()
{
FILE *fp; //声明 fp 是 FILE型指针,用于指向FILE类型 (文件结构)
char buffer[MAX];
int ch;
if((fp=fopen("library.txt","w"))==NULL)
{
printf("打开文件失败!\n");
exit(EXIT_FAILURE); //表示没有成功的执行一个程序
}
fputs("书名:《人才》\n",fp);
fputs("作者:小文哥\n",fp);
fputs("售价:9999999.99\n",fp);
fputs("出版社:清华大学出版社\n",fp);
fputs("\n",fp);
fclose(fp);
if((fp=fopen("library.txt","r"))==NULL)
{
printf("打开文件失败!\n");
exit(EXIT_FAILURE); //表示没有成功的执行一个程序
}
while(!feof(fp))
{
fgets(buffer,MAX,fp);
printf("%s",buffer);
}
fclose(fp);
return;
}
struct Book
{
char title[128];
char author[40];
float price;
char publisher[40];
};
void getInput(struct Book *book)
{
printf("请输入书名:");
scanf_s("%s",book->title);
printf("请输入作者:");
scanf_s("%s",book->author);
printf("请输入售价:");
scanf_s("%f",&book->price);
printf("请输入出版社:");
scanf_s("%s",book->publisher);
void printBook(struct Book *book);
}
void printBook(struct Book *book)
{
printf("书名:%s\n",book->title);
printf("作者:%s\n",book->author);
printf("售价:%f\n",book->price);
printf("出版社:%s\n",book->publisher);
}
管理员账号和密码均为620,进入管理员系统输入4录入图书信息。为什么还是弹出管理员菜单页面
我觉得是输入缓冲区的问题,因为你输入完数据,还会遗留一个回车符在输入缓冲区中,所以当有需要输入字符时,有优先从输入缓冲区中进行读取,才会导致出现那样得问题。
所以,解决办法是,清空输入缓冲区即可。如下代码
char c;
while ((c = getchar()) != '\n');
应该在void managemenu()这个函数里要加一个,具体哪里还有需要加,自己可以调试看看!
最后的主函数代码为
int main()
{
login();
system("pause"); //从程序中发起系统命令行调用,执行命令:pause.system("PAUSE") 为暂停,等待用户信号;
return 0;
}
105行getInput参数都没有肯定执行错误呀
void addbook(struct Book book){
}
void getInput()
{
struct Book book;
printf("请输入书名:");
scanf("%s",book.title);
printf("请输入作者:");
scanf("%s",book.author);
printf("请输入售价:");
scanf("%f",&book.price);
printf("请输入出版社:");
scanf("%s",book.publisher);
printBook( book);
addbook(book);
}
void printBook(struct Book book)
{
printf("书名:%s\n",book.title);
printf("作者:%s\n",book.author);
printf("售价:%f\n",book.price);
printf("出版社:%s\n",book.publisher);
}
记得把你的函数声明部分也改掉;还有105行 case 4: getInput();break;
你的addbook(struct Book book)内部应该是把book信息写入文件中。
没看懂inquirebook()是干嘛的。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y