📄 librarysimulator.java
字号:
/*
* Created on 2005-5-8
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author home
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.awt.BorderLayout;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.RandomAccessFile;
import java.util.Calendar;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.Timer;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import treeNode.IntegerKey;
import treeNode.My23Tree;
import ui.addBookDialog;
import ui.addUserDialog;
public class LibrarySimulator extends JFrame {
private addBookDialog addBookDlg = null;
private addUserDialog addUserDlg = null;
private My23Tree bookTree = null;
private My23Tree userTree = null;
private JTextArea treeArea = null;
private List userList = null;
private List bookList = null;
private JTextArea workLogArea = null;
private JComboBox selectTreeCom = null;
private Timer timer = null;
private int holdTime;
//set up GUI
public LibrarySimulator()
{
super( "图书馆管理模拟程序" );
addBookDlg = new addBookDialog(this);
addUserDlg = new addUserDialog(this);
bookTree = new My23Tree();
userTree = new My23Tree();
workLogArea = new JTextArea( 30,20 );
holdTime = -1;
String sholdTime;
for( ; ; )
{
sholdTime = JOptionPane.showInputDialog(null,"请输入图书最长借阅时间,单位为毫秒。\n默认值为5000毫秒,输入值需大于5000毫秒");
try{
holdTime = Integer.parseInt(sholdTime);
if( holdTime >= 5000 )break;
}
catch(Exception ex){
}
}
//create JTabbedPane
final JTabbedPane tabbedPane = new JTabbedPane();
//set up panel1 : book exchange status
final List borrowedBookList = new List();
final List overdueBookList = new List();
JLabel borrowedBookLabel = new JLabel( "已借阅图书" );
JLabel overdueBookLabel = new JLabel( "已过期图书,过期时间:" + holdTime );
JLabel timeLabel = new JLabel("现在时间:");
Box verticall1 = Box.createVerticalBox();
verticall1.add( borrowedBookLabel );
verticall1.add( new JScrollPane( borrowedBookList ) );
verticall1.add( overdueBookLabel );
verticall1.add( new JScrollPane( overdueBookList ) );
tabbedPane.addTab( "借阅情况", null, verticall1, "图书的借阅情况" );
//set up panel 2 : user manage
userList = new List();
JPanel userButPanel = new JPanel();
JPanel userPanel = new JPanel();
JButton addUserBut = new JButton("添加用户");
JButton delUserBut = new JButton("删除用户");
JButton borrowBut = new JButton("用户借阅");
JButton returnBut = new JButton("用户归还");
userPanel.setLayout( new BorderLayout() );
userButPanel.add( addUserBut );
userButPanel.add( delUserBut );
userButPanel.add( borrowBut );
userButPanel.add( returnBut );
userPanel.add( userList ,BorderLayout.CENTER );
userPanel.add( userButPanel, BorderLayout.SOUTH );
tabbedPane.addTab( "用户管理", null, userPanel, "在此设置用户信息以及用户借阅情况" );
addUserBut.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e) {
int userID = 1 + (int)( Math.random() * 99999 );
addUserDlg.setSerialID(userID);
addUserDlg.show();
String userName = addUserDlg.getUsername();
String sl = "";
if(addUserDlg.isCancelled()){
workLogArea.append( "Add user " + userName + ":" + userID + " -- cancelled\n" );
return;
}
for( int i = 0; i <= userList.getItemCount() - 1 ; i++ ){
sl = userList.getItem(i);
if(userName.equals(sl.substring(0,sl.indexOf(':')))){
JOptionPane.showMessageDialog(null,"用户名重复!");
workLogArea.append( "Add user " + userName + ":" + userID + "用户名重复 -- cancelled\n" );
return;
}
if(userID == Integer.parseInt(sl.substring(sl.indexOf(':')+1,sl.indexOf('|')))){
JOptionPane.showMessageDialog(null,"Faint!居然万万分之一的id相重被你赶上了!");
workLogArea.append( "Add user " + userName + ":" + userID + "用户ID重复 -- cancelled\n" );
return;
}
}
/*
* 初始化用户
*/
UserInfo user = new UserInfo();
user.setUserID(userID);
if( !user.setUserName(userName) ) return;
/*
* 对树进行操作
*/
userTree.insertKey( new IntegerKey(userID),user );
updateTree();
/*
* 添加到userList
*/
userList.add( userName + ":" + userID + "|" );
workLogArea.append( "Add user " + userName + ":" + userID + " --added\n" );
}
});
delUserBut.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
int num = getSelectID( userList );
UserInfo user = (UserInfo)userTree.searchByKey( new IntegerKey( num ) );
int b = JOptionPane.showConfirmDialog(null,"Do you want to del:" + user.getUserName() + ":" + user.getUserID() );
if(b == 0){
userTree.deleteKey(new IntegerKey(num));
updateTree();
userList.delItem(userList.getSelectedIndex());
workLogArea.append( "Delete user " + user.getUserName() + ":" + user.getUserID() + " -- deleted\n" );
}
else if(b == 1){
workLogArea.append( "Delete user " + user.getUserName() + ":" + user.getUserID() + " -- cancelled\n" );
}
else{
workLogArea.append( "Delete user " + user.getUserName() + ":" + user.getUserID() + " -- cancelled\n" );
}
}
});
borrowBut.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
int pickedNum = getSelectID(userList);
int[] borBk = new int[5];
String s;
int borBK = 0;
BookInfo book = null;
UserInfo user = (UserInfo)userTree.searchByKey( new IntegerKey(pickedNum) );
if( user != null )
{
try{
s = JOptionPane.showInputDialog(null,user.getUserName() + " : " + user.getUserID() + " want to borrow:" );
if(s == null){
workLogArea.append( "Borrow book:" + user.getUserName() + " borrow " + "-- cancelled\n" );
return;
}
borBK = Integer.parseInt( s );
book = (BookInfo)bookTree.searchByKey( new IntegerKey(borBK) );
if( book == null ){
JOptionPane.showMessageDialog(null,"没有这种图书");
workLogArea.append("Borrow book:" + user.getUserID() + " illegal book number -- failed\n" );
return;
}
}
catch(Exception ex){
}
if( user.getAvailable() != 0 ){
if( book.getBookAvailable() <= 0 ){
JOptionPane.showMessageDialog(null,book.getBookID() + "数量不够");
workLogArea.append("Borrow book:" + book.getBookID() + " is not available -- failed\n" );
return;
}
if(!user.borrowBook( book.getBookID() ,System.currentTimeMillis() ))return;
book.setBookAvailable( book.getBookAvailable() - 1 );
userList.replaceItem( userList.getSelectedItem() + "<" + borBK + ">" ,userList.getSelectedIndex());
workLogArea.append("Borrow book:" + user.getUserID() + " borrow " + borBK + " -- success\n" );
/**
* 修改已借阅列表
*/
borrowedBookList.add( " 《"+ book.getBookName() + "》 ID:" + book.getBookID() + "| borrowed by :" + user.getUserID()+"."
+ " Time = " + System.currentTimeMillis());
}
else {
JOptionPane.showMessageDialog(null,"user :" + user.getUserName() + "has already borrowed 5 books");
workLogArea.append("Borrow book:" + user.getUserID() + " has already borrowed 5 -- failed\n" );
return;
}
}
}
});
returnBut.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
int pickedNum = getSelectID( userList );
String s=userList.getSelectedItem();//删除图书前的listitem
String si=""; //删除的图书id
int retBk = 0;
long overdueTime = 0;
UserInfo user = (UserInfo)userTree.searchByKey( new IntegerKey(pickedNum) );
BookInfo book = null;
if( user != null )
{
si = JOptionPane.showInputDialog(null,"请输入归还图书的ID :");
try{
retBk = Integer.parseInt( si );
}
catch(Exception ex){
}
if( retBk == 0 ){
workLogArea.append("Return book:" + user.getUserID() + " return " + si + "非法图书ID -- failed\n" );
JOptionPane.showMessageDialog(null,"illegal book number!");
}
else{
book = (BookInfo)bookTree.searchByKey( new IntegerKey(retBk) );
if( book == null ){
JOptionPane.showMessageDialog(null,"图书馆没有这种图书");
workLogArea.append("Return book:" + user.getUserID() + " return " + si + "图书馆没有这种图书 -- failed\n" );
return;
}
overdueTime = System.currentTimeMillis() - user.getBorrowTime( retBk );
if( user.returnBook( retBk ) ){
book.setBookAvailable( book.getBookAvailable() + 1 );
si = '<' + si + '>';
int j = s.indexOf( si );
userList.replaceItem(s.substring(0,j)+s.substring(j+si.length()),userList.getSelectedIndex());
workLogArea.append("Return book:" + user.getUserID() + " return " + si + ",持有时间 = " + overdueTime + " -- success\n" );
/**
* 修改已借阅列表
*/
String sl = "";
String sUserNum = "";
String sBookNum = "";
int iBookNum = 0;
int iUserNum = 0;
for( int i = 0; i<= borrowedBookList.getItemCount() - 1; i++ ){
sl = borrowedBookList.getItem(i);
sBookNum = sl.substring( sl.indexOf(':') + 1 ,sl.indexOf('|') );
sUserNum = sl.substring( sl.lastIndexOf(':') + 1 ,sl.lastIndexOf('.') );
try{
iBookNum = Integer.parseInt( sBookNum );
iUserNum = Integer.parseInt( sUserNum );
}
catch( Exception ex ){
JOptionPane.showMessageDialog(null,"响应算法错误");
}
if( iUserNum == user.getUserID() && iBookNum == retBk ){
borrowedBookList.delItem(i);
break;
}
}
/**
* 修改过期列表
*/
for( int i = 0; i<= overdueBookList.getItemCount() - 1; i++ ){
sl = overdueBookList.getItem(i);
sBookNum = sl.substring( sl.indexOf(':') + 1 ,sl.indexOf('|') );
sUserNum = sl.substring( sl.lastIndexOf(':') + 1 ,sl.lastIndexOf('.') );
try{
iBookNum = Integer.parseInt( sBookNum );
iUserNum = Integer.parseInt( sUserNum );
}
catch( Exception ex ){
JOptionPane.showMessageDialog(null,"响应算法错误");
}
if( iUserNum == user.getUserID() && iBookNum == retBk ){
overdueBookList.delItem(i);
JOptionPane.showMessageDialog(null,"归还超时:" + overdueTime + "毫秒" );
break;
}
}
}
else{
JOptionPane.showMessageDialog(null,user.getUserName() + " did not borrow this book");
workLogArea.append("Return book:" + user.getUserID() + " didn't borrow this book" + " -- failed\n" );
}
}
}
}
});
//set up panel 3 : book manage
bookList = new List();
final JLabel showBook = new JLabel("双击图书以显示详细信息……");
final JLabel showBookName = new JLabel(" 名称:");
final JLabel showBookID = new JLabel(" ID:");
final JLabel showBookAuthor = new JLabel(" 作者:");
final JLabel showBookAvailable = new JLabel("可借阅:");
final JLabel showBookTotal = new JLabel(" 总量:");
JPanel bookButPanel = new JPanel();
JPanel bookPanel = new JPanel();
JButton addBookBut = new JButton("添加新书");
JButton adaptBook = new JButton("修改图书属性");
JButton delBookBut = new JButton("清除图书");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -