Упражнения за извънаудиторна заетост

Задача

Да се създаде програма за книжарница, която чете данни от файл, обработва ги като обекти и записва резултати в нов файл.

Модел на данните

Да се дефинира изключение InvalidDataException, което се хвърля при невалидни данни.

Да се дефинира интерфейс CoverType с метод:

boolean isHardCover();

Да се дефинира абстрактен клас Person с полета:

  • firstName от тип String;
  • lastName от тип String.

Да се дефинират конструктор, методи за четене, equals(), hashCode() и toString().

Да се дефинира клас Author, който наследява Person и добавя:

  • country от тип String;
  • genre от тип String.

Да се дефинира клас Book, който имплементира CoverType и съдържа:

  • title от тип String;
  • author от тип Author;
  • publishingYear от тип int;
  • quantity от тип int;
  • price от тип double.

Полето quantity трябва да приема стойност по-голяма от 5. Полето price трябва да приема стойност по-голяма от 9.99. При невалидна стойност трябва да се хвърля InvalidDataException.

Методът isHardCover() трябва да връща true, ако книгата е издадена преди 2000 година и цената е над 14 лв.

Файлов вход

Данните за книгите трябва да се четат от текстов файл. Един ред от файла описва една книга.

Примерен формат:

Под_игото;Иван;Вазов;България;класика;1985;12;15.00
На_изток_от_Рая;Джон;Стайнбек;САЩ;класика;1998;18;12.58

Разделителят между стойностите е ;. Заглавията с няколко думи могат да се записват с _, за да се улесни разделянето на реда.

Клас BookStore

Да се дефинира клас BookStore, който съдържа:

  • name от тип String;
  • колекция от уникални книги.

Да се избере подходяща колекция за уникални стойности. Да се дефинира конструктор, който приема име на книжарница и име на файл. Конструкторът трябва да зарежда книгите от файла.

Да се реализират методи:

  • addBook(Book book);
  • calculateTotalPrice();
  • calculateAveragePriceByGenre(String genre);
  • findAuthorWithMostBooks();
  • countAuthorsAfterYear(int year);
  • getBooksSortedByAuthorCountry();
  • countHardCoverBooks();
  • toString().

Файлов изход

Класът Application трябва да:

  • създаде обект BookStore чрез входен файл;
  • добави поне две нови книги;
  • изчисли всички резултати от методите;
  • запише резултатите в изходен файл.

При четене и запис трябва да се използва обработка на изключения. При работа с файлови ресурси трябва да се използва try-with-resources.


This site uses Just the Docs, a documentation theme for Jekyll.