Advertisement
Guest User

OrderSystem

a guest
Mar 21st, 2019
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.42 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using Wintellect.PowerCollections;
  4. using System.Text;
  5. using System.Linq;
  6.  
  7. namespace OrderSystem
  8. {
  9.     class Order : IComparable<Order>
  10.     {
  11.         public Order(string name, double price, string consumer)
  12.         {
  13.             this.Name = name;
  14.             this.Price = price;
  15.             this.Consumer = consumer;
  16.         }
  17.  
  18.         public string Name
  19.         {
  20.             get;
  21.             private set;
  22.         }
  23.         public double Price
  24.         {
  25.             get;
  26.             private set;
  27.         }
  28.         public string Consumer
  29.         {
  30.             get;
  31.             private set;
  32.         }
  33.  
  34.         public int CompareTo(Order other)
  35.         {
  36.             int comparisson = string.Compare(this.Name, other.Name, StringComparison.Ordinal);
  37.             return comparisson;
  38.         }
  39.  
  40.         public override string ToString()
  41.         {
  42.             string result = string.Format("{{{0};{1};{2:##.00}}}", this.Name, this.Consumer, this.Price);
  43.             return result;
  44.  
  45.         }
  46.     }
  47.  
  48.     class Program
  49.     {
  50.         private static StringBuilder results;
  51.         private static OrderedBag<Order> ordersByPrice;
  52.         private static Dictionary<string, OrderedBag<Order>> ordersByConsumer;
  53.  
  54.         static void Main(string[] args)
  55.         {
  56.             results = new StringBuilder();
  57.             ordersByPrice = new OrderedBag<Order>();
  58.             ordersByConsumer = new Dictionary<string, OrderedBag<Order>>();
  59.  
  60.             int n = int.Parse(Console.ReadLine());
  61.  
  62.             for (int i = 0; i < n; i++)
  63.             {
  64.                 string input = Console.ReadLine();
  65.                 string command = GetCommand(input);
  66.  
  67.                 switch (command)
  68.                 {
  69.                     case "AddOrder":
  70.                         AddOrder(GetCommandArguments(input));
  71.                         break;
  72.                     case "DeleteOrders":
  73.                         DeleteOrders(GetCommandArguments(input));
  74.                         break;
  75.                     case "FindOrdersByConsumer":
  76.                         FindOrdersByConsumer(GetCommandArguments(input));
  77.                         break;
  78.                     case "FindOrdersByPriceRange":
  79.                         FindOrdersByPriceRange(GetCommandArguments(input));
  80.                         break;
  81.                 }
  82.             }
  83.  
  84.             Console.WriteLine(results);
  85.         }
  86.  
  87.         private static void FindOrdersByPriceRange(string[] args)
  88.         {
  89.             var minPrice = double.Parse(args[0]);
  90.             var maxPrice = double.Parse(args[1]);
  91.  
  92.             var range = ordersByPrice.Where(x => x.Price >= minPrice && x.Price <= maxPrice).ToList();
  93.             if (range.Count > 0)
  94.             {
  95.                 //foreach (var item in range)
  96.                 //{
  97.                 //    results.AppendLine(item.ToString());
  98.                 //}
  99.                 results.AppendLine(string.Join(Environment.NewLine,range));
  100.             }
  101.             else
  102.             {
  103.                 results.AppendLine("No orders found");
  104.             }
  105.  
  106.         }
  107.  
  108.         private static void FindOrdersByConsumer(string[] args)
  109.         {
  110.             string inputConsumer = args[0];
  111.             if (ordersByConsumer.ContainsKey(inputConsumer) && ordersByConsumer[inputConsumer].Count > 0)
  112.             {
  113.                 //foreach (var item in ordersByConsumer[inputConsumer])
  114.                 //{
  115.                 //    results.AppendLine(item.ToString());
  116.                 //}
  117.  
  118.                 results.AppendLine(string.Join(Environment.NewLine,ordersByConsumer[inputConsumer]));
  119.             }
  120.             else
  121.             {
  122.                 results.AppendLine("No orders found");
  123.             }
  124.         }
  125.  
  126.         private static void DeleteOrders(string[] args)
  127.         {
  128.             string inputConsumer = args[0];
  129.             if (ordersByConsumer.ContainsKey(inputConsumer))
  130.             {
  131.                 var ordersCount = ordersByConsumer[inputConsumer].Count;
  132.                 ordersByConsumer[inputConsumer].Clear();
  133.                 ordersByPrice.RemoveAll(x => string.Compare(x.Consumer, inputConsumer, StringComparison.Ordinal) == 0);
  134.  
  135.                 results.AppendLine($"{ordersCount} orders deleted");
  136.             }
  137.             else
  138.             {
  139.                 results.AppendLine("No orders found");
  140.             }
  141.         }
  142.  
  143.         private static void AddOrder(string[] args)
  144.         {
  145.             string inputName = args[0];
  146.             double inputPrice = double.Parse(args[1]);
  147.             string inputConsumer = args[2];
  148.  
  149.             var newOrder = new Order(inputName, inputPrice, inputConsumer);
  150.  
  151.             ordersByPrice.Add(newOrder);
  152.  
  153.             if (!ordersByConsumer.ContainsKey(inputConsumer))
  154.             {
  155.                 ordersByConsumer.Add(inputConsumer, new OrderedBag<Order>());
  156.             }
  157.             ordersByConsumer[inputConsumer].Add(newOrder);
  158.  
  159.             results.AppendLine("Order added");
  160.         }
  161.  
  162.         private static string GetCommand(string input)
  163.         {
  164.             var args = input.Split();
  165.             return args[0];
  166.         }
  167.         private static string[] GetCommandArguments(string input)
  168.         {
  169.             var args = input.Split(new char[] { ';' });
  170.             var startIndex = args[0].IndexOf(' ');
  171.             args[0] = args[0].Substring(startIndex).Trim();
  172.  
  173.             return args;
  174.         }
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement