如何创建包含多个项目和数量的账单、删除项目、合并账单、克隆账单
How to create bill with multiple items and quantities, remove item, merge bill, clone bill
Items.cs
namespace ItemsBillingApp
{
class Items
{
public int ItemNumber { get; set; }
public DateTime ItemDate { get; set; }
public int Quantity { get; set; }
public double Cost { get; set; }
List<ItemsLine> ItemsLines { get; set; } = new List<ItemsLine>();
public void AddItemLine(ItemsLine itemLine)
{
ItemsLines.Add(itemLine);
}
public void RemoveItemLine(int SOMEID)
{
ItemsLines.RemoveAt(1);
}
/// GetTotal should return the sum of (Cost * Quantity) for each line item
public decimal GetTotal()
{
return Convert.ToInt32(this.Cost) * this.Quantity;
}
/// MergeInvoices appends the items from the sourceInvoice to the current invoice
/// </summary>
/// <param name="sourceItem">Item to merge from</param>
public void MergeItem(Items sourceItem)
{
//IEnumerable<ItemsLine> items = new List<ItemsLine>();
//throw new NotImplementedException();
}
/// Creates a deep clone of the current item (all fields and properties)
/// </summary>
public Items Clone()
{
//throw new NotImplementedException();
}
/// Outputs string containing the following (replace [] with actual values):
/// Invoice Number: [ItemNumber], ItemDate: [dd/MM/yyyy], ItemsLineCount: [Number of items in LineItems]
public override string ToString()
{
string result = "Item Number\tQuantity\tCost\n";
foreach (ItemsLine item in ItemsLines)
result += (item.ItemLineId + "\t\t" + item.Quantity + "\t\t" + item.Cost.ToString() + item.Total.ToString()+ "\n");
return result;
}
}
ItemLine.cs
class ItemsLine
{
public int ItemLineId { get; set; }
public int Quantity { get; set; }
public double Cost { get; set; }
public double Total { get { return this.Cost * this.Quantity; } }
public ItemsLine(int itemLineId, int quantity, double cost)
{
this.ItemLineId = itemLineId;
this.Quantity = quantity;
this.Cost = cost;
}
public ItemsLine()
{
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Welcome to ItemBilling Appliation....");
CreateInvoiceWithOneItem();
CreateInvoiceWithMultipleItemsAndQuantities();
RemoveItem();
}
private static void CreateInvoiceWithOneItem()
{
var item = new Items();
item.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 6.99,
Quantity = 1,
});
Console.WriteLine(item.ToString());
Console.WriteLine(item.GetTotal());
}
private static void CreateInvoiceWithMultipleItemsAndQuantities()
{
var item = new Items();
item.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 10.21,
Quantity = 4,
});
item.AddItemLine(new ItemsLine()
{
ItemLineId = 2,
Cost = 5.21,
Quantity = 1,
});
Console.WriteLine(item.ToString());
Console.WriteLine(item.GetTotal());
}
private static void RemoveItem()
{
var item = new Items();
item.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 5.21,
Quantity = 1,
});
item.AddItemLine(new ItemsLine()
{
ItemLineId = 2,
Cost = 10.99,
Quantity = 4,
});
item.RemoveItemLine(1);
Console.WriteLine(item.ToString());
Console.WriteLine(item.GetTotal());
}
private static void MergeItem()
{
var item1 = new Items();
item1.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 10.33,
Quantity = 4,
});
var item2 = new Items();
item2.AddItemLine(new ItemsLine()
{
ItemLineId = 2,
Cost = 5.22,
Quantity = 1,
});
item2.AddItemLine(new ItemsLine()
{
ItemLineId = 3,
Cost = 6.27,
Quantity = 3,
});
item1.MergeItem(item2);
Console.WriteLine(item1.GetTotal());
}
private static void CloneInvoice()
{
var item = new Items();
item.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 6.99,
Quantity = 1,
});
item.AddItemLine(new ItemsLine()
{
ItemLineId = 2,
Cost = 6.27,
Quantity = 3,
});
var clonedItem = item.Clone();
Console.WriteLine(clonedItem.GetTotal());
}
private static void ItemToString()
{
var item = new Items()
{
ItemDate = DateTime.Now,
ItemNumber = 1000,
ItemsLines = new List<ItemsLine>()
{
new ItemsLine()
{
ItemLineId = 1,
Cost = 6.99,
Quantity = 1,
}
}
};
Console.WriteLine(item.ToString());
}
}
我想在应用程序上执行六个方法
CreateItemWithOneItem();
CreateItemWithMultipleItemsAndQuantities();
删除项目();
MergeItem();
CloneItem();
ItemToString();
我不确定为什么我的每个方法都没有得到 GetTotal,尽管我做了 return
return Convert.ToInt32(this.Cost) * this.Quantity;
而 运行 应用程序 GetTotal 显示零
您的 Items
'container' object 以及每个 ItemsLine
child objects。我认为您不想将它们放在容器中;肯定是在您关心单个成本和数量的行项目中吗?然后GetTotal()
会把所有的child仁加起来,不是吗?
所以我会完全摆脱你的 Items
class 中的那些属性,并将 GetTotal()
更改为:
using System.Linq;
public decimal GetTotal()
{
return ItemsLines.Sum(i => i.Cost * i.Quantity);
}
Items.cs
namespace ItemsBillingApp
{
class Items
{
public int ItemNumber { get; set; }
public DateTime ItemDate { get; set; }
public int Quantity { get; set; }
public double Cost { get; set; }
List<ItemsLine> ItemsLines { get; set; } = new List<ItemsLine>();
public void AddItemLine(ItemsLine itemLine)
{
ItemsLines.Add(itemLine);
}
public void RemoveItemLine(int SOMEID)
{
ItemsLines.RemoveAt(1);
}
/// GetTotal should return the sum of (Cost * Quantity) for each line item
public decimal GetTotal()
{
return Convert.ToInt32(this.Cost) * this.Quantity;
}
/// MergeInvoices appends the items from the sourceInvoice to the current invoice
/// </summary>
/// <param name="sourceItem">Item to merge from</param>
public void MergeItem(Items sourceItem)
{
//IEnumerable<ItemsLine> items = new List<ItemsLine>();
//throw new NotImplementedException();
}
/// Creates a deep clone of the current item (all fields and properties)
/// </summary>
public Items Clone()
{
//throw new NotImplementedException();
}
/// Outputs string containing the following (replace [] with actual values):
/// Invoice Number: [ItemNumber], ItemDate: [dd/MM/yyyy], ItemsLineCount: [Number of items in LineItems]
public override string ToString()
{
string result = "Item Number\tQuantity\tCost\n";
foreach (ItemsLine item in ItemsLines)
result += (item.ItemLineId + "\t\t" + item.Quantity + "\t\t" + item.Cost.ToString() + item.Total.ToString()+ "\n");
return result;
}
}
ItemLine.cs
class ItemsLine
{
public int ItemLineId { get; set; }
public int Quantity { get; set; }
public double Cost { get; set; }
public double Total { get { return this.Cost * this.Quantity; } }
public ItemsLine(int itemLineId, int quantity, double cost)
{
this.ItemLineId = itemLineId;
this.Quantity = quantity;
this.Cost = cost;
}
public ItemsLine()
{
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Welcome to ItemBilling Appliation....");
CreateInvoiceWithOneItem();
CreateInvoiceWithMultipleItemsAndQuantities();
RemoveItem();
}
private static void CreateInvoiceWithOneItem()
{
var item = new Items();
item.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 6.99,
Quantity = 1,
});
Console.WriteLine(item.ToString());
Console.WriteLine(item.GetTotal());
}
private static void CreateInvoiceWithMultipleItemsAndQuantities()
{
var item = new Items();
item.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 10.21,
Quantity = 4,
});
item.AddItemLine(new ItemsLine()
{
ItemLineId = 2,
Cost = 5.21,
Quantity = 1,
});
Console.WriteLine(item.ToString());
Console.WriteLine(item.GetTotal());
}
private static void RemoveItem()
{
var item = new Items();
item.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 5.21,
Quantity = 1,
});
item.AddItemLine(new ItemsLine()
{
ItemLineId = 2,
Cost = 10.99,
Quantity = 4,
});
item.RemoveItemLine(1);
Console.WriteLine(item.ToString());
Console.WriteLine(item.GetTotal());
}
private static void MergeItem()
{
var item1 = new Items();
item1.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 10.33,
Quantity = 4,
});
var item2 = new Items();
item2.AddItemLine(new ItemsLine()
{
ItemLineId = 2,
Cost = 5.22,
Quantity = 1,
});
item2.AddItemLine(new ItemsLine()
{
ItemLineId = 3,
Cost = 6.27,
Quantity = 3,
});
item1.MergeItem(item2);
Console.WriteLine(item1.GetTotal());
}
private static void CloneInvoice()
{
var item = new Items();
item.AddItemLine(new ItemsLine()
{
ItemLineId = 1,
Cost = 6.99,
Quantity = 1,
});
item.AddItemLine(new ItemsLine()
{
ItemLineId = 2,
Cost = 6.27,
Quantity = 3,
});
var clonedItem = item.Clone();
Console.WriteLine(clonedItem.GetTotal());
}
private static void ItemToString()
{
var item = new Items()
{
ItemDate = DateTime.Now,
ItemNumber = 1000,
ItemsLines = new List<ItemsLine>()
{
new ItemsLine()
{
ItemLineId = 1,
Cost = 6.99,
Quantity = 1,
}
}
};
Console.WriteLine(item.ToString());
}
}
我想在应用程序上执行六个方法
CreateItemWithOneItem();
CreateItemWithMultipleItemsAndQuantities();
删除项目();
MergeItem();
CloneItem();
ItemToString();
我不确定为什么我的每个方法都没有得到 GetTotal,尽管我做了 return
return Convert.ToInt32(this.Cost) * this.Quantity;
而 运行 应用程序 GetTotal 显示零
您的 Items
'container' object 以及每个 ItemsLine
child objects。我认为您不想将它们放在容器中;肯定是在您关心单个成本和数量的行项目中吗?然后GetTotal()
会把所有的child仁加起来,不是吗?
所以我会完全摆脱你的 Items
class 中的那些属性,并将 GetTotal()
更改为:
using System.Linq;
public decimal GetTotal()
{
return ItemsLines.Sum(i => i.Cost * i.Quantity);
}