删除图书菜单
通过do while循环进行显示图书菜单,按1是按书名删除,2是按书号删除,3是删除所有图书
void dele() //删除图书
{
int x;
do
{
system("cls");
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");dele_name();break;/*按书名删除*/
case 2:system("cls");dele_num();break;/*按书号删除*/
case 3:system("cls");dele_all();getch();break;/*删除所有图书*/
}
}while(x!=4);
}
按书名删除
定义循环下标i,用于遍历,书名name,k标记是否存在该书,给出提示让用户进行输入,如果找到问用户是否确定执行删除操作,得到肯定后通过用空数组覆盖达到删除效果,成功后给用户提示。同理如果不存在给出提示说不存在。
void dele_name() //按书名删除
{
int i; //循环下标变量
char name[20]; //用来存放输入的书名
char new_name[20]; //定义一个空数组
int k = 0;//用来标记 是否存在该书
char c[2]; //用来表示 是否删除图书
printf("请输入您想要删除的书名(输入”exit”退出):\n");
while(1)
{
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("\t是否要删除此书('y' or 'n'):\n");
scanf("%s",&c);
if(!strcmp(c,"y"))
{
strcpy(bk[i].name,new_name); //空数组 拷贝给 已有书名
bk[i].num = 0; //令书号值为0
strcpy(bk[i].publish,new_name); //空数组 拷贝给 已有出版社
bk[i].t.year = 0; //令年 = 0
bk[i].t.month = 0; //令月 = 0
bk[i].t.day = 0; //令日 = 0
printf("\t删除成功!\n");
getch();
break;
}
else
{
printf("用户取消操作,任意键返回。。。");
getch();
break;
}
}
}
if(k == 0)
{
system("cls");
printf("未找到该书,请重新输入(输入“exit”退出):\n");
}
else
{
break;
}
}
}
按书号删除
定义循环下标i,用于遍历,书名num,k标记是否存在该书,给出提示让用户进行输入,如果找到问用户是否确定执行删除操作,得到肯定后通过用空数组覆盖达到删除效果,成功后给用户提示。同理如果不存在给出提示说不存在。
void dele_num() //按书号删除
{
int i;//循环下标变量
int k = 0; //标记是否存在该书
int num; //存放输入的书号
char new_name[20];//定义一个空数组
char c[2];//用来表示 是否删除图书
printf("请输入您想要删除的书名的书号(输入”0”退出):\n");
while(1)
{
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("\t是否要删除此书('y' or 'n'):\n");
scanf("%s",&c);
if(!strcmp(c,"y"))
{
strcpy(bk[i].name,new_name);
bk[i].num = 0;
strcpy(bk[i].publish,new_name);
bk[i].t.year = 0;
bk[i].t.month = 0;
bk[i].t.day = 0;
printf("\t删除成功!\n");
getch();
break;
}
else
{
printf("用户取消操作,任意键返回。。。");
getch();
break;
}
}
}
if(k == 0)
{
system("cls");
printf("未找到该书,请重新输入(输入“0”退出):\n");
}
else
{
break;
}
}
}
删除所有图书
通过y或者n判断用户是否确定删除所有图书信息,如果确定把全局变量N置0达到删除所有图书,否则提示操作取消
void dele_all() //删除所有图书
{
char c[2]; //用来表示是否删除
printf("\t继续操作会删除所有图书信息,是否继续(“y” or “n”)");
scanf("%s",&c);
if(!strcmp(c,"y"))
{
N = 0; //N等于0 也就是令录入的图书数量为零 即删除了所有图书
printf("\t删除成功\n");
getch();
}
else
{
printf("\t操作取消,任意键返回。。。\n");
getch();
}
}
建立图书信息库
首先询问用户需要录入多少数量的图书,这个输入的数用N进行保存,然后进行N次循环,录入图书信息,int类型的数据有:编号、出版时间、借阅状态。字符串类型的有书名称和出版社名称。
/********建立图书信息库********/
void info()
{
int i;
system("cls");
printf("\t\t ===================== \n");
printf("\t\t 录入图书信息 \n");
printf("\t\t ===================== \n\n");
printf("\t\t请输入您要录入的数量:");
scanf("%d",&N);
for(i=0;i<N;i++)
{
printf("\t\t请输入第%d本书的编号:",i+1);
scanf("%d",&bk[i].num);
printf("\t\t请输入第%d本书的名称:",i+1);
scanf("%s",bk[i].name);
printf("\t\t请输入第%d本书的出版社:",i+1);
scanf("%s",bk[i].publish);
printf("\t\t请输入第%d本书的出版时间(用逗号隔开):",i+1);
scanf("%d,%d,%d",&bk[i].t.year,&bk[i].t.month,&bk[i].t.day);
printf("\t\t该书是否已经被借阅,已被借阅输入'1',未被借阅输入'0':");
scanf("%d",&bk[i].lend);
printf("------------------------------------------------------------------\n");
}
system("cls");
printf("\t\t ===================== \n");
printf("\t\t 信息录入完成 \n");
printf("\t\t ===================== \n");
printf("\n\t\t 按任意键继续...\n");
}
查看菜单
不同数字代表执行不同函数,分别是1.按书名查找,2.按书号查找,3.查看所有未借阅图书,4.查看所有已借阅图书,5.查看所有图书,6.返回主菜单
void show() //管理员———查看图书信息
{
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| |\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|-----------------------------------------------------------|\n");
printf("\n\t\t请输入您的选择:");
scanf("%d",&x);
switch(x)
{
case 1:system("cls");showbook_name();getch();break;/*按书名查看*/
case 2:system("cls");showbook_num();getch();break;/*按书号查看*/ case 3:system("cls");willreading();getch();break;/*查看未借阅图书*/
case 4:system("cls");readed();getch();break;/*查看已借阅图书*/
case 5:system("cls");show_all_book();getch();break;/*查看所有图书*/
}
}while(x!=6);
}
按书名或书号查看
name存储输入的书名,循环遍历结构体数组,找到后进行展示被查询书的信息。
num存储输入的书号,循环遍历结构体数组,找到后进行展示被查询书的信息。
void showbook_name() //管理员————按书名查看
{
int i,k=0; //i是局部变量一定记住,k用来标记书的借阅状态。
char name[20];
printf("请输入需要查看的书名:\n");
scanf("%s",&name);
for(i=0;i<N;i++)
{
if(!strcmp(name,bk[i].name))
{
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("\t\t已借阅\n");
}
else
{
printf("\t\t未借阅\n");
}
k++;
printf("\t按任意键返回。。。\n");
}
}
if(k == 0)
{
printf("该书不存在,任意键返回。。。\n");
}
}
void showbook_num() //管理员————按书号查看
{
int i,k=0; //i是局部变量一定记住, ,k用来标记书的借阅状态。
int num;
printf("请输入需要查看的书号:\n");
scanf("%d",&num);
for(i=0;i<N;i++)
{
if(num==bk[i].num)
{
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("\t\t已借阅\n");
}
else
{
printf("\t\t未借阅\n");
}
k++;
printf("\t按任意键返回。。。\n");
}
}
if(k == 0)
{
printf("该书不存在,任意键返回。。。\n");
}
}
查看未借阅与借阅的图书
首先先验证结构体数组里面是否有数据,如果没有数据提示数据不存在,请先录入数据,验证完成后开始遍历结构体数组,借阅状态为可借阅的书进行显示,如果没找到提示目前没有可借阅的图书
void willreading() //管理员————未借阅的图书
{
int i,k=0;
if(bk[0].num == 0&&bk[0].t.year == 0 || N == 0)
//如果结构体中bk【】数组中存放的第一个数据书号为零年为零或数量为零则数据不存在
{
printf("数据不存在,请先录入数据...\n");
printf("按任意键返回...\n");
}
for(i=0;i<N;i++)
{
if(bk[i].lend == 0)
{
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);
printf("您可以借阅此书...\n");
k++;
}
}
if(k == 0)
printf("目前没有可借阅的图书,按任意键继续。。。\n");
}
void readed() //管理员————已经借阅的图书
{
int i,k=0;
if(bk[0].num == 0&&bk[0].t.year == 0 || N == 0) //如果 结构体中 bk【】数组中存放 的第一个 数据 书号 为零 年 为零 或 数量为零 则 数据不存在
{
printf("数据不存在,请先录入数据。。。\n");
printf("按任意键返回...\n");
}
else
{
for(i=0;i<N;i++)
{
if(bk[i].lend == 1)
{
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);
printf("很遗憾,此书已被接走。。。\n");
k++;
}
}
if(k == 0)
printf("目前没有任何书借出。按任意键继续。。。\n");
}
}
查看所有图书
首先先验证结构体数组里面是否有数据,如果没有数据提示数据不存在,请先录入数据,验证完成后开始遍历结构体数组,展示所有书的情况
void show_all_book() //管理员————查看所有图书
{
int i;
if(bk[0].num == 0&&bk[0].t.year == 0 || N == 0)
{
printf("数据不存在,请先录入数据。。。\n");
}
else
{
printf("\t编号 图书名称 出版社 出版时间 状态\n");
for(i=0;i<N;i++)
{
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");
}
}
}
}
客户模式菜单
显示客户模式下的菜单,1查看图书信息,2.借阅图书,3.退出系统,用int类型数据x表示用户选择。
int peo() //客户模式
{
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.按书名借阅,2.按书号借阅,3.查看所有图书,4.返回主菜单,查看所有图书可以复用之前的函数。用int类型数据x表示用户选择。
void reading() //借阅图书
{
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");lend_name();getch();break;/*按书名借阅*/
case 2:system("cls");lend_num();getch();break;/*按书号借阅*/
case 3:system("cls");show_all_book();getch();break;/*查看所有图书*/
}
}while(x!=4);
}
按书名或者书号借阅图书
按书号借阅可以用num记录用户输入的书号,然后遍历结构体数组比较输入书号与存在的书号是否一致,如果没找到进行提示,找到了并且图书状态为可以借阅的情况下显示图书信息,询问用户是否借阅,如果用户确定借阅则修改图书状态,按书名借阅与此过程类似,用的是name存储书名
void lend_num()
{
int i;
int num;
int k = 0;
char n[2]; //用来表示是否借阅
system("cls");
printf("请输入书名的书号:\n");
while(1)
{
scanf("%d",&num);
for(i=0;i<N;i++)
{
if((num == bk[i].num)&&(bk[i].lend == 0)) //比较输入书号与已有书号相等时且未借阅时执行if语句
{
k++;
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);
printf("可以借阅\n");
printf("您是否需要借阅此书:'y' or 'n' \n");
scanf("%s",&n);
if(!strcmp(n,"y"))
{
bk[i].lend = 1;
printf("借阅成功,按任意键返回。。。\n");
getch();
break;
}
else
{
if(!strcmp(n,"n"))
{
printf("借阅取消,按任意键返回。。。\n");
getch();
}
else
{
printf("输入有错,按任意键返回。。。\n");
getch();
}
break;
}
}
}
if(k == 0)
{
printf("不存在该书,或该书已经借出!请正确输入图书名称!\n");
printf("按任意键返回。。。\n");
getch();
break;
}
else
{
break;
}
}
}
void lend_name()
{
char name[20];
int i;
char n[2]; //用来表示是否借阅
int k = 0;
system("cls");
printf("请输入书名:\n");
while(1)
{
scanf("%s",&name);
for(i=0;i<N;i++)
{
if((!strcmp(name,bk[i].name))&&(bk[i].lend == 0)) //比较输入书名与已有书名相等时 且 未借阅 时 执行 if语句
{
k++;
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);
printf("可以借阅\n");
printf("您是否需要借阅此书:'y' or 'n' \n");
scanf("%s",&n);
if(!strcmp(n,"y"))
{
bk[i].lend = 1;
printf("借阅成功,按任意键返回。。。\n");
getch();
break;
}
else
{
if(!strcmp(n,"n"))
{
printf("借阅取消,按任意键返回。。。\n");
getch();
}
else
{
printf("输入有错,按任意键返回。。。\n");
getch();
}
break;
}
}
}
if(k == 0)
{
printf("不存在该书,或该书已经借出!请正确输入图书名称!\n");
printf("按任意键返回。。。\n");
getch();
break;
}
else
{
break;
}
}
}
主函数
s用来接收主菜单的值 n来接收管理员模式的值 x来接受客户模式的值
首先显示主菜单,在用户做出选择后把返回的结果存储到s中,选择管理员模式后先对密码进行校验,如果没有问题再执行其他操作(录入信息、查看信息、修改信息等),进入用户模式后显示用户菜单,根据用户选择执行对应函数。完成操作后用户可以根据提示层层返回上一级菜单直到退出系统。
int main() { /*主函数*/
int n,s,x,t; //s用来接收主菜单的值 n来接收管理员模式的值 x来接受客户模式的值
do {
system("cls");
s = mainmenu();
switch(s) {
case 1 :
system("cls");
t=codeverify(); //t来存放 密码 错误与正确 的 返回值
do {
if(t == 1) {
n = adm();
switch(n) {
case 1:
system("cls");
info();
getch();
break;/*录入信息*/
case 2:
system("cls");
show();
break;/*查看信息*/
case 3:
system("cls");
change();
break;/*修改信息*/
case 4:
system("cls");
changecode();
break;/*修改密码*/
}
} else {
printf("密码错误,按任意键返回。。。\n");
getch();
break;
}
} while(n!=5);
break;
case 2 :
do {
system("cls");
x = peo();
switch(x) {
case 1:
system("cls");
show();
break;//查看图书信息
case 2:
system("cls");
reading();
break;//借阅图书
}
} while(x!=3);
break;
}
} while(s!=3);
system("cls");
printf("\n\n\n\n\n\n\t\t谢谢使用!!!\n");
getch();//等待用户 输入 一个字符 然后继续执行下面语句
return 0;
}