客房信息管理系統(tǒng)概述_第1頁(yè)
客房信息管理系統(tǒng)概述_第2頁(yè)
客房信息管理系統(tǒng)概述_第3頁(yè)
客房信息管理系統(tǒng)概述_第4頁(yè)
客房信息管理系統(tǒng)概述_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 . . 38/41 . . 客房信息管理系統(tǒng)概述 日期:數(shù)據(jù)庫(kù)課程實(shí)訓(xùn)報(bào)告題目: 客房信息管理系統(tǒng) 目 錄 TOC o 1-5 h z u HYPERLINK l _Toc485980294目錄 PAGEREF _Toc485980294 h 2HYPERLINK l _Toc4859802951 課題容和要求 PAGEREF _Toc485980295 h 1HYPERLINK l _Toc4859802961.1課題描述 PAGEREF _Toc485980296 h 1HYPERLINK l _Toc4859802971.2 課題要求 PAGEREF _Toc485980297 h 1

2、HYPERLINK l _Toc4859802982 需求分析 PAGEREF _Toc485980298 h 1HYPERLINK l _Toc4859802992.1 功能需求分析 PAGEREF _Toc485980299 h 1HYPERLINK l _Toc4859803002.2 數(shù)據(jù)需求分析 PAGEREF _Toc485980300 h 1HYPERLINK l _Toc4859803013 系統(tǒng)設(shè)計(jì) PAGEREF _Toc485980301 h 3HYPERLINK l _Toc4859803023.1 功能模塊設(shè)計(jì) PAGEREF _Toc485980302 h 3HYP

3、ERLINK l _Toc4859803033.2 數(shù)據(jù)庫(kù)概念設(shè)計(jì) PAGEREF _Toc485980303 h 3HYPERLINK l _Toc4859803043.3 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì) PAGEREF _Toc485980304 h 5HYPERLINK l _Toc4859803053.4 數(shù)據(jù)庫(kù)物理設(shè)計(jì) PAGEREF _Toc485980305 h 5HYPERLINK l _Toc4859803063.5 數(shù)據(jù)庫(kù)表間聯(lián)系 PAGEREF _Toc485980306 h 7HYPERLINK l _Toc4859803074系統(tǒng)實(shí)現(xiàn)根據(jù)各自課題實(shí)際情況寫,寫清界面設(shè)計(jì),包括哪些控件

4、,各自哪些屬性,哪些事件,數(shù)據(jù)庫(kù)如何相連與操作 PAGEREF _Toc485980307 h 7HYPERLINK l _Toc4859803084.1 登陸模塊實(shí)現(xiàn) PAGEREF _Toc485980308 h 7HYPERLINK l _Toc4859803094.2 登記模塊實(shí)現(xiàn) PAGEREF _Toc485980309 h 7HYPERLINK l _Toc4859803104.3 查詢模塊實(shí)現(xiàn) PAGEREF _Toc485980310 h 8HYPERLINK l _Toc4859803115 代碼調(diào)試與功能測(cè)試 PAGEREF _Toc485980311 h 8HYPERL

5、INK l _Toc4859803125.1 測(cè)試方案 PAGEREF _Toc485980312 h 8HYPERLINK l _Toc4859803135.2 測(cè)試結(jié)果 PAGEREF _Toc485980313 h 8HYPERLINK l _Toc4859803146 收獲與體會(huì) PAGEREF _Toc485980314 h 8HYPERLINK l _Toc485980315參考文獻(xiàn) PAGEREF _Toc485980315 h 9HYPERLINK l _Toc485980316附錄 PAGEREF _Toc485980316 h 10HYPERLINK l _Toc48598

6、0317附錄1源程序部分清單 PAGEREF _Toc485980317 h 10HYPERLINK l _Toc485980318附錄1.1登陸代碼 PAGEREF _Toc485980318 h 10HYPERLINK l _Toc485980319附錄1.2 查詢代碼 PAGEREF _Toc485980319 h 12HYPERLINK l _Toc485980320附錄1.3 計(jì)費(fèi)代碼 PAGEREF _Toc485980320 h 13客房信息管理系統(tǒng)設(shè)計(jì)1 課題容和要求1.1課題描述 隨著市場(chǎng)經(jīng)濟(jì)的發(fā)展,各行各業(yè)為加強(qiáng)信息管理,提高經(jīng)濟(jì)效益,都迫切地將現(xiàn)代化信息處理技術(shù)應(yīng)用到經(jīng)濟(jì)

7、管理中??头抗芾硐到y(tǒng)是酒店、賓館管理中必不可少的一部分,它不僅對(duì)管理者在運(yùn)營(yíng)過(guò)程中起到至關(guān)重要的作用,而且也能為用戶提供充分的信息和快捷的查詢手段。但是傳統(tǒng)的人工操作管理存在著許多缺點(diǎn),如:效率低、性差,而且保存時(shí)間一長(zhǎng),在查找、更新、維護(hù)文件和數(shù)據(jù)時(shí)都比較困難。這時(shí)就引入了客房信息管理系統(tǒng),優(yōu)點(diǎn)如下:檢索迅速、查找方便、性高、成本低等。酒店在正常運(yùn)營(yíng)中需要對(duì)顧客信息、客房資源、結(jié)算情況進(jìn)行管理,利用客房信息管理系統(tǒng)能更好地了解信息的變更,提高了管理效率。1.2 課題要求可以對(duì)客房基本信息進(jìn)行增加、刪除、修改客房分為三種類型:三人房、雙人房、單人房,每種類型房間價(jià)位不同可以實(shí)現(xiàn)客戶訂房、退房、

8、續(xù)房功能可以登記、查詢客戶基本信息可以查詢房間狀態(tài)信息可以實(shí)現(xiàn)住宿計(jì)費(fèi)2 需求分析2.1 功能需求分析(1)作為酒店客房信息管理系統(tǒng),應(yīng)該具有增加、刪除、修改這幾個(gè)基本功能。所需錄入的表有客戶基本信息表、房間資源信息表、密碼表。(2)設(shè)計(jì)登陸后系統(tǒng)的主窗口,要求能夠顯示酒店管理信息。數(shù)據(jù)的增加、刪除、修改、查詢能直接放在桌面上供用戶選擇,而且要布局合理、美觀。應(yīng)當(dāng)減少用戶的鍵盤輸入,減少用戶的工作量,提高效率。2.2 數(shù)據(jù)需求分析圖2-1表2-1 數(shù)據(jù)項(xiàng)說(shuō)明表數(shù)據(jù)項(xiàng)名稱含義說(shuō)明類型長(zhǎng)度客人編號(hào)惟一標(biāo)識(shí)一位客人bigint10房間號(hào)惟一標(biāo)識(shí)一間客房int 10入住時(shí)間標(biāo)識(shí)入住時(shí)間datetime

9、10離開時(shí)間標(biāo)識(shí)離店時(shí)間datetime10單價(jià)標(biāo)識(shí)一間客房?jī)r(jià)格money10金額標(biāo)識(shí)總金額money10房間等級(jí)標(biāo)識(shí)房間類型smallint2 - 表2-2 數(shù)據(jù)流說(shuō)明表數(shù)據(jù)流名稱含義說(shuō)明來(lái)源去處組成登陸管理員進(jìn)入系統(tǒng)界面系統(tǒng)設(shè)置界面管理員端編號(hào)+密碼查詢已住房查詢房間資料客人信息表統(tǒng)計(jì)界面客人信息表+客房編號(hào)表查詢空房間查詢空房間客房編號(hào)表統(tǒng)計(jì)界面客房編號(hào)表結(jié)算計(jì)算總金額系統(tǒng)設(shè)置界面管理員端系統(tǒng)設(shè)置界面登記、刪除錄入、刪除住房信息管理員端系統(tǒng)設(shè)置界面系統(tǒng)數(shù)據(jù)庫(kù)統(tǒng)計(jì)統(tǒng)計(jì)住房信息系統(tǒng)數(shù)據(jù)庫(kù)統(tǒng)計(jì)界面系統(tǒng)數(shù)據(jù)庫(kù)表2-3 數(shù)據(jù)存儲(chǔ)說(shuō)明表數(shù)據(jù)存儲(chǔ)名稱含義說(shuō)明組成結(jié)構(gòu)客戶信息表存放客人相關(guān)信息個(gè)人信息+

10、入住時(shí)間+金額房間信息表存放客房的信息與狀態(tài)客房信息+客房等級(jí)管理員信息表存放管理員驗(yàn)證信息編號(hào)+密碼3 系統(tǒng)設(shè)計(jì)3.1 功能模塊設(shè)計(jì)登陸系統(tǒng)系統(tǒng)主界面用戶管理旅客信息管理客房情況查詢客房信息管理經(jīng)營(yíng)管理圖3-13.2 數(shù)據(jù)庫(kù)概念設(shè)計(jì)備注房間價(jià)格房間類型房間位置客房信息管理房號(hào)圖3-2真實(shí)XX名籍貫XX號(hào)手機(jī)號(hào)碼旅客信息管理性別圖3-3客房號(hào)入住編號(hào)證件號(hào)XX入住時(shí)間經(jīng)營(yíng)管理狀態(tài)入住天數(shù)押金圖3-4房間位置房間類型房號(hào)客房情況查詢房間價(jià)格使用情況圖3-4登錄名用戶真實(shí)XX主鍵排序碼用戶管理登錄次數(shù)電子郵箱圖3-5房間等級(jí)房間號(hào)單價(jià)證件號(hào)碼性別XX入住時(shí)間年齡證件名稱最大人數(shù)房間信息客戶信息離開

11、時(shí)間房間號(hào)金額NN管理管理 11 管理員信息密碼編號(hào)圖3-63.3 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)客戶信息(客房編號(hào),性別,年齡,證件,證件名稱);房間信息(房間號(hào),房間等級(jí),單價(jià),最大人數(shù),金額,離開時(shí)間,入住時(shí)間);管理員信息(編號(hào),密碼);3.4 數(shù)據(jù)庫(kù)物理設(shè)計(jì)1客戶信息create table 客戶信息(房間號(hào) varchar(5) not null primary key, varchar(8) not null, 性別 char(2) not null, 年齡 char(5) not null, 證件 varchar(20)not null, 證件名稱 varchar(10) not null);

12、 圖3-62.房間信息create table 房間信息(房間號(hào) varchar(10) not null primary key, 房間等級(jí) varchar(10) not null, 單價(jià) char(10) not null, 最大人數(shù) char(10) not null, 金額 char(10) not null, 入住時(shí)間 char(10) not null, 離開時(shí)間 char(10) not null);圖3-73.管理員信息create table 管理員信息(編號(hào) varchar(10) not null primary key,密碼 char(10)not null) ;圖3

13、-83.5 數(shù)據(jù)庫(kù)表間聯(lián)系圖3-9 數(shù)據(jù)庫(kù)表間聯(lián)系截圖4系統(tǒng)實(shí)現(xiàn) 4.1 登陸模塊實(shí)現(xiàn)Login類:登陸界面(用戶名+密碼),如果用戶名和密碼正確,則顯示成功登陸本窗體連接到數(shù)據(jù)庫(kù)中的管理員表通過(guò)定義ResultSet來(lái)調(diào)用表中的數(shù)據(jù),相關(guān)代碼:ResultSet rs;rs=stat.executeQuery(select * from 管理人員 where 編號(hào)=+tUser.getText()+and密碼=+String.valueOf(password.getPassword()+);判斷成功后實(shí)現(xiàn)主窗體中子菜單的setEnable()方法。4.2 登記模塊實(shí)現(xiàn)Add類:方便管理人員添

14、加新的客人信息,包括編號(hào)、性別、年齡、家庭地址、來(lái)自、客房名、工作單位、預(yù)入住時(shí)間、入住時(shí)間、離開時(shí)間、押金本窗體主要用到T-SQL語(yǔ)句中的insert into. VALUES語(yǔ)句,相關(guān)代碼:a1=+tName.getText().trim()+;a2=+tSex.getText().trim()+;a3=+tAge.getText().trim()+;a4=+tIdentication.getText().trim()+;a5=+tAddress.getText().trim()+;a6=+tWorkPlace.getText().trim()+;a7=+tFrom.getText().t

15、rim()+;a8=+tRoomNo.getText().trim()+;a9=+tWillIn.getText().trim()+;a10=+tIn.getText().trim()+;a11=+tLeave.getText().trim()+;int i = Integer.valueOf(tCash.getText().intValue();String b=insert into 客人信息 (客房編號(hào),性別,年齡,家庭住址,工作單位,來(lái)自地的地名,預(yù)定入住時(shí)間,入住時(shí)間,離店時(shí)間,押金) VALUES (+a8+,+a1+,+a2+,+a3+,+a4+,+a5+,+a6+,+a7+,+

16、a9+,+a10+,+a11+,+i+);stat=conn.prepareStatement(b);r=stat.executeUpdate();4.3 查詢模塊實(shí)現(xiàn)SearchForName類:可以需要查詢客人的信息本窗體主要用到JTable和連接客人信息表,相關(guān)代碼:stat=conn.createStatement();rs=stat.executeQuery(select ,性別,工作單位,客房編號(hào),入住時(shí)間 from 客人信息 where =+tName.getText()+);rs=stat.executeQuery(select ,性別,工作單位,客房編號(hào),入住時(shí)間 from

17、客人信息 where 客房編號(hào)=+tName.getText()+);5 代碼調(diào)試與功能測(cè)試5.1 測(cè)試方案系統(tǒng)測(cè)試是一個(gè)系統(tǒng)必須經(jīng)歷的過(guò)程,一個(gè)系統(tǒng)想要能滿足用戶需求,就必須經(jīng)過(guò)一套科學(xué)的、完善的測(cè)試。對(duì)于本系統(tǒng),我做了以下幾方面的測(cè)試:(1)數(shù)據(jù)合法性測(cè)試。這是對(duì)輸入的數(shù)據(jù)是否合法的一個(gè)測(cè)試。(2)數(shù)據(jù)一致性測(cè)試。在這個(gè)測(cè)試的過(guò)程中,我對(duì)數(shù)據(jù)進(jìn)行了添加、刪除、修改的操作,觀察界面上顯示的數(shù)據(jù)是否與操作的容相一致。(3)功能模塊測(cè)試。這個(gè)測(cè)試是對(duì)各個(gè)模塊是否能正常運(yùn)行的一個(gè)測(cè)試。5.2 測(cè)試結(jié)果圖5-1圖5-2圖5-3圖5-4圖5-5圖5-6圖5-76 收獲與體會(huì) 時(shí)間過(guò)的好快,兩個(gè)星期的實(shí)

18、訓(xùn)終于告一段落。這學(xué)期做的是數(shù)據(jù)庫(kù)實(shí)驗(yàn),老師很負(fù)責(zé)任,第一節(jié)課就把大家要做的任務(wù)分配好,并且每一步應(yīng)該做什么都很詳細(xì)地講解。但是盡管這樣,當(dāng)我自己開始做報(bào)告的時(shí)候,看到密密麻麻的步驟,我還是有點(diǎn)慌,怕自己完成不好。問(wèn)身邊的同學(xué),大家都有自己的任務(wù),不能給予幫助,所以還是得靠自己。于是慢慢靜下心來(lái),按照老師給的目錄一步步做,不理解的,多讀幾遍要求,總能搞懂。在鍵盤上一個(gè)字一個(gè)字地打出來(lái)的感覺(jué)很踏實(shí),因?yàn)槭亲约旱某晒T谧鯯QL的時(shí)候,問(wèn)題倒不是很大,書上都有概念知識(shí),不會(huì)的步驟看書上就能很快的解決。而且我發(fā)現(xiàn)平時(shí)都在學(xué)理論,但是到實(shí)踐的時(shí)候很多東西還是要自己摸索的,就像我上面要在SQL中建表,程

19、序中已經(jīng)標(biāo)注要顯示主鍵,但是執(zhí)行后表里一直都沒(méi)有出現(xiàn)那把小鑰匙,我操作了很久,最后才發(fā)現(xiàn),只要在表上直接設(shè)置就行,繞了好大一個(gè)彎,但是心里真的很開心。在JAVA部分就有點(diǎn)頭疼了,對(duì)我來(lái)說(shuō)這就是一個(gè)龐大的程序,不知道從何處下手,所以我想到了合作,找到一個(gè)和我做同樣項(xiàng)目的同學(xué),一起探討、磨合,程序最后也成型了,喜悅可想而知!這次實(shí)驗(yàn)后,我深刻地意識(shí)到實(shí)踐的重要性,平時(shí)老師說(shuō)的再多,書看的再多,沒(méi)動(dòng)手就什么都不是。在實(shí)踐過(guò)程中會(huì)遇到困難想放棄,但是每次都堅(jiān)持下來(lái)了,現(xiàn)在看看之前的兩周其實(shí)都不算什么。只要認(rèn)真踏實(shí)地一步步完成,不懂地自己摸索,有錯(cuò)誤不要緊,只要不放棄,總會(huì)有解決的那天。還有讓我收獲的就

20、是合作。當(dāng)然這是建立在互惠互利的基礎(chǔ)上的。一個(gè)人蒙頭做,很容易走進(jìn)死胡同,思維也變得狹隘,而且還會(huì)有挫敗感。可是合作了就不一樣了,大家都把自己的觀點(diǎn)說(shuō)出來(lái),很容易就會(huì)發(fā)現(xiàn)自己之前的不足在哪里了,然后加以改進(jìn)。合作的好處還有就是思考問(wèn)題會(huì)更全面,可以說(shuō)這是一件效率很高的事情,我也樂(lè)在其中!參考文獻(xiàn)1錢雪忠,王燕玲,林挺.數(shù)據(jù)庫(kù)原理與技術(shù)M.:清華大學(xué),2011.2 錢雪忠,羅海馳,國(guó)俊.數(shù)據(jù)庫(kù)原理與技術(shù)課程設(shè)計(jì)M.:清華大學(xué),2014.附錄附錄1源程序部分清單附錄1 源程序部分清單附錄1.1 登錄代碼package .plat.frame;import java.awt.event.Action

21、Event;import java.awt.event.ActionListener;import java.sql.Date;import java.text.ParseException;import java.text.SimpleDateFormat;import javax.swing.utton;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JTextField;import .plat.db.UtilHepler;impo

22、rt .plat.db.today;import .plat.model.checkInfo;import .plat.model.customerInfo;import .plat.model.roomBase;import .plat.service.checkService;import .plat.service.customerService;import .plat.service.roomBaseService;import .plat.view.AppMainFrame;import .plat.view.swing.MainPanel;public class AddChec

23、kDialog extends JDialog private static AddCheckDialog editdialog;private JTextField j1, j2, j3, j4, j5, j6, j7, j8;private JLabel jr1, jr2;private utton ensure, cancel;private boolean isedit;public static AddCheckDialog instance(String text) if (editdialog != null)editdialog.dispose();editdialog = n

24、ew AddCheckDialog(text);return editdialog;public AddCheckDialog(String text) super(AppMainFrame.instance(), text + 旅客, true);setLayout(null);setSize(420, 400);setLocationRelativeTo(null);editdialog = this;j1 = new JTextField();j2 = new JTextField();j3 = new JTextField();j4 = new JTextField();j5 = ne

25、w JTextField();j6 = new JTextField();j7 = new JTextField();j8 = new JTextField();/ JLabel j11 = new JLabel(入住編號(hào):);JLabel j21 = new JLabel(證件號(hào):);JLabel j31 = new JLabel(客房號(hào):);JLabel j41 = new JLabel(入住時(shí)間:);JLabel j51 = new JLabel(入住天數(shù):);JLabel j61 = new JLabel(押金);jr1 = new JLabel(續(xù)房天數(shù):);jr2 = new JL

26、abel(續(xù)房時(shí)間:);JLabel jlbto = new JLabel();ensure = new utton(確定);cancel = new utton(取消);/ j11.setBounds(60, 30, 85, 30);j21.setBounds(60, 60, 85, 30);j31.setBounds(60, 90, 85, 30);j41.setBounds(60, 120, 85, 30);j51.setBounds(60, 150, 85, 30);j61.setBounds(60, 180, 85, 30);jr1.setBounds(60, 210, 85, 30

27、);jr2.setBounds(60, 240, 85, 30);/ j1.setBounds(130, 30, 190, 30);j2.setBounds(130, 60, 190, 30);j3.setBounds(130, 90, 190, 30);j4.setBounds(130, 120, 190, 30);j5.setBounds(130, 150, 190, 30);j6.setBounds(130, 180, 190, 30);j7.setBounds(130, 210, 190, 30);j8.setBounds(130, 240, 190, 30);jlbto.setBou

28、nds(210, 86, 30, 40);ensure.setBounds(115, 260, 70, 40);cancel.setBounds(210, 260, 70, 40);/ add(j1);add(j2);add(j3);add(j4);add(j5);add(j6);add(j7);add(j8);add(jr1);add(jr2);add(j21);add(j31);add(j41);add(j51);add(j61);add(ensure);add(cancel);if (text = 入住登記) this.isedit = false; else this.isedit =

29、 true;cancel.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stubAddCheckDialog.instance().dispose(););ensure.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) if (isedit = true) / 編輯String

30、 jString = j7.getText();if (!UtilHepler.isNumeric(jString) JOptionPane.showMessageDialog(null, 天數(shù)必須是一個(gè)數(shù)字!);return;if (jString.equals() JOptionPane.showMessageDialog(null, 天數(shù)不能為空!);return;/checkInfo entity = getInfo();/if (entity = null)/return;checkInfo entity=new checkInfo();entity.setCheckId(Integ

31、er.parseInt(j1.getText();entity.setContinuedDay(Integer.parseInt(jString);entity.setStatus(1);/SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss );java.util.Date date = UtilHepler.StrToDate(j8.getText();entity.setContinuedTime(date);checkService service = new checkService();service.upd

32、ateCont(entity);Callback(續(xù)房成功!); else checkInfo entity = getInfo();if (entity = null)return;checkService service = new checkService();customerService customerService = new customerService();/ 新增時(shí)驗(yàn)證是否存在!customerInfo r = customerService.getEntityById(customerId, entity.getCustomerId() + );if (r = null

33、) JOptionPane.showMessageDialog(null, 該不存在,請(qǐng)先添加旅客個(gè)人基本信息!);return;roomBaseService roomBaseService = new roomBaseService();roomBase roomBase = roomBaseService.getEntityByValue(roomId, entity.getRoomId() + );if (roomBase = null) JOptionPane.showMessageDialog(null, 該房間號(hào)不存在!你想去此此房間?);return;if (roomBase.

34、getRoomStatus() = 1) JOptionPane.showMessageDialog(null, 該房間已有人住了!);return;service.insert(entity);Callback(訂房間成功 ,你的房間號(hào)為: + entity.getRoomId() + 位置在: + roomBase.getPoisition(););public void open(checkInfo entity) if (entity = null) this.isedit = false;j1.setVisible(false);jr1.setVisible(false);jr2.s

35、etVisible(false);j7.setVisible(false);j8.setVisible(false);j1.setText(0 + );/ j1.setEditable(false);j4.setText(today.getDate() + + today.getTime();j4.setEditable(false); else System.out.println(編輯checkid: + entity.getCheckId();j1.setText(entity.getCheckId() + );/ j1.setEditable(false);j2.setText(ent

36、ity.getCustomerId();j3.setText(entity.getRoomId() + );j4.setText(entity.getCheckInTime() + );j5.setText(entity.getCheckInDay() + );j6.setText(entity.getDepositmoney() + );j2.setEditable(false);j3.setEditable(false);j4.setEditable(false);j5.setEditable(false);j6.setEditable(false);j8.setText(today.ge

37、tDate() + + today.getTime();j8.setEditable(false);j7.setText(entity.getContinuedDay()+);ensure.setBounds(115, 300, 70, 40);cancel.setBounds(210, 300, 70, 40);this.isedit = true;setVisible(true);private checkInfo getInfo() if (j2.getText().equals() | j3.getText().equals() | j4.getText().equals() | j5

38、.getText().equals()| j6.getText().equals() JOptionPane.showMessageDialog(null, 你還有一些數(shù)據(jù)沒(méi)有填!);return null;if (!UtilHepler.isNumeric(j5.getText() JOptionPane.showMessageDialog(null, 入住天數(shù)必須是數(shù)字!);return null;if (!UtilHepler.isNumeric(j6.getText() JOptionPane.showMessageDialog(null, 押金必須是數(shù)字!);return null;

39、String customerId, roomId;int checkId = Integer.parseInt(j1.getText();customerId = j2.getText();roomId = j3.getText();System.out.println(j4.getText();SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss );java.util.Date date = UtilHepler.StrToDate(j4.getText();System.out.println(date.getT

40、ime();int checkInDay = Integer.parseInt(j5.getText();double depositmoney = Double.parseDouble(j6.getText();return new checkInfo(checkId, customerId, roomId, date, checkInDay, depositmoney);private void Callback(String text) AddCheckDialog.instance().dispose();MainPanel.instance().refresh();JOptionPa

41、ne.showMessageDialog(null, text);附錄1.2 查詢代碼 package .plat.db;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Type;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;impor

42、t java.sql.SQLException;import java.sql.Statement;import java.sql.Types;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import .plat.model.sysUser;/* * 注意利用查詢出數(shù)據(jù)庫(kù)的一條記錄映射到相應(yīng)的dao中,寫相應(yīng)的dao一定要注意字段,一定 * 要與數(shù)據(jù)庫(kù)的記錄字段相對(duì)應(yīng),大小寫可以忽略,但是字段不一致就返回錯(cuò)誤的數(shù)據(jù) * * private stati

43、c Object getValueFromRs(ResultSet rs, String fieldName, Type t) throws SQLException * 此接口有個(gè)小的問(wèn)題就是如果,獲取的字段值是空值或者為null,而你自己的需求就是想要獲取的字段為一個(gè) * 默認(rèn)的值,那就只需要客戶該寫這個(gè)方法,進(jìn)行判斷就可以 * author Administrator * */public class DBUtil /* * 對(duì)操作的數(shù)據(jù)庫(kù)回滾 * param con 對(duì)數(shù)據(jù)庫(kù)操作所得到的 */public static void rollBack(Connection con)try

44、con.rollback(); catch (SQLException e) e.printStackTrace();/* * * param con 數(shù)據(jù)庫(kù)jdbc * param sql 執(zhí)行的sql語(yǔ)句 * return 返回查詢的記錄數(shù),記錄存儲(chǔ)在集合List里面, * 里面的元素是集合Map,key是數(shù)據(jù)庫(kù)中的字段類型,value是 * 字段類型對(duì)應(yīng)的值 * throws SQLException */public static ListMap executeQuery(Connection con, String sql) throws SQLExceptionPreparedSt

45、atement pst = null;ResultSet rs = null;try pst = con.prepareStatement(sql);rs = pst.executeQuery();return getListFromRs(rs);finallycloseRs(rs);closePst(pst);/* * 執(zhí)行sql語(yǔ)句,把結(jié)果集存放到List集合里,集合的元素是dao對(duì)象 * param con 數(shù)據(jù)庫(kù)得到的 * param sql 執(zhí)行查詢的sql語(yǔ)句 * param c 把一條條記錄要映射的dao類中的對(duì)象中去 * return * throws SQLException

46、 */public static List executeQuery(Connection con, String sql, Class c) throws SQLExceptionPreparedStatement pst = null;ResultSet rs = null;try pst = con.prepareStatement(sql);rs = pst.executeQuery();return getListFromRs(rs, c);finallycloseRs(rs);closePst(pst);/* * 得到結(jié)果集存儲(chǔ)到list中 * param rs 查詢的結(jié)果集 *

47、return * throws SQLException */public static ListMap getListFromRs(ResultSet rs) throws SQLExceptionResultSetMetaData md = rs.getMetaData();/得到結(jié)果集列的屬性int columns = md.getColumnCount();/得到記錄有多少列int i;ListMap list = new ArrayListMap();while(rs.next()Map map = new HashMap();for(i = 0; i columns; i+)map

48、.put(md.getColumnName(i + 1), getValueByType(rs, md.getColumnType(i + 1), md.getColumnName(i + 1);list.add(map);return list;/* * * param rs 查詢的結(jié)果集 * param c 集合元素存放的dao對(duì)象 * return * throws SQLException */public static List getListFromRs(ResultSet rs, Class c) throws SQLExceptionList list = new ArrayL

49、ist();try while(rs.next()Object o = initObjectFromRsIfExist(rs, c);list.add(o); catch (IllegalAccessException e) e.printStackTrace(); catch (InstantiationException e) e.printStackTrace();return list;/* * * param rs 查詢的結(jié)果集 * param c 結(jié)果集一條記錄,而一條記錄所對(duì)應(yīng)的dao類 * return * throws SQLException */public static

50、 Object getFirstObjectFromRs(ResultSet rs, Class c) throws SQLExceptionObject o = null;try o = initObjectFromRsIfExist(rs, c); catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace();return o;/* * * param rs 查詢出來(lái)的結(jié)果集 * param type SQL type from java.

51、sql.Types * param name 數(shù)據(jù)庫(kù)記錄所對(duì)應(yīng)的字段名稱 * return 返回一條記錄的一個(gè)列值 * throws SQLException */private static Object getValueByType(ResultSet rs, int type, String name) throws SQLExceptionswitch(type)case Types.NUMERIC:return rs.getLong(name);case Types.VARCHAR:if(rs.getString(name)=null)return ;return rs.getStr

52、ing(name);case Types.DATE:if(rs.getDate(name)=null)return System.currentTimeMillis();return rs.getDate(name);case Types.TIMESTAMP:if(rs.getTimestamp(name)=null)return System.currentTimeMillis();return rs.getTimestamp(name).toString().substring(0,rs.getTimestamp(name).toString().length()-2);case Type

53、s.INTEGER:return rs.getInt(name);case Types.DOUBLE:return rs.getDouble(name);case Types.FLOAT:return rs.getFloat(name);case Types.BIGINT:return rs.getLong(name);default:return rs.getObject(name);/* * 查詢dao映射的字段是否在記錄在數(shù)據(jù)庫(kù)包含的字段 * param rs 查詢的記錄集 * param fieldName dao映射的字段 * return 如果包含在數(shù)據(jù)庫(kù)記錄集里面,返回true,

54、否則false * throws SQLException */private static boolean rsContainsFields(ResultSet rs, String fieldName) throws SQLExceptionResultSetMetaData md = rs.getMetaData();for(int i = 0; i md.getColumnCount(); i+)if(md.getColumnName(i + 1).equalsIgnoreCase(fieldName)return true;return false;/* * 這個(gè)函數(shù)與initObj

55、ectFromRsIfExist函數(shù)實(shí)現(xiàn)的功能是一樣,只是 * 沒(méi)有判斷dao中的字段是否與數(shù)據(jù)庫(kù)記錄所定義的字段是一樣的, * 沒(méi)有判斷時(shí)如果自己設(shè)置的dao字段與數(shù)據(jù)庫(kù)的字段不一致就會(huì)報(bào)異常 * param rs * param c * return * throws InstantiationException * throws SQLException * throws IllegalAccessException */private static Object initObjectFromRs(ResultSet rs, Class c) throws InstantiationEx

56、ception, SQLException, IllegalAccessExceptionObject o = c.newInstance();Method methods = o.getClass().getMethods();for(Method m: methods)if(m.getName().startsWith(set)try m.invoke(o, getParamValueFromRs(rs, m); catch (IllegalArgumentException e) throw new RuntimeException(IllegalArgumentException: +

57、 e + nMethods: + m.getName(); catch (InvocationTargetException e) throw new RuntimeException(InvocationTargetException: + e + nMethods: + m.getName();return o;/* * * 把數(shù)據(jù)庫(kù)的一條記錄映射到相應(yīng)的dao對(duì)象中, * 如果dao中的字段與數(shù)據(jù)庫(kù)字段不一致,返回的就是dao數(shù)據(jù)類型定義的默認(rèn)值 * 如:dao的字段long vehicleID;而數(shù)據(jù)庫(kù)的字段是vehicle_id,那么返回的 * 就定義的默認(rèn)值0. * param r

58、s 查詢的結(jié)果集 * param c 結(jié)果集一條記錄,而一條記錄所對(duì)應(yīng)的dao類 * return * throws SQLException * throws IllegalAccessException * throws InstantiationException */private static Object initObjectFromRsIfExist(ResultSet rs, Class c) throws SQLException, IllegalAccessException, InstantiationExceptionObject o = c.newInstance()

59、;/一條記錄的dao,新建對(duì)象Method methods = o.getClass().getMethods();/dao對(duì)象所有的方法String field;for(Method m: methods)/得到dao字段,如getRegdate,轉(zhuǎn)換成Regdatefield = m.getName().substring(3);/查詢dao映射的字段是否在記錄在數(shù)據(jù)庫(kù)包含的字段,dao方法對(duì)set開頭的方法進(jìn)行處理/因?yàn)橐獙⒔Y(jié)果集映射到dao里面if(m.getName().startsWith(set) & rsContainsFields(rs, field)try m.invoke

60、(o, getParamValueFromRs(rs, m); catch (IllegalArgumentException e) throw new RuntimeException(IllegalArgumentException: + e + nMethods: + m.getName(); catch (InvocationTargetException e) throw new RuntimeException(InvocationTargetException: + e + nMethods: + m.getName();return o;/* * * param rs 查詢的結(jié)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論