超市收银系统_仓库类——2

---恢复内容开始---

超市收银系统

前言:在上一篇我们分析了商品类并设置了他们的父类供各个商品来继承。接下来我们分析仓库类。通过我们的截图显示,我们仓库首先需要进行货物的存储的功能。那么我们首先思考一个问题:我们用什么来进行货物的存储呢?

ok,我们打算使用List<>泛型集合来存储我们的物品,因为我们根据里氏转换得知我们可以让我们的商品都表示出父类的形式进行存储。

首先在这里先来解释一下里氏转换的原则

1.子类对象可以赋值给父类对象。

2.如果父类中装的是子类对象,我们可以将这个父类强制转换为子类对象。

那这样的话我们就可以这样写了:List<ProductFather> _list = new List<ProductFather>();   但是我们考虑一下,这样写真的是最好的结果吗?显然不是的。大家可以想一想:我们虽然可以把我们的各个商品都在我们集合中进行了存储,因为我们在这个项目中只给出了四件商品,显然我们真实的仓库中不可能只有四件商品,它可能有成千上万件商品,如果我们这样进存储的话,我们的仓库中是不是感觉非常的乱呢,而且我们在仓库中进行取货物的时候,是不是也感觉非常的不好取呢,因为我们把所有的商品都放在一块了。所以说这显然不是最好的解决方案?那么我们如何解决这个问题?

解决方案:我们可以先在仓库中添加货架,加入我们的仓库中有四中商品,我们在添加商品之前先去添加货架,在往我们的货架上添加商品。这样我们就很好的在仓库中进行了分类,我们画图表示:

 

 代码如下:

          //集合进行货物的存储
        List<List<ProductFather>> list = new List<List<ProductFather>>();

当我们在外界创建仓库类的时候,这时候我们的仓库中就应该有货架了,所以我们应该在构造函数中进行添加货架(构造函数用于初始化对象),代码如下:

        /// <summary>
        /// 在创建仓库对象的时候 像仓库中添加货架
        /// </summary>
        public CangKu()
        {
            list.Add(new List<ProductFather>());
            list.Add(new List<ProductFather>());
            list.Add(new List<ProductFather>());
            list.Add(new List<ProductFather>());
        }

接下来我们是不是该进货了,大家想想,当我们要写进货这个方法的时候,我们要知道进货的类型和进货的数量,在进行for循环的遍历依次的把商品添加到我们的货架上,代码如下:

        /// <summary>
        /// 进货
        /// </summary>
        /// <param name="strType">货物的类型</param>
        /// <param name="count">货物的数量</param>
        public void JinPros(string strType, int count)
        {
            for (int i = 0; i < count; i++)
            {
                switch (strType)
                {
                    case "Acer":
                        //list[0]:表示货架
                        list[0].Add(new Acer(Guid.NewGuid().ToString(), 1000, "宏基笔记本"));
                        break;
                    case "SamSung":
                        list[1].Add(new SamSung(Guid.NewGuid().ToString(), 2000, "棒之手机"));
                        break;
                    case "JiangYou":
                        list[2].Add(new JiangYou(Guid.NewGuid().ToString(), 10, "老抽酱油"));
                        break;
                    case "Banana":
                        list[3].Add(new Banana(Guid.NewGuid().ToString(), 50, "大香蕉"));
                        break;
                    default:
                        break;
                }
            }
        }

当我们的仓库中既然有添加货物的方法,也应该有提取货物的方法,我们这时候应该想一个问题,当我们把货物提取出来我们把货物放在哪里呢?首先既然我们要提取获取,我们自己肯定知道提取货物的数量。我们可以考虑把货物放在一个数组中,在遍历我们数组中的个数,进行依次的提取货物。 

 

        /// <summary>
        /// 从仓库中提取货物
        /// </summary>
        /// <param name="strType">货物的类型</param>
        /// <param name="count">货物的个数</param>
        /// <returns>返回父类的类型</returns>
        public ProductFather[] QuPros(string strType, int count)
        {
            ProductFather[] pros = new ProductFather[count];
            for (int i = 0; i < pros.Length; i++)
            {
                switch (strType)
                {
                    case "Acer":
                        //单纯的赋值的操作
                        //list[0]货架
                        //list[0][0]:货架上的第一个元素
                        pros[i] = list[0][0];
                        //每次拿一个就删除一个元素
                        list[0].RemoveAt(0);
                        break;
                    case "SamSung":
                        pros[i] = list[1][0];
                        list[1].RemoveAt(0);
                        break;
                    case "JiangYou":
                        pros[i] = list[2][0];
                        list[2].RemoveAt(0);
                        break;
                    case "Banana":
                        pros[i] = list[3][0];
                        list[3].RemoveAt(0);
                        break;
                    default:
                        break;
                }
            }
            return pros;
        }

向客户展示我们仓库中的货物:

       /// <summary>
        ///向用户展示货物
        /// </summary>
        public void ShowPros()
        {
            foreach (var item in list)
            {
                Console.WriteLine("我们超市有:" + item[0].Name + "," + "\t" + "" + item.Count + "个," + "\t" + "每个" + item[0].Price + "");
            }
        }

完成代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _16超市收银系统
{
    class CangKu
    {

        //集合进行货物的存储
        List<List<ProductFather>> list = new List<List<ProductFather>>();

        /// <summary>
        ///向用户展示货物
        /// </summary>
        public void ShowPros()
        {
            foreach (var item in list)
            {
                Console.WriteLine("我们超市有:" + item[0].Name + "," + "\t" + "" + item.Count + "个," + "\t" + "每个" + item[0].Price + "");
            }
        }

        #region
        //list[0]存储Acer电脑
        //list[1]存储三星手机
        //list[2]存储酱油
        //list[3]存储香蕉
        #endregion
        /// <summary>
        /// 在创建仓库对象的时候 像仓库中添加货架
        /// </summary>
        public CangKu()
        {
            list.Add(new List<ProductFather>());
            list.Add(new List<ProductFather>());
            list.Add(new List<ProductFather>());
            list.Add(new List<ProductFather>());
        }

        /// <summary>
        /// 进货
        /// </summary>
        /// <param name="strType">货物的类型</param>
        /// <param name="count">货物的数量</param>
        public void JinPros(string strType, int count)
        {
            for (int i = 0; i < count; i++)
            {
                switch (strType)
                {
                    case "Acer":
                        //list[0]:表示货架
                        list[0].Add(new Acer(Guid.NewGuid().ToString(), 1000, "宏基笔记本"));
                        break;
                    case "SamSung":
                        list[1].Add(new SamSung(Guid.NewGuid().ToString(), 2000, "棒之手机"));
                        break;
                    case "JiangYou":
                        list[2].Add(new JiangYou(Guid.NewGuid().ToString(), 10, "老抽酱油"));
                        break;
                    case "Banana":
                        list[3].Add(new Banana(Guid.NewGuid().ToString(), 50, "大香蕉"));
                        break;
                    default:
                        break;
                }
            }
        }

        /// <summary>
        /// 从仓库中提取货物
        /// </summary>
        /// <param name="strType">货物的类型</param>
        /// <param name="count">货物的个数</param>
        /// <returns>返回父类的类型</returns>
        public ProductFather[] QuPros(string strType, int count)
        {
            ProductFather[] pros = new ProductFather[count];
            for (int i = 0; i < pros.Length; i++)
            {
                switch (strType)
                {
                    case "Acer":
                        //单纯的赋值的操作
                        //list[0]货架
                        //list[0][0]:货架上的第一个元素
                        pros[i] = list[0][0];
                        //每次拿一个就删除一个元素
                        list[0].RemoveAt(0);
                        break;
                    case "SamSung":
                        pros[i] = list[1][0];
                        list[1].RemoveAt(0);
                        break;
                    case "JiangYou":
                        pros[i] = list[2][0];
                        list[2].RemoveAt(0);
                        break;
                    case "Banana":
                        pros[i] = list[3][0];
                        list[3].RemoveAt(0);
                        break;
                    default:
                        break;
                }
            }
            return pros;
        }

    }
}

好的我们的仓库类就分析完了,我们会在接下来的博客中继续分析其他的类,谢谢大家。

 

---恢复内容结束---

posted @ 2017-10-26 20:36  丢了蜡笔小新会哭〆  阅读(536)  评论(0编辑  收藏  举报