-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
140 lines (116 loc) · 5.6 KB
/
Program.cs
File metadata and controls
140 lines (116 loc) · 5.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections.Generic;
using System.Linq;
namespace SelectionSort
{
internal class Program
{
static void Main(string[] args)
{
var tavern = new TavernService();
try
{
tavern.AddOrder(new Order(1, "Арагорн", "Жаркое", 45m, 20, true));
tavern.AddOrder(new Order(2, "Леголас", "Эльфийский хлеб", 25m, 5, false));
tavern.AddOrder(new Order(3, "Гимли", "Медовуха", 30m, 2, true));
tavern.AddOrder(new Order(4, "Гэндальф", "Эльфийское вино", 60m, 10, false));
tavern.DisplayOrders("Все заказы");
tavern.SortOrders((a, b) => b.Price.CompareTo(a.Price));
tavern.DisplayOrders("Сортировка по цене (дорогие первыми)");
tavern.SortOrders((a, b) => a.PreparationTime.CompareTo(b.PreparationTime));
tavern.DisplayOrders("Сортировка по времени (быстрые первыми)");
tavern.SortOrders((a, b) => a.CustomerName.CompareTo(b.CustomerName));
tavern.DisplayOrders("Сортировка по имени клиента");
tavern.SortOrders((a, b) =>
{
if (a.IsCompleted != b.IsCompleted)
return b.IsCompleted.CompareTo(a.IsCompleted);
return b.Price.CompareTo(a.Price);
});
tavern.DisplayOrders("Сортировка сначала по статусу, потом по цене");
}
catch (Exception ex)
{
ConsoleHelper.WriteErrorMessage(ex.Message);
}
}
}
public class Order
{
public int Id { get; private set; }
public string CustomerName { get; private set; }
public string DishName { get; private set; }
public decimal Price { get; private set; }
public int PreparationTime { get; private set; }
public DateTime OrderTime { get; private set; }
public bool IsCompleted { get; private set; }
public Order(int id, string customerName, string dishName, decimal price, int preparationTime, bool isCompleted)
{
Id = id;
CustomerName = customerName ?? throw new ArgumentNullException(nameof(customerName));
DishName = dishName ?? throw new ArgumentNullException(nameof(dishName));
Price = price > 0 ? price : throw new ArgumentException("Price must be positive");
PreparationTime = preparationTime > 0 ? preparationTime : throw new ArgumentException("Preparation time must be positive");
OrderTime = DateTime.Now;
IsCompleted = isCompleted;
}
public void Complete() { IsCompleted = true; }
}
public class TavernService
{
private const int TableWidth = 81;
private List<Order> _orders;
public TavernService() { _orders = new List<Order>(); }
public void AddOrder(Order order) { _orders.Add(order); }
public void CompleteOrder(int id)
{
var order = _orders.FirstOrDefault(o => o.Id == id);
if (order == null)
throw new ArgumentException($"Order with ID {id} not found");
order.Complete();
}
public void SortOrders(Func<Order, Order, int> comparer)
{
if (comparer == null)
throw new ArgumentNullException(nameof(comparer));
int minIndex = 0;
for (int i = 0; i < _orders.Count - 1; i++)
{
minIndex = i;
for (int j = i + 1; j < _orders.Count; j++)
{
if (comparer(_orders[j], _orders[minIndex]) < 0)
minIndex = j;
}
if (minIndex != i)
(_orders[i], _orders[minIndex]) = (_orders[minIndex], _orders[i]);
}
}
public void DisplayOrders(string title)
{
if(title == null)
title = string.Empty;
Console.WriteLine($"\n=== {title} ===");
Console.WriteLine(new string('_', TableWidth));
Console.WriteLine("{0,-5} {1, -1} {2,-15} {3, -1} {4,-15} {5, -1} {6, -5} {7, -1} {8, -15} {9, -1} {10, -10}",
"Id", "|", "CustomerName", "|", "DishName", "|", "Price", "|", "PreparationTime", "|", "IsCompleted");
foreach (var order in _orders)
{
Console.WriteLine($"{new string('-', 6)}+{new string('-', 17)}+{new string('-', 17)}+{new string('-', 7)}+{new string('-', 17)}+{new string('-', 12)}");
Console.WriteLine("{0,-5} {1, -1} {2,-15} {3, -1} {4,-15} {5, -1} {6, -5} {7, -1} {8, -15} {9, -1} {10, -10}",
"ID: " + order.Id, "|", order.CustomerName, "|", order.DishName, "|", order.Price + "$", "|", order.PreparationTime + "m", "|", order.IsCompleted ? "Выполнен" : "Ожидает");
}
Console.WriteLine(new string('-', TableWidth));
}
}
public static class ConsoleHelper
{
public static void WriteErrorMessage(string message)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(message);
Console.ResetColor();
Console.ReadKey(true);
}
}
}