简单超市收银系统项目

主要就是三个大类,商品类,仓库类,超市类。

1 我们先创建商品类,创建商品父类,包含了姓名,价格,ID三个自动属性,以及构造函数。

各个商品作为子类继承这个父类,用base调用父类中有参数的构造函数

 public class ShangPinFather
    {
        //写商品包含的名称 价格 数量 ID这三种种自动属性
        public string Name
        {
            get;
            set;
        }
        public double Price
        {
            get;
            set;
        }
        public string ID
        {
            get;
            set;
        }
        //写构造函数
        public ShangPinFather(string name,double price,string id)
        {
            this.Name = name;
            this.Price = price;
            this.ID = id;
        }
    }
//香蕉子类
public class Banana:ShangPinFather
    {
        public Banana(string name,double price,string id)
            : base(name, price, id)
        {

        }
    }
//酱油子类
 public class JiangYou:ShangPinFather
    {
        public JiangYou(string name,double price,string id) 
            : base(name, price, id)
        {

        }
    }
//联想电脑子类
public class Lenovo:ShangPinFather
    {
        //调用父类参数
        public Lenovo(string name,double price,string id)
            :base(name,price,id)
        {

        }
    }
//三星手机子类
public class SanXing:ShangPinFather
    {
        public SanXing(string name,double price,string id) 
            : base(name, price, id)
        {

        }
    }

2 创建仓库类 包含进货,取货,商品展示三个方法

 public class CangKu
    {
        //集合中存集合,将商品分类存储到货架上,好存也好取
        List<List<ShangPinFather>> list = new List<List<ShangPinFather>>();
        //往仓库添加货架
        public CangKu()
        { 
            list.Add(new List<ShangPinFather>());
            list.Add(new List<ShangPinFather>());
            list.Add(new List<ShangPinFather>());
            list.Add(new List<ShangPinFather>());
        }
        /// <summary>
        /// 进货
        /// </summary>
        /// <param name="name">商品姓名</param>
        /// <param name="conunt">商品数量</param>
        public void Jinhuo(string name,int count)
        {
            //通过循环拿到每个商品
            for(int i = 0; i < list.Count; i++)
            {
                //对商品姓名进行定值判断
                switch (name)
                {
                    case "香蕉":list[0].Add(new Banana("香蕉", 20, Guid.NewGuid().ToString()));
                        break;
                    case "老抽牌酱油":list[1].Add(new JiangYou("老抽牌酱油",15,Guid.NewGuid().ToString()));
                        break;
                    case "联想电脑":list[2].Add(new Lenovo("联想电脑", 6000, Guid.NewGuid().ToString()));
                        break;
                    case "三星手机":list[3].Add(new SanXing("三星手机", 3000, Guid.NewGuid().ToString()));
                        break;
                }
            }
        }

       

        public ShangPinFather[] Quhuo(string name,int count)
        {
            //声明一个数组储存取的货物
            ShangPinFather[] sp = new ShangPinFather[count];
            for(int i = 0; i <sp.Length; i++)
            {
                //对货物进行定值判断
                switch (name)
                {
                    case "香蕉":sp[i] = list[0][0];
                        //取了货架上第一个货物后 要消除第一个货物,这样才能取货循环
                        list[0].RemoveAt(0);
                        break;
                    case "老抽牌酱油":sp[i] = list[1][0];
                        list[1].RemoveAt(0);
                        break;
                    case "联想牌电脑":sp[i] = list[2][0];
                        list[2].RemoveAt(0);
                        break;
                    case "三星手机":sp[i] = list[3][0];
                        list[3].RemoveAt(0);
                        break;
                }
            }
            return sp;
        }
       //写一个方法商品展示
       public void ShowShangPin()
        {
          foreach(var item in list)
            {
                Console.WriteLine("我们有" + item[0].Name + "数量为" + item.Count + "个,价格为" + item[0].Price + "元");
            }
        }
       
    }

创建超市收银类 包含进货,展示商品,与顾客交互,取货,计算价钱,工厂模式将子类赋值给父类的5个方法

class SuperMarket
    {
        //创建仓库对象
        CangKu ck = new CangKu();
        //在超市构造函数中调用仓库进货方法
        public SuperMarket()
        {
            ck.Jinhuo("香蕉", 1000);
            ck.Jinhuo("老抽牌酱油", 1000);
            ck.Jinhuo("联想电脑", 1000);
            ck.Jinhuo("三星手机", 1000);
        }
       /// <summary>
       /// 创建超市展示商品方法,因为创建的仓库对象可以调用仓库商品展示方法
       /// </summary>
        public void ShowShangPin()
        {
            ck.ShowShangPin();
        }
        public void ask()
        {
            Console.WriteLine("您好,欢迎光临!请问你需要什么,我们这里有香蕉,酱油,联想电脑,三星手机");
            string name = Console.ReadLine();
            Console.WriteLine("请问您需要多少?");
            int count = Convert.ToInt32(Console.ReadLine());
            ShangPinFather[]sp=ck.Quhuo(name,count);
            double sumMoney=GetMoney(sp);
            Console.WriteLine($"这些物品需要的价钱为{sumMoney}");
            Console.WriteLine("请选择优惠方式,1----原价,不打折,2----打九折,3----打八五折,4----买300送50,5----买500送100");
            string input = Console.ReadLine();
            //通过简单工厂的设计模式根据用户的输入获得一个打折对象
            CalFather cf=Getcal(input);
            double calMoney=cf.GetCalMoney(sumMoney);
            Console.WriteLine($"打折后您需要{calMoney}元");
            Console.WriteLine("下面是您的小票信息");
            foreach(var item in sp)
            {
                Console.WriteLine("商品" + item.Name + ",价格" + item.Price + "元" + item.Count + "个");
            }
        }
        /// <summary>
        /// 计算总价钱
        /// </summary>
        /// <param name="sp"></param>
        /// <returns></returns>
        public double GetMoney(ShangPinFather[]sp)
        {
            //声明一个数据来储存总价钱 
            double sumMoney = 0;
            //通过循环拿到商品数组每个元素的价钱,然后累加到总价钱中
            for(int i = 0; i < sp.Length; i++)
            {
                sumMoney += sp[i].Price;
            }
            return sumMoney;
        }
        /// <summary>
        /// 利用工厂模式将子类赋值给父类,获得一个打折对象
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public CalFather Getcal(string input)
        {
            CalFather cf = null;
            switch (input)
            {
                case "1": cf = new CalNormal();
                    break;
                case "2":cf = new CalRate(0.9);
                    break;
                case "3":cf = new CalRate(0.85);
                    break;
                case "4":cf = new CalMn(300, 50);
                    break;
                case "5":cf = new CalMn(500, 100);
                    break;
            }
            return cf;
        }
    }

最后,在Main函数中创建超市对象,调用交互和展示商品两个方法

static void Main(string[] args)
        {
            //创建超市对象
            SuperMarket sm = new SuperMarket();
            //调用交互方法
            sm.ask();
            //调用展示商品方法
            sm.ShowShangPin();
            Console.ReadKey();
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值