主要就是三个大类,商品类,仓库类,超市类。
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();
}