商品销售统计系统

商品销售统计系统

问题描述:编写商品销售统计程序,商品的信息有:商品的名称,计量单位(重量或件),单价。所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。

基本要求:程序分为两个部分:第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。程序运行时由用户选择使用哪一部分功能,并能在运行时在两部分之间切换。第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码(如-1)表示本次购物结束。此时。程序计算出应付钱款数并显示。

测试数据:程序应输入不少于10种商品的信息,并进行模拟运行。

实现提示:本程序的商品信息管理可定义一个商品类,每种商品作为商品类的实例(对象)存储在链表节点中。

选做内容:程序在营业结束时统计每种商品的销售量,销售金额及总营业额。因此第二部分应有营业结束的选择,当用户选择此项时屏幕上显示当天营业的每种商品的销售量,销售金额及总营业额。注意,商品类的数据成员应增加有商品的销售量和销售金额。总营业额是所有商品的营业额之和,可用静态数据成员实现。或可由原商品类派生出一个特殊的类,增加上面的数据成员及相应的成员函数。

 

完整代码:

#include <iostream>
#include <string>
#include <iomanip>    // setw()
using namespace std;


//全局变量
int i=0;         //库存的商品种类量 
char ch;           //用户输入的字符 
int r;            //用户输入的编号 
string code,name,unit;   //商品代码、名字、计价单位 
double price;   //单价 
int quantity;   //数量 


double total;  //顾客最后结账时的总价钱 


//ofstream f1("./test.txt");
//ofstream f2("./sell.txt");//构建输出流


class Commodity{     //商品类 
private:
string code;   //商品代码
string name;   //商品名称 
string unit;   //计价单位 
double price;    //单价 
int quantity;    //数量 

int xsl;   //该商品销售量 
double xsMoney;    //该商品销售金额 
static double sumMoney;   //总营业额定义为类的静态数据成员 
public:
Commodity();   //无参构造函数 
Commodity(string co,string na,string un,double pr,int qu);  //带参构造函数 
~Commodity();     //析构函数

void entry();     //商品信息录入 
void alter();      //商品信息修改 
void del();        //商品信息删除 
void show();       //商品信息显示 
void stat();      //商品销售统计 
void buy();      //商品买入 
};
double Commodity::sumMoney = 0;   //对静态数据域 总营业额sumMoney 进行初始化 


Commodity::Commodity(){}
Commodity::Commodity(string co,string na,string un,double pr,int qu){
code = co;
name = na;
unit = un;
price = pr;
quantity = qu;
}
Commodity::~Commodity(){}


Commodity *sp[100];    //对象指针数组,存放商品对象


void Commodity::entry(){       //商品入库 
cout<<"请选择:新品录入(1),旧品补货(2)"<<endl;
cin>>r;
if(r==1){
cout<<"请输入商品代码、名称、计量单位、单价、数量(之间用空格隔开):"<<endl;
cin>>code>>name>>unit>>price>>quantity;
sp[i]=new Commodity(code,name,unit,price,quantity);  //创建动态对象,将地址赋值给数组中的指针 
i++;
cout<<"信息录入成功"<<endl;
}
else if(r==2){
cout<<"请输入需要补货的商品名称:"<<endl;
cin>>name;
for(int k=0;k<i;k++){
if(name==sp[k]->name){
cout<<"该商品信息如下:"<<endl;
cout<<"商品代码+++++++商品名称+++++++计量单位+++++++商品价格+++++++商品数量"<<endl;
cout<<setw(15)<<left<<sp[k]->code
<<setw(15)<<left<<sp[k]->name
<<setw(15)<<left<<sp[k]->unit
<<setw(15)<<left<<sp[k]->price
<<setw(15)<<left<<sp[k]->quantity<<endl;
cout<<"输入需入库该商品的数量:"<<endl;
cin>>r;
sp[k]->quantity=(sp[k]->quantity) + r;

cout<<"补货成功!"<<endl;
cout<<"商品代码+++++++商品名称+++++++计量单位+++++++商品价格+++++++商品数量"<<endl;
cout<<setw(15)<<left<<sp[k]->code
<<setw(15)<<left<<sp[k]->name
<<setw(15)<<left<<sp[k]->unit
<<setw(15)<<left<<sp[k]->price
<<setw(15)<<left<<sp[k]->quantity<<endl;
break;
}
else if(k==i-1)   //当遍历到最后一个还不匹配,则不存在 
cout<<"该商品不存在,请重新确认入库类型!"<<endl;


cout<<"是否继续入库(y or n)"<<endl;
cin>>ch;
if(ch=='y')
entry();    //递归
}


void Commodity::alter(){      //商品信息修改 
cout<<"请输入需修改商品的名称:"<<endl;
cin>>name;
for(int k=0;k<i;k++){      //遍历商品对象数组 
if(name==sp[k]->name){
cout<<"该商品信息如下:"<<endl;
cout<<"商品代码+++++++商品名称+++++++计量单位+++++++商品价格+++++++商品数量"<<endl;
cout<<setw(15)<<left<<sp[k]->code
<<setw(15)<<left<<sp[k]->name
<<setw(15)<<left<<sp[k]->unit
<<setw(15)<<left<<sp[k]->price
<<setw(15)<<left<<sp[k]->quantity<<endl;

string ncode,nname,nunit;      //接收新的商品内容 
double nprice;
int nquantity;
cout<<"输入需要修改的内容编号:代码(1)、名称(2)、计量单位(3)、单价(4)、数量(5)"<<endl;
cin>>r;
switch(r){
case 1:{
cout<<"输入商品代码:"<<endl;
cin>>ncode;
sp[k]->code=ncode;
cout<<"信息修改成功!"<<endl;
break;
}
case 2:{
cout<<"输入商品名称:"<<endl;
cin>>nname;
sp[k]->name=nname;
cout<<"信息修改成功!"<<endl;
break;
}
case 3:{
cout<<"输入计量单位:"<<endl;
cin>>nunit;
sp[k]->unit=nunit;
cout<<"信息修改成功!"<<endl;
break;
}
case 4:{
cout<<"输入单价:"<<endl;
cin>>nprice;
sp[k]->price=nprice;
cout<<"信息修改成功!"<<endl;
break;
}
case 5:{
cout<<"输入数量:"<<endl;
cin>>nquantity;
sp[k]->quantity=nquantity;
cout<<"信息修改成功!"<<endl; 
break;
}
}
break;
}
else if(k==i-1)   //当遍历到最后一个还不匹配,则不存在 
cout<<"该商品不存在"<<endl; 
}
cout<<"是否继续修改(y or n)"<<endl;
cin>>ch;
if(ch=='y')
alter();    //递归
}


void Commodity::del(){    //信息删除 
cout<<"输入要删除商品的名称:"<<endl;
cin>>name;
for(int k=0;k<i;k++){
if(name==sp[k]->name){
for(int h=k;h<i;h++){  //将删除位置后面的所有商品对象向前移动一个位置 
sp[h]=sp[h+1];   //指针指向地址复制给前一个指针所指地址 
}
i--;
delete sp[i];// 释放内存 
cout<<"信息删除成功!"<<endl;
break;
}
else if(k==i-1)   当遍历到最后一个还不匹配,则不存在 
cout<<"该商品不存在,无法进行删除操作!"<<endl;
}
cout<<"是否继续(y or n)"<<endl;
cin>>ch;
if(ch=='y')
del();
}


void Commodity::show(){      //信息显示 
cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl; 
cout<<"+----------------------所有商品信息----------------------+"<<endl; 
cout<<"=========================================================="<<endl; 
cout<<"商品代码+++++++商品名称+++++++计量单位+++++++商品价格+++++++商品数量"<<endl; 

if(i==0)
cout<<"无可显示的商品信息!"<<endl;
for(int k=0;k<i;k++){
cout<<setw(15)<<left<<sp[k]->code
<<setw(15)<<left<<sp[k]->name
<<setw(15)<<left<<sp[k]->unit
<<setw(15)<<left<<sp[k]->price
<<setw(15)<<left<<sp[k]->quantity<<endl; 
}
}


void Commodity::stat(){     //商品销售统计 
for(int k=0;k<i;k++){
cout<<sp[k]->name<<"的销售量和销售金额分别为:"<<endl;
cout<<sp[k]->xsl<<sp[k]->unit<<"!  "
<<sp[k]->xsMoney<<"元!"<<endl;
sumMoney += sp[k]->xsMoney;
}
cout<<"总营业额为:"<<sumMoney<<endl;



void Commodity::buy(){                  //商品出售 
double numPr;//一种商品的总价
cout<<"输入顾客要购买的商品名称:"<<endl;
cin>>name;
for(int k=0;k<i;k++){  //遍历所有商品,查找有没有货 
if(name==sp[k]->name){
cout<<"输入购买数量:"<<endl;
cin>>quantity;

sp[k]->xsl +=quantity;     //该商品的销售量累加 
numPr=quantity*sp[k]->price; 
sp[k]->xsMoney +=numPr;     //该商品的销售金额累加 
 
sp[k]->quantity-=quantity;   //商店剩下的商品减少
total+=numPr;  //顾客总账累加 

cout<<"商品代码+++++++商品名称+++++++计量单位+++++++商品价格+++++++商品数量+++++++小计"<<endl;
cout<<setw(15)<<left<<sp[k]->code
<<setw(15)<<left<<sp[k]->name
<<setw(15)<<left<<sp[k]->unit
<<setw(15)<<left<<sp[k]->price
<<setw(15)<<left<<sp[k]->quantity
<<setw(15)<<left<<numPr<<endl;  
cout<<"购买成功!"<<endl;
break;
}


cout<<"是否继续购买(y or n)"<<endl;
cin>>ch;
if(ch=='y')
buy();
else{
cout<<"购买结束!总共消费:"<<total<<" 元!"<<endl;
cout<<"营业是否结束?(y or n)"<<endl;
cin>>ch;
if(ch=='y')
stat(); 
}
}


void cd1(){  //信息管理菜单 
Commodity sp; //  无参构造函数创建命名对象 
cout<<"+++++++++++++++++++++++++商品信息管理++++++++++++++++++++++++"<<endl;
cout<<"+   录入信息(1)    修改信息(2)    删除信息(3)    返回(4)    +"<<endl; 
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
cout<<"请选择:"<<endl;
cin>>r;
switch(r){
case 1:
sp.entry();
if(ch=='n')   //  entry()最后选择不继续 n,则返回cd1() 
cd1();
break;
case 2:
sp.alter();
if(ch=='n')
cd1();
break;
case 3:
sp.del();
if(ch=='n')
cd1();
break;
}  
}


void cd2(){    //销售菜单 
  Commodity sp;
  sp.show();  //展示所有商品,供选择 
cout<<endl; 
  sp.buy();   //开买 
  if(ch=='n')   //若在 buy()中不结束营业,则回到销售菜单 
  cd1();
}


void cd(){    //总菜单
cout<<"***************************************************"<<endl; 
cout<<"*                                                 *"<<endl;
    cout<<"*------------欢迎进入商品销售统计系统-------------*"<<endl;
    cout<<"*                                                 *"<<endl;
    cout<<"***************************************************"<<endl; 
    
    cout<<"请选择您的操作:商品信息管理系统(1)商品销售系统(2)"<<endl;
    cin>>ch;
    if(ch=='1'){
    cd1();
    if(r==4)  //对应操作 信息管理菜单中的 返回(4) 
    cd();
}
else if(ch=='2'){
cd2();    //进入销售菜单 
}
else{
cout<<"输入错误,请重新输入!"<<endl;
cd();   //递归返回总菜单 
}
}


int main(){
cd();
return 0;

 

  • 5
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值