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