Java库系统,签入和签出

Java库系统,签入和签出,java,methods,arraylist,append,checkout,Java,Methods,Arraylist,Append,Checkout,我们正在制作一个图书馆系统,它可以从文件中读取图书,以检入、检出、列出所有图书,并显示可用性。我在主文件签入和签出时遇到问题。签入是通过isbn完成的。它在系统中查找图书,并在MM/DD/YYYY末尾附加结账日期。没有办法添加书籍。签入和签出已经从mainGUI中调用,因此我不必执行该部分,但是如何使签出方法将签出日期添加到列表中的书籍,并使其删除签入方法的签出日期?这里是空的 package swe; import java.io.File; import java.io.FileNotFo

我们正在制作一个图书馆系统,它可以从文件中读取图书,以检入、检出、列出所有图书,并显示可用性。我在主文件签入和签出时遇到问题。签入是通过isbn完成的。它在系统中查找图书,并在MM/DD/YYYY末尾附加结账日期。没有办法添加书籍。签入和签出已经从mainGUI中调用,因此我不必执行该部分,但是如何使签出方法将签出日期添加到列表中的书籍,并使其删除签入方法的签出日期?这里是空的

package swe;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import swe.BookGUI.LoginGUI;


public class Main {

ArrayList<Book> bookList = new ArrayList<>(); // Initialize the list of books
BookFileHandler reader;

/*
/ Initial actions to be taken by the program upon start.
*/ 
public void init() throws FileNotFoundException 
{
    populateBookList();
}
/*
/ Used to populate the bookList with books from the book file. 
*/
private void populateBookList() throws FileNotFoundException 
{
    reader = new BookFileHandler(new File("Books.txt"));
    Book tmp;
    tmp = reader.getNextBook();
    while(tmp != null)
    {
        bookList.add(tmp);
        tmp = reader.getNextBook();
    }
}

public static void main(String[] args) {
    LoginGUI login = new LoginGUI();
}

public ArrayList<Book> getBookList()
{
    return bookList;
}

public void checkIn(String ISBN)
{ String title, author, checkoutDate; 
  int isbn;

}

public void checkIn(Book b)
{

}

public void checkOut(String ISBN)
{

}

public void checkOut(Book b)
{

}

public Book findByAuthor(String author)
{
    for(Book x : bookList)
        if(x.getAuthor().equalsIgnoreCase(author))
            return x;
    return null;
}

public Book findByTitle(String title)
{
    for(Book x : bookList)
        if(x.getName().equalsIgnoreCase(title))
            return x;
    return null;
}

public Book findByISBN(String ISBN)
{
    for(Book x : bookList)
        if(x.getIsbn().equalsIgnoreCase(ISBN))
            return x;
    return null;
}

public void showBookInfo(Book b)
{
    if(b != null)
    {
        String info = "ISBN: " + b.getIsbn() + "\nTitle: " + b.getName() + "\nAuthor: " + b.getAuthor() + "\nCheckout date (null if not checked out): " + b.getCheckoutDate();
        JOptionPane.showMessageDialog(null, info,"Book info", JOptionPane.INFORMATION_MESSAGE);
    }
}

public void listBooks()
{
    String list = "";
    for(Book b : bookList)
    {
        list += "ISBN: " + b.getIsbn() + "\nTitle: " + b.getName() + "\nAuthor: " + b.getAuthor() + "\nCheckout date (null if not checked out): " + b.getCheckoutDate();
    }
    JOptionPane.showMessageDialog(null, list ,"Book list", JOptionPane.INFORMATION_MESSAGE);
}

public void sortByAuthor()
{
    ArrayList<Book> tmp = new ArrayList<Book>();
    for(Book b : bookList)
    {
        if(!tmp.isEmpty())
        {
            for(int x =0; x < tmp.size(); x++)
            {
                if(b.getAuthor().compareTo(tmp.get(x).getAuthor()) > 0)
                {
                    if(tmp.get(x+1) == null)
                    {
                        tmp.add(b);
                    }
                    else
                    {
                        if(b.getAuthor().compareTo(tmp.get(x+1).getAuthor()) < 0)
                        {
                            tmp.add(x, b);
                        }
                    }
                }
            }
        }
    }
}}    
您的图书由ISBN映射,因此要删除结账日期,您可以在每个图书上循环,并在ISBN匹配时删除日期:

public void checkIn(String ISBN)
    for(Book b : booklist)
    {
       if(b.getIsbn().equals(ISBN))
       {
           b.setCheckoutDate("");
           break;
       }
    }
}
或者使用Java8,您可以将for-each循环替换为

booklist.stream()
    .filter(book -> book.getIsbn().equals(ISBN))
    .forEach(book -> book.setCheckoutDate(""));
如果你愿意的话

编辑


根据您的评论,如果您想添加图书取出时的结账日期,那么同样的算法也适用。循环检查每本书,然后当ISBN匹配时,您将签出日期设置为当前日期。

对于签出,它应该通过从系统调用当前日期,将签出日期添加到正在获取的书上。文件中的图书条目是逐行写入的,如358401214,苏斯博士,巴塞洛缪·库宾斯的500顶帽子,2014年1月5日。对于签入,它应该从图书中删除签出日期。谢谢。当书籍被取出时,我应该如何将结账日期添加到书籍中?