You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
12 KiB
288 lines
12 KiB
package ru.molokoin; |
|
|
|
public class Book { |
|
private String name; |
|
private Publisher publisher; |
|
private int year; |
|
private String[] authors; |
|
|
|
Book(){} |
|
Book(String name, int year, Publisher publisher){} |
|
Book(String name, String author, int year, Publisher publisher){ |
|
this(name, year, publisher); |
|
uppendAuthors(author); |
|
} |
|
Book(String name, String[] authors, int year, Publisher publisher){ |
|
this(name, year, publisher); |
|
String[] a = authors; |
|
setAuthors(a); |
|
} |
|
/** |
|
* Создаем массив книг, заполняем книги данными по умолчанию |
|
* и возвращаем массив книг |
|
* @return |
|
*/ |
|
public static Book[] getDefaultArray(){ |
|
Book[] books = new Book[5]; |
|
|
|
//book 1 |
|
String name = "Computer Science: основы программирования на Java, ООП, алгоритмы и структуры данных"; |
|
books[0] = new Book(); |
|
books[0].setName(name); |
|
books[0].uppendAuthors("Седжвик Роберт"); |
|
books[0].uppendAuthors("Уэйн Кевин"); |
|
books[0].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "Питер")); |
|
books[0].setYear(2018); |
|
|
|
//book 2 |
|
name = "Разработка требований к программному обеспечению. 3-е издание, дополненное"; |
|
books[1] = new Book(); |
|
books[1].setName(name); |
|
books[1].uppendAuthors("Вигерс Карл"); |
|
books[1].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "БХВ")); |
|
books[1].setYear(2019); |
|
|
|
//book 3 |
|
name = "Java. Полное руководство, 10-е издание"; |
|
books[2] = new Book(); |
|
books[2].setName(name); |
|
books[2].uppendAuthors("Шилдт Гербертт"); |
|
books[2].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "Диалектика")); |
|
books[2].setYear(2018); |
|
|
|
//book 4 |
|
name = "C/C++. Процедурное программирование"; |
|
books[3] = new Book(); |
|
books[3].setName(name); |
|
books[3].uppendAuthors("Полубенцева М.И."); |
|
books[3].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "БХВ")); |
|
books[3].setYear(2017); |
|
|
|
//book 5 |
|
name = "Конституция РФ"; |
|
books[4] = new Book(); |
|
books[4].setName(name); |
|
books[4].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "Проспект")); |
|
books[4].setYear(2020); |
|
|
|
return books; |
|
} |
|
/** |
|
* Печатть данных о книге в консоль |
|
*/ |
|
public void print(){ |
|
System.out.println("-------------------------------"); |
|
System.out.println("Наименование книги (name) :: " + name); |
|
getPublisher().print(); |
|
System.out.println("Год издания (year) :: " + year); |
|
System.out.println("Авторы: " + getAuthorsCount(authors) + " человек ..."); |
|
int i = 0; |
|
while (i < getAuthorsCount(authors)){ |
|
System.out.println((i + 1) + ". " + getAuthors()[i]); |
|
i++; |
|
} |
|
System.out.println("-------------------------------"); |
|
} |
|
/** |
|
* Добавляем авторов книги |
|
* @param author |
|
*/ |
|
public void uppendAuthors(String author){ |
|
String[] result; |
|
/** |
|
* в случае, если массив authors еще не создан и писать нового автора некуда, |
|
* создаем пустой массив, пишем в него данные нового автора |
|
*/ |
|
if (getAuthors() == null){ |
|
try { |
|
throw new NullPointerException("в случае, если массив authors еще не создан и писать нового автора некуда, создаем пустой массив, пишем в него данные нового автора ..."); |
|
} catch (NullPointerException e) { |
|
//e.printStackTrace(); |
|
System.out.println(e.getMessage()); |
|
result = new String[1]; |
|
result[0] = author; |
|
setAuthors(result); |
|
} |
|
} |
|
/** |
|
* Если массив авторов книги уже существует, создаем новый массив с увеличенным на единицу |
|
* количеством полей и переписываем в него данные старого массива, |
|
* после чего добавляем в него новую запись. |
|
*/ |
|
else{ |
|
int count = getAuthorsCount(authors); |
|
result = new String[count +1]; |
|
//переписываем данные старого массива |
|
int i = 0; |
|
while (i < count){ |
|
result[i] = getAuthors()[i]; |
|
i++; |
|
} |
|
//добавляем нового автора |
|
result[count] = author; |
|
setAuthors(result); |
|
} |
|
} |
|
/** |
|
* Возвращает данные поля author, по индексу поля в массиве |
|
* индексы нумеруются с нуля и не могут быть отрицательными. |
|
* @param index |
|
* @return |
|
*/ |
|
public String getAuthorByIndex(int index){ |
|
//при получении отрицательного индекса, меняем его значение на ноль, сообщаем пользователю о проведеных изменениях |
|
if (index < 0){ |
|
try { |
|
throw new IllegalArgumentException("В метод public String getAuthorByIndex(int index) передано значение меньше нуля, массив не может содержать отрицательное количество полей. Значение индекса исправлено на значение по умолчанию: 0 ..."); |
|
|
|
} catch (Exception e) { |
|
e.printStackTrace(); |
|
index = 0; |
|
} |
|
} |
|
String author = getAuthors()[index]; |
|
return author; |
|
} |
|
/** |
|
* возвращает количество авторов книги |
|
* @param authors |
|
* @return |
|
*/ |
|
public static int getAuthorsCount(String[] authors){ |
|
//проверяем, имеется ли записи в перечне авторов |
|
int count = 0; |
|
try { |
|
if (authors == null) throw new NullPointerException ("Авторы книги не установлены ..."); |
|
} catch (Exception e) { |
|
//e.printStackTrace(); |
|
count = 0; |
|
} |
|
if (authors != null) count = authors.length; |
|
return count; |
|
} |
|
/** |
|
* Устанавливаем название книги |
|
* @param name the name to set |
|
*/ |
|
public void setName(String name) { |
|
// название книги не должно быть пустой ссылкой |
|
if (name == null){ |
|
try { |
|
throw new NullPointerException("В качестве названия книги передана пустая ссылка, полю установлено значение по умолчанию {noname book}"); |
|
} catch (NullPointerException e) { |
|
System.out.println("Ошибка: " + e); |
|
e.printStackTrace(); |
|
this.name = "noname book"; |
|
} |
|
}else { |
|
this.name = name; |
|
} |
|
} |
|
/** |
|
* Устанавливаем данные об издательстве. |
|
* издательство не должно быть пустой ссылкой |
|
* @param publisher the publisher to set |
|
*/ |
|
public void setPublisher(Publisher publisher) { |
|
if (publisher == null){ |
|
try { |
|
throw new NullPointerException("Передана пустая ссылка, при внесении данных об издательстве, что недопустимо. Установлено знаение издательства по умолчанию."); |
|
} catch (NullPointerException e) { |
|
e.printStackTrace(); |
|
System.out.println("Ошибка: " + e); |
|
this.publisher = new Publisher(); |
|
} |
|
}else{ |
|
this.publisher = publisher; |
|
} |
|
} |
|
/** |
|
* устанавливаем год издания книги |
|
* - год издания должен быть строго больше нуля |
|
* @param year the year to set |
|
*/ |
|
public void setYear(int year) { |
|
if (year < 0){ |
|
try{ |
|
throw new IllegalArgumentException("В качестве года издания книги указан значение еньше нуля. Значение заменен на значение по умолчанию {1800}"); |
|
} catch (IllegalArgumentException e){ |
|
e.printStackTrace(); |
|
System.out.println("Ошибка: " + e); |
|
year = 1800; |
|
} |
|
}else { |
|
this.year = year; |
|
} |
|
} |
|
/** |
|
* Устанавливаем перечень авторов книги |
|
* @param author the author to set |
|
*/ |
|
public void setAuthors(String[] authors) { |
|
try { |
|
if (authors == null) throw new NullPointerException("setAuthors() ... передан пустой список авторов"); |
|
} catch (NullPointerException e) { |
|
e.printStackTrace(); |
|
this.authors = new String[0]; |
|
} finally { |
|
this.authors = authors; |
|
} |
|
} |
|
/** |
|
* @return the name |
|
*/ |
|
public String getName() { |
|
return name; |
|
} |
|
/** |
|
* @return the publisher |
|
*/ |
|
public Publisher getPublisher() { |
|
return publisher; |
|
} |
|
/** |
|
* @return the year |
|
*/ |
|
public int getYear() { |
|
return year; |
|
} |
|
/** |
|
* @return the author |
|
*/ |
|
public String[] getAuthors() { |
|
return this.authors; |
|
} |
|
public static void main(String[] args) { |
|
Book[] books = Book.getDefaultArray(); |
|
//Вывод данных по умолчанию |
|
int i = 0; |
|
while (i < books.length){ |
|
books[i].print(); |
|
i++; |
|
} |
|
|
|
//исправляем данные о городе издательства БХВ |
|
String wrightSity = "Санкт-Петербург"; |
|
String wrongSity = "Санкт-Петебург"; |
|
i = 0; |
|
while (i < books.length){ |
|
if (books[i].getPublisher().getSity() == wrongSity){ |
|
books[i].getPublisher().setSity(wrightSity); |
|
} |
|
i++; |
|
} |
|
|
|
//пояснения пользователю |
|
System.out.println("#############################################"); |
|
System.out.println("Вывод изменился для всех книг, изданных издательством \"БХВ\"."); |
|
System.out.println("Устранена опечатка в наименовании города. \"Санкт-Петебург\" заменено на \"Санкт-Петербург\". " + "Была пропущена буква: \"Б\"."); |
|
System.out.println("#############################################"); |
|
|
|
//Вывод исправленных данных |
|
i = 0; |
|
while (i < books.length){ |
|
books[i].print(); |
|
i++; |
|
} |
|
} |
|
}
|
|
|