图书管理系统

C语言实现的图书管理系统

/*
作品:图书管理系统v1.0
作者:黄xx
时间:2019/11/20
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Book
{
	char name[32];	//书名
	int count;			//书数
	int flag;			//是否可借
};
typedef struct Book book;

struct Student
{
	char name[32];	//学生姓名
	int id;			//学号
	char *book[5];	//借的书
	int count;			//借书数目
};
typedef struct Student stu;

book *g_book[1024] = {0};	//图书馆所有书
stu *g_student[1024] = {0};	//图书馆记录的所有借书的学生
int g_BookCount = 0;			//图书馆书的本数
int g_StudentCount = 0;		//借书的人数

/*
函数描述:图书馆初始化,存放一些图书
函数参数:无
函数返回值:无
*/
void Init()
{
	int i;
	for (i = 0; i < 3; i++)	//开启内存空间
	{
		g_book[i] = (book *)malloc(sizeof(book) * 1);
		if (NULL == g_book[i])
		{
			printf("malloc failrue!\n");
		}
		g_book[i]->flag = 1;	//可借
		g_BookCount++;
	}
	
	strcpy(g_book[0]->name, "数学");	//书名
	strcpy(g_book[1]->name, "英语");
	strcpy(g_book[2]->name, "语文");
	
	g_book[0]->count = 3;	//本数
	g_book[1]->count = 5;
	g_book[2]->count = 1;
}

/*
函数描述:显示菜单
函数参数:无
函数返回值:无
*/
void menu()	//显示菜单
{
	system("clear");

	printf("\t\t------------------------------\n");
	printf("\t\t  1、增加图书      2、删除图书\n");
	printf("\t\t  3、查看图书      4、查找图书\n");
	printf("\t\t  5、借书          6、还书    \n");
	printf("\t\t  7、借书情况      8、退出系统\n");
	printf("\t\t------------------------------\n");
}

/*
函数描述:根据id查找学生是否存在
函数参数:学号
函数返回值:学生存在返回下标 学生不存在返回-1
*/
int TraverseStudent(int id)
{
	int i;
	for (i = 0; i < g_StudentCount; i++)
	{
		if (id == g_student[i]->id)
		{
			return i;
		}
	}
	
	return -1;
}

/*
函数描述:根据书名判断书是否存在
函数参数:书名
函数返回值:存在则返回书本的下标,不存在返回-1
*/
int TraverseBook(char *n)
{
	int i;
	for (i = 0; i < g_BookCount; i++)
	{
		if (strcmp(n, g_book[i]->name) == 0)
		{
			return i;
		}
	}
	
	return -1;
}

/*111111111111111111111111111111111111111111111111
函数描述:添加图书
函数参数:无
函数返回值:无
*/
void Add()
{
	printf("\t\t请输入添加图书的名字!\n");
	char name[32] = {0};
	int num;
	
	scanf("%s",name);
	
	int result = TraverseBook(name);
	if (result != -1)	//添加已有图书
	{
		printf("\t\t该书已存在,请输入你要增加的数量:\n");
		scanf("%d",&num);
		g_book[result]->count += num;
		printf("书籍增加成功,该书现在有%d本\n",g_book[result]->count);
		return;
	}
	
	else
	{
		g_BookCount++;
		g_book[g_BookCount - 1] = (book *)malloc(sizeof(book) * 1);
		if (NULL == g_book[g_BookCount - 1])
		{
			printf("malloc fialure!\n");
		}
		g_book[g_BookCount - 1]->flag = 1;
	}
	strcpy(g_book[g_BookCount - 1]->name, name);
	printf("\t\t请输入要增加的本数:\n");
	scanf("%d", &num);
	g_book[g_BookCount - 1]->count = num;
	printf("\t\t添加成功,%s 目前已有 %d 本!\n",name, num);
	sleep(1);
}

/*2222222222222222222222222222222222
函数描述:删除图书
函数参数:无
函数返回值:无
*/
void DelBook()
{
	printf("\t\t请输入要删除的书籍名称:\n");
	char name[32] = {0};
	int i;
	scanf ("%s",name);

	int result = TraverseBook(name);
	
	//判断是否有此书
	if(-1 == result)
	{
		printf("图书馆没有此书!\n");
		return;
	}
	
	//查到此书
	else
	{
		free(g_book[result]); //释放空间 
		g_BookCount--;
		
		printf("\t\t %s 删除成功!\n", name);
		sleep(1);
	}
}

/*333333333333333333333333333333333
函数描述:删除图书
函数参数:无
函数返回值:无
*/
void ShowBook()
{
	printf("\t\t书本情况:\n");
	int i;
	for (i = 0; i < g_BookCount; i++)
	{
		printf("\t\t 书名:%s 本数 %d 是否可借 %s\n", 
		g_book[i]->name, g_book[i]->count, 
		(g_book[i]->flag == 1) ? "可借" : "不可借");
	}
	sleep(3);
}

/*4444444444444444444444444444444
函数描述:查找图书
函数参数:无
函数返回值:无
*/
void SearchBook()
{
	printf("\t\t请输入要查找的书籍名称:\n");
	char name[32] = {0};
	int i;
	scanf ("%s",name);
	
	int result = TraverseBook(name);
	
	//判断是否有此书
	if(-1 == result)
	{
		printf("图书馆没有此书!\n");
		return;
	}
	
	//查到此书,显示详细信息
	else
	{
		printf("\t\t搜索成功!\n");
		printf("\t\t 书名:%s 本数 %d 是否可借 %s\n", g_book[result]->name, g_book[result]->count, 
						(g_book[result]->flag == 1) ? "可借" : "不可借");
		sleep(3);
	}
}

/*555555555555555555555555555555
函数描述:借书部分
函数参数:无
函数返回值:无
*/
void BorrowBook()
{
	int id = 0;
	printf("\t\t请输入学号:\n");
	scanf("%d", &id);
	
	//遍历g_student数组,判断学生是否借过书
	int result = TraverseStudent(id);//判断id是否存在
	
	if (result == -1)	//不存在,给新学生申请内存
	{
		g_StudentCount++;
		g_student[g_StudentCount - 1] = (stu *)malloc(sizeof(stu) * 1);
		if(NULL == g_student[g_StudentCount - 1])
		{
			printf("malloc fialure!\n");
			return;
		}
		
		printf("\t\t要借哪本书:\n");
		char name[32] = {0};
		scanf("%s", name);
		//判断书在不在
		result = TraverseBook(name);
		
		if (-1 == result)   //书本不存在
		{
			printf("\t\t书本不存在,借书失败\n");
			return;
		}
		else
		{
			if (g_book[result]->flag == 0)
			{
				printf("\t\t该书已经被借完!\n"); 
			}
			else
			{
				g_book[result]->count--;
				if (0 == g_book[result]->count)
				{
					g_book[result]->flag = 0;    //书本不可借
				}
				g_student[g_StudentCount - 1]->id = id;    //记录学生的学号
				g_student[g_StudentCount - 1]->book[g_student[g_StudentCount - 1]->count] = (char *)malloc(sizeof(char) * 128);
				if (NULL == g_student[g_StudentCount - 1]->book)
				{
					printf("malloc failure!\n");
					return;
				}
				strcpy(g_student[g_StudentCount - 1]->book[g_student[g_StudentCount - 1]->count], name);   //保存书名
				g_student[g_StudentCount - 1]->count++;    //借书的本数加一
				printf("\t\t借书成功\n");
                }
        	}
		}
	else
	{
		if (g_student[result]->count == 3 )
		{
			printf("借书已达上限!\n");
			sleep(1);
			return;
		}
		
		else
		{
			printf("\t\t要借哪本书?\n");          
			char name1[32]={0};
			scanf("%s",name1);
			//判断书是否存在
			int result1 = TraverseBook(name1);
			{
				if (-1 == result1)//书本不存在
				{
					printf("\t\t书本不存在,借书失败!\n");
					return;
				}
				else
				{
					if (g_book[result1]->flag == 0)                           
					{
						printf("\t\t该书已经被借完!\n");                  
					}
					
					else		//书本存在
					{              
						g_book[result1]->count--;
						if (0 == g_book[result1]->count)
						{
							g_book[result]->flag = 0;  //书本不可借
						}

    				 	//给这个学生的书名分配内存                      
    					g_student[result]->book[g_student[result]->count] = (char*)malloc(sizeof(char)*128);
    					if (NULL == g_student[result]->book)
    					{
      						printf("malloc failure!\n");
      						return;
    					}
    					strcpy(g_student[result]->book[g_student[result]->count],name1);  
						g_student[result]->count++;
						printf("\t\t借书成功!\n");
						sleep(1);
					}
				}
			}
		}
	}
}

/*666666666666666666
函数描述:还书
函数参数:无
函数返回值:无
*/
void ReturnBook()
{
	int id = 0;
	
	printf("\t\t请输入学号: \n");
	scanf("%d", &id);

	printf("\t\t请输入要还的书籍名称:\n");
	char name[32] = {0};
	int i;
	scanf ("%s",name);
	
	int result = TraverseBook(name);
	
	if (-1 == result)   //书本不存在
	{
		printf("\t\t书本不存在,结束失败\n");
		return;
	}
	
	else				//书本存在
	{
		if (0 == g_book[result]->count)
		{
			g_book[result]->flag = 1;    //书本可借
		}
		g_book[result]->count++;
		
		printf("\t\t还书成功\n");
		sleep(1);
	}
	
}

/*77777777777777777777777777777777777777
函数描述:借书情况
函数参数:无
函数返回值:无
*/
void BorrowCon()
{
	int id, i;
	
	printf("\t\t请输入学号: \n");
	scanf("%d", &id);
	
	int result = TraverseStudent(id);

	if (-1 == result)	//没查询到此人
	{
		printf("没有此人\n");
	}
	else 				//查询到此人
	{
		printf("\t\t借书数量:%d\n",g_student[result]->count);
		for(i = 0; i < g_student[result]->count; i++)
   		{
     		printf("\t\t书名:%s\n",g_student[result]->book[i]);
   		}
		sleep(5);
	}
}

int main()
{
	char choice[2] = {0};
	Init();
	
	while(1)
	{	
		menu();
		scanf("%c", &choice);
		
		switch(choice[0])
		{
			case '1':
				Add();
				break;
			case '2':
				DelBook();
				break;
			case '3':
				ShowBook();
				break;
			case '4':
				SearchBook();
				break;
			case '5':
				BorrowBook();
				break;
			case '6':
				ReturnBook();
				break;
			case '7':
				BorrowCon();
				break;
			case '8':
				exit(0);
				break;
			default:
				printf("输入有误!\n");
				break;
		}	
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值