//good.h
#ifndef _GOOD_H
#define _GOOD_H
#include <string>
using std::string;
class good{
private:
string goodname; //唯一标识商品
double price; //价格
double rate; //折扣率
public:
good(){ //无参构造函数
goodname = "";
price = 0.0;
rate = 1.0;
}
good(string s, double p){//无折扣率构造函数
goodname = s;
price = p;
rate = 1.0;
}
good(string s, double p, double r){//有折扣率构造函数
goodname = s;
price = p;
rate = r;
}
string getGoodname()const {
return goodname;
}
double getPrice()const{
return price;
}
double getRate()const {
return rate;
}
void setGoodname(string const name){
goodname = name;
}
void setPrice(const double p){
price = p;
}
void setRate(const double r){
rate = r;
}
};
#endif
//**************************************
//版本:简易版2.0
//作者:snowboy
//释:
//此版本函数一次只操作购物车中的一个商品
//此版本函数仅提供通过商品名字的删除操作
//***************************************
//cart.h
#ifndef _CART_H
#define _CART_H
#include "good.h"
#include <vector>
#include <iostream>
using std::cout;
using std::endl;
struct item{ //存放商品及其数量
<span style="white-space:pre"> </span>good g;
<span style="white-space:pre"> </span>int amount;
};
class cart{
private:
<span style="white-space:pre"> </span>std::vector<struct item> glist;//订单列表
public:
<span style="white-space:pre"> </span>cart(){}
<span style="white-space:pre"> </span>void add(good g);//添加商品
<span style="white-space:pre"> </span>void deleteByGoodname(string goodname);//删除商品
<span style="white-space:pre"> </span>double total();
<span style="white-space:pre"> </span>void display();//购物列表展示
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>double changeTotal();//TODO,改变总价
<span style="white-space:pre"> </span>void changeRateByGoodname(string);//TODO,改变商品折扣率
<span style="white-space:pre"> </span>void changPriceByGoodname(string);//TODO,改变商品价格
};
void cart::add(good g){
<span style="white-space:pre"> </span>std::vector<struct item>::iterator iter=glist.begin();
<span style="white-space:pre"> </span>for(;iter!=glist.end();++iter){
<span style="white-space:pre"> </span>if(iter->g.getGoodname() == g.getGoodname()){
<span style="white-space:pre"> </span>(*iter).amount++;
<span style="white-space:pre"> </span>return;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>item t;
<span style="white-space:pre"> </span>t.g = g;
<span style="white-space:pre"> </span>t.amount = 1;
<span style="white-space:pre"> </span>glist.push_back(t);
}
void cart::deleteByGoodname(string goodname){//按名字删除一个商品
<span style="white-space:pre"> </span>std::vector<struct item>::iterator iter=glist.begin();
<span style="white-space:pre"> </span>for(;iter!=glist.end();++iter){
<span style="white-space:pre"> </span>if(iter->g.getGoodname() == goodname){
<span style="white-space:pre"> </span>iter->amount--;
<span style="white-space:pre"> </span>if(iter->amount == 0){
<span style="white-space:pre"> </span>glist.erase(iter);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>cout<<"no this good"<<endl;
}
void cart::display(){
<span style="white-space:pre"> </span>cout<<"********* good list *********"<<endl;
<span style="white-space:pre"> </span>if(glist.size()){
<span style="white-space:pre"> </span>std::vector<struct item>::const_iterator iter=glist.begin();
<span style="white-space:pre"> </span>for(;iter!=glist.end();++iter){
<span style="white-space:pre"> </span>cout<<"goodname: "<<iter->g.getGoodname()<<endl
<span style="white-space:pre"> </span><<"price : "<<iter->g.getPrice()<<endl
<span style="white-space:pre"> </span><<"rate : "<<iter->g.getRate()*100<<"%"<<endl
<span style="white-space:pre"> </span><<"amount : "<<iter->amount<<endl
<span style="white-space:pre"> </span><<"total: : "<<total()<<endl<<endl;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}else{
<span style="white-space:pre"> </span>cout<<"empty list"<<endl<<endl;
<span style="white-space:pre"> </span>}
}
double cart::total(){
<span style="white-space:pre"> </span>if(glist.size()){
<span style="white-space:pre"> </span>std::vector<struct item>::const_iterator iter=glist.begin();
<span style="white-space:pre"> </span>double sum=0.0;
<span style="white-space:pre"> </span>for(;iter!=glist.end();++iter){
<span style="white-space:pre"> </span>sum += iter->g.getPrice() * iter->g.getRate() * iter->amount;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return sum;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return 0;
}
#endif
//test.cpp
#include "cart.h"
int main()
{
<span style="white-space:pre"> </span>good g("apple", 76);
<span style="white-space:pre"> </span>cart c;
<span style="white-space:pre"> </span>c.display();
<span style="white-space:pre"> </span>c.add(g);
<span style="white-space:pre"> </span>c.display();
<span style="white-space:pre"> </span>c.add(g);
<span style="white-space:pre"> </span>c.display();
<span style="white-space:pre"> </span>c.deleteByGoodname(g.getGoodname());
<span style="white-space:pre"> </span>c.display();
<span style="white-space:pre"> </span>c.deleteByGoodname(g.getGoodname());
<span style="white-space:pre"> </span>c.display();
<span style="white-space:pre"> </span>c.deleteByGoodname(g.getGoodname());
<span style="white-space:pre"> </span>c.display();
<span style="white-space:pre"> </span>c.deleteByGoodname(g.getGoodname());
<span style="white-space:pre"> </span>c.display();
<span style="white-space:pre"> </span>return 0;
}