模拟超市的收银系统Word文档下载推荐.docx
《模拟超市的收银系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《模拟超市的收银系统Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
,3000.00);
AddGoods(pGoods,100);
pGoods=newCGoods(6,"
大米"
1.00);
AddGoods(pGoods,10000);
pGoods=newCGoods(7,"
葡萄"
pGoods=newCGoods(8,"
面包"
6.00);
pGoods=newCGoods(9,"
火腿"
15.00);
returnpStore;
}
voidusage(){
cout<
<
"
\n\n"
;
cout.width(35);
cout.fill('
*'
);
right<
USAGE"
left<
*"
endl;
*请您按照请示来购买商品,祝您消费愉快!
\n"
*输入\"
-1\"
完成购买,去收银台\n"
'
voidmain()
{
//准备超市储藏室、购物篮、收银台
CStore*pStore=PrepareStore();
//给超市配货
CStore*pBasket=newCStore();
CCounterCounter(pBasket);
doubledCash=0.0;
------------------------欢迎光临\"
美特好\"
超市------------------------\n\n"
cout<
*******************本超市共有以下商品,欢迎您的选购*******************"
//打印商店的现有商品
pStore->
Print();
usage();
//iIndex---用户欲购买商品的索引,iNum----用户欲购买商品的数目
intiIndex=0,iNum=0;
do{
cout<
请输入商品索引号:
//非法输入
if(!
(cin>
>
iIndex)){
cout<
\n\n你键入了非法的索引号,程序即将退出\n\n"
gotoCELEAN;
}
//购买完毕,退出
if(iIndex==-1){
break;
//获取iIndex所对应的商品
PSTOREELEMENTpSE=pStore->
GetGoods(iIndex);
//没有此类商品
if(pSE==NULL){
\n很抱歉,本商店没有索引号为\"
iIndex<
\"
的商品\n\n"
continue;
//购买数量
请输入要购买数量:
//非法输入
iNum)){
\n\n你键入了非法的购买数目,程序即将退出\n\n"
//商品查询
intiStoreNum=pStore->
QueryGoods(iIndex);
if(iStoreNum<
=0){
很抱歉,你要购买的\"
pSE->
pGoods->
GetName()<
商品已经售完,请下次再来购买!
else{
if(iNum>
iStoreNum){
cout<
很抱歉,本商店目前仅有\"
iStoreNum<
件,暂时先购买这么多吧\n"
CGoods*pMyGoods=pSE->
Clone();
pBasket->
AddGoods(pMyGoods,iStoreNum);
//加入购物篮
pSE->
iNum=0;
//卖光了
}
else{
恭喜你,成功购买:
商品:
"
件数:
iNum<
AddGoods(pMyGoods,iNum);
iNum=iStoreNum-iNum;
//超市剩余
}while(true);
if(pBasket->
GetAllGoods()->
size()==0){
\n\n嗨,什么都没买到,白来一趟;
(\n\n"
gotoCELEAN;
}
else{
\n\n购买完毕,今天收获不小啊,购买了如下商品:
pBasket->
\n\n您好,您本次共计消费"
Counter.Bill()<
元\n"
请交钱:
cin>
dCash;
while(Counter.Count(dCash)<
0){
还差:
<
-Counter.Count(0)<
cin>
dCash;
\n\n共收取您现金:
Counter.GetCash()<
应交纳金额:
应找零:
Counter.Count(0)<
元\n\n"
**********************欢迎您再次光临本店**********************\n"
CELEAN:
deletepStore;
deletepBasket;
return;
//counter.cpp:
implementationofthesupermarketclass.
//
//////////////////////////////////////////////////////////////////////
#include<
assert.h>
//*商品类的成员函数定义
CGoods:
:
CGoods(intiIndex,stringstrName,doubledUnitPrice)
//初始化商品
m_iIndex=iIndex;
m_strName=strName;
m_dUnitPrice=dUnitPrice;
~CGoods()
//attributesandoperations
intCGoods:
GetIndex(void)const{
returnm_iIndex;
stringCGoods:
GetName(void)const{
returnm_strName;
doubleCGoods:
GetUnitPrice(void)const{
returnm_dUnitPrice;
voidCGoods:
SetUnitPrice(doubledUnitPrice){
CGoods*CGoods:
Clone(){
returnnewCGoods(m_iIndex,m_strName,m_dUnitPrice);
//*商品类的成员函数定义结束
//*储藏室类的成员函数定义
CStore:
CStore()
~CStore()
DeleteAllGoods();
//往储藏室种添加货物
boolCStore:
AddGoods(CGoods*pGoods,intiNum){
assert(pGoods!
=NULL);
intsize=m_vStore.size();
boolbIsExist=false;
for(inti=0;
i<
size;
i++){
PSTOREELEMENTpSE=m_vStore[i];
assert(pSE!
=NULL);
//假如已经有了同类商品在储藏室,那么增加此商品的数目
if(pSE->
pGoods!
=NULL&
&
pSE->
GetIndex()==pGoods->
GetIndex()){
bIsExist=true;
pSE->
iNum+=iNum;
break;
}
//储藏室没有同类商品,直接增加此类商品
if(!
bIsExist){
PSTOREELEMENTp=newSTOREELEMENT;
p->
pGoods=pGoods;
iNum=iNum;
m_vStore.push_back(p);
returntrue;
//清空整个储藏室
voidCStore:
DeleteAllGoods(){
=NULL){
deletepSE->
pGoods;
//删除商品
pGoods=NULL;
deletepSE;
//删除储藏室元素
pSE=NULL;
//删除名为strName的货物,iNum为删除数量
intCStore:
DeleteGoods(conststring&
strName,intiNum){
GetName()==strName){
if(iNum<
=-1||pSE->
iNum<
=iNum){
deletepSE->
pSE->
deletepSE;
pSE=NULL;
return0;
iNum-=iNum;
returnpSE->
iNum;
return0;
//删除索引号为iIndex的货物,iNum为删除数量
DeleteGoods(intiIndex,intiNum){
GetIndex()==iIndex){
//获取货物清单
vector<
PSTOREELEMENT>
*CStore:
GetAllGoods(void){
return&
m_vStore;
//获取某类货物
PSTOREELEMENTCStore:
GetGoods(intiIndex){
returnpSE;
returnNULL;
GetGoods(conststring&
strName){
//查询货物
QueryGoods(conststring&
returnpSE->
QueryGoods(intiIndex){
//打印水单
Print(){
stringstrTitle[4];
strTitle[0]="
索引号"
strTitle[1]="
商品名"
strTitle[2]="
数量"
strTitle[3]="
单价"
for(inti=0;
4;
cout.width(16);
strTitle[i];
//获取商品种类
for(i=0;
m_vStore[i]->
GetIndex();
GetName();
cout.precision
(2);
fixed<
GetUnitPrice()<
//*储藏室类的成员函数定义结束
//*收银台类的成员函数定义
CCounter:
CCounter(CStore*pBasket)
m_pBasket=pBasket;
m_dCash=0.0;
~CCounter()
//获取帐单
doubleCCounter:
Bill(void){
doubledTotalPrice=0.0;
vector<
*pvSE=m_pBasket->
GetAllGoods();
intsize=pvSE->
size();
PSTOREELEMENTpSE=(*pvSE)[i];
dTotalPrice+=pSE->
GetUnitPrice()*pSE->
iNum;
returndTotalPrice;
//收钱及找零
Count(doubledCash){
m_dCash