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图书借阅管理系统的主要内容,如果未能解决你的问题,请参考以下文章