Advertisement
Guest User

forsebo

a guest
Dec 12th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.16 KB | None | 0 0
  1. package pl.javastart.library.app;
  2.  
  3. public class LibraryApp {
  4.     private static final String APP_NAME = "Biblioteka v1.0";
  5.  
  6.     public static void main(String[] args) {
  7.         System.out.println(APP_NAME);
  8.         LibraryControl libControl = new LibraryControl();
  9.         libControl.controlLoop();
  10.     }
  11. }
  12. -----------------------------------------------------------------
  13. package pl.javastart.library.app;
  14.  
  15. import pl.javastart.library.exception.NoSuchOptionException;
  16. import pl.javastart.library.io.ConsolePrinter;
  17. import pl.javastart.library.io.DataReader;
  18. import pl.javastart.library.model.Book;
  19. import pl.javastart.library.model.Library;
  20. import pl.javastart.library.model.Magazine;
  21. import pl.javastart.library.model.Publication;
  22.  
  23. import java.util.InputMismatchException;
  24.  
  25. class LibraryControl {
  26.     private ConsolePrinter printer = new ConsolePrinter();
  27.     private DataReader dataReader = new DataReader(printer);
  28.  
  29.     private Library library = new Library();
  30.  
  31.     void controlLoop() {
  32.         Option option;
  33.  
  34.         do {
  35.             printOptions();
  36.             option = getOption();
  37.             switch (option) {
  38.                 case ADD_BOOK:
  39.                     addBook();
  40.                     break;
  41.                 case ADD_MAGAZINE:
  42.                     addMagazine();
  43.                     break;
  44.                 case PRINT_BOOKS:
  45.                     printBooks();
  46.                     break;
  47.                 case PRINT_MAGAZINES:
  48.                     printMagazines();
  49.                     break;
  50.                 case EXIT:
  51.                     exit();
  52.                     break;
  53.                 default:
  54.                     printer.printLine("Nie ma takiej opcji, wprowadź ponownie: ");
  55.             }
  56.         } while (option != Option.EXIT);
  57.     }
  58.  
  59.     private Option getOption() {
  60.         boolean optionOk = false;
  61.         Option option = null;
  62.         while (!optionOk) {
  63.             try {
  64.                 option = Option.createFromInt(dataReader.getInt());
  65.                 optionOk = true;
  66.             } catch (NoSuchOptionException e) {
  67.                 printer.printLine(e.getMessage() + ", podaj ponownie:");
  68.             } catch (InputMismatchException ignored) {
  69.                 printer.printLine("Wprowadzono wartość, która nie jest liczbą, podaj ponownie:");
  70.             }
  71.         }
  72.  
  73.         return option;
  74.     }
  75.  
  76.     private void printOptions() {
  77.         printer.printLine("Wybierz opcję: ");
  78.         for (Option option : Option.values()) {
  79.             printer.printLine(option.toString());
  80.         }
  81.     }
  82.  
  83.     private void addBook() {
  84.         try {
  85.             Book book = dataReader.readAndCreateBook();
  86.             library.addBook(book);
  87.         } catch (InputMismatchException e) {
  88.             printer.printLine("Nie udało się utworzyć książki, niepoprawne dane");
  89.         } catch (ArrayIndexOutOfBoundsException e) {
  90.             printer.printLine("Osiągnięto limit pojemności, nie można dodać kolejnej książki");
  91.         }
  92.     }
  93.  
  94.     private void printBooks() {
  95.         Publication[] publications = library.getPublications();
  96.         printer.printBooks(publications);
  97.     }
  98.  
  99.     private void addMagazine() {
  100.         try {
  101.             Magazine magazine = dataReader.readAndCreateMagazine();
  102.             library.addMagazine(magazine);
  103.         } catch (InputMismatchException e) {
  104.             printer.printLine("Nie udało się utworzyć magazynu, niepoprawne dane");
  105.         } catch (ArrayIndexOutOfBoundsException e) {
  106.             printer.printLine("Osiągnięto limit pojemności, nie można dodać kolejnego magazynu");
  107.         }
  108.     }
  109.  
  110.     private void printMagazines() {
  111.         Publication[] publications = library.getPublications();
  112.         printer.printMagazines(publications);
  113.     }
  114.  
  115.     private void exit() {
  116.         printer.printLine("Koniec programu!");
  117.         // zamykamy strumień wejścia
  118.         dataReader.close();
  119.     }
  120. }
  121.  
  122. -----------------------------------------------------------
  123.  
  124. package pl.javastart.library.app;
  125.  
  126. import pl.javastart.library.exception.NoSuchOptionException;
  127.  
  128. enum Option {
  129.     EXIT(0, "Wyjście z programu"),
  130.     ADD_BOOK(1, "Dodanie książki"),
  131.     ADD_MAGAZINE(2,"Dodanie magazynu/gazety"),
  132.     PRINT_BOOKS(3, "Wyświetlenie dostępnych książek"),
  133.     PRINT_MAGAZINES(4, "Wyświetlenie dostępnych magazynów/gazet");
  134.  
  135.     private int value;
  136.     private String description;
  137.  
  138.     public int getValue() {
  139.         return value;
  140.     }
  141.  
  142.     public String getDescription() {
  143.         return description;
  144.     }
  145.  
  146.     Option(int value, String desc) {
  147.         this.value = value;
  148.         this.description = desc;
  149.     }
  150.  
  151.     @Override
  152.     public String toString() {
  153.         return value + " - " + description;
  154.     }
  155.  
  156.     static Option createFromInt(int option) throws NoSuchOptionException {
  157.         try {
  158.             return Option.values()[option];
  159.         } catch(ArrayIndexOutOfBoundsException e) {
  160.             throw new NoSuchOptionException("Brak opcji o id " + option);
  161.         }
  162.     }
  163. }
  164.  
  165. -------------------------------------------------------------
  166. package pl.javastart.library.exception;
  167.  
  168. public class NoSuchOptionException extends Exception {
  169.     public NoSuchOptionException(String message) {
  170.         super(message);
  171.     }
  172. }
  173.  
  174. --------------------------------------------------------------
  175.  
  176. package pl.javastart.library.io;
  177.  
  178. import pl.javastart.library.model.Book;
  179. import pl.javastart.library.model.Magazine;
  180. import pl.javastart.library.model.Publication;
  181.  
  182. public class ConsolePrinter {
  183.     public void printBooks(Publication[] publications) {
  184.         int counter = 0;
  185.         for (Publication publication : publications) {
  186.             if(publication instanceof Book) {
  187.                 printLine(publication.toString());
  188.                 counter++;
  189.             }
  190.         }
  191.         if (counter == 0)
  192.             printLine("Brak książek w bibliotece");
  193.     }
  194.  
  195.     public void printMagazines(Publication[] publications) {
  196.         int counter = 0;
  197.         for (Publication publication : publications) {
  198.             if(publication instanceof Magazine) {
  199.                 printLine(publication.toString());
  200.                 counter++;
  201.             }
  202.         }
  203.         if (counter == 0)
  204.             printLine("Brak magazynów w bibliotece");
  205.     }
  206.  
  207.     public void printLine(String text) {
  208.         System.out.println(text);
  209.     }
  210. }
  211.  
  212.  
  213. ------------------------------------------------
  214.  
  215. package pl.javastart.library.io;
  216.  
  217. import pl.javastart.library.model.Book;
  218. import pl.javastart.library.model.Magazine;
  219.  
  220. import java.util.Scanner;
  221.  
  222. public class DataReader {
  223.     private Scanner sc = new Scanner(System.in);
  224.     private ConsolePrinter printer;
  225.  
  226.     public DataReader(ConsolePrinter printer) {
  227.         this.printer = printer;
  228.     }
  229.  
  230.     public void close() {
  231.         sc.close();
  232.     }
  233.  
  234.     public int getInt() {
  235.         try {
  236.             return sc.nextInt();
  237.         } finally {
  238.             sc.nextLine();
  239.         }
  240.     }
  241.  
  242.     public Book readAndCreateBook() {
  243.         printer.printLine("Tytuł: ");
  244.         String title = sc.nextLine();
  245.         printer.printLine("Autor: ");
  246.         String author = sc.nextLine();
  247.         printer.printLine("Wydawnictwo: ");
  248.         String publisher = sc.nextLine();
  249.         printer.printLine("ISBN: ");
  250.         String isbn = sc.nextLine();
  251.         printer.printLine("Rok wydania: ");
  252.         int releaseDate = getInt();
  253.         printer.printLine("Ilość stron: ");
  254.         int pages = getInt();
  255.  
  256.         return new Book(title, author, releaseDate, pages, publisher, isbn);
  257.     }
  258.  
  259.     public Magazine readAndCreateMagazine() {
  260.         printer.printLine("Tytuł: ");
  261.         String title = sc.nextLine();
  262.         printer.printLine("Wydawnictwo: ");
  263.         String publisher = sc.nextLine();
  264.         printer.printLine("Język: ");
  265.         String language = sc.nextLine();
  266.         printer.printLine("Rok wydania: ");
  267.         int year = getInt();
  268.         printer.printLine("Miesiąc: ");
  269.         int month = getInt();
  270.         printer.printLine("Dzień: ");
  271.         int day = getInt();
  272.  
  273.         return new Magazine(title, publisher, language, year, month, day);
  274.     }
  275. }
  276.  
  277. ----------------------------------------------------------
  278.  
  279. package pl.javastart.library.model;
  280.  
  281. import java.util.Objects;
  282.  
  283. public class Book extends Publication {
  284.     // Pola
  285.     private String author;
  286.     private int pages;
  287.     private String isbn;
  288.  
  289.     // Konstruktory
  290.     public Book(String title, String author, int year, int pages, String publisher,
  291.                 String isbn) {
  292.         super(title, publisher, year);
  293.         this.pages = pages;
  294.         this.author = author;
  295.         this.isbn = isbn;
  296.     }
  297.  
  298.     // settery i gettery
  299.     public String getIsbn() {
  300.         return isbn;
  301.     }
  302.  
  303.     public void setIsbn(String isbn) {
  304.         this.isbn = isbn;
  305.     }
  306.  
  307.     public int getPages() {
  308.         return pages;
  309.     }
  310.  
  311.     public void setPages(int pages) {
  312.         this.pages = pages;
  313.     }
  314.  
  315.     public String getAuthor() {
  316.         return author;
  317.     }
  318.  
  319.     public void setAuthor(String author) {
  320.         this.author = author;
  321.     }
  322.  
  323.     @Override
  324.     public String toString() {
  325.         return super.toString() + author + ", " + pages + ", " + isbn;
  326.     }
  327.  
  328.     @Override
  329.     public boolean equals(Object o) {
  330.         if (this == o) return true;
  331.         if (o == null || getClass() != o.getClass()) return false;
  332.         if (!super.equals(o)) return false;
  333.         Book book = (Book) o;
  334.         return pages == book.pages &&
  335.                 Objects.equals(author, book.author) &&
  336.                 Objects.equals(isbn, book.isbn);
  337.     }
  338.  
  339.     @Override
  340.     public int hashCode() {
  341.         return Objects.hash(super.hashCode(), author, pages, isbn);
  342.     }
  343. }
  344.  
  345. ----------------------------------------------------------------
  346.  
  347. package pl.javastart.library.model;
  348.  
  349. public class Library {
  350.  
  351.     private static final int MAX_PUBLICATONS = 2000;
  352.     private int publicationsNumber;
  353.     private Publication[] publications = new Publication[MAX_PUBLICATONS];
  354.  
  355.     public Publication[] getPublications() {
  356.         Publication[] result = new Publication[publicationsNumber];
  357.         for (int i = 0; i < publicationsNumber; i++) {
  358.             result[i] = publications[i];
  359.         }
  360.         return result;
  361.     }
  362.  
  363.     public void addBook(Book book) {
  364.         addPublication(book);
  365.     }
  366.  
  367.     public void addMagazine(Magazine magazine) {
  368.         addPublication(magazine);
  369.     }
  370.  
  371.     private void addPublication(Publication publication) {
  372.         if (publicationsNumber >= MAX_PUBLICATONS) {
  373.             throw new ArrayIndexOutOfBoundsException("Max publications exceeded " + MAX_PUBLICATONS);
  374.         }
  375.         publications[publicationsNumber] = publication;
  376.         publicationsNumber++;
  377.     }
  378. }
  379.  
  380. --------------------------------------------------------------------
  381.  
  382. package pl.javastart.library.model;
  383.  
  384. public class Magazine extends Publication {
  385.     private int month;
  386.     private int day;
  387.     private String language;
  388.  
  389.     public Magazine(String title, String publisher, String language, int year, int month, int day) {
  390.         super(title, publisher, year);
  391.         this.language = language;
  392.         this.month = month;
  393.         this.day = day;
  394.     }
  395.  
  396.     public int getMonth() {
  397.         return month;
  398.     }
  399.     public void setMonth(int month) {
  400.         this.month = month;
  401.     }
  402.     public int getDay() {
  403.         return day;
  404.     }
  405.     public void setDay(int day) {
  406.         this.day = day;
  407.     }
  408.     public String getLanguage() {
  409.         return language;
  410.     }
  411.     public void setLanguage(String language) {
  412.         this.language = language;
  413.     }
  414.  
  415.     @Override
  416.     public String toString() {
  417.         return super.toString() + ", " + month + ", " + day + ", " + language;
  418.     }
  419. }
  420. ---------------------------------------------------------------------------
  421.  
  422. package pl.javastart.library.model;
  423.  
  424. import java.util.Objects;
  425.  
  426. public abstract class Publication {
  427.     private String title;
  428.     private String publisher;
  429.     private int year;
  430.  
  431.     Publication(String title, String publisher, int year) {
  432.         this.title = title;
  433.         this.publisher = publisher;
  434.         this.year = year;
  435.     }
  436.  
  437.     int getYear() {
  438.         return year;
  439.     }
  440.  
  441.     void setYear(int year) {
  442.         this.year = year;
  443.     }
  444.  
  445.     String getTitle() {
  446.         return title;
  447.     }
  448.  
  449.     void setTitle(String title) {
  450.         this.title = title;
  451.     }
  452.  
  453.     String getPublisher() {
  454.         return publisher;
  455.     }
  456.  
  457.     void setPublisher(String publisher) {
  458.         this.publisher = publisher;
  459.     }
  460.  
  461.     @Override
  462.     public String toString() {
  463.         return title + ", " + publisher + ", " + year;
  464.     }
  465.  
  466.     @Override
  467.     public boolean equals(Object o) {
  468.         if (this == o) return true;
  469.         if (o == null || getClass() != o.getClass()) return false;
  470.         Publication that = (Publication) o;
  471.         return year == that.year &&
  472.                 Objects.equals(title, that.title) &&
  473.                 Objects.equals(publisher, that.publisher);
  474.     }
  475.  
  476.     @Override
  477.     public int hashCode() {
  478.         return Objects.hash(title, publisher, year);
  479.     }
  480. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement