Advertisement
Guest User

Untitled

a guest
Dec 7th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.69 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace ООП_6лаба
  9. {
  10.  
  11. //public enum Status { request, mas1, mas2 };
  12.  
  13. public class Tehnic
  14. {
  15. public string Name;
  16. public int Cost;
  17. public Tehnic(string name, int cost)
  18. {
  19. Name = name;
  20. Cost = cost;
  21. }
  22. public override string ToString()
  23. {
  24. return Name;
  25. }
  26. };
  27.  
  28. public class Visiter
  29. {
  30. static Random rnd = new Random();
  31. //Множество с заказанными блюдами
  32. public HashSet<Tehnic> order;
  33. //Имя посетителя
  34. public string Name;
  35. //Статус посетителя
  36. public string Status;
  37. public bool Priority;
  38. //Стоимость заказа
  39. public int orderCost
  40. {
  41. set; get;
  42. }
  43. //Во сколько вошел в кафе
  44. public DateTime timeIn
  45. { set; get; }
  46.  
  47. public Visiter()
  48. { //вновь вошедший посетитель получает статус выбирающего блюда
  49. Status = "request";
  50. //Даем ему некоторое имя
  51. Name = "Заявка_" + rnd.Next(1, 300).ToString();
  52. if (rnd.Next(1, 100) > 80) Priority = true;
  53. else Priority = false;
  54. order = new HashSet<Tehnic>();
  55. }
  56. void calcOrderCost()
  57. {
  58. orderCost = 0;
  59. if (Status != "request")
  60. foreach (Tehnic d in order)
  61. orderCost += d.Cost;
  62.  
  63. }
  64. //Строка с информацией о посетителе (Имя, статус, заказ)
  65. public void info()
  66. {
  67. Console.Write(Name + " " + " со статусом " + Status + " и приоритетом " + Priority + ". Заказ: ");
  68. foreach (Tehnic d in order)
  69. Console.Write(d.ToString() + " ");
  70. Console.WriteLine();
  71.  
  72. }
  73.  
  74. public void genOrder(List<Tehnic> price)
  75. {
  76. do
  77. {//выбирает технику на ремонт из списка
  78. foreach (Tehnic d in price)
  79. if (rnd.Next() % 2 == 0) order.Add(d);
  80. } while (order.Count == 0);
  81. calcOrderCost();
  82.  
  83.  
  84. }
  85. }
  86.  
  87. public class Workshop
  88. {
  89. public List<Tehnic> price = new List<Tehnic>();
  90. public List<Visiter> visiters = new List<Visiter>();
  91. public List<Visiter> master1 = new List<Visiter>();
  92. public List<Visiter> true1 = new List<Visiter>();
  93. public List<Visiter> true2 = new List<Visiter>();
  94. public List<Visiter> master2 = new List<Visiter>();
  95. public DateTime curTime;
  96. Random rnd = new Random();
  97. //количество уже покинувших (обслуженных) посетителей
  98. public int VisClose1, VisClose2;
  99.  
  100.  
  101.  
  102. public Workshop()
  103. {
  104. //меню по умолчанию
  105. price.Add(new Tehnic("микроволновка", 300));
  106. price.Add(new Tehnic("миксер", 150));
  107. price.Add(new Tehnic("мультиварка", 200));
  108. price.Add(new Tehnic("холодильник", 400));
  109. price.Add(new Tehnic("блендер", 250));
  110. }
  111.  
  112. public void genVisiters()
  113. {
  114. Visiter v = new Visiter();
  115. visiters.Add(v);
  116. v.timeIn = DateTime.Now;
  117. v.genOrder(price);
  118.  
  119. }
  120.  
  121. public void printVisiters()
  122. {
  123. foreach (Visiter d in visiters)
  124. {
  125. d.info();
  126. }
  127. }
  128.  
  129. public void printVisitersM1()
  130. {
  131. foreach (Visiter d in true1)
  132. {
  133. d.info();
  134. }
  135. foreach (Visiter d in master1)
  136. {
  137. d.info();
  138. }
  139. }
  140.  
  141. public void printVisitersM2()
  142. {
  143. foreach (Visiter d in true2)
  144. {
  145. d.info();
  146. }
  147. foreach (Visiter d in master2)
  148. {
  149. d.info();
  150. }
  151. }
  152.  
  153. public void Mas1Job()
  154. {
  155. if (true1.Count > 0)
  156. {
  157. {
  158. if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
  159. {
  160. this.VisClose1++;
  161. true1.Remove(true1[0]);
  162. this.curTime = DateTime.Now;
  163. }
  164. }
  165. }
  166. else if (master1.Count > 0)
  167. {
  168. {
  169. if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
  170. {
  171. this.VisClose1++;
  172. master1.Remove(master1[0]);
  173. this.curTime = DateTime.Now;
  174. }
  175. }
  176. }
  177. }
  178.  
  179. public void Mas2Job()
  180. {
  181. if (true2.Count > 0)
  182. {
  183. {
  184. if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
  185. {
  186. this.VisClose2++;
  187. true1.Remove(true2[0]);
  188. this.curTime = DateTime.Now;
  189. }
  190. }
  191. }
  192. else if (master2.Count > 0)
  193. {
  194. {
  195. if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
  196. {
  197. this.VisClose2++;
  198. master1.Remove(master2[0]);
  199. this.curTime = DateTime.Now;
  200. }
  201. }
  202. }
  203. }
  204.  
  205. void manageVisiter(Visiter v)
  206. {
  207. {
  208. //Новый статус - распределение по мастерам
  209. if (/*Convert.ToInt32(v.Name[7]) % 2 == 0*/master1.Count < master2.Count || master1.Count == 0)
  210. {
  211. v.Status = "master1";
  212. if (v.Priority == false)
  213. master1.Add(v);
  214. else true1.Add(v);
  215. visiters.Remove(v);
  216.  
  217. }
  218.  
  219. else //if (/*Convert.ToInt32(v.Name[7]) % 2 == 1*/master2.Count < master1.Count)
  220. {
  221. v.Status = "master2";
  222. if (v.Priority == false)
  223. master2.Add(v);
  224. else true2.Add(v);
  225. visiters.Remove(v);
  226.  
  227. }
  228. }
  229.  
  230. }
  231.  
  232. public void manageOrgers()
  233. {
  234. //пробегаем по всем посетителям, проверяем и обслуживаем каждого
  235. for (int i = 0; i < visiters.Count; i++)
  236. manageVisiter(visiters[i]);
  237.  
  238. }
  239. }
  240.  
  241.  
  242.  
  243. class Program
  244. {
  245.  
  246. static void Main(string[] args)
  247. {
  248. List<Visiter> visiters = new List<Visiter>();
  249. List<Visiter> master1 = new List<Visiter>();
  250. List<Visiter> master2 = new List<Visiter>();
  251. Workshop work = new Workshop();
  252. work.curTime = DateTime.Now;
  253. work.VisClose1 = 0;
  254. work.VisClose2 = 0;
  255. int num = 0;
  256. Random rnd = new Random();
  257.  
  258. while (true)
  259. {
  260. if (num <= 20)
  261. {
  262. work.genVisiters();
  263. num++;
  264. }
  265. Console.WriteLine("Время: " + DateTime.Now);
  266.  
  267. Console.WriteLine("Новые посетители:");
  268. work.printVisiters();
  269. Console.WriteLine();
  270. Console.WriteLine("Мастер 1. Обслужено заказов: " + work.VisClose1);
  271. work.printVisitersM1();
  272. work.Mas1Job();
  273. Console.WriteLine();
  274. Console.WriteLine("Мастер 2. Обслужено заказов: " + work.VisClose2);
  275. work.printVisitersM2();
  276. work.Mas2Job();
  277.  
  278. work.manageOrgers();
  279. Thread.Sleep(rnd.Next(1000, 3000));
  280. Console.Clear();
  281. }
  282. Console.ReadKey();
  283. }
  284. }
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement