📄 librarysimulator.java
字号:
Box labelbox = Box.createVerticalBox();
labelbox.add(showBookName);
labelbox.add(showBookID);
labelbox.add(showBookAuthor);
labelbox.add(showBookAvailable);
labelbox.add(showBookTotal);
labelbox.add(showBook);
bookButPanel.add( addBookBut );
bookButPanel.add( adaptBook );
bookButPanel.add( delBookBut );
bookPanel.setLayout( new BorderLayout() );
bookPanel.add( labelbox ,BorderLayout.NORTH );
bookPanel.add( bookList ,BorderLayout.CENTER);
bookPanel.add( bookButPanel ,BorderLayout.SOUTH );
tabbedPane.addTab( "图书管理", null, bookPanel, "在此处添加删除图书馆图书" );
/**
* set up addBookBut action listener
*/
addBookBut.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
addBookDlg.setBookID(0);
addBookDlg.setBookTitle("");
addBookDlg.setAuthor("");
addBookDlg.setAvailable(0);
addBookDlg.setTotal(0);
addBookDlg.show();
if(addBookDlg.isCancelled()){
workLogArea.append( "Add book " + addBookDlg.getBookTitle() + ":" + addBookDlg.getBookID() + " --cancelled\n" );
return;
}
String sl = "";
for( int i = 0 ; i <= bookList.getItemCount()-1 ;i++ ){
sl = bookList.getItem(i);
if( addBookDlg.getBookTitle().equals( sl.substring( sl.indexOf('《')+1,sl.indexOf('》')) ) ){
JOptionPane.showMessageDialog(null,"图书重名");
return;
}
if( addBookDlg.getBookID() == Integer.parseInt( sl.substring(sl.indexOf(':') + 1,sl.indexOf('|') )) ){
JOptionPane.showMessageDialog(null,"图书ID重复!");
return;
}
}
/**
* 初始化图书
*/
BookInfo book = new BookInfo();
book.setBookName( addBookDlg.getBookTitle() );
book.setBookID( addBookDlg.getBookID() );
book.setBookAuthor( addBookDlg.getAuthor() );
book.setBookTotal( addBookDlg.getTotal() );
book.setBookAvailable( addBookDlg.getTotal() );
/**
* 初始化图书树
*/
bookTree.insertKey( new IntegerKey(addBookDlg.getBookID()),book );
updateTree();
/**
* 修改treeList
*/
bookList.add( " 《" + book.getBookName() + "》 ID:" + book.getBookID() + "| 作者: " + book.getBookAuthor() + "." );
workLogArea.append( "Add book " + " 《" + book.getBookName() + "》 ID:" + book.getBookID() + "| 作者: " + book.getBookAuthor() + ". --added\n" );
}
});
/*
* set up addExistentBookBut action listener
*/
adaptBook.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
int lended = 0;
/**
* 获取书号
*/
int id = getSelectID( bookList );
/**
* 获取原有图书信息
*/
BookInfo book = (BookInfo)bookTree.searchByKey( new IntegerKey(id) );
lended = book.getBookTotal() - book.getBookAvailable();
if(book != null){
addBookDlg.setBookID( book.getBookID() );
addBookDlg.setBookTitle( book.getBookName() );
addBookDlg.setAuthor( book.getBookAuthor() );
addBookDlg.setAvailable( book.getBookAvailable() );
addBookDlg.setTotal( book.getBookTotal() );
addBookDlg.setIDadaptable();
addBookDlg.show();
if(addBookDlg.isCancelled()){
workLogArea.append( "Adapt book " + " 《 " + book.getBookName() + " 》 ID:" + book.getBookID() + "| 作者: " + book.getBookAuthor() + ". --Cancelled\n" );
return;
}
/**
* 修改图书信息
*/
if( addBookDlg.getTotal() < lended ){
workLogArea.append( "Adapt book " + " 《 " + book.getBookName() + " 》 ID:" + book.getBookID() + "| 作者: " + book.getBookAuthor() + ". total < lended --Failed\n" );
JOptionPane.showMessageDialog(null,"修改图书总量要考虑到已借出图书的数目");
return;
}
book.setBookName( addBookDlg.getBookTitle() );
book.setBookID( addBookDlg.getBookID() );
book.setBookAuthor( addBookDlg.getAuthor() );
book.setBookTotal( addBookDlg.getTotal() );
book.setBookAvailable(book.getBookTotal() - lended);
bookList.replaceItem(" 《 " + book.getBookName() + " 》 ID:" + book.getBookID() + "| 作者: " + book.getBookAuthor() + ".",bookList.getSelectedIndex());
workLogArea.append( "Adapt book " + " 《 " + book.getBookName() + " 》 ID:" + book.getBookID() + "| 作者: " + book.getBookAuthor() + ". --Success\n" );
}
}
});
/**
* set up delBookBut action listener
*/
delBookBut.addActionListener( new java.awt.event.ActionListener(){
public void actionPerformed( java.awt.event.ActionEvent e ){
int num = getSelectID( bookList );
BookInfo book = (BookInfo)bookTree.searchByKey( new IntegerKey( num ) );
int b = JOptionPane.showConfirmDialog(null,"Do you want to del:" + book.getBookName() + ":" + book.getBookID() );
if(b == 0){
bookTree.deleteKey(new IntegerKey(num));
updateTree();
bookList.delItem(bookList.getSelectedIndex());
workLogArea.append( "Delete book " + book.getBookName() + ":" + book.getBookID() + " -- deleted\n" );
}
else if(b == 1){
workLogArea.append( "Delete book " + book.getBookName() + ":" + book.getBookID() + " -- cancelled\n" );
}
else{
workLogArea.append( "Delete book " + book.getBookName() + ":" + book.getBookID() + " -- cancelled\n" );
}
}
} );
bookList.addActionListener( new java.awt.event.ActionListener(){
public void actionPerformed( java.awt.event.ActionEvent e ){
int id = getSelectID( bookList );
BookInfo book = (BookInfo)bookTree.searchByKey(new IntegerKey( id ) );
if( book != null ){
showBookName.setText(" 名称: 《" + book.getBookName() + "》");
showBookID.setText(" ID: " + book.getBookID());
showBookAuthor.setText(" 作者: " + book.getBookAuthor());
showBookAvailable.setText("可借阅: " + book.getBookAvailable() + "本");
showBookTotal.setText(" 总量: " + book.getBookTotal() + "本");
}
}
} );
//set up panel 4 : tree
Box verticall4 = Box.createVerticalBox();
String[] selectItem = { "图书树", "用户树" };
selectTreeCom = new JComboBox( selectItem );
treeArea = new JTextArea( 30,20 );
treeArea.setEditable( false );
JScrollPane treeScrl = new JScrollPane( treeArea );
treeScrl.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
verticall4.add( selectTreeCom );
verticall4.add( treeScrl );
tabbedPane.addTab( "树", null, verticall4, "在此处可以查看图书树和用户树" );
selectTreeCom.addItemListener(
new ItemListener(){
//handle JComboBox event
public void itemStateChanged( ItemEvent event ){
if( event.getStateChange() == ItemEvent.SELECTED ){
if(selectTreeCom.getSelectedIndex() == 1)
treeArea.setText(userTree.toString());
else
treeArea.setText(bookTree.toString());
}
}
}
);
//set up panel 5 : work log
workLogArea.setEditable( false );
JScrollPane workLogScrl = new JScrollPane( workLogArea );
workLogScrl.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
tabbedPane.addTab( "操作日志", null, workLogScrl, "在此处察看操作日志" );
tabbedPane.addChangeListener( new ChangeListener(){
public void stateChanged(ChangeEvent arg0) {
// TODO Auto-generated method stub
if( tabbedPane.getSelectedIndex() == 0 ){
//JOptionPane.showMessageDialog(null,System.currentTimeMillis()+"");
String sl;
int bookID;
int userID;
long[] borrowTime;
int[] borrowedBook;
for( int i = 0 ; i <= borrowedBookList.getItemCount() - 1 ; i++ ){
sl = borrowedBookList.getItem( i );
bookID = Integer.parseInt(sl.substring(sl.indexOf(':')+1,sl.indexOf('|')));
userID = Integer.parseInt(sl.substring(sl.lastIndexOf(':')+1,sl.lastIndexOf('.')));
UserInfo user = (UserInfo) userTree.searchByKey( new IntegerKey(userID) );
if( user!= null ){
borrowedBook = user.getBorrowedBook();
for( int j = 0 ; j <= borrowedBook.length -1 ; j++ ){
if( borrowedBook[j] == bookID ){
if( System.currentTimeMillis() - user.getBorrowTime( bookID ) > holdTime ){
overdueBookList.add(borrowedBookList.getItem(i));
workLogArea.append("Time out! BookID:<" + bookID +"> borrowed by UserID: <" + userID + ">\n");
borrowedBookList.delItem(i);
}
}
}
}
}// end for
}
}
}
);
/**
* 对操作记录进行存盘
*/
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
try {
RandomAccessFile file = new RandomAccessFile("library-"
+ Calendar.getInstance().get(Calendar.YEAR) + "-"
+ (Calendar.getInstance().get(Calendar.MONTH) + 1)
+ "-"
+ Calendar.getInstance().get(Calendar.DAY_OF_MONTH)
+ "-" + Calendar.getInstance().get(Calendar.HOUR)
+ "-" + Calendar.getInstance().get(Calendar.MINUTE)
+ "-" + Calendar.getInstance().get(Calendar.SECOND)
+ ".log", "rw");
file.write(workLogArea.getText().getBytes());
file.close();
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "无法保存日志!原因:"
+ e1.getMessage());
}
System.exit(0);
}
});
getContentPane().add( tabbedPane );
this.setResizable(false);
setSize( 400,600 );
setVisible( true );
if( JOptionPane.showConfirmDialog(null,"是否希望载入测试数据?") == 0 )importInfo();
}
public void updateTree(){
if(selectTreeCom.getSelectedIndex() == 1)
treeArea.setText(userTree.toString());
else
treeArea.setText(bookTree.toString());
}
private int getSelectID(List list){
int getUserIdx = getUserIdx = list.getSelectedIndex();
String getUserItm = list.getSelectedItem();
if( getUserItm == null ){
JOptionPane.showMessageDialog(null,"Please select a user.");
return 0;
}
int idxB = getUserItm.indexOf(':');
int idxE = getUserItm.indexOf('|');
int pickedNum = Integer.parseInt(getUserItm.substring(idxB+1,idxE));
return pickedNum;
}
private void importInfo(){
try{
//FileInputStream f = new FileInputStream("test.txt");
BufferedReader reader = new BufferedReader( new FileReader("test.txt") );
String s;
while( (s = reader.readLine()) != null )
{
dealImport( s );
}
}
catch(Exception ex){
System.out.println(ex);
}
}
private void dealImport(String s){
String sBookName = null;
String sBookAuthor = null;
String sBookID = null;
int iBookID = 0;
String sAmount = null;
int iAmount = 0;
sBookName = s.substring(s.indexOf('《')+1 , s.indexOf('》'));
sBookAuthor = s.substring(s.indexOf("author:")+7,s.indexOf(". ID:"));
sBookID = s.substring(s.indexOf("ID:")+3,s.indexOf(". amount:"));
sAmount = s.substring(s.indexOf("amount:")+7);
try{
iBookID = Integer.parseInt( sBookID );
iAmount = Integer.parseInt( sAmount );
}
catch(Exception ex){
JOptionPane.showMessageDialog(null,"文件格式错误");
}
/*JOptionPane.showMessageDialog(null,sBookName + "|"
+ sBookAuthor + "|"
+ iBookID + "|"
+ iAmount );*/
/**
* 初始化图书
*/
BookInfo book = new BookInfo();
book.setBookName( sBookName );
book.setBookID( iBookID );
book.setBookAuthor( sBookAuthor );
book.setBookTotal( iAmount );
book.setBookAvailable( iAmount );
/**
* 初始化图书树
*/
bookTree.insertKey( new IntegerKey(iBookID),book );
updateTree();
/**
* 修改treeList
*/
bookList.add( " 《" + sBookName + "》 ID:" + iBookID + "| 作者: " + sBookAuthor + "." );
workLogArea.append( "Add book " + " 《" + sBookName + "》 ID:" + iBookID + "| 作者: " + sBookAuthor + ". --added\n" );
}
public static void main ( String args[] )
{
System.out.println( "The library is running now..." );
LibrarySimulator application = new LibrarySimulator();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -