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;
- using System.IO;
- public class Pair<T, V> // в одном объкте хранит два разных
- {
- public T first;
- public V second;
- }
- public class Book
- {
- int Type = 0;
- // 0 - pereodical
- // 1 - Rare
- // 2 - reading hall
- public string title { get; set; }
- public int count = 0;
- public string edition { get; set; }
- public int cost = 0;
- public int yearOfEdition;
- public bool IsFree() => cost == 0 ? true : false;
- public string GetMyType()
- {
- if (Type == 0)
- return "pereodical\n";
- if (Type == 1)
- return "rare\n";
- if (Type == 2)
- return "reading hall\n";
- return "error\n";
- }
- public string GetSomeInfo // частичная информация
- {
- get { return "Title : \"" + title + "\"\nEdition : \"" + edition + "\", " + yearOfEdition + "y.\n"; }
- }
- virtual public string GetFullInfo
- {
- get
- {
- return "Title : \"" + title + "\"\nEdition : \"" + edition + "\", " + yearOfEdition + "y.\n" +
- "cost :" + cost + "\ncount :" + count + "\n";
- }
- }
- public Book(string title, string edition, int yearOfEdition, int type, int cost, int count) //конструктор
- {
- this.title = title;
- this.edition = edition;
- this.yearOfEdition = yearOfEdition;
- this.cost = cost;
- this.count = count;
- }
- public Book() { }
- public Book(Book copy) : this(copy.title, copy.edition, copy.yearOfEdition, copy.Type,
- copy.cost, copy.count)
- {
- }
- public static bool Compare(Book a, Book b) // проверка двух объктов
- {
- return (a.title == b.title && a.edition == b.edition && a.yearOfEdition == b.yearOfEdition);
- }
- }
- public class Subscriprion //те кто берут книги
- {
- public int ID { get; }
- public string name { get; set; }
- public string surname { get; set; }
- public int YearOfBirth { get; set; }
- static int counter = 100000; //чтобы ID был красивый
- private int expiredBookCounter = 0;
- public int GetExpiredCounter() { return expiredBookCounter; }
- List<Pair<Book, DateTime>> books = new List<Pair<Book, DateTime>>();
- //не увеличивает счетчик и не присваивает ID
- public Subscriprion(int special) { }
- public Subscriprion() { ID = counter++; }
- public Subscriprion(string surname, string name, int YearOfBirth)
- {
- this.surname = surname;
- this.name = name;
- this.YearOfBirth = YearOfBirth;
- ID = counter++;
- }
- // Пресона берет obj в день date на 30 дней!
- public void AddBook(Book obj)
- {
- //тип type должен совпадать с object. При этом это должен быть новый объект
- DateTime date = DateTime.Now;
- Pair<Book, DateTime> item = new Pair<Book, DateTime>();
- Book tmp = new Book(obj);
- item.first = tmp;
- obj.count--;
- item.first.count = 1;
- item.second = date;
- books.Add(item);
- }
- public void RemoveBook(Book obj, int count = 1)
- {
- for (int i = 0; i < books.Count; ++i)
- {
- if (Book.Compare(obj, books[i].first)) //сравниваем
- {
- books[i].second.AddDays(30);
- if (DateTime.Compare(DateTime.Now, books[i].second) < 0)
- {
- Console.WriteLine("expired!");
- expiredBookCounter++;
- }
- books.RemoveAt(i); //удаляем объект
- }
- }
- }
- public void ShowBooks()
- {
- foreach (var v in books)
- {
- DateTime tmp = v.second.AddDays(30);
- Console.WriteLine(v.first.GetSomeInfo + "TO " + tmp.Day + "." + tmp.Month + "\n");
- }
- }
- }
- public class Catalog
- {
- public List<Subscriprion> subscriprions = new List<Subscriprion>();
- public List<Book> Books = new List<Book>();
- Book book = new Book();
- //Добавляет книгу по объекту
- public void AddSubscription(Subscriprion obj) //добавляем читателя
- {
- subscriprions.Add(obj);
- }
- public void RemoveSubscriprion(Subscriprion obj) //удаляем
- {
- for (int i = 0; i < subscriprions.Count; ++i)
- {
- if (obj.ID == subscriprions[i].ID)
- subscriprions.RemoveAt(i);
- }
- }
- public int FindSubscriprion(int ID)
- {
- for (int i = 0; i < subscriprions.Count; ++i)
- {
- if (ID == subscriprions[i].ID)
- return i;
- }
- return -1;
- }
- private int FindBook(Book obj) //объединение книг, поиск книг по объектам, определяет тип
- {
- for (int i = 0; i < Books.Count; ++i)
- {
- if (Book.Compare(Books[i], obj))
- return i;
- }
- return -1;
- }
- /*
- Добавляет уже готовый объект "Unit". Если объкт уже был в базе, то увеличивается счетчик количества
- */
- public void AddBook(Book obj)
- {
- int idx = FindBook(obj);
- AddObjectAt(idx, obj);
- }
- /*
- Добавляет уже готовый объект "Unit" на позиции idx. Если объкт уже был в базе, то увеличивается счетчик количества
- */
- public void AddObjectAt(int idx, Book obj)
- {
- if (idx == -1)
- {
- Books.Add(obj);
- }
- else
- {
- Books[idx].count += obj.count;
- }
- }
- //Удаляет Уже готовый объект книги, если она есть в каком-либо фонде
- public void RemoveObject(Book obj)
- {
- int idx = FindBook(obj);
- RemoveObjectAt(idx, obj);
- }
- //Удаляет Уже готовый объект книги, если она есть в соответсвующем фонде на позиции idx
- public void RemoveObjectAt(int idx, Book obj)
- {
- if (idx == -1)
- {
- Console.WriteLine("\nNot Found : \n" + obj.GetSomeInfo);
- }
- if (Books[idx].count < obj.count)
- {
- Console.WriteLine($"Not enougth {obj.count - Books[idx].count} books!\n" + obj.GetSomeInfo);
- }
- Books[idx].count -= obj.count;
- }
- public bool IsFree(Book obj)
- {
- return obj.IsFree();
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Catalog a = new Catalog();
- Book item = new Book("first", "second", 2000, 0, 0, 1);
- a.AddSubscription(new Subscriprion("Free", "Man", 2000));
- a.subscriprions[0].AddBook(item);
- a.subscriprions[0].ShowBooks();
- a.AddBook(item);
- Console.WriteLine(a.Books[0].GetFullInfo);
- Console.WriteLine(item.GetMyType());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement