Создать класс "Печатное издание" с использованием ООП - 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;
}
}
}