#define _CRT_SECURE_NO_WARNINGS
#define Idmax 32
#define Max 64
#include <stdio.h>
#include <stdlib.h>
//图书的结构体
typedef struct
{
char name[Idmax];
int id;
char author[Idmax];
int nownum;
int allnum;
}book;
//借阅者的结构体
typedef struct
{
int id;
int bookid;
int date;
int isReturn;//初始为0,有书或者未还为1
}borrower;
void base()
{
printf("**************************************\n");
printf("****** 菜 单 ********\n");
printf("****** 1.入库 2.删除 ********\n");
printf("****** 3.借阅 4.归还 ********\n");
printf("****** 5.查找 0.退出 ********\n");
printf("****** 归还前一人只能借一本书 ********\n");
printf("**************************************\n");
}
//判断两个数组是否相等,相等返回1
//书名中不能出现0
int IsEqual(char* a, char* b)
{
int i = 0;
int x = 0;
x = sizeof(a) > sizeof(b) ? sizeof(a) : sizeof(b);
for (i = 0; i < x; i++)
{
if (a[i] != b[i] && a[i] != 0 && b[i] != 0)
{
return 0;
}
}
return 1;
}
void IntoShelf(char* name,book* shelf)
{
int i = 0, j = 0, n = 0, m = 0;
for (n = 0; n < Idmax; n++)
{
if (shelf[n].id != 0)
{
i++;//一共有i个有效数据
}
}
for (j = 0; j < i; j++)
{
if (IsEqual(name,shelf[j].name)==1)
{
printf("此书曾在库中。\n");
shelf[j].allnum++;
shelf[j].nownum++;
printf("同名书籍现在书架剩余%d本,一共剩余%d本,序号为%d。\n", shelf[j].nownum, shelf[j].allnum,shelf[j].id);
//for (n = 0; n < Idmax; n++)
//{
// shelf[i].name[n] = shelf[j].name[n];
//}
//shelf[i].id = i + 1;
//printf("本书的id为%d。\n", shelf[i].id);
//for (n = 0; n < Idmax; n++)
//{
// shelf[i].author[n] = shelf[j].author[n];
//}
//shelf[i].allnum = shelf[j].allnum;
//shelf[i].nownum = shelf[j].nownum;
////要把所有同名书籍的现存量修正
//for (n = 0; n < Max; n++)
//{
// if (IsEqual(shelf[n].name, name)==1)
// {
// shelf[n].allnum++;
// shelf[n].nownum++;
// }
//}
m++;
break;
}
}
if (m == 0)
{
printf("此书不在库中。\n");
for (n = 0; n < Idmax; n++)
{
shelf[i].name[n] = name[n];
}
shelf[i].allnum = 1;
shelf[i].nownum = 1;
shelf[i].id = i + 1;
printf("请输入本书作者:\n");
char ch;
int y = 0;
while ((ch = getchar()) != '@')
{
shelf[i].author[y] = ch;
y++;
}
printf("同名书籍现在书架剩余%d本,一共剩余%d本,序号为%d。\n", shelf[i].nownum, shelf[i].allnum,shelf[i].id);
}
}
//清除一本书
void Clear(int id, book* shelf)
{
int n = 0;
for (n = 0; n < Max; n++)
{
if (shelf[n].id == id)
{
printf("书架中有这本书!\n");
shelf[n].allnum = 0;
shelf[n].nownum = 0;
printf("删除后,同名书籍现在书架剩余%d本,一共剩余%d本。\n", shelf[n].nownum , shelf[n].allnum );
printf("已清理全部库存。\n");
}
}
}
//借阅一本书
void Lentbook(book* shelf,borrower* man)
{
int i = 0;
int n = 0;
int id = 0;
int date = 0;
printf("请输入要借阅的书序号:\n");
scanf("%d", &n);
printf("请输入借阅者的图书证号:\n");
scanf("%d", &id);
while (shelf[i].id != n&&shelf[i].id!=0)
{
i++;
}
if (shelf[i].id == n)
{
printf("图书馆有这本书,库存量为%d本。\n", shelf[i].nownum);
if (man[id].isReturn == 0)
{
if (shelf[i].nownum > 0)
{
printf("请输入归还日期:(月日)\n");
scanf("%d", &date);
man[id].id = id;
man[id].bookid = n;
man[id].date = date;
man[id].isReturn = 1;
printf("卡号%d借阅成功!\n", id);
shelf[i].nownum--;
}
else
{
printf("库存量不足,借阅失败。\n");
}
}
else
{
printf("当前借阅已有书籍,请归还后再借阅!\n");
}
}
else
{
printf("图书馆没有这本书。\n");
}
}
void ReturnBook(borrower* man,book* shelf)
{
int id = 0;
printf("请输入借阅者id:\n");
scanf("%d", &id);
if (man[id].isReturn == 0)
{
printf("您尚未借阅任何书籍,无法归还!\n");
}
else
{
printf("%d号借阅者,成功归还序号为%d的书籍。\n", id, man[id].bookid);
man[id].isReturn = 0;
shelf[man[id].bookid - 1].nownum++;
printf("序号为%d的书籍,目前库存%d本,共%d本。",
man[id].bookid, shelf[man[id].bookid - 1].nownum, shelf[man[id].bookid - 1].allnum);
}
}
void FindBook(book* shelf)
{
int n = 0;
int i = 0;
int j = 0;
printf("请输入要查找的图书序号:");
scanf("%d", &n);
while (shelf[i].id != n && shelf[i].id != 0)
{
i++;
}
if (shelf[i].id == n)
{
printf("图书馆的记录中有这本书。书名为:");
while (shelf[i].name[j] != 0)
{
printf("%c", shelf[i].name[j]);
j++;
}
printf("作者为:\n");
j = 0;
while (shelf[i].author[j] != 0)
{
printf("%c", shelf[i].author[j]);
j++;
}
if (shelf[i].allnum == 0)
{
printf("但本书已被清除,目前库存为0,共0本。\n");
}
else
{
printf("目前库存为%d本,共%d本。\n", shelf[i].nownum, shelf[i].allnum);
}
}
else
{
printf("图书馆没有这本书。\n");
}
}
void Findman(borrower* man)
{
int n = 0;
printf("请输入借阅者id:");
scanf("%d", &n);
if (man[n].isReturn == 1)
{
printf("id为%d的借阅者借了图书序号为%d的书,计划在%d之前归还。\n",
n, man[n].bookid, man[n].date);
}
else
{
printf("id为%d的借阅者目前未借书或者已归还。\n", n);
}
}
int main()
{
base();
book shelf[Max] = { 0 };
borrower man[Max] = { 0 };
int ncase = 1;
while (ncase)
{
printf("请选择您要做的操作:\n");
scanf("%d", &ncase);
system("cls");
base();
switch (ncase)
{
//1,入库
case 1:
{
char ch;
char name[Idmax] = { 0 };
printf("请输入要入库的书名:\n");
int i = 0;
while ((ch = getchar()) != '@')
{
name[i] = ch;
i++;
}
IntoShelf(&name, &shelf);
break;
}
case 2:
{
char ch;
char name[Idmax] = { 0 };
printf("请输入要删除的书序号:\n");
int i = 0;
scanf("%d", &i);
Clear(i, &shelf);
break;
}
case 3:
{
Lentbook(&shelf,&man);
break;
}
case 4:
{
ReturnBook(&man, &shelf);
break;
}
case 5:
{
int n = 0;
printf("查找图书情况请输入1,查找借阅情况请输入2:");
scanf("%d", &n);
if (n == 1)
{
FindBook(&shelf);
}
else if (n == 2)
{
Findman(&man);
}
else
{
printf("输入错误!\n");
}
break;
}
}
}
}