Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pl.javastart.library.app;
- public class LibraryApp {
- private static final String APP_NAME = "Biblioteka v1.0";
- public static void main(String[] args) {
- System.out.println(APP_NAME);
- LibraryControl libControl = new LibraryControl();
- libControl.controlLoop();
- }
- }
- -----------------------------------------------------------------
- package pl.javastart.library.app;
- import pl.javastart.library.exception.NoSuchOptionException;
- import pl.javastart.library.io.ConsolePrinter;
- import pl.javastart.library.io.DataReader;
- import pl.javastart.library.model.Book;
- import pl.javastart.library.model.Library;
- import pl.javastart.library.model.Magazine;
- import pl.javastart.library.model.Publication;
- import java.util.InputMismatchException;
- class LibraryControl {
- private ConsolePrinter printer = new ConsolePrinter();
- private DataReader dataReader = new DataReader(printer);
- private Library library = new Library();
- void controlLoop() {
- Option option;
- do {
- printOptions();
- option = getOption();
- switch (option) {
- case ADD_BOOK:
- addBook();
- break;
- case ADD_MAGAZINE:
- addMagazine();
- break;
- case PRINT_BOOKS:
- printBooks();
- break;
- case PRINT_MAGAZINES:
- printMagazines();
- break;
- case EXIT:
- exit();
- break;
- default:
- printer.printLine("Nie ma takiej opcji, wprowadź ponownie: ");
- }
- } while (option != Option.EXIT);
- }
- private Option getOption() {
- boolean optionOk = false;
- Option option = null;
- while (!optionOk) {
- try {
- option = Option.createFromInt(dataReader.getInt());
- optionOk = true;
- } catch (NoSuchOptionException e) {
- printer.printLine(e.getMessage() + ", podaj ponownie:");
- } catch (InputMismatchException ignored) {
- printer.printLine("Wprowadzono wartość, która nie jest liczbą, podaj ponownie:");
- }
- }
- return option;
- }
- private void printOptions() {
- printer.printLine("Wybierz opcję: ");
- for (Option option : Option.values()) {
- printer.printLine(option.toString());
- }
- }
- private void addBook() {
- try {
- Book book = dataReader.readAndCreateBook();
- library.addBook(book);
- } catch (InputMismatchException e) {
- printer.printLine("Nie udało się utworzyć książki, niepoprawne dane");
- } catch (ArrayIndexOutOfBoundsException e) {
- printer.printLine("Osiągnięto limit pojemności, nie można dodać kolejnej książki");
- }
- }
- private void printBooks() {
- Publication[] publications = library.getPublications();
- printer.printBooks(publications);
- }
- private void addMagazine() {
- try {
- Magazine magazine = dataReader.readAndCreateMagazine();
- library.addMagazine(magazine);
- } catch (InputMismatchException e) {
- printer.printLine("Nie udało się utworzyć magazynu, niepoprawne dane");
- } catch (ArrayIndexOutOfBoundsException e) {
- printer.printLine("Osiągnięto limit pojemności, nie można dodać kolejnego magazynu");
- }
- }
- private void printMagazines() {
- Publication[] publications = library.getPublications();
- printer.printMagazines(publications);
- }
- private void exit() {
- printer.printLine("Koniec programu!");
- // zamykamy strumień wejścia
- dataReader.close();
- }
- }
- -----------------------------------------------------------
- package pl.javastart.library.app;
- import pl.javastart.library.exception.NoSuchOptionException;
- enum Option {
- EXIT(0, "Wyjście z programu"),
- ADD_BOOK(1, "Dodanie książki"),
- ADD_MAGAZINE(2,"Dodanie magazynu/gazety"),
- PRINT_BOOKS(3, "Wyświetlenie dostępnych książek"),
- PRINT_MAGAZINES(4, "Wyświetlenie dostępnych magazynów/gazet");
- private int value;
- private String description;
- public int getValue() {
- return value;
- }
- public String getDescription() {
- return description;
- }
- Option(int value, String desc) {
- this.value = value;
- this.description = desc;
- }
- @Override
- public String toString() {
- return value + " - " + description;
- }
- static Option createFromInt(int option) throws NoSuchOptionException {
- try {
- return Option.values()[option];
- } catch(ArrayIndexOutOfBoundsException e) {
- throw new NoSuchOptionException("Brak opcji o id " + option);
- }
- }
- }
- -------------------------------------------------------------
- package pl.javastart.library.exception;
- public class NoSuchOptionException extends Exception {
- public NoSuchOptionException(String message) {
- super(message);
- }
- }
- --------------------------------------------------------------
- package pl.javastart.library.io;
- import pl.javastart.library.model.Book;
- import pl.javastart.library.model.Magazine;
- import pl.javastart.library.model.Publication;
- public class ConsolePrinter {
- public void printBooks(Publication[] publications) {
- int counter = 0;
- for (Publication publication : publications) {
- if(publication instanceof Book) {
- printLine(publication.toString());
- counter++;
- }
- }
- if (counter == 0)
- printLine("Brak książek w bibliotece");
- }
- public void printMagazines(Publication[] publications) {
- int counter = 0;
- for (Publication publication : publications) {
- if(publication instanceof Magazine) {
- printLine(publication.toString());
- counter++;
- }
- }
- if (counter == 0)
- printLine("Brak magazynów w bibliotece");
- }
- public void printLine(String text) {
- System.out.println(text);
- }
- }
- ------------------------------------------------
- package pl.javastart.library.io;
- import pl.javastart.library.model.Book;
- import pl.javastart.library.model.Magazine;
- import java.util.Scanner;
- public class DataReader {
- private Scanner sc = new Scanner(System.in);
- private ConsolePrinter printer;
- public DataReader(ConsolePrinter printer) {
- this.printer = printer;
- }
- public void close() {
- sc.close();
- }
- public int getInt() {
- try {
- return sc.nextInt();
- } finally {
- sc.nextLine();
- }
- }
- public Book readAndCreateBook() {
- printer.printLine("Tytuł: ");
- String title = sc.nextLine();
- printer.printLine("Autor: ");
- String author = sc.nextLine();
- printer.printLine("Wydawnictwo: ");
- String publisher = sc.nextLine();
- printer.printLine("ISBN: ");
- String isbn = sc.nextLine();
- printer.printLine("Rok wydania: ");
- int releaseDate = getInt();
- printer.printLine("Ilość stron: ");
- int pages = getInt();
- return new Book(title, author, releaseDate, pages, publisher, isbn);
- }
- public Magazine readAndCreateMagazine() {
- printer.printLine("Tytuł: ");
- String title = sc.nextLine();
- printer.printLine("Wydawnictwo: ");
- String publisher = sc.nextLine();
- printer.printLine("Język: ");
- String language = sc.nextLine();
- printer.printLine("Rok wydania: ");
- int year = getInt();
- printer.printLine("Miesiąc: ");
- int month = getInt();
- printer.printLine("Dzień: ");
- int day = getInt();
- return new Magazine(title, publisher, language, year, month, day);
- }
- }
- ----------------------------------------------------------
- package pl.javastart.library.model;
- import java.util.Objects;
- public class Book extends Publication {
- // Pola
- private String author;
- private int pages;
- private String isbn;
- // Konstruktory
- public Book(String title, String author, int year, int pages, String publisher,
- String isbn) {
- super(title, publisher, year);
- this.pages = pages;
- this.author = author;
- this.isbn = isbn;
- }
- // settery i gettery
- public String getIsbn() {
- return isbn;
- }
- public void setIsbn(String isbn) {
- this.isbn = isbn;
- }
- public int getPages() {
- return pages;
- }
- public void setPages(int pages) {
- this.pages = pages;
- }
- public String getAuthor() {
- return author;
- }
- public void setAuthor(String author) {
- this.author = author;
- }
- @Override
- public String toString() {
- return super.toString() + author + ", " + pages + ", " + isbn;
- }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- if (!super.equals(o)) return false;
- Book book = (Book) o;
- return pages == book.pages &&
- Objects.equals(author, book.author) &&
- Objects.equals(isbn, book.isbn);
- }
- @Override
- public int hashCode() {
- return Objects.hash(super.hashCode(), author, pages, isbn);
- }
- }
- ----------------------------------------------------------------
- package pl.javastart.library.model;
- public class Library {
- private static final int MAX_PUBLICATONS = 2000;
- private int publicationsNumber;
- private Publication[] publications = new Publication[MAX_PUBLICATONS];
- public Publication[] getPublications() {
- Publication[] result = new Publication[publicationsNumber];
- for (int i = 0; i < publicationsNumber; i++) {
- result[i] = publications[i];
- }
- return result;
- }
- public void addBook(Book book) {
- addPublication(book);
- }
- public void addMagazine(Magazine magazine) {
- addPublication(magazine);
- }
- private void addPublication(Publication publication) {
- if (publicationsNumber >= MAX_PUBLICATONS) {
- throw new ArrayIndexOutOfBoundsException("Max publications exceeded " + MAX_PUBLICATONS);
- }
- publications[publicationsNumber] = publication;
- publicationsNumber++;
- }
- }
- --------------------------------------------------------------------
- package pl.javastart.library.model;
- public class Magazine extends Publication {
- private int month;
- private int day;
- private String language;
- public Magazine(String title, String publisher, String language, int year, int month, int day) {
- super(title, publisher, year);
- this.language = language;
- this.month = month;
- this.day = day;
- }
- public int getMonth() {
- return month;
- }
- public void setMonth(int month) {
- this.month = month;
- }
- public int getDay() {
- return day;
- }
- public void setDay(int day) {
- this.day = day;
- }
- public String getLanguage() {
- return language;
- }
- public void setLanguage(String language) {
- this.language = language;
- }
- @Override
- public String toString() {
- return super.toString() + ", " + month + ", " + day + ", " + language;
- }
- }
- ---------------------------------------------------------------------------
- package pl.javastart.library.model;
- import java.util.Objects;
- public abstract class Publication {
- private String title;
- private String publisher;
- private int year;
- Publication(String title, String publisher, int year) {
- this.title = title;
- this.publisher = publisher;
- this.year = year;
- }
- int getYear() {
- return year;
- }
- void setYear(int year) {
- this.year = year;
- }
- String getTitle() {
- return title;
- }
- void setTitle(String title) {
- this.title = title;
- }
- String getPublisher() {
- return publisher;
- }
- void setPublisher(String publisher) {
- this.publisher = publisher;
- }
- @Override
- public String toString() {
- return title + ", " + publisher + ", " + year;
- }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Publication that = (Publication) o;
- return year == that.year &&
- Objects.equals(title, that.title) &&
- Objects.equals(publisher, that.publisher);
- }
- @Override
- public int hashCode() {
- return Objects.hash(title, publisher, year);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement