⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 图书借阅管理系统.cpp

📁 这是一个C++编写的图书馆的管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <iostream.h>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iomanip.h>
#include <time.h>
#define MAX    100
#define MAX1   2                 //本科生最大借阅量
#define MAX2   5                 //研究生最大借阅量
#define MAX3   10                //教师最大借阅量
#define MAX4   100               //管理员最大借阅量
//书的结构体
typedef struct book
{
	char name[80];              //图书名
	long num;                   //图书编号
	float price;                //图书单价
	char writername[20];        //作者姓名
	char publish[30];           //出版社名称
	int yes;                    //判断书是否存在或者已经借出,1存在,0借出
	int membernum;              //借书人编号
	struct book *next;          //结点指针
}Book,*BookList;  


//借书时间结构体
typedef struct Time
{
	int	year;
	int	month;
	int	day;
}data;


//会员借的书的结构体
typedef struct BorrowBook
{
	long num;                   //借的书的编号
	struct Time time;           //借书时间
	struct Time borrowtime;     //借书期限
}BBook;


//会员的结构体
typedef struct member
{
	char name[20];              //会员姓名
	char sex;                   //会员性别,男m,女f
	long num;                   //会员编号
	int style;                  //会员类型,1:本科生;2:研究生;3:教师;4:管理员;
	int max;                    //会员借书数目,初始为0
	int yes;                    //会员是否借书,1是,0否
	BBook t[MAX];               //会员借的书的数组
	struct member *next;        //结点指针
}Member,*MemberList;




//增加图书
Book *Init_B()                  //初试化图书链表
{
	Book *H;                   
	H=(Book *)malloc(sizeof(Book));
	if(!H) exit(1);
	H->next=NULL;
	return H;
}
int BookAdd(BookList &H)               //建立一个带头结点的链表用来存储图书信息
{
	int i=0;                    //统计要增加的图书量
	Book *p,*q;
	p=(Book *)malloc(sizeof(Book));
	if(!p) exit(1);
	if(H->next==NULL)
	{
		cout<<"输入图书编号:"<<endl;
		cin>>p->num;
		if(p->num==0)           //退出"增加图书"
		{
			cout<<"             共计"<<i<<"本图书入库!"<<endl;
			system("cls");      //清屏函数
			return 1;
		}
		cout<<"输入书名:"<<endl;
		cin>>p->name;
		cout<<"输入图书价格:"<<endl;
		cin>>p->price;
		cout<<"输入作者姓名:"<<endl;
		cin>>p->writername;
		cout<<"输入出版社名称:"<<endl;
		cin>>p->publish;
		p->yes=1;              //1表示没有借出
		p->next=NULL;
		H->next=p;
		q=p;
		++i;
		cout<<endl;
	}
	else
	{
		q=H;
		while(q->next!=NULL)
			q=q->next;
		p->num=1;                      //进入循环的条件
		p->next=NULL;
	}
	while(p->num!=0)                   //以图书编号作为判断链表是否结束
	{
		p=(Book *)malloc(sizeof(Book));
		if(!p) exit(1);
		cout<<"输入图书编号:"<<endl;
		cin>>p->num;
		if(p->num==0)                  //退出"增加图书"
		{
			cout<<"              共计"<<i<<"本图书入库!"<<endl;
			break;
		}
		cout<<"输入书名:"<<endl;
		cin>>p->name;
		cout<<"输入图书价格:"<<endl;
		cin>>p->price;
		cout<<"输入作者姓名:"<<endl;
		cin>>p->writername;
		cout<<"输入出版社名称:"<<endl;
		cin>>p->publish;
		p->yes=1;                      //1表示没有借出
		p->next=NULL;
		q->next=p;
		q=p;
		++i;
		cout<<endl;
	}
	return 1;
}





//查询图书
int Search_BookName(BookList &H)            //按书名查询
{
	Book *p;
	p=H->next;
	char n[80];
	int flag=0;
	cout<<"输入要查询的书名:";
	cin>>n;
	for(;p!=NULL;p=p->next)
	{
		if(strcmp(p->name,n)==0)
		{
			if(flag==0)
				cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
			cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
			if(p->yes==1)
				cout<<setw(15)<<"否"<<endl;
			else
				cout<<setw(15)<<"是"<<endl;
			flag=1;
			continue;
		}
	}
	if(p==NULL&&flag==0)
		cout<<"没有相关信息!"<<endl;
	return 1;
}
int Search_BookNum(BookList &H)             //按编号查询
{
	Book *p;
	p=H->next;
	long n;
	int flag=0;
	cout<<"输入要查询的书的编号:";
	cin>>n;
	for(;p!=NULL;p=p->next)
	{
		if(n==p->num)
		{
			if(flag==0)
				cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
			cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
			if(p->yes==1)
				cout<<setw(15)<<"否"<<endl;
			else
				cout<<setw(15)<<"是"<<endl;
			flag=1;
			continue;
		}
	}
	if(p==NULL&&flag==0)
		cout<<"没有相关信息!"<<endl;
	return 1;
}
int Search_BookWritername(BookList &H)      //按作者名查询
{
	Book *p;
	p=H->next;
	int flag=0;
	char n[30];
	cout<<"输入要查询的书的作者名:";
	cin>>n;
	for(;p!=NULL;p=p->next)
	{
		if(strcmp(p->writername,n)==0)
		{
			if(flag==0)
				cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
			cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
			if(p->yes==1)
				cout<<setw(15)<<"否"<<endl;
			else
				cout<<setw(15)<<"是"<<endl;
			flag=1;
			continue;
		}
	}
	if(p==NULL&&flag==0)
		cout<<"没有相关信息!"<<endl;
	return 1;
}
int Search_Publish(BookList &H)             //按出版社查询
{
	Book *p;
	p=H->next;
	int flag=0;
	char n[50];
	cout<<"输入要查询的书的出版社名称:";
	cin>>n;
	for(;p!=NULL;p=p->next)
	{
		if(strcmp(p->publish,n)==0)
		{
			if(flag==0)
				cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
			cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
			if(p->yes==1)
				cout<<setw(15)<<"否"<<endl;
			else
				cout<<setw(15)<<"是"<<endl;
			flag=1;
			continue;
		}
	}
	if(p==NULL&&flag==0)
		cout<<"没有相关信息!"<<endl;
	return 1;
}
int Search_AllB(BookList &H)               //查询所有图书信息
{
	Book *p;
	p=H->next;
	int i=0,flag=0;
	for(;p!=NULL;p=p->next)
	{
			if(flag==0)
				cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
			cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
		if(p->yes==1)
			cout<<setw(15)<<"否"<<endl;
		else
			cout<<setw(15)<<"是"<<endl;
		flag=1;
		i++;
	}
	cout<<"                                               共计"<<i<<"本书。"<<endl;
	return 1;
}
int BookSearch(BookList &H)
{
	int m;
	while(m!=0)
	{
		cout<<endl<<"                              图书查询"<<endl<<endl;
		cout<<"              *******************************************"<<endl;
		cout<<"              *                                         *"<<endl;
		cout<<"              *  1. 按书名查询          2. 按编号查询   *"<<endl;
		cout<<"              *                                         *"<<endl;
		cout<<"              *  3. 按作者名查询        4. 按出版社查询 *"<<endl;
		cout<<"              *                                         *"<<endl;
		cout<<"              *  5. 查询所有图书信息    0. 退出         *"<<endl;
		cout<<"              *                                         *"<<endl;
		cout<<"              *******************************************"<<endl;
		cout<<"                             请选择(0--4):";
		cin>>m;
		switch(m)
		{
			case 1:system("cls"); Search_BookName(H); break;        //按书名查询 
			case 2:system("cls"); Search_BookNum(H); break;         //按编号查询
			case 3:system("cls"); Search_BookWritername(H); break;  //按作者名查询
			case 4:system("cls"); Search_Publish(H); break;         //按出版社查询
			case 5:system("cls"); Search_AllB(H); break;            //查询所有图书信息
			case 0:system("cls"); break;                            //退出
		}
	}
	return 1;
}




//删除图书 
int BookDel(BookList &H)                           //以图书编号作为主键进行删除
{
	Book *p;
	long n;
	int flag=0;
	p=H;
	cout<<"输入要删除的书的编号:"<<endl;
	cin>>n;
	for(;p!=NULL;p=p->next)
	{
		if(p->next!=NULL&&p->next->num==n)
		{
			if(p->next->yes==0)
			{
				cout<<"当前图书被借出,不能删除!"<<endl;
				return 1;
			}
			p->next=p->next->next;            //删除语句
			cout<<"                              成功删除!"<<endl;
			flag=1;                           //成功删除标记
			break;
		}
	}
	if(p==NULL&&flag==0)
		cout<<"                               删除不成功!"<<endl;           //已经被删除或没有这本书
	return 1;
}




//图书借阅
int Member_Y(MemberList &L,long num)                      //判断是否是会员,1是,0否。只有会员才有权限借书
{
	Member *p;
	p=L;
	for(;p!=NULL;p=p->next)
		if(p->num==num)
			return 1;
	return 0;
}
int BookBorrow(BookList &H,MemberList &L)                 //借阅时以编号作为主键      
{
	Book *p,*s;
	Member *q;
	long m=1,num;
	int t=0,flag=0,max;
	cout<<"输入会员编号:"<<endl;
	cin>>num;
	if(Member_Y(L,num)==1)
	{
		q=L;
		for(;q!=NULL;q=q->next)
			if(q->num==num) break;
		while(m)
		{
			if(t==0)
				cout<<"输入要借阅的书的相关信息:"<<endl;
			t=1;
			cout<<"编号:";
			cin>>m;
			for(s=H->next;s!=NULL;s=s->next)
				if(s->num==m) break;
			if(s==NULL)
			{
				cout<<"没有这本书!"<<endl;
				continue;
			}
			for(p=H->next;p!=NULL;p=p->next)
			{
				if(p->num==m)
				{
					if(p->yes==0)
					{
						cout<<"当前图书被借出,不能借阅!"<<endl;
						break;
					}
					if(q->style==1) max=MAX1;
					else if(q->style==2) max=MAX2;
					else if(q->style==3) max=MAX3;
					else if(q->style==4) max=MAX4;
					q->max++;
					if(q->max>max)
					{
						cout<<"你已经借的书超过了最大借阅量,不能再借书!"<<endl;
						q->max--;
						return 1;
					}
					p->yes=0;
					p->membernum=q->num;
					q->yes=1;
					for(int i=1;i<=max;i++)
						if(q->t[i].num==0) break;
					q->t[i].num=p->num;
					time_t timer=time(0);//调用time()函数获取当前时间
					struct tm *ptrtime=localtime(&timer);//调用localtime()函数将获得的系统时间转化为指向struct tm的指针指向的结构体
					q->t[i].time.year=1900+ptrtime->tm_year;
					q->t[i].time.month=1+ptrtime->tm_mon;
					q->t[i].time.day=ptrtime->tm_mday;
					if(q->t[i].time.month>=10)
					q->t[i].borrowtime.year=1900+ptrtime->tm_year+1;
					else
						q->t[i].borrowtime.year=1900+ptrtime->tm_year;
					q->t[i].borrowtime.month=(1+ptrtime->tm_mon+3)%12;
					q->t[i].borrowtime.day=ptrtime->tm_mday;
					cout<<"                           成功借出!"<<endl;
					flag=1;                           //成功借出标记
					break;
				}
			}
			if(p==NULL&&flag==0)
				cout<<"                               借书不成功!"<<endl;           //没有这本书
		}
	}
	else 
		cout<<"对不起,您不是会员,借书失败!如果想进行此操作,请先注册!"<<endl;
	return 1;
}




//还书
int BookReturn(BookList &H,MemberList &L)                         //还书时以编号作为主键
{
	Book *p,*s;
	Member *q;
	long m=1;
	int flag=0,max;
	cout<<"输入要归还的书的相关信息:"<<endl;
	while(m)
	{
		cout<<"编号:";
		cin>>m;
		for(s=H->next;s!=NULL;s=s->next)
			if(s->num==m) break;
		if(s==NULL)
		{
			cout<<"没有这本书!"<<endl;
			continue;
		}
		for(p=H->next;p!=NULL;p=p->next)
		{
			if(p->num==m)
			{
				if(p->yes==1)
				{
					cout<<"这本书没有借出,还书失败!"<<endl;
					break;
				}
				for(q=L;q!=NULL;q=q->next)
					if(q->num==p->membernum) break;
				p->yes=1;
				if(q->style==1) max=MAX1;
				else if(q->style==2) max=MAX2;
				else if(q->style==3) max=MAX3;
				else if(q->style==4) max=MAX4;
				for(int k=1;k<=max;k++)            //从借的书的数组中删除这本书
					if(q->t[k].num==p->num)
					{
						q->t[k].num=0;
						q->max--;
						break;
					}
				cout<<"                              还书成功!"<<endl;
				if(q->max==0)
					q->yes=0;
				flag=1;                           //成功还书标记
				break;
			}
		}
		if(p==NULL&&flag==0)
			cout<<"                               还书不成功!"<<endl;           //没有借这本书
	}
	return 1;
}




//增加会员
Member *Init_M()                  //初试化会员链表
{
	Member *L;                   
	L=(Member *)malloc(sizeof(Member));
	if(!L) exit(1);
	L->next=NULL;
	return L;
}
int MemberAdd(MemberList &L)               //建立一个带头结点的链表用来存储会员信息
{
	int i=0,k=0,max;                      //统计要增加的会员人数
	Member *p,*q,*s;
	p=(Member *)malloc(sizeof(Member));
	if(!p) exit(1);
	if(L->next==NULL)
	{
		cout<<"输入编号:"<<endl;   
		cin>>p->num;
		if(p->num==0)               //退出"增加会员"
		{
			cout<<"             共计"<<k<<"名会员入会!"<<endl;
			system("cls");          //清屏函数
			return 1;
		}
		cout<<"输入姓名:"<<endl;
		cin>>p->name;
		for(s=L->next;s!=NULL;s=s->next)
			if(s->num==p->num)
			{
				cout<<"同一会员不能重复注册!"<<endl;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -