首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Library和book类制作edit book方法

如何为Library和book类制作edit book方法
EN

Stack Overflow用户
提问于 2018-12-23 08:35:43
回答 2查看 257关注 0票数 1

我必须创建一个图书馆系统,它有一个Book类和一个library类。这两种方法都有一个edit book方法。其概念是图书管理员搜索图书..然后它被克隆..然后,在确认之前对克隆的图书进行编辑。然后放回图书馆代替以前的那本书。库类编辑图书方法看起来像这样:public boolean editBook(String username, Book book),而图书类方法看起来像这个public boolean editBook(Book book)

现在我的问题是,editBook()方法应该能够编辑书籍的每一个属性。一个只接受一个属性(Book)并返回一个布尔值来编辑标题、作者、权限类型或其中任何内容的方法对我来说是没有意义的,我一直被困在这个问题上。

最初,我认为也许可以在editBook方法中接受用户输入,以便允许用户选择他们实际正在编辑的内容,但我发现我们不能这样做。

这就是到目前为止我所拥有的,但是我被告知我不能使用它,因为它调用来自book类的用户输入,而它(在本例中)只能调用来自main方法的用户输入。有人能给我指个方向吗?感谢任何能帮上忙的人

代码语言:javascript
复制
 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;
}
EN

回答 2

Stack Overflow用户

发布于 2018-12-23 09:24:12

现在,我的问题是editBook()方法应该能够编辑书籍的每一个属性。一个只接受一个属性(Book)并返回一个布尔值来编辑标题、作者、权限类型或其中任何内容的方法对我来说是没有意义的,我一直被困在这个问题上。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-12-23 11:39:40

长长的评论,而不是回答本身。

OOP通常应该在可能的情况下对现实世界的对象进行建模,这就是重点。你为什么要克隆书?你有没有考虑过为一个真实世界的库建模?这会更清楚,至少对我来说是这样。

每个库实例都有-一个库管理员。或者,甚至是Librarian对象的集合。

每个Library都有一个Book对象的集合。

你能不能不说,每个图书馆管理员都有一个图书对象的集合?

因此,图书管理员可以将Book添加到他们的Book实例集合中。当发生这种情况时,图书将从图书馆集合中删除。

当然,现在图书管理员在他们的藏书中有一本书,他们可以更换这本书。

代码语言:javascript
复制
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。您可能希望将图书管理员限制为一次只能拥有一本书,或者可能拥有两本。

请把我五岁的样子解释给我听,因为我不明白。作业是允许的,如果是HW的话。也许克隆是一种硬件需求?

上面的方法确实存在一些问题,但希望它能澄清如何处理模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53900338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档