超市系统
生成一个GUID码,是全世界独一无二的码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _GUID { class Program { static void Main(string[] args) { Console.WriteLine(Guid.NewGuid().ToString()); Console.WriteLine(Guid.NewGuid().ToString()); Console.WriteLine(Guid.NewGuid().ToString()); Console.WriteLine(Guid.NewGuid().ToString()); Console.WriteLine(Guid.NewGuid().ToString()); Console.ReadKey(); } } }
先创建一个商品的父类,包含商品的属性:价格、名称、编码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class ProductFather { public double Price { get; set; } public string Name { get; set; } public string ID { get; set; } public ProductFather (string id,double price,string name) { this.ID = id; this.Price = price; this.Name = name; } } }
再创建对应的子类商品,我们这用了一个宏基电脑、酱油、香蕉、三星手机作为4个商品子类继承于商品父类。这个项目并不是实战意义上的超市管理系统,只是形式上的超市管理系统,然后用于复习多态的知识、简单工厂设计模式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class Acer : ProductFather { public Acer(string id, double price, string name) : base(id, price, name) { } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class Banana:ProductFather { public Banana(string id, double price, string name) : base(id, price, name) { } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class JiangYou:ProductFather { public JiangYou (string id,double price,string name) :base(id,price,name) { } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class SamSung : ProductFather { public SamSung(string id, double price, string name) :base(id, price, name ) { } } }
四个模拟的商品子类创建好之后,开始创建仓库负责入库。仓库的三个功能:存货、取货、展示库存数据
这里我们存的是上面创建的商品,我们用商品的父类来创建对象,因为不知道存的是哪一种商品。建立一个商品的集合代表存储的货物。但是我们要将存储的货物进行基本分类,所以就是在集合里面再加一层集合,在整体上再进行分类。用List<List<ProductFather>> list = new List<List<ProductFather>>();来创建一个仓库的存储货物的集合,像是一个二维的库。在在这个集合里创建4个集合,代表我们使用的四种商品,相当于加入了四个货架。我们再往这四个货架里分别放不同的东西。
第一步存货,传入要存的商品名称跟数量,通过循环存入对应的货架里
第二部展示,展示出仓库里所包含的东西,通过foreach循环遍历键值对集合,把仓库里的商品属性展示出来
第三步取货,将客人要买的东西取出来,需要提供名字跟数量传入方法中,取出一个里面就去掉一个
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class WareHouse { //存储货物 List<List<ProductFather>> list = new List<List<ProductFather>>(); /// <summary> /// 在创建仓库对象的时候,向仓库里添加货架 /// 比如说 /// list[0]存储电脑 /// list[1]手机 /// list[2]酱油 /// list[3]香蕉 /// </summary> public WareHouse() { 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 SetPros(string strType, int count) { for (int i = 0; i < count; i++) { switch (strType) { case "Acer": list[0].Add(new Acer(Guid.NewGuid().ToString(), 1000, "宏基电脑")); break; case "Samsung": list[1].Add(new SamSung(Guid.NewGuid().ToString(), 500, "三星手机")); break; case "Banana": list[2].Add(new Banana(Guid.NewGuid().ToString(), 50,"香蕉")); break; case "JiangYou": list[3].Add(new JiangYou(Guid.NewGuid().ToString(), 10, "酱油")); break; } } } public void ShowPros() { foreach (var item in list) { Console.WriteLine("我们仓库有:" + item[0].Name + "," + "\t" + item.Count + "个" + "\t每个" + item[0].Price + "元"); } Console.WriteLine("请输入 Acer Banana JiangYou Samsung中的一个"); } /// <summary> /// 取货 /// </summary> /// <param name="strType">货物类型</param> /// <param name="count">货物的数量</param> public ProductFather[] GetPros(string strType, int count) { ProductFather[] pros = new ProductFather[count]; for (int i = 0; i < pros.Length; i++) { switch (strType) { case "Acer": 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; } } return pros; } } }
创建一个超市类,负责跟用户沟通,开始进行交互
首先要先往仓库里存货,输入要存的名字跟数量
然后进行交互,买卖
算钱,算钱里面加个折扣系统
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { abstract class CutFather { /// <summary> /// 计算打折后应该多少钱 /// </summary> /// <param name="AllMoney">打折钱应付的价钱</param> /// <returns>返回打折后应付的价钱</returns> public abstract double GetCutMoney(double AllMoney); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class CutMS : CutFather { /// <summary> /// 买500 送100 /// </summary> /// <param name="AllMoney"></param> /// <returns></returns> public double M { get; set; } public double N { get; set; } public CutMS(double m,double n) { this.M = m; this.N = n; } public override double GetCutMoney(double AllMoney) { if(AllMoney >=this.M) { return AllMoney - (int)(AllMoney / M) * N; } else { return AllMoney; } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { /// <summary> /// 不打折 /// </summary> class CutNormal : CutFather { public override double GetCutMoney(double AllMoney) { return AllMoney; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class CutRate : CutFather { /// <summary> /// 按照折扣率打折 /// </summary> /// <param name="AllMoney"></param> /// <returns></returns> public double Rate { get; set; } public CutRate (double rate) { this.Rate = rate; } public override double GetCutMoney(double AllMoney) { return AllMoney *this.Rate ; } } }
结完打完折后的钱给出小票,这个小票显示所购买的信息包括对应商品的Guid
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class SuperMarket { WareHouse wh = new WareHouse(); /// <summary> /// 创建超市对象的时候,给仓库的货架上导入货物 /// </summary> public SuperMarket() { wh.SetPros("Acer", 10000); wh.SetPros("JiangYou", 10001); wh.SetPros("Samsung", 10002); wh.SetPros("Banana", 10003); } public void AskAndBuy() { Console.WriteLine("你好,请问要买什么东西?"); string strType = Console.ReadLine(); Console.WriteLine("你要买多少?"); int count = Convert.ToInt32(Console.ReadLine()); //去仓库取货 ProductFather[] pros = wh.GetPros(strType, count); double AllMoney = GetMoney(pros); Console.WriteLine("您总共应该付{0}元", AllMoney); Console.WriteLine("请选择您的打折方式 1---不打折 2---打九折 3---打85折 4---满500减100"); string input = Console.ReadLine(); //通过简单工厂设计模式根据用户的输入获得一个打折对象 CutFather cut = GetCut(input); double realMoney = cut.GetCutMoney(AllMoney); Console.WriteLine("打完折后你应该付的钱是{0}", realMoney); Console.WriteLine("以下是您的购物信息"); XiaoPiao(pros); Console.ReadKey(); } //这里把写小票的功能加进了一个方法 以便于以后买多种商品的时候可以叠加使用这个出小票的方法 public void XiaoPiao(ProductFather[] pro) { ProductFather[] pros = pro; foreach (var item in pros) { Console.WriteLine("货物名称:" + item.Name + "\t" + "价格:" + item.Price + "\t" + "货物编号" + item.ID); } } /// <summary> /// 简单工厂模式,根据用户输入,返回一个对象 /// </summary> /// <param name="input">用户选择的折扣</param> /// <returns>返回的是父类对象 但是里面装的是子类对象</returns> public CutFather GetCut(string input) { CutFather cut = null; switch (input) { case "1": cut = new CutNormal(); break; case "2": cut = new CutRate(0.9); break; case "3": cut = new CutRate(0.85); break; case "4": cut = new CutMS(500, 100); break; } return cut; } /// <summary> /// 根据用户买的货物计算总价钱 /// </summary> /// <param name="pros">要买的货物的集合</param> /// <returns>总共要付的钱</returns> public double GetMoney(ProductFather[] pros) { double AllMoney = 0; for (int i = 0; i < pros.Length; i++) { AllMoney += pros[i].Price; } return AllMoney; } public void ShowProducts() { wh.ShowPros(); } } }
最后主程序里面调用各种方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SuperMarketSystem { class Program { static void Main(string[] args) { //创建超市对象,第一步展示超市货物 SuperMarket sp = new SuperMarket(); sp.ShowProducts(); //用户交互,进行买卖 sp.AskAndBuy(); Console.ReadKey(); } } }