物流公司信息系統(tǒng)的實(shí)現(xiàn),信息管理論文_第1頁(yè)
物流公司信息系統(tǒng)的實(shí)現(xiàn),信息管理論文_第2頁(yè)
物流公司信息系統(tǒng)的實(shí)現(xiàn),信息管理論文_第3頁(yè)
物流公司信息系統(tǒng)的實(shí)現(xiàn),信息管理論文_第4頁(yè)
已閱讀5頁(yè),還剩31頁(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)介

物流公司信息系統(tǒng)的實(shí)現(xiàn),信息管理論文【題目】【第一章】【第二章】【第三章】【第四章】【第五章】物流公司信息系統(tǒng)的實(shí)現(xiàn)【第六章】【結(jié)論/以下為參考文獻(xiàn)】第5章系統(tǒng)實(shí)現(xiàn)由于系統(tǒng)包括基于web和基于C/S兩種構(gòu)造,在本文闡述經(jīng)過(guò)中將逐一介紹。首先介紹基于Web的軟件系統(tǒng)實(shí)現(xiàn)。5.1、基于Web的軟件系統(tǒng)實(shí)現(xiàn)5.1.1、用戶登陸功能實(shí)現(xiàn)系統(tǒng)定義了YHUser類、YHWareUser類、YHAdmin類、YHDepAdmin類用于支持與用戶相關(guān)的操作。YHUser是YHWareUser類、YHAdmin、YHDepAdmi的父類。YHUser是用來(lái)定義和獲取用戶基本信息的類,本系統(tǒng)的普通用戶角色中的用戶能夠直接使用YHUser類描繪敘述。YHWareUser繼承于YHUser類,用來(lái)定義和獲取普通用戶角色中的倉(cāng)儲(chǔ)用戶基本信息的類。YHAdmin繼承于YHUser類,用來(lái)定義和獲取系統(tǒng)管理員基本信息的類。YHDepAdmin繼承于YHUser類,用來(lái)定義和獲取部門信息管理員基本信息的類。由于系統(tǒng)在初始化時(shí)已經(jīng)建立了用戶,所以省略了用戶注冊(cè)功能,用戶初次使用本系統(tǒng),直接使用由企業(yè)郵件通知的用戶名和密碼即可登陸本系統(tǒng)。用戶初次成功登陸后,即可修改用戶密碼,用戶名不允許修改。在用戶登陸界面YHlogin.jsp上定義一個(gè)文本框和一個(gè)密碼框,用于用戶輸入用戶名和密碼,點(diǎn)擊登陸按鈕觸發(fā)action,由struts配置文件中定義的映射關(guān)系調(diào)用yhLoginCheck()方式方法。假如登陸成功,則將登陸用戶名存放在session中,通過(guò)GoUserUI()方式方法在baseinfor表中查找用戶角色,根據(jù)用戶角色跳轉(zhuǎn)到相關(guān)界面。當(dāng)用戶角色等于4時(shí)時(shí),表示這是一個(gè)普通用戶;等于3時(shí),表示這是一個(gè)具有倉(cāng)儲(chǔ)管理權(quán)限的普通用戶;等于2時(shí),表示該用戶是部門信息管理員;等于1時(shí),表示該用戶是系統(tǒng)管理員。用戶登陸流程圖如此圖5.1所示,系統(tǒng)登陸界面如此圖5.2所示,系統(tǒng)管理員界面如此圖5.3所示。圖5.1用戶登陸流程圖圖5.2用戶登陸界面〔index.jsp〕圖5.3系統(tǒng)管理員界面〔admin/index.jsp〕普通用戶、部門信息管理員和系統(tǒng)管理員的界面基本一致,除了導(dǎo)航欄與系統(tǒng)管理員相比缺少相應(yīng)的功能。5.1.2、企業(yè)基礎(chǔ)信息模塊實(shí)現(xiàn)現(xiàn)前階段的企業(yè)基礎(chǔ)信息模塊完成了企業(yè)員工的信息錄入和查詢工作。只要是系統(tǒng)的注冊(cè)用戶〔全體員工〕都能夠通過(guò)導(dǎo)航欄中的員工信息調(diào)用它。用戶能夠補(bǔ)充和修改自個(gè)的信息,能夠閱讀別人的信息。員工信息界面〔info/index.jsp〕如此圖5.4所示。圖5.4員工信息界面點(diǎn)擊自個(gè)的名字,進(jìn)入到信息編輯頁(yè)面inforedit.jsp,在該界面上能夠補(bǔ)充和修改個(gè)人信息;假如點(diǎn)擊了別人的名字,則能夠顯示出該員工的基本信息。5.1.3、倉(cāng)儲(chǔ)管理模塊實(shí)現(xiàn)用戶登陸后,具有倉(cāng)儲(chǔ)管理使用權(quán)限的用戶才能夠通過(guò)操作界面選擇倉(cāng)儲(chǔ)管理,在倉(cāng)儲(chǔ)管理頁(yè)面中,能夠看到入庫(kù)信息、出庫(kù)信息、還庫(kù)信息和庫(kù)存信息。倉(cāng)儲(chǔ)管理中所有的數(shù)據(jù)修改后,都通過(guò)wareDao類與數(shù)據(jù)庫(kù)進(jìn)行操作。在庫(kù)存列表界面〔warehouse/warelistall.jsp〕中選擇要入庫(kù)的產(chǎn)品名稱,點(diǎn)擊與該產(chǎn)品名對(duì)應(yīng)的入庫(kù)鏈接,進(jìn)入inStorage.jsp界面,調(diào)用wareList()方式方法,進(jìn)入wareList.jsp界面,顯示出與該產(chǎn)品相關(guān)的數(shù)據(jù),確認(rèn)入庫(kù)數(shù)據(jù)后點(diǎn)擊入庫(kù)按鈕,調(diào)用wareDao.insert()方式方法,將入庫(kù)信息插入storage_instocks表中。入庫(kù)管理功能的流程如此圖5.5所示。圖5.5入庫(kù)流程圖為了便于用戶操作,系統(tǒng)在庫(kù)存列表界面中顯示產(chǎn)品庫(kù)存數(shù)據(jù)的同時(shí),設(shè)置了入庫(kù)和出庫(kù)兩個(gè)鏈接,分別對(duì)于產(chǎn)品的入庫(kù)和出庫(kù)操作。與入庫(kù)處理一樣,在進(jìn)行出庫(kù)處理時(shí),首先在庫(kù)存列表界面〔warehouse/warelistall.jsp〕中選擇要出庫(kù)的產(chǎn)品名稱,點(diǎn)擊與該產(chǎn)品名對(duì)應(yīng)的出庫(kù)鏈接,進(jìn)入outStorage.jsp界面,調(diào)用wareList()方式方法,進(jìn)入wareList.jsp界面,顯示出與該產(chǎn)品相關(guān)的數(shù)據(jù),確認(rèn)出庫(kù)數(shù)據(jù)后點(diǎn)擊出庫(kù)按鈕,調(diào)用wareDao.insert()方式方法,將出庫(kù)信息插入storage_outstocks表中,并調(diào)用weareDao.delete()方式方法,將出庫(kù)數(shù)據(jù)從storage_instocks表中刪除。出庫(kù)管理功能的流程如此圖5.6所示。圖5.6出庫(kù)流程圖倉(cāng)儲(chǔ)管理牽涉的所有方式方法都定義在WareMan類中。庫(kù)存列表的界面顯示如此圖5.7所示。圖5.7庫(kù)存列表界面5.1.4、企業(yè)公告管理實(shí)現(xiàn)所有的用戶都能夠閱讀公告信息,但是只要部門信息管理員有權(quán)發(fā)布、修改和刪除信息。所有的公告都是根據(jù)提交部門分類的,公告發(fā)布后系統(tǒng)通過(guò)getDateTime()方式方法自動(dòng)記錄公告發(fā)布時(shí)間。最后由informDao.save()方式方法將數(shù)據(jù)保存到公告信息表inform中。使用informDao.find()查找公告信息,它的參數(shù)是一個(gè)字符串變量,能夠是部門名或all,假如是all則查找全部公告,在find()方式方法中調(diào)用了sort()根據(jù)時(shí)間降序序列對(duì)公告排序,再通過(guò)informView.show()方式方法在inform.jsp頁(yè)面上顯示。企業(yè)公告顯示界面如此圖5.8所示。圖5.8公告顯示界面5.2、企業(yè)聊天軟件的實(shí)現(xiàn)根據(jù)企業(yè)業(yè)務(wù)需要,系統(tǒng)提供一個(gè)工具軟件YH-Hello聊天軟件,該工具只限企業(yè)員工使用,員工能夠不受任何限制在所有員工范圍內(nèi)添加好友。企業(yè)員工默認(rèn)已經(jīng)注冊(cè)了用戶,用戶帳號(hào)是工作證號(hào),用戶昵稱為部門名-員工名,密碼為工作證號(hào)。用戶初次登陸后能夠修改昵稱和密碼,但昵稱必須保存原格式,且部門部分不允許改變,員工名能夠自行修改。YH-Hello聊天軟件是一個(gè)典型的Java程序,分為客戶端和服務(wù)器端,服務(wù)器端分為應(yīng)用服務(wù)器和數(shù)據(jù)服務(wù)器。在現(xiàn)有部署環(huán)境中,該聊天工具的服務(wù)器和本系統(tǒng)提供的基于B/S架構(gòu)的軟件系統(tǒng)部署在同樣的應(yīng)用服務(wù)器和數(shù)據(jù)服務(wù)器中。應(yīng)用服務(wù)器提供YH-Hello的服務(wù)界面,包括服務(wù)啟動(dòng)關(guān)閉等功能,并提供監(jiān)聽(tīng)端口,隨時(shí)響應(yīng)客戶端的請(qǐng)求。數(shù)據(jù)服務(wù)器使用mysql數(shù)據(jù)庫(kù)存儲(chǔ)用戶、密碼、昵稱、聊天信息等數(shù)據(jù)??蛻舳颂峁┑顷懡缑?、好友列表界面和聊天界面供用戶執(zhí)行操作,并使用線程與服務(wù)器進(jìn)行通信。在物流企業(yè)信息系統(tǒng)界面上提供調(diào)用YH-Hello聊天軟件的按鈕〔假如用戶使用默認(rèn)安裝途徑〕,用戶可以以從系統(tǒng)外直接調(diào)用該軟件。由于YH-Hello用于工作,所以在設(shè)計(jì)時(shí)簡(jiǎn)化了通用聊天類軟件的部分功能,如只考慮好友列表,而不考慮陌生人和黑名單的情形,在該軟件中,好友的定義是與該用戶工作相關(guān)的企業(yè)員工。5.2.1、程序包構(gòu)造設(shè)計(jì)服務(wù)器端由四個(gè)包構(gòu)成:com.yhhello.server.view是服務(wù)器端呈現(xiàn)包,包括YH-Hello服務(wù)器端的服務(wù)管理界面。com.yhhello.server.model是服務(wù)器端模型包,包括服務(wù)器端所有的業(yè)務(wù)邏輯。com.yhhello.server.db是服務(wù)器端數(shù)據(jù)庫(kù)操作包,用于數(shù)據(jù)庫(kù)的操作交互。mon是服務(wù)器端公共包,在客戶端也有同樣的包存在,用于保持服務(wù)器和客戶端的一致。服務(wù)器端包構(gòu)造如此圖5.9所示。圖5.9YH-Hello服務(wù)器端包圖客戶端也由四個(gè)包構(gòu)成:com.yhhello.client.view是客戶端呈現(xiàn)包,包括YH-Hello的登陸界面、好友列表界面和聊天界面。com.yhhello.client.model是客戶端模型包,包括客戶端所有的業(yè)務(wù)邏輯。com.yhhello.client.thread是客戶端線程包,用于處理通信線程以及管理線程類、好友列表類和聊天界面類。mon是客戶端公共包,在服務(wù)器端也有同樣的包存在,用于保持服務(wù)器和客戶端的一致??蛻舳税鼧?gòu)造如此圖5.10所示。圖5.10YH-Hello客戶端包圖5.2.2、客戶端設(shè)計(jì)與實(shí)現(xiàn)、客戶端界面1、客戶端登錄界面:YhCliLogin.java界面布局分析:界面能夠分為上、中、下三部分,上面是公司的圖片Logo,能夠定義一個(gè)JLabel對(duì)象Jltop,圖片Logo使用ImageIcon繪制;以下為一個(gè)JPanel的流布局,定義JPanel對(duì)象Jpfoot,在Jpfoot上提供兩個(gè)按鈕,分別定義JButton對(duì)象Jb1、Jb2,觸發(fā)登陸、取消事件,為了界面美觀,兩個(gè)按鈕都是使用ImageIcon繪制;中間是登陸界面的主體部分,能夠使用用戶名〔用戶昵稱〕和工作證號(hào)兩種方式登陸聊天,所以在登陸界面的主體部分由選項(xiàng)卡JTabbedPane對(duì)象Jt_switch1來(lái)對(duì)兩個(gè)不同的Jpanel對(duì)象〔一個(gè)用于用戶名登陸Jpm1,一個(gè)用于工作證號(hào)登陸Jpm2〕進(jìn)行切換。打開(kāi)登陸界面默認(rèn)顯示的是用戶名登陸。在Jpm1和Jpm2上都使用網(wǎng)格來(lái)布局,網(wǎng)格定義為3行3列,即GridLayout(3,3),在其上定義了6個(gè)控件來(lái)實(shí)現(xiàn)界面功能,華而不實(shí)包括3個(gè)JLabel對(duì)象,分別定義為文本用戶名〔Jpm2則為工作證號(hào)〕、密碼和忘記密碼;1個(gè)JTextField對(duì)象,定義用戶名輸入框〔Jpm2則為工作證號(hào)輸入框〕;1個(gè)JpasswordField對(duì)象,定義密碼輸入框;1個(gè)JCheckBox對(duì)象,定義為記住密碼。為了使用戶在點(diǎn)擊登陸后,觸發(fā)客戶端與服務(wù)器的連接,在登陸按鈕Jb1上添加addActionListener()方式方法用于響應(yīng)用戶點(diǎn)擊操作,定義actionPerformed()方式方法,在點(diǎn)擊登陸按鈕后開(kāi)創(chuàng)建立一個(gè)YhCliUser對(duì)象和一個(gè)User對(duì)象,User對(duì)象中分別使用getText()和getPassword()獲得登陸時(shí)使用的用戶名和密碼。然后使用checkCliUser(Userur)方式方法判定結(jié)果能否為真,為真則表示能夠跳轉(zhuǎn)到好友列表界面并使用dispose()方式方法關(guān)閉登陸界面。假如為假,則使用JOptionPane.ShowMessageDialog()方式方法彈出一個(gè)對(duì)話框表示用戶名與密碼不一致,請(qǐng)重新登陸!假如用戶成功登陸,則跳轉(zhuǎn)到該用戶的好友列表界面,所以在點(diǎn)擊Jb1的同時(shí),還要發(fā)送一個(gè)要求返回在線好友信息的YhMessage包。設(shè)計(jì)步驟如下:1.判定能否點(diǎn)擊了Jb1按鈕,假如是則發(fā)送一個(gè)要求返回所有在線好友的信息包,為了能保存返回的好友信息,首先開(kāi)創(chuàng)建立一個(gè)YhFriList對(duì)象friList,該對(duì)象的參數(shù)是發(fā)出請(qǐng)求客戶端的用戶名,使用getUser()方式方法獲得,getUser()在mon包中User類中定義;傳遞客戶端用戶名的目的是告訴服務(wù)器要找誰(shuí)的好友列表;2.使用YhManFriList類中的addFriList()方式方法把好友信息添加到friList;3.開(kāi)創(chuàng)建立一個(gè)YhMessage對(duì)象,定義它的發(fā)送者是本客戶端,信息類型是請(qǐng)求在線好友類型Mess_get_onLinFri;4.使用對(duì)象流的方式方法發(fā)送YhMessage。YH-Hello客戶端登陸界面如此圖5.11所示。圖5.11YH-Hello登陸界面2、好友列表:用戶登陸成功后,調(diào)用好友列表界面:YhFriList.java界面布局分析:界面整個(gè)是一個(gè)JpanelBorderLayout布局,上面是一個(gè)JLabel,定義文本好友列表,下面部分是一個(gè)JScrollpane控件,在其上放置了JpanelGridLayout布局,初始化一個(gè)JLabel數(shù)組用來(lái)顯示用戶名和頭像。由于想要鼠標(biāo)移動(dòng)到用戶時(shí)出現(xiàn)高亮效果,則對(duì)每一個(gè)JLable做一個(gè)addMouseListener監(jiān)聽(tīng),并在mouseEntered()方式方法中,定義一個(gè)JLabel對(duì)象JLa,使之初始化為arg0.getSource(),并設(shè)置其前景色。使用同樣的方式方法在mouseExited()中恢復(fù)原有的前景色,即可產(chǎn)生鼠標(biāo)移動(dòng)時(shí)的高亮效果。另外,當(dāng)鼠標(biāo)雙擊某一用戶時(shí),彈出聊天界面,則在mouseClicked()方式方法中首先通過(guò)arg0.getSource().getText()得到用戶名,并賦值給string變量uname;然后開(kāi)創(chuàng)建立一個(gè)YhChat(string)對(duì)象〔該對(duì)象在YhChat.java中定義〕,將uname傳入。當(dāng)一個(gè)用戶成功登陸后,向服務(wù)器發(fā)送一個(gè)Mess_get_onLinFri類型的YhMessage,向服務(wù)器請(qǐng)求他的所有好友信息;服務(wù)器接到請(qǐng)求后,向客戶端發(fā)送一個(gè)Mess_retu_onLinFri類型的YhMessage,返回該客戶端所有的好友信息。系統(tǒng)默認(rèn)初始情況下YhFriList定義只要該用戶自個(gè)在線,別人都不在線,在獲得服務(wù)器的響應(yīng)后,需要更新客戶端的好友列表。定義updateFriend(YhMessagem)方式方法來(lái)執(zhí)行更新操作。設(shè)計(jì)思路是:定義一個(gè)字符串?dāng)?shù)組onLinFri[]來(lái)保存由m中獲得的好友名。當(dāng)點(diǎn)擊好友列表中的某個(gè)用戶時(shí),會(huì)從YhFriList.java跳轉(zhuǎn)到Y(jié)hChat.java,即聊天界面。為了獲取當(dāng)下用戶,則在mouseClicked()方式方法中開(kāi)創(chuàng)建立一個(gè)YhChat(friusid,uName)對(duì)象,string類型的firusid中儲(chǔ)存的是已經(jīng)在mouseClicked()方式方法中獲得的好友用戶名。另外要在好友列表的標(biāo)題欄中顯示當(dāng)下用戶的用戶名,則在構(gòu)造函數(shù)中添加一個(gè)參數(shù)stringuName。在開(kāi)創(chuàng)建立了聊天界面后,根據(jù)程序設(shè)計(jì)邏輯,要把它參加到聊天界面管理類YhManChat中,使用YhManChat.addChat()方式方法添加。好友列表界面如此圖5.12所示。圖5.12好友列表界面3、聊天界面YhChat.java界面布局分析:包括一個(gè)JTextArea對(duì)象用于顯示聊天內(nèi)容,一個(gè)Jpannel對(duì)象,在Jpannel對(duì)象上有一個(gè)JTextField對(duì)象用于輸入聊天信息和一個(gè)JButton對(duì)象的發(fā)送按鈕。由于在聊天界面的標(biāo)題上要顯示正在與誰(shuí)聊天的信息,為了能夠獲取當(dāng)下聊天對(duì)象,在構(gòu)造函數(shù)YhChat(Stringfriusid,StringuName)中定義兩個(gè)參數(shù)。friusid表示與誰(shuí)聊天,uName表示我是誰(shuí)。監(jiān)聽(tīng)發(fā)送按鈕Jb,假如用戶點(diǎn)擊了發(fā)送按鈕,則做如下處理:1、開(kāi)創(chuàng)建立一個(gè)YhMessage對(duì)象m1,在YhMessage類中有私有成員變量sender用于表示發(fā)送信息的人,getter表示接收信息的人,content用于表示信息內(nèi)容。使用m1.setSender()、m1.setGetter()和m1.setContent()分別獲取它們的值。其中m1.setSender()獲取的是uName的值;m1.setGetter()獲取的是friusid的值;m1.setContent()獲取的是JTextField對(duì)象jtf1中輸入的字符串,使用jtf1.getText()方式方法即能夠獲得。2、將獲得的信息m1發(fā)送給服務(wù)器。開(kāi)創(chuàng)建立一個(gè)objectOutputStream對(duì)象,并使用writeObject(m1)方式方法將m1發(fā)送給服務(wù)器。另外,為了在聊天界面的JTextArea對(duì)象Jta中不停的讀取YhMessage對(duì)象數(shù)據(jù),定義run()方式方法并循環(huán)執(zhí)行它。在run()方式方法中能夠獲得YhMessage對(duì)象m1中發(fā)信人、收信人和信息內(nèi)容,通過(guò)一個(gè)String類型的變量dialogue,對(duì)其賦值為m1.getSender()+對(duì)+m1.getGetter()+講:+m1.getContent()+\r\n,然后使用Jta.append(dialogue)將dialogue添加到Jta中,則能夠通過(guò)聊天界面逐一顯示每一條聊天信息。格式如下:業(yè)務(wù)部-Lesley對(duì)業(yè)務(wù)部-小貓講:你好!聊天界面如此圖5.13所示。圖5.13聊天界面、客戶端業(yè)務(wù)邏輯客戶端的業(yè)務(wù)邏輯層包括兩個(gè)包,com.yhhello.client.model和com.yhhello.client.thread。之所以分為兩個(gè)包,主要考慮線程和管理在客戶端的業(yè)務(wù)邏輯中是比擬復(fù)雜和重要的部分,所以將與它們相關(guān)的業(yè)務(wù)邏輯單獨(dú)定義了一個(gè)包。另外在調(diào)用關(guān)系上,兩個(gè)包固然都在業(yè)務(wù)邏輯層,但有層次上的區(qū)別。YhCliConSer.java位于com.yhhello.client.model包,是客戶端后臺(tái)程序,用于與服務(wù)器端交互。YhCliConSer類定義了客戶端發(fā)送信息給服務(wù)器的方式方法。YH-Hello客戶端發(fā)送給服務(wù)器的信息內(nèi)容能夠分為兩類:一類是用戶登陸信息;另一類是聊天信息,即當(dāng)用戶登陸后直至用戶退出軟件,發(fā)送的都是聊天信息。基于這兩類信息的不同,定義了YhCliconLogin()方式方法和YhClicon()方式方法,分別應(yīng)用于初次連接〔即登陸連接〕和其它連接〔非登陸連接〕,它們的參數(shù)都是一個(gè)對(duì)象類型。YhCliconLogin(objecto)方式方法設(shè)計(jì)思路:1、定義一個(gè)Socket對(duì)象sc,定義服務(wù)器IP地址和監(jiān)聽(tīng)端口,監(jiān)聽(tīng)端口必須與服務(wù)器端com.YHhello.server.model包中的YhSerVerify類中定義的監(jiān)聽(tīng)端口一致。2、開(kāi)創(chuàng)建立一個(gè)objectOutputStream對(duì)象,并使用writeObject()將對(duì)象發(fā)出。3、使用InputStream()方式方法接收信息,接收的信息是一個(gè)object對(duì)象,將該對(duì)象轉(zhuǎn)換為YhMessage對(duì)象。4、判定返回的信息類型,在MessType類中定義了YH-Hello最常見(jiàn)的信息包類型接口,與本段程序相關(guān)的有:假如信息類型=1,表示登陸成功確認(rèn)包〔mess_succ〕;信息類型=2,表示登陸失敗確認(rèn)包〔mess_fail〕。5、由于YhCliconLogin用于登陸連接,所以定義當(dāng)信息類型等于1時(shí),YhCliconLogin()返回true,并開(kāi)創(chuàng)建立一個(gè)該客戶端與服務(wù)器通信的線程,步驟如下:(1)開(kāi)創(chuàng)建立一個(gè)YhCliConSerThr對(duì)象〔sc是它的參數(shù)〕,然后啟動(dòng)該線程。(2)將該線程參加到線程管理類YhManCliSerThr中,該類中定義了addCliConSerThr方式方法能夠添加線程。YhClicon(objecto)方式方法相對(duì)來(lái)講比擬簡(jiǎn)單,定義socket通信即可。YhCliUser.java位于com.yhhello.client.model包,它定義了一個(gè)boolean類型的方式方法checkCliUser(Userur),該方式方法的參數(shù)是一個(gè)User對(duì)象〔在公共包中定義〕,用于驗(yàn)證用戶能否合法,在該方式方法中調(diào)用YhCliconLogin方式方法。YhCliConSerThr.java文件位于com.yhhello.client.thread包中,它用于定義客戶端連接服務(wù)器端線程。開(kāi)創(chuàng)建立線程的關(guān)鍵是將socket對(duì)象傳進(jìn)來(lái),因而在定義構(gòu)造函數(shù)時(shí),使之帶有一個(gè)Socket類型的參數(shù)。只要客戶端和服務(wù)器通信,就一定會(huì)使用YhCliConSerThr,在該類中定義了run()方式方法用于不停的讀取服務(wù)器端發(fā)來(lái)的信息。run()方式方法設(shè)計(jì)思路如下:1、定義一個(gè)YhMessage對(duì)象m用于保存從s.getInputStream()中讀取的信息。s是一個(gè)socket對(duì)象,實(shí)際上我們獲取的信息是一個(gè)對(duì)象流,要把它強(qiáng)迫轉(zhuǎn)換成YhMessage對(duì)象。2、根據(jù)獲取消息包的類型進(jìn)行相應(yīng)的處理。(1)假如消息類型是mess_content,則把它顯示在聊天界面上。(2)假如消息類型是mess_get_onLinFri,則更新好友列表。YhManCliConSerThr.java文件位于com.yhhello.client.thread包中,它用于管理客戶端線程。使用HashMap存儲(chǔ)所有的線程,它的K值是用戶帳號(hào),V值是YhCliConSerThr類型的線程。對(duì)它提供addCliConSerThr()方式方法和getCliConserThr()方式方法用于將線程參加到HashMap和通過(guò)用戶帳號(hào)獲得該線程。YhManChat.java文件位于com.yhhello.client.thread包中,它用于管理聊天界面。設(shè)計(jì)思路與其它管理類基本一致,將所有的聊天界面存儲(chǔ)到HashMap中,并提供參加addChat(Stringchatid,YhChatyhchat)和取出getChat(Stringchatid)兩個(gè)方式方法。YhManFriList.java文件位于com.yhhello.client.thread包中,它用于管理好友列表。設(shè)計(jì)思路同上,將所有的好友信息存入HashMap,提供參加addFriList(Stringyhfrid,YhFriListyhfrilist)和取出getFriList(Stringyhfrid)兩個(gè)方式方法。5.2.3、服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn)、服務(wù)器端界面服務(wù)器主界面YhSerMainpage.java,它在com.yhhello.server.view包中。界面分析:服務(wù)器主界面的功能是通過(guò)該界面能夠啟動(dòng)和關(guān)閉服務(wù)器:為了實(shí)現(xiàn)這一功能,在界面上定義兩個(gè)JButton對(duì)象Jb1和Jb2,分別對(duì)應(yīng)啟動(dòng)服務(wù)器和關(guān)閉服務(wù)器按鈕,這兩個(gè)按鈕放在一個(gè)Jpanel上。在Jb1上做監(jiān)聽(tīng),一旦點(diǎn)擊了Jb1按鈕,即便用getSource()獲得的值等于Jb1,則開(kāi)創(chuàng)建立YhSerVerify對(duì)象,啟動(dòng)服務(wù)器;當(dāng)getSource()獲得的值等于Jb2,執(zhí)行System.exit(0)關(guān)閉服務(wù)器。界面呈現(xiàn)如此圖5.14所示:圖5.14服務(wù)器界面、服務(wù)器端業(yè)務(wù)邏輯在服務(wù)器的業(yè)務(wù)邏輯層包括3個(gè)主要類,分別是:YhSererify:服務(wù)器后臺(tái)程序,所謂的啟動(dòng)服務(wù)器就是調(diào)用該程序。它提供驗(yàn)證客戶端的功能。YhSerConCli:服務(wù)器連接客戶端的線程,每個(gè)客戶端連接服務(wù)器都會(huì)為它開(kāi)創(chuàng)建立一個(gè)線程。YhSerManCli:管理服務(wù)器連接客戶端的線程。業(yè)務(wù)邏輯層的所有操作都部署在com.YHhello.server.model包中。服務(wù)器后臺(tái)程序YhSerVerify.java用于監(jiān)聽(tīng)客戶端能否有連線請(qǐng)求并驗(yàn)證用戶信息。程序設(shè)計(jì)思路如下:1.開(kāi)創(chuàng)建立ServerSocket對(duì)象ss,定義監(jiān)聽(tīng)端口;2.發(fā)現(xiàn)能否有堵塞,假如有則表示服務(wù)器與客戶端之間存在連接,假如沒(méi)有則表示如今是等待連接階段。使用accept()方式方法判定能否存在堵塞;3.接收客戶端發(fā)送的信息,在本程序中,客戶端和服務(wù)器端在網(wǎng)絡(luò)上以對(duì)象流的方式傳遞信息。將getInputStream()獲得的信息轉(zhuǎn)換為User類型,使用readObject()讀取User對(duì)象,此時(shí)的User對(duì)象中包括的是用戶名和密碼信息。4.com.yhhello.server.db包中的YhSerConDb類定義了數(shù)據(jù)庫(kù)的操作,調(diào)用該類中定義的方式方法驗(yàn)證用戶名和密碼能否正確。假如正確,則setMessType(1)。反之則返回2。在包中的YhMessage類中定義,1表示登陸成功;2則表示登陸失敗。將信息類型使用writeObject()方式方法返回客戶端。5.開(kāi)創(chuàng)建立YhSerConCli對(duì)象scc1,并通過(guò)YhSerManCli類中addCliThread()為連接的客戶端開(kāi)拓scc1線程,使用start()方式方法啟動(dòng)線程,使用notifyOUser()通知其它在線用戶。scc1線程能夠保持服務(wù)器和該客戶端之間的通信。6.循環(huán)執(zhí)行2-5步,為每個(gè)連接的客戶端開(kāi)拓一個(gè)線程。在YhSerVerify的程序流程中,我們能夠看到Y(jié)hSerConCli和YhSerManCli兩個(gè)類起到了重要的作用。YhSerConCli.java文件中定義了服務(wù)器與某個(gè)特定的客戶端的通信線程,它的構(gòu)造函數(shù)中的參數(shù)是一個(gè)Socket對(duì)象,傳遞該參數(shù)的目的是獲得服務(wù)器與該客戶端的連接。YhSerConCli.java主要由run()方式方法和notifyOUser()方式方法組成。run()方式方法用來(lái)接收和轉(zhuǎn)發(fā)客戶端發(fā)來(lái)的信息。程序設(shè)計(jì)思路如下:1.從Socket中讀取YhMessage,獲得的YhMessage是由object類型轉(zhuǎn)換而來(lái)的。2.通過(guò)YhMessage類中定義的getSender()、getGetter()和getCon()方式方法獲取發(fā)送者、接收者和信息內(nèi)容。3.根據(jù)YhMessage類對(duì)從客戶端獲取的消息進(jìn)行類型判定:(1)假如該消息的類型為Mess_content,則表示這是一個(gè)聊天信息包。此時(shí)服務(wù)器要將這個(gè)YhMessage對(duì)象轉(zhuǎn)發(fā)給接收者,步驟如下:1)先獲得接收者的通信線程,它由YhSerManCli類中g(shù)etCliThr(m1.getGetter())方式方法獲得,m1是YhMessage對(duì)象。2)獲得接收者的通信線程后,以對(duì)象流的方式轉(zhuǎn)發(fā)m1。(2)假如該消息的類型為Mess_get_onLinFri,則表示這是一個(gè)請(qǐng)求在線好友的信息包。此時(shí)服務(wù)器要將把該客戶端的所有好友發(fā)送給該客戶端,步驟如下:1)調(diào)用YhSerManCLi類中的getAllUser()得到所有好友名;2)開(kāi)創(chuàng)建立一個(gè)YhMessage對(duì)象m2,設(shè)置它的類型是Mess_retu_onLinFri〔該類型表示這是一個(gè)返回在線好友信息包〕;內(nèi)容為好友名;接收者是m1.getSender(),即m2.setGetter(m1.getSender()),即此時(shí)的接收者就是向服務(wù)端發(fā)出請(qǐng)求的客戶端;3)以對(duì)象流的方式轉(zhuǎn)發(fā)m2。以上是run()方式方法的主要功能和設(shè)計(jì)思路,另外一個(gè)重要的方式方法notifyOUser()的功能是通知其它用戶,有一個(gè)客戶端連接了服務(wù)器。程序描繪敘述如下:1.首先得到所有在線的用戶線程,我們使用HashMap保存服務(wù)器上開(kāi)拓的所有線程。Hashmap使用迭代的方式方法遍歷它的key值,進(jìn)而獲得所有的在線用戶,即Iteratorit1=hm.keySet().iterator();2.當(dāng)it1.hasNext()為真時(shí),表示這是一個(gè)在線用戶的線程。我們定義一個(gè)YhMessage對(duì)象,設(shè)置該YhMessage對(duì)象的類型是Mess_retu_onLineFri,即返回在線好友包〔關(guān)于YhMessage的各種定義在YhMessage.java中提到〕,并取出在線用戶的名字,將其設(shè)置為該YhMess

溫馨提示

  • 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)論