及格万岁! 2021-06-26 11:05 采纳率: 75%
浏览 33
已采纳

改一下程序,运行后出现的问题见图片,我用的环境是DEV C++

非常感谢!!!!

#include<bits/stdc++.h>
using namespace std;
double totalMoney=0;   //记录销售总额
double profit=0;
class Bread
{
	public:
		Bread();                                  //无参构造函数
		Bread(int num,string name,double price);  //有参构造函数 
		int GetBreadNumber(){return breadNumber;} //得到面包编号 
		string GetBreadName(){return breadName;}   //得到面包名称 
		double GetPrice(){return costPrice;}      //得到面包制作成本 
		virtual void DispBread();
	protected:
		int breadNumber;                          //定义面包编号  
		string breadName;                         //定义面包名称
		double  costPrice;                        //定义面包制作成本 
 };
 
Bread::Bread()                                   //无参构造函数   定义初始值 
{
    breadNumber=0;
    breadName=" ";
    costPrice=0;
}

Bread::Bread(int num,string name,double price)   //有参构造函数
{
	breadNumber=num;                             //接受数值,赋给bNum 
	breadName=name;                              //接收字符串,赋给bNam
	costPrice=price;                             //接收数值,赋给cP 
 } 

void Bread::DispBread()                          //定义无返回值的成员函数,进行信息输出
{
	cout<<"面包编号:"<<breadNumber<<endl<<"名称:"<<breadName; 
 } //虚函数  显示面包信息

 class  DiscountBread:public Bread               //特价面包  由基类Bread类派生而来 
 {
 	private:
 		double originalPrice;                    //定义原始价 
 		double discountPrice;                    //定义折扣价 
 	public:
 		DiscountBread();                         //无参构 
 		DiscountBread(int num,string name,double price,double oldPrice,double discPrice); //有参构  比基类多了 老价和折扣价
		void DispBread();                        //显示特价面包信息
		double GetDiscountPrice() {return discountPrice;}//得到特价信息 
		double GetOriginalPrice(){return originalPrice;}//得到正价信息 
 };
  
DiscountBread::DiscountBread():Bread()           //无参构  定义初始值 
{
	originalPrice=0;                             //面包原价 
	discountPrice=0;                             //面包折扣价 
}

DiscountBread::DiscountBread(int num,string name,double price,double oldPrice,double discPrice):Bread(num,name,price) 
{                                                //有参构  用基类数据对派生类的num,name,price进行赋值 
	originalPrice=oldPrice;                      //接收oP的数值,赋给originP 
	discountPrice=discPrice;                     //接收dcP的数值,赋给dP 
 } 

void DiscountBread::DispBread()                  //显示特价面包信息
{
	cout<<"特价面包编号:"<<breadNumber<<endl<<"名称:"<<breadName<<endl<<"售价(单位:元):"<<discountPrice<<endl<<"**********************************"<<endl;
}

class RegularBread:public Bread                  //正价面包 从Bread类继承来
{
	private:
		double regularPrice;                     //正常售价 
	public:
		RegularBread();                          //无参构 
		RegularBread(int num,string name,double price,double salePrice); //有参构  比基类多了一个销售价
		void DispBread();                        //显示正价面包信息
		double GetRegularPrice(){return regularPrice;} //得到正常售价 
 };
 
RegularBread::RegularBread():Bread()             //无参构  定义初始值 
{
	regularPrice=0;                              
 } 
 
RegularBread::RegularBread(int num,string name,double price,double salePrice):Bread(num,name,price)
{                                                //有参构,用基类数据对派生类的num,name,price进行赋值
    if (salePrice > price)                       //判断售价是否大于进价 
	   regularPrice = salePrice;
	else
	{
		cout<<"正价面包的售价应高于进价,否则应设为特价面包!"; 
		return;
		   }	   
}

void RegularBread::DispBread()                   //显示正价面包信息 
{
	cout<<"正价面包编号:"<<breadNumber<<endl<<"名称:"<<breadName<<endl<<"售价(单位:元):"<<regularPrice<<endl<<"**********************************"<<endl; 
}

 //########################################################################################
class BreadKind                                    //面包种类 
{
	public:
		BreadKind();
		void AddDiscKind(int num,string name,double inPrice,double oldPrice,double outPrice); //增加特价面包种类   iP输入价格  outP输出价格
		void AddReguKind(int num,string name,double inPrice,double outPrice); //增加正价面包种类 
		void InitBreadKind();                      //初始化面包种类列表 
		void DispBreadKind();                      //显示店铺所有面包种类列表
		DiscountBread GetDiscBread(int num);       //返回第num种面包(特价)
		RegularBread GetReguBread(int num);        //返回第num种面包(正价) 
		void DispReguBreadKind();                  //显示正价面包信息
		void DispDiscBreadKind();                   //显示特价面包信息
	private:
	    DiscountBread discKind[100];               //保存特价面包种类  以数组储存 
		RegularBread reguKind[100];                //保存正价面包种类  以数组储存 
		int discKindLength;                        //保存特价面包种类数
		int reguKindLength;                        //保存正价面包种类数 
};

BreadKind::BreadKind()                             //无参构  定义初始值 
{
	discKindLength=0;
	reguKindLength=0;
}

DiscountBread BreadKind::GetDiscBread(int num)     //返回第num种特价面包 
{
	for(int i=1;i<=discKindLength;i++)
	{
		if(discKind[i-1].GetBreadNumber()==num)
		  return discKind[i-1];
	}
}

RegularBread BreadKind::GetReguBread(int num)       //返回第num种正价面包 
{
	for(int i=1;i<=reguKindLength;i++)
	{
		if(reguKind[i-1].GetBreadNumber()==num)
		return reguKind[i-1];
	}
}

void BreadKind::InitBreadKind()                     //初始化面包总类列表 
{
	cout<<"请先输入初始化面包种类,首先请输入正价面包的种类"<<endl; 
	cout<<"请先输入要添加的正价面包种类的数量:";
	int kindNumber;
	cin>>kindNumber;
	string name;
	double inPrice; 
	double oldPrice;
	double outPrice;
	for(int i=1;i<=kindNumber;i++)
	{
		cout<<"请输入第"<<i<<"种正价面包的名称:";
		cin>>name;
		cout<<"请输入第"<<i<<"种正价面包的进价(单位:元):";
		cin>>inPrice;
		cout<<"请输入第"<<i<<"种正价面包的售价(单位:元):";
		cin>>outPrice;
		AddReguKind(i,name,inPrice,outPrice);        //数值传输 
	}
	cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
	cout<<"正价面包种类已录入完毕,请添加特价面包的种类:"<<endl;
	cout<<"请输入要添加特价面包种类的数量";
	cin>>kindNumber;
	for(int i=1;i<=kindNumber;i++)
	{
		cout<<"请输入第"<<i<<"种特价面包的名称:";
		cin>>name;
		cout<<"请输入第"<<i<<"种特价面包的进价(单位:元):";
		cin>>inPrice;
		do
		{
			cout<<"请输入第"<<i<<"种特价面包的原价(单位:元):";
			cin>>oldPrice;
			cout<<"请输入第"<<i<<"种特价面包的折扣价【折扣价需低于原价,否则重新输入】(单位:元):";
			cin>>outPrice;
		}while(oldPrice<outPrice);
		AddDiscKind(i,name,inPrice,oldPrice,outPrice);  //数值传输 
	 } 
}

void BreadKind::AddReguKind(int num,string name,double inPrice,double outPrice)
{                                                       //增加正价面包种类 
	reguKind[reguKindLength]=RegularBread(num,name,inPrice,outPrice);
	reguKindLength++;
}

void BreadKind::AddDiscKind(int num,string name,double inPrice,double oldPrice,double outPrice)
{                                                       //增加特价面包种类 
	discKind[discKindLength]=DiscountBread(num,name,inPrice,oldPrice,outPrice);
	discKindLength++;
}

void BreadKind::DispReguBreadKind()                     //显示正价面包信息
{
	cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
	cout<<"正价面包有:"<<endl;
	for(int i=0;i<reguKindLength;i++)
	{
		cout<<"面包编号:"<<reguKind[i].GetBreadNumber()<<endl<<"面包名称:"<<reguKind[i].GetBreadName()<<endl<<"售价(单位:元):"<<reguKind[i].GetRegularPrice()<<endl; 
	}
	cout<<"* * * * * * * * * * * * * * *"<<endl;
 }
 
void BreadKind::DispDiscBreadKind()                     //显示特价面包信息 
{
	cout<<"特价面包有:"<<endl;
	for(int i=0;i<discKindLength;i++)
	{
		cout<<"面包编号:"<<discKind[i].GetBreadNumber()<<endl<<"面包名称:"<<discKind[i].GetBreadName()<<endl<<"正常售价(单位:元):"<<discKind[i].GetOriginalPrice()<<endl<<"折扣价(单位:元):"<<discKind[i].GetDiscountPrice()<<endl; 
	}
	cout<<"* * * * * * * * * * * * * * *"<<endl;
 } 
 
 void BreadKind::DispBreadKind()                        //显示超市所有面包列表 
 {
 	DispReguBreadKind();
 	DispDiscBreadKind();
 }
 
 //########################################################################################
 class CartItem                                         //购买面包单项信息 
 {
 	private:
 		Bread * b;                                      //面包基本信息
		int shuliang;                                //购买的数量
		double money;                                   //价钱
	public:
	    CartItem(){ };                                  //无参构
		CartItem(Bread * pb,int sl,double m);        //单项购物清单的构造函数
		void DispCartItem();                            //显示单项购物信息:名称、数量、金额
		double GetMoney(){return money;}                //返回单项金额
		Bread * GetBread(){return b;}                   //返回购买面包种类
		int GetShuliang(){return shuliang;}          //返回购买的数量 
 };
 
 CartItem::CartItem(Bread * pb,int sl,double m)      //单项购货清单的 构造函数 
 {
 	b=pb;
 	shuliang=sl;
 	money=m;
 }
 
 void CartItem::DispCartItem()                          //显示单项购货信息 
 {
 	b->DispBread();                                     //调用单项购货信息 
 	cout<<"# "<<"数量(单位:个):"<<shuliang<<" || 金额(单位:元):"<<money<<endl;
 }
 
 //#######################################################################################
 class Cart                                             //购物车 
 {
 	public:
 		Cart(){count=0;}                                //购物车的初始化 
 		void AddItem(CartItem c);                       //向购物车中添加购买信息 
 		void DeleteItem(int i);                         //从购物车中删除商品 
 		void CheckOut();                          //购物车结账 ##############################################################################
 		void DispCart();                                //显示购物车中所购买的商品信息
 	private:
 		CartItem car[100];                              //记录购物车中所买的商品信息 
 		int count;                                      //记录购物车中所买商品个数 
 };
 
 void Cart::AddItem(CartItem c)                         //向购物车中添加购物信息 
 {
 	car[count]=c;
 	count=count+1;
 }
 
 void Cart::DeleteItem(int i)                           //从购物车中删除商品 
 {
 	for(int j=i;j<count-1;j++)
 	   car[j]=car[j+1];
 	count=count-1;
 }
 
 void Cart::CheckOut()                                  //购物车结账 
 {
 	double sum=0;
 	for(int i=0;i<count;i++)
 	{
 		sum+=car[i].GetMoney();
 		profit+=car[i].GetMoney()-(car[i].GetBread()->GetPrice()*car[i].GetShuliang()); //计算单笔商品的利润,添加到全局变量profit中 
	  } 
	totalMoney+=sum;                                    //将单个购物车的销售总额添加到全局变量的销售总额中 
	cout<<"合计金额为(单位:元):"<<sum<<endl;
	count=0;                                            //完成一次交易后购物车清空 
 }
 
 void Cart::DispCart()                                  //显示购物车中所购买的商品信息
 {
 	for(int i=0;i<count;i++)
 	{
 		cout<<"第"<<i+1<<"条:";
		car[i].DispCartItem();                          //调用单项购物清单CartItem类中的函数 
	 }
  } 
  
  void DispMenu()                                       //显示主菜单 
  {
  	cout<<"***********************************************************************"<<endl;
	cout<<"***********************************************************************"<<endl;
  	cout<<"******                                                           ******"<<endl;
  	cout<<"******                    欢迎来到 dio 面包店                    ******"<<endl;
  	cout<<"******                                                           ******"<<endl;
  	cout<<"***********************************************************************"<<endl;
  	cout<<"******                      请选择相应模块                       ******"<<endl;
  	cout<<"******                                                           ******"<<endl;
  	cout<<"******                  A/a 买面包                               ******"<<endl;
  	cout<<"******                  D/d 退面包 (请确保面包不影响二次销售)    ******"<<endl;
  	cout<<"******                  C/c 结账                                 ******"<<endl;
  	cout<<"******                                                           ******"<<endl;
  	cout<<"******* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *******"<<endl;
  	cout<<"******                        管理员模块                         ******"<<endl;
  	cout<<"******                                                           ******"<<endl;
  	cout<<"******                  M/m 查看销售总额                         ******"<<endl;
  	cout<<"******                  P/p 查看利润                             ******"<<endl;
  	cout<<"******                  Q/q 退出系统                             ******"<<endl;
  	cout<<"******                                                           ******"<<endl;
  	cout<<"***********************************************************************"<<endl;
  	cout<<"***********************************************************************"<<endl;
  }
  
  Cart c;                                               //记录总利润
  
  int main()
  {
  	BreadKind kind;                                     //管理员初始化商店所有商品的信息 
  	kind.InitBreadKind();
  	kind.DispBreadKind();
  	DispMenu();                                         //显示主菜单 
  	char ch;
  	cin>>ch;
  	while(1)
  	{
  		switch(ch){
  			case 'A':case 'a':  {                       //购买面包 
  				kind.DispBreadKind();                   //显示面包信息  
  				cout<<"******                                                           ******"<<endl;
  				cout<<"******               购买正价面包 / 购买特价面包?               ******"<<endl;
  				cout<<"******                                                           ******"<<endl;
  				cout<<"******                  Z/z 正价面包                             ******"<<endl;
  				cout<<"******                  T/t 特价面包                             ******"<<endl;
  				cout<<"******                                                           ******"<<endl;
  				cout<<"***********************************************************************"<<endl;
  				cout<<"***********************************************************************"<<endl;
  				char zl;
  				cin>>zl;
  				switch(zl){
  					case 'Z':case 'z':{                 //购买正价面包                                          
  						cout<<"******                                                           ******"<<endl;
  						cout<<"******  请选择面包种类编号:                                     ******"<<endl;
  						cout<<"******                                                           ******"<<endl;
  						cout<<"******  ";
  						int bk;
  						cin>>bk;
  						cout<<"******  请输入购买数量(单位:个):                             ******"<<endl;
  						cout<<"******                                                           ******"<<endl;
  						cout<<"******  ";
  						int sl;
  						cin>>sl;
  						double price;
  						price=kind.GetReguBread(bk).GetRegularPrice();
  						CartItem ct(&(kind.GetReguBread(bk)),sl,sl*price);         //#################################################################3
  						c.AddItem(ct);
						break;
					  }
					case 'T':case 't':{
						cout<<"******                                                           ******"<<endl;
						cout<<"******  请选择面包种类编号:                                     ******"<<endl;
						cout<<"******                                                           ******"<<endl;
						cout<<"******  ";
						int bk;
						cin>>bk;
						cout<<"******  请输入购买的数量(单位:个):                           ******"<<endl;
						cout<<"******                                                           ******"<<endl;
						cout<<"******  ";
						int sl;
						cin>>sl;
						double price;
						price=kind.GetDiscBread(bk).GetDiscountPrice();
						CartItem ct(&(kind.GetDiscBread(bk)),sl,sl*price);    //##########################################################################
						c.AddItem(ct);
						break;
					}
				  }
				break;
			  }
			case 'C':case 'c':{
				c.DispCart();
				c.CheckOut();
				break;
			  }
			case 'D':case 'd':{
				c.DispCart();
				cout<<"******                                                           ******"<<endl;
				cout<<"******  选择要退还商品所在的条数:                               ******"<<endl;
				cout<<"******                                                           ******"<<endl;
				cout<<"******";
				int num;
				cin>>num;
				c.DeleteItem(num-1);
				break;
			}
			case 'M':case 'm':{
				cout<<"******                                                           ******"<<endl;
				cout<<"******  当前销售总额为(单位:元):                               ******"<<endl;
				cout<<"******                                                           ******"<<endl;
				cout<<"******  "<<totalMoney<<endl;
				break;
			}
			case 'Q':case 'q':{
				cout<<"***********************************************************************"<<endl;
				cout<<"******* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *******"<<endl;
				cout<<"******                感谢您的使用,再见 (^ 3 ^)                 ******"<<endl;
				cout<<"******* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *******"<<endl;
				cout<<"***********************************************************************"<<endl;
				return 0;
				break;
			}
			case 'P':case 'p':{
				cout<<"******                                                           ******"<<endl;
				cout<<"******  当前利润为(单位:元):                                 ******"<<endl;
				cout<<"******                                                           ******"<<endl;
				cout<<"******  "<<profit<<endl;
				break;
			}
			default:{
				cout<<"******* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *******"<<endl;
				cout<<"******                   !!!输入错误!!!                    ******"<<endl;
				cout<<"******* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *******"<<endl;
				break;
			}
		  }
		DispMenu();
		cin>>ch;
	  }
	  
   } 
  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-06-26 12:26
    关注

    错误的意思是直接把未命名的临时变量进行了赋值。在VS2010下是没问题的。

    看了一下代码,CartItem ct(&(kind.GetReguBread(bk)),sl,sl*price);这里第一个参数尝试如下修改:

    RegularBread  rb = kind.GetReguBread(bk);

    CartItem ct(&rb,sl,sl*price);

    代码里还有写这样的地方,都这么改一下试试。DEV C++里可能不允许直接把返回类对象直接作为参数的方式

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程