Упражнения за извънаудиторна заетост
Задача
Да се създаде програма за книжарница, която чете данни от файл, обработва ги като обекти и записва резултати в нов файл.
Модел на данните
Да се дефинира изключение 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.