c语言图书馆管理系统(作业
  hI6KHgNRyc1X 2023年11月18日 26 0
#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;
		}
		}
	}

}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月18日 0

暂无评论

推荐阅读
  anLrwkgbyYZS   2023年12月30日   28   0   0 i++iosi++ioscici
  anLrwkgbyYZS   2023年12月30日   32   0   0 ideciciMaxideMax
hI6KHgNRyc1X