源代碼下載鏈接: 一、賓館客房管理系統開發初衷 隨著互聯網技術的迅速發展,電腦技術的普及以及信息化時代的推波助瀾,賓館客房需求的逐漸增大,這也是挑戰了賓館客房管理方面的技術,以前的人工管理方式已經不再適應現在的環境,取而代之的是先進的賓館客房管理系統,提高了賓館的工作效率,為想要入住賓館的人提供更 ...
源代碼下載鏈接:
一、賓館客房管理系統開發初衷
隨著互聯網技術的迅速發展,電腦技術的普及以及信息化時代的推波助瀾,賓館客房需求的逐漸增大,這也是挑戰了賓館客房管理方面的技術,以前的人工管理方式已經不再適應現在的環境,取而代之的是先進的賓館客房管理系統,提高了賓館的工作效率,為想要入住賓館的人提供更好的服務。賓館客房管理工作面對大量顧客的私人信息,引入信息化的管理方式可以事半功倍,極大的提高管理效率。我們開發賓館客房管理系統就是採用現代化的信息管理方式代替手工管理方式,提高賓館管理工作效率,做到信息的規範管理,科學統計和快速查詢,讓賓館體驗達到最佳,方便廣大人民群眾出行住宿。
二、系統應該具備的功能
①顧客基本信息的輸入,包括顧客編號、顧客姓名、房號和聯繫方式等。
②顧客基本信息的查詢、修改,包括顧客編號、顧客姓名、房號和聯繫方式等。
③客房類別標準的制定、類別信息的輸入,包括房號、是否空置、房型和價格等。
④顧客類別信息的查詢、修改,包括顧客編號、顧客姓名等。
⑤房源信息信息的更改,包括房號、是否空置、房型、房子歸還日期和房價。
⑥房源庫存信息的查詢,修改,包括房號、是否空置、房型、房子歸還日期和房價等。
⑦顧客入住信息的輸入,包括顧客編號、房號、退房日期。
⑧顧客入住信息的查詢、修改,包括顧客編號、顧客姓名、房號和聯繫方式等。
⑨退房信息的輸入,包括顧客編號、顧客姓名、房號和退房日期。
⑩退房信息的查詢和修改,包括顧客編號、顧客姓名、房號和退房日期等。
三、系統具體實現
首先映入眼帘的是程式登錄系統,這裡內部設置了兩個賬戶,一個是管理員賬戶,許可權是管理員許可權(增刪查改)。還有一個是來賓用戶,只可以查看。採用Java Swing 的模板創建,用戶界面還是十分友好的。登錄界面如圖6-1 所示。該部分偽代碼如下:
public static void main(String[] args) {
Login log = new Login();
log.setIconImage(Toolkit.getDefaultToolkit().createImage("img1.jpg"));// 登錄界面標題logo圖片
log.setTitle("賓館客房管理系統");
log.setLocation(600, 300); // 方框出現在屏幕的位置
log.setSize(750, 548); // 調整登錄框大小
log.setResizable(false);// 設置為不可調整視窗大小
log.setVisible(true); // 是否可視化
}
class Enter implements ActionListener {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e)// 重寫事件反映
{
Login log = new Login();// 持有對象引用
if ((f1.getText()).equals("nuist") && (f2.getText()).equals("123")) {
// JOptionPane.showMessageDialog(null, "登錄成功!用戶許可權是adimistrator");// 彈出要求用戶提供值或向其發出通知的標準對話
power = "adminstrator";// 賦予管理員許可權
Qframe frame = new Qframe();// 驗證成功後就建對象調用構造方法連接資料庫
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(
"img1.jpg"));// 進入管理系統的logo圖片
frame.setLocation(400, 200);
frame.setSize(500, 285);
frame.setResizable(false);
frame.setVisible(true);
dispose();// 釋放此圖形的上文以及它使用的所有系統資源,即實現關閉彈出新視窗後關閉上個視窗
} else if ((f1.getText()).equals("admin")
&& (f2.getText()).equals("123")) {
JOptionPane.showMessageDialog(null, "登錄成功!用戶許可權是user");// 彈出要求用戶提供值或向其發出通知的標準對話框
power = "adminstrator";
Qframe frame = new Qframe();
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(
"img1.jpg"));
frame.setLocation(400, 200);
frame.setSize(750, 543);// 500/285
frame.setResizable(false);
frame.setVisible(true);
dispose();
} else
JOptionPane.showMessageDialog(null, "登錄失敗,請重新登錄!");
}
} }
然後,就是登錄後的主界面,有五大板塊,分別是:增加、刪除、修改、查詢和顯示訂房表。最後還有一個退出程式的按鈕。如圖6-2所示主界面。該部分偽代碼如下:
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout(5, 10);// 構造邊框佈局,水平間距5,垂直間距10
public static final TextArea result = new TextArea();//註意此result不是結果集,是展示表的文本區
public Qframe() {
contentPane = (JPanel) this.getContentPane();// 返回此窗體的 contentPane 對象
contentPane.setLayout(borderLayout1);
this.setTitle("賓館客房管理系統");// 設置視窗標題
addWindowListener(new WindowAdapter() {// 監聽視窗處理事件 按X就結束程式
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
result.setEditable(false);// 設置信息顯示文本框區域為不可編輯
result.setBackground(Color.WHITE);// 設置文本背景為白色
JPanel option = new JPanel();// 選擇功能按鈕容器
final Button zenjia = new Button("增加");// 增加按鈕
option.add(zenjia, BorderLayout.NORTH);// 將組件置於其顯示區域的頂部,併在水平方向上居中。
zenjia.addActionListener(new ActionListener() {// 監聽增加按鈕事件
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == zenjia) {
Adddialog add1 = new Adddialog();// 調用增加視窗類
add1.setVisible(true);// 顯示視窗
}
}
});
下方的空白是文本區,可以顯示訂單表中的信息,只需要點擊一下顯示訂單表按鈕即可顯示。如圖6-3所示。該部分偽代碼如下:
try {
stmt = sin.prepareStatement("select * from 訂房表 where 客戶編號=?");
stmt.setObject(1, sno);
rs = stmt.executeQuery();
int count = 0;//查詢不到記為0,查詢得到記為1
while (rs.next()) {
String msg = rs.getString("客戶編號") + "\t"
+ rs.getString("房號") + "\t"
+ rs.getString("退房日期") + "\n";
JOptionPane.showMessageDialog(null, msg, "查詢結果:",
JOptionPane.NO_OPTION);
dispose();
count = 1;//查詢得到就記count為1,
}
if (count == 0)//查詢不到就顯示無該商品號
JOptionPane.showMessageDialog(null, "無該客戶", "查詢結果:",
JOptionPane.NO_OPTION);
// stmt.close();
// con.close();
} catch (SQLException h) {
// TODO Auto-generated catch block
h.printStackTrace();
}
最後,演示一下添加顧客功能,對應的顧客表、房源表和訂單表在後端資料庫都會發生相應改變。如圖6-4和6-5所示。該部分偽代碼如下:
public final static void insert(Connection con, Object obj[]) {
PreparedStatement stmt = null;
PreparedStatement stmt2 = null;
PreparedStatement stmt3 = null;
try {
stmt = con.prepareStatement("insert into 訂房表(客戶編號,房號,退房日期) values(?,?,?)"
+ "insert into 客戶表(客戶編號,房號,退房日期,購房日期,客戶姓名,性別,所購房型,聯繫方式) values(?,?,?,?,?,?,?,?)"
+ "update 房源表 set 是否空置 ='否',退房日期 =? where 房號 =?");
// SQL 語句被預編譯並存儲在 PreparedStatement 對象中,包含多個 '?' IN 參數占位符的 SQL 語句
stmt.setString(1, obj[0].toString());// 將指定參數設置為傳入的字元串
stmt.setString(2, obj[1].toString());
stmt.setString(3, obj[2].toString());
........
stmt.execute(); // 執行sql語句
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "失敗", "操作提示!",
JOptionPane.NO_OPTION);
}
}