SHARE
TWEET

Untitled

a guest Dec 9th, 2019 112 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top