c++程序语言设计商品销售统计程序.docx
《c++程序语言设计商品销售统计程序.docx》由会员分享,可在线阅读,更多相关《c++程序语言设计商品销售统计程序.docx(15页珍藏版)》请在冰豆网上搜索。
c++程序语言设计商品销售统计程序
合肥学院
计算机科学与技术系
课程设计报告
2009~2010学年第二学期
课程
程序设计语言Ⅱ课程设计
课程设计名称
商品销售统计程序
学生姓名
学号
0904032003
专业班级
网络工程
(2)班
指导教师
何立新、刘洁群
实验题目:
商品销售统计程序
设计内容:
编写商品销售统计程序,商品的信息有:
商品的名称,计量单位(重量或件),单价。
所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。
客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。
运用面向对象的程序设计方法,要求选择动态数组类模板或链表类模板,任务中要运用I/O流对象对文件进行读写操作。
本题程序分为两个部分:
第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。
程序运行时由用户选择进入哪一部分功能,并能在运行时在两部分之间切换。
第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码(如-1)表示本次购物结束。
此时。
程序计算出应付钱款数并显示。
选作内容
程序在营业结束时统计每种商品的销售量,销售金额及总营业额。
因此第二部分应有营业结束的选择,当用户选择此项时屏幕上显示当天营业的每种商品的销售量,销售金额及总营业额。
注意,商品类的数据成员应增加有商品的销售量和销售金额。
总营业额是所有商品的营业额之和,可用静态数据成员实现。
或可由原商品类派生出一个特殊的类,增加上面的数据成员及相应的成员函数。
测试数据
程序应输入不少于10种商品的信息,并进行模拟运行。
主要算法设计:
1.面向对象程序设计方法
2.界面制作,switch的应用。
3.类和对象。
4.动态数组(链表)类模板。
5.文件的读写。
(未运用)
需求分析:
某小型超市,根据进货不同销售货物也不同。
存储商品的名称,计量单位(重量或件),单价等信息。
用链表记录每个商品信息并加以处理,编号可以使用者自行输入。
程序都各种不同货物的买进有总价统计功能,可以在输入不同货物买进信息后进行总结处理。
另外,程序加入了找零功能,在客户付出相应的款项之后可以直接的出应该找零的数目,并显示,更加方便使用。
在程序显示客户所购买的物品的同时还会有物品的单位显示,可以更加直白的告诉客户每种物品是按照什么标准进行计价。
为了避免操作失误,每一步程序操作都会有确认环节,以防止使用者错误无法更改的情况发生。
设计:
根据上述需求,设计一个基类Sale,然后派生出m_number(货物编号)
,m_name(货物名称),m_unit(货物单位),m_price(货物价格),m_quantity(货物数量)。
在基类中,除了定义构造函数和析构函数以外,还应统一定义对各种货物信息都应有的操作,这样可以规范各派生类的基本行为。
但是各种货物的价格计算方法不同,不能在基类Sale中统一定义计算方法。
各种货物信息的显示内容也不同,同样不能在基类中统一定义显示方法。
因此,在Sale类中用纯虚函数的方式定义了计算总价函数Total()和显示信息函数Display(),然后在派生类中再根据各自的同名函数实现具体的功能。
在Sale类中一共包括十一个函数,分别为构造函数、析构函数以及各种功能函数。
在Create函数中通过输出语句的提示输入各种数据,并将输入的数据储存到定义的指针数组中,等一种商品数据信息输入完毕后,会弹出一个提示语句询问是否继续输入商品信息,可根据个人意愿输入Y(或y表示继续输入)N(或n表示中断输入),若输入Y(或y)则调用本函数,进行数据输入;若输入N(或n)弹出一个提示语句询问是否进行其他操作,在根据个人意愿输入正确的字符来进行相应的操作。
Diaplay函数是将输入的所有商品信息显示在屏幕上,根据提示语句将所有的输入或是修改的商品信息显示在操作屏幕上。
Total函数则是总计函数,是将消费者购买的所有商品进行计费,并将消费者需要支付的费计算出来显示在屏幕上。
Display函数是将各种商品费用进行累加,在将累加的结果返回给Total函数。
在主函数的运行过程中会出现一个提示语句将整个程序分成两个部分,分别为商品信息管理和商品销售管理。
测试结果及其分析:
验证通过无错误:
运行后操作界面:
输入选项1后,数据开始录入:
录入信息完成(自动返回菜单):
进行买入操作,若要退出则按N键:
买入完成后统计总计消费并找零(自动返回菜单):
调试分析:
在起始阶段,出现提示语句,询问进入哪部分操作,输入字符m,进入商品信息管理部分,再根据提示,输入字符0,进入商品信息输入部分,按照提示输入的数据被储存在指针数组中,一个完整的商品信息录入后,就会出现一个询问是否继续输入的语句,按此方法输入几种商品信息后,终止商品信息的输入,在按照提示语句进入商品信息修改部分,在此部分修改部分商品信息后,退出,再在提示语句的提示下输入字符s进入商品销售管理部分,在此部分,输入字符0进入商品信息显示部分,将显示在第一部分输入以及修改后的所有商品信息,以供消费者选择,退出后再进入商品买入部分,根据提示输入正确的字符或字符串,购买您所需的商品,结束购买后会出现商品消费总计,输出消费者所需付的费用并根据实际付的费用计算出找零。
在测试与调试过程中,我是按照屏幕提示进行操作,输入符合程序编排的数据,一步一步进行调试的。
心得体会:
c++区别于c在于它具有c所没有的扩展性,重用性,灵活性。
具体的说c++允许程序员,将问题的具体实现的细节推迟到运行时,而不是c的编译时期。
这样的好处是,我们可以在需要的时候,在那些未具体实现的地方扩充原有的功能,重复使用已有的代码,从而节约编写应用程序的时间。
任何一个问题的都是由它内部的各种因素决定,我们抓住这些因素加以总结并转换成c++中的各种class,以class为桥梁,实现一个完整的问题解决方案。
在这次课程设计过程中,我更加熟悉了C++的使用方法,对于选择、循环、链表、数组等知识有了更深的认识,也对于C++的学习产生了浓厚的兴趣,我期待在将来利用我学过的C++知识为我走向社会打开一个崭新的大门。
参考文献:
[1].郑莉等编著《C++语言程序设计(第三版)》北京:
清华大学出版社
[2].郑莉等编著《C++语言程序设计(第三版)学生用书》北京:
清华大学出版社
[3].李春葆等编著《C++程序设计学习与上机实验指导》北京:
清华大学出版社
[4].范辉等编著《VisualC++6.0程序设计简明教程》高等教育出版社
[5].李龙澍《C++程序设计实训教程》北京:
清华大学出版社
[6].洪国胜等编著《C++Builder程序设计轻松上手》北京:
清华大学出版社
[7].严蔚敏等《数据结构(c语言版)》北京:
清华大学出版社,1997年4月第1版。
[8].胡学钢等《数据结构算法设计指导》北京:
清华大学出版社,1999年第1版。
附程序代码:
#include"iostream"
#include"string"
#include"iomanip"
usingnamespacestd;
structSale
{
stringm_number;
stringm_name;
stringm_unit;
floatm_price;
unsignedm_quantity;
structSale*next;
};
typedefstructSaleNode;
typedefNode*Link;
LinkCreate(LinkHead)
{Head=(Link)newNode;
Head->m_number="";
Head->m_name="";
Head->m_unit="";
Head->m_price=0.0;
Head->m_quantity=0;
Head->next=NULL;
Linkptr;
ptr=Head;
LinkDNode;
charGoOn;
do
{
cout<<"商品初始数据已录入!
"<stringnumber,name,unit;
floatprice;
unsignedintquantity;
cout<<"输入代码:
"<cin>>number;
cout<<"输入名称:
"<cin>>name;
cout<<"输入价格:
"<cin>>price;
cout<<"输入单位:
"<cin>>unit;
while(cin.fail())
{
cout<<"请输入正确的格式:
"<cin.clear();
fflush(stdin);
cin>>price;
}
cout<<"输入数量:
"<cin>>quantity;
while(cin.fail())
{
cout<<"请输入正确的格式:
"<cin.clear();
fflush(stdin);
cin>>quantity;
}
DNode=(Link)newNode;
DNode->m_number=number;
DNode->m_name=name;
DNode->m_price=price;
DNode->m_unit=unit;
DNode->m_quantity=quantity;
DNode->next=NULL;
ptr->next=DNode;
ptr=DNode;
cout<<"商品信息录入成功!
是否继续录入?
(Y/N)";
cin>>GoOn;
}while(GoOn=='Y'||GoOn=='y');
returnHead;
}
voidRelease(LinkHead)
{
Linkptr;
while(Head!
=NULL)
{
ptr=Head;
Head=Head->next;
deleteptr;
}
}
LinkSearch(LinkHead,string&number)
{
Linkptr;
ptr=Head;
while(ptr!
=NULL)
{
if(ptr->m_number==number)
returnptr;
else
ptr=ptr->next;
}
cout<<"无此商品!
"<returnptr;
}
voidDisplay(LinkHead)
{
Linkptr;
ptr=Head->next;
cout<<"==========================================================="<cout<<"===============所有商品信息清单============================"<cout<<"==========================================================="<cout<<"货品代码=======货品名称======货品价格======货品单位======货品数量===="<while(ptr!
=NULL)
{
cout<m_number
<m_name
<m_price
<m_unit
<m_quantity<ptr=ptr->next;
}
}
voidDisplay_One(LinkHead,string&number,unsignedquantity)
{
Linkptr;
ptr=Search(Head,number);
cout<<"货品代码=======货品名称======货品价格======货品单位======货品数量======小计(元)===="<cout<m_number
<m_name
<m_price
<m_unit
<<m_price<}
floatCheckOut(LinkHead,string&number,unsignedquantity)
{
Linkptr;
floatsum(0);
ptr=Search(Head,number);
sum=(ptr->m_price*quantity);
returnsum;
}
voidTotal(LinkHead)
{
Linkptr;
ptr=Head;
floatsum(0);
floatfactly;
charGoOn;
while
(1)
{
cout<<"要结束商品买入请按\'N\',其它任意键表示继续买入!
"<cin>>GoOn;
if(GoOn=='N'||GoOn=='n')
break;
else
{
stringnumber;
unsignedintquantity;
cout<<"输入要购买的商品代码:
"<cin>>number;
cout<<"输入要购买的数量:
"<cin>>quantity;
sum+=CheckOut(ptr,number,quantity);
cout<<"你购买的商品为:
"<Display_One(ptr,number,quantity);
}
}
cout<<"----------------------------------------------------"<cout<<"你应该付"<"<cout<<"你实际付(元):
";
cin>>factly;
cout<<"应该找回你"<"<}
intmain()
{
system("colorBD");
LinkHead=NULL;
inta=1;
while(a)
{
cout<<"***************************************************"<cout<<"*---------------------菜单------------------------*"<cout<<"*-------------------操作选项----------------------*"<cout<<"*1.初始数据录入*"<cout<<"*2.商品交易*"<cout<<"*3.显示数据*"<cout<<"*0.退出系统*"<cout<<"***************************************************"<intmenu;
cin>>menu;
if(cin.fail())
{
cout<<"请按菜单对应的数字选择合适的操作!
"<cin.clear();
fflush(stdin);
cin>>menu;
}
switch(menu)
{
case0:
cout<<"已退出系统!
"<a=0;
break;
case1:
Head=Create(Head);
break;
case2:
Total(Head);
break;
case3:
Display(Head);
break;
}
}
Release(Head);
return0;
}