📄 cmanager.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 + -