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

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++;
}
}
}