Advertisement
Infiniti_Inter

abacaba

Apr 29th, 2020
534
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.23 KB | None | 0 0
  1. /*Реализовать библиотечный каталог, который позволяет: добавлять и удалять
  2. информацию о библиотечных фондах (периодика, читальный зал, абонемент, редкой
  3. литературы); добавлять и удалять записи в каждый фонд; просматривать содержимое
  4. целого каталога или каждого фонда в отдельности; осуществлять поиск всех публикаций
  5. заданного автора по всему каталогу или по отдельному фонду.
  6. Первый этап – разрабатывается консольное приложение для проверки корректности работы,
  7. разрабатываемых классов
  8. */
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.IO;
  14.  
  15.  
  16.  
  17. public class Pair<T, V> // в одном объкте хранит два разных
  18. {
  19.     public T first;
  20.     public V second;
  21. }
  22.  
  23.  
  24. public class Book
  25. {
  26.  
  27.     int Type = 0;
  28.     // 0 - pereodical
  29.     // 1 - Rare
  30.     // 2 - reading hall
  31.     public string title { get; set; }
  32.  
  33.     public int count = 0;
  34.     public string edition { get; set; }
  35.  
  36.     public int cost = 0;
  37.     public int yearOfEdition;
  38.     public bool IsFree() => cost == 0 ? true : false;
  39.  
  40.     public string GetMyType()
  41.     {
  42.         if (Type == 0)
  43.             return "pereodical\n";
  44.         if (Type == 1)
  45.             return "rare\n";
  46.         if (Type == 2)
  47.             return "reading hall\n";
  48.         return "error\n";
  49.     }
  50.     public string GetSomeInfo // частичная информация
  51.     {
  52.         get { return "Title : \"" + title + "\"\nEdition : \"" + edition + "\", " + yearOfEdition + "y.\n"; }
  53.     }
  54.     virtual public string GetFullInfo
  55.     {
  56.         get
  57.         {
  58.             return "Title : \"" + title + "\"\nEdition : \"" + edition + "\", " + yearOfEdition + "y.\n" +
  59.       "cost :" + cost + "\ncount :" + count + "\n";
  60.         }
  61.     }
  62.     public Book(string title, string edition, int yearOfEdition, int type, int cost, int count) //конструктор
  63.     {
  64.         this.title = title;
  65.         this.edition = edition;
  66.         this.yearOfEdition = yearOfEdition;
  67.         this.cost = cost;
  68.         this.count = count;
  69.     }
  70.     public Book() { }
  71.  
  72.  
  73.     public Book(Book copy) : this(copy.title, copy.edition, copy.yearOfEdition, copy.Type,
  74.         copy.cost, copy.count)
  75.     {
  76.  
  77.     }
  78.     public static bool Compare(Book a, Book b) // проверка двух объктов
  79.     {
  80.         return (a.title == b.title && a.edition == b.edition && a.yearOfEdition == b.yearOfEdition);
  81.     }
  82.  
  83.  
  84. }
  85.  
  86.  
  87.  
  88. public class Subscriprion //те кто берут книги
  89. {
  90.     public int ID { get; }
  91.     public string name { get; set; }
  92.     public string surname { get; set; }
  93.     public int YearOfBirth { get; set; }
  94.  
  95.     static int counter = 100000; //чтобы ID был красивый
  96.  
  97.     private int expiredBookCounter = 0;
  98.     public int GetExpiredCounter() { return expiredBookCounter; }
  99.  
  100.     List<Pair<Book, DateTime>> books = new List<Pair<Book, DateTime>>();
  101.     //не увеличивает счетчик и не присваивает ID
  102.     public Subscriprion(int special) { }
  103.     public Subscriprion() { ID = counter++; }
  104.  
  105.     public Subscriprion(string surname, string name, int YearOfBirth)
  106.     {
  107.  
  108.         this.surname = surname;
  109.         this.name = name;
  110.         this.YearOfBirth = YearOfBirth;
  111.         ID = counter++;
  112.     }
  113.  
  114.  
  115.  
  116.     // Пресона берет obj в день date на 30 дней!
  117.     public void AddBook(Book obj)
  118.     {
  119.         //тип type должен совпадать с object. При этом это должен быть новый объект
  120.         DateTime date = DateTime.Now;
  121.         Pair<Book, DateTime> item = new Pair<Book, DateTime>();
  122.  
  123.         Book tmp = new Book(obj);
  124.         item.first = tmp;
  125.  
  126.         obj.count--;
  127.         item.first.count = 1;
  128.  
  129.         item.second = date;
  130.  
  131.         books.Add(item);
  132.     }
  133.  
  134.  
  135.     public void RemoveBook(Book obj, int count = 1)
  136.     {
  137.         for (int i = 0; i < books.Count; ++i)
  138.         {
  139.             if (Book.Compare(obj, books[i].first)) //сравниваем
  140.             {
  141.                 books[i].second.AddDays(30);
  142.                 if (DateTime.Compare(DateTime.Now, books[i].second) < 0)
  143.                 {
  144.                     Console.WriteLine("expired!");
  145.                     expiredBookCounter++;
  146.                 }
  147.                 books.RemoveAt(i); //удаляем объект
  148.             }
  149.         }
  150.     }
  151.  
  152.     public void ShowBooks()
  153.     {
  154.         foreach (var v in books)
  155.         {
  156.             DateTime tmp = v.second.AddDays(30);
  157.             Console.WriteLine(v.first.GetSomeInfo + "TO " + tmp.Day + "." + tmp.Month + "\n");
  158.         }
  159.     }
  160. }
  161.  
  162.  
  163.  
  164. public class Catalog
  165. {
  166.  
  167.     public List<Subscriprion> subscriprions = new List<Subscriprion>();
  168.     public List<Book> Books = new List<Book>();
  169.  
  170.  
  171.  
  172.     Book book = new Book();
  173.  
  174.  
  175.     //Добавляет книгу по объекту
  176.  
  177.  
  178.     public void AddSubscription(Subscriprion obj) //добавляем читателя
  179.     {
  180.         subscriprions.Add(obj);
  181.     }
  182.     public void RemoveSubscriprion(Subscriprion obj) //удаляем
  183.     {
  184.         for (int i = 0; i < subscriprions.Count; ++i)
  185.         {
  186.             if (obj.ID == subscriprions[i].ID)
  187.                 subscriprions.RemoveAt(i);
  188.         }
  189.     }
  190.  
  191.     public int FindSubscriprion(int ID)
  192.     {
  193.         for (int i = 0; i < subscriprions.Count; ++i)
  194.         {
  195.             if (ID == subscriprions[i].ID)
  196.                 return i;
  197.         }
  198.         return -1;
  199.     }
  200.  
  201.  
  202.     private int FindBook(Book obj) //объединение книг, поиск книг по объектам, определяет тип
  203.     {
  204.  
  205.         for (int i = 0; i < Books.Count; ++i)
  206.         {
  207.             if (Book.Compare(Books[i], obj))
  208.                 return i;
  209.         }
  210.         return -1;
  211.     }
  212.     /*
  213.     Добавляет уже готовый объект "Unit". Если объкт уже был в базе, то увеличивается счетчик количества
  214.     */
  215.     public void AddBook(Book obj)
  216.     {
  217.         int idx = FindBook(obj);
  218.         AddObjectAt(idx, obj);
  219.     }
  220.     /*
  221.     Добавляет уже готовый объект "Unit" на позиции idx. Если объкт уже был в базе, то увеличивается счетчик количества
  222.     */
  223.     public void AddObjectAt(int idx, Book obj)
  224.     {
  225.  
  226.         if (idx == -1)
  227.         {
  228.             Books.Add(obj);
  229.         }
  230.         else
  231.         {
  232.             Books[idx].count += obj.count;
  233.         }
  234.  
  235.     }
  236.  
  237.     //Удаляет Уже готовый объект книги, если она есть в каком-либо фонде
  238.     public void RemoveObject(Book obj)
  239.     {
  240.         int idx = FindBook(obj);
  241.         RemoveObjectAt(idx, obj);
  242.     }
  243.  
  244.     //Удаляет Уже готовый объект книги, если она есть в соответсвующем фонде на позиции idx
  245.     public void RemoveObjectAt(int idx, Book obj)
  246.     {
  247.  
  248.         if (idx == -1)
  249.         {
  250.             Console.WriteLine("\nNot Found : \n" + obj.GetSomeInfo);
  251.         }
  252.  
  253.  
  254.         if (Books[idx].count < obj.count)
  255.         {
  256.             Console.WriteLine($"Not enougth {obj.count - Books[idx].count} books!\n" + obj.GetSomeInfo);
  257.         }
  258.         Books[idx].count -= obj.count;
  259.  
  260.     }
  261.  
  262.     public bool IsFree(Book obj)
  263.     {
  264.         return obj.IsFree();
  265.     }
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272. }
  273.  
  274. class Program
  275. {
  276.     static void Main(string[] args)
  277.     {
  278.         Catalog a = new Catalog();
  279.         Book item = new Book("first", "second", 2000, 0, 0, 1);
  280.  
  281.         a.AddSubscription(new Subscriprion("Free", "Man", 2000));
  282.         a.subscriprions[0].AddBook(item);
  283.         a.subscriprions[0].ShowBooks();
  284.         a.AddBook(item);
  285.  
  286.         Console.WriteLine(a.Books[0].GetFullInfo);
  287.  
  288.         Console.WriteLine(item.GetMyType());
  289.  
  290.     }
  291.  
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement