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

📄 stackroom.cpp

📁 1. 系统概述: 图书馆管理系统是运行于Windows系统下的应用软件
💻 CPP
字号:
// StackRoom.cpp: implementation of the CStackRoom class.
//
//////////////////////////////////////////////////////////////////////

#include "StackRoom.h"
#include<algorithm>		// for std::copy
#include<iomanip.h>
const char *FILE_BOOK = "Data/Books.db";

CStackRoom::CStackRoom()
{
	ifChange = false;
	ifstream Fin;
	Fin.open( FILE_BOOK, ios::in );
	if ( !Fin.is_open() ){			//打开文件失败
		cout<<"Couldn't open file !\n";
		exit(0);
	}
	Fin>>BookNum;
	Fin>>idTop;
	book = new CBook[BookNum+1];
	for ( int i=0; i<BookNum; i++){
		Fin>>book[i].iID;		//读出iID
		Fin.get();
		char cTemp;
		int j=0;
		while ( (cTemp=Fin.get()) != char(6) ){		//读出sName
			book[i].sName[j++] = cTemp;
		}
		book[i].sName[j] = cTemp;
		j = 0;
		while ( (cTemp=Fin.get()) != char(6) ){		//读出sAuthor
			book[i].sAuthor[j++] = cTemp;
		}
		book[i].sAuthor[j] = cTemp;
		j = 0;
		while ( (cTemp=Fin.get()) != char(6) ){		//读出sPubCom
			book[i].sPubCom[j++] = cTemp;
		}
		book[i].sPubCom[j] = cTemp;
		Fin>>book[i].iYear;		//读出iYear
		Fin.get();
		Fin>>book[i].iPagNum;		//读出iPagNum
		Fin.get();
		Fin>>book[i].fPrice;		//读出fPrice
		Fin.get();
		Fin>>book[i].iState;		//读出iState
		Fin.get();
	}
	Fin.clear();
	Fin.close();
}
//////////////////////////////////////////////////////////////////////
bool reallocate(CBook* &p, int &size, int addsize)	//重新分配内存,成功true,失败false
{
	size += addsize;		//double the array''s size with each reallocation
	CBook * temp = new CBook [size];
	if (temp == NULL)return false;
	std::copy(p, p+(size-addsize), temp);
	delete [] p;		// release original, smaller buffer
	p=temp;		//	reassign p to the newly allocated buffer
	return true;
}
bool CStackRoom::AddBook(){		//增加图书
	void Addbook_menu();
	int ID; 
	char name[20];
	char PubCom[30];
	int  year;
	char author[20];
	int  PagNum;
	float price;
	ID = idTop++;			//书号
	cin>>name;				//书名//input??
	cin>>PubCom;			//出版社//input??
	cin>>year;				//出版年份//input??
	cin>>author;			//作者//input??
	cin>>PagNum;			//页数//input??
	cin>>price;				//价格//input??
	if ( book[BookNum].iID != 0 ){			//预留空间(book[BookNum])已用
		if ( !reallocate( book, BookNum, 2) ){
			cout<<"分配空间失败!";
			return false;
		}
		BookNum -= 2;
	}											
	book[BookNum++].SetInf( ID,	name, PubCom, year, author, PagNum, price );	//设置图书信息
	return true;
}
//////////////////////////////////////////////////////////////////////
bool CStackRoom::DeleteBook(int ID){		//删除图书,ID置零
	for (int i=0; i<BookNum; i++){
		if (ID == book[i].iID)book[i].iID=0;
	}
	if (i == BookNum)return false;		//删除失败
	return true;		//删除成功
}
//////////////////////////////////////////////////////////////////////
int iFindbook_menu();		//打印查找书本的菜单,并让用户选择用何种方式查询
void CStackRoom::Search(){			//查询图书,并打印查询结果
	int iChoice = iFindbook_menu();		//打印查找书本的菜单,并让用户选择用何种方式查询

	char Name[40];			//书名
	char Author[20];		//作者
	int ID;					//书号

	switch( iChoice ){
	case 1:{		//1.使用书本名字查询! 
		cin>>Name;		//input??
		for ( int i=0; i<BookNum; i++){
			if( book[i].Check_n(Name) ){
				cout<<book[i];		//output??每打印一个屏幕暂停一下,提示退出或借书,借书通过书的ID
			}
		}
		break;}
	case 2:{		//2.使用索引号码查询! 
		cin>>ID;			//input??
		for ( int i=0; i<BookNum; i++){
			if( book[i].Check(ID) ){
				cout<<book[i];		//output??每打印一个屏幕暂停一下,提示退出或借书,借书通过书的ID
			}
		}
		break;}
	case 3:{		//3.使用作者名字查询! 
		cin>>Author;	//input??
		for ( int i=0; i<BookNum; i++){
			if( book[i].Check_a(Author) ){
				cout<<book[i];		//output??每打印一个屏幕暂停一下,提示退出或借书,借书通过书的ID
			}
		}
		break;}
	case 4:		//4.返回上一页! 
		return;
	default:break;
	}
	//中旭完善查书后的操作??——输入要借的书的ID
}
//////////////////////////////////////////////////////////////////////
int CStackRoom::Check_bookId(int id)  //查书的编号而得到该书的位置
{
	for ( int i=0; i<BookNum; i++){
		if ( book[i].Check(id)){
			return i;
		}
	}
	return -1;	

}
void CStackRoom::Indexbook()
{
}

CBook CStackRoom::Get_book(int i)  //取得书的信息
{
	return book[i];
}

void CStackRoom::DisplayAll() //打印所有的书
{
	cout<<"\n\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n";
	cout<<setw(14)<< "ID" <<setw(10)<< "书名" << setw(14) << "作者"
		 <<setw(20)<< "出版社";

	for ( int i=0; i<BookNum; i++){
		cout<<endl<<book[i];
	}
	cout<<"\n\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n";
}
CStackRoom::~CStackRoom()
{
	ofstream Fout;
	Fout.open( FILE_BOOK, ios::out );
	if ( !Fout.is_open() ){			//打开文件失败
		cout<<"Couldn't open file !\n";
		exit(0);
	}
	Fout<<BookNum<<endl;
	Fout<<idTop<<endl;
	for ( int i=0; i<BookNum; i++){
		Fout<<book[i].iID<<char(6)				//写入iID
			<<book[i].sName<<char(6)			//写入sName
			<<book[i].sAuthor<<char(6)			//写入sAuthor
			<<book[i].sPubCom<<char(6)			//写入sPubCom
			<<book[i].iYear<<char(6)			//写入iYear
			<<book[i].iPagNum<<char(6)			//写入iPagNum
			<<book[i].fPrice<<char(6)			//写入fPrice
			<<book[i].iState<<endl;				//写入iState
	}
	Fout.clear();
	Fout.close();
}

⌨️ 快捷键说明

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