如何创建包含多个项目和数量的账单、删除项目、合并账单、克隆账单

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);
}