📄 storage.cpp
字号:
// Storage.cpp: implementation of the Storage class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Storage.h"
#include "stdlib.h"
#include "iostream.h"
#include "string.h"
#include "fstream.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
int Storage::num=0;
Storage::Storage()
{
fstream getnum("Num.txt",ios::in);
if(getnum.fail())
{
cout<<"载入书本数量错误!";
exit(0);
}
getnum>>num;
getnum.close();
BookData info={"","","","","",0,0,0};
int temp=1;
fstream istore("Bookstore.dat",ios::in|ios::nocreate|ios::binary);//从文件中读取书库信息
if(istore.fail())
{
cout<<"载入书库数据错误!请检查书库数据文件!";
exit(0);
}
istore.read((char*)&info,sizeof(info));
while(temp<=num&&!istore.eof())
{
strcpy(book[temp].isbn,info.isbn);
strcpy(book[temp].author,info.author);
strcpy(book[temp].bookTitle,info.bookTitle);
strcpy(book[temp].dateAdded,info.dateAdded);
strcpy(book[temp].publisher,info.publisher);
book[temp].qtyOnHand=info.qtyOnHand;
book[temp].retail=info.retail;
book[temp].wholesale=info.wholesale;
istore.read((char*)&info,sizeof(info));
temp++;
}
while(temp<100)//不足一百本,余下的数据置空
{
strcpy(book[temp].author,"");
strcpy(book[temp].bookTitle,"");
strcpy(book[temp].dateAdded,"");
strcpy(book[temp].isbn,"");
strcpy(book[temp].publisher,"");
book[temp].qtyOnHand=0;
book[temp].retail=0;
book[temp].wholesale=0;
temp++;
}
for(int i=1;i<100;i++)
{
book[i].showed=0;
}
istore.close();
}
Storage::~Storage()
{
BookData info={"","","","","",0,0,0};
int temp=1;
fstream ostore("Bookstore.dat",ios::out|ios::nocreate|ios::binary);
if(ostore.fail())
{
cout<<"保存数据失败!"<<endl;
exit(0);
}
while(temp<=num)
{
strcpy(info.isbn,book[temp].isbn);
strcpy(info.author,book[temp].author);
strcpy(info.bookTitle,book[temp].bookTitle);
strcpy(info.dateAdded,book[temp].dateAdded);
strcpy(info.publisher,book[temp].publisher);
info.qtyOnHand=book[temp].qtyOnHand;
info.retail=book[temp].retail;
info.wholesale=book[temp].wholesale;
ostore.write((char*)&info,sizeof(info));
temp++;
}
fstream getnum("Num.txt",ios::out);
if(getnum.fail())
{
cout<<"保存书本数量错误!";
exit(0);
}
getnum<<num;
getnum.close();
cout<<"\n数据已保存"<<num<<endl;
ostore.close();
}
bool Storage::isEmpty(int n)
{
if(book[n].isbn[0]=='\0')
return true;
else
return false;
}
void Storage::removeBook(int n)
{
strcpy(book[n].author,"");
strcpy(book[n].bookTitle,"");
strcpy(book[n].dateAdded,"");
strcpy(book[n].isbn,"");
strcpy(book[n].publisher,"");
book[n].qtyOnHand=0;
book[n].retail=0;
book[n].wholesale=0;
}
void Storage::setDateAdded(char *date,int n)
{
strcpy(book[n].dateAdded,date);
}
void Storage::setISBN(char *Isbn,int n)
{
strcpy(book[n].isbn,Isbn);
}
void Storage::setPub(char *pub,int n)
{
strcpy(book[n].publisher,pub);
}
void Storage::setQty(int num,int n)
{
book[n].qtyOnHand=num;
}
void Storage::setRetail(float price,int n)
{
book[n].retail=price;
}
void Storage::setTitle(char *title,int n)
{
strcpy(book[n].bookTitle,title);
}
void Storage::setWholesale(float cost,int n)
{
book[n].wholesale=cost;
}
void Storage::setAuthor(char *auth,int n)
{
strcpy(book[n].author,auth);
}
void Storage::BookInfo(int n)
{
cout<<"\n*****************************\n";
cout<<"\n\t\tISBN 号:"<<book[n].isbn<<endl;
cout<<"\t\t书 名:"<<book[n].bookTitle<<endl;
cout<<"\t\t作 者:"<<book[n].author<<endl;
cout<<"\t\t出 版 社:"<<book[n].publisher<<endl;
cout<<"\t\t进书日期:"<<book[n].dateAdded<<endl;
cout<<"\t\t库 存 量:"<<book[n].qtyOnHand<<endl;
cout<<"\t\t批 发 价:"<<book[n].wholesale<<endl;
cout<<"\t\t零 售 价:"<<book[n].retail<<endl;
}
void Storage::deleteBook(char *name)
{
char ch;
int n=0;//标记是否找到
for(int temp=1;temp<=num;temp++)
{
if(strcmp(book[temp].bookTitle,name)==0)
{
BookInfo(temp);
cout<<"确定要删除此书信息? Y/N?";
cin>>ch;
cin.ignore();
if(toupper(ch)=='Y')
{
for(int m=temp;m<num;m++)
{
strcpy(book[m].author,book[m+1].author);
strcpy(book[m].bookTitle,book[m+1].bookTitle);
strcpy(book[m].dateAdded,book[m+1].dateAdded);
strcpy(book[m].isbn,book[m+1].isbn);
strcpy(book[m].publisher,book[m+1].publisher);
book[m].qtyOnHand=book[m+1].qtyOnHand;
book[m].retail=book[m+1].retail;
book[m].wholesale=book[m+1].wholesale;
}
num--;
cout<<"删除成功!"<<endl;
n=1;
break;
}
else exit(0);
}
}
if(n==0)
{
cout<<"查无此书"<<endl;
}
}
void Storage::addBook()
{
char TITLE[51];
char ISBN[14];
char AUTHOR[31];
char PUB[31];
char DATE[11];
int ONHAND;
float PRICE;
float RETAIL;
cout<<"请输入书名:";
cin.getline(TITLE,51);
//cin.ignore();
setTitle(TITLE,num+1);
cout<<"请输入书的ISBN编号:";
cin.getline(ISBN,14);
//cin.ignore();
setISBN(ISBN,num+1);
cout<<"请输入作者名:";
cin.getline(AUTHOR,31);
//cin.ignore();
setAuthor(AUTHOR,num+1);
cout<<"请输入出版社名:";
cin.getline(PUB,31);
//cin.ignore();
setPub(PUB,num+1);
cout<<"请输入添加日期:(格式如:20070428)";
cin.getline(DATE,11);
// cin.ignore();
setDateAdded(DATE,num+1);
cout<<"请输入数量:";
cin>>ONHAND;
// cin.ignore();
setQty(ONHAND,num+1);
cout<<"请输入成本价:";
cin>>PRICE;
//cin.ignore();
setWholesale(PRICE,num+1);
cout<<"请输入零售价:";
cin>>RETAIL;
//cin.ignore();
setRetail(RETAIL,num+1);
num++;
cout<<"添加成功!书的信息为:"<<num<<endl;
BookInfo(num);
}
void Storage::lookUpBook(char *name)
{
for(int temp=0;temp<=num;temp++)
{
if(strcmp(book[temp].bookTitle,name)==0)
BookInfo(temp);
}
}
int Storage::lookBook(char *Isbn)
{
for(int temp=0;temp<=num;temp++)
{
if(strcmp(book[temp].isbn,Isbn)==0)
return temp;
}
return -1;
}
void Storage::editBook(char *name)
{
char str[51];
float price;
int shuliang;
int choice;
int nn=0;
for(int temp=0;temp<=num;temp++)
{
if(strcmp(book[temp].bookTitle,name)==0)
{
BookInfo(temp);
cout<<"请选择你要修改的数据项:"<<endl;
cout<<"1.ISBN 号 2.书 名 3.作 者 4. 出 版 社\n5.进书时间 6.库 存 量 7.批 发 价 8.零售价"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"输入新的ISBN号:";
cin>>str;
setISBN(str,temp);
nn=1;
cout<<"修改成功!";
break;
case 2:
cout<<"输入新的书名:";
cin>>str;
setTitle(str,temp);
nn=1;
cout<<"修改成功!";
break;
case 3:
cout<<"输入新的作者:";
cin>>str;
setAuthor(str,temp);
nn=1;
cout<<"修改成功!";
break;
case 4:
cout<<"输入新的出版社名:";
cin>>str;
setPub(str,temp);
nn=1;
cout<<"修改成功!";
break;
case 5:
cout<<"输入新的进书时间:";
cin>>str;
setDateAdded(str,temp);
nn=1;
cout<<"修改成功!";
break;
case 6:
cout<<"输入新的库存量:";
cin>>shuliang;
setQty(shuliang,temp);
nn=1;
cout<<"修改成功!";
break;
case 7:
cout<<"输入新的批发价:";
cin>>price;
setWholesale(price,temp);
nn=1;
cout<<"修改成功!";
break;
case 8:
cout<<"输入新的零售价:";
cin>>price;
setRetail(price,temp);
nn=1;
cout<<"修改成功!";
break;
}
}
}
if(nn==0)
{
cout<<"查无此书"<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -