Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text.RegularExpressions;
- namespace Lab1
- {
- abstract public class purchase
- {
- public int id;
- public string product; // Товар
- public string category; // Категория
- public int sum; // Сумма
- public string data; // Дата
- }
- public class WithSale : purchase
- {
- public string withGMO;
- public bool sale = true;
- }
- public class WithOutSale : purchase
- {
- public string fresh;
- public string eco;
- public bool sale = false;
- }
- /// <summary>
- /// Интерфейс для реализации хранилища записей
- /// </summary>
- public interface IDataSource
- {
- purchase Save(purchase record);
- purchase Get(int id);
- bool Delete(int id);
- List<purchase> GetAll();
- }
- /// <summary>
- /// Хранение записей в оперативной памяти
- /// ! Для предотвращения изменения записей извне,
- /// все методы, возвращающие записи должны возвращать
- /// их копии
- /// </summary>
- public class MemoryDataSource : IDataSource
- {
- int idd = 0;
- private List<purchase> records = new List<purchase>();
- public purchase Save(purchase record)
- {
- int id;
- if (record.id == 0)
- {
- idd++;
- record.id = idd;
- records.Add(record);
- }
- else
- {
- id = records.FindIndex(x => x.id == record.id);
- records[id] = record;
- }
- return record;
- }
- public purchase Get(int id)
- {
- int a = 0;
- for (int j = 0; j < records.Count; j++)
- {
- if (records[j].id == id)
- {
- a++;
- }
- }
- if (a == 0)
- {
- return null;
- }
- else
- {
- id = records.FindIndex(x => x.id == id);
- return records[id];
- }
- }
- public bool Delete(int id)
- {
- int a = 0;
- for (int j = 0; j < records.Count; j++)
- {
- if (records[j].id == id)
- {
- a++;
- }
- }
- if (a == 0)
- {
- return false;
- }
- else
- {
- id = records.FindIndex(x => x.id == id);
- records.RemoveAt(id);
- return true;
- }
- }
- public List<purchase> GetAll()
- {
- return records;
- }
- }
- public class BusinessLogic
- {
- private IDataSource dataSource;
- public BusinessLogic(IDataSource source)
- {
- dataSource = source;
- }
- // Получение отсортированного списка
- public List<purchase> GetList()
- {
- List<purchase> list = dataSource.GetAll();
- var sorted = from purchase u in list
- orderby u.data, u.product
- select u;
- list = sorted.ToList();
- // ... сортировка ...
- return list;
- }
- public purchase GetElement(int id)
- {
- purchase list = dataSource.Get(id);
- if (list == null)
- {
- throw new Exception("Этой записи не существует!");
- }
- else
- {
- return list;
- }
- }
- public purchase Add(purchase record)
- {
- if (record.product == "")
- {
- throw new Exception("Наименование товара не указано, повторите запись опять.");
- }
- if (record.sum < 0)
- {
- throw new Exception("Сумма должна быть больше или равна 0, повторите запись опять.");
- }
- Match match = Regex.Match(record.data, @"(\d{2})\/(0\d|1[012])\/([0-2]\d|3[01])");
- if (!match.Success)
- {
- throw new Exception("Дата введена в неверном формате, повторите попытку.");
- }
- purchase mainlist = dataSource.Save(record);
- return mainlist;
- }
- public bool Del(int id)
- {
- bool mainlist = dataSource.Delete(id);
- if (mainlist == false)
- {
- throw new Exception("Этой записи не существует!");
- }
- else
- {
- return mainlist;
- }
- }
- // [... остальные методы ...]
- }
- class Program
- {
- static BusinessLogic logic;
- static void PrintMenu()
- {
- Console.WriteLine($"[*] Меню [*] \n1 - Добавить запись\n2 - Просмотреть записи\n3 - Изменить запись\n4 - Удалить запись\n5 - Выход");
- }
- static void Remov(purchase record)
- {
- try
- {
- logic.Add(record);
- }
- catch (Exception e)
- {
- Console.WriteLine("Exception Message: " + e.Message);
- Console.ReadKey();
- }
- }
- static void Editing(int id)
- {
- purchase p;
- string dd;
- try
- {
- purchase list = logic.GetElement(id);
- Console.WriteLine("\nid записи: " + list.id + "\n" + list.product + "\n" + list.category + "\n" + list.data + "\n" + list.sum + "\n");
- Console.Clear();
- Console.WriteLine("Какую покупку вы совершили? 1) Со скидкой или 2) без скидки?");
- dd = Console.ReadLine();
- if (dd == "1")
- {
- WithSale psale = new WithSale ();
- Console.WriteLine("Изменение существующей записи.");
- psale.id = id;
- Console.WriteLine("Наименование товара: ");
- psale.product = Console.ReadLine();
- Console.WriteLine("Категория: ");
- psale.category = Console.ReadLine();
- Console.WriteLine("Сумма: ");
- psale.sum = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Дата покупки(ГГ/ММ/ДД): ");
- psale.data = Console.ReadLine();
- Console.WriteLine("Продукт с ГМО? (Да/Нет): ");
- psale.withGMO = Console.ReadLine();
- p = psale;
- logic.Add(p);
- }
- else if (dd == "2")
- {
- WithOutSale pnosale = new WithOutSale ();
- Console.WriteLine("Изменение существующей записи");
- pnosale.id = id;
- Console.WriteLine("Наименование товара: ");
- pnosale.product = Console.ReadLine();
- Console.WriteLine("Категория: ");
- pnosale.category = Console.ReadLine();
- Console.WriteLine("Сумма: ");
- pnosale.sum = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Дата покупки(ГГ/ММ/ДД): ");
- pnosale.data = Console.ReadLine();
- Console.WriteLine("Эко продукт (Да/Нет): ");
- pnosale.eco = Console.ReadLine();
- Console.WriteLine("Продукт свежий (Да/Нет): ");
- pnosale.fresh = Console.ReadLine();
- p = pnosale;
- logic.Add(p);
- }
- else
- {
- Console.WriteLine("Такого варианта ответа не существует! Попробуйте снова!");
- Console.ReadKey();
- }
- }
- catch (Exception e)
- {
- Console.WriteLine("Exception Message: " + e.Message);
- Console.ReadKey();
- }
- }
- static void PrintList()
- {
- List<purchase> list = logic.GetList();
- Console.Write("Список покупок");
- foreach (purchase record in list)
- {
- WithSale record_as_sale = record as WithSale ;
- WithOutSale record_as_nosale = record as WithOutSale ;
- if (record_as_sale != null)
- {
- 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);
- }
- else
- {
- 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);
- }
- }
- }
- static void delete(int id)
- {
- try
- {
- Console.WriteLine("Вы точно хотите удалить запись? 1 - Да, 2 - Нет");
- string d = Console.ReadLine();
- if (d == "1")
- {
- logic.Del(id);
- Console.WriteLine("Произошло удаление записи");
- }
- else if (d == "2")
- {
- Console.WriteLine("Удаление было отменено");
- }
- else
- {
- Console.WriteLine("Такого варианта ответа не существует! Попробуйте снова!");
- }
- }
- catch (Exception e)
- {
- Console.WriteLine("Exception Message: " + e.Message);
- Console.ReadKey();
- }
- }
- // [... прочие методы ...]
- static void Main(string[] args)
- {
- purchase p;
- int ID;
- logic = new BusinessLogic(new MemoryDataSource());
- bool exit = false;
- while (!exit)
- {
- Console.Clear();
- PrintMenu();
- string command = Console.ReadLine(), dd;
- switch (command)
- {
- case "1":
- Console.Clear();
- Console.WriteLine("Какую покупку вы совершили? 1) Со скидкой или 2) без скидки?");
- dd = Console.ReadLine();
- if (dd == "1")
- {
- WithSale psale = new WithSale ();
- Console.Clear();
- Console.WriteLine("Ввод новой записи.");
- psale.id = 0;
- Console.WriteLine("Наименование товара: ");
- psale.product = Console.ReadLine();
- Console.WriteLine("Категория: ");
- psale.category = Console.ReadLine();
- Console.WriteLine("Сумма: ");
- psale.sum = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Дата покупки(ГГ/ММ/ДД): ");
- psale.data = Console.ReadLine();
- Console.WriteLine("Продукт с ГМО? (Да/Нет): ");
- psale.withGMO = Console.ReadLine();
- p = psale;
- }
- else if (dd == "2")
- {
- WithOutSale pnosale = new WithOutSale ();
- Console.Clear();
- Console.WriteLine("Ввод новой записи.");
- pnosale.id = 0;
- Console.WriteLine("Наименование товара: ");
- pnosale.product = Console.ReadLine();
- Console.WriteLine("Категория: ");
- pnosale.category = Console.ReadLine();
- Console.WriteLine("Сумма: ");
- pnosale.sum = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Дата покупки(ГГ/ММ/ДД): ");
- pnosale.data = Console.ReadLine();
- Console.WriteLine("Эко продукт (Да/Нет): ");
- pnosale.eco = Console.ReadLine();
- Console.WriteLine("Продукт свежий (Да/Нет): ");
- pnosale.fresh = Console.ReadLine();
- p = pnosale;
- }
- else
- {
- Console.WriteLine("Такого варианта ответа не существует! Попробуйте снова!");
- Console.ReadKey();
- break;
- }
- Remov(p);
- break;
- case "2":
- Console.Clear();
- PrintList();
- Console.ReadLine();
- break;
- case "3":
- Console.Clear();
- Console.WriteLine("Введите id записи, которое нужно изменить: ");
- ID = int.Parse(Console.ReadLine());
- Editing(ID);
- Console.ReadKey();
- break;
- case "4":
- Console.Clear();
- Console.WriteLine("Введите id записи, которое нужно удалить: ");
- ID = int.Parse(Console.ReadLine());
- delete(ID);
- Console.ReadKey();
- break;
- case "5":
- exit = true;
- break;
- default:
- Console.Clear();
- Console.WriteLine("Такого варианта ответа не существует! Попробуйте снова!");
- Console.ReadKey();
- break;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement