Создать класс "Печатное издание" с использованием ООП - C#

Узнай цену своей работы

Формулировка задачи:

Требуется создать класс "Печатное издание", где есть название книги, ФИО автора, стоимость, оглавление. Стоимость книги со временем меняется. Для художественной литературы: первые 5 лет она равна стоимости покупки книги, следующие 5 лет уменьшается на 20% в год, пока не станет равной нулю, если возраст книги превышает 100 лет, то ее стоимость в k раз превышает первоначальную стоимость. Для прочих книг: первые 5 лет она равна стоимости покупки книги, следующие 5 лет уменьшается на 20% в год, пока не станет равной нулю. Решить эту задачу для учета 3 книг, выдаваемых различным читателям, возможна в случае порчи замена книги на книгу с не меньшей стоимостью. Программа должна: показать не выданные книги; Дать информацию о замене книг. Я представляю как сделать этот класс, но решить задачу не могу. ЗЫ. в качестве дополнительного поля еще можно использовать bool поле, которое будет отвечать за то, что книгу отдали на руки читателю.

Решение задачи: «Создать класс "Печатное издание" с использованием ООП»

textual
Листинг программы
using System;
using System.Collections;
using System.Collections.Generic;
 
namespace PrintEdition
{
//Класс печатное издание
    public class PrintEdition
    {
        public decimal CostBook { get; private set; }
        public string NameBook { get; private set; }
        public string AuthorName { get; private set; }
        public string TableOfContents { get; private set; }
 
        private static IList _printBooks = new List<PrintEdition>();
        public static IEnumerable PrintBooks
        {
            get { return ArrayList.ReadOnly(_printBooks); }
        }
 
        public PrintEdition IssueBook()
        {
            _printBooks.Remove(this);
            return this;
        }
 
        public PrintEdition(decimal costBook, string nameBook, string authorName,
            string tableOfContents, int printDateYear, bool isArtBook = false)
        {
            int intervalYears = DateTime.Now.Year - printDateYear;
 
            this.CostBook = GetCostOnBook(intervalYears, costBook, isArtBook);
            this.NameBook = nameBook;
            this.AuthorName = authorName;
            this.TableOfContents = tableOfContents;
            Console.WriteLine("Появилась новая книга:\n {0} - {1} - {2}, цена руб.: {3}",
                AuthorName, NameBook, TableOfContents, CostBook);
        }
 
        public static void AddBook(PrintEdition printEditionBook)
        {
            _printBooks.Add(printEditionBook);
        }
 
        public static void AddBooks(IEnumerable printEditionBook)
        {
            foreach (var printEdition in printEditionBook)
                _printBooks.Add(printEdition); 
        }
 
        public static void ShowNotIssueBooks()
        {
            if (_printBooks.Count > 0)
            {
                Console.WriteLine("Список не выданных книг:");
                foreach (PrintEdition printBook in _printBooks)
                {
                    Console.WriteLine("Книга:\n {0} - {1} - {2}, цена руб.: {3}",
                    printBook.AuthorName, printBook.NameBook, printBook.TableOfContents, printBook.CostBook);
                } 
            }
            else
            {
                Console.WriteLine("Все книги были выданы.");
            }
        }
 
        private decimal GetCostOnBook(int intervalYears, decimal costBook, bool isArtBook)
        {
            if (IsCorrectIntervalInYears(intervalYears))
            {
                if (intervalYears > 5 && intervalYears < 10)
                {
                    int percentReductionCost = (intervalYears - 5)*20;
                    int percentBalance = 100 - percentReductionCost;
                    int realRatio = percentBalance/100;
                    costBook = costBook*realRatio;
                }
                 else if (intervalYears >= 10 && intervalYears <= 100 && isArtBook)
                {
                    costBook = 0;
                }
                else if (intervalYears >= 10 && !isArtBook)
                {
                    costBook = 0;
                }
 
                if (intervalYears > 100 && isArtBook)
                {
                    Console.WriteLine(
                        "Книга издавалась более 100 лет назад,\n введите коэффициент увеличения стоимости от первоначальной цены:");
                    int k;
                    if(int.TryParse(Console.ReadLine(), out k))
                    {
                        costBook = costBook * k;
                    }
                }
            }
            return costBook;
        }
 
        private bool IsCorrectIntervalInYears(int intervalYears)
        {
            return intervalYears >= 0;
        }
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы