Advertisement
VodVas

Автос стар

Nov 24th, 2023 (edited)
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.84 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.ComponentModel;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Reflection.PortableExecutable;
  6. using System.Security.AccessControl;
  7. using System.Threading.Channels;
  8.  
  9. namespace Автосервис
  10. {
  11. internal class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. CarService carService = new CarService();
  16.  
  17. carService.Work();
  18. }
  19. }
  20.  
  21. class CarService
  22. {
  23. private int _moneyBalance = 10000;
  24.  
  25. private Dictionary<string, int> _priceList = new Dictionary<string, int>();
  26.  
  27. private Dictionary<string, int> _partsFixPrices = new Dictionary<string, int>();
  28.  
  29. //private Dictionary<string, string> _breakdownPart = new Dictionary<string, string>();
  30.  
  31. private Car _car = new Car();
  32.  
  33. private Warehouse _warehouse = new Warehouse();
  34.  
  35. public CarService()
  36. {
  37. SetPrice();
  38. FillPartsFixPrices();
  39. }
  40.  
  41. //private void FillBreakdownPart()
  42. //{
  43. // _partsFixPrices.Add("Скрежет, когда заводится", );
  44. //}
  45.  
  46. private void FillPartsFixPrices()
  47. {
  48. _partsFixPrices.Add("Стартер", 3000);
  49. _partsFixPrices.Add("Рычаг подвески", 1500);
  50. _partsFixPrices.Add("Свечи", 500);
  51. _partsFixPrices.Add("Термостат", 2000);
  52. }
  53.  
  54. public void Work()
  55. {
  56. while (true)
  57. {
  58. Console.ForegroundColor = ConsoleColor.Green;
  59. Console.WriteLine($"Баланс мастерской: {_moneyBalance}\n");
  60. Console.ForegroundColor = ConsoleColor.White;
  61.  
  62. ShowPriceList();
  63.  
  64. Console.WriteLine("");
  65.  
  66. _warehouse.ShowQuantityParts();
  67.  
  68. Console.WriteLine("");
  69.  
  70. DoCarDiagnostic();
  71.  
  72. FixCar();
  73.  
  74. Console.ForegroundColor= ConsoleColor.Green;
  75. Console.WriteLine("Нажмите любую клавишу для приема следующего клиента");
  76. Console.ForegroundColor = ConsoleColor.White;
  77.  
  78. Console.ReadKey();
  79.  
  80. Console.Clear();
  81. }
  82. }
  83.  
  84. private bool TrySelectRightPart()
  85. {
  86. for (int i = 0; i < _car.GetBreakdown().Count; i++)
  87. {
  88. //_car.GetBreakdown()[i] ==
  89. //TODO создать словарь ключ проблема в авто, значение <Имя поломки>
  90. // Создать словарь ключ нужная запчасть значение <Имя поломки>
  91. // Сравнивать по значениям и давать тру если совпадают
  92.  
  93. }
  94.  
  95. foreach (var breakdown in _car.GetBreakdown())
  96. {
  97. //breakdown.
  98. }
  99.  
  100. return true;
  101. }
  102.  
  103.  
  104. private void SelectWrongPart()
  105. {
  106. if (_warehouse.GetListBreakdownAndParts().ContainsKey("Скрежет, когда заводится"))
  107. {
  108. //_warehouse.GetListBreakdownAndParts(). //вернуть тру если ок в методе
  109. }
  110. //private bool try select right part()
  111. //
  112.  
  113. }
  114.  
  115. //private void DoCarDiagnostic()
  116. //{
  117. // int finalPrice = 0;
  118.  
  119. // string currentBreakdown = _car.GetRandomBreakdown();
  120.  
  121. // Dictionary<string, CarPart> temp = _warehouse.GetListBreakdownAndParts();
  122.  
  123. // if (temp.ContainsKey(currentBreakdown))
  124. // {
  125. // Console.Write("Требуемая запчасть: ");
  126.  
  127. // Console.ForegroundColor = ConsoleColor.DarkYellow;
  128. // temp[currentBreakdown].ShowDescription();
  129. // Console.ForegroundColor = ConsoleColor.White;
  130.  
  131. // finalPrice += temp[currentBreakdown].Price;
  132. // }
  133.  
  134. // if (_priceList.ContainsKey(currentBreakdown))
  135. // {
  136. // Console.Write("Цена за работу: ");
  137.  
  138. // Console.ForegroundColor = ConsoleColor.DarkYellow;
  139. // Console.WriteLine(_priceList[currentBreakdown]);
  140. // Console.ForegroundColor = ConsoleColor.White;
  141.  
  142. // finalPrice += _priceList[currentBreakdown];
  143. // }
  144.  
  145. // Console.Write($"Итого: ");
  146. // Console.ForegroundColor = ConsoleColor.DarkYellow;
  147. // Console.Write($"{finalPrice}");
  148. // Console.ForegroundColor = ConsoleColor.White;
  149. //}
  150.  
  151. private string DoCarDiagnostic()
  152. {
  153. int finalPrice = 0;
  154.  
  155. string currentBreakdown = _car.GetRandomBreakdown();
  156.  
  157. Dictionary<string, CarPart> temp = _warehouse.GetListBreakdownAndParts();
  158.  
  159. if (temp.ContainsKey(currentBreakdown))
  160. {
  161. Console.Write("Требуемая запчасть: ");
  162.  
  163. Console.ForegroundColor = ConsoleColor.DarkYellow;
  164. temp[currentBreakdown].ShowDescription();
  165. Console.ForegroundColor = ConsoleColor.White;
  166.  
  167. finalPrice += temp[currentBreakdown].Price;
  168. }
  169.  
  170. if (_priceList.ContainsKey(currentBreakdown))
  171. {
  172. Console.Write("Цена за работу: ");
  173.  
  174. Console.ForegroundColor = ConsoleColor.DarkYellow;
  175. Console.WriteLine(_priceList[currentBreakdown]);
  176. Console.ForegroundColor = ConsoleColor.White;
  177.  
  178. finalPrice += _priceList[currentBreakdown];
  179. }
  180.  
  181. Console.Write($"Итого: ");
  182. Console.ForegroundColor = ConsoleColor.DarkYellow;
  183. Console.Write($"{finalPrice}");
  184. Console.ForegroundColor = ConsoleColor.White;
  185.  
  186. return currentBreakdown;
  187. }
  188.  
  189. public void FixCar()
  190. {
  191. const string StarterMenu = "1";
  192. const string SuspensionMenu = "2";
  193. const string SparkPlugsMenu = "3";
  194. const string ThermostatMenu = "4";
  195.  
  196. Console.ForegroundColor = ConsoleColor.Yellow;
  197. Console.WriteLine($"\nВыбери запчасть: \n{StarterMenu} - стартер\n{SuspensionMenu} - рычаг подвески\n{SparkPlugsMenu} - свечи\n{ThermostatMenu} - термостат\n");
  198. Console.ForegroundColor= ConsoleColor.White;
  199.  
  200. string userInput = Console.ReadLine();
  201.  
  202. switch (userInput)
  203. {
  204. case StarterMenu:
  205. TryRepairCar("Стартер");
  206. break;
  207.  
  208. case SuspensionMenu:
  209. TryRepairCar("Рычаг подвески");
  210. break;
  211.  
  212. case SparkPlugsMenu:
  213. TryRepairCar("Свечи");
  214. break;
  215.  
  216. case ThermostatMenu:
  217. TryRepairCar("Термостат");
  218. break;
  219.  
  220. default:
  221. Console.ForegroundColor = ConsoleColor.Red;
  222. Console.WriteLine("Неверная команда");
  223. Console.ForegroundColor = ConsoleColor.White;
  224. break;
  225. }
  226. }
  227.  
  228. private void TryRepairCar(string selectedPart)
  229. {
  230. //if (DoCarDiagnostic() == "Скрежет, когда заводится")
  231.  
  232. if (_warehouse.TryGetPart(selectedPart, out int partPrice))
  233. {
  234. Console.WriteLine("Запчасть в наличии, авто отремонтировали");
  235.  
  236. Console.WriteLine($"Баланс мастерской {_moneyBalance} пополнился на {partPrice} (Стоимость запчасти)");
  237.  
  238. _moneyBalance += partPrice;
  239.  
  240. foreach (var part in _partsFixPrices)
  241. {
  242. if (_partsFixPrices.ContainsKey(selectedPart))
  243. {
  244. Console.WriteLine($"Баланс мастерской {_moneyBalance} пополнился на {part.Value} (Стоимость ремонта)");
  245.  
  246. _moneyBalance += part.Value;
  247.  
  248. break;
  249. }
  250. }
  251.  
  252. Console.ForegroundColor= ConsoleColor.Green;
  253. Console.WriteLine($"\nБаланс мастерской {_moneyBalance}\n");
  254. Console.ForegroundColor = ConsoleColor.White;
  255. }
  256. else
  257. {
  258. int fine = 500;
  259.  
  260. Console.ForegroundColor = ConsoleColor.Red;
  261. Console.WriteLine($"Запчасть отсутствует, клиент не доволен, вам штраф {fine}");
  262. Console.ForegroundColor = ConsoleColor.White;
  263.  
  264. _moneyBalance -= fine;
  265.  
  266. Console.ForegroundColor = ConsoleColor.Green;
  267. Console.WriteLine($"\nБаланс мастерской {_moneyBalance}\n");
  268. Console.ForegroundColor = ConsoleColor.White;
  269. }
  270. }
  271.  
  272. private void ShowPriceList()
  273. {
  274. Console.ForegroundColor = ConsoleColor.DarkYellow;
  275. Console.WriteLine("Прайс лист: ");
  276. Console.ForegroundColor = ConsoleColor.White;
  277.  
  278. foreach (var price in _priceList)
  279. {
  280. Console.WriteLine($"Поломка: {price.Key} || Цена починки: {price.Value}");
  281. }
  282. }
  283.  
  284. private List<int> GetCreatedPrices()
  285. {
  286. int starterReplacement = 3000;
  287. int suspensionReplacement = 1500;
  288. int sparkPlugsReplacement = 500;
  289. int thermostatReplacement = 2000;
  290.  
  291. List<int> prices = new List<int>()
  292. {
  293. starterReplacement,
  294. suspensionReplacement,
  295. sparkPlugsReplacement,
  296. thermostatReplacement
  297. };
  298.  
  299. return prices;
  300. }
  301.  
  302. private void SetPrice()
  303. {
  304. for (int i = 0; i < _car.GetBreakdown().Count; i++)
  305. {
  306. _priceList.Add(_car.GetBreakdown()[i], GetCreatedPrices()[i]);
  307. }
  308. }
  309. }
  310.  
  311. class Warehouse
  312. {
  313. Car _car = new Car();
  314.  
  315. private List<CarPart> _carParts = new List<CarPart>();
  316.  
  317. private Dictionary<string, CarPart> _listBreakdownAndParts = new Dictionary<string, CarPart>();
  318.  
  319. private Dictionary<string, string> _problemsNeedParts = new Dictionary<string, string>();
  320. private Dictionary<string, string> _partsNeedParts = new Dictionary<string, string>();
  321.  
  322. private int _starterPrice = 4000;
  323. private int _suspensionPrice = 3000;
  324. private int _sparkPlugsPrice = 1000;
  325. private int _thermostatPrice = 2000;
  326.  
  327. public Warehouse()
  328. {
  329. FillStorage();
  330. FillBreakdownList();
  331. FillProblemsPartsList();
  332. FillNeedPartsList();
  333. }
  334.  
  335. public bool TryGetPart(string selectedPart)
  336. {
  337. Console.WriteLine(_car.Breakdown);
  338.  
  339. Console.WriteLine("\nКакую запчасть установить на авто?\n");
  340.  
  341. foreach (var problem in _problemsNeedParts)
  342. {
  343. foreach (var part in _partsNeedParts)
  344. {
  345. if (_car.Breakdown == problem.Key && problem.Value == selectedPart)
  346. {
  347. return true;
  348. }
  349. }
  350. }
  351.  
  352. return false;
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368. foreach (var part in _carParts)
  369. {
  370. if (selectedPart == part.Title)
  371. {
  372. Console.WriteLine($"Со склада забрали {part.Title} стоимостью {part.Price}");
  373.  
  374. partPrice = part.Price;
  375.  
  376. //_carParts.Remove(part);
  377.  
  378. return true;
  379. }
  380. }
  381.  
  382. partPrice = 0;
  383.  
  384. return false;
  385. }
  386.  
  387. public Dictionary<string, CarPart> GetListBreakdownAndParts()
  388. {
  389. return new Dictionary<string, CarPart>(_listBreakdownAndParts);
  390. }
  391.  
  392. public List<CarPart> GetCarParts()
  393. {
  394. return new List<CarPart>(_carParts);
  395. }
  396.  
  397. public void ShowQuantityParts()
  398. {
  399. Console.ForegroundColor = ConsoleColor.DarkYellow;
  400. Console.WriteLine("Запчасти на складе:");
  401. Console.ForegroundColor = ConsoleColor.White;
  402.  
  403. foreach (var part in _carParts)
  404. {
  405. Console.WriteLine($"Запчасть: {part.Title} || Цена: {part.Price}");
  406. }
  407. }
  408.  
  409. private void FillNeedPartsList()
  410. {
  411. _partsNeedParts.Add("Стартер", "стартер");
  412. _partsNeedParts.Add("Рычаг подвески", "рычаг");
  413. _partsNeedParts.Add("Свечи", "свечи");
  414. _partsNeedParts.Add("Термостат", "термостат");
  415. }
  416.  
  417. private void FillProblemsPartsList()
  418. {
  419. _problemsNeedParts.Add("Скрежет, когда заводится", "стартер");
  420. _problemsNeedParts.Add("Стучит подвеска", "рычаг");
  421. _problemsNeedParts.Add("Прыгают обороты двигателя", "свечи");
  422. _problemsNeedParts.Add("Перегревается двигатель", "термостат");
  423. }
  424.  
  425. private void FillStorage()
  426. {
  427. _carParts.Add(new CarPart("Стартер", _starterPrice));
  428. _carParts.Add(new CarPart("Рычаг подвески", _suspensionPrice));
  429. _carParts.Add(new CarPart("Рычаг подвески", _suspensionPrice));
  430. _carParts.Add(new CarPart("Рычаг подвески", _suspensionPrice));
  431. _carParts.Add(new CarPart("Свечи", _sparkPlugsPrice));
  432. _carParts.Add(new CarPart("Свечи", _sparkPlugsPrice));
  433. _carParts.Add(new CarPart("Термостат", _thermostatPrice));
  434. _carParts.Add(new CarPart("Термостат", _thermostatPrice));
  435. _carParts.Add(new CarPart("Термостат", _thermostatPrice));
  436. _carParts.Add(new CarPart("Термостат", _thermostatPrice));
  437. }
  438.  
  439. private void FillBreakdownList()
  440. {
  441. _listBreakdownAndParts.Add("Скрежет, когда заводится", new CarPart("Стартер", _starterPrice));
  442. _listBreakdownAndParts.Add("Стучит подвеска", new CarPart("Рычаг подвески", _suspensionPrice));
  443. _listBreakdownAndParts.Add("Прыгают обороты двигателя", new CarPart("Свечи", _sparkPlugsPrice));
  444. _listBreakdownAndParts.Add("Перегревается двигатель", new CarPart("Термостат", _thermostatPrice));
  445. }
  446. }
  447.  
  448. class CarPart
  449. {
  450. public CarPart(string title, int price)
  451. {
  452. Title = title;
  453. Price = price;
  454. }
  455.  
  456. public string Title { get; private set; }
  457.  
  458. public int Price { get; private set; }
  459.  
  460. public void ShowDescription()
  461. {
  462. Console.WriteLine($"{Title} || Цена - {Price}");
  463. }
  464. }
  465.  
  466. class Car
  467. {
  468. private List<string> _breakdown = new List<string>();
  469.  
  470. public Car()
  471. {
  472. CreateBreakdown();
  473.  
  474. Breakdown = GetRandomBreakdown();
  475. }
  476.  
  477. public string Breakdown { get; private set; }
  478.  
  479. public List<string> GetBreakdown()
  480. {
  481. return new List<string>(_breakdown);
  482. }
  483.  
  484. public string GetRandomBreakdown()
  485. {
  486. for (int i = Utility.GenerateRandomNumber(4); i < _breakdown.Count;)
  487. {
  488. Console.Write("Приехал автомобиль с поломкой: ");
  489. Console.ForegroundColor = ConsoleColor.DarkGreen;
  490. Console.WriteLine($"{new List<string>(_breakdown)[i]}");
  491. Console.ForegroundColor = ConsoleColor.White;
  492.  
  493. return new List<string>(_breakdown)[i]; // можно просто вернуть стринг с поломкой
  494. }
  495.  
  496. return null;
  497. }
  498.  
  499. private void CreateBreakdown()
  500. {
  501. _breakdown.Add("Скрежет, когда заводится");
  502. _breakdown.Add("Стучит подвеска");
  503. _breakdown.Add("Прыгают обороты двигателя");
  504. _breakdown.Add("Перегревается двигатель");
  505. }
  506. }
  507.  
  508. class Utility
  509. {
  510. private static Random s_random = new Random();
  511.  
  512. public static int GenerateRandomNumber(int min, int max)
  513. {
  514. return s_random.Next(min, max);
  515. }
  516.  
  517. public static int GenerateRandomNumber(int number)
  518. {
  519. return s_random.Next(number);
  520. }
  521.  
  522. public static int ReturnInputNumber()
  523. {
  524. int number;
  525.  
  526. while (int.TryParse(Console.ReadLine(), out number) == false)
  527. {
  528. Console.WriteLine("Введено не число, попробуйте еще раз: ");
  529. }
  530.  
  531. return number;
  532. }
  533. }
  534. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement