資源簡介
primer c++中的書店項目,根據自己的理解寫的代碼,供大家參考

代碼片段和文件信息
#include?“sale_item.h“
//靜態成員????靜態成員必須在類外定義,否則編譯器會報錯
vector?Sale_item::?isbn_total;
vector?Sale_item::isbn_name;
vector?Sale_item::isbn_num;
vector?Sale_item::isbn_ave_price;
//Sale_item的友員函數
ostream&?operator<<(ostream?&outconst?Sale_item?&?d)
{
//return?out?<<“商品名?“< return?out?<}
istream&?operator>>(istream?&iSale_item?&?d)
{
//xcout?<“請輸入?商品名?售出數量?價格:“;
string?line;
getline(i?line);
istringstream?iss(line);
iss?>>?d.name?>>?d.num?>>?d.price;
if?(iss)
d.updata_staticmem();
else
d?=?Sale_item();
return?i;
}
Sale_item?operator+(const?Sale_item&?s1const?Sale_item&?s2)
{
Sale_item?s3?=?s1;
s3?+=?s2;
return?s3;
}
Sale_item&?operator+=(Sale_item&?s1const?Sale_item&?s2)
{
if?(s1.name==s2.name)
{
s1.num?+=?s2.num;
s1.price?=?(s1.num*s1.price?+?s2.num*s2.price)?/?s1.num;
}
else
{
cerr?<“名稱不同,不能相加!“?< }
return?s1;
}
Sale_item::Sale_item(string?isbn?int?n?double?p)?:name(isbn)?num(n)?price(p)
{
updata_staticmem();
}
Sale_item::Sale_item(istream?&i)
{
i?>>?*this;
}
//當創建對象時,更新靜態成員
void?Sale_item::updata_staticmem()
{
if(!isvilid())?return;
auto?stor?=?find(isbn_name.begin()?isbn_name.end()?name);
xiabiao?=?stor?-?isbn_name.begin();
if?(stor?==?isbn_name.end())
{
isbn_name.push_back(name);
isbn_num.push_back(num);
isbn_total.push_back(num*price);
isbn_ave_price.push_back(price);
}
else
{
isbn_num[xiabiao]?+=?num;
isbn_total[xiabiao]?+=?num*price;
isbn_ave_price[xiabiao]?=?isbn_total[xiabiao]?/?isbn_num[xiabiao];
}
}
//由商品名檢索?輸出商品銷售信息
void?Sale_item::findname_display(string?nameostream?&out)
{
auto?stor?=?find(isbn_name.begin()?isbn_name.end()?name);
int?xb?=?stor?-?isbn_name.begin();
if?(stor?==?isbn_name.end())
out?<“沒有此商品銷售記錄“?< else
{
out?< do_display(xb?out);
}
}
void?Sale_item::tofile(string?filename)
{
ofstream?fout(filename+“.saleresult“);
fout?< vector::size_type?size?=?isbn_name.size();
for?(vector::size_type?xb?=?0;?xb?!=?size;xb++)
do_display(xb?fout);
}
bool?Sale_item::isvilid()
{
if?(name?==?“商品名“)?return?false;
if?(num?==?0?||?price?==?0)
{
cerr?< int?i;
cin?>>?i;
switch?(i)
{
case?1:?return?false;
case?2:
if?(num?==?0?&&?price?==?0)
{
cout?<“請重新輸入“?<>?num;
cout?<“請重新輸入“?<>?price;
return?true;
}
if?(price?==?0)
cout?<“請重新輸入“?<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????3723??2017-09-11?09:59??sale_item.cpp
?????文件????????1153??2017-09-11?09:59??sale_item.h
?????文件?????????637??2017-08-20?11:18??銷售主函數.cpp
評論
共有 條評論