如何为图书馆和图书课制作编辑书的方法

时间:2018-12-23 00:35:43

标签: java oop methods modeling

我必须制作一个图书馆系统,它具有Book类和Library类。两者都有一个编辑方法。概念是,馆员搜索书籍。然后将其克隆。在确认之前,对克隆的书籍进行编辑。然后将其放回库中以替换上一本书。 Library类编辑book方法看起来像这样:public boolean editBook(String username, Book book),而Book类方法看起来像这样public boolean editBook(Book book)

现在,我的问题是,editBook()方法应该能够编辑该书的每个属性。一种只接受一个属性(Book)并返回一个布尔值的方法,该方法应该用于编辑标题,作者,权限类型或其中的任何一个,这对我来说是没有意义的,我一直坚持下去。 / p>

最初,我认为也许可以在editBook方法中进行用户输入,以便允许用户选择他们实际正在编辑的内容,但是我发现我们无法做到这一点。

到目前为止,这是我所拥有的,但是有人告诉我我不能使用它,因为它从book类调用用户输入,而它(在这种情况下)只能从main方法调用用户输入。有人可以指出正确的方向吗?感谢任何能提供帮助的人

 Library class method  
 public boolean editBook(String username, Book book) throws CloneNotSupportedException{

    Book clonedBook = book.clone();
    boolean editBook = clonedBook.editBook(clonedBook);
        while(editBook){
            for(Book b: books){
                if(b.getISBNNumber().equalsIgnoreCase(book.getISBNNumber())){
                    int index = books.indexOf(b);
                    books.set(index, clonedBook);
                }
            }
            editBook = false;
        }   
    return true;
}


Book class method

 public boolean editBook(Book book){
    boolean confirm = false;
    Scanner scan = new Scanner(System.in);

    String y = "";



    do{
    do{
       int x =userInputEnterEditChoice();
       editBookSwitch(x);
       y = userInputMoreAttibutes();

    }while(y.equalsIgnoreCase("y"));

    String z = userInputConfirmEdit();


    if(confirmEdit(z, book)){
                confirm = true;
    }
    else{
        System.out.println("would you like to re edit the book?");
        y = scan.nextLine();
    }
    }while(y.equalsIgnoreCase("y"));



    return confirm;
}

2 个答案:

答案 0 :(得分:1)

  

现在,我的问题是editBook()方法应该能够编辑该书的每个属性。一种只接受一个属性(Book)并返回一个布尔值的方法,该方法应该用于编辑标题,作者,权限类型或其中的任何一个,这对我来说是没有意义的,我一直坚持下去。 / p>

public class Book {
int id;
String title;
String Author;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}
public String getAuthor() {
    return Author;
}
public void setAuthor(String author) {
    Author = author;
}
}

public class Library {
public boolean editBook(Book book) {
    boolean isEdited = false;
    //This is how you edit the attributes of the book
    book.id=1;
    book.title= "Java Programming";
    book.Author= "John Smith";
    isEdited = true;
    return isEdited;
}

}

答案 1 :(得分:0)

长评论,本身不是答案。

通常,OOP应该尽可能对真实世界的对象进行建模,这很重要。你为什么要克隆书籍?您是否考虑过为真实世界的图书馆建模?至少对我来说,这会更清楚。

每个图书馆实例都有一个图书管理员。甚至是馆员物品的集合。

每个图书馆都有一个Book对象的集合。

难道每个图书馆员都有一个Book对象的集合吗?

因此,图书馆员可以将Book添加到其Book实例的集合中。发生这种情况时,该书将从图书馆藏书中删除。

当然,现在图书馆员拥有一本书,在他们的收藏中,他们可以更改这本书。

import java.util.ArrayList;
import java.util.List;

public class Librarian {

    private List<Book> books = new ArrayList<>();

    public Librarian() {
    }

    public void borrowBook(Book book) {
        books.add(book);
    }

    public List<Book> borrowedBooks() {
        return books;
    }

    public Book returnBook(Book book) {
        int bookNumber = book.getNumber();
        //your code...
        return books.get(3); //wait, which book?
    }
}

作为开始,值得深思。基本上,在创建每本书时为其指定一个唯一的ID。您可能希望限制图书管理员每次只能拥有一本书,或者只有两本书。

请给我解释一下,就像我五岁一样,因为我听不懂。如果是硬件,则允许在SO上做作业。也许克隆是硬件要求吗?

上述方法确实存在一些问题,但是希望它可以阐明如何处理模型。