Guest User

Untitled

a guest
Dec 9th, 2019
127
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text.RegularExpressions;
  5.  
  6. namespace Lab1
  7. {
  8. abstract public class purchase
  9. {
  10. public int id;
  11. public string product; // Товар
  12. public string category; // Категория
  13. public int sum; // Сумма
  14. public string data; // Дата
  15. }
  16.  
  17. public class WithSale : purchase
  18. {
  19. public string withGMO;
  20. public bool sale = true;
  21. }
  22.  
  23. public class WithOutSale : purchase
  24. {
  25. public string fresh;
  26. public string eco;
  27. public bool sale = false;
  28. }
  29.  
  30.  
  31. /// <summary>
  32. /// Интерфейс для реализации хранилища записей
  33. /// </summary>
  34. public interface IDataSource
  35. {
  36. purchase Save(purchase record);
  37. purchase Get(int id);
  38. bool Delete(int id);
  39. List<purchase> GetAll();
  40. }
  41.  
  42.  
  43. /// <summary>
  44. /// Хранение записей в оперативной памяти
  45. /// ! Для предотвращения изменения записей извне,
  46. /// все методы, возвращающие записи должны возвращать
  47. /// их копии
  48. /// </summary>
  49. public class MemoryDataSource : IDataSource
  50. {
  51. int idd = 0;
  52. private List<purchase> records = new List<purchase>();
  53. public purchase Save(purchase record)
  54. {
  55. int id;
  56. if (record.id == 0)
  57. {
  58. idd++;
  59. record.id = idd;
  60. records.Add(record);
  61. }
  62. else
  63. {
  64. id = records.FindIndex(x => x.id == record.id);
  65. records[id] = record;
  66. }
  67. return record;
  68. }
  69. public purchase Get(int id)
  70. {
  71. int a = 0;
  72. for (int j = 0; j < records.Count; j++)
  73. {
  74. if (records[j].id == id)
  75. {
  76. a++;
  77. }
  78. }
  79. if (a == 0)
  80. {
  81. return null;
  82. }
  83. else
  84. {
  85. id = records.FindIndex(x => x.id == id);
  86. return records[id];
  87. }
  88. }
  89. public bool Delete(int id)
  90. {
  91. int a = 0;
  92. for (int j = 0; j < records.Count; j++)
  93. {
  94. if (records[j].id == id)
  95. {
  96. a++;
  97. }
  98. }
  99. if (a == 0)
  100. {
  101. return false;
  102. }
  103. else
  104. {
  105. id = records.FindIndex(x => x.id == id);
  106. records.RemoveAt(id);
  107. return true;
  108. }
  109. }
  110. public List<purchase> GetAll()
  111. {
  112. return records;
  113. }
  114. }
  115.  
  116. public class BusinessLogic
  117. {
  118. private IDataSource dataSource;
  119.  
  120. public BusinessLogic(IDataSource source)
  121. {
  122. dataSource = source;
  123. }
  124. // Получение отсортированного списка
  125. public List<purchase> GetList()
  126. {
  127. List<purchase> list = dataSource.GetAll();
  128.  
  129. var sorted = from purchase u in list
  130. orderby u.data, u.product
  131. select u;
  132. list = sorted.ToList();
  133. // ... сортировка ...
  134. return list;
  135. }
  136.  
  137. public purchase GetElement(int id)
  138. {
  139. purchase list = dataSource.Get(id);
  140. if (list == null)
  141. {
  142. throw new Exception("Этой записи не существует!");
  143. }
  144. else
  145. {
  146. return list;
  147. }
  148. }
  149.  
  150. public purchase Add(purchase record)
  151. {
  152. if (record.product == "")
  153. {
  154. throw new Exception("Наименование товара не указано, повторите запись опять.");
  155. }
  156. if (record.sum < 0)
  157. {
  158. throw new Exception("Сумма должна быть больше или равна 0, повторите запись опять.");
  159. }
  160. Match match = Regex.Match(record.data, @"(\d{2})\/(0\d|1[012])\/([0-2]\d|3[01])");
  161. if (!match.Success)
  162. {
  163. throw new Exception("Дата введена в неверном формате, повторите попытку.");
  164. }
  165.  
  166. purchase mainlist = dataSource.Save(record);
  167. return mainlist;
  168. }
  169. public bool Del(int id)
  170. {
  171. bool mainlist = dataSource.Delete(id);
  172. if (mainlist == false)
  173. {
  174. throw new Exception("Этой записи не существует!");
  175. }
  176. else
  177. {
  178. return mainlist;
  179. }
  180. }
  181. // [... остальные методы ...]
  182. }
  183.  
  184. class Program
  185. {
  186. static BusinessLogic logic;
  187. static void PrintMenu()
  188. {
  189. Console.WriteLine($"[*] Меню [*] \n1 - Добавить запись\n2 - Просмотреть записи\n3 - Изменить запись\n4 - Удалить запись\n5 - Выход");
  190. }
  191.  
  192. static void Remov(purchase record)
  193. {
  194. try
  195. {
  196. logic.Add(record);
  197. }
  198. catch (Exception e)
  199. {
  200. Console.WriteLine("Exception Message: " + e.Message);
  201. Console.ReadKey();
  202. }
  203. }
  204. static void Editing(int id)
  205. {
  206. purchase p;
  207. string dd;
  208. try
  209. {
  210. purchase list = logic.GetElement(id);
  211. Console.WriteLine("\nid записи: " + list.id + "\n" + list.product + "\n" + list.category + "\n" + list.data + "\n" + list.sum + "\n");
  212. Console.Clear();
  213. Console.WriteLine("Какую покупку вы совершили? 1) Со скидкой или 2) без скидки?");
  214. dd = Console.ReadLine();
  215. if (dd == "1")
  216. {
  217. WithSale psale = new WithSale ();
  218. Console.WriteLine("Изменение существующей записи.");
  219. psale.id = id;
  220. Console.WriteLine("Наименование товара: ");
  221. psale.product = Console.ReadLine();
  222. Console.WriteLine("Категория: ");
  223. psale.category = Console.ReadLine();
  224. Console.WriteLine("Сумма: ");
  225. psale.sum = Convert.ToInt32(Console.ReadLine());
  226. Console.WriteLine("Дата покупки(ГГ/ММ/ДД): ");
  227. psale.data = Console.ReadLine();
  228.  
  229. Console.WriteLine("Продукт с ГМО? (Да/Нет): ");
  230. psale.withGMO = Console.ReadLine();
  231. p = psale;
  232. logic.Add(p);
  233. }
  234. else if (dd == "2")
  235. {
  236. WithOutSale pnosale = new WithOutSale ();
  237. Console.WriteLine("Изменение существующей записи");
  238. pnosale.id = id;
  239. Console.WriteLine("Наименование товара: ");
  240. pnosale.product = Console.ReadLine();
  241. Console.WriteLine("Категория: ");
  242. pnosale.category = Console.ReadLine();
  243. Console.WriteLine("Сумма: ");
  244. pnosale.sum = Convert.ToInt32(Console.ReadLine());
  245. Console.WriteLine("Дата покупки(ГГ/ММ/ДД): ");
  246. pnosale.data = Console.ReadLine();
  247. Console.WriteLine("Эко продукт (Да/Нет): ");
  248. pnosale.eco = Console.ReadLine();
  249. Console.WriteLine("Продукт свежий (Да/Нет): ");
  250. pnosale.fresh = Console.ReadLine();
  251. p = pnosale;
  252. logic.Add(p);
  253. }
  254. else
  255. {
  256. Console.WriteLine("Такого варианта ответа не существует! Попробуйте снова!");
  257. Console.ReadKey();
  258. }
  259. }
  260. catch (Exception e)
  261. {
  262. Console.WriteLine("Exception Message: " + e.Message);
  263. Console.ReadKey();
  264. }
  265.  
  266. }
  267. static void PrintList()
  268. {
  269. List<purchase> list = logic.GetList();
  270. Console.Write("Список покупок");
  271. foreach (purchase record in list)
  272. {
  273. WithSale record_as_sale = record as WithSale ;
  274. WithOutSale record_as_nosale = record as WithOutSale ;
  275. if (record_as_sale != null)
  276. {
  277. Console.WriteLine("\nid записи: " + record_as_sale.id + "\nНаименование товара: " + record_as_sale.product + "\nКатегория: " + record_as_sale.category + "\nСумма: " + record_as_sale.sum + "\nДата: " + record_as_sale.data + "\nПродукт с ГМО?: " + record_as_sale.withGMO);
  278. }
  279. else
  280. {
  281. Console.WriteLine("\nid записи: " + record_as_nosale.id + "\nНаименование товара: " + record_as_nosale.product + "\nКатегория: " + record_as_nosale.category + "\nСумма: " + record_as_nosale.sum + "\nДата: " + record_as_nosale.data + "\nСвежий продукт: " + record_as_nosale.fresh + "\nЭко продукт: " + record_as_nosale.eco);
  282. }
  283. }
  284.  
  285. }
  286. static void delete(int id)
  287. {
  288. try
  289. {
  290. Console.WriteLine("Вы точно хотите удалить запись? 1 - Да, 2 - Нет");
  291. string d = Console.ReadLine();
  292. if (d == "1")
  293. {
  294. logic.Del(id);
  295. Console.WriteLine("Произошло удаление записи");
  296. }
  297. else if (d == "2")
  298. {
  299. Console.WriteLine("Удаление было отменено");
  300. }
  301. else
  302. {
  303. Console.WriteLine("Такого варианта ответа не существует! Попробуйте снова!");
  304. }
  305. }
  306. catch (Exception e)
  307. {
  308. Console.WriteLine("Exception Message: " + e.Message);
  309. Console.ReadKey();
  310. }
  311. }
  312. // [... прочие методы ...]
  313. static void Main(string[] args)
  314. {
  315. purchase p;
  316. int ID;
  317. logic = new BusinessLogic(new MemoryDataSource());
  318. bool exit = false;
  319. while (!exit)
  320. {
  321. Console.Clear();
  322. PrintMenu();
  323. string command = Console.ReadLine(), dd;
  324. switch (command)
  325. {
  326. case "1":
  327. Console.Clear();
  328. Console.WriteLine("Какую покупку вы совершили? 1) Со скидкой или 2) без скидки?");
  329. dd = Console.ReadLine();
  330. if (dd == "1")
  331. {
  332. WithSale psale = new WithSale ();
  333. Console.Clear();
  334. Console.WriteLine("Ввод новой записи.");
  335. psale.id = 0;
  336. Console.WriteLine("Наименование товара: ");
  337. psale.product = Console.ReadLine();
  338. Console.WriteLine("Категория: ");
  339. psale.category = Console.ReadLine();
  340. Console.WriteLine("Сумма: ");
  341. psale.sum = Convert.ToInt32(Console.ReadLine());
  342. Console.WriteLine("Дата покупки(ГГ/ММ/ДД): ");
  343. psale.data = Console.ReadLine();
  344. Console.WriteLine("Продукт с ГМО? (Да/Нет): ");
  345. psale.withGMO = Console.ReadLine();
  346. p = psale;
  347. }
  348. else if (dd == "2")
  349. {
  350. WithOutSale pnosale = new WithOutSale ();
  351. Console.Clear();
  352. Console.WriteLine("Ввод новой записи.");
  353. pnosale.id = 0;
  354. Console.WriteLine("Наименование товара: ");
  355. pnosale.product = Console.ReadLine();
  356. Console.WriteLine("Категория: ");
  357. pnosale.category = Console.ReadLine();
  358. Console.WriteLine("Сумма: ");
  359. pnosale.sum = Convert.ToInt32(Console.ReadLine());
  360. Console.WriteLine("Дата покупки(ГГ/ММ/ДД): ");
  361. pnosale.data = Console.ReadLine();
  362. Console.WriteLine("Эко продукт (Да/Нет): ");
  363. pnosale.eco = Console.ReadLine();
  364. Console.WriteLine("Продукт свежий (Да/Нет): ");
  365. pnosale.fresh = Console.ReadLine();
  366. p = pnosale;
  367. }
  368. else
  369. {
  370. Console.WriteLine("Такого варианта ответа не существует! Попробуйте снова!");
  371. Console.ReadKey();
  372. break;
  373. }
  374. Remov(p);
  375. break;
  376. case "2":
  377. Console.Clear();
  378. PrintList();
  379. Console.ReadLine();
  380. break;
  381. case "3":
  382. Console.Clear();
  383. Console.WriteLine("Введите id записи, которое нужно изменить: ");
  384. ID = int.Parse(Console.ReadLine());
  385. Editing(ID);
  386. Console.ReadKey();
  387.  
  388. break;
  389. case "4":
  390. Console.Clear();
  391. Console.WriteLine("Введите id записи, которое нужно удалить: ");
  392. ID = int.Parse(Console.ReadLine());
  393. delete(ID);
  394. Console.ReadKey();
  395.  
  396. break;
  397. case "5":
  398. exit = true;
  399. break;
  400. default:
  401. Console.Clear();
  402. Console.WriteLine("Такого варианта ответа не существует! Попробуйте снова!");
  403. Console.ReadKey();
  404. break;
  405. }
  406. }
  407. }
  408. }
  409. }
RAW Paste Data