商品销售统计系统
问题描述:编写商品销售统计程序,商品的信息有:商品的名称,计量单位(重量或件),单价。所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。
基本要求:程序分为两个部分:第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。程序运行时由用户选择使用哪一部分功能,并能在运行时在两部分之间切换。第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码(如-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;
}