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

📄 returnroomframe.java

📁 java酒店管理系统
💻 JAVA
字号:
package myprojects.returnroom;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.event.*;
import java.util.*;
import javax.swing.table.*;
import java.util.Vector;
import java.util.*;
import java.text.*;
//-----------------导入自定义的包---------------------------
import myprojects.guestroom.*;
import myprojects.checkin.*;
import myprojects.returnroom.*;
import myprojects.Account.*;
/**
 * @(#)ReturnRoomFrame.java
 *
 * 退房界面类
 *
 * @author 
 * @version 1.00 05/12/25
 */

public class ReturnRoomFrame extends JFrame {
  Account usingSystemAccount = new Account();
  JPanel contentPane;
  JPanel CheckInInfoPanel = new JPanel();
  BorderLayout checkInInfoLayout = new BorderLayout();  
  JLabel hintCheckInfoLabel = new JLabel();
  JPanel roomOfGuestPanel = new JPanel();
  JLabel hintRoomOfGuestLabel = new JLabel();
  BorderLayout roomInfoLayout = new BorderLayout();  
  JPanel OtherInfoPanel = new JPanel();
  JPanel ButtonPanel = new JPanel();
  JButton AffrimButton = new JButton();
  JButton exitButton = new JButton();
 
  JLabel arriveDateLabel = new JLabel();
  JTextField arriveDateTextField = new JTextField();
  JLabel leaveDateLabel = new JLabel();
  JTextField leaveDateTextField = new JTextField();
  JLabel discountLabel = new JLabel();
  String[] discountItems = {"100%","90%","80%","70%","60%","50%"};
  JComboBox discountComboBox = new JComboBox(discountItems);
  JLabel depositLabel = new JLabel();
  JTextField depositTextField = new JTextField();
  JLabel IncomeLabel = new JLabel();
  JTextField IncomeTextField = new JTextField();
	//用表格来表示列表
  DefaultTableModel checkInInfoModel = new DefaultTableModel();
  JTable checkInInfoTable = new JTable(checkInInfoModel);
  	//用表格来表示列表
  DefaultTableModel roomInfoModel = new DefaultTableModel();
  JTable roomInfoTable = new JTable(roomInfoModel);
  ///////////////////////////////////////////////
  ReturnRoom returnRoom = new ReturnRoom();
  //获取登记客人的信息
  Vector checkInInfoList=new Vector();  
  
  //Construct the frame
  public ReturnRoomFrame(Account user) {
  	//////////////////////////
  	usingSystemAccount = user;
  	/////////////////////
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception  {
    contentPane = (JPanel) this.getContentPane();
    hintCheckInfoLabel.setVerifyInputWhenFocusTarget(true);
    hintCheckInfoLabel.setText("                入住信息");
    hintCheckInfoLabel.setVerticalAlignment(SwingConstants.CENTER);
    contentPane.setLayout(null);
    this.setSize(new Dimension(400, 350));
    this.setLocation(290,250);
    this.setTitle("退房");
    this.setResizable(false); //使之不能改变大小
    CheckInInfoPanel.setBackground(Color.lightGray);
    CheckInInfoPanel.setBounds(new Rectangle(8, 6, 202, 283));
    CheckInInfoPanel.setLayout(checkInInfoLayout);
    roomOfGuestPanel.setLayout(roomInfoLayout);
    roomOfGuestPanel.setBackground(Color.lightGray);
    roomOfGuestPanel.setBounds(new Rectangle(217, 192, 78, 97));
        
    hintRoomOfGuestLabel.setText("    客人住房");
    OtherInfoPanel.setBackground(Color.lightGray);
    OtherInfoPanel.setDebugGraphicsOptions(0);
    OtherInfoPanel.setBounds(new Rectangle(219, 7, 170, 174));
    OtherInfoPanel.setLayout(null);
    ButtonPanel.setBackground(Color.lightGray);
    ButtonPanel.setBounds(new Rectangle(298, 191, 89, 98));
    ButtonPanel.setLayout(null);    
   
  	
  	
  	AffrimButton.setBounds(new Rectangle(7, 20, 75, 25));
    AffrimButton.setText("退房");
    exitButton.setBounds(new Rectangle(8, 59, 73, 25));
    exitButton.setText("返回");
    
    arriveDateLabel.setDebugGraphicsOptions(0);
    arriveDateLabel.setText("到达日期");
    arriveDateLabel.setBounds(new Rectangle(25-10, 14, 55, 16));
    arriveDateTextField.setText("");
    arriveDateTextField.setBounds(new Rectangle(80, 11, 69, 22));
    leaveDateLabel.setBounds(new Rectangle(25-10, 47, 55, 16));
    leaveDateLabel.setText("离开日期");
    leaveDateLabel.setDebugGraphicsOptions(0);
    leaveDateTextField.setBounds(new Rectangle(80, 44, 69, 22));
    leaveDateTextField.setText("");
    discountLabel.setText("折扣率");
    discountLabel.setBounds(new Rectangle(25-10, 110, 69, 16));
    discountComboBox.setBounds(new Rectangle(80, 108, 68, 22));
    depositLabel.setText("已收押金");
    depositLabel.setBounds(new Rectangle(25-10, 79, 69, 16));
    depositTextField.setText("");
    depositTextField.setBounds(new Rectangle(80, 74, 69, 22));
    IncomeLabel.setText("住宿费用");
    IncomeLabel.setBounds(new Rectangle(25-10, 143, 69, 16));
    IncomeTextField.setBounds(new Rectangle(80, 144, 69, 22));
    IncomeTextField.setText("");
    contentPane.add(CheckInInfoPanel,null);
    CheckInInfoPanel.add(hintCheckInfoLabel, BorderLayout.NORTH);
        
    contentPane.add(ButtonPanel, null);
    contentPane.add(OtherInfoPanel, null);
    OtherInfoPanel.add(leaveDateLabel, null);
    OtherInfoPanel.add(discountLabel, null);
    OtherInfoPanel.add(depositLabel, null);
    OtherInfoPanel.add(arriveDateLabel, null);
    OtherInfoPanel.add(IncomeLabel, null);
    OtherInfoPanel.add(discountComboBox, null);
    OtherInfoPanel.add(depositTextField, null);
    OtherInfoPanel.add(leaveDateTextField, null);
    OtherInfoPanel.add(arriveDateTextField, null);
    OtherInfoPanel.add(IncomeTextField, null);
    contentPane.add(roomOfGuestPanel, null);
    roomOfGuestPanel.add(hintRoomOfGuestLabel, null);
    ButtonPanel.add(AffrimButton, null);
    ButtonPanel.add(exitButton, null);
   
    /////////////////////////////////////////////    	
    checkInInfoModel.addColumn("登记号");
    checkInInfoModel.addColumn("姓名");
    checkInInfoModel.addColumn("性别"); 
    checkInInfoModel.addColumn("人数"); 
    checkInInfoModel.addColumn("天数"); 
       			
    checkInInfoTable.setPreferredScrollableViewportSize(new Dimension(130, 100));
    checkInInfoTable.setBackground(new Color(255, 255, 210));    
    checkInInfoTable.setRowHeight(20);
    checkInInfoTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    JScrollPane checkinInfoscrollpane = new JScrollPane(checkInInfoTable);
    CheckInInfoPanel.add(checkinInfoscrollpane,BorderLayout.CENTER); 
    ////////////////////////////////////
    /////////////////////////////////////////////    	
    roomInfoModel.addColumn("房号");    
    roomInfoModel.addColumn("价格");     			
    roomInfoTable.setPreferredScrollableViewportSize(new Dimension(130, 100));
    roomInfoTable.setBackground(new Color(255, 255, 210));    
    roomInfoTable.setRowHeight(20);
    roomInfoTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    JScrollPane roomInfoscrollpane = new JScrollPane(roomInfoTable);
    roomOfGuestPanel.add(roomInfoscrollpane,BorderLayout.CENTER); 
    //////////////////////////////////////////////////
    //////////////////////////////////////////////////
    //将当前日期记录成字符串格式,以便存到数据库,到时候,又可以转化回来成为日期对象
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	Date d = new Date();
	String	s = sdf.format(d)+"";					
	leaveDateTextField.setText(s);
	
	
 
	//从 ReturnRoom 类对象获取的信息: 登记客人信息
	//ReturnRoom.checkInInfoList  放的是登记客人信息表
				
	checkInInfoList = returnRoom.getCheckInInfoList() ;	
	//将客人信息表放到Table中
	CheckInInfo cii=new CheckInInfo();
	for(int i=0;i<checkInInfoList.size();i++)
	{
		cii=(CheckInInfo)checkInInfoList.get(i);
		String sex="";
		if(cii.getSex()==1)
			sex="男";
		else
			sex="女";
		checkInInfoModel.addRow(new Object[]{ 
						Integer.toString(cii.getCheckInGuestId()),
						cii.getGuestName().toString().trim(),						
						sex,
						Integer.toString(cii.getGuestNum()),
						Integer.toString(cii.getStayDayNum())		
				 		});	
	}			
    ///////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////
    this.setVisible(true); 
    //按钮事件处理   
    AffrimButton.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			//退房,保存退房信息
			returnRoom_affrimButtonClick();
			closeFrame();		   
		}
	});	
    
    exitButton.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {			
			closeFrame();		   
		}
	});	
	//鼠标点击表事件处理		
    checkInInfoTable.addMouseListener(new java.awt.event.MouseAdapter(){
    	public void mousePressed(MouseEvent e) {
        	if(e.getSource()==checkInInfoTable)
  	 		{  
  	 			if(e.getClickCount()==1)		//鼠标单击
  	 			{
  	 				System.out.println("鼠标点击表事件处理");
  	 				showOtherCheckInInfo_TableClick(e);
  	      		}	
  	 		}
      	}
    });	
	/////////////////////////////
  }
   
  void showOtherCheckInInfo_TableClick(MouseEvent e){
  	 int index = checkInInfoTable.getSelectedRow();
  	 System.out.println ("你选择了数组的位置为"+index);  
  	 //如果没有选中元素,则不作处理 
  	 if(index == -1) 
  	 	return ;  	 	
  	 
  /*
   *ERROR!!!: 不能再循环条件中getRowCount等长度,又!!在其中修改长度,如
   *  			删除数据等,光遍历是不错的,但是,如果,是动态的改变长度,又用长度来
   *			控制循环条件,则,长度的变化是乱的,!!!!!!!!!!!
   *	 for(int i=0;i<roomInfoModel.getRowCount();i++){
		System.out.println("i::::::::::::::"+i);
		roomInfoModel.removeRow(i);
		////////////////////////////////////////////////
		
		int tablesize=roomInfoModel.getRowCount();
  	 	System.out.println("tablesize--------------------:"+tablesize);
  	 	try{
  	 //一样的错,长度在变,但是,刚开始设置的循环条件没有改,当然,会出错!!!
  	 		for(int i=0;i<tablesize;i++){		
			roomInfoModel.removeRow(i);
	 		}	
  	 	}catch (Exception ex) {
    	 System.out.println(ex.getMessage());
     	}
     	
  	 } */ 	 
  	 //只要表中还又元素,就删除表头的,一直删除到尾~~~
  	 //就想删除链表一样!!!!!!
  	 while(roomInfoModel.getRowCount()!=0){
  	 	roomInfoModel.removeRow(0);
  	 }
	 
  	 GuestRoom room=new GuestRoom();  	 
  	 CheckInInfo cii=new CheckInInfo();
  	 
  	 cii=(CheckInInfo)checkInInfoList.get(index);
  	 Vector roomList=new Vector();
  	 roomList=cii.getChoosenRoomList();
  	 //计算总费用
  	 double percent=1.0;  	 
  	 int discount = discountComboBox.getSelectedIndex();
  	 //得到打折率
  	 percent = getDiscount(discount);
  	 ////////////////////////////////////
  	 arriveDateTextField.setText(cii.getArriveDate().trim());
  	 
  		
  	 ////////////////////////////////////
  	 int totalRoomPrice=0;
  	 long daynum=computeActualStayNum();
  	 double totalFee=0;  
  	 
  	 //添加所选择的房间列表,并计算总价格
  	 for(int j=0;j<roomList.size();j++){
  	 	room = (GuestRoom)roomList.get(j);
  	 	
  	 	roomInfoModel.addRow(new Object[]{ 
  	 			room.guestRoomId.toString().trim(),
  	 			room.guestRoomFee+""
				 		});	
		totalRoomPrice = room.guestRoomFee+totalRoomPrice;	 	
  	 }
  	 
  	 System.out.println("totalRoomPrice: "+totalRoomPrice);
  	 System.out.println("daynum: "+daynum);
  	 System.out.println("percent: "+percent);
  	 totalFee=totalRoomPrice*daynum*percent;	//计算公式
  	 
  	 IncomeTextField.setText(""+totalFee);
  	 
  	 depositTextField.setText(""+cii.getDesposit());
  	   	 
  	  //1 表示90%,2表示80% 3 表示70%  4表示60%  5表示50%
  }
 
  void returnRoom_affrimButtonClick(){
  	//退房,保存退房信息
  	 int index = checkInInfoTable.getSelectedRow();
  	 System.out.println ("退房,保存退房信息");  
  	 //如果没有选中元素,则不作处理 
  	 if(index == -1) 
  	 	return ;  	 
  	 CheckInInfo cii=new CheckInInfo();
  	 
  	 cii=(CheckInInfo)checkInInfoList.get(index);
  	 //将退房的客人信息传给数据库,便于修改下列信息:
  	 //客人入住信息,个人信息,所住房间信息,
  	 //历史客人信息,包括操作人员信息
  	 
  	 double income = Double.parseDouble(IncomeTextField.getText().toString().trim());
  	 long stayNum = computeActualStayNum();
  	 String tradeDate = leaveDateTextField.getText().toString().trim();
  	 returnRoom.saveReturnRoomInfo(cii,usingSystemAccount,tradeDate,income,stayNum);
  }
  //计算实际 入住的天数
  long computeActualStayNum(){
  	 //将字符串转换成日期对象
  	 SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd");
	
     // Create a string containing a text date to be parsed.
     String dateStringToParse = leaveDateTextField.getText().toString().trim();
     String dateStringToParse2= arriveDateTextField.getText().toString().trim();
     long diffMillis=0;
     long diffDays=0;
     try {
         Date date = bartDateFormat.parse(dateStringToParse);
        
    	 Date date2 = bartDateFormat.parse(dateStringToParse2);  
         diffMillis = date.getTime()- date2.getTime();
         System.out.println(dateStringToParse);         
         System.out.println(date.getTime());
         System.out.println(dateStringToParse2);
         System.out.println(date2.getTime());
         diffDays = diffMillis/(24*60*60*1000); 
         System.out.println("相差天数:"+diffDays);        
             
     }catch (Exception ex) {
    	 System.out.println(ex.getMessage());
     }
     return diffDays;
  }
  double getDiscount(int discount){
  	double percent=1.0;
  	switch(discount){
  	 	case 0:
  	 		percent=1.0;
  	 		break;
  	 	case 1:
  	 		percent=0.9;
  	 		break;
  	 	case 2:
  	 		percent=0.8;
  	 		break;
  	 	case 3:
  	 		percent=0.7;
  	 		break;
  	 	case 4:
  	 		percent=0.6;
  	 		break;  
  	 	case 5:
  	 		percent=0.5;
  	 		break;  	 		
  	 }
  	return percent;
  }
  //close this frame when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      closeFrame();
    }
  }
  void closeFrame() {
  	this.dispose();	
  } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -