版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 大學(xué)生宿舍管理系統(tǒng)(聊天室等模塊)設(shè)計(jì)與實(shí)現(xiàn)</p><p> 論文作者姓名:</p><p> 申請(qǐng)學(xué)位專業(yè):軟件工程</p><p> 申請(qǐng)學(xué)位類別:工學(xué)學(xué)士</p><p> 指導(dǎo)教師姓名(職稱):</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)造整潔、寧靜、清新的學(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)行管理,具有手工操作無法比擬的優(yōu)點(diǎn)。它有著檢索迅速,查找方便,存儲(chǔ)量大,保密性好,成本低等諸多特點(diǎn)。一個(gè)優(yōu)秀的宿舍管理系統(tǒng)能夠滿足各種對(duì)宿舍的管理需求,給高校學(xué)生宿舍管理工作帶來極大的便利。</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)下無疑是最優(yōu)的選擇。另外,LINUX作為自由和開放源碼的計(jì)算機(jī)操作系統(tǒng),適合大學(xué)生和高校管理人員進(jìn)行學(xué)習(xí)和使用,制作一個(gè)可在LINUX操作系統(tǒng)下運(yùn)行的圖形界面應(yīng)用程序能讓用戶在使用管理系統(tǒng)時(shí)更加方便。</p><p> 本系統(tǒng)選擇了QT這一跨平臺(tái)的C++圖形界面應(yīng)用程序框架,來開發(fā)宿舍管理系統(tǒng)的客戶端程序,并調(diào)用LINUX系統(tǒng)庫實(shí)現(xiàn)在LINUX操作系統(tǒng)下的高效運(yùn)行。</p><p>
5、 關(guān)鍵詞:宿舍管理系統(tǒng);LINUX;數(shù)據(jù)庫;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> 論文總頁數(shù):31頁</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簡介2</p><p> 1.5 Oracle 10g 與 Pro*c簡介2</p><p> 2系統(tǒng)的需求分析3</p><p> 2.1 總體功能分析3</p><p> 2.2 服
14、務(wù)器端分析3</p><p> 2.3 客戶端分析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ù)庫設(shè)計(jì)9</p><p> 3.3 賬戶管理功能—服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)9</p><p> 3.3.1 添加賬戶與刪除賬戶9</p><p> 3.3.2 查看賬戶與修改賬戶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 公共聊天室簡介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 客戶端總體設(shè)計(jì)19</p><p> 4.2.3 客戶端程序流程圖20</p><p> 4.3 用戶登錄與顯示在線用戶的
19、設(shè)計(jì)與實(shí)現(xiàn)20</p><p> 4.3.1 用戶登錄—客戶端20</p><p> 4.3.2 用戶登錄—服務(wù)器21</p><p> 4.3.3 顯示當(dāng)前在線用戶21</p><p> 4.3.4 動(dòng)態(tài)修改在線用戶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é) 語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é)校來說是必不可少的組成部分。目前好多學(xué)校還停留在宿舍管理人員手工記錄數(shù)據(jù)的最初階段,手工記錄對(duì)于規(guī)模小的學(xué)校來說勉強(qiáng)還可以接受,但對(duì)于學(xué)生人數(shù)比較龐大,需要記錄存檔的數(shù)據(jù)比較多的高校來說,人工記錄是相當(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ù)不能滿足需求時(shí),就會(huì)有新的技術(shù)誕生并且取而代之。21世紀(jì),電子科學(xué)技術(shù)在世界占著主流地位,計(jì)算機(jī)在各行各業(yè)中的運(yùn)用已經(jīng)得到普及,自動(dòng)化的管理越來越廣泛應(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ù)庫中去。由于數(shù)據(jù)庫存儲(chǔ)容量比較大,而且比較穩(wěn)定,適合長時(shí)間的保存,也不容易丟失
25、。這無疑是為存儲(chǔ)量比較大的學(xué)校提供了一個(gè)方便、快捷的操作方式。本系統(tǒng)具有運(yùn)行快、安全性高、穩(wěn)定性好的優(yōu)點(diǎn),并且具備錄入、查詢、修改、</p><p> 1.2 本課題研究的意義</p><p> 在學(xué)校中,管理是學(xué)校運(yùn)行的重要環(huán)節(jié)。學(xué)校應(yīng)該采取最有效的管理模式來管理好學(xué)生,通過對(duì)學(xué)生的信息采集將學(xué)生的信息輸入到數(shù)據(jù)庫中,可以方便地查詢學(xué)生的信息,這樣比傳統(tǒng)的手工查找學(xué)生檔案方式要方便多
26、了。作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)學(xué)校公寓進(jìn)行管理,有著手工管理無法比擬的優(yōu)勢(shì),例如:使管理工作更為輕松便捷,高效精確;方便管理人員對(duì)學(xué)生信息的添加、修改、查看等操作;簡化了管理人員的日常事務(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ù)庫來存儲(chǔ)各類信息。由于不希望客戶端能夠直接訪問數(shù)
28、據(jù)庫,將編寫一個(gè)服務(wù)器程序,并使用Socket通信機(jī)制,讓客戶端與服務(wù)器進(jìn)行通信,從而將客戶端對(duì)數(shù)據(jù)庫的訪問操作由服務(wù)器代為進(jìn)行,并將獲得的數(shù)據(jù)信息轉(zhuǎn)發(fā)給客戶端。</p><p> 服務(wù)器:使用C語言編寫,無圖形界面。其中聊天室模塊的服務(wù)器和宿舍管理模塊的服務(wù)器各自獨(dú)立,綁定不同的端口,并使用LINUX的多線程方式為不同客戶提供服務(wù)。涉及對(duì)數(shù)據(jù)庫進(jìn)行訪問的部分,使用PRO*C編程嵌入SQL語句,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪
29、問。</p><p> 客戶端:使用QT Creator制作圖形界面,C++語言編寫控制代碼,涉及LINUX系統(tǒng)函數(shù)調(diào)用的操作封裝在一個(gè)控制類中。其中聊天室程序使用了QT的多線程方式,使得信息顯示和信息發(fā)送能并發(fā)進(jìn)行。</p><p> 1.4 QT與QT Creator簡介</p><p> Qt是一個(gè)1991年由奇趣科技開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程
30、序開發(fā)框架。它既可以開發(fā)GUI程式,也可用于開發(fā)非GUI程式,比如控制臺(tái)工具和服務(wù)器。Qt是面向?qū)ο笳Z言,易于擴(kuò)展,并且允許組件編程。</p><p> Qt Creator是跨平臺(tái)的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收購后推出的一款新的輕量級(jí)集成開發(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)是使開發(fā)人員能夠利用 Qt 這個(gè)應(yīng)用程序框架更加快速及輕易的完成開發(fā)任務(wù)。</p><p> 1.5 Oracle 10g 與 Pro*c簡介</p><p> Oracle是目前最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),被越來越多的用戶在信息系統(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ù)庫最新技術(shù)的數(shù)據(jù)庫系統(tǒng)Oracle 10g。在Oracle 10g中,第一次提出數(shù)據(jù)自動(dòng)鏡像存儲(chǔ)、數(shù)據(jù)閃回功能以及功能強(qiáng)大的數(shù)據(jù)導(dǎo)出工具、大文件表空間以及表空間組管理等概念。</p><p> 通過在過程化編程語言中嵌入SQL語句而開發(fā)出的應(yīng)用程序稱為Pro程序,在通用編程語言中使用的SQL稱為嵌入式SQL。在SQL標(biāo)準(zhǔn)中定義了多種語言的嵌入式SQL,
33、各個(gè)廠商對(duì)嵌入式SQL的具體實(shí)現(xiàn)不同。</p><p> 宿主語言 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è)客戶端。其中服務(wù)器程序使用C語言編寫,沒有任何圖形界面以求獲得最大的運(yùn)行效率;而客戶端程序則是由C++語言編寫,使用QT制作圖形界面,便于用戶進(jìn)行使用。宿舍管理系統(tǒng)的功能結(jié)構(gòu)如圖1所示:</p><p>
35、;<b> 系統(tǒng)功能結(jié)構(gòu)圖</b></p><p> 宿舍管理模塊基本功能說明:</p><p> 學(xué)生管理:包括學(xué)生信息的增加、刪除、修改、查看及維護(hù)功能。</p><p> 寢室管理:包括學(xué)生住宿信息的增加、刪除、修改、查看及維護(hù)功能 。</p><p> 公告管理:包括公告設(shè)置和公告查看功能。&
36、lt;/p><p> 財(cái)務(wù)管理:每個(gè)月交納水費(fèi)用、電費(fèi)、物品維修信息的查詢及維護(hù)功能。</p><p> 賬戶管理:包括用戶信息的增加、刪除、修改、查看及維護(hù)功能。</p><p> 學(xué)生申請(qǐng):包括學(xué)生申請(qǐng)內(nèi)容的添加。</p><p> 公告聊天室模塊基本功能說明:</p><p> 設(shè)置昵稱:支持用戶設(shè)置聊天昵
37、稱。</p><p> 設(shè)置字體與顏色:支持用戶設(shè)置聊天內(nèi)容中文字的字體和顏色。</p><p> 設(shè)置表情:支持用戶發(fā)送各種表情圖片。</p><p> 顯示在線用戶:動(dòng)態(tài)的顯示當(dāng)前在線用戶信息和在線人數(shù)。</p><p> 2.2 服務(wù)器端分析</p><p> 服務(wù)器運(yùn)行于Red Hat Enterpr
38、ise Linux 5操作系統(tǒng)下??紤]到服務(wù)器程序的執(zhí)行效率,服務(wù)器使用C語言編寫,通過調(diào)用Linux的系統(tǒng)庫函數(shù),實(shí)現(xiàn)與客戶端的網(wǎng)絡(luò)通信,同時(shí)使用Pro*c 嵌入SQL語句,訪問數(shù)據(jù)庫,從而將用戶和數(shù)據(jù)信息聯(lián)系起來,并且避免了用戶直接對(duì)數(shù)據(jù)進(jìn)行訪問,使得數(shù)據(jù)的傳輸、保存與分析更加安全。同時(shí)由于C語言的高效,加之Red Hat Enterprise Linux 5操作系統(tǒng)的穩(wěn)定和快速,采用以上方法開發(fā)出的服務(wù)器程序?yàn)橛脩舴?wù)時(shí),用戶所獲
39、得的體驗(yàn),并不會(huì)比使用其他客戶端直接訪問數(shù)據(jù)庫的應(yīng)用程序獲得的體驗(yàn)有太大的差異。Red Hat Enterprise Linux 5操作系統(tǒng)界面如圖2所示:</p><p> Red Hat Enterprise Linux 5界面</p><p><b> 2.3 客戶端分析</b></p><p> 客戶端應(yīng)可運(yùn)行于支持圖形界面的主流
40、LINUX操作系統(tǒng)上,比如Ubuntu、Fedora、OpenSUSE等,本文中客戶端程序運(yùn)行于為Fedora13系統(tǒng)下,該操作系統(tǒng)界面如圖3所示:</p><p> Fedora13操作系統(tǒng)界面</p><p> 客戶端使用QT4的類庫,制作圖形界面。QT做為一個(gè)成熟的多平臺(tái)C++圖形用戶界面應(yīng)用程序框架,它可以滿足一個(gè)圖形用戶應(yīng)用程序所需的所有功能。使用其制作的Linux桌面應(yīng)用程
41、序,擁有同Windows下的桌面應(yīng)用相媲美的圖形效果。同樣客戶端程序也要調(diào)用Linux 的系統(tǒng)庫函數(shù)來實(shí)現(xiàn)動(dòng)態(tài)分配內(nèi)存、網(wǎng)絡(luò)通信等這些功能,使得客戶端在Linux操作系統(tǒng)下有著更高的運(yùn)行效率。</p><p> 客戶端主要由兩個(gè)大的功能模塊組成:宿舍管理模塊與公共聊天室模塊。宿舍管理模塊包含:學(xué)生管理、賬戶管理、寢室管理、公告管理、財(cái)務(wù)管理、學(xué)生申請(qǐng)。而公共聊天室模塊支持多人聊天,自定義昵稱,設(shè)置字體、顏色、表
42、情和顯示當(dāng)前在線用戶信息??蛻舳私缑嫒鐖D4所示:</p><p><b> 客戶端程序界面</b></p><p> 宿舍管理模塊-服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 在大學(xué)生宿舍管理系統(tǒng)中,宿舍管理模塊無疑是最重要的組成部分,它通過對(duì)賬戶、學(xué)生、宿舍等信息的操作,實(shí)現(xiàn)了宿舍管理系統(tǒng)所需的各個(gè)功能。由于服務(wù)器程序與數(shù)據(jù)庫運(yùn)行于同一臺(tái)的電
43、腦上,顯然對(duì)這些數(shù)據(jù)的獲取與保存由服務(wù)器程序來處理是最高效的。同時(shí)服務(wù)器程序也將對(duì)各個(gè)數(shù)據(jù)進(jìn)行簡單的匹配、整合和計(jì)算,所以客戶端只需要發(fā)送和接受預(yù)先定義好格式的數(shù)據(jù)消息便可以實(shí)現(xiàn)對(duì)所有數(shù)據(jù)的正確獲取與管理,降低了客戶端與服務(wù)器通信中數(shù)據(jù)信息出錯(cuò)的概率。整個(gè)第三章將對(duì)宿舍管理模塊的服務(wù)器總體設(shè)計(jì)、數(shù)據(jù)庫設(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ù)器和客戶端進(jìn)行了適當(dāng)?shù)娜蝿?wù)分配。服務(wù)器并不需要太多過于復(fù)雜的操作,主要負(fù)責(zé)在客戶端與數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)的轉(zhuǎn)接,使得客戶端能及時(shí)的獲取到所需要的數(shù)據(jù),同時(shí)客戶端發(fā)送給服務(wù)器的數(shù)據(jù)也能被及時(shí)的存入數(shù)據(jù)庫中。服務(wù)器應(yīng)當(dāng)穩(wěn)定、并發(fā)與高效率,為了實(shí)現(xiàn)這三個(gè)目的服務(wù)器采用了多線程模式,即服務(wù)器程序?yàn)槊恳粋€(gè)客戶創(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)建客戶鏈表,接受客戶連接、創(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)建客戶
46、鏈表,并對(duì)客戶鏈表進(jìn)行初始化,然后進(jìn)入接受用戶連接的循環(huán)中。</p><p> 3.每當(dāng)有一個(gè)用戶連接到服務(wù)器,服務(wù)器將創(chuàng)建一個(gè)子線程為客戶進(jìn)行服務(wù),線程創(chuàng)建完畢后返回接受用戶連接循環(huán)。</p><p> 4.當(dāng)服務(wù)器進(jìn)程接受到SIGINT信號(hào)(2號(hào)信號(hào))時(shí),關(guān)閉所有正在與客戶進(jìn)行通信的套接字,關(guān)閉所有子線程,初始化客戶鏈表,關(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)連接的客戶進(jìn)行服務(wù),包含了:添加客戶到客戶鏈表,從客戶鏈表刪除客戶,判斷用戶名密碼是否正確,判斷用戶的需求并提供對(duì)應(yīng)的服務(wù),向用戶返回服務(wù)是否成功的消息。具體設(shè)計(jì)如下:<
48、/p><p> 1.子線程創(chuàng)建成功后,進(jìn)入判斷用戶賬號(hào)密碼的循環(huán),接受客戶端傳來的賬號(hào)與密碼,若賬號(hào)密碼正確,則將客戶信息添加到客戶鏈表上,并退出循環(huán)。否則給客戶端發(fā)送錯(cuò)誤信息,并返回判斷用戶賬號(hào)密碼的循環(huán)。</p><p> 2.添加客戶到客戶鏈表后,進(jìn)入為用戶服務(wù)循環(huán),接收到客戶端的一個(gè)服務(wù)請(qǐng)求后,判斷其請(qǐng)求類型,并為客戶端進(jìn)行對(duì)應(yīng)的服務(wù)操作。服務(wù)完成后給客戶發(fā)送服務(wù)是否成功信息,然后
49、返回服務(wù)循環(huán)。</p><p> 3.在判斷用戶賬戶密碼期間,如果用戶退出或者斷開連接,將關(guān)閉與用戶通信的套接字,并關(guān)閉線程。</p><p> 4.在為客戶進(jìn)行服務(wù)期間,如果用戶退出或者斷開連接,用關(guān)閉與用戶通信的套接字,并從客戶鏈表中將客戶刪除,然后釋放資源關(guān)閉線程。</p><p> 5.由于涉及多個(gè)線程對(duì)臨界資源(客戶鏈表)的訪問,需要設(shè)計(jì)線程同步的方
50、式。使用互斥鎖機(jī)制,每當(dāng)一個(gè)線程訪問客戶鏈表時(shí),別的線程將不能對(duì)客戶鏈表進(jìn)行訪問。</p><p> 6.由于客戶要求的服務(wù)有多種,所以需要一種統(tǒng)一格式的請(qǐng)求服務(wù)消息,供服務(wù)器判斷用戶的要求。本系統(tǒng)設(shè)計(jì)了由類型(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ì)用戶的一次服務(wù)請(qǐng)求進(jìn)行了操作后,將向客戶端發(fā)送一條信息,用于表示操作是否成功。</p><p> 子線程流程圖如圖6所示:</p><p><b> 子線程流程圖</b></p><p><b> 3.2 數(shù)據(jù)庫設(shè)計(jì)</b></p>&l
52、t;p> LINUX下的大學(xué)生宿舍管理系統(tǒng)使用Oracle 10g數(shù)據(jù)庫用來存儲(chǔ)各類數(shù)據(jù)信息,從而使得用戶使用管理系統(tǒng)對(duì)數(shù)據(jù)信息的查看、增加、修改、刪除、排序等操作更加便捷與安全。系統(tǒng)的E-R圖如圖7所示:</p><p><b> 系統(tǒng)E-R圖</b></p><p> 3.3 賬戶管理功能—服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)</p><p>
53、 賬戶管理模塊主要負(fù)責(zé)對(duì)大學(xué)生宿舍管理系統(tǒng)的用戶信息進(jìn)行操作,能實(shí)現(xiàn)賬號(hào)的增加、刪除、修改、查看。賬戶管理模塊功能結(jié)構(gòu)如圖8所示:</p><p><b> 賬戶管理功能結(jié)構(gòu)圖</b></p><p> 3.3.1 添加賬戶與刪除賬戶</p><p> 添加賬戶功能可以在用戶表中添加一行賬戶信息,由于在用戶表中設(shè)置了用戶名字段為唯一鍵和
54、非空約束,所以在添加賬戶時(shí)用戶名不能與已經(jīng)存在的賬戶的用戶名相同。另外由于設(shè)置了用戶ID為用戶表的主鍵,所以每添加一個(gè)用戶需要為該用戶自動(dòng)生成一個(gè)用戶表中不存在的用戶ID。</p><p> 添加賬戶程序流程如圖9所示:</p><p><b> 添加賬戶程序流程圖</b></p><p> 設(shè)置新添加賬戶的用戶ID值的方法:獲取用戶表中
55、用戶ID的最大值,將其進(jìn)行加1操作后,賦值給新添加賬戶的用戶ID。</p><p> 設(shè)置新添加賬戶用戶ID操作的Pro*c語句: </p><p> exec sql select max(userid)+1 into :ora_user2.uid from sm_user; </p><p> 刪除賬戶功能可以從用戶表中刪除一行對(duì)應(yīng)的用戶信息。和添加用戶相
56、似,刪除用戶同樣需要先判斷要?jiǎng)h除的用戶是否存在。如果不存在,則向客戶端發(fā)送用戶不存在的信息,如果存在便從用戶表中刪除此用戶。</p><p> 刪除賬戶Pro*c語句:</p><p> exec sql delete from sm_user where uname=:ora_user2.name;</p><p> 3.3.2 查看賬戶與修改賬戶</
57、p><p> 查看賬戶功能可以查看用戶表中所有的用戶信息,當(dāng)服務(wù)器接收到客戶端的查看賬戶請(qǐng)求后,便從用戶表中讀取所有的用戶信息,并統(tǒng)計(jì)出用戶的個(gè)數(shù)。然后將所有獲取的用戶信息一條一條的發(fā)送給客戶端。</p><p> 查看賬戶Pro*c語句:</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> 修改賬戶功能可以修改用戶表中的一行用戶的密碼與權(quán)限。修改賬戶,同樣需要預(yù)先判斷所修改的用戶是否存在,在進(jìn)行對(duì)應(yīng)的操作。修改賬戶程序流程如圖10所示:</p><p><b> 修改賬戶流程圖</b&
59、gt;</p><p> 修改賬戶Pro*c語句:</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)體的成員變量說明如表2所示:</p><p> oracle_Student結(jié)構(gòu)體成員變量說明</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é)生方法:首先接受客戶端傳入待添加學(xué)生信息,判斷其學(xué)號(hào)是否與學(xué)生表中某一個(gè)學(xué)生的學(xué)號(hào)相同。如果相同,向客戶端發(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; //查看用戶表中是否存在該學(xué)生</p><p> if(Count) {//如果存在</p><p> exec sql commit work release; //關(guān)閉對(duì)數(shù)據(jù)的訪問</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ù)庫的訪問</p><p> return 0; //返回0</p><p><b&
65、gt; }</b></p><p> 刪除學(xué)生功能可以從學(xué)生表中刪除一行學(xué)生信息,刪除學(xué)生同樣預(yù)先判斷學(xué)生是否存在于學(xué)生表中在做后續(xù)操作。由于同刪除賬戶類似,對(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ù)器接收到客戶端的查看學(xué)生請(qǐng)求消息后,可以根據(jù)請(qǐng)求信息中的數(shù)據(jù)獲取宿舍樓棟號(hào),然后根據(jù)棟號(hào)從學(xué)生表中查找出所有該棟宿舍樓的學(xué)生信息并統(tǒng)計(jì)出學(xué)生總數(shù)。然后將學(xué)生總數(shù)和獲取到的學(xué)生信息發(fā)送給客戶端。</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è)宿舍管理模塊中最為重要的部分,可以說宿舍管理模塊的主要目的就是實(shí)現(xiàn)對(duì)寢室的管理。通過寢室管理功能,用戶可以實(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)體的成員變量說明如表3和表4所示:</p><p> oracle_Room結(jié)構(gòu)體成員變量說明</p><p> oracle_Score結(jié)構(gòu)體成員變量說明</p><p> 3.5.2 添加寢室
70、學(xué)生</p><p> 添加寢室學(xué)生功能可以為一個(gè)沒有滿員的宿舍增加尚未入住寢室的學(xué)生,它還包含了兩個(gè)子功能:查看有空位的寢室和未入住寢室的學(xué)生。</p><p> 由于寢室表中有寢室容量字段和寢室人數(shù)字段,所以判斷一個(gè)寢室是否有空位只需要判斷寢室容量減去寢室人數(shù)是否大于0,如果大于0就說明該寢室尚未滿員。而學(xué)生表中有寢室號(hào)字段,如果一個(gè)學(xué)生的寢室號(hào)為0則說明該學(xué)生沒有入住寢室。依照以
71、上兩種方法可以比較方便的實(shí)現(xiàn)查看有空位的寢室和未入住寢室的學(xué)生的兩個(gè)功能。</p><p> 查看有空位的寢室流程:從用客戶端發(fā)送來的請(qǐng)求消息中獲取需要查詢的宿舍樓棟號(hào),根據(jù)棟號(hào)從寢室表中獲取所有尚未滿員的寢室信息并計(jì)算出寢室的數(shù)量。然后將寢室的數(shù)量和排好序的寢室信息發(fā)送給客戶端。</p><p> 查看有空位的寢室Pro*c語句:</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é)生流程:從用客戶端發(fā)送來的請(qǐng)求消息中獲取需要查詢的宿舍樓棟號(hào),根據(jù)棟號(hào)從學(xué)生表中獲取所有寢
73、室號(hào)為0的學(xué)生信息并計(jì)算出學(xué)生的數(shù)量。然后將學(xué)生數(shù)量和排好序的學(xué)生信息發(fā)送給客戶端。</p><p> 查看未入住寢室學(xué)生的Pro*c語句:</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> 查看有人入住的寢室方法:從客戶端發(fā)送來的請(qǐng)求消息中獲取需要查詢的宿舍樓棟號(hào),根據(jù)棟號(hào)從寢室表中獲取所有寢室人數(shù)大于0的寢室信息并計(jì)算出有人入住寢室的總數(shù)。然后把寢室數(shù)量和排好序的寢室信息發(fā)送給客戶端。</p><p> 查看有人入住寢室的Pro*c語句:</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é)生方法:從用客戶端發(fā)送來的請(qǐng)求消息中獲取需要查詢的宿舍樓棟號(hào)與寢室號(hào),然后在學(xué)
77、生表中查找出所有棟號(hào)和寢室號(hào)與之相同的學(xué)生信息并計(jì)算出學(xué)生的數(shù)量。然后把數(shù)量和排好序的學(xué)生信息發(fā)送給客戶端。 </p><p> 查看未入住寢室學(xué)生的Pro*c語句:</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)分的方法:從客戶端發(fā)送來的請(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)行查詢。實(shí)現(xiàn)查看寢室評(píng)分的方法:從客戶端發(fā)送來的請(qǐng)求消息中獲取宿舍樓棟號(hào)和年月信息,然后從評(píng)分表中查找出該宿舍樓該年月的所有評(píng)分信息并統(tǒng)計(jì)出條數(shù)。然后將數(shù)量和所有評(píng)分信息發(fā)送給客戶端。增加評(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)行查詢。由于對(duì)寢室的增添與查看和賬戶管理、學(xué)生管理中的增添查看功能極其相似,對(duì)其設(shè)計(jì)與流程不做贅述。</p><p> 公共聊天室的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 在大學(xué)生宿舍管理系統(tǒng)中,公共聊天室是重要的組成部分,它支持多個(gè)用戶同時(shí)進(jìn)行實(shí)時(shí)的文字聊天。與宿舍管理模塊相似,公共聊天室同樣由服務(wù)器和客
82、戶端兩部分組成,服務(wù)器主要負(fù)責(zé)將每個(gè)用戶發(fā)送的聊天信息轉(zhuǎn)發(fā)給在線的其他用戶,同時(shí)對(duì)進(jìn)入聊天室的用戶進(jìn)行管理;客戶端負(fù)責(zé)與用戶進(jìn)行交互,獲取用戶的輸入信息并將其發(fā)送至服務(wù)器,同時(shí)將從服務(wù)器接收到的必要信息以圖形方式向用戶展示。</p><p> 4.1 公共聊天室簡介</p><p> 本聊天室支持發(fā)送聊天信息,設(shè)置顏色和字體,發(fā)送表情,顯示當(dāng)前在線用戶等諸多功能。本章將對(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ù)器和客戶端各自完成不同的任務(wù),通過網(wǎng)絡(luò)通信進(jìn)行聯(lián)系。服務(wù)器需要為客戶端提供高效、穩(wěn)定的服務(wù),客戶端需要給用戶提供友好
84、、方便的界面。</p><p> 4.2.1 服務(wù)器總體設(shè)計(jì)</p><p> 服務(wù)器程序由C語言編寫,無圖形界面以求高效率,通過調(diào)用LINUX的系統(tǒng)庫函數(shù)實(shí)現(xiàn)文件I/O和網(wǎng)絡(luò)通信。采用多線程模型,即每當(dāng)有一個(gè)用戶連接到服務(wù)器后,服務(wù)器主線程將創(chuàng)建一個(gè)子線程為該用戶服務(wù)。當(dāng)用戶發(fā)出退出請(qǐng)求或者斷開連接后,將關(guān)閉子線程并釋放相應(yīng)的資源。服務(wù)器維護(hù)了一個(gè)客戶鏈表用于保存和管理用戶信息,各個(gè)
85、線程對(duì)客戶鏈表的訪問采用了互斥鎖機(jī)制,即當(dāng)一個(gè)線程正在對(duì)客戶鏈表進(jìn)行訪問時(shí),別的線程無法訪問鏈表。</p><p> 聊天室服務(wù)器程序的主線程程序流程與宿舍管理服務(wù)器主線程程序流程完全相同,而子線程也大體一樣,只是不需要核對(duì)用戶名密碼信息,同時(shí)在往用戶鏈表添加刪除用戶的同時(shí)會(huì)向客戶端發(fā)送信息以提示客戶端更新在線用戶信息。所以對(duì)服務(wù)器程序流程不在做詳細(xì)的描述。</p><p> 4.2.
86、2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</p><p> 根據(jù)聊天室需求設(shè)計(jì)了pthtread_LinkedList鏈表,供服務(wù)器用于保存所有聊天室用戶信息,結(jié)構(gòu)體的成員變量和函數(shù)說明如表5和表6所示:</p><p> PthreadNode節(jié)點(diǎn)結(jié)構(gòu)體成員變量說明</p><p><b> 鏈表函數(shù)說明 </b></p><p>
87、4.2.3 客戶端總體設(shè)計(jì)</p><p> 客戶端由C++語言編寫,使用QT的圖形庫來完成圖形界面,同時(shí)調(diào)用LINUX系統(tǒng)庫函數(shù)完成網(wǎng)絡(luò)通信等功能??蛻舳说墓δ艿膶?shí)現(xiàn)主要依靠以下兩個(gè)工作:與服務(wù)器通信工作和與用戶交互工作。由于客戶端需要在接收用戶輸入的同時(shí),不斷從服務(wù)器接收數(shù)據(jù)并反饋到圖形界面上,所以需要?jiǎng)?chuàng)建一個(gè)子線程來專門完成此任務(wù)。當(dāng)客戶端與服務(wù)器斷開連接后,客戶端需向用戶提示斷開連接信息,并做相應(yīng)的操作
88、(釋放資源、關(guān)閉程序等)。</p><p> 4.2.3 客戶端程序流程圖</p><p> 聊天室客戶端程序流程如圖19所示:</p><p> 聊天室客戶端程序流程圖</p><p> 4.3 用戶登錄與顯示在線用戶的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.3.1 用戶登錄—客戶端</p><
89、;p> 用戶登錄功能負(fù)責(zé)在客戶端啟動(dòng)后,生成用戶登錄界面,供用戶設(shè)置聊天室昵稱并連接到服務(wù)器。用戶登錄界面如圖20所示:</p><p><b> 用戶登錄界面圖</b></p><p> 用戶登錄界面會(huì)要求用戶輸入自己的聊天室昵稱,并會(huì)檢查用戶輸入昵稱是否符合要求,如果不符合會(huì)彈出錯(cuò)誤信息并讓用戶重新輸入。當(dāng)用戶設(shè)置完昵稱后,客戶端將會(huì)嘗試連接到服務(wù)器,
90、如果連接失敗將彈出錯(cuò)信息并關(guān)閉程序,成功連接到后會(huì)關(guān)閉登錄界面,生成聊天室界面。</p><p> 4.3.2 用戶登錄—服務(wù)器</p><p> 服務(wù)器會(huì)在客戶端連接到服務(wù)器后創(chuàng)建一個(gè)子線程與客戶端進(jìn)行通信,并在用戶鏈表的尾部插入新登錄的用戶信息。然后遍歷用戶鏈表,向用戶鏈表中的每一個(gè)用戶發(fā)送新用戶登錄消息,提醒客戶端更新在線用戶信息。</p><p> 4
91、.3.3 顯示當(dāng)前在線用戶</p><p> 用戶設(shè)置完昵稱并進(jìn)入聊天室后,在線用戶界面會(huì)顯示此時(shí)聊天室中的所有用戶信息和用戶人數(shù)。顯示在線用戶界面如圖21所示:</p><p><b> 顯示在線用戶界面圖</b></p><p> 當(dāng)客戶端連接到服務(wù)器,服務(wù)子線程將新用戶信息添加到用戶鏈表后,會(huì)對(duì)用戶鏈表進(jìn)行一次遍歷,然后將鏈表中所有
92、用戶的信息一條一條的發(fā)送給客戶端??蛻舳嗣拷邮艿揭粭l信息便會(huì)往在線用戶界面中添加一個(gè)用戶,并修改當(dāng)前的在線人數(shù)。在線用戶界面中添加一個(gè)用戶關(guān)鍵代碼如下所示:</p><p> void ChatRoomClient::addUserItem(int i) //添加用戶</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); //在在線用戶界面中添加一個(gè)用戶</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)修改在線用戶</p><p> 當(dāng)有用戶進(jìn)入或者退出聊天室時(shí),在線用戶界面會(huì)動(dòng)
96、態(tài)的修改在線用戶信息和在線用戶人數(shù)。</p><p> 實(shí)現(xiàn)動(dòng)態(tài)添加在線用戶的方法:一個(gè)新的用戶進(jìn)入聊天室并被添加到用戶鏈表后,服務(wù)器立即向鏈表中的所有用戶發(fā)送新用戶登入的消息和新用戶的必要數(shù)據(jù)信息;客戶端接收到新用戶登入消息后,加新登錄的用戶信息添加到在線用戶界面并修改在線人數(shù)。</p><p> 實(shí)現(xiàn)動(dòng)態(tài)刪除在線用戶的方法:一個(gè)在線用戶退出聊天室后,服務(wù)器從用戶鏈表中刪除此用戶信息
97、并關(guān)閉與此用戶的網(wǎng)絡(luò)通信,然后向所有鏈表中的所有用戶發(fā)出用戶退出消息,最后為此用戶服務(wù)的子線程;客戶端接收到有用戶退出消息后,從在線用戶界面刪除退出的用戶信息并修改在線人數(shù)。動(dòng)態(tài)修改在線用戶程序流程如圖22所示:</p><p> 動(dòng)態(tài)修改在線用戶程序流程圖</p><p> 4.4 文本格式與表情的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.4.1 設(shè)置文字的字體與顏
98、色</p><p> 為了給用戶帶來良好的聊天體驗(yàn),聊天室客戶端支持用戶自定義文字字體和文字顏色功能。</p><p> 設(shè)置字體與文字顏色的方法:設(shè)置字體與文字顏色的方法比較簡單,主要是利用了QFontDialog和QColorDialog兩個(gè)類供用戶選擇操作系統(tǒng)支持的字體和文字顏色。獲取到用戶對(duì)文字的設(shè)置,將會(huì)把設(shè)置好的字體與顏色信息分別存入一個(gè)QFont類對(duì)象和一個(gè)QColor類
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> 在線上聊天中,用戶常常想用把自己心
102、情比如高興、傷心、緊張等信息展示給對(duì)方。但是使用文字來表達(dá)這些信息的時(shí)候,往往顯得索然無味,即使是有些良好文學(xué)功底的用戶,對(duì)于一些比較特殊的心理活動(dòng)也很難用文字進(jìn)行描述。而聊天表情就能很好的滿足反映用戶心理活動(dòng)的功能,它由一些簡單、有趣的圖片組成。本聊天室客戶端為提供40個(gè)聊天表情供用戶使用,如圖23所示:</p><p><b> 聊天表情圖</b></p><p&g
103、t; 設(shè)置聊天表情的方法:每一個(gè)聊天表情實(shí)際上為一張png格式的圖片,為了讓用戶能使用這些圖片,先要預(yù)先將圖片作為資源預(yù)先加載到文本編輯框的資源庫中,然后利用QListWidget類,將這些表情以圖標(biāo)的形式供用戶選擇。當(dāng)用戶選擇了某個(gè)表情后,便可以獲取到用戶選擇的圖標(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ā)送與接收聊天信息功能是聊天室程序中最重要的部分,無論是顯示在線用戶信息還是設(shè)置聊天內(nèi)容的樣式都只是為了給用戶帶來一些視覺上的享受。而要實(shí)現(xiàn)多個(gè)用戶的實(shí)時(shí)交流,對(duì)聊天信息的發(fā)送與接收才是真正的核心。</p><p> 4.5.1 發(fā)送聊天信息</p>
105、<p> 發(fā)送消息功能由兩部分組成:客戶端將用戶的聊天內(nèi)容發(fā)送到客戶端和服務(wù)器將受到的信息轉(zhuǎn)發(fā)給所有在線用戶。</p><p> 發(fā)送信息的實(shí)現(xiàn)方法:當(dāng)用戶點(diǎn)擊了發(fā)送按鈕后將觸發(fā)發(fā)送信息槽函數(shù),由于用戶的聊天內(nèi)容中包含了圖片和不同的文字格式,而樸素文本(plainText)并不能滿足對(duì)這些信息的存儲(chǔ),所以需要將其轉(zhuǎn)換成html格式然后在發(fā)送給服務(wù)器。服務(wù)器接收到客戶端發(fā)來的信息后,把信息轉(zhuǎn)發(fā)給用戶鏈
106、表上的所有用戶。發(fā)送聊天信息程序流程如圖25所示:</p><p> 發(fā)送聊天信息程序流圖</p><p> 4.5.2 接收聊天信息</p><p> 接收聊天信息功能可以讓客戶端從服務(wù)器接收其他的用戶發(fā)送的聊天信息,并在文本編輯框上按照一定格式顯示。聊天信息顯示格式如圖26所示:</p><p><b> 消息顯示框圖&
107、lt;/b></p><p> 接收聊天信息并顯示的實(shí)現(xiàn)方法:客戶從服務(wù)器接收到一條聊天信息中已經(jīng)包含了用戶信息、發(fā)送時(shí)間和聊天內(nèi)容信息,所以只需要先將用戶信息和發(fā)送時(shí)間拼接成一個(gè)字符串,然后設(shè)定顏色為藍(lán)色添加到消息顯示框。然后在將html格式的聊天信息讀出,再次做一次添加,就可以完成一次對(duì)聊天信息的接收顯示任務(wù)。為了使聊天信息一行接著一行添加到消息顯示框中,需要使用控件庫中的QTextEditWidge
108、t類的append(Qstring)函數(shù)來做添加操作。實(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); //獲取用戶信息和發(fā)送時(shí)間</p><p> QString htmlData = trUtf8(((textMSG*)(msg.data))->htmldata);//獲取聊天內(nèi)容</p><p> emit appendTextMessage(info); //為顯示用戶信息和時(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> 客戶端:操作系統(tǒng)Fedora13,內(nèi)存512M或以上</p><p><b> 5.2 測(cè)試方式</b></p><p> 軟件測(cè)試的方法主要分為白盒測(cè)試和黑盒測(cè)試。白盒測(cè)試是通過分析程序內(nèi)部的邏輯與執(zhí)行路線,設(shè)計(jì)測(cè)試用例進(jìn)行測(cè)試的方法,它又稱為結(jié)構(gòu)化
112、測(cè)試或路徑測(cè)試,通常使用于相對(duì)較小的程序。黑盒測(cè)試是把程序或系統(tǒng)看成一個(gè)黑盒子,完全不考慮其內(nèi)部結(jié)構(gòu)和處理過程,主要是測(cè)試各個(gè)程序或功能模塊之間的接口,檢查系統(tǒng)功能是否能按照設(shè)計(jì)書的規(guī)定正常執(zhí)行,是否能接收正確的輸入數(shù)據(jù)產(chǎn)生正確的輸出結(jié)果。</p><p><b> 5.3 測(cè)試及結(jié)果</b></p><p> 本系統(tǒng)的測(cè)試采用了黑盒測(cè)試的方式,測(cè)試人員非系統(tǒng)開發(fā)
113、人員以求測(cè)試結(jié)果更加具有實(shí)際意義。本次測(cè)試主要是測(cè)試聊天室功能模塊,其測(cè)試用例及其結(jié)果如表7所示:</p><p> 聊天室功能模塊測(cè)試結(jié)果</p><p><b> 結(jié) 語</b></p><p> 經(jīng)過5個(gè)月的努力,通過艱苦學(xué)習(xí)、研究、思考和工作,終于完成了“學(xué)生宿舍管理系統(tǒng)”這一系統(tǒng)的構(gòu)建,達(dá)到了畢業(yè)設(shè)計(jì)的預(yù)期目標(biāo),也學(xué)到了相
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(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ì)與開發(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)論