📄 stackroom.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;
}
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 + -