「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」
运行结果
主页面
进入时页面,选择管理员模式或者客户模式
\
管理员模式
进入管理员模式需要输入密码(初始密码mm)
进入系统管理员可以录入图书信息,查看图书信息,修改图书信息,还可以修改管理密码
录入图书信息
先输入需要录入图书数量
录入图书信息
信息录入完成有提示
\
查看图书\
1.按书名查找\
2.按书号查找
3.查看所有未借阅图书
4.查看所有已经借阅图书
5.查看所有图书
修改图书信息
进入修改图书信息页面
1.按书名进行修改
2.按书号进行修改
3.如果不存在给出提示重新输入
删除图书
删除图书主页
1.按书名删除
2.按书号删除
3.是否删除所有图书信息
修改密码
客户模式
客户模式下的主页
查看图书信息(同管理员权限)
借阅图书
1.按书名借阅
2.按书号借阅
定义结构体与全局变量
结构体数组中对图书的定义主要分书号、书名、出版社、时间、借阅状态,除了书名与出版社为字符串数组,其他均为int类型
struct book //定义图书结构体
{
int num; // 书号
char name[20]; //书名
char publish[20]; // 出版社
struct time //定义时间结构体
{
int year,month,day; //年月日
}t;
int lend;// 定义 借的状态
}bk[20];
int N; // N可以理解为 录入的图书的数量
char code[20] = "mm"; //密码
主菜单
这一块没有什么好说的,用int类型存储用户操作选择,返回结果
int mainmenu() //主菜单
{
int x;
printf("\n\n\n\n");
printf("\t\t|-------------------------------------------------------------|\n");
printf("\t\t| |\n");
printf("\t\t| ====================== |\n");
printf("\t\t| 欢迎光临图书管理系统 |\n");
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|--------------------------------------------------------------|\n");
printf("\n\t\t请输入您的选择:");
scanf("%d",&x);
return x;
}
密码验证与密码修改
密码验证这一块主要是通过对比输入的密码与存储已有的密码,如果相同返回1,不相同返回0,这里简单介绍一下strcmp函数,作用是比较两个字符串,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
int codeverify() //密码验证
{
char mm[20]; //用来存放输入的密码
printf("\n");
printf("\t\t ====================== \n");
printf("\t\t 欢迎使用管理员模式 \n");
printf("\t\t ====================== \n");
printf("\n");
printf("\t\t 请输入密码:");
scanf("%s",&mm);
if(!strcmp(mm,code)) //比较输入的密码 是否 与原密码相同
{
return 1;
}
else
{
return 0;
}
}
修改密码这一块主要用了三个字符数组分别存储用户输入密码、第一次输入新密码、第二次输入新密码,首先比较输入密码与原始密码是不是一样的,只有是一样的情况下才能进行修改密码操作,不一样直接提示密码输入错误不允许修改,如果是一样的开始进行输入两次密码,比较两次输入的密码,如果是一样的说明修改成功给出提示,否则提示两次密码不一样终止本次密码修改。
int changecode() //修改密码
{
char code_temp[20];//用来存放用户输入的密码
char new_code[20]; //存放第一次新密码
char new_code1[20]; //存放第二次新密码
printf("请输入原始密码:\n");
scanf("%s",&code_temp);
if(!strcmp(code_temp,code)) //比较原始密码 与 用户输入的密码
{
printf("请输入新密码:\n");
scanf("%s",&new_code);
printf("请再输一次:\n");
scanf("%s",&new_code1);
if(!strcmp(new_code1,new_code)) //比较 两次修改后输入的密码
{
strcpy(code,new_code); //将 新密码 拷贝给 原始密码
printf("密码修改成功,请牢记,按任意键返回。。。\n");
getch();
return 0;
}
else
{
printf("错误!两次输入的密码不一致,按任意键返回。。。\n");
getch();
return 1;
}
}
else
{
printf("原始密码错误,按任意键返回。。。\n");
getch();
}
}
管理员模式
管理员页面
这是管理员模式下的主菜单
int adm() //管理员模式
{
int x;
system("cls");
printf("\n\n\n\n");
printf("\t\t|-------------------------------------------------------------|\n");
printf("\t\t| |\n");
printf("\t\t| ====================== |\n");
printf("\t\t| 管理员模式 |\n");
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|-------------------------------------------------------------|\n");
printf("\n\t\t请输入您的选择:");
scanf("%d",&x);
return x;
}
修改图书菜单
显示修改图书菜单,按1.按书名查找,2.按书号查找,3.显示删除图书菜单
/***********修改图书信息*********/
void change()
{
int x;
do
{
system("cls");
printf("\n\n\n\n");
printf("\t\t|------------------------------------------------------------|\n");
printf("\t\t| ===================== |\n");
printf("\t\t| 修改图书信息 |\n");
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|------------------------------------------------------------|\n");
printf("\t\t请输入您的选择:");
scanf("%d",&x);
switch(x)
{
case 1:system("cls");change_name();break;/*按书名查找名修改信息*/
case 2:system("cls");change_num();break;/*按书号查找并修改信息*/
case 3:system("cls");dele();break;
}
}while(x!=4);
}
按书名来修改信息
用name存放需要修改的书名,输入书名后遍历存储的结构体数组,看里面有没有,如果有就进行修改,没有就提示错误请重新输入
void change_name() //按书名来修改信息
{
char name[20]; //用来存放想要修改的书名
int i; //循环下标
int k = 0;// 标记书名是否存在
printf("输入你想要修改的书名,按“exit”退出:\n");
do
{
scanf("%s",&name);
if(!strcmp(name,"exit"))
{
break;
}
for(i=0;i<N;i++)
{
if(!strcmp(name,bk[i].name))
{
k++;
printf("该书的信息为:\n");
printf("\t编号 图书名称 出版社 出版时间 状态\n");
printf("\t%-7d %-8s %-12s %4d年%2d月%2d日 ",bk[i].num,bk[i].name,bk[i].publish,bk[i].t.year,bk[i].t.month,bk[i].t.day);
if(bk[i].lend == 1)
{
printf("已被借阅\n");
}
else
{
printf("可以借阅\n");
}
printf("现在请输入新的信息:\n");
printf("请输入书的编号:\n");
scanf("%d",&bk[i].num);
printf("请输入书的名称:\n");
scanf("%s",&bk[i].name);
printf("请输入书的出版社:\n");
scanf("%s",&bk[i].publish);
printf("请输入书的出版时间(用逗号隔开,英文的逗号哦!):\n"); scanf("%4d,%2d,%d",&bk[i].t.year,&bk[i].t.month,&bk[i].t.day);
printf("该书是否已经被借阅,已经借阅输入‘1’,未被借阅输入‘0’:\n");
scanf("%d",&bk[i].lend);
}
}
if(k == 0)
{
system("cls");
printf("您输入的书名不存在,请重新输入(按“exit”退出):\n");
}
else
{
printf("恭喜你信息修改成功,按任意键返回。。。\n");
getch();
break;
}
}while(1);
}
按书号修改图书
用num存放需要修改的书号,输入书号后遍历存储的结构体数组,看里面有没有,如果有就进行修改(修改成功后给出提示),没有就提示错误请重新输入
void change_num() //按书号修改图书
{
int num; //用来存放 想要 修改的书号
int i; //循环下标变量
int k = 0; //用来标记 该书是否存在
printf("请输入你想要修改的图书的书号(按'0'退出):\n");
do
{
scanf("%d",&num);
if(num == 0)
{
break;
}
for(i=0;i<N;i++)
{
if(num == bk[i].num)
{
k++;
printf("该书的信息为:\n");
printf("\t编号 图书名称 出版社 出版时间 状态\n");
printf("\t%-7d %-8s %-12s %4d年%2d月%2d日 ",bk[i].num,bk[i].name,bk[i].publish,bk[i].t.year,bk[i].t.month,bk[i].t.day);
if(bk[i].lend == 1)
{
printf("已被借阅\n");
}
else
{
printf("可以借阅\n");
}
printf("现在请输入新的信息:\n");
printf("请输入书的编号:\n");
scanf("%d",&bk[i].num);
printf("请输入书的名称:\n");
scanf("%s",&bk[i].name);
printf("请输入书的出版社:\n");
scanf("%s",&bk[i].publish);
printf("请输入书的出版时间(用逗号隔开,英文的逗号哦!):\n");
scanf("%4d,%2d,%d",&bk[i].t.year,&bk[i].t.month,&bk[i].t.day);
printf("该书是否已经被借阅,已经借阅输入‘1’,未被借阅输入‘0’:\n");
scanf("%d",&bk[i].lend);
}
}
if(k == 0)
{
system("cls");
printf("您输入的书号不存在,请重新输入(按“0”退出):\n");
}
else
{
printf("恭喜你信息修改成功,按任意键返回。。。\n");
getch();
break;
}
}while(1);
}