当前位置: 代码迷 >> C# >> 不知道运作起来的时候金额为什么都显示0
  详细解决方案

不知道运作起来的时候金额为什么都显示0

热度:49   发布时间:2016-05-05 03:45:28.0
不知道运行起来的时候金额为什么都显示0
RT, 代码运行起来的时候金额都显示0。 调试的时候发现Candy.price     Chips.price  都是0,  开始都给他们赋值了 为何运行起来的时候就变成0了。。。 不懂 求大神指导。
 代码 如下:
public struct goods  //描述商品的结构体数据类型
    {
        public string name;
        public int quantity;
        public double price;
    }
    class Store //描述连锁店的类
    {
        static double Totalsum;//连锁店总营业额,为静态成员,属于类所有
        double sum; //普通实例成员,为对象所有
        goods candy; //出售的商品
        goods chips;
        public string storeName;//店名
        static Store() //静态构造函数,生成类的第一个实例时运行
        {
            Totalsum = 0;
        }
        public Store() //实例构造函数,创建对象时运行
        {
            goods candy;
            candy.name = "candy";//商品名称
            candy.price = 2;//单价
            candy.quantity = 0;//初始库为0
            goods chips;
            chips.name = "chips";
            chips.price = 5;
            chips.quantity = 0;
            sum = 0;//营业额为0
        }
        public void getCandy(int num)// 购进商品
        {
            Console.WriteLine("{0}新进糖果{1}", storeName, num);
            candy.quantity += num; //购进商品
        }
        public void getChips(int num)
        {
            Console.WriteLine("{0}新近薯片{1}", storeName, num);
            chips.quantity += num; //购进商品
        }
        public void SaleCandy(int num) //出售商品
        {
            if (candy.quantity >= num)
            {
                candy.quantity -= num;//卖出商品,修改库存
                sum += candy.price * num;
                Totalsum += candy.price * num;
                Console.WriteLine("{0}卖出糖果:{1}包,金额:{2}元", storeName, num, candy.price * num);
            }
            else
                Console.WriteLine("库存不足!");
        }
        public void SaleChips(int num) //出售商品
        {
            if (chips.quantity >= num)
            {
                chips.quantity -= num;//卖出商品,修改库存
                sum += chips.price * num;
                Totalsum += chips.price * num;
                Console.WriteLine("{0}卖出糖果:{1}包,金额:{2}元", storeName, num, chips.price * num);
            }
            else
                Console.WriteLine("库存不足!");
        }
        public double bussinessvoluem()
        {
            return sum; //本店营业额
        }
        public double Totalbusinessvolume()
        {
            return Totalsum;//各店营业总额
        }
    }
 class Program   //测试类
    {
        static void Main(string[] args)
        {
  Store storeA = new Store();//开第一店
            storeA.storeName = "学院店";
            storeA.getCandy(20);
            storeA.getChips(25);
            storeA.SaleCandy(12);
            storeA.SaleChips(15);
            Console.WriteLine(storeA.storeName + "营业额是{0}元", storeA.bussinessvoluem());
            Console.WriteLine("各店营业额总计是{0}元", storeA.Totalbusinessvolume());

            Store storeB = new Store();//开第二店
            storeB.storeName = "大学店";
            storeB.getCandy(20);
            storeB.getChips(20);
            storeB.SaleCandy(2);
            storeB.SaleChips(10);
            Console.WriteLine(storeB.storeName + "营业额是{0}元", storeA.bussinessvoluem());
            Console.WriteLine("各店营业额总计是{0}元", storeA.Totalbusinessvolume());

            Console.ReadKey();


        }
    }
------解决思路----------------------
构造函数里你把candy和chips声明成了局部变量
------解决思路----------------------
把  name  等  get;set 一下
------解决思路----------------------
引用:
public Store() //实例构造函数,创建对象时运行
        {
            //goods candy;
            candy.name = "candy";//商品名称
            candy.price = 2;//单价
            candy.quantity = 0;//初始库为0
            //goods chips;
            chips.name = "chips";
            chips.price = 5;
            chips.quantity = 0;
            sum = 0;//营业额为0
        }

就该这样改
------解决思路----------------------
1、candy、chips,你声明为了全局变量,这个没错,但是你再构造函数再次做了声明且和全局变量同名
当私有变量和全局变量同名时,公有变量被覆盖,也就是说构造函数赋值的是构造函数声明的candy、chips,而不是全局变量
所以,你的全局变量candy、chips一直保持默认值
2、把构造函数声明的candy、chips代码去掉即可
  相关解决方案