2021-07-08图书借阅管理系统

Posted 如风如影�

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-07-08图书借阅管理系统相关的知识,希望对你有一定的参考价值。

图书借阅管理系统

背景资料:
1)每种图书都有书名、书号(ISBN)、作者(译者)、出版社、定价和数量等;
2)借书证记录有借阅者的基本信息,如姓名、所在单位、身份(教师和学生)等;
3)凭借书证借书,学生最多能借5本书,教师最多能借10本书,借书期限最长为60天。
设计要求:
1)图书基本情况的录入、修改、删除等基本操作;
2)办理借书卡功能;
3)实现图书的借阅和续借功能;
4)实现图书的归还功能;
5)能方便的对图书进行查询,实现多条件查询。
6)创建触发器,分别实现借书和还书时自动更新图书的在册数量。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include "date.h"
#include "file.h"
#include "struct.h"
#include "main.h"

/*
void Main_menu();  //主菜单页面
void Search_menu();  //查询图书菜单页面
void Insert_book(struct Books* head);  //图书信息录入
void Get_booklist(struct Books* head);       //图书信息浏览
void Search_book(struct Books* head);   //图书信息查询
void Search_by_name(char* name, struct Books* p);  //通过书名查询结果
void Search_by_author(char* author, struct Books* p);  //通过作者名查询结果
void Search_by_press(char* press, struct Books* p);  //通过出版社查询结果
void Delete_book(struct Books* head);  //删除图书信息
int Compare_by_bid(struct Books* p, char* bid);   //判断结点的图书编号是否与用户输入的相匹配
void Lend_book(struct Books* head, struct Readers* reader);  //借书业务  
int Verify_reader(int rid, struct Readers* reader);   //验证读者信息
int Creat_reader(int rid, struct Readers* reader);   //创建读者信息
void Insert_lendinfo(struct Books* p, struct Readers* reader, int rid);  //添加读者的借阅信息
void Return_book(struct Books* head, struct Readers* reader);   //还书业务
int Compare_by_rid(struct Readers* p, int rid);  //判断结点的读者证件号是否与用户输入的相匹配
int Is_late(int index, struct Readers* p);  //判断是否预期
void Show_hotbooks(struct Books* head);   //查看热门图书
struct Books* Sort_by_times(struct Books* head);  //按照借阅次数从高到低排序*/




int main() {
	int choice;//选择的序号 
	struct Books* head = NULL;
	struct Readers* reader = NULL;

	while (1)//菜单写成死循环的形式,能每次都返回菜单。 
	{
		Main_menu();//主菜单 
		head = Read_bookinfo();
		reader = Read_readerinfo();
		printf("请输入以上序号进行选择:\\n");
		scanf("%d", &choice);
		switch (choice)
		{
		case 1:                                      //信息录入
			Insert_book(head);                  //调用函数录入图书信息
			system("pause");
			break;

		case 2:										 //信息浏览
			Get_booklist(head);					
			system("pause");
			break;
		case 3:										 //信息查询
			Search_book(head);                      
			system("pause");
			break;

		case 4:										 //信息删除
			Delete_book(head);					
			system("pause");
			break;

		case 5:										 //借书
			Lend_book(head, reader);
			system("pause");
			break;

		case 6:										 //还书
			Return_book(head, reader);
			system("pause");
			break;

		case 7:                                      //查看热门图书
			
			system("pause");
			break;

		case 0:                                        //退出
			exit(0);
			system("pause");

		default:
			printf("输入错误,请重新输入!\\n");
			system("pause");
			break;
		}
	}

	return 0;
}

void Main_menu() {
	system("cls");
	printf("\\t**************************************************\\n");
	printf("\\t         欢迎进入图书借阅管理系统\\n");
	printf("\\t**************************************************\\n");
	printf("\\t******           ****************           ******\\n");
	printf("\\t***************** 1.图书信息录入 *****************\\n");
	printf("\\t***************** 2.图书信息浏览 *****************\\n");
	printf("\\t***************** 3.图书信息查询 *****************\\n");
	printf("\\t***************** 4.图书信息删除 *****************\\n");
	printf("\\t***************** 5.借书业务 *****************\\n");
	printf("\\t***************** 6.还书业务 *****************\\n");
	printf("\\t***************** 7.热门图书 *****************\\n");
	printf("\\t***************** 0.退出         *****************\\n");
	printf("\\t******           ****************           ******\\n");
	printf("\\t******      请选择[1/2/3/4/5/6/7/8/0]       ******\\n");
	printf("\\t**************************************************\\n");
}

void Search_menu() {
	system("cls");
	printf("\\t**************************************************\\n");
	printf("\\t               请选择你查询的检索项\\n");
	printf("\\t**************************************************\\n");
	printf("\\t******           ****************           ******\\n");
	printf("\\t*****************   1.书名       *****************\\n");
	printf("\\t*****************   2.作者名     *****************\\n");
	printf("\\t****************    3.出版社      ****************\\n");
	printf("\\t*****************   0.退出       *****************\\n");
	printf("\\t******           ****************           ******\\n");
	printf("\\t******           请选择[1/2/3/0]            ******\\n");
	printf("\\t**************************************************\\n");
}

//录入图书信息链表插入完成 
void Insert_book(struct Books* head) {
	system("cls");                      //清屏
	struct Books* p1 = NULL;
	struct Books* p2 = head;
	char confirm[5];   //用于确认是否录入图书信息

	if (p2 != NULL)               //遍历到图书信息链表尾部
	{
		while (p2->next != NULL)
		{
			p2 = p2->next;
		}
	}
	p1 = (struct Books*)malloc(sizeof(struct Books));
	printf("请输入图书编号:");
	scanf("%s", p1->bid);
	printf("\\n请输入图书名称: ");
	scanf("%s", p1->name);
	printf("\\n请输入图书作者: ");
	scanf("%s", p1->author);
	printf("\\n请输入图书出版社: ");
	scanf("%s", p1->press);
	printf("\\n请输入图书出版日期: ");
	scanf("%s", p1->press_date);
	printf("\\n请输入图书价格: ");
	
	scanf("%f", &p1->price);
	printf("\\n请输入图书数量: ");
	scanf("%d", &p1->amount);
	printf("\\n请输入图书存放位置: ");
	scanf("%s", p1->location);
	p1->times = 0;  //图书借阅次数默认为0

	printf("\\n是否添加该图书信息? (YES / NO)\\n");
	scanf("%s", confirm);
	if (strcmp(confirm, "NO") == 0) {
		free(p1);   //取消录入该图书信息,释放结构体指针的内存空间
	}
	else
	{   //录入图书的过程(即插入链表的步骤)
		if (head == NULL)
		{
			head = p1;
		}
		else
		{
			p2->next = p1;
		}
		p2 = p1;
		if (p2 != NULL)
		{
			p2->next = NULL;
		}
		Save_bookinfo(head);  //将图书信息保存到二进制文件中
	}
}


//浏览图书信息
void Get_booklist(struct Books* head) {
	struct Books* p1 = head;
	system("cls");
	if (head == NULL)
	{
		printf("图书信息为空,请录入图书信息!\\n");
	}
	while (p1 != NULL)  //遍历链表
	{
		printf("图书编号: %s\\n", p1->bid);
		printf("图书名称: %s\\n", p1->name);
		printf("图书作者:  %s\\n", p1->author);
		printf("出版社:  %s\\n", p1->press);
		printf("出版社日期:  %s\\n", p1->press_date);
		printf("价格: %.2f\\n", p1->price);
		printf("图书数量: %d\\n", p1->amount);
		printf("存放位置:  %s\\n", p1->location);
		printf("借阅次数: %d\\n", p1->times);
		printf("\\n");
		p1 = p1->next;
	}
}

//查询图书信息
void Search_book(struct Books* head) {
	struct Books* p1 = head;
	int choice;  //用于选择检索类型
	char name[50], author[50], press[50];

	Search_menu();
	printf("请输入以上序号进行选择:\\n");
	scanf("%d", &choice);

	switch (choice)
	{
	case 1:              //通过书名查询
		system("cls");
		printf("请输入你要查询图书的书名:\\n");
		scanf("%s", name);
		Search_by_name(name, p1); //通过书名查询图书信息
		break;

	case 2:         //通过作者查询
		system("cls");
		printf("请输入你要查询图书的作者名: \\n");
		scanf("%s", author);
		Search_by_author(author, p1); //通过作者查询图书信息
		break;

	case 3:        //通过出版社查询
		system("cls");
		printf("请输入你要查询图书的出版社: \\n");
		scanf("%s", press);
		Search_by_press(press, p1);  //通过出版社查询图书信息
		break;

	default:
		break;
	}

}

//通过书名查询图书信息
void Search_by_name(char* name, struct Books* p) {
	int tmp = 0;
	while (p != NULL)  //遍历链表
	{
		if (strcmp(p->name, name) == 0)
		{
			tmp = 1;
			printf("图书编号: %s\\n", p->bid);
			printf("图书名称: %s\\n", p->name);
			printf("图书作者:  %s\\n", p->author);
			printf("出版社:  %s\\n", p->press);
			printf("出版社日期:  %s\\n", p->press_date);
			printf("图书价格: %.2f\\n", p->price);
			printf("图书数量: %d\\n", p->amount);
			printf("存访位置:  %s\\n", p->location);
			printf("借阅次数: %d\\n", p->times);

			printf("**********************\\n");
		}
		p = p->next;
	}
	if (tmp == 0)
	{
		system("cls");
		printf("找不到该图书信息!\\n");
	}
}

//通过作者查询图书信息
void Search_by_author(char* author, struct Books* p) {
	int tmp = 0;
	while (p != NULL)
	{
		if (strcmp(p->author, author) == 0)
		{
			tmp = 1;
			printf("图书编号: %s\\n", p->bid);
			printf("图书名称: %s\\n", p->name);
			printf("图书作者:  %s\\n", p->author);
			printf("出版社:  %s\\n", p->press);
			printf("出版社日期:  %s\\n", p->press_date);
			printf("图书价格: %.2f\\n", p->price);
			printf("图书数量: %d\\n", p->amount);
			printf("存访位置:  %s\\n", p->location);
			printf("借阅次数: %d\\n", p->times);

			printf("\\n");
		}
		p = p->next;
	}
	if (tmp == 0)
	{
		system("cls");
		printf("找不到该图书信息!\\n");
	}
}

//通过出版社查询图书信息
void Search_by_press(char* press, struct Books* p) {
	int tmp = 0;
	while (p != NULL)
	{
		if (strcmp(p->press, press) == 0)
		{
			tmp = 1;
			printf("图书编号: %s\\n", p->bid);
			printf("图书名称: %s\\n", p->name);
			printf("图书作者:  %s\\n", p->author);
			printf("出版社:  %s\\n", p->press);
			printf("出版社日期:  %s\\n", p->press_date);
			printf("图书价格: %.2f\\n", p->price);
			printf("图书数量: %d\\n", p->amount);
			printf("存访位置:  %s\\n", p->location);
			printf("借阅次数: %d\\n", p->times);

			printf("\\n");
		}
		p = p->next;
	}
	if (tmp == 0)
	{
		system("cls");
		printf("找不到该图书信息!\\n");
	}
}

//删除图书信息 ()
void Delete_book(struct Books* head) {
	struct Books* p1, * p2;
	char bid[6];
	int confirm = 0;

	p1 = p2 = NULL;
	system("cls");
	printf("请输入你要删除的图书编号: \\n");
	scanf("%s", bid);
	if (Compare_by_bid(head, bid) == 1) {   //判断第一个链表结点是否符合要求
		printf("\\n是否删除该图书信息? (1--删除   0--取消) \\n");
		scanf("%d", &confirm);
		if (confirm == 1) {
			p1 = head;
			head = head->next;
			free(p1);

			Save_bookinfo(head);  //将图书信息保存到二进制文件中
			return;
		}
		
		return;
	}
	for (p1 = head;  p1->next != NULL; ) //从第二个链表结点开始遍历编号符合的图书
	{
		p2 = p1以上是关于2021-07-08图书借阅管理系统的主要内容,如果未能解决你的问题,请参考以下文章

2021-07-08图书借阅管理系统

C语言 图书借阅管理系统

用java编写一个 图书馆图书借阅管理系统

放出一批jsp图书管理系统图书借阅系统源码代码运行

图书借阅和归还管理java系统源码/图书馆管理必备系统

数据库系统原理课程设计 -----图书借阅管理系统