c#超市收银系统,涉及多态、list<>,数据转换等综合练习

 

 

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

namespace 超市收银系统
{
    class Program
    {
        static void Main(string[] args)
        {
            Cangku mycangku = new Cangku();

            superc chaoshi = new superc();
            chaoshi.Asking(mycangku);
            

        }


    }
}

 

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

namespace 超市收银系统
{
    class superc
    {
        /// <summary>
        /// 列出商品目录和数量,开始与顾客交互
        /// </summary>
       
       
        public void Asking( Cangku mycangku)
        {
            
            mycangku.ShowProductsCount();

            //询问顾客
            Console.WriteLine("请问你想要什么货物");
            string jprodutname = Console.ReadLine();
            Console.WriteLine("请问你想要多少数量");
            int jprodutcount = Convert.ToInt32(Console.ReadLine());
            //取货物
            Product guproduct = mycangku.QuProd(jprodutname, jprodutcount);
            //列清单
            Console.WriteLine($"你购买的为{guproduct.Name},单价为{guproduct.Price},数量为{jprodutcount},总价格为{guproduct.Price * jprodutcount}");
            //打折与满减结算 500-50 1000-100 ,抽象类多态实现
            Dz zhe = new Senvenzhe();
            //Dz zhe = new Manjian();
            //Dz zhe = new Nozhe();
            Console.WriteLine($"打7折为{zhe.DaZhe(jprodutcount * guproduct.Price)}");
            //Console.WriteLine($"不打折为{zhe.DaZhe(jprodutcount * guproduct.Price)}");
            //Console.WriteLine($"500-50为{zhe.DaZhe(jprodutcount * guproduct.Price)}");


            Console.ReadKey();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 超市收银系统
{
    class Cangku
    {
        //生成不同货架的集合,此时为空
        List<List<Product>> lists = new List<List<Product>>();

        /// <summary>
        /// 构造函数,为生成不同货物种类的货架
        /// </summary>
        public Cangku()
        {
            //加入3种不同货架
            lists.Add(new List<Product>());
            lists.Add(new List<Product>());
            lists.Add(new List<Product>());
            //先进货
            this.SaveProd("香蕉", 10, 100);
            this.SaveProd("华为笔记本", 7500, 100);
            this.SaveProd("宏基笔记本", 5500, 120);
        }

        /// <summary>
        /// 存入商品
        /// </summary>
        /// <param name="pts">商品种类</param>
        /// <param name="count">数量</param>
        public void SaveProd(string producttype, double price ,int count)
        {
            //注意 for和switch组合应用, switch即是条件判断语句
            for (int i = 0; i < count; i++)
            {

                switch (producttype)
                {
                    case "香蕉":
                        lists[0].Add(new Banana("香蕉", price));
                        break;
                    case "华为笔记本":
                        lists[1].Add(new Huawei("华为笔记本", price));
                        break;
                    case "宏基笔记本":
                        lists[2].Add(new Acer("宏基笔记本", price));
                        break;
                }

            }

        }

        /// <summary>
        /// 取商品函数,for循环取出
        /// </summary>
        /// <param name="name">名称</param>
        /// <param name="count">数量</param>
        /// <returns>返回所取的商品对象</returns>
        public Product QuProd(string name, int count)
        {
            Product quprod=null;
            for (int i = 0; i < count; i++)
            {
                switch (name)
                {
                    case "香蕉":
                        lists[0].RemoveAt(0); //去掉第一个,后面的下标自动变为0,依次类推
                        quprod = lists[0][0];
                        break;
                    case "华为笔记本":
                        lists[1].RemoveAt(0);
                        quprod = lists[1][0];
                        break;
                    case "宏基笔记本":
                        lists[2].RemoveAt(0);
                        quprod = lists[2][0];
                        break;
                }

            }
            return quprod;

        }

        public void ShowProductsCount()
        {
            Console.WriteLine($"现有{lists[0][0].Name},数量为{lists[0].Count},价格为{lists[0][0].Price}");
            Console.WriteLine($"现有{lists[1][0].Name},数量为{lists[1].Count},价格为{lists[1][0].Price}");
            Console.WriteLine($"现有{lists[2][0].Name},数量为{lists[2].Count},价格为{lists[2][0].Price}");

        }


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

namespace 超市收银系统
{
    class Acer : Product
    {
        public Acer(string name,  double price) : base(name,  price)
        {
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 超市收银系统
{
    class Huawei : Product
    {
        public Huawei(string name,  double price) : base(name, price)
        {
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 超市收银系统
{
    class Banana : Product
    {
        public Banana(string name, double price) : base(name,  price)
        {
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 超市收银系统
{
    /// <summary>
    /// 所有商品的父类
    /// </summary>
    class Product
    {     
        //自动属性
        public string Name { get; set; }
        public string Id { get; set; }
        public double Price { get; set; }
        public int Count { get; set; }
        /// <summary>
        /// 子类对象的初始化操作
        /// </summary>
        /// <param name="name">商品名称</param>
        /// <param name="price">价格</param>
       
        public Product(string name, double price)
        {
            this.Name = name;
            this.Id = Guid.NewGuid().ToString(); //guid生成独一无二的序列号
            this.Price = price;
            
}
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 超市收银系统
{
   public abstract class Dz{

        public abstract double DaZhe(double totalprice);


}

public class Senvenzhe : Dz
{
        /// <summary>
        /// 7折
        /// </summary>
        /// <param name="totalprice">总金额</param>
        /// <returns></returns>
        public override double DaZhe(double totalprice)
        {
            return totalprice * 0.7;
        }
    }

    public class Nozhe : Dz
    {

        /// <summary>
        /// 不打折
        /// </summary>
        /// <param name="totalprice">总金额</param>
        /// <returns></returns>
     
        public override double DaZhe(double totalprice)
        {
            return totalprice;
        }
    }


    public class Manjian : Dz
    {
        /// <summary>
        /// 500-50活动
        /// </summary>
        /// <param name="totalprice">总金额</param>
        /// <returns></returns>
        public override double DaZhe(double totalprice)
        {
            totalprice = totalprice - 50 * (int)(totalprice / 500); //这种方法很好用,还有%用法记牢
            return totalprice;
        }
       
    }
}

 

posted @ 2021-03-30 15:41  遥月  阅读(200)  评论(0)    收藏  举报