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

📄 cmanager.cpp

📁 图书管理系统 所有图书管理功能都有,包括借书 还书 查询
💻 CPP
字号:
// CManager.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "CManager.h"
#include "CBooks.h"
#include "CBooksApp.h"
#include "CMenuA.h"
#include <ostream.h>
#include <iostream.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CManager::CManager()
{
	//数组新的大小值(元素数)为400000,要分配的元素位置的最小值为-1
	m_list.SetSize(400000,-1);
}

CManager::~CManager()
{
	//获取数组中的元素数
	int num=m_list.GetSize();

	for(int i=0;i<num;i++)
	{
		if(m_list[i]==0)
			continue;
		else
		{
			CBooks *p=(CBooks*)m_list[i];
			delete p;
		}
	}  
	//删除数组中所有元素
	m_list.RemoveAll();
}

void CManager::AddHead(CBooks *pBook)//在链表头部放书籍,即添加第一本书籍
{
	m_list[0]=pBook;
}

void CManager::Add(CBooks *pBook,int index)//将书籍放到index处
{
	m_list.InsertAt(index,pBook);
}

void CManager::Delete(int index)//删除index处的书籍
{
	pBook=(CBooks*)m_list[index];

	delete pBook;
	//删除index处的书籍
	m_list.RemoveAt(index);
}

void CManager::Delete()
{
	//获取数组中的元素数
	int num=m_list.GetSize();

	for(int i=0;i<num;i++)
	{
		if(m_list[i]==0)
			continue;
		else
		{
			pBook=(CBooks*)m_list[i];
			delete pBook;
		}
	}  
	//删除数组中所有元素
	m_list.RemoveAll();
}

int CManager::Fit(int num)//修改书籍
{
	int index=0;
	pBook=(CBooks*)m_list[index];

	char serialNumber[50],category[20],title[100],auther[10],press[50];
	int pYear,pMonth,pDay;
	double price;
	int bYear,bMonth,bDay;
	char name[10],certificateNo[50];
	BOOL sex;
	int type,lYear,lMonth,lDay;
	int rYear,rMonth,rDay;

	int Stop;

	switch(num)
	{
	case 0:
		{
			cout<<"新编号:";
			cin>>serialNumber;
			pBook->m_serialNumber=serialNumber;
			break;
		}
	case 1:
		{
			cout<<"新类别:";
			cin>>category;
			pBook->m_category=category;
			break;
		}
	case 2:
		{
			cout<<"新书名:";
			cin>>title;
			pBook->m_title=title;
			break;
		}
	case 3:
		{
			cout<<"新作者:";
			cin>>auther;
			pBook->m_auther=auther;
			break;
		}
	case 4:
		{
			cout<<"新出版社:";
			cin>>press;
			pBook->m_press=press;
			break;
		}
	case 5:
		{
			cout<<"新出版日期:\n";
			cout<<"年:";
			cin>>pYear;
			cout<<endl
				<<"月:";
			cin>>pMonth;
			cout<<endl
				<<"日:";
			cin>>pDay;
			
			pBook->m_publicDate.m_year=pYear;
			pBook->m_publicDate.m_month=pMonth;
			pBook->m_publicDate.m_day=pDay;
			break;
		}
	case 6:
		{
			cout<<"新价格:";
			cin>>price;
			pBook->m_price=price;
			break;
		}
	case 7:
		{
			cout<<"新购书时间:\n";
			cout<<"年:";
			cin>>bYear;
			cout<<endl
				<<"月:";
			cin>>bMonth;
			cout<<endl
				<<"日:";
			cin>>bDay;
			
			pBook->m_purchaseDate.m_year=bYear;
			pBook->m_purchaseDate.m_month=bMonth;
			pBook->m_purchaseDate.m_day=bDay;
			break;
		}
	case 8:
		{
			cout<<"新借阅者姓名:";
			cin>>name;
			pBook->m_lender.m_name=name;
			break;
		}
	case 9:
		{
			cout<<"新借阅者证号:";
			cin>>certificateNo;
			pBook->m_lender.m_certificateNo=certificateNo;
			break;
		}
	case 10:
		{
			cout<<"新借阅者性别与型别:\n"
				<<"性别:";
			cin>>sex;
			cout<<endl
				<<"型别:";
			cin>>type;

			pBook->m_lender.m_sex=sex;
			pBook->m_lender.m_type=type;
			break;
		}
	case 11:
		{
			cout<<"新借书日期:\n";
			cout<<"年:";
			cin>>lYear;
			cout<<endl
				<<"月:";
			cin>>lMonth;
			cout<<endl
				<<"日:";
			cin>>lDay;
			
			pBook->m_lendDate.m_year=lYear;
			pBook->m_lendDate.m_month=lMonth;
			pBook->m_lendDate.m_day=lDay;
			break;
		}
	case 12:
		{
			cout<<"新还书日期\n";
			cout<<"年:";
			cin>>rYear;
			cout<<endl
				<<"月:";
			cin>>rMonth;
			cout<<endl
				<<"日:";
			cin>>rDay;
			
			pBook->m_returnDate.m_year=rYear;
			pBook->m_returnDate.m_month=rMonth;
			pBook->m_returnDate.m_day=rDay;
			break;
		}
	case 13:
		{
			delete pBook;

			m_list.RemoveAt(index);

			cout<<"新编号:";
			cin>>serialNumber;

			cout<<"新类别:";
			cin>>category;

			cout<<"新书名:";
			cin>>title;

			cout<<"新作者:";
			cin>>auther;

			cout<<"新出版社:";
			cin>>press;

			cout<<"新出版日期:\n";
			cout<<"年:";
			cin>>pYear;
			cout<<endl
				<<"月:";
			cin>>pMonth;
			cout<<endl
				<<"日:";
			cin>>pDay;

			cout<<"新价格:";
			cin>>price;

			cout<<"新购书时间:\n";
			cout<<"年:";
			cin>>bYear;
			cout<<endl
				<<"月:";
			cin>>bMonth;
			cout<<endl
				<<"日:";
			cin>>bDay;

			cout<<"新借阅者姓名:";
			cin>>name;

			cout<<"新借阅者证号:";
			cin>>certificateNo;

			cout<<"新借阅者性别与型别:\n"
				<<"性别:";
			cin>>sex;
			cout<<endl
				<<"型别:";
			cin>>type;

			cout<<"新借书日期:\n";
			cout<<"年:";
			cin>>lYear;
			cout<<endl
				<<"月:";
			cin>>lMonth;
			cout<<endl
				<<"日:";
			cin>>lDay;

			cout<<"新还书日期\n";
			cout<<"年:";
			cin>>rYear;
			cout<<endl
				<<"月:";
			cin>>rMonth;
			cout<<endl
				<<"日:";
			cin>>rDay;

			pBook=new CBooks;
			//调用pBook指针所指向对象的AddBook函数,并向对象赋值
			pBook->AddBook(serialNumber,category,title,auther,press,pYear,pMonth,pDay,price,bYear,bMonth,
		bDay,name,certificateNo,sex,type,lYear,lMonth,lDay,rYear,rMonth,rDay);
			
			m_list.InsertAt(index,pBook);
			break;
		}
	case 14:
		{	//退出
			Stop=1;
			break;
		}
	case 15:
		{
			cout<<"请选择所要修改的书籍,书籍的位置:";
			cin>>index;
			cout<<endl;
			break;
		}
	default:
		{
			cout<<"                            输入错误,请重新输入.\n"
				<<endl
				<<endl;
			//重新返回修改菜单
			Stop=-1;
		}
	}
	return Stop;
}

void CManager::BorrowReader(int index)//借书(填写借阅者资料)
{
	char name[10],certificateNo[50];
	BOOL sex;
	int type;
	
	cout<<"借阅者姓名:";
	cin>>name;
	cout<<endl;

	cout<<"借阅者证号:";
	cin>>certificateNo;
	cout<<endl;

	cout<<"性别:";
	cin>>sex;
	cout<<endl;

	cout<<"型别:";
	cin>>type;
	cout<<endl;

	pBook=(CBooks*)m_list[index];
	
	pBook->m_lender.m_name=name;
	pBook->m_lender.m_certificateNo=certificateNo;
	pBook->m_lender.m_sex=sex;
	pBook->m_lender.m_type=type;
}

void CManager::BorrowDate(int index)//借书(填写借书日期)
{
	int lYear,lMonth,lDay;
	
	cout<<"借书日期:\n";
	cout<<"年:";
	cin>>lYear;
	cout<<endl
		<<"月:";
	cin>>lMonth;
	cout<<endl
		<<"日:";
	cin>>lDay;
	
	pBook=(CBooks*)m_list[index];

	pBook->m_lendDate.m_year=lYear;
	pBook->m_lendDate.m_month=lMonth;
	pBook->m_lendDate.m_day=lDay;
}

void CManager::ReturnDate(int index)//还书(填写还书日期)
{
	int rYear,rMonth,rDay;

	cout<<"还书日期:\n";
	cout<<"年:";
	cin>>rYear;
	cout<<endl
		<<"月:";
	cin>>rMonth;
	cout<<endl
		<<"日:";
	cin>>rDay;

	pBook=(CBooks*)m_list[index];
	pBook->m_returnDate.m_year=rYear;
	pBook->m_returnDate.m_month=rMonth;
	pBook->m_returnDate.m_day=rDay;

	pBook->m_lender.m_name="0";
	pBook->m_lender.m_certificateNo="0";
	pBook->m_lender.m_sex=0;
	pBook->m_lender.m_type=0;

	pBook->m_lendDate.m_year=0;
	pBook->m_lendDate.m_month=0;
	pBook->m_lendDate.m_day=0;
}

void CManager::PrintNote(int type)//打印催还书通知
{
	int S_timeLimit=30,G_timeLimit=60,T_timeLimit=90;
	int num=m_list.GetSize();
	int i,time;

	Date timeLimit;
	cout<<"请输入当前时间(年月日).\n";
	cout<<"年:";
	cin>>timeLimit.m_year;
	cout<<"月:";
	cin>>timeLimit.m_month;
	cout<<"日:";
	cin>>timeLimit.m_day;

	cout<<endl;

	switch(type)
	{
	case 0:
		{
			for(i=0;i<num;i++)
			{
				if(m_list[i]==0)
					continue;
				pBook=(CBooks*)m_list[i];
				if(pBook->m_lender.m_type==0)//判断类型是否为本科生
				{
					if(pBook->m_lendDate.m_year!=0)//判断借书时间的年份是否为0,即判断是否还书
					{	//计算当前时间与借书时间之差
						time=timeLimit-pBook->m_lendDate;
						if(S_timeLimit<time) 
						{
							cout<<"逾期不还者姓名:"
								<<pBook->m_lender.m_name
								<<endl
								<<"    所借书籍为:"
								<<pBook->m_title
								<<"    此书的编号为:"
								<<pBook->m_serialNumber
								<<endl
								<<"    逾期不还的天数为:"
								<<time-S_timeLimit   
								<<endl
								<<endl;
						}
					}
				}
			}
			break;
		}
	case 1:
		{
			for(i=0;i<num;i++)
			{
				if(m_list[i]==0)
					continue;
				pBook=(CBooks*)m_list[i];
				if(pBook->m_lender.m_type==1)//判断类型是否为研究生
				{
					if(pBook->m_lendDate.m_year!=0)//判断借书时间的年份是否为0,即判断是否还书
					{	//计算当前时间与借书时间之差
						time=timeLimit-pBook->m_lendDate;
						if(G_timeLimit<time)
						{
							cout<<"逾期不还者姓名:"
								<<pBook->m_lender.m_name
								<<endl
								<<"    所借书籍为:"
								<<pBook->m_title
								<<"    此书的编号为:"
								<<pBook->m_serialNumber
								<<endl
								<<"    逾期不还的天数为:"
								<<time-G_timeLimit
								<<endl
								<<endl;
						}
					}
				}
			}
			break;
		}
	case 2:
		{
			for(i=0;i<num;i++)
			{
				if(m_list[i]==0)
					continue;
				pBook=(CBooks*)m_list[i];
				if(pBook->m_lender.m_type==2)//判断类型是否为教师
				{
					if(pBook->m_lendDate.m_year!=0)//判断借书时间的年份是否为0,即判断是否还书
					{	//计算当前时间与借书时间之差
						time=timeLimit-pBook->m_lendDate;
						if(T_timeLimit<time)
						{
							cout<<"逾期不还者姓名:"
								<<pBook->m_lender.m_name
								<<endl
								<<"    所借书籍为:"
								<<pBook->m_title
								<<"    此书的编号为:"
								<<pBook->m_serialNumber
								<<endl
								<<"    逾期不还的天数为:"
								<<time-T_timeLimit
								<<endl
								<<endl;
						}
					}
				}
			}
			break;
		}
	}
}

CBooks* CManager::GetBook(int index)//获取index出的书籍
{
	pBook=(CBooks*)m_list[index];

	return pBook;
}

int CManager::Find(void *serialNumber)//查找
{//按书的编号查找
	CString pStr=(char*)serialNumber;
	int i,num,value=0;

	num=m_list.GetSize();
	for(i=0;i<num;i++)
	{
		if(m_list[i]==0)
			continue;
		pBook=(CBooks*)m_list[i];
		if(pBook->m_serialNumber==pStr)//判断编号是否相同
		{	//调用GetBook函数
			pBook=GetBook(i);
			//输出所找到的书籍
			cout<<"位置:"<<i<<endl
				<<"      "<<pBook->m_serialNumber<<"  "<<pBook->m_category<<"  "<<pBook->m_title<<"  "<<pBook->m_auther<<"  "<<pBook->m_press<<endl
				<<"      "<<pBook->m_publicDate.m_year<<"/"<<pBook->m_publicDate.m_month<<"/"<<pBook->m_publicDate.m_day<<"  "
				<<"      "<<pBook->m_price<<"  "
				<<"      "<<pBook->m_purchaseDate.m_year<<"/"<<pBook->m_purchaseDate.m_month<<"/"<<pBook->m_purchaseDate.m_day<<endl
				<<"      "<<pBook->m_lender.m_name<<"  "<<pBook->m_lender.m_certificateNo<<"  "<<pBook->m_lender.m_sex<<"  "<<pBook->m_lender.m_type<<"  "<<endl
				<<"      "<<pBook->m_lendDate.m_year<<"/"<<pBook->m_lendDate.m_month<<"/"<<pBook->m_lendDate.m_day<<"  "
				<<"      "<<pBook->m_returnDate.m_year<<"/"<<pBook->m_returnDate.m_month<<"/"<<pBook->m_returnDate.m_day<<endl
				<<endl; 
			value=1;
		}
	}
	return value;
}

void CManager::Delete (void *serialNumber)//删除
{//按书的编号删除
	CString pStr=(char*)serialNumber;
	int i=0,num;
	num=m_list.GetSize();

	for(i=0;i<num;i++)
	{
		if(m_list[i]==0)
			continue;
		pBook=(CBooks*)m_list[i];
		if(pBook->m_serialNumber==pStr)//判断编号是否相同
		{
			delete pBook;
			//删除指定索引处的数组元素
			m_list.RemoveAt(i);
			//因为编号是唯一的,所以删除后就立刻退出
			break;
		}
	}  
}

void CManager::Sort()//排序
{//按书的编号排序,冒泡排序法
	int i,j,num;
	num=m_list.GetSize();
	for(i=0;i<num;i++)
	{
		if(m_list[i]==0)
			continue;
		CBooks *b1=(CBooks*)m_list[i];
		for(j=i+1;j<num;j++)
		{
			if(m_list[j]==0)
				continue;
			CBooks *b2=(CBooks*)m_list[j];
			if(b2->m_serialNumber<b1->m_serialNumber)//判断两个编号的大小
			{
				m_list.RemoveAt(i);
				//在指定索引处插入一个元素
				m_list.InsertAt(i,b2);
				m_list.RemoveAt(j);
				m_list.InsertAt(j,b1);
				b1=b2;
			}
		}
	}
}

void CManager::Display(ostream &os)//预览
{
	int num,i=0;

	num=m_list.GetSize();
	for(i=0;i<num;i++)
	{
		if(m_list[i]==0)
		{
			continue;
		}
		else
		{
			pBook=(CBooks*)m_list[i];
		}
		//输出所有书籍
		os<<"位置:"<<i<<endl;
		os<<pBook->m_serialNumber<<"  "<<pBook->m_category<<"  "<<pBook->m_title<<"  "<<pBook->m_auther<<"  "<<pBook->m_press<<endl
			<<"      "<<pBook->m_publicDate.m_year<<"/"<<pBook->m_publicDate.m_month<<"/"<<pBook->m_publicDate.m_day<<"  "
			<<"      "<<pBook->m_price<<"  "
			<<"      "<<pBook->m_purchaseDate.m_year<<"/"<<pBook->m_purchaseDate.m_month<<"/"<<pBook->m_purchaseDate.m_day<<endl
			<<"      "<<pBook->m_lender.m_name<<"  "<<pBook->m_lender.m_certificateNo<<"  "<<pBook->m_lender.m_sex<<"  "<<pBook->m_lender.m_type<<"  "<<endl
			<<"      "<<pBook->m_lendDate.m_year<<"/"<<pBook->m_lendDate.m_month<<"/"<<pBook->m_lendDate.m_day<<"  "
			<<"      "<<pBook->m_returnDate.m_year<<"/"<<pBook->m_returnDate.m_month<<"/"<<pBook->m_returnDate.m_day<<endl
			<<endl;
	}
}

ostream& operator << (ostream &os,CManager &mg)
{	//调用Display函数
	mg.Display(os);
	os<<endl;

	return os;
}

void CManager::Serialize(CArchive &ar)
{
	m_list.Serialize(ar);
}

int CManager::Save(char *filename,CManager *mg)//将数据存储到存档文件
{
	CFile file;
	if(!file.Open(filename,CFile::modeWrite|CFile::modeCreate))
		return 0;
	CArchive ar(&file,CArchive::store);
	mg->Serialize(ar);
	//关闭
	ar.Close();
	file.Close();
	return 1;
}

int CManager::Open(char *filename,CManager *mg)//从存档文件中读取数据
{
	CFile file;
	if(!file.Open(filename,CFile::modeRead))
		return 0;
	CArchive ar(&file,CArchive::load);
	mg->Serialize(ar);
	//关闭
	ar.Close();
	file.Close();
	return 1;
}

⌨️ 快捷键说明

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