请设计并实现一个图书馆的书籍管理程序,要求提供方便的图形界面实现图书信息的录入/修改/删除功能。图书的信息至少包括:图书的编号、书名、类型、作者、价格、出版目期、出版社、购入日期、借阅人等。要求可以浏览所有的图书,并能按类型、作者、出版社、或借阅人进行搜索,能按价格或出版日期进行排序。
package src;
import java.io.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
class Book{
public String id=null;
public String name=null;
public String type=null;
public String author=null;
public String price=null;
public String pressDate=null;
public String press=null;//出版社
public String buyDate=null;
public String reader=null;
}
/**
* @author Lenovo
*
*/
public class Library extends JFrame{
private ArrayList<Book> list=new ArrayList<Book>();
private ArrayList<Book> searchList=new ArrayList<Book>();
private JPanel p1=new JPanel();
private JButton addB=new JButton("录入");
private JButton modifyB=new JButton("修改");
private JButton delB=new JButton("删除");
private JButton lookB=new JButton("查看");
private JButton searchTypeB=new JButton("搜索-按类型");
private JButton searchAuthorB=new JButton("搜索-按作者");
private JButton searchPressB=new JButton("搜索-按出版社");
private JButton searchReaderB=new JButton("搜索-按借书人");
private JButton sortDateB=new JButton("排序-按出版日期");
private JButton sortPriceB=new JButton("排序-按价格");
private JPanel p2=new JPanel();
private JLabel idL=new JLabel("编号");
private JTextField idT=new JTextField("",3);
private JLabel nameL=new JLabel("书名");
private JTextField nameT=new JTextField("",3);
private JLabel typeL=new JLabel("类型");
private JTextField typeT=new JTextField("",3);
private JLabel authorL=new JLabel("作者");
private JTextField authorT=new JTextField("",3);
private JLabel priceL=new JLabel("价格");
private JTextField priceT=new JTextField("",3);
private JLabel pressDateL=new JLabel("出版日期");
private JTextField pressDateT=new JTextField("",3);
private JLabel pressL=new JLabel("出版社");
private JTextField pressT=new JTextField("",3);
private JLabel buyDateL=new JLabel("购买日期");
private JTextField buyDateT=new JTextField("",3);
private JLabel readerL=new JLabel("借阅人");
private JTextField readerT=new JTextField("",3);
private JTextArea info=new JTextArea();
/**
* 构造方法 实现界面 并对每个按钮添加事件监听器
*/
public Library(){
Container c=getContentPane();
p1.add(addB);
p1.add(modifyB);
p1.add(delB);
p1.add(lookB);
p1.add(searchTypeB);
p1.add(searchAuthorB);
p1.add(searchPressB);
p1.add(searchReaderB);
p1.add(sortPriceB);
p1.add(sortDateB);
p2.add(idL);
p2.add(idT);
p2.add(nameL);
p2.add(nameT);
p2.add(typeL);
p2.add(typeT);
p2.add(authorL);
p2.add(authorT);
p2.add(priceL);
p2.add(priceT);
p2.add(pressDateL);
p2.add(pressDateT);
p2.add(pressL);
p2.add(pressT);
p2.add(buyDateL);
p2.add(buyDateT);
p2.add(readerL);
p2.add(readerT);
c.add(p1, BorderLayout.NORTH);
c.add(p2, BorderLayout.SOUTH);
c.add(new JScrollPane(info), BorderLayout.CENTER);
addB.addActionListener(new addHandler());
modifyB.addActionListener(new modifyHandler());
delB.addActionListener(new modifyHandler());
lookB.addActionListener(new lookHandler());
searchTypeB.addActionListener(new searchTypeHandler());
searchAuthorB.addActionListener(new searchAuthorHandler());
searchPressB.addActionListener(new searchPressHandler());
searchReaderB.addActionListener(new searchReaderHandler());
sortPriceB.addActionListener(new sortPriceHandler());
sortDateB.addActionListener(new sortDateHandler());
}
/**
* @param l
* list 更新显示
*/
private void refresh(ArrayList<Book> l){
StringBuffer stringBuffer=new StringBuffer("");
stringBuffer.append("编号" + "\t" + "书名" + "\t" + "类型" + "\t" + "作者" + "\t" + "价格" + "\t" + "出版日期" + "\t" + "出版社" + "\t"
+ "购买日期" + "\t" + "借阅人" + "\n");
for(int i=0;i<l.size();i++){
stringBuffer.append(list.get(i).id + "\t" + list.get(i).name + "\t" + list.get(i).type + "\t" + list.get(i).author
+ "\t" + list.get(i).price + "\t" + list.get(i).pressDate + "\t" + list.get(i).press + "\t"
+ list.get(i).buyDate + "\t" + list.get(i).reader + "\n");
}
info.setText(stringBuffer.toString());
}
/**
* @author Lenovo
* 实现按钮的功能
*/
class addHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Book book=new Book();
book.id=idT.getText();
book.name=nameT.getText();
book.type = typeT.getText();
book.author = authorT.getText();
book.price = priceT.getText();
book.pressDate = pressDateT.getText();
book.press = pressT.getText();
book.buyDate = buyDateT.getText();
book.reader = readerT.getText();
list.add(book);
refresh(list);
}
}
/**
* @author Lenovo
* 实现修改按钮的功能操作
*/
class modifyHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int index=-1;
for(int i=0;i<list.size();i++){
if(list.get(i).id.equals(idT.getText())){
index=i;
break;
}
}
if(index==-1)
JOptionPane.showMessageDialog(null, "此id不存在");
else{
list.get(index).id=idT.getText();
list.get(index).name=nameT.getText();
list.get(index).type=typeT.getText();
list.get(index).author=authorT.getText();
list.get(index).price=priceT.getText();
list.get(index).pressDate=pressDateT.getText();
list.get(index).press=pressT.getText();
list.get(index).buyDate=buyDateT.getText();
list.get(index).reader=readerT.getText();
refresh(list);
}
}
}
/**
* @author Lenovo
* 实现删除按钮的功能操作
*/
class delHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int index=-1;
for(int i=0;i<list.size();i++){
if(list.get(i).id.equals(idT.getText())){
index=i;
break;
}
}
if(index==-1)
JOptionPane.showMessageDialog(null, "此id不存在");
else{
list.remove(index);
refresh(list);
}
}
}
/**
* @author Lenovo
* 实现查看按钮操作
*/
class lookHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
refresh(list);
}
}
/**
* @author Lenovo
* 实现按类型搜索的按钮功能
*
*/
class searchTypeHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
searchList.clear();
for(int i=0;i<list.size();i++){
if(list.get(i).type.equals(typeT.getText())){
searchList.add(list.get(i));
}
}
refresh(searchList);
}
}
/**
* @author Lenovo
* 实现按作者搜索的功能
*/
class searchAuthorHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
searchList.clear();
for(int i=0;i<list.size();i++){
if(list.get(i).author.equals(authorT.getText())){
searchList.add(list.get(i));
}
}
refresh(searchList);
}
}
/**
* @author Lenovo
* 实现按出版社搜索的功能
*/
class searchPressHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
searchList.clear();
for(int i=0;i<list.size();i++){
if(list.get(i).press.equals(pressT.getText()))
searchList.add(list.get(i));
}
refresh(searchList);
}
}
/**
* @author Lenovo
* 实现按借阅人搜索的功能
*/
class searchReaderHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
searchList.clear();
for(int i=0;i<list.size();i++){
if(list.get(i).reader.equals(readerT.getText()))
searchList.add(list.get(i));
}
refresh(searchList);
}
}
/**
* @author Lenovo
* 按价格比较的比较器
*/
class priceComp implements Comparator<Book>{
@Override
public int compare(Book o1, Book o2) {
// TODO Auto-generated method stub
return o1.price.compareTo(o2.price);
}
}
/**
* @author Lenovo
* 实现按价格排序的功能
*/
class sortPriceHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Comparator<Book> comparator=new priceComp();
Collections.sort(list,comparator);
refresh(list);
}
}
/**
* @author Lenovo
* 实现按购买日期比较的比较器
*/
class dateComp implements Comparator<Book>{
@Override
public int compare(Book o1, Book o2) {
// TODO Auto-generated method stub
return o1.buyDate.compareTo(o2.buyDate);
}
}
class sortDateHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Comparator<Book> comparator=new dateComp();
Collections.sort(list,comparator);
refresh(list);
}
}
public static void main(String[] args){
Library library=new Library();
library.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
library.setSize(800,500);
library.setVisible(true);
}
}
效果图: