⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 librarysimulator.java

📁 j2se程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -