【问题标题】:How to make edit book method for Library and book class如何为图书馆和书籍类制作编辑书籍方法
【发布时间】:2019-05-22 20:15:32
【问题描述】:

我必须制作一个图书馆系统,它有一个 Book 类和一个 Library 类。两者都有一个编辑书的方法。这个概念是图书馆员搜索这本书..然后它被克隆..克隆的书然后在确认之前被编辑..然后放回图书馆代替以前的书。 Library 类编辑 book 方法如下所示:public boolean editBook(String username, Book book),Book 类方法如下所示 public boolean editBook(Book book)

现在我的问题是editBook() 方法应该能够编辑书籍的每一个属性。仅采用一个属性(书籍)并返回一个布尔值的方法如何编辑标题、作者、权限类型或其中任何一个对我来说没有意义,我一直坚持这一点。

最初我认为也许可以在 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;
}

【问题讨论】:

    标签: java oop methods modeling


    【解决方案1】:

    现在我的问题是 editBook() 方法应该能够编辑书籍的每个属性。仅采用一个属性(书籍)并返回一个布尔值的方法如何编辑标题、作者、权限类型或其中任何一个对我来说没有意义,我一直坚持这一点。

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

    }

    【讨论】:

    • 但是我怎样才能让用户输入新的标题或作者将是什么?
    • @Tom,使用扫描仪进行用户输入。扫描仪阅读器 = 新扫描仪(System.in); System.out.println("请输入标题:");等等……
    • 所以我不能直接从课堂上获取用户输入......我只能从主要方法中获取它(因为根据我的老师的说法,将扫描仪放在课堂方法中是不好的做法)所以我如何(在 main 方法中调用 edit book 方法时)获取该用户输入......如果它只有一个参数,则将其提供给 edit book 方法?
    • 您可能希望在图书馆、读者和图书管理员之间“传递”对 Book 实例的引用。克隆是另一回事,可能不是您想要的。
    • 我相信在某些时候您需要将新标题和作者姓名传递给 editBook 方法。你被禁止这样做吗?
    【解决方案2】:

    长评论,本身不回答。

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

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

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

    你能不能说每个图书管理员也有一个 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 上做作业。也许克隆是硬件要求?

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

    【讨论】:

    • 我强烈不同意您所暗示的“OOP 通常应该为现实世界对象建模”。对象模型应该反映需求,而需求又反映了领域专家的模型。这可能与外行人认为的“真实”有很大不同。因此,我们将什么视为图书馆(即“现实世界”)并不重要,重要的是图书馆在这个特定领域中是什么。
    • 我承认图书馆员“拥有”各种内部图书馆,这违背了现实世界的建模。当然,你引起了我的注意。说下去。 “这种范式密切反映了‘现实世界’的系统结构,因此非常适合对具有复杂行为的复杂系统进行建模”——Wirth
    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多