版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 大學(xué)生宿舍管理系統(tǒng)(聊天室等模塊)設(shè)計(jì)與實(shí)現(xiàn)</p><p> 論文作者姓名:</p><p> 申請(qǐng)學(xué)位專(zhuān)業(yè):軟件工程</p><p> 申請(qǐng)學(xué)位類(lèi)別:工學(xué)學(xué)士</p><p> 指導(dǎo)教師姓名(職稱(chēng)):</p><p> 論文提交日期:2014年05月25日</p><p&g
2、t; 大學(xué)生宿舍管理系統(tǒng)(聊天室等模塊)設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 摘 要</b></p><p> 大學(xué)生宿舍管理是高校教育管理中極其重要的一部分,良好的宿舍管理對(duì)加強(qiáng)校風(fēng)校紀(jì)建設(shè),創(chuàng)造整潔、寧?kù)o、清新的學(xué)習(xí)生活環(huán)境,保證教學(xué)活動(dòng)的順利進(jìn)行有著十分積極的影響。隨著科學(xué)技術(shù)不斷提高,計(jì)算機(jī)技術(shù)成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識(shí),使用計(jì)算機(jī)對(duì)高校宿舍
3、信息,宿舍內(nèi)的學(xué)生檔案信息以及水電費(fèi)、紀(jì)律評(píng)分等信息進(jìn)行管理,具有手工操作無(wú)法比擬的優(yōu)點(diǎn)。它有著檢索迅速,查找方便,存儲(chǔ)量大,保密性好,成本低等諸多特點(diǎn)。一個(gè)優(yōu)秀的宿舍管理系統(tǒng)能夠滿(mǎn)足各種對(duì)宿舍的管理需求,給高校學(xué)生宿舍管理工作帶來(lái)極大的便利。</p><p> LINUX操作系統(tǒng)沿襲了UNIX的系統(tǒng)架構(gòu),有著安全與穩(wěn)定的特點(diǎn),在這方面非WINDOWS操作系統(tǒng)可比擬,所以將宿舍管理系統(tǒng)的服務(wù)器架設(shè)在LINUX系
4、統(tǒng)下無(wú)疑是最優(yōu)的選擇。另外,LINUX作為自由和開(kāi)放源碼的計(jì)算機(jī)操作系統(tǒng),適合大學(xué)生和高校管理人員進(jìn)行學(xué)習(xí)和使用,制作一個(gè)可在LINUX操作系統(tǒng)下運(yùn)行的圖形界面應(yīng)用程序能讓用戶(hù)在使用管理系統(tǒng)時(shí)更加方便。</p><p> 本系統(tǒng)選擇了QT這一跨平臺(tái)的C++圖形界面應(yīng)用程序框架,來(lái)開(kāi)發(fā)宿舍管理系統(tǒng)的客戶(hù)端程序,并調(diào)用LINUX系統(tǒng)庫(kù)實(shí)現(xiàn)在LINUX操作系統(tǒng)下的高效運(yùn)行。</p><p>
5、 關(guān)鍵詞:宿舍管理系統(tǒng);LINUX;數(shù)據(jù)庫(kù);QT </p><p> College students dormitory management system (Chat rooms and other modules)design and implementation</p><p><b> Abstract</b></p><p>
6、 University students’ dormitory management is a very important part of the higher education management, good dormitory management has a positive impact to strengthen ethos and disciplines construction; as well as build t
7、he clean, quiet, fresh study environment and make sure the teaching activities carried out successfully. With the development of the science and technology, computer technology become more and more mature, and its powerf
8、ul features are already well known by most people, using comp</p><p> LINUX operation system extends the structure of UNIX, its safety and reliability are much advanced than the Windows system. So setting u
9、p the server of dormitory management system on LINUX system is the beast choice. What’s more, as a free and open-source operation system, it is also the optimal one for university students and managers to learn and use.
10、Building a Graphic User Interface (GUI) for the dormitory management system under LINUX can facilitate the user operation.</p><p> This system adopts a multi-platform C++ GUI application framework-- QT to d
11、evelop the clients’ side of dormitory management system, and calls for the LINUX’s system library to achieve the high efficiency under LINUX.</p><p> Key words: Dormitory management system ;Linux;Database;Q
12、t</p><p><b> 目 錄</b></p><p><b> 論文總頁(yè)數(shù):31頁(yè)</b></p><p><b> 1引 言1</b></p><p> 1.1 課題背景1</p><p> 1.2 本課題研究的意義1<
13、;/p><p> 1.3 研究方法2</p><p> 1.4 QT與QT Creator簡(jiǎn)介2</p><p> 1.5 Oracle 10g 與 Pro*c簡(jiǎn)介2</p><p> 2系統(tǒng)的需求分析3</p><p> 2.1 總體功能分析3</p><p> 2.2 服
14、務(wù)器端分析3</p><p> 2.3 客戶(hù)端分析4</p><p> 3宿舍管理模塊-服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)5</p><p> 3.1 服務(wù)器總體設(shè)計(jì)5</p><p> 3.1.1 主線程設(shè)計(jì)6</p><p> 3.1.2 子線程設(shè)計(jì)7</p><p> 3.2 數(shù)
15、據(jù)庫(kù)設(shè)計(jì)9</p><p> 3.3 賬戶(hù)管理功能—服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)9</p><p> 3.3.1 添加賬戶(hù)與刪除賬戶(hù)9</p><p> 3.3.2 查看賬戶(hù)與修改賬戶(hù)10</p><p> 3.4 學(xué)生管理功能—服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)11</p><p> 3.4.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)11&l
16、t;/p><p> 3.4.2 添加學(xué)生與刪除學(xué)生12</p><p> 3.4.3 修改學(xué)生13</p><p> 3.4.4 查看學(xué)生13</p><p> 3.5 寢室管理功能—服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)14</p><p> 3.5.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)14</p><p> 3
17、.5.2 添加寢室學(xué)生15</p><p> 3.5.3 刪除寢室學(xué)生16</p><p> 3.5.4 寢室紀(jì)律評(píng)分17</p><p> 3.5.5 增加寢室與查看寢室17</p><p> 4公共聊天室的設(shè)計(jì)與實(shí)現(xiàn)18</p><p> 4.1 公共聊天室簡(jiǎn)介18</p>&
18、lt;p> 4.2 聊天室的總體設(shè)計(jì)18</p><p> 4.2.1 服務(wù)器總體設(shè)計(jì)19</p><p> 4.2.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)19</p><p> 4.2.3 客戶(hù)端總體設(shè)計(jì)19</p><p> 4.2.3 客戶(hù)端程序流程圖20</p><p> 4.3 用戶(hù)登錄與顯示在線用戶(hù)的
19、設(shè)計(jì)與實(shí)現(xiàn)20</p><p> 4.3.1 用戶(hù)登錄—客戶(hù)端20</p><p> 4.3.2 用戶(hù)登錄—服務(wù)器21</p><p> 4.3.3 顯示當(dāng)前在線用戶(hù)21</p><p> 4.3.4 動(dòng)態(tài)修改在線用戶(hù)22</p><p> 4.4 文本格式與表情的設(shè)計(jì)與實(shí)現(xiàn)23</p>
20、;<p> 4.4.1 設(shè)置文字的字體與顏色23</p><p> 4.4.2 設(shè)置聊天表情23</p><p> 4.5 發(fā)送與接收聊天信息的設(shè)計(jì)與實(shí)現(xiàn)24</p><p> 4.5.1 發(fā)送聊天信息24</p><p> 4.5.2 接收聊天信息25</p><p><b&g
21、t; 5系統(tǒng)測(cè)試26</b></p><p> 5.1 測(cè)試環(huán)境26</p><p> 5.2 測(cè)試方式26</p><p> 5.3 測(cè)試及結(jié)果26</p><p><b> 結(jié) 語(yǔ)28</b></p><p><b> 參考文獻(xiàn)29<
22、/b></p><p><b> 致 謝30</b></p><p><b> 聲 明31</b></p><p><b> 引 言</b></p><p><b> 1.1 課題背景</b></p><p
23、> 學(xué)生宿舍管理對(duì)于一個(gè)學(xué)校來(lái)說(shuō)是必不可少的組成部分。目前好多學(xué)校還停留在宿舍管理人員手工記錄數(shù)據(jù)的最初階段,手工記錄對(duì)于規(guī)模小的學(xué)校來(lái)說(shuō)勉強(qiáng)還可以接受,但對(duì)于學(xué)生人數(shù)比較龐大,需要記錄存檔的數(shù)據(jù)比較多的高校來(lái)說(shuō),人工記錄是相當(dāng)麻煩的。而且當(dāng)查找某條記錄時(shí),由于數(shù)據(jù)量龐大,還只能靠人工去逐條查找,這樣不但麻煩還浪費(fèi)了許多時(shí)間,效率也比較低。當(dāng)今社會(huì)是飛速進(jìn)步的世界,原始的記錄方式已經(jīng)被社會(huì)所淘汰,計(jì)算機(jī)化管理正是適應(yīng)時(shí)代的產(chǎn)物。
24、世界永遠(yuǎn)不會(huì)是一個(gè)平靜的世界,當(dāng)一種技術(shù)不能滿(mǎn)足需求時(shí),就會(huì)有新的技術(shù)誕生并且取而代之。21世紀(jì),電子科學(xué)技術(shù)在世界占著主流地位,計(jì)算機(jī)在各行各業(yè)中的運(yùn)用已經(jīng)得到普及,自動(dòng)化的管理越來(lái)越廣泛應(yīng)用于各個(gè)領(lǐng)域。我們針對(duì)如此,設(shè)計(jì)了一套學(xué)生宿舍管理系統(tǒng)。學(xué)生宿舍管理系統(tǒng)采用的是計(jì)算機(jī)化管理,系統(tǒng)做得盡量人性化,使用者會(huì)感到操作方便,需要做的就是將數(shù)據(jù)輸入到系統(tǒng)的數(shù)據(jù)庫(kù)中去。由于數(shù)據(jù)庫(kù)存儲(chǔ)容量比較大,而且比較穩(wěn)定,適合長(zhǎng)時(shí)間的保存,也不容易丟失
25、。這無(wú)疑是為存儲(chǔ)量比較大的學(xué)校提供了一個(gè)方便、快捷的操作方式。本系統(tǒng)具有運(yùn)行快、安全性高、穩(wěn)定性好的優(yōu)點(diǎn),并且具備錄入、查詢(xún)、修改、</p><p> 1.2 本課題研究的意義</p><p> 在學(xué)校中,管理是學(xué)校運(yùn)行的重要環(huán)節(jié)。學(xué)校應(yīng)該采取最有效的管理模式來(lái)管理好學(xué)生,通過(guò)對(duì)學(xué)生的信息采集將學(xué)生的信息輸入到數(shù)據(jù)庫(kù)中,可以方便地查詢(xún)學(xué)生的信息,這樣比傳統(tǒng)的手工查找學(xué)生檔案方式要方便多
26、了。作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)學(xué)校公寓進(jìn)行管理,有著手工管理無(wú)法比擬的優(yōu)勢(shì),例如:使管理工作更為輕松便捷,高效精確;方便管理人員對(duì)學(xué)生信息的添加、修改、查看等操作;簡(jiǎn)化了管理人員的日常事務(wù),例如更新公告、對(duì)寢室衛(wèi)生評(píng)分等。</p><p> 同時(shí),我們也希望在宿舍管理、宿舍活動(dòng)方面并不是由學(xué)校和宿舍管理人員單方面的參與,而是在宿舍中學(xué)習(xí)生活的學(xué)生也能參與于其中。學(xué)校的通知能夠讓每一名學(xué)生及時(shí)收到,而學(xué)
27、生的申請(qǐng)能夠及時(shí)得到處理,不同宿舍的學(xué)生彼此之間有著較密聯(lián)系,學(xué)生和宿舍管理人員對(duì)宿舍管理和活動(dòng)進(jìn)行討論,給宿舍建設(shè)、管理方式提出好的建議。使得學(xué)生宿舍有著更好的氛圍,宿舍的管理也更加靈活、體貼。 </p><p><b> 1.3 研究方法</b></p><p> 系統(tǒng)使用C/S結(jié)構(gòu),使用Oracle 10g數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)各類(lèi)信息。由于不希望客戶(hù)端能夠直接訪問(wèn)數(shù)
28、據(jù)庫(kù),將編寫(xiě)一個(gè)服務(wù)器程序,并使用Socket通信機(jī)制,讓客戶(hù)端與服務(wù)器進(jìn)行通信,從而將客戶(hù)端對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)操作由服務(wù)器代為進(jìn)行,并將獲得的數(shù)據(jù)信息轉(zhuǎn)發(fā)給客戶(hù)端。</p><p> 服務(wù)器:使用C語(yǔ)言編寫(xiě),無(wú)圖形界面。其中聊天室模塊的服務(wù)器和宿舍管理模塊的服務(wù)器各自獨(dú)立,綁定不同的端口,并使用LINUX的多線程方式為不同客戶(hù)提供服務(wù)。涉及對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)的部分,使用PRO*C編程嵌入SQL語(yǔ)句,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪
29、問(wèn)。</p><p> 客戶(hù)端:使用QT Creator制作圖形界面,C++語(yǔ)言編寫(xiě)控制代碼,涉及LINUX系統(tǒng)函數(shù)調(diào)用的操作封裝在一個(gè)控制類(lèi)中。其中聊天室程序使用了QT的多線程方式,使得信息顯示和信息發(fā)送能并發(fā)進(jìn)行。</p><p> 1.4 QT與QT Creator簡(jiǎn)介</p><p> Qt是一個(gè)1991年由奇趣科技開(kāi)發(fā)的跨平臺(tái)C++圖形用戶(hù)界面應(yīng)用程
30、序開(kāi)發(fā)框架。它既可以開(kāi)發(fā)GUI程式,也可用于開(kāi)發(fā)非GUI程式,比如控制臺(tái)工具和服務(wù)器。Qt是面向?qū)ο笳Z(yǔ)言,易于擴(kuò)展,并且允許組件編程。</p><p> Qt Creator是跨平臺(tái)的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收購(gòu)后推出的一款新的輕量級(jí)集成開(kāi)發(fā)環(huán)境(IDE)。此 IDE 能夠跨平臺(tái)運(yùn)行,支持的系統(tǒng)包括 Linux(32 位及 64 位)、Mac OS X 以及 Windo
31、ws。Qt Creator 的設(shè)計(jì)目標(biāo)是使開(kāi)發(fā)人員能夠利用 Qt 這個(gè)應(yīng)用程序框架更加快速及輕易的完成開(kāi)發(fā)任務(wù)。</p><p> 1.5 Oracle 10g 與 Pro*c簡(jiǎn)介</p><p> Oracle是目前最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),被越來(lái)越多的用戶(hù)在信息系統(tǒng)管理、企業(yè)數(shù)據(jù)處理、Internet、電子商務(wù)網(wǎng)站等領(lǐng)域作為應(yīng)用數(shù)據(jù)的后臺(tái)處理系統(tǒng)。此前流行的版本為Oracle9
32、i。Oracle公司在Oracle9i基礎(chǔ)上,推出了代表數(shù)據(jù)庫(kù)最新技術(shù)的數(shù)據(jù)庫(kù)系統(tǒng)Oracle 10g。在Oracle 10g中,第一次提出數(shù)據(jù)自動(dòng)鏡像存儲(chǔ)、數(shù)據(jù)閃回功能以及功能強(qiáng)大的數(shù)據(jù)導(dǎo)出工具、大文件表空間以及表空間組管理等概念。</p><p> 通過(guò)在過(guò)程化編程語(yǔ)言中嵌入SQL語(yǔ)句而開(kāi)發(fā)出的應(yīng)用程序稱(chēng)為Pro程序,在通用編程語(yǔ)言中使用的SQL稱(chēng)為嵌入式SQL。在SQL標(biāo)準(zhǔn)中定義了多種語(yǔ)言的嵌入式SQL,
33、各個(gè)廠商對(duì)嵌入式SQL的具體實(shí)現(xiàn)不同。</p><p> 宿主語(yǔ)言 Pro程序</p><p> C/C++ Pro*C/C++</p><p> FORTRAN Pro*FORTRAN</p><p> PASCAL Pro*PASCAL</p><p><b>
34、 系統(tǒng)的需求分析</b></p><p> 2.1 總體功能分析</p><p> LINUX下的大學(xué)生宿舍管理系統(tǒng),由兩部分組成:一個(gè)是服務(wù)器,一個(gè)客戶(hù)端。其中服務(wù)器程序使用C語(yǔ)言編寫(xiě),沒(méi)有任何圖形界面以求獲得最大的運(yùn)行效率;而客戶(hù)端程序則是由C++語(yǔ)言編寫(xiě),使用QT制作圖形界面,便于用戶(hù)進(jìn)行使用。宿舍管理系統(tǒng)的功能結(jié)構(gòu)如圖1所示:</p><p>
35、;<b> 系統(tǒng)功能結(jié)構(gòu)圖</b></p><p> 宿舍管理模塊基本功能說(shuō)明:</p><p> 學(xué)生管理:包括學(xué)生信息的增加、刪除、修改、查看及維護(hù)功能。</p><p> 寢室管理:包括學(xué)生住宿信息的增加、刪除、修改、查看及維護(hù)功能 。</p><p> 公告管理:包括公告設(shè)置和公告查看功能。&
36、lt;/p><p> 財(cái)務(wù)管理:每個(gè)月交納水費(fèi)用、電費(fèi)、物品維修信息的查詢(xún)及維護(hù)功能。</p><p> 賬戶(hù)管理:包括用戶(hù)信息的增加、刪除、修改、查看及維護(hù)功能。</p><p> 學(xué)生申請(qǐng):包括學(xué)生申請(qǐng)內(nèi)容的添加。</p><p> 公告聊天室模塊基本功能說(shuō)明:</p><p> 設(shè)置昵稱(chēng):支持用戶(hù)設(shè)置聊天昵
37、稱(chēng)。</p><p> 設(shè)置字體與顏色:支持用戶(hù)設(shè)置聊天內(nèi)容中文字的字體和顏色。</p><p> 設(shè)置表情:支持用戶(hù)發(fā)送各種表情圖片。</p><p> 顯示在線用戶(hù):動(dòng)態(tài)的顯示當(dāng)前在線用戶(hù)信息和在線人數(shù)。</p><p> 2.2 服務(wù)器端分析</p><p> 服務(wù)器運(yùn)行于Red Hat Enterpr
38、ise Linux 5操作系統(tǒng)下??紤]到服務(wù)器程序的執(zhí)行效率,服務(wù)器使用C語(yǔ)言編寫(xiě),通過(guò)調(diào)用Linux的系統(tǒng)庫(kù)函數(shù),實(shí)現(xiàn)與客戶(hù)端的網(wǎng)絡(luò)通信,同時(shí)使用Pro*c 嵌入SQL語(yǔ)句,訪問(wèn)數(shù)據(jù)庫(kù),從而將用戶(hù)和數(shù)據(jù)信息聯(lián)系起來(lái),并且避免了用戶(hù)直接對(duì)數(shù)據(jù)進(jìn)行訪問(wèn),使得數(shù)據(jù)的傳輸、保存與分析更加安全。同時(shí)由于C語(yǔ)言的高效,加之Red Hat Enterprise Linux 5操作系統(tǒng)的穩(wěn)定和快速,采用以上方法開(kāi)發(fā)出的服務(wù)器程序?yàn)橛脩?hù)服務(wù)時(shí),用戶(hù)所獲
39、得的體驗(yàn),并不會(huì)比使用其他客戶(hù)端直接訪問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用程序獲得的體驗(yàn)有太大的差異。Red Hat Enterprise Linux 5操作系統(tǒng)界面如圖2所示:</p><p> Red Hat Enterprise Linux 5界面</p><p><b> 2.3 客戶(hù)端分析</b></p><p> 客戶(hù)端應(yīng)可運(yùn)行于支持圖形界面的主流
40、LINUX操作系統(tǒng)上,比如Ubuntu、Fedora、OpenSUSE等,本文中客戶(hù)端程序運(yùn)行于為Fedora13系統(tǒng)下,該操作系統(tǒng)界面如圖3所示:</p><p> Fedora13操作系統(tǒng)界面</p><p> 客戶(hù)端使用QT4的類(lèi)庫(kù),制作圖形界面。QT做為一個(gè)成熟的多平臺(tái)C++圖形用戶(hù)界面應(yīng)用程序框架,它可以滿(mǎn)足一個(gè)圖形用戶(hù)應(yīng)用程序所需的所有功能。使用其制作的Linux桌面應(yīng)用程
41、序,擁有同Windows下的桌面應(yīng)用相媲美的圖形效果。同樣客戶(hù)端程序也要調(diào)用Linux 的系統(tǒng)庫(kù)函數(shù)來(lái)實(shí)現(xiàn)動(dòng)態(tài)分配內(nèi)存、網(wǎng)絡(luò)通信等這些功能,使得客戶(hù)端在Linux操作系統(tǒng)下有著更高的運(yùn)行效率。</p><p> 客戶(hù)端主要由兩個(gè)大的功能模塊組成:宿舍管理模塊與公共聊天室模塊。宿舍管理模塊包含:學(xué)生管理、賬戶(hù)管理、寢室管理、公告管理、財(cái)務(wù)管理、學(xué)生申請(qǐng)。而公共聊天室模塊支持多人聊天,自定義昵稱(chēng),設(shè)置字體、顏色、表
42、情和顯示當(dāng)前在線用戶(hù)信息??蛻?hù)端界面如圖4所示:</p><p><b> 客戶(hù)端程序界面</b></p><p> 宿舍管理模塊-服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 在大學(xué)生宿舍管理系統(tǒng)中,宿舍管理模塊無(wú)疑是最重要的組成部分,它通過(guò)對(duì)賬戶(hù)、學(xué)生、宿舍等信息的操作,實(shí)現(xiàn)了宿舍管理系統(tǒng)所需的各個(gè)功能。由于服務(wù)器程序與數(shù)據(jù)庫(kù)運(yùn)行于同一臺(tái)的電
43、腦上,顯然對(duì)這些數(shù)據(jù)的獲取與保存由服務(wù)器程序來(lái)處理是最高效的。同時(shí)服務(wù)器程序也將對(duì)各個(gè)數(shù)據(jù)進(jìn)行簡(jiǎn)單的匹配、整合和計(jì)算,所以客戶(hù)端只需要發(fā)送和接受預(yù)先定義好格式的數(shù)據(jù)消息便可以實(shí)現(xiàn)對(duì)所有數(shù)據(jù)的正確獲取與管理,降低了客戶(hù)端與服務(wù)器通信中數(shù)據(jù)信息出錯(cuò)的概率。整個(gè)第三章將對(duì)宿舍管理模塊的服務(wù)器總體設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)和各個(gè)功能模塊的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行詳細(xì)的描述。</p><p> 3.1 服務(wù)器總體設(shè)計(jì)</p>
44、<p> 系統(tǒng)采用的是C/S結(jié)構(gòu),對(duì)服務(wù)器和客戶(hù)端進(jìn)行了適當(dāng)?shù)娜蝿?wù)分配。服務(wù)器并不需要太多過(guò)于復(fù)雜的操作,主要負(fù)責(zé)在客戶(hù)端與數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)的轉(zhuǎn)接,使得客戶(hù)端能及時(shí)的獲取到所需要的數(shù)據(jù),同時(shí)客戶(hù)端發(fā)送給服務(wù)器的數(shù)據(jù)也能被及時(shí)的存入數(shù)據(jù)庫(kù)中。服務(wù)器應(yīng)當(dāng)穩(wěn)定、并發(fā)與高效率,為了實(shí)現(xiàn)這三個(gè)目的服務(wù)器采用了多線程模式,即服務(wù)器程序?yàn)槊恳粋€(gè)客戶(hù)創(chuàng)建一個(gè)線程進(jìn)行服務(wù),各個(gè)線程之間互不干擾。而主線程負(fù)責(zé)對(duì)各個(gè)子線程進(jìn)行管理。</p
45、><p> 3.1.1 主線程設(shè)計(jì)</p><p> 主線程主要負(fù)責(zé)初始化網(wǎng)絡(luò),創(chuàng)建客戶(hù)鏈表,接受客戶(hù)連接、創(chuàng)建子線程、管理所有線程五個(gè)功能。其具體設(shè)計(jì)如下:</p><p> 1.服務(wù)器啟動(dòng)后,主線程為服務(wù)器綁定IP地址與端口,進(jìn)行初始化網(wǎng)絡(luò)操作,如果初始化網(wǎng)絡(luò)失敗,則關(guān)閉服務(wù)器。</p><p> 2.初始化網(wǎng)絡(luò)成功后,主線程創(chuàng)建客戶(hù)
46、鏈表,并對(duì)客戶(hù)鏈表進(jìn)行初始化,然后進(jìn)入接受用戶(hù)連接的循環(huán)中。</p><p> 3.每當(dāng)有一個(gè)用戶(hù)連接到服務(wù)器,服務(wù)器將創(chuàng)建一個(gè)子線程為客戶(hù)進(jìn)行服務(wù),線程創(chuàng)建完畢后返回接受用戶(hù)連接循環(huán)。</p><p> 4.當(dāng)服務(wù)器進(jìn)程接受到SIGINT信號(hào)(2號(hào)信號(hào))時(shí),關(guān)閉所有正在與客戶(hù)進(jìn)行通信的套接字,關(guān)閉所有子線程,初始化客戶(hù)鏈表,關(guān)閉服務(wù)器進(jìn)程。</p><p>
47、 主線程的程序流程如圖5所示:</p><p><b> 主線程程序流程圖</b></p><p> 3.1.2 子線程設(shè)計(jì)</p><p> 子線程負(fù)責(zé)為每個(gè)申請(qǐng)連接的客戶(hù)進(jìn)行服務(wù),包含了:添加客戶(hù)到客戶(hù)鏈表,從客戶(hù)鏈表刪除客戶(hù),判斷用戶(hù)名密碼是否正確,判斷用戶(hù)的需求并提供對(duì)應(yīng)的服務(wù),向用戶(hù)返回服務(wù)是否成功的消息。具體設(shè)計(jì)如下:<
48、/p><p> 1.子線程創(chuàng)建成功后,進(jìn)入判斷用戶(hù)賬號(hào)密碼的循環(huán),接受客戶(hù)端傳來(lái)的賬號(hào)與密碼,若賬號(hào)密碼正確,則將客戶(hù)信息添加到客戶(hù)鏈表上,并退出循環(huán)。否則給客戶(hù)端發(fā)送錯(cuò)誤信息,并返回判斷用戶(hù)賬號(hào)密碼的循環(huán)。</p><p> 2.添加客戶(hù)到客戶(hù)鏈表后,進(jìn)入為用戶(hù)服務(wù)循環(huán),接收到客戶(hù)端的一個(gè)服務(wù)請(qǐng)求后,判斷其請(qǐng)求類(lèi)型,并為客戶(hù)端進(jìn)行對(duì)應(yīng)的服務(wù)操作。服務(wù)完成后給客戶(hù)發(fā)送服務(wù)是否成功信息,然后
49、返回服務(wù)循環(huán)。</p><p> 3.在判斷用戶(hù)賬戶(hù)密碼期間,如果用戶(hù)退出或者斷開(kāi)連接,將關(guān)閉與用戶(hù)通信的套接字,并關(guān)閉線程。</p><p> 4.在為客戶(hù)進(jìn)行服務(wù)期間,如果用戶(hù)退出或者斷開(kāi)連接,用關(guān)閉與用戶(hù)通信的套接字,并從客戶(hù)鏈表中將客戶(hù)刪除,然后釋放資源關(guān)閉線程。</p><p> 5.由于涉及多個(gè)線程對(duì)臨界資源(客戶(hù)鏈表)的訪問(wèn),需要設(shè)計(jì)線程同步的方
50、式。使用互斥鎖機(jī)制,每當(dāng)一個(gè)線程訪問(wèn)客戶(hù)鏈表時(shí),別的線程將不能對(duì)客戶(hù)鏈表進(jìn)行訪問(wèn)。</p><p> 6.由于客戶(hù)要求的服務(wù)有多種,所以需要一種統(tǒng)一格式的請(qǐng)求服務(wù)消息,供服務(wù)器判斷用戶(hù)的要求。本系統(tǒng)設(shè)計(jì)了由類(lèi)型(char type[3])和數(shù)據(jù)(char type[1000])組成的消息結(jié)構(gòu)體,所有服務(wù)消息如表1所示:</p><p><b> 系統(tǒng)所有服務(wù)消息</b&
51、gt;</p><p> 7.當(dāng)子線程對(duì)用戶(hù)的一次服務(wù)請(qǐng)求進(jìn)行了操作后,將向客戶(hù)端發(fā)送一條信息,用于表示操作是否成功。</p><p> 子線程流程圖如圖6所示:</p><p><b> 子線程流程圖</b></p><p><b> 3.2 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p>&l
52、t;p> LINUX下的大學(xué)生宿舍管理系統(tǒng)使用Oracle 10g數(shù)據(jù)庫(kù)用來(lái)存儲(chǔ)各類(lèi)數(shù)據(jù)信息,從而使得用戶(hù)使用管理系統(tǒng)對(duì)數(shù)據(jù)信息的查看、增加、修改、刪除、排序等操作更加便捷與安全。系統(tǒng)的E-R圖如圖7所示:</p><p><b> 系統(tǒng)E-R圖</b></p><p> 3.3 賬戶(hù)管理功能—服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)</p><p>
53、 賬戶(hù)管理模塊主要負(fù)責(zé)對(duì)大學(xué)生宿舍管理系統(tǒng)的用戶(hù)信息進(jìn)行操作,能實(shí)現(xiàn)賬號(hào)的增加、刪除、修改、查看。賬戶(hù)管理模塊功能結(jié)構(gòu)如圖8所示:</p><p><b> 賬戶(hù)管理功能結(jié)構(gòu)圖</b></p><p> 3.3.1 添加賬戶(hù)與刪除賬戶(hù)</p><p> 添加賬戶(hù)功能可以在用戶(hù)表中添加一行賬戶(hù)信息,由于在用戶(hù)表中設(shè)置了用戶(hù)名字段為唯一鍵和
54、非空約束,所以在添加賬戶(hù)時(shí)用戶(hù)名不能與已經(jīng)存在的賬戶(hù)的用戶(hù)名相同。另外由于設(shè)置了用戶(hù)ID為用戶(hù)表的主鍵,所以每添加一個(gè)用戶(hù)需要為該用戶(hù)自動(dòng)生成一個(gè)用戶(hù)表中不存在的用戶(hù)ID。</p><p> 添加賬戶(hù)程序流程如圖9所示:</p><p><b> 添加賬戶(hù)程序流程圖</b></p><p> 設(shè)置新添加賬戶(hù)的用戶(hù)ID值的方法:獲取用戶(hù)表中
55、用戶(hù)ID的最大值,將其進(jìn)行加1操作后,賦值給新添加賬戶(hù)的用戶(hù)ID。</p><p> 設(shè)置新添加賬戶(hù)用戶(hù)ID操作的Pro*c語(yǔ)句: </p><p> exec sql select max(userid)+1 into :ora_user2.uid from sm_user; </p><p> 刪除賬戶(hù)功能可以從用戶(hù)表中刪除一行對(duì)應(yīng)的用戶(hù)信息。和添加用戶(hù)相
56、似,刪除用戶(hù)同樣需要先判斷要?jiǎng)h除的用戶(hù)是否存在。如果不存在,則向客戶(hù)端發(fā)送用戶(hù)不存在的信息,如果存在便從用戶(hù)表中刪除此用戶(hù)。</p><p> 刪除賬戶(hù)Pro*c語(yǔ)句:</p><p> exec sql delete from sm_user where uname=:ora_user2.name;</p><p> 3.3.2 查看賬戶(hù)與修改賬戶(hù)</
57、p><p> 查看賬戶(hù)功能可以查看用戶(hù)表中所有的用戶(hù)信息,當(dāng)服務(wù)器接收到客戶(hù)端的查看賬戶(hù)請(qǐng)求后,便從用戶(hù)表中讀取所有的用戶(hù)信息,并統(tǒng)計(jì)出用戶(hù)的個(gè)數(shù)。然后將所有獲取的用戶(hù)信息一條一條的發(fā)送給客戶(hù)端。</p><p> 查看賬戶(hù)Pro*c語(yǔ)句:</p><p> exec sql declare user_cursor cursor for select userid
58、, uname, password, pemisson to_char(register_time,’yyyy-mm-dd’) from sm_user;</p><p> 修改賬戶(hù)功能可以修改用戶(hù)表中的一行用戶(hù)的密碼與權(quán)限。修改賬戶(hù),同樣需要預(yù)先判斷所修改的用戶(hù)是否存在,在進(jìn)行對(duì)應(yīng)的操作。修改賬戶(hù)程序流程如圖10所示:</p><p><b> 修改賬戶(hù)流程圖</b&
59、gt;</p><p> 修改賬戶(hù)Pro*c語(yǔ)句:</p><p> exec sql update sm_user set password=:ora_user2.passwd,pemisson =:ora_user2.pemisson where uname=:ora_user2.name;</p><p> 3.4 學(xué)生管理功能—服務(wù)器端的設(shè)計(jì)與實(shí)
60、現(xiàn)</p><p> 學(xué)生管理模塊是宿舍管理系統(tǒng)的重要組成部分,它主要是負(fù)責(zé)對(duì)學(xué)生數(shù)據(jù)進(jìn)行管理,實(shí)現(xiàn)對(duì)某一棟宿舍樓的學(xué)生進(jìn)行增加、刪除、修改和查看操作。</p><p> 學(xué)生管理模塊功能結(jié)構(gòu)如圖11所示:</p><p> 學(xué)生管理模塊功能結(jié)構(gòu)圖</p><p> 3.4.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</p><p>
61、 根據(jù)學(xué)生表設(shè)計(jì)了結(jié)構(gòu)體oracle_Student,用于保存學(xué)生信息。結(jié)構(gòu)體的成員變量說(shuō)明如表2所示:</p><p> oracle_Student結(jié)構(gòu)體成員變量說(shuō)明</p><p> 3.4.2 添加學(xué)生與刪除學(xué)生</p><p> 添加學(xué)生功能可以在學(xué)生表中增加一行學(xué)生信息,由于學(xué)生表中設(shè)置了學(xué)號(hào)為主鍵,所以添加一行學(xué)生信息時(shí)其學(xué)號(hào)不能為表中已存在的學(xué)
62、號(hào)。故在添加學(xué)生要預(yù)先檢查該學(xué)號(hào)的學(xué)生信息是否已經(jīng)存在于學(xué)生表中。</p><p> 添加學(xué)生方法:首先接受客戶(hù)端傳入待添加學(xué)生信息,判斷其學(xué)號(hào)是否與學(xué)生表中某一個(gè)學(xué)生的學(xué)號(hào)相同。如果相同,向客戶(hù)端發(fā)送學(xué)生已存在信息并中止后續(xù)操作;否則將學(xué)生信息添加入學(xué)生表。</p><p> 判斷該學(xué)號(hào)學(xué)生是否存在于學(xué)生表關(guān)鍵代碼:</p><p> exec sql se
63、lect sid into :studentCount from sm_student where sid=:ora_stu2.SID; //查看用戶(hù)表中是否存在該學(xué)生</p><p> if(Count) {//如果存在</p><p> exec sql commit work release; //關(guān)閉對(duì)數(shù)據(jù)的訪問(wèn)</p><p> return 1
64、; //返回1</p><p><b> }</b></p><p> else{//如果不存在</p><p> exec sql commit work release; //關(guān)閉對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)</p><p> return 0; //返回0</p><p><b&
65、gt; }</b></p><p> 刪除學(xué)生功能可以從學(xué)生表中刪除一行學(xué)生信息,刪除學(xué)生同樣預(yù)先判斷學(xué)生是否存在于學(xué)生表中在做后續(xù)操作。由于同刪除賬戶(hù)類(lèi)似,對(duì)刪除學(xué)生流程不再做贅述。</p><p> 3.4.3 修改學(xué)生</p><p> 修改學(xué)生功能可以實(shí)現(xiàn)修改學(xué)生表中的某個(gè)學(xué)生信息,在修改某個(gè)學(xué)生之前需要判斷該學(xué)生是否再找與學(xué)生表中。由于
66、一行學(xué)生信息包含了大量信息內(nèi)容,對(duì)一行學(xué)生信息每個(gè)字段進(jìn)行修改顯得比較麻煩,所以對(duì)修改學(xué)生信息功能采用了先刪除再添加的方式,即刪除當(dāng)前學(xué)生然后將新的學(xué)生信息插入學(xué)生表。修改學(xué)生程序流程如圖12所示:</p><p><b> 修改學(xué)生程序流程圖</b></p><p> 3.4.4 查看學(xué)生</p><p> 查看學(xué)生功能可以查看某一棟宿
67、舍樓的所有學(xué)生信息,當(dāng)服務(wù)器接收到客戶(hù)端的查看學(xué)生請(qǐng)求消息后,可以根據(jù)請(qǐng)求信息中的數(shù)據(jù)獲取宿舍樓棟號(hào),然后根據(jù)棟號(hào)從學(xué)生表中查找出所有該棟宿舍樓的學(xué)生信息并統(tǒng)計(jì)出學(xué)生總數(shù)。然后將學(xué)生總數(shù)和獲取到的學(xué)生信息發(fā)送給客戶(hù)端。</p><p> 一次查看學(xué)生操作服務(wù)器運(yùn)行情況如圖13所示:</p><p> 查看學(xué)生操作服務(wù)器運(yùn)行圖</p><p> 3.5 寢室管理
68、功能—服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 寢室管理功能是整個(gè)宿舍管理模塊中最為重要的部分,可以說(shuō)宿舍管理模塊的主要目的就是實(shí)現(xiàn)對(duì)寢室的管理。通過(guò)寢室管理功能,用戶(hù)可以實(shí)現(xiàn)增添寢室,查看寢室的學(xué)生信息,為寢室添加學(xué)生等必要的對(duì)寢室進(jìn)行管理的行為。寢室管理模塊的功能結(jié)構(gòu)如圖14所示:</p><p> 寢室管理模塊功能結(jié)構(gòu)圖</p><p> 3.5.1 數(shù)據(jù)
69、結(jié)構(gòu)設(shè)計(jì)</p><p> 根據(jù)寢室表設(shè)計(jì)了結(jié)構(gòu)體oracle_Room和oracle_Score,用于保存寢室信息和寢室紀(jì)律評(píng)分信息,結(jié)構(gòu)體的成員變量說(shuō)明如表3和表4所示:</p><p> oracle_Room結(jié)構(gòu)體成員變量說(shuō)明</p><p> oracle_Score結(jié)構(gòu)體成員變量說(shuō)明</p><p> 3.5.2 添加寢室
70、學(xué)生</p><p> 添加寢室學(xué)生功能可以為一個(gè)沒(méi)有滿(mǎn)員的宿舍增加尚未入住寢室的學(xué)生,它還包含了兩個(gè)子功能:查看有空位的寢室和未入住寢室的學(xué)生。</p><p> 由于寢室表中有寢室容量字段和寢室人數(shù)字段,所以判斷一個(gè)寢室是否有空位只需要判斷寢室容量減去寢室人數(shù)是否大于0,如果大于0就說(shuō)明該寢室尚未滿(mǎn)員。而學(xué)生表中有寢室號(hào)字段,如果一個(gè)學(xué)生的寢室號(hào)為0則說(shuō)明該學(xué)生沒(méi)有入住寢室。依照以
71、上兩種方法可以比較方便的實(shí)現(xiàn)查看有空位的寢室和未入住寢室的學(xué)生的兩個(gè)功能。</p><p> 查看有空位的寢室流程:從用客戶(hù)端發(fā)送來(lái)的請(qǐng)求消息中獲取需要查詢(xún)的宿舍樓棟號(hào),根據(jù)棟號(hào)從寢室表中獲取所有尚未滿(mǎn)員的寢室信息并計(jì)算出寢室的數(shù)量。然后將寢室的數(shù)量和排好序的寢室信息發(fā)送給客戶(hù)端。</p><p> 查看有空位的寢室Pro*c語(yǔ)句:</p><p> exec
72、 sql declare room_cursor cursor for select * from sm_room where buildingid=:ora_room2.buildingID and roomcapacity-roomman>0 order by roomID;</p><p> 查看未入住寢室的學(xué)生流程:從用客戶(hù)端發(fā)送來(lái)的請(qǐng)求消息中獲取需要查詢(xún)的宿舍樓棟號(hào),根據(jù)棟號(hào)從學(xué)生表中獲取所有寢
73、室號(hào)為0的學(xué)生信息并計(jì)算出學(xué)生的數(shù)量。然后將學(xué)生數(shù)量和排好序的學(xué)生信息發(fā)送給客戶(hù)端。</p><p> 查看未入住寢室學(xué)生的Pro*c語(yǔ)句:</p><p> exec sql declare stu_cursor cursor for select * from sm_Student where Sbuildingid=:ora_stu2.SbuildingID and SroomI
74、D=0 order by sid;</p><p> 當(dāng)獲取了有空位的寢室和未入住寢室的學(xué)生信息后,便可以進(jìn)行為寢室添加學(xué)生的操作了,需要修改學(xué)生的宿舍號(hào)和宿舍的人數(shù)。為寢室添加學(xué)生程序流程如圖15所示:</p><p> 為寢室添加學(xué)生程序流程圖</p><p> 3.5.3 刪除寢室學(xué)生</p><p> 刪除寢室學(xué)生功能可以為一
75、個(gè)有學(xué)生入住的宿舍刪除寢室內(nèi)的學(xué)生,它包含了兩個(gè)子功能:查看有人入住的寢室和查看某寢室內(nèi)的學(xué)生。 </p><p> 查看有人入住的寢室方法:從客戶(hù)端發(fā)送來(lái)的請(qǐng)求消息中獲取需要查詢(xún)的宿舍樓棟號(hào),根據(jù)棟號(hào)從寢室表中獲取所有寢室人數(shù)大于0的寢室信息并計(jì)算出有人入住寢室的總數(shù)。然后把寢室數(shù)量和排好序的寢室信息發(fā)送給客戶(hù)端。</p><p> 查看有人入住寢室的Pro*c語(yǔ)句:</p&g
76、t;<p> exec sql declare room_cursor cursor for select * from sm_room where buildingid=:ora_room2.buildingID and roomman>0 order by roomID;</p><p> 實(shí)現(xiàn)查看某寢室的學(xué)生方法:從用客戶(hù)端發(fā)送來(lái)的請(qǐng)求消息中獲取需要查詢(xún)的宿舍樓棟號(hào)與寢室號(hào),然后在學(xué)
77、生表中查找出所有棟號(hào)和寢室號(hào)與之相同的學(xué)生信息并計(jì)算出學(xué)生的數(shù)量。然后把數(shù)量和排好序的學(xué)生信息發(fā)送給客戶(hù)端。 </p><p> 查看未入住寢室學(xué)生的Pro*c語(yǔ)句:</p><p> exec sql declare stu_cursor cursor for select * from sm_Student where Sbuildingid=:ora_stu2.Sbuilding
78、ID and SroomID=:ora_stu2.SroomID order by sid;</p><p> 當(dāng)獲取了有人入住的寢室的學(xué)生信息后,就可以進(jìn)行為寢室刪除已入住的學(xué)生的操作了,同樣需要修改學(xué)生的宿舍號(hào)和宿舍的人數(shù)。為寢室刪除學(xué)生的程序流程如圖16所示:</p><p> 為寢室刪除學(xué)生程序流程圖</p><p> 3.5.4 寢室紀(jì)律評(píng)分<
79、/p><p> 紀(jì)律評(píng)分功能可以實(shí)現(xiàn)對(duì)一棟的所有宿舍進(jìn)行紀(jì)律管理,它由添加寢室評(píng)分和查看寢室評(píng)分兩部分組成。</p><p> 添加寢室評(píng)分可以為一個(gè)宿舍增加一條評(píng)分信息,同時(shí)也會(huì)自動(dòng)記錄添加評(píng)分的時(shí)間。實(shí)現(xiàn)添加寢室評(píng)分的方法:從客戶(hù)端發(fā)送來(lái)的請(qǐng)求消息中獲取某個(gè)寢室的評(píng)分信息,然后生成時(shí)間日期將評(píng)分信息插入紀(jì)律評(píng)分表。</p><p> 查看寢室評(píng)分功能可以實(shí)現(xiàn)對(duì)
80、某一宿舍樓的某一個(gè)月的所有寢室評(píng)分信息進(jìn)行查詢(xún)。實(shí)現(xiàn)查看寢室評(píng)分的方法:從客戶(hù)端發(fā)送來(lái)的請(qǐng)求消息中獲取宿舍樓棟號(hào)和年月信息,然后從評(píng)分表中查找出該宿舍樓該年月的所有評(píng)分信息并統(tǒng)計(jì)出條數(shù)。然后將數(shù)量和所有評(píng)分信息發(fā)送給客戶(hù)端。增加評(píng)分與查看評(píng)分服務(wù)器運(yùn)行情況如圖17所示:</p><p> 增加和查看寢室評(píng)分圖</p><p> 3.5.5 增加寢室與查看寢室</p>&l
81、t;p> 增加寢室和查看寢室功能可以實(shí)現(xiàn)對(duì)寢室的增添和對(duì)某一棟宿舍樓所有寢室信息進(jìn)行查詢(xún)。由于對(duì)寢室的增添與查看和賬戶(hù)管理、學(xué)生管理中的增添查看功能極其相似,對(duì)其設(shè)計(jì)與流程不做贅述。</p><p> 公共聊天室的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 在大學(xué)生宿舍管理系統(tǒng)中,公共聊天室是重要的組成部分,它支持多個(gè)用戶(hù)同時(shí)進(jìn)行實(shí)時(shí)的文字聊天。與宿舍管理模塊相似,公共聊天室同樣由服務(wù)器和客
82、戶(hù)端兩部分組成,服務(wù)器主要負(fù)責(zé)將每個(gè)用戶(hù)發(fā)送的聊天信息轉(zhuǎn)發(fā)給在線的其他用戶(hù),同時(shí)對(duì)進(jìn)入聊天室的用戶(hù)進(jìn)行管理;客戶(hù)端負(fù)責(zé)與用戶(hù)進(jìn)行交互,獲取用戶(hù)的輸入信息并將其發(fā)送至服務(wù)器,同時(shí)將從服務(wù)器接收到的必要信息以圖形方式向用戶(hù)展示。</p><p> 4.1 公共聊天室簡(jiǎn)介</p><p> 本聊天室支持發(fā)送聊天信息,設(shè)置顏色和字體,發(fā)送表情,顯示當(dāng)前在線用戶(hù)等諸多功能。本章將對(duì)這些功能的設(shè)計(jì)
83、和實(shí)現(xiàn)做詳細(xì)的描述,并對(duì)這些功能的具體效果進(jìn)行演示。聊天室界面如圖18所示:</p><p><b> 聊天室界面圖</b></p><p> 4.2 聊天室的總體設(shè)計(jì)</p><p> 公共聊天室同樣采取了C/S結(jié)構(gòu),服務(wù)器和客戶(hù)端各自完成不同的任務(wù),通過(guò)網(wǎng)絡(luò)通信進(jìn)行聯(lián)系。服務(wù)器需要為客戶(hù)端提供高效、穩(wěn)定的服務(wù),客戶(hù)端需要給用戶(hù)提供友好
84、、方便的界面。</p><p> 4.2.1 服務(wù)器總體設(shè)計(jì)</p><p> 服務(wù)器程序由C語(yǔ)言編寫(xiě),無(wú)圖形界面以求高效率,通過(guò)調(diào)用LINUX的系統(tǒng)庫(kù)函數(shù)實(shí)現(xiàn)文件I/O和網(wǎng)絡(luò)通信。采用多線程模型,即每當(dāng)有一個(gè)用戶(hù)連接到服務(wù)器后,服務(wù)器主線程將創(chuàng)建一個(gè)子線程為該用戶(hù)服務(wù)。當(dāng)用戶(hù)發(fā)出退出請(qǐng)求或者斷開(kāi)連接后,將關(guān)閉子線程并釋放相應(yīng)的資源。服務(wù)器維護(hù)了一個(gè)客戶(hù)鏈表用于保存和管理用戶(hù)信息,各個(gè)
85、線程對(duì)客戶(hù)鏈表的訪問(wèn)采用了互斥鎖機(jī)制,即當(dāng)一個(gè)線程正在對(duì)客戶(hù)鏈表進(jìn)行訪問(wèn)時(shí),別的線程無(wú)法訪問(wèn)鏈表。</p><p> 聊天室服務(wù)器程序的主線程程序流程與宿舍管理服務(wù)器主線程程序流程完全相同,而子線程也大體一樣,只是不需要核對(duì)用戶(hù)名密碼信息,同時(shí)在往用戶(hù)鏈表添加刪除用戶(hù)的同時(shí)會(huì)向客戶(hù)端發(fā)送信息以提示客戶(hù)端更新在線用戶(hù)信息。所以對(duì)服務(wù)器程序流程不在做詳細(xì)的描述。</p><p> 4.2.
86、2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</p><p> 根據(jù)聊天室需求設(shè)計(jì)了pthtread_LinkedList鏈表,供服務(wù)器用于保存所有聊天室用戶(hù)信息,結(jié)構(gòu)體的成員變量和函數(shù)說(shuō)明如表5和表6所示:</p><p> PthreadNode節(jié)點(diǎn)結(jié)構(gòu)體成員變量說(shuō)明</p><p><b> 鏈表函數(shù)說(shuō)明 </b></p><p>
87、4.2.3 客戶(hù)端總體設(shè)計(jì)</p><p> 客戶(hù)端由C++語(yǔ)言編寫(xiě),使用QT的圖形庫(kù)來(lái)完成圖形界面,同時(shí)調(diào)用LINUX系統(tǒng)庫(kù)函數(shù)完成網(wǎng)絡(luò)通信等功能??蛻?hù)端的功能的實(shí)現(xiàn)主要依靠以下兩個(gè)工作:與服務(wù)器通信工作和與用戶(hù)交互工作。由于客戶(hù)端需要在接收用戶(hù)輸入的同時(shí),不斷從服務(wù)器接收數(shù)據(jù)并反饋到圖形界面上,所以需要?jiǎng)?chuàng)建一個(gè)子線程來(lái)專(zhuān)門(mén)完成此任務(wù)。當(dāng)客戶(hù)端與服務(wù)器斷開(kāi)連接后,客戶(hù)端需向用戶(hù)提示斷開(kāi)連接信息,并做相應(yīng)的操作
88、(釋放資源、關(guān)閉程序等)。</p><p> 4.2.3 客戶(hù)端程序流程圖</p><p> 聊天室客戶(hù)端程序流程如圖19所示:</p><p> 聊天室客戶(hù)端程序流程圖</p><p> 4.3 用戶(hù)登錄與顯示在線用戶(hù)的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.3.1 用戶(hù)登錄—客戶(hù)端</p><
89、;p> 用戶(hù)登錄功能負(fù)責(zé)在客戶(hù)端啟動(dòng)后,生成用戶(hù)登錄界面,供用戶(hù)設(shè)置聊天室昵稱(chēng)并連接到服務(wù)器。用戶(hù)登錄界面如圖20所示:</p><p><b> 用戶(hù)登錄界面圖</b></p><p> 用戶(hù)登錄界面會(huì)要求用戶(hù)輸入自己的聊天室昵稱(chēng),并會(huì)檢查用戶(hù)輸入昵稱(chēng)是否符合要求,如果不符合會(huì)彈出錯(cuò)誤信息并讓用戶(hù)重新輸入。當(dāng)用戶(hù)設(shè)置完昵稱(chēng)后,客戶(hù)端將會(huì)嘗試連接到服務(wù)器,
90、如果連接失敗將彈出錯(cuò)信息并關(guān)閉程序,成功連接到后會(huì)關(guān)閉登錄界面,生成聊天室界面。</p><p> 4.3.2 用戶(hù)登錄—服務(wù)器</p><p> 服務(wù)器會(huì)在客戶(hù)端連接到服務(wù)器后創(chuàng)建一個(gè)子線程與客戶(hù)端進(jìn)行通信,并在用戶(hù)鏈表的尾部插入新登錄的用戶(hù)信息。然后遍歷用戶(hù)鏈表,向用戶(hù)鏈表中的每一個(gè)用戶(hù)發(fā)送新用戶(hù)登錄消息,提醒客戶(hù)端更新在線用戶(hù)信息。</p><p> 4
91、.3.3 顯示當(dāng)前在線用戶(hù)</p><p> 用戶(hù)設(shè)置完昵稱(chēng)并進(jìn)入聊天室后,在線用戶(hù)界面會(huì)顯示此時(shí)聊天室中的所有用戶(hù)信息和用戶(hù)人數(shù)。顯示在線用戶(hù)界面如圖21所示:</p><p><b> 顯示在線用戶(hù)界面圖</b></p><p> 當(dāng)客戶(hù)端連接到服務(wù)器,服務(wù)子線程將新用戶(hù)信息添加到用戶(hù)鏈表后,會(huì)對(duì)用戶(hù)鏈表進(jìn)行一次遍歷,然后將鏈表中所有
92、用戶(hù)的信息一條一條的發(fā)送給客戶(hù)端??蛻?hù)端每接受到一條信息便會(huì)往在線用戶(hù)界面中添加一個(gè)用戶(hù),并修改當(dāng)前的在線人數(shù)。在線用戶(hù)界面中添加一個(gè)用戶(hù)關(guān)鍵代碼如下所示:</p><p> void ChatRoomClient::addUserItem(int i) //添加用戶(hù)</p><p> char imagePath[50]; //定義文件路徑</p><p>
93、 sprintf(imagePath,":/HeadImage/head%d.png",i%15+1); //計(jì)算出頭像的文件路徑</p><p> QListWidgetItem* userItem = new QListWidgetItem(QIcon(imagePath),trUtf8(</p><p> contral.userNode[i].qqName)
94、+tr("(")+tr(contral.userNode[i].name)+tr(")"));</p><p> ui->UserlistWidget->addItem(userItem); //在在線用戶(hù)界面中添加一個(gè)用戶(hù)</p><p> char userNumber[4] = {0};</p><p>
95、 sprintf(userNumber,"%d 人",i+1); //拼接出在線人數(shù)</p><p> ui->onlineNumber->setText(trUtf8(userNumber)); //修改在線人數(shù)</p><p> 4.3.4 動(dòng)態(tài)修改在線用戶(hù)</p><p> 當(dāng)有用戶(hù)進(jìn)入或者退出聊天室時(shí),在線用戶(hù)界面會(huì)動(dòng)
96、態(tài)的修改在線用戶(hù)信息和在線用戶(hù)人數(shù)。</p><p> 實(shí)現(xiàn)動(dòng)態(tài)添加在線用戶(hù)的方法:一個(gè)新的用戶(hù)進(jìn)入聊天室并被添加到用戶(hù)鏈表后,服務(wù)器立即向鏈表中的所有用戶(hù)發(fā)送新用戶(hù)登入的消息和新用戶(hù)的必要數(shù)據(jù)信息;客戶(hù)端接收到新用戶(hù)登入消息后,加新登錄的用戶(hù)信息添加到在線用戶(hù)界面并修改在線人數(shù)。</p><p> 實(shí)現(xiàn)動(dòng)態(tài)刪除在線用戶(hù)的方法:一個(gè)在線用戶(hù)退出聊天室后,服務(wù)器從用戶(hù)鏈表中刪除此用戶(hù)信息
97、并關(guān)閉與此用戶(hù)的網(wǎng)絡(luò)通信,然后向所有鏈表中的所有用戶(hù)發(fā)出用戶(hù)退出消息,最后為此用戶(hù)服務(wù)的子線程;客戶(hù)端接收到有用戶(hù)退出消息后,從在線用戶(hù)界面刪除退出的用戶(hù)信息并修改在線人數(shù)。動(dòng)態(tài)修改在線用戶(hù)程序流程如圖22所示:</p><p> 動(dòng)態(tài)修改在線用戶(hù)程序流程圖</p><p> 4.4 文本格式與表情的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.4.1 設(shè)置文字的字體與顏
98、色</p><p> 為了給用戶(hù)帶來(lái)良好的聊天體驗(yàn),聊天室客戶(hù)端支持用戶(hù)自定義文字字體和文字顏色功能。</p><p> 設(shè)置字體與文字顏色的方法:設(shè)置字體與文字顏色的方法比較簡(jiǎn)單,主要是利用了QFontDialog和QColorDialog兩個(gè)類(lèi)供用戶(hù)選擇操作系統(tǒng)支持的字體和文字顏色。獲取到用戶(hù)對(duì)文字的設(shè)置,將會(huì)把設(shè)置好的字體與顏色信息分別存入一個(gè)QFont類(lèi)對(duì)象和一個(gè)QColor類(lèi)
99、對(duì)象,然后便可以使用這兩個(gè)對(duì)象設(shè)置輸入聊天信息文本編輯框的文字樣式了。設(shè)置文字的字體的關(guān)鍵代碼下所示:</p><p> void ChatRoomClient::on_fontButton_clicked() //設(shè)置文字字體格式</p><p><b> {</b></p><p> ui->faceButton->set
100、Checked(false); //設(shè)置表情按鈕為未按下</p><p><b> bool ok;</b></p><p> QFont font = QFontDialog::getFont(</p><p> &ok, QFont("Helvetica [Cronyx]", 10), this);//獲取
101、字體</p><p> if(ok) //如果獲取成功</p><p> ui->inputTextEdit->setFont(font);</p><p><b> }</b></p><p> 4.4.2 設(shè)置聊天表情</p><p> 在線上聊天中,用戶(hù)常常想用把自己心
102、情比如高興、傷心、緊張等信息展示給對(duì)方。但是使用文字來(lái)表達(dá)這些信息的時(shí)候,往往顯得索然無(wú)味,即使是有些良好文學(xué)功底的用戶(hù),對(duì)于一些比較特殊的心理活動(dòng)也很難用文字進(jìn)行描述。而聊天表情就能很好的滿(mǎn)足反映用戶(hù)心理活動(dòng)的功能,它由一些簡(jiǎn)單、有趣的圖片組成。本聊天室客戶(hù)端為提供40個(gè)聊天表情供用戶(hù)使用,如圖23所示:</p><p><b> 聊天表情圖</b></p><p&g
103、t; 設(shè)置聊天表情的方法:每一個(gè)聊天表情實(shí)際上為一張png格式的圖片,為了讓用戶(hù)能使用這些圖片,先要預(yù)先將圖片作為資源預(yù)先加載到文本編輯框的資源庫(kù)中,然后利用QListWidget類(lèi),將這些表情以圖標(biāo)的形式供用戶(hù)選擇。當(dāng)用戶(hù)選擇了某個(gè)表情后,便可以獲取到用戶(hù)選擇的圖標(biāo)的索引,然后計(jì)算出表情圖片的資源路徑,然后將表情圖片顯示到文本編輯框的當(dāng)前光標(biāo)位置后。設(shè)置聊天表情程序流程如圖24所示:</p><p> 設(shè)置
104、聊天表情程序流程圖</p><p> 4.5 發(fā)送與接收聊天信息的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 發(fā)送與接收聊天信息功能是聊天室程序中最重要的部分,無(wú)論是顯示在線用戶(hù)信息還是設(shè)置聊天內(nèi)容的樣式都只是為了給用戶(hù)帶來(lái)一些視覺(jué)上的享受。而要實(shí)現(xiàn)多個(gè)用戶(hù)的實(shí)時(shí)交流,對(duì)聊天信息的發(fā)送與接收才是真正的核心。</p><p> 4.5.1 發(fā)送聊天信息</p>
105、<p> 發(fā)送消息功能由兩部分組成:客戶(hù)端將用戶(hù)的聊天內(nèi)容發(fā)送到客戶(hù)端和服務(wù)器將受到的信息轉(zhuǎn)發(fā)給所有在線用戶(hù)。</p><p> 發(fā)送信息的實(shí)現(xiàn)方法:當(dāng)用戶(hù)點(diǎn)擊了發(fā)送按鈕后將觸發(fā)發(fā)送信息槽函數(shù),由于用戶(hù)的聊天內(nèi)容中包含了圖片和不同的文字格式,而樸素文本(plainText)并不能滿(mǎn)足對(duì)這些信息的存儲(chǔ),所以需要將其轉(zhuǎn)換成html格式然后在發(fā)送給服務(wù)器。服務(wù)器接收到客戶(hù)端發(fā)來(lái)的信息后,把信息轉(zhuǎn)發(fā)給用戶(hù)鏈
106、表上的所有用戶(hù)。發(fā)送聊天信息程序流程如圖25所示:</p><p> 發(fā)送聊天信息程序流圖</p><p> 4.5.2 接收聊天信息</p><p> 接收聊天信息功能可以讓客戶(hù)端從服務(wù)器接收其他的用戶(hù)發(fā)送的聊天信息,并在文本編輯框上按照一定格式顯示。聊天信息顯示格式如圖26所示:</p><p><b> 消息顯示框圖&
107、lt;/b></p><p> 接收聊天信息并顯示的實(shí)現(xiàn)方法:客戶(hù)從服務(wù)器接收到一條聊天信息中已經(jīng)包含了用戶(hù)信息、發(fā)送時(shí)間和聊天內(nèi)容信息,所以只需要先將用戶(hù)信息和發(fā)送時(shí)間拼接成一個(gè)字符串,然后設(shè)定顏色為藍(lán)色添加到消息顯示框。然后在將html格式的聊天信息讀出,再次做一次添加,就可以完成一次對(duì)聊天信息的接收顯示任務(wù)。為了使聊天信息一行接著一行添加到消息顯示框中,需要使用控件庫(kù)中的QTextEditWidge
108、t類(lèi)的append(Qstring)函數(shù)來(lái)做添加操作。實(shí)現(xiàn)接收聊天信息功能的關(guān)鍵代碼如下所示:</p><p> else if(strcmp(msg.type,”TM”) == 0) //判斷消息為聊天消息</p><p><b> {</b></p><p> QString info = trUtf8(((textMSG*)(msg
109、.data))->info); //獲取用戶(hù)信息和發(fā)送時(shí)間</p><p> QString htmlData = trUtf8(((textMSG*)(msg.data))->htmldata);//獲取聊天內(nèi)容</p><p> emit appendTextMessage(info); //為顯示用戶(hù)信息和時(shí)間發(fā)送添加信號(hào)</p><p>
110、emit appendTextMessage(htmlData); //顯示聊天內(nèi)容信息發(fā)送添加信號(hào)</p><p><b> }</b></p><p><b> 系統(tǒng)測(cè)試</b></p><p><b> 5.1 測(cè)試環(huán)境</b></p><p> 服務(wù)器:操作系統(tǒng)
111、Red Hat Enterprise Linux 5,內(nèi)存1G或以上</p><p> 客戶(hù)端:操作系統(tǒng)Fedora13,內(nèi)存512M或以上</p><p><b> 5.2 測(cè)試方式</b></p><p> 軟件測(cè)試的方法主要分為白盒測(cè)試和黑盒測(cè)試。白盒測(cè)試是通過(guò)分析程序內(nèi)部的邏輯與執(zhí)行路線,設(shè)計(jì)測(cè)試用例進(jìn)行測(cè)試的方法,它又稱(chēng)為結(jié)構(gòu)化
112、測(cè)試或路徑測(cè)試,通常使用于相對(duì)較小的程序。黑盒測(cè)試是把程序或系統(tǒng)看成一個(gè)黑盒子,完全不考慮其內(nèi)部結(jié)構(gòu)和處理過(guò)程,主要是測(cè)試各個(gè)程序或功能模塊之間的接口,檢查系統(tǒng)功能是否能按照設(shè)計(jì)書(shū)的規(guī)定正常執(zhí)行,是否能接收正確的輸入數(shù)據(jù)產(chǎn)生正確的輸出結(jié)果。</p><p><b> 5.3 測(cè)試及結(jié)果</b></p><p> 本系統(tǒng)的測(cè)試采用了黑盒測(cè)試的方式,測(cè)試人員非系統(tǒng)開(kāi)發(fā)
113、人員以求測(cè)試結(jié)果更加具有實(shí)際意義。本次測(cè)試主要是測(cè)試聊天室功能模塊,其測(cè)試用例及其結(jié)果如表7所示:</p><p> 聊天室功能模塊測(cè)試結(jié)果</p><p><b> 結(jié) 語(yǔ)</b></p><p> 經(jīng)過(guò)5個(gè)月的努力,通過(guò)艱苦學(xué)習(xí)、研究、思考和工作,終于完成了“學(xué)生宿舍管理系統(tǒng)”這一系統(tǒng)的構(gòu)建,達(dá)到了畢業(yè)設(shè)計(jì)的預(yù)期目標(biāo),也學(xué)到了相
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文---學(xué)生宿舍管理系統(tǒng)住宿管理模塊設(shè)計(jì)
- 畢業(yè)論文---多人聊天室設(shè)計(jì)
- 基于java的聊天室設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于java的聊天室設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文 java聊天室的設(shè)計(jì)
- 畢業(yè)論文---學(xué)生宿舍管理系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)
- 畢業(yè)論文 高校局域網(wǎng)聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 學(xué)生宿舍管理系統(tǒng)畢業(yè)論文
- 學(xué)生宿舍管理系統(tǒng)畢業(yè)論文
- 畢業(yè)論文——學(xué)生宿舍信息管理的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文---學(xué)生宿舍管理系統(tǒng)
- 學(xué)生宿舍管理系統(tǒng)畢業(yè)論文
- 學(xué)生宿舍管理系統(tǒng)畢業(yè)論文
- 學(xué)生宿舍管理系統(tǒng)——畢業(yè)論文
- 學(xué)生宿舍管理系統(tǒng)——畢業(yè)論文
- 畢業(yè)論文——學(xué)生宿舍管理系統(tǒng)
- 網(wǎng)絡(luò)聊天室系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 宿舍管理系統(tǒng)畢業(yè)論文--大學(xué)生公寓管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- java聊天室畢業(yè)論文
- 畢業(yè)論文asp聊天室
評(píng)論
0/150
提交評(píng)論