using System.Collections.Generic;
public static void Main()
var shop=new ConsignmentShop();
public string Name {get;set;}
public string Description {get;set;}
public decimal Price{get;set;}
public bool IsSold {get;set;}
public bool IsPaymentDone {get;set;}
public Vendor Vendor {get;set;}
public int Stock{get;set;}
public override string ToString()
return $"{Name}, {Description}, {Price}";
public string FirstName {get;set;}
public string LastName {get;set;}
public decimal Commission {get;set;}
public decimal PaymentDue {get;set;}
public override string ToString()
return $"{FirstName}, {LastName}";
public string Name{get;set;}
public string City{get;set;}
public string ZipCode{get;set;}
public string Country{get;set;}
public string Address1{get;set;}
public string Address2{get;set;}
public List<Vendor> Vendors {get; private set;}
public List<Item> Items {get; private set;}
Vendors=new List<Vendor>();
public void AddVendor(Vendor v)
public void AddItem(Item i)
public class ConsignmentShop
Dictionary<Item, int> _ShoppingCart;
_ShoppingCart = new Dictionary<Item, int>();
this._Store.AddVendor(new Vendor{FirstName = "Zsolt", LastName = "Kovacs", Commission = 0.2m, PaymentDue = 0});
this._Store.AddVendor(new Vendor{FirstName = "Raja", LastName = "Mani", Commission = 0.3m, PaymentDue = 0});
this._Store.AddItem(new Item{Name = "C# in a Nutshell", Description = "A book from O'Reiley", Price = 50.0m, IsSold = false, IsPaymentDone = false, Vendor = this._Store.Vendors[0], Stock = 10});
this._Store.AddItem(new Item{Name = "Apple AirPods", Description = "Headphones from Apple", Price = 250.0m, IsSold = false, IsPaymentDone = false, Vendor = this._Store.Vendors[1], Stock = 5});
this._Store.AddItem(new Item{Name = "Samsung Galyx S20+", Description = "Samsung phone", Price = 1200.0m, IsSold = false, IsPaymentDone = false, Vendor = this._Store.Vendors[0], Stock = 3});
this._Store.AddItem(new Item{Name = "iMac 2011", Description = "A computer from Apple", Price = 575.0m, IsSold = false, IsPaymentDone = false, Vendor = this._Store.Vendors[1], Stock = 2});
this._Store.AddItem(new Item{Name = "AOC AG352UCG", Description = "AOC Ultrawide monitor", Price = 790.0m, IsSold = false, IsPaymentDone = false, Vendor = this._Store.Vendors[0], Stock = 5});
for(int i=0;i<_Store.Items.Count;i++)
Console.WriteLine($"{i}.: {_Store.Items[i]}");
Console.WriteLine("A - Add item to shopping cart");
Console.WriteLine("L - list items in shopping cart");
Console.WriteLine("O - order items in shopping cart");
Console.WriteLine("X - Exit shop");
var input=Console.ReadLine();
Console.WriteLine("Enter the item id and the number of items");
var itemInput=Console.ReadLine();
var parameters=itemInput.Split(',');
if(!int.TryParse(parameters[0], out var inputItemId))
if(!int.TryParse(parameters[1], out var inputNumberOfItems))
if(inputItemId<0 || inputItemId>=_Store.Items.Count())
var item= _Store.Items[inputItemId];
if(item.Stock<inputNumberOfItems)
Console.WriteLine($"There are only {item.Stock} available item from item {inputItemId}");
item.Stock -= inputNumberOfItems;
if(_ShoppingCart.ContainsKey(item))
_ShoppingCart[item]=_ShoppingCart[item]+inputNumberOfItems;
_ShoppingCart.Add(item,inputNumberOfItems);
foreach(var i in _ShoppingCart)
Console.WriteLine($"{i.Key}, number of items: {i.Value}");
var vendors=_Store.Items.GroupBy(v=>v.Vendor);
foreach(var v in vendors)
var vendorItems=v.Where(i=>_ShoppingCart.ContainsKey(i));
decimal vendorProfite=0m;
foreach(var vi in vendorItems)
total+=vi.Price*_ShoppingCart[vi];
vendorProfite=total*v.Key.Commission;
shopProfit += total-vendorProfite;
Console.WriteLine($"{v.Key}, profite {vendorProfite}");
Console.WriteLine($"ShopProfit: {shopProfit}");