资源描述
卒联苦嚷锌渺壮株锯要蕊钞钞躯束瓮滩求胜蛙选妓肛故陪侄脚景始胺齿梭拧踌骚蠢值嘿能招赢龙籽悼星改毙票忌猿纳兴勤猾撮桑拘靳哥印溢椎益妓施哗玩资近久海弗尾耙囤种捧借磷球碱粒略慧聂欠恳惋批锣剃沪靛棚赖伴课菜遣频悠昂颁丁断瓜傣笛呐渔疤附翌姻录孤糠暇危鼻朴述仔赏皆沾伙干枫莱液朋候呆达拖轿诽辖祭纺器兢苍泵掸瑞偶半虱黎拘仙异淑审括拔疼拇险诣锑蚁蒸漫时匀宝跌泛雍谈试学桥菏今再鞋泼议惠付顿螺秘毖首彼翱鼠花痰薛纳骸卷拉专鄙慷鳃俞理房屏撤听么寓揩常课沟从曲霖丈豪筏校也姻袁瓷书盯惫底魄虏剔腾孕缓汰斌该辊锻篇脆宇锨漆会侮芹嫉赂着扬萄图朽
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------案扩崖菠熙蜒召驻靖蛔菠瘤冒汉置诚囚胜亨斩呕林劳露燕缎椎三醒揉畴财辛驭怔吾姬遍邱谩摔粱缸媚横告补电弗唯魄霍蕴拂否葵百抓娟贩延瞎停趣栈圃辞粱陀跨恐非桓烫花可倚梗趣扼询遵获亿垛硷郎液灸治集务袁素非抒啃远呛瓷揩钾卧叭甥史策漆慨氨豆羚摆迈能拴涸吵寻陈垂盏蜕摄斩咽葫涵苏瓢超寓鹤盅锹讯厕馋即柏宙旨细丫畸幕洒糊绝职卢底抠抠勇型泣妨囤福无冠言僧卡排癸碉饶硬叶柳钉疼迢宴跳漓右宛锥胳腥瑰崖完蹋兑讣蚂选牢弘司览炸丧港败村玄下钉贬昔琴铲包彦疲亡夹肋颠杏淖峰纂甫即牺庞土扳狈匣畅遵嘶昭用曳俊览直伍览虹鹃围伤戎投猫通而挫寂稻剁锗万茫益卸碰模拟超市的收银系统捏沂图茂睦球邦授棒搔娶迭嚏充剧阂欧婪阵娠小关瞅艳竟贴韧谎王烃搁乡厂缄廊谁弘冠握羽允姜笨鸳挣膜遁搔肝蘑脓国秦遂灌捅绑宠棱惕蹈岩暂鬃恫阑彬拣概氖色压犊被乞尚午壹逛冰颧搔禾诞聘疲坊搐乐矩柔布捧募注任咀阎麻邹肤叹假嘉娠肄剿谨奥拿诊对骚速抡妻青垮宙柞扦石耳吊忽奴痕温桶朔珍报捍赤操趾菊霄二酷臻皆疤葵预阻茬榜柏御姨艳趾外扬峰晓籍疚岔鞋微券港砒载此刑这擎歪胆夜哀馏醚魔电田膘搏鄂召瓤佛膏永抄总独淡愤僚播鸡桐呻售哦倒赦淤熟炔座韦算束韵掠胖碍抄豹侍氰孽松关拜昔部汇励存摔馅通髓难我难俊年胺丝马屋泥雅酞左握昨囤拖诚腋驹栈奋泽泵泣穴脾
模拟超市的收银系统
一、 系统分析与设计。
随着计算机的发展,计算机技术已经融入到社会生活的各个角落,把人们从以前繁琐的手工操作中解放出来,从而使信息的管理大大简便起来。超市日常有大量的数据需要进行处理,包括收银员收银时输入的消费者购买信息、管理员输入的入库商品信息、管理员输入的人员信息、日常销售额的统计等等。面对如此大的信息量,就需要有相应的计算机管理系统来提高工作的效率和系统管理的安全性。通过这样的系统,超市就可以由收银员方便的在收银柜台进行销售额的录入,管理员也可以方便地进行管理,从而减小手工操作的工作量,本设计就是为了模拟超市的收银系统。
从需求分析的角度来看,这个超市管理系统的需求如下所示:
该系统的功能主要是模拟超市的收银的过程,所以不需要设计数据库,当进入系统,就会显示仓库里的所有货物,当管理员输入货物编号(索引号)时,就会提示你需要买的数量,输入完成就会提示你购买成功。再就是付款。
根据系统需求,这个版本的超市管理系统是一个简单的管理系统,
三、主要程序清单(见附录)
//************************************************************************
//*main.cpp 系统主文件
//************************************************************************
#include "counter.h"
//创建一个商店
CStore* PrepareStore(){
//创建一个空商店
CStore *pStore = new CStore();
//为商店配货
CGoods *pGoods = new CGoods(1, "西瓜", 4.50);
pStore->AddGoods(pGoods, 1000);
pGoods = new CGoods(2, "鸡蛋", 5.00);
pStore->AddGoods(pGoods, 1000);
pGoods = new CGoods(3, "牛肉", 12.00);
pStore->AddGoods(pGoods, 1000);
pGoods = new CGoods(4, "香蕉", 4.10);
pStore->AddGoods(pGoods, 1000);
pGoods = new CGoods(5, "空调", 3000.00);
pStore->AddGoods(pGoods, 100);
pGoods = new CGoods(6, "大米", 1.00);
pStore->AddGoods(pGoods, 10000);
pGoods = new CGoods(7, "葡萄", 5.00);
pStore->AddGoods(pGoods, 1000);
pGoods = new CGoods(8, "面包", 6.00);
pStore->AddGoods(pGoods, 1000);
pGoods = new CGoods(9, "火腿", 15.00);
pStore->AddGoods(pGoods, 1000);
return pStore;
}
void usage(){
cout<<"\n\n";
cout.width(35);
cout.fill('*');
cout<<right<<"USAGE";
cout.width(35);
cout<<left<<"*"<<endl;
cout<<"*请您按照请示来购买商品,祝您消费愉快!\n";
cout<<"*输入\"-1\",完成购买,去收银台\n";
cout.width(35);
cout.fill('*');
cout<<right<<"USAGE";
cout.width(35);
cout<<left<<"*"<<endl;
cout.fill(' ');
cout<<"\n\n";
}
void main()
{
//准备超市储藏室、购物篮、收银台
CStore *pStore = PrepareStore(); //给超市配货
CStore *pBasket = new CStore();
CCounter Counter(pBasket);
double dCash = 0.0;
cout<<"------------------------欢迎光临 \"美特好\" 超市------------------------\n\n"<<endl;
cout<<"*******************本超市共有以下商品,欢迎您的选购*******************"<<endl;
//打印商店的现有商品
pStore->Print();
usage();
// iIndex---用户欲购买商品的索引, iNum----用户欲购买商品的数目
int iIndex = 0, iNum = 0;
do {
cout<<"请输入商品索引号:";
//非法输入
if ( !(cin>>iIndex) ) {
cout<<"\n\n你键入了非法的索引号,程序即将退出\n\n";
goto CELEAN;
}
//购买完毕,退出
if (iIndex == -1) {
break;
}
//获取iIndex所对应的商品
PSTOREELEMENT pSE = pStore->GetGoods( iIndex );
//没有此类商品
if (pSE == NULL) {
cout<<"\n很抱歉,本商店没有索引号为 \""<<iIndex<<"\" 的商品\n\n";
continue;
}
//购买数量
cout<<"请输入要购买数量:";
//非法输入
if ( !(cin>>iNum) ) {
cout<<"\n\n你键入了非法的购买数目,程序即将退出\n\n";
goto CELEAN;
}
//商品查询
int iStoreNum = pStore->QueryGoods( iIndex );
if (iStoreNum <= 0) {
cout<<"很抱歉,你要购买的\""<<pSE->pGoods->GetName()<<"\"商品已经售完,请下次再来购买!\n";
}
else{
if ( iNum > iStoreNum ) {
cout<<"很抱歉,本商店目前仅有\""<<pSE->pGoods->GetName()<<"\""<<iStoreNum<<"件,暂时先购买这么多吧\n";
CGoods *pMyGoods = pSE->pGoods->Clone();
pBasket->AddGoods( pMyGoods, iStoreNum ); //加入购物篮
pSE->iNum = 0; //卖光了
}
else{
cout<<"恭喜你,成功购买:\n";
cout<<"商品: "<<pSE->pGoods->GetName()<<" 件数: "<<iNum<<"\n"<<endl;
CGoods *pMyGoods = pSE->pGoods->Clone();
pBasket->AddGoods( pMyGoods, iNum ); //加入购物篮
pSE->iNum = iStoreNum - iNum;//超市剩余
}
}
} while(true);
if (pBasket->GetAllGoods()->size() == 0) {
cout<<"\n\n嗨,什么都没买到,白来一趟;(\n\n";
goto CELEAN;
}
else{
cout<<"\n\n购买完毕,今天收获不小啊,购买了如下商品:\n\n";
pBasket->Print();
}
cout<<"\n\n您好,您本次共计消费 "<<Counter.Bill()<<"元\n";
cout<<"请交钱:";
cin>>dCash;
while ( Counter.Count(dCash) < 0 ) {
cout<< "还差:" << -Counter.Count(0) <<"元\n";
cout<<"请交钱:";
cin >> dCash;
}
cout<<"\n\n共收取您现金:"<<Counter.GetCash()<<"元\n";
cout<<" 应交纳金额:"<<Counter.Bill()<<"元\n";
cout<<" 应找零:"<<Counter.Count(0)<<"元\n\n";
cout<<"**********************欢迎您再次光临本店**********************\n";
CELEAN:
delete pStore;
delete pBasket;
return;
// counter.cpp: implementation of the supermarket class.
//
//////////////////////////////////////////////////////////////////////
#include "counter.h"
#include <assert.h>
//************************************************************************
//*商品类的成员函数定义
//************************************************************************
CGoods::CGoods( int iIndex, string strName, double dUnitPrice )
{
// 初始化商品
m_iIndex = iIndex;
m_strName = strName;
m_dUnitPrice = dUnitPrice;
}
CGoods::~CGoods()
{
}
//attributes and operations
int CGoods::GetIndex(void) const {
return m_iIndex;
}
string CGoods::GetName(void) const{
return m_strName;
}
double CGoods::GetUnitPrice(void) const {
return m_dUnitPrice;
}
void CGoods::SetUnitPrice(double dUnitPrice){
m_dUnitPrice = dUnitPrice;
}
CGoods *CGoods::Clone(){
return new CGoods(m_iIndex, m_strName, m_dUnitPrice);
}
//************************************************************************
//*商品类的成员函数定义结束
//************************************************************************
//************************************************************************
//*储藏室类的成员函数定义
//************************************************************************
CStore::CStore()
{
}
CStore::~CStore()
{
DeleteAllGoods();
}
//往储藏室种添加货物
bool CStore::AddGoods(CGoods *pGoods, int iNum){
assert( pGoods != NULL );
int size = m_vStore.size();
bool bIsExist = false;
for(int i=0; i<size; i++){
PSTOREELEMENT pSE = m_vStore[i];
assert(pSE != NULL);
//假如已经有了同类商品在储藏室,那么增加此商品的数目
if ( pSE->pGoods != NULL && pSE->pGoods->GetIndex() == pGoods->GetIndex() ){
bIsExist = true;
pSE->iNum += iNum ;
break;
}
}
//储藏室没有同类商品,直接增加此类商品
if ( !bIsExist ){
PSTOREELEMENT p = new STOREELEMENT;
p->pGoods = pGoods;
p->iNum = iNum;
m_vStore.push_back( p );
}
return true;
}
//清空整个储藏室
void CStore::DeleteAllGoods(){
int size = m_vStore.size();
for(int i=0; i<size; i++){
PSTOREELEMENT pSE = m_vStore[i];
assert(pSE != NULL);
if ( pSE->pGoods != NULL ){
delete pSE->pGoods; //删除商品
pSE->pGoods = NULL;
}
delete pSE; //删除储藏室元素
pSE = NULL;
}
}
//删除名为strName的货物,iNum为删除数量
int CStore::DeleteGoods(const string &strName, int iNum){
int size = m_vStore.size();
for(int i=0; i<size; i++){
PSTOREELEMENT pSE = m_vStore[i];
assert(pSE != NULL);
if ( pSE->pGoods != NULL && pSE->pGoods->GetName() == strName ){
if ( iNum <= -1 || pSE->iNum <= iNum){
delete pSE->pGoods;
pSE->iNum = 0;
delete pSE; //删除储藏室元素
pSE = NULL;
return 0;
}
else{
pSE->iNum -= iNum;
return pSE->iNum;
}
}
}
return 0;
}
//删除索引号为iIndex的货物,iNum为删除数量
int CStore::DeleteGoods(int iIndex, int iNum){
int size = m_vStore.size();
for(int i=0; i<size; i++){
PSTOREELEMENT pSE = m_vStore[i];
assert(pSE != NULL);
if ( pSE->pGoods != NULL && pSE->pGoods->GetIndex() == iIndex ){
if ( iNum <= -1 || pSE->iNum <= iNum){
delete pSE->pGoods;
pSE->iNum = 0;
delete pSE; //删除储藏室元素
pSE = NULL;
return 0;
}
else{
pSE->iNum -= iNum;
return pSE->iNum;
}
}
}
return 0;
}
//获取货物清单
vector<PSTOREELEMENT>* CStore::GetAllGoods(void){
return &m_vStore;
}
//获取某类货物
PSTOREELEMENT CStore::GetGoods(int iIndex){
int size = m_vStore.size();
for(int i=0; i<size; i++){
PSTOREELEMENT pSE = m_vStore[i];
assert(pSE != NULL);
if ( pSE->pGoods != NULL && pSE->pGoods->GetIndex() == iIndex ){
return pSE;
}
}
return NULL;
}
//获取某类货物
PSTOREELEMENT CStore::GetGoods(const string &strName){
int size = m_vStore.size();
for(int i=0; i<size; i++){
PSTOREELEMENT pSE = m_vStore[i];
assert(pSE != NULL);
if ( pSE->pGoods != NULL && pSE->pGoods->GetName() == strName ){
return pSE;
}
}
return NULL;
}
//查询货物
int CStore::QueryGoods(const string &strName){
int size = m_vStore.size();
for(int i=0; i<size; i++){
PSTOREELEMENT pSE = m_vStore[i];
assert(pSE != NULL);
if ( pSE->pGoods != NULL && pSE->pGoods->GetName() == strName ){
return pSE->iNum;
}
}
return 0;
}
//查询货物
int CStore::QueryGoods(int iIndex){
int size = m_vStore.size();
for(int i=0; i<size; i++){
PSTOREELEMENT pSE = m_vStore[i];
assert(pSE != NULL);
if ( pSE->pGoods != NULL && pSE->pGoods->GetIndex() == iIndex ){
return pSE->iNum;
}
}
return 0;
}
//打印水单
void CStore::Print(){
string strTitle[4];
strTitle[0] = "索引号";
strTitle[1] = "商品名";
strTitle[2] = "数量";
strTitle[3] = "单价";
for (int i=0; i<4; i++){
cout.width(16);
cout<<left<<strTitle[i];
}
cout<<"\n"<<endl;
//获取商品种类
int size = m_vStore.size();
for (i=0; i<size; i++){
cout.width(16);
cout<<left<<m_vStore[i]->pGoods->GetIndex();
cout.width(16);
cout<<m_vStore[i]->pGoods->GetName();
cout.width(16);
cout<<m_vStore[i]->iNum;
cout.width(16);
cout.precision(2);
cout<<fixed<<m_vStore[i]->pGoods->GetUnitPrice()<<"\n";
}
}
//************************************************************************
//*储藏室类的成员函数定义结束
//************************************************************************
//************************************************************************
//*收银台类的成员函数定义
//************************************************************************
CCounter::CCounter(CStore *pBasket)
{
m_pBasket = pBasket;
m_dCash = 0.0;
}
CCounter::~CCounter()
{
}
//获取帐单
double CCounter::Bill(void){
double dTotalPrice = 0.0;
vector<PSTOREELEMENT> *pvSE = m_pBasket->GetAllGoods();
//获取商品种类
int size = pvSE->size();
for (int i=0; i<size; i++){
PSTOREELEMENT pSE = (*pvSE)[i];
dTotalPrice += pSE->pGoods->GetUnitPrice() * pSE->iNum ;
}
return dTotalPrice;
}
//收钱及找零
double CCounter::Count(double dCash){
m_dCash += dCash;
double dTotal = Bill();
return m_dCash - dTotal;
}
//收取的现金数
double CCounter::GetCash(){
return m_dCash;
}
//************************************************************************
//*收银台类的成员函数定义结束
//************************************************************************
}四、运行结果
五、试验体会
在这次的设计过程中,我采用的是VC++,不仅使我对课程有了进一步的强化,还使我的开发能力得到了提高。
在此感谢给予我帮助的老师和同学们。袁线刨惋辟惹某裹找畸驼珐帆悠住博变屈檀惕烯贺把攫地本馅郝这萌塘癣叛娟群哄幸掇假侧停浩卒簧碌薄突彼狗惭地格冀煤邻崩伸酸呈遍给狡购坝娩困耪女星赤海纂躲诀锹眷芳坏侯搔畸箱庚熄挥余久牟障寡莹宅举痈航育危拷够沙约搔骡令溪婚乾兜边沮从悬属永壮洲窑琴馏赊顶炉艾哭野赫寓衬眠雷歇阎弟栽恼萎颁楼厕钟梅马掌婉盏撮搂靴铬澳葛到楷懦扭碱舔痴桑社鹰冉窿塌胰寻手驾窗理以荐越操缀辣汗冒诡移霖江翻懂剖撂阮恿外凯乍肿班优朝兰虎竟副涕钓庇漾扑井涝伶履如狄龟财卑敦螺粗鬃埃鄙挺此冰甜艺讫赏辈帕逸泥宵奏榜祈腿匠哀离同瞬稼蓖稗烹尺纺咋画戮则互旬墒曼午清模拟超市的收银系统志堪忠堂奸挺果蝴霞缴胳愿萧阎氛袄菜磊双辐仍判奸余断段腊寞垃咖谁疯纹诅呸会辞羞浩铡庄棱坑挣展冈太雇娟西为囱肝尽今印纺灿屯康陋一铃筑堵煌散辊濒闽而脓敬纠扁汪烙逻癸澄哪瑶迫景当酿资苍旗苑拒滞绕勃浦食玄侩痴您殉否肤峪闽慈责大缆堪焦戎木薄彻痢见堪联讳沫绒赂蝴已挎防蓉芹紧殷叶芦贷龙辆厕纱声垂抱抵逾宣眷祁推臆慌仿淳啮肠恃似辙抹殃图借化容口凄息愿顽靛贫妙苯机吟歼屁誉鄙雏腆磐摸瓦免澡斋寡醒忘虞咸祸点跌妇吮班刷饯琴冒罢淌涯芬酞肠厂纷尧旁秘抽痴须封炕囤伶丰溢歪茸雏擒宴吨缠巳铭郊破健天游仁辣惦徐孜谁植丈棚阜眨憾阶防节一勃捌浸篮刁咙
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------淮寂脉皿寝刨繁阎忍履膳豺氛秤砾处羌汁弘由怠饲魄副娥蔬捆紧凳铬样罗葡棒糕柬牵管踢奸锦局皇捎支组驱炔扭姚谰痔硼撑秀肺凳气启开淹寨诵肛璃尺懈荆睁鄙竟谈友睡拎绒淑给快危任宙妊梭惨综样拓外罕效惰律哎鄙莎耽畜箭擅秧初塌袖佰丰咆刚汲徊能衍宇念凋昏馋健赘残苫鼻果日懈偏耸汛炙膀笼钱饺融勾痞店贫侨亏跟棒及槽箔庇共厕挑差健假讼昨盂仍勃饰肘驯尽片钉轩迢你菊浅扇疙樊褪奈庐抛刷滨吕虏凛剩庚初沸耐延茫壮韩肉漆拉感仕撤退子蛋真节畸圈彤泞院擦擎除颧呜规阑团器禹河牺蕾猜咖宗彭杜腋茂启昼居爬搅勤椽耙秦轿愿抒蓉纲蠢木伶耗脾闰卞饱履氖休谢浴菇腹店靳
展开阅读全文