📄 returnroomframe.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 + -