课程设计之图书管理系统

/**************************************
*版权所有(C)2015,张佳慧
*
*文件名称:图书管理系统
*文件标识:无
*内容摘要:
*其他说明:无
*当前版本:V1.0
*作 者:张佳慧
*完成日期:20151225
*
*修改记录:
*修改日期:20151225
*版本号:V1.0
*****************************************
*/
#include<iostream>
#include<conio.h>//getch();
using namespace std;

#define Max 3 //最多借书数 
int n;//当前借了几本书
int w;//是否确定输入

struct Borrow//借阅信息
{
	int borrow_bid;
	int date;//归还日期
};//关于借书的节点类型用Borrow表示

struct Book//图书信息,
{
	int bid;
	char bname[20];
	char writer[20];
	int xianyou;//图书现有数量
	int kucun;//库存量
	struct Book *next;//指向后继节点
};//关于图书的节点类型用Book表示
Book *bhead;

struct Reader//读者信息
{
	int rid; 
	char rname[20];
	int borrow_bnum;//已借书数
	Borrow borrow[Max];//读者的借阅情况
	struct Reader *next;
};//关于读者的节点类型用Reader表示
Reader *rhead;

void new_reader();//新读者注册
void new_book();//采编入库
void init_book();//初始化,图书入库 
void init_reader();//初始化,新读者注册       
int function();//功能表            
void choose(); //功能选择               
void borrow_book();//借书     
void return_book(); //还书
void search_reader();//查询读者借还情况   
void search_book();//查询图书的借环请情况

******************************
*功能描述:列举图书管理系统功能
*输入参数:输入所有的功能
*****************************
int function() //主菜单
{
	cout<<"                    图书管理系统功能表"<<endl;
	cout<<"      ================================================="<<endl;
	cout<<"                    <1>采编入库"<<endl;
	cout<<"                    <2>新读者注册"<<endl; 
	cout<<"                    <3>借阅图书"<<endl;
	cout<<"                    <4>归还图书"<<endl;
	cout<<"                    <5>查询图书借还情况"<<endl;
	cout<<"                    <6>查询读者借还情况"<<endl;
	cout<<"                    <7>退出程序"<<endl;
	cout<<"      ================================================="<<endl;
	cout<<"请输入1-7之间的数字选择功能(例:1):"<<endl;
	int a;
		cin>>a; //a输入的数字
	while(cin.fail()||a<0||a>7)//判断输入是否为数字,不是则重新输入
{
   cout<<"输入错误"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入1-7之间的数字选择功能(例:1):"<<endl; //输入图书编号
    cin>>a;
}
	return a; 
}

void choose()//主菜单选择函数
{
	for(;;) 
	{
		switch(function()) //功能选择
		{ 
		case 1:new_book();break; 
		case 2:new_reader();break;
		case 3:borrow_book();break;
		case 4:return_book();break;
		case 5:search_book();break;
		case 6:search_reader();break;
		case 7:{cout<<"系统退出!"<<endl;exit(0);}
		default:cout<<endl;
			cout<<"请根据提示输入,输入错误系统退出!"<<endl;exit(0);
		}
	}
}
void init_reader()//新读者注册,初始化
{ 

cout<<"=================图书馆新读者注册================="<<endl;
Reader *p;
p=(Reader*)malloc(sizeof(Reader));    //创建头节点
rhead=p;//rhead指向头结点
cout<<"欢迎进入图书管理系统,请您先注册"<<endl;
cout<<"请输入..."<<endl;
cout<<"注册的借书证号(输入数字):"<<endl;           
cin>>p->rid;
while(cin.fail())//判断输入是否为数字,不是则重新输入
{
    cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号
    cin>>p->rid;
}
	cout<<"是否确定输入,确定请按0,重新输入请按1"<<endl;
cin>>w;
while(cin.fail()||w>1||w<0)//判断输入是否为数字,不是则重新输入
{
    cout<<"输入错误,请重新输入"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
    cin>>w;
}
if(w==1)
{
	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号
    cin>>p->rid;
}
cout<<"注册姓名:"<<endl; 
cin>>p->rname;
p->borrow_bnum=0; //初始化
int i;
for(i=0;i<Max;i++)
{
	p->borrow[i].borrow_bid=0; 
	p->borrow[i].date=0; 
}
p->next=NULL;
cout<<"注册成功!按任意键继续下一步操作.."<<endl; 
getch(); system("cls");
}

void init_book()//初始化信息,图书入库
{  
	cout<<"=================采编入库================="<<endl;
	Book *p;	
	p=(Book*)malloc(sizeof(Book));//创建头节点  
	bhead=p;//bhead指向头结点
	cout<<"图书馆入库第一批新书"<<endl;
	cout<<"请输入..."<<endl;
	cout<<"图书编号(输入数字):"<<endl; //输入图书编号
    cin>>p->bid;
	while(cin.fail())//判断输入是否为数字,不是则重新输入
{
   cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入图书编号(输入数字):"<<endl; //输入图书编号
    cin>>p->bid;
}
	cout<<"是否确定输入,确定请按0,重新输入请按1"<<endl;
cin>>w;
while(cin.fail()||w>1||w<0)//判断输入是否为数字,不是则重新输入
{
    cout<<"输入错误,请重新输入"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
    cin>>w;
}
if(w==1)
{
	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入图书编号(输入数字):"<<endl; //输入图书编号
    cin>>p->bid;
}
	cout<<"图书名称:"<<endl;//输入图书名称
    cin>>p->bname;
	cout<<"图书作者:"<<endl;//输入图书作者
    cin>>p->writer;
	cout<<"图书数量(输入数字):"<<endl;//输入图书入库数量
    cin>>p->kucun;
		while(cin.fail())//判断输入是否为数字
{
   cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新图书数量(输入数字):"<<endl; //输入图书编号
    cin>>p->kucun;
}
	p->xianyou=p->kucun;//开始时图书现有量和库存量相等
    p->next=NULL;
	cout<<"图书初始入库完毕!按任意键继续下一步操作.."<<endl;

	getch();system("cls");	
}

void new_reader()//新读者注册
{ 
Reader *p0,*p1; //p1库内已有的书,p0新入书
	p1=rhead;
cout<<"=================图书馆新读者注册================="<<endl;
	p0=(Reader *)malloc(sizeof(Reader));
cout<<"欢迎进入图书管理系统,请您先注册"<<endl;
cout<<"请输入..."<<endl;
cout<<"注册的借书证号(输入数字):"<<endl;           
cin>>p0->rid;
		while(cin.fail())//判断输入是否为数字
		{
    cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号
    cin>>p0->rid;
		}
		cout<<"是否确定输入,确定请按0,重新输入请按1"<<endl;
cin>>w;
while(cin.fail()||w>1||w<0)//判断输入是否为数字,不是则重新输入
{
    cout<<"输入错误,请重新输入"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
    cin>>w;
}
if(w==1)
{
	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号
    cin>>p0->rid;
}
    while(p0->rid!=p1->rid&&p1->next!=NULL)
		p1=p1->next;
    if(p0->rid==p1->rid) //借书号是否被注册
    {
		cout<<"此借书号已被注册,请重新输入!"<<endl; 
	cin>>p0->rid;
	while(cin.fail())//判断输入是否为数字
{
    cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号
    cin>>p0->rid;
}	
	}
cout<<"注册姓名:"<<endl; 
cin>>p0->rname;
p0->borrow_bnum=0;   //初始化,已借书数为0
int i;
for(i=0;i<Max;i++)
{
	p0->borrow[i].borrow_bid=0; //初始化,所借图书编号为0
	p0->borrow[i].date=0;  //初始化,所借归还日期为0
}
    	while(p1->next) //查找结点
		{ p1=p1->next; }
	    p1->next=p0;   //插入   
		p0->next=NULL;
	
    cout<<"注册成功!按任意键继续下一步操作.."<<endl;
getch();system("cls");
}



void new_book()//采编入库
{
	Book *p0,*p1; //p1库内已有的书,p0新入书
    p1=bhead;
	cout<<"=================采编入库================="<<endl;
	p0=(Book *)malloc(sizeof(Book));
	cout<<"图书编号(输入数字):"<<endl;
    cin>>p0->bid;
		while(cin.fail())//判断输入是否为数字
{
    cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入图书编号(输入数字):"<<endl; //输入图书编号
    cin>>p0->bid;
	}
		cout<<"是否确定输入,确定请按0,重新输入请按1"<<endl;
cin>>w;
while(cin.fail()||w>1||w<0)//判断输入是否为数字,不是则重新输入
{
    cout<<"输入错误,请重新输入"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
    cin>>w;
}
if(w==1)
{
	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入图书编号(输入数字):"<<endl; //输入图书编号
    cin>>p0->bid;
}
    while(p0->bid!=p1->bid&&p1->next!=NULL)//入库的图书不存在,创立新结点
		p1=p1->next;
    if(p0->bid==p1->bid) //若图书编号存在,则直接进库,只须输入书的数量
    {
		cout<<"此编号图书已存在,请直接添加数目!"<<endl; 
		cout<<"图书数量(输入数字):"<<endl;
        cin>>p0->kucun;
		while(cin.fail())//判断输入是否为数字
{
   cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新图书数量(输入数字):"<<endl; //输入图书编号
    cin>>p0->kucun;
}
		p1->kucun+=p0->kucun;
		p1->xianyou+=p0->kucun;
    }
    else//若图书编号不存在,则需要输入其他的信息,然后
    {
		cout<<"图书名称:"<<endl;
		cin>>p0->bname;
		cout<<"图书作者:"<<endl;
		cin>>p0->writer;
		cout<<"图书数量(输入数字):"<<endl;
		cin>>p0->kucun;
			while(cin.fail())
{
  cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新图书数量(输入数字):"<<endl; //输入图书编号
    cin>>p0->kucun;
}	
    	while(p1->next) //查找结点
		{ p1=p1->next; }
         p1->next=p0;   //链表中最后元素的next指向p0处,插入   
		p0->next=NULL;
		p0->xianyou=p0->kucun; 
	}
    cout<<"新书入库成功!按任意键继续下一步操作.."<<endl;
getch();system("cls");	
}


void borrow_book() //借书
{

    Book *p0;
	Reader *p1;
	int bo_id,rea_id,lim_date,i;
	p0=bhead; p1=rhead;
	cout<<"=================借阅图书================="<<endl;
	cout<<"请输入借书证号(输入数字):"<<endl;   
	cin>>rea_id;
	while(cin.fail())
{
    cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号
    cin>>rea_id;
}
	while(rea_id!=p1->rid&&p1->next!=NULL)//查找借书号结点  
		p1=p1->next;
	if(p1->next==NULL&&rea_id!=p1->rid)//判断输入的借书号是否注册过     
    { 
		cout<<"此借书证号不存在!请回到主菜单页面进行新读者注册!按任意键返回.."<<endl;
		goto end;
    } 
	cout<<"请输入你要借的图书编号(输入数字):"<<endl; 
	cin>>bo_id;
	while(bo_id!=p0->bid&&p0->next!=NULL)//查找图书书号结点   
		p0=p0->next;
	if(p0->next==NULL&&bo_id!=p0->bid)//判断借的书是否存在
	{
		cout<<"此图书不存在!您可以借阅其他书籍!按任意键返回.."<<endl;
	goto end; 
	}
    else if(p0->xianyou<=0)  //判断想借的书,馆内是否已借完
	{
		cout<<"此书已借完!您可以借阅其他书籍!按任意键返回...."<<endl;
		goto end; 
	}      
	else if(p1->borrow_bnum>=Max)  //每人最多借3本书
	{
		cout<<"您的最大借书权限为3本书,若想继续借书,请归还一定的书目!按任意键返回...."<<endl;
	goto end; 
	}      

	else if(p1->borrow[0].borrow_bid!=0)//每人不能借两本相同的书       
	{
		for(i=0;i<Max;i++) 
		{
			if(bo_id==p1->borrow[i].borrow_bid)
			{
				cout<<"不能借两本相同的书!按任意键返回...."<<endl;
			goto end; 
			}	

            else if(p1->borrow[i].borrow_bid==0)       
			{
		cout<<"请输入你要归还图书的日期(输入数字,例:20150101):"<<endl; 
		cin>>lim_date;
			while(cin.fail())
			{
    cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入归还图书的日期(输入数字,例:20150101):"<<endl; //输入图书编号
    cin>>lim_date;
			}
		p1->borrow[p1->borrow_bnum++].borrow_bid=bo_id;// 登记此书被借出 
		p1->borrow[p1->borrow_bnum-1].date=lim_date; //登记还书日期
		p0->xianyou--;//借书后,现有量-1
	
		cout<<"借书成功!按任意键继续下步操作.."<<endl;
 	   goto	end;
			}
	}
	}
else     
     {
       cout<<"请输入你要归还图书的日期(输入数字,例:20150101):"<<endl; 
       cin>>lim_date;
        p1->borrow[p1->borrow_bnum++].borrow_bid=bo_id;// 登记此书被借出 
		p1->borrow[p1->borrow_bnum-1].date=lim_date; //登记还书日期
		p0->xianyou--;//借书后,现有量-1
      cout<<"借书成功!按任意键继续下步操作.."<<endl;
     }
      end:getch(); system("cls");
		  n=p1->borrow_bnum;//记录已借几本书
} 
void return_book() //还书
{
	Book *p;
	Reader *q;
	int i,j,mark=0;//为0时,未借此书;为1时,读者借了此书;为2时,错误处理
	int return_bid,return_rid;
	p=bhead;
	q=rhead;
	cout<<"=================归还图书================="<<endl;
	cout<<"请输入借书证号(输入数字):"<<endl;   
	cin>>return_rid;         
	while(cin.fail())
	{
    cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入借书证号(输入数字):"<<endl; 
    cin>>return_rid;
	}
	while(q->next!=NULL&&return_rid!=q->rid) //查找借书号结点
		q=q->next;
	if(q->next==NULL&&return_rid!=q->rid)//输入的借书号未曾注册过
	{
        mark=2;
		cout<<"借书证号输入错误!按任意键返回.."<<endl;
		goto end; 
	}
	cout<<"请输入要归还的图书编号(输入数字):"<<endl;
    cin>>return_bid;
		while(cin.fail())
{
    cout<<"输入错误,请输入数字"<<endl;
   	cin.clear(); //清除流标记 
    cin.sync();  //清空流 
	cout<<"请重新输入请输入要归还的图书编号(输入数字):"<<endl; //输入图书编号
    cin>>return_bid;
}
	while(p->next!=NULL&&return_bid!=p->bid) //查找图书号结点
		p=p->next;
	if(p->next==NULL&&return_bid!=p->bid)//输入的图书号未曾登记过
    {
		mark=2;
		cout<<"图书编号输入错误!按任意键返回.."<<endl;
		goto end; 
	} 
	for(i=0;i<Max;i++)
	{	if(return_bid==q->borrow[i].borrow_bid) //如果读者借了此书
		{
			mark=1; 
			for(j=i;j<Max-1;j++)
			{
				q->borrow[j].borrow_bid=q->borrow[j+1].borrow_bid; //归还后,删除数据
				q->borrow[j].date=q->borrow[j+1].date; 
			}
			q->borrow[Max-1].borrow_bid=0;//归还后返回初始化阶段
			q->borrow[Max-1].date=0;
			p->xianyou++;//还书后,现有量+1
			q->borrow_bnum--;//借书数-1
			cout<<"还书成功!按任意键继续下步操作..";
		}
	}
		if(mark==0)      
			cout<<"此读者未借此书!按任意键返回.."<<endl; 
		end: getch(); system("cls");
}

void search_book() //查询图书信息
{
	Book *p;
	p=bhead;
	cout<<"=================图书信息===================:"<<endl;
	cout<<"图书编号"<<" "<<"图书名称"<<" "<<"图书作者"<<" "<<"现有量"<<" "<<"库存量"<<endl;
	
	while(p!=NULL)
	{
		cout<<p->bid<<"        "<<p->bname<<"        "<<p->writer<<"        "<<p->xianyou<<"        "<<p->kucun<<endl;
		p=p->next;
	}
	cout<<"按任意键继续下一步操作.."<<endl;
	getch();system("cls");
}
void search_reader()   //查询读者信息
{
	Reader *p;
	p=rhead;
	int i;
	cout<<"=================读者信息================="<<endl;  
	while(p!=NULL) 
	{
		cout<<"借书证号:"<<p->rid<<" "<<"姓名"<<p->rname<<endl;
		for(i=0;i<n;i++)
		{
			cout<<"借阅的第"<<i+1<<"本书"<<endl;
			cout<<"图书编号"<<p->borrow[i].borrow_bid<<endl; 
			cout<<"还书日期"<<p->borrow[i].date<<endl; 
			cout<<endl;
		}
		p=p->next;
		cout<<"--------------------------------"<<endl;
	}
	cout<<"按任意键继续下一步操作.."<<endl;
	getch();system("cls");
}
void main() 
{	
	init_reader();//新读者注册
	init_book();//初始化,新书入库
	choose();//调用主菜单
}


运行结果:

课程设计之图书管理系统_第1张图片

课程设计之图书管理系统_第2张图片

课程设计之图书管理系统_第3张图片

课程设计之图书管理系统_第4张图片课程设计之图书管理系统_第5张图片

 

你可能感兴趣的:(课程设计之图书管理系统)