校園軟件科技有限公司專(zhuān)業(yè)實(shí)習(xí)報(bào)告.doc_第1頁(yè)
校園軟件科技有限公司專(zhuān)業(yè)實(shí)習(xí)報(bào)告.doc_第2頁(yè)
校園軟件科技有限公司專(zhuān)業(yè)實(shí)習(xí)報(bào)告.doc_第3頁(yè)
校園軟件科技有限公司專(zhuān)業(yè)實(shí)習(xí)報(bào)告.doc_第4頁(yè)
校園軟件科技有限公司專(zhuān)業(yè)實(shí)習(xí)報(bào)告.doc_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

北京科技大學(xué)本科生專(zhuān)業(yè)實(shí)習(xí)報(bào)告目錄引言11實(shí)習(xí)單位與工作內(nèi)容21.1實(shí)習(xí)單位概況21.1.1公司理念21.1.2公司產(chǎn)品21.2實(shí)習(xí)工作31.2.1承擔(dān)項(xiàng)目31.2.2工作任務(wù)31.2.3工作意義32實(shí)習(xí)工作內(nèi)容和過(guò)程42.1工作內(nèi)容42.1.1 SSH框架的認(rèn)識(shí)42.1.2 JavaScript學(xué)習(xí)42.1.3 Qt應(yīng)用程序的開(kāi)發(fā)52.2工作過(guò)程53局域網(wǎng)聊天軟件程序開(kāi)發(fā)133.1開(kāi)發(fā)技術(shù)133.1.1關(guān)鍵技術(shù)與理論133.1.2開(kāi)發(fā)工具143.2可行性分析153.2.1業(yè)務(wù)可行性153.2.2 技術(shù)可行性153.2.3 操作可行性153.3 需求分析163.3.1 運(yùn)行環(huán)境163.3.2 功能需求163.3.3性能需求193.3.4界面需求193.4 概要設(shè)計(jì)203.4.1總體設(shè)計(jì)203.4.2接口設(shè)計(jì)213.4.3系統(tǒng)出錯(cuò)設(shè)計(jì)223.5 詳細(xì)設(shè)計(jì)223.5.1系統(tǒng)類(lèi)設(shè)計(jì)223.5.2模塊設(shè)計(jì)283.5.3界面設(shè)計(jì)353.6 系統(tǒng)測(cè)試373.6.1測(cè)試環(huán)境373.6.2 系統(tǒng)測(cè)試基本原則373.6.3 軟件測(cè)試方法383.6.4 系統(tǒng)測(cè)試用例383.6.5 測(cè)試結(jié)論394實(shí)習(xí)總結(jié)40結(jié) 束 語(yǔ)42參 考 文 獻(xiàn)43附 錄44- 2 -北京科技大學(xué)本科生專(zhuān)業(yè)實(shí)習(xí)報(bào)告引言實(shí)習(xí)是每一個(gè)大學(xué)生必須擁有的一段經(jīng)歷,它使我們?cè)趯?shí)踐中了解社會(huì)、在實(shí)踐中鞏固知識(shí);實(shí)習(xí)又是對(duì)每一位大學(xué)生專(zhuān)業(yè)知識(shí)的一種檢驗(yàn)。作為一名即將進(jìn)入大四的學(xué)生,生產(chǎn)實(shí)習(xí)是一門(mén)主要實(shí)踐性課程。是我們將理論知識(shí)同生產(chǎn)實(shí)踐相結(jié)合的有效途徑,是增強(qiáng)我們勞動(dòng)觀(guān)點(diǎn)、工程觀(guān)點(diǎn)和建設(shè)有中國(guó)特色社會(huì)主義事業(yè)的責(zé)任心和使命感的過(guò)程。通過(guò)生產(chǎn)實(shí)習(xí),可以使我們學(xué)習(xí)和了解市場(chǎng)經(jīng)濟(jì)下軟件公司實(shí)際開(kāi)發(fā)軟件的流程和主流設(shè)計(jì)方法、思想和模型,培養(yǎng)學(xué)生樹(shù)立理論聯(lián)系實(shí)際的工作作風(fēng),以及生產(chǎn)現(xiàn)場(chǎng)中將科學(xué)的理論知識(shí)加以驗(yàn)證、深化、鞏固和充實(shí)。并培養(yǎng)我們進(jìn)行調(diào)查、研究、分析和解決工程實(shí)際問(wèn)題的能力,為后繼專(zhuān)業(yè)課的學(xué)習(xí)、課程設(shè)計(jì)和畢業(yè)設(shè)計(jì)打下堅(jiān)實(shí)的基礎(chǔ)。對(duì)于一名即將踏入社會(huì)邁向工作崗位的大四學(xué)生來(lái)說(shuō),熟悉了公司開(kāi)發(fā)軟件的流程和方法、認(rèn)識(shí)自己所學(xué)知識(shí)體系的不足,通過(guò)生產(chǎn)實(shí)習(xí)來(lái)認(rèn)識(shí)到自己平時(shí)學(xué)習(xí)的漏洞通過(guò)生產(chǎn)實(shí)習(xí),可以拓寬我們的知識(shí)面,增加感性認(rèn)識(shí),把所學(xué)知識(shí)條理化系統(tǒng)化,學(xué)到從書(shū)本學(xué)不到的專(zhuān)業(yè)知識(shí),從而對(duì)自己的知識(shí)體系進(jìn)行完善,學(xué)習(xí)更多真正在工程實(shí)際中應(yīng)用廣泛的知識(shí)技能,為今后的學(xué)習(xí)和將從事的技術(shù)工作打下堅(jiān)實(shí)的基礎(chǔ)。1實(shí)習(xí)單位與工作內(nèi)容1.1實(shí)習(xí)單位概況北京清元優(yōu)軟科技有限公司是北京市海淀區(qū)科技園內(nèi)的高新技術(shù)企業(yè)、軟件企業(yè),位于北京市海淀區(qū)上地東路1號(hào)盈創(chuàng)動(dòng)力大廈E座302,是清華大學(xué)計(jì)算機(jī)與信息管理中心數(shù)字校園軟件研發(fā)和推廣的唯一合作伙伴。公司專(zhuān)注于完成數(shù)字校園計(jì)劃、大學(xué)生資源計(jì)劃(URP,University Resource Planning)系統(tǒng)的建設(shè)、運(yùn)行維護(hù)和用戶(hù)服務(wù)的業(yè)務(wù)需求,面向國(guó)內(nèi)高校提供數(shù)字校園解決方案和咨詢(xún)服務(wù)、提供數(shù)字校園系列應(yīng)用軟件的開(kāi)發(fā)服務(wù)、提供數(shù)字校園軟件的集成服務(wù)。1.1.1公司理念清元優(yōu)軟由一支成長(zhǎng)于教育信息化建設(shè)、熱愛(ài)教育信息化事業(yè)的百余人隊(duì)伍組成。是一個(gè)有理想、有追求、勇于開(kāi)拓進(jìn)取、朝氣蓬勃又富于理性的團(tuán)隊(duì)。制定發(fā)展戰(zhàn)略的核心領(lǐng)導(dǎo)層以及首席設(shè)計(jì)師,多年來(lái)一直從事數(shù)字校園與URP的理論研究和建設(shè)實(shí)踐,承擔(dān)了多所高校數(shù)字校園軟件系統(tǒng)的設(shè)計(jì)研發(fā),在業(yè)內(nèi)享有盛譽(yù)。公司產(chǎn)品服務(wù)于全國(guó)200多所高校,在創(chuàng)造數(shù)字校園、構(gòu)建信息化校園方面發(fā)揮了重大的作用,公司貫徹“求實(shí)創(chuàng)新、追求卓越、誠(chéng)信協(xié)作”的理念,以推動(dòng)高校信息化建設(shè)發(fā)展為己任,為客戶(hù)提供最優(yōu)的數(shù)字校園解決方案與全方位的技術(shù)支持服務(wù),成為提升高校管理水平和工作效率的得力助手。1.1.2公司產(chǎn)品公司的主要產(chǎn)品包括:URP高校信息集成管理平臺(tái)(信息標(biāo)準(zhǔn)、信息門(mén)戶(hù)系統(tǒng)、數(shù)據(jù)交換平臺(tái)、統(tǒng)一身份認(rèn)證平臺(tái)、綜合信息服務(wù)系統(tǒng)(決策分析)、URP高校教務(wù)管理系統(tǒng)、URP高校研究生教務(wù)管理系統(tǒng)、URP高校協(xié)同辦公系統(tǒng)、URP高校學(xué)生管理系統(tǒng)(URP高校招生管理系統(tǒng)、URP高校數(shù)字迎新系統(tǒng)、URP高校學(xué)工管理系統(tǒng)、URP高校就業(yè)管理系統(tǒng)、URP高校畢業(yè)離校系統(tǒng)、URP高校校友管理系統(tǒng))、URP高??蒲泄芾硐到y(tǒng)、URP高校網(wǎng)絡(luò)教學(xué)系統(tǒng)、URP高校人事管理系統(tǒng)等。與國(guó)內(nèi)外諸多軟硬件廠(chǎng)商,如HP、Sun、Oracle、清華在線(xiàn)、致遠(yuǎn)協(xié)創(chuàng)、商郵等公司都建立了良好的合作伙伴關(guān)系,共同為高校提供優(yōu)秀的集成服務(wù)。1.2實(shí)習(xí)工作1.2.1承擔(dān)項(xiàng)目在為期五周的實(shí)習(xí)時(shí)間中,我的主要工作室負(fù)責(zé)公司7月20號(hào)即將上線(xiàn)的中國(guó)石油大學(xué)留學(xué)生管理系統(tǒng)中部分功能模塊的實(shí)現(xiàn)以及局域網(wǎng)聊天室軟件的開(kāi)發(fā)工作。1.2.2工作任務(wù)實(shí)習(xí)中承擔(dān)的是中國(guó)石油大學(xué)留學(xué)生管理系統(tǒng)前端頁(yè)面功能的開(kāi)發(fā)編寫(xiě)工作,主要負(fù)責(zé)的是系統(tǒng)參數(shù)設(shè)置模塊功能的實(shí)現(xiàn),目的是使用戶(hù)參數(shù)模塊的性能更加完善,操作更加簡(jiǎn)單明了,實(shí)現(xiàn)界面的人性化設(shè)計(jì),人機(jī)交互性力求使用戶(hù)滿(mǎn)意。在完成了中國(guó)石油大學(xué)留學(xué)生管理系統(tǒng)的前端模塊功能開(kāi)發(fā)之后,又獨(dú)立進(jìn)行了Qt軟件的學(xué)習(xí),并利用C+程序設(shè)計(jì)語(yǔ)言在Qt環(huán)境下進(jìn)行了局域網(wǎng)聊天軟件的開(kāi)發(fā)工作。其中主要涉及到了局域網(wǎng)群聊、私聊和文件傳輸?shù)饶K的實(shí)現(xiàn)編碼工作。1.2.3工作意義留學(xué)生管理系統(tǒng)的開(kāi)發(fā)是利用SSH(Struts+Spring+Hibernate)框架實(shí)現(xiàn)的。所謂SSH框架是基于MVC(Module、View、Control)軟件開(kāi)發(fā)模式的一種框架體系結(jié)構(gòu)。對(duì)于傳統(tǒng)的ASP和 PHP等腳本站點(diǎn)技術(shù),將整個(gè)站點(diǎn)的業(yè)務(wù)邏輯和表現(xiàn)邏輯都混雜在ASP或PHP頁(yè)面里,從而導(dǎo)致頁(yè)面的可讀性相當(dāng)差,可維護(hù)性非常低。即使需要簡(jiǎn)單改變頁(yè)面的按鈕,也不得不打開(kāi)頁(yè)面文件,冒著破壞系統(tǒng)的風(fēng)險(xiǎn)。但采用嚴(yán)格分層J2EE架構(gòu),則可完全避免這個(gè)問(wèn)題。對(duì)表現(xiàn)層的修改即使發(fā)生錯(cuò)誤,也絕對(duì)不會(huì)將錯(cuò) 誤擴(kuò)展到業(yè)務(wù)邏輯層,更不會(huì)影響持久層。因而學(xué)習(xí)利用SSH框架進(jìn)行基于B/S的軟件系統(tǒng)開(kāi)發(fā)更有助于了解MVC開(kāi)發(fā)模式,使得開(kāi)發(fā)過(guò)程更加清晰,便于對(duì)代碼進(jìn)行修改,提高代碼的可讀性和程序的清晰度。通過(guò)在公司學(xué)習(xí)SSH框架,進(jìn)行留學(xué)生系統(tǒng)的開(kāi)發(fā),可以是我對(duì)Java有更深刻的理解和認(rèn)識(shí),明白現(xiàn)行市場(chǎng)中主流的開(kāi)發(fā)方式和開(kāi)發(fā)技術(shù),對(duì)今后在校更有針對(duì)性的學(xué)習(xí)奠定了基礎(chǔ)。局域網(wǎng)聊天開(kāi)發(fā)軟件是利用跨平臺(tái)的C+圖形界面庫(kù)Qt進(jìn)行開(kāi)發(fā)。Qt擁有良好的面向?qū)ο笮?,支持了大量的API,并且擁有成熟完善的開(kāi)發(fā)體系結(jié)構(gòu),也是嵌入式平臺(tái)上應(yīng)用廣泛的圖形化編程和多媒體編程工具。學(xué)習(xí)Qt編程可以為以后從事嵌入式開(kāi)發(fā)奠定堅(jiān)實(shí)的基礎(chǔ)。2實(shí)習(xí)工作內(nèi)容和過(guò)程2.1工作內(nèi)容2.1.1 SSH框架的認(rèn)識(shí)SSH(Struts+Spring+Hibernate)框架是基于MVC設(shè)計(jì)模式的一種框架體系結(jié)構(gòu)。所謂MVC(Model-View-Controller),是軟件工程中的一種軟件架構(gòu)模式,把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller)。1 用戶(hù)與視圖(View)進(jìn)行交互,寫(xiě)入數(shù)據(jù)并進(jìn)行提交,控制器(Controller)接收到來(lái)自視圖的事件并對(duì)模型(Model)進(jìn)行操作,根據(jù)用戶(hù)操作改變更新模型,最后在顯示在界面上。這樣的設(shè)計(jì)模式實(shí)現(xiàn)了視圖與業(yè)務(wù)邏輯層的分離,增加了代碼的重利用率,減少數(shù)據(jù)表達(dá),數(shù)據(jù)描述和應(yīng)用操作的耦合度。而Struts架構(gòu)則是典型的基于MVC框架的一種開(kāi)發(fā)框架體系。SSH框架簡(jiǎn)單的來(lái)說(shuō)就是指將開(kāi)發(fā)系統(tǒng)分為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層4個(gè)部分?;赟SH框架的系統(tǒng)基本業(yè)務(wù)流程為,在表示層利用Struts框架實(shí)現(xiàn)頁(yè)面交互,傳送請(qǐng)求(request)和接受響應(yīng)(response);在業(yè)務(wù)邏輯層,利用Spring技術(shù)向action提供業(yè)務(wù)模型組件(Module)和該組件的協(xié)作對(duì)象處理組件(DAO)完成的業(yè)務(wù)邏輯;在持久層依賴(lài)于Hibernate的對(duì)象化映射和數(shù)據(jù)庫(kù)交互,處理DAO組件的請(qǐng)求并返回結(jié)果。結(jié)合具體實(shí)現(xiàn)留學(xué)生管理系統(tǒng)項(xiàng)目的程序代碼來(lái)認(rèn)識(shí)Struts框架,jsp頁(yè)面相當(dāng)于表示層,用來(lái)與用戶(hù)進(jìn)行交互;通過(guò)java類(lèi)實(shí)現(xiàn)業(yè)務(wù)控制組件,最后通過(guò)中心配置文件Struts.xml實(shí)現(xiàn)java類(lèi)與jsp頁(yè)面的關(guān)聯(lián)。2.1.2 JavaScript學(xué)習(xí)JavaScript是一種基于對(duì)象(Object)和事件驅(qū)動(dòng)(Event Driven)并且具有安全性能的腳本語(yǔ)言。它與Html超文本標(biāo)記語(yǔ)言、Java腳本語(yǔ)言一起實(shí)現(xiàn)了Web頁(yè)面中連接多個(gè)對(duì)象,與Web客戶(hù)進(jìn)行交互的作用。JavaScript語(yǔ)言可以做到響應(yīng)請(qǐng)求事件,而不用任何網(wǎng)絡(luò)來(lái)回傳輸資料,所以在進(jìn)行數(shù)據(jù)輸入時(shí),不用經(jīng)過(guò)傳給服務(wù)器處理在傳回來(lái)的過(guò)程,可以直接在客戶(hù)端進(jìn)行處理。22.1.3 Qt應(yīng)用程序的開(kāi)發(fā)Qt是跨平臺(tái)的C+圖形界面庫(kù)要用于Windows、Mac-Os和Linux等環(huán)境下GUI的開(kāi)發(fā)。Qt不但擁有了完善的C+圖形庫(kù),而且新版本逐漸整合了數(shù)據(jù)庫(kù)、OpenGL庫(kù)、多媒體庫(kù)、網(wǎng)絡(luò)、腳本庫(kù)、XML庫(kù)、WebKit庫(kù)等等,其核心庫(kù)也加入了進(jìn)程間通信、多線(xiàn)程等模塊,極大的豐富了Qt開(kāi)發(fā)大規(guī)模復(fù)雜跨平臺(tái)應(yīng)用程序的能力。在利用Qt進(jìn)行局域網(wǎng)聊天軟件的開(kāi)發(fā)時(shí),主要使用和學(xué)習(xí)的是提供網(wǎng)絡(luò)程序設(shè)計(jì)的QtNetwork庫(kù)。QtNetwork庫(kù)支持通用協(xié)議如HTTP、FTP和DNS,在該庫(kù)中可以利用QTcpSocket和QTcpServer實(shí)現(xiàn)TCP協(xié)議,利用QUdpSocket實(shí)現(xiàn)UDP協(xié)議。2.2工作過(guò)程在為期五周的實(shí)習(xí)工作中,我主要承擔(dān)負(fù)責(zé)的是清元優(yōu)軟公司為中國(guó)石油大學(xué)所開(kāi)發(fā)的留學(xué)生管理系統(tǒng)的系統(tǒng)參數(shù)設(shè)置模塊的功能編寫(xiě)和界面實(shí)現(xiàn),其中應(yīng)用到了Struts框架和java程序設(shè)計(jì)的部分知識(shí)。在開(kāi)發(fā)程序前,首先要進(jìn)行系統(tǒng)環(huán)境的搭建。公司使用的是MyEclipse+Resin 3.0進(jìn)行留學(xué)生系統(tǒng)的搭建。在MyEclipse中的菜單欄選擇MyEclipse-Perference-MyEclipse-Server中的Resin3.X,選擇配置Resin3.0的路徑以及jdk路徑,然后在MyEclipse下運(yùn)行Resin3.0服務(wù)器。服務(wù)器運(yùn)行成功后,需要對(duì)resin.conf進(jìn)行如下配置: jdbc/OracleDB jdbc:oracle:thin::1521:jw lxsxt lxsxt 8 1800 30s 配置完成后保存resin.conf,然后再次運(yùn)行服務(wù)器,然后打開(kāi)IE瀏覽器在地址欄中輸入:8082/即可打開(kāi)如圖2.1所示的登陸界面,留學(xué)生系統(tǒng)搭建完成。圖2.1 留學(xué)生系統(tǒng)登錄界面完成了系統(tǒng)的搭建,便開(kāi)始進(jìn)行系統(tǒng)參數(shù)設(shè)置模塊的編寫(xiě)工作。利用公司提供的代碼生成器Code Gen,對(duì)數(shù)據(jù)庫(kù)中的Sys_param表自動(dòng)生成相關(guān)表操作的java類(lèi)和jsp頁(yè)面代碼文件和配置文件,然后將生成的jsp和java文件按照相應(yīng)的路徑導(dǎo)入到工程當(dāng)中,并且修改工程中l(wèi)xsxt-front.xml、lxsxt-end.xml和validator-lxsxt.xml三個(gè)配置文件,即完成了系統(tǒng)參數(shù)設(shè)置頁(yè)面的基本配置。之后利用系統(tǒng)管理員賬號(hào)登陸系統(tǒng),在相應(yīng)的系統(tǒng)菜單模塊設(shè)置的對(duì)應(yīng)路徑一欄中填寫(xiě)bean的相對(duì)路徑xtsz.sys_param.do并保存,即完成了模塊頁(yè)面代碼的導(dǎo)入工作。圖2.2 系統(tǒng)管理配置之后的工作是根據(jù)具體的需求對(duì)程序代碼編寫(xiě)來(lái)使頁(yè)面的操作更加人性化。在對(duì)detail.jsp和edit.jsp頁(yè)面中的form進(jìn)行了編寫(xiě)時(shí)使用了JSTL和EL標(biāo)簽技術(shù),主要實(shí)現(xiàn)功能是,在選擇編輯不同系統(tǒng)參數(shù)時(shí),進(jìn)入到不同的參數(shù)設(shè)置界面,對(duì)各個(gè)不同的參數(shù)進(jìn)行配置,以此達(dá)到界面美觀(guān)和操作簡(jiǎn)單易行的目的,因此借助JSTL條件標(biāo)簽來(lái)完成條件分支。其中在界面設(shè)計(jì)上還利用了下拉框。 -請(qǐng)選擇-option value=開(kāi) selected開(kāi)option value=關(guān) selected關(guān)完成對(duì)edit.jsp頁(yè)面的編寫(xiě)后,開(kāi)始對(duì)index.jsp頁(yè)面進(jìn)行編寫(xiě)和功能實(shí)現(xiàn)。其中該頁(yè)面主要工作是需要編寫(xiě)table中學(xué)校名稱(chēng)項(xiàng)和成績(jī)錄入開(kāi)關(guān)項(xiàng)中操作欄對(duì)應(yīng)的功能實(shí)現(xiàn)。通過(guò)對(duì)sys_paramContorller.java中一個(gè)方法public ModelAndView modify()以及index.jsp中一個(gè)javascript功能function doEdit()的編碼,實(shí)現(xiàn)所需要的功能。主要修改代碼如下所示:Java類(lèi):public ModelAndView modify(HttpServletRequest request, HttpServletResponse response) throws AppException,IOException String id = ServletRequestUtils.getStringParameter(request, id, -1); String mode = request.getParameter(p_param_mode); String value = request.getParameter(p_param_value); Sys_param sys_param = this.sys_paramService.queryTableById(id); try sys_param.setParam_mode(mode); sys_param.setParam_value(value); sys_param.setId(id); this.sys_paramService.update(sys_param); showMessage(request, 修改系統(tǒng)參數(shù)表成功); MirrorCacheTool.refresh(sys_param); catch(AppException e) logger.error(修改系統(tǒng)參數(shù)表 + sys_param + 失敗, e); showMessage(request, 修改系統(tǒng)參數(shù)表失?。?+ e.getMessage(), e); return query(request, response); JavaScript :function doEdit() var frm = window.document.forms0; var menuDiv = window.document.getElementById(menuDiv); if(getCheckedCount(frm.p_id)=0) alert(請(qǐng)選擇一條記錄); else if(getCheckedCount(frm.p_id) 1) alert(每次只能修改一條記錄); else if(getCheckedCount(frm.p_id) = 1) menuDiv.innerHTML = ; /點(diǎn)擊提交以后將菜單設(shè)置為不可用,防止重復(fù)提交 frm.m.value = edit; frm.submit(); 最后在jsp頁(yè)面中調(diào)用編寫(xiě)的javascript即可實(shí)現(xiàn)編寫(xiě)的功能。界面完成后如圖2.3、2.4、2.5所示。圖2.3 系統(tǒng)參數(shù)設(shè)置index.jsp頁(yè)面圖2.4 系統(tǒng)參數(shù)設(shè)置學(xué)校名稱(chēng)參數(shù)修改圖2.5 系統(tǒng)參數(shù)設(shè)置成績(jī)錄入開(kāi)關(guān)參數(shù)修改在完成了系統(tǒng)參數(shù)設(shè)置模塊的代碼編寫(xiě)和功能實(shí)現(xiàn)后,有進(jìn)行了學(xué)校信息表和專(zhuān)業(yè)課程表兩個(gè)頁(yè)面模塊的編寫(xiě)工作,編寫(xiě)的基本流程與系統(tǒng)參數(shù)設(shè)置基本相同,需要實(shí)現(xiàn)對(duì)表中數(shù)據(jù)的增加(add,jsp)、修改(edit,jsp)、刪除等功能。實(shí)現(xiàn)頁(yè)面如圖2.62.9所示。圖2.6 學(xué)校信息表index.jsp頁(yè)面圖2.7 學(xué)校信息表add.jsp界面圖2.8 學(xué)校信息查詢(xún)edit.jsp頁(yè)面圖2.9 專(zhuān)業(yè)課程表index.jsp頁(yè)面完成了全部的代碼編寫(xiě)后便將所編寫(xiě)的代碼上傳到CVS(Concurrent Version System)服務(wù)器上,完成了這段時(shí)間的工作。在進(jìn)行留學(xué)生管理系統(tǒng)的部分模塊的編寫(xiě)和實(shí)現(xiàn)時(shí),同時(shí)我還進(jìn)行這Qt的學(xué)習(xí),利用Qt進(jìn)行局域網(wǎng)聊天軟件的編寫(xiě)和實(shí)現(xiàn)。3局域網(wǎng)聊天軟件程序開(kāi)發(fā)3.1開(kāi)發(fā)技術(shù)3.1.1關(guān)鍵技術(shù)與理論(1) P2P技術(shù):對(duì)等網(wǎng)絡(luò)互聯(lián)技術(shù)(Peer to Peer,P2P)是一種新型的網(wǎng)絡(luò)技術(shù),依賴(lài)網(wǎng)絡(luò)中參與者的計(jì)算能力與帶寬,在P2P構(gòu)成的網(wǎng)絡(luò)中,沒(méi)有客戶(hù)端和服務(wù)器的概念,對(duì)于每個(gè)節(jié)點(diǎn),相對(duì)于網(wǎng)絡(luò)中的其他節(jié)點(diǎn)來(lái)說(shuō),它既是客戶(hù)端,又是服務(wù)器。該技術(shù)擁有較佳的并行處理能力和效率,并且易于維護(hù)3。(2) UDP協(xié)議:用戶(hù)數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol, UDP),是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議。UDP協(xié)議只提供數(shù)據(jù)的不可靠傳輸,一旦將數(shù)據(jù)發(fā)送出去,就不保留數(shù)據(jù)備份。UDP協(xié)議的數(shù)據(jù)報(bào)頭由4個(gè)域構(gòu)成:源端口號(hào)、目標(biāo)端口號(hào)、數(shù)據(jù)報(bào)長(zhǎng)度、校驗(yàn)值。UDP協(xié)議是一個(gè)無(wú)連接協(xié)議傳輸數(shù)據(jù)之前源端和終端不建立連接,因而可以實(shí)現(xiàn)一臺(tái)服務(wù)器向多個(gè)客戶(hù)端發(fā)送消息的功能。(3) TCP協(xié)議:傳輸控制協(xié)議(Transmission Control Protocol,TCP),是一種面向連接的、可靠的、基于字節(jié)流運(yùn)輸層(Transport layer)的通信協(xié)議。相比較于UDP協(xié)議,TCP協(xié)議具有面向連接、有序數(shù)據(jù)傳輸、無(wú)錯(cuò)誤數(shù)據(jù)傳輸?shù)葍?yōu)勢(shì),因而在進(jìn)行文件傳輸時(shí)可以保證傳輸文件的正確性,避免丟包現(xiàn)象的發(fā)生。(4) Socket網(wǎng)絡(luò)編程接口:Socket套接字接口,是一個(gè)應(yīng)用程序接口(API),使用一個(gè)Internet套接字的概念,使主機(jī)間或者一臺(tái)計(jì)算機(jī)上的進(jìn)程間可以通訊。Socket的連接過(guò)程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng)、客戶(hù)端請(qǐng)求和確認(rèn)連接。具體過(guò)程為客戶(hù)端的套接字向處于等待連接狀態(tài)的服務(wù)器發(fā)送連接請(qǐng)求,服務(wù)器接收并響應(yīng)請(qǐng)求,然后把服務(wù)端的套接字描述發(fā)回給客戶(hù)端,建立連接。而服務(wù)器端則繼續(xù)處于等待狀態(tài),等待其他套接字的連接請(qǐng)求。因而利用socket可以實(shí)現(xiàn)單服務(wù)器多客戶(hù)端的同是響應(yīng)連接。圖3.1 Socket工作流程圖3.1.2開(kāi)發(fā)工具(1) Qt libraries Qt libraries是一個(gè)由挪威Trolltech 公司開(kāi)發(fā)的跨平臺(tái)的C+圖形界面庫(kù),主要用于Windows、Mac-Os和Linux等環(huán)境下GUI的開(kāi)發(fā)。Qt采用面向?qū)ο蟮木幊陶Z(yǔ)言,學(xué)習(xí)簡(jiǎn)單、易于擴(kuò)展、并且允許組件編程。諾基亞公司提供三種Qt授權(quán)方式,其中LGPL和GPL是免費(fèi)發(fā)布的,而商業(yè)版需要收取授權(quán)費(fèi)用。本程序開(kāi)發(fā)所使用的是Qt libraries 4.8.2 for Windows是諾基亞公司于2012年5月22日發(fā)布的,其功能上融合了數(shù)據(jù)庫(kù)、OpenGL、多媒體庫(kù)、NetWorking、Webkit、XML等常用的庫(kù)文件,核心庫(kù)中也加入多進(jìn)程和多線(xiàn)程間的通信模塊,大大擴(kuò)展和豐富了Qt開(kāi)發(fā)大規(guī)模復(fù)雜平臺(tái)應(yīng)用程序的能力在真正意義上實(shí)現(xiàn)了“Code Less; Create More; Deploy Anywhere”的研發(fā)宗旨。(2) Qt Creator Qt Creator是實(shí)現(xiàn)Qt開(kāi)發(fā)的輕量級(jí)跨平臺(tái)集成開(kāi)發(fā)環(huán)境(IDE)。Qt Creator內(nèi)包含了用于開(kāi)發(fā)和測(cè)試Qt應(yīng)用程序的完整工具,其中包括C+代碼編輯器、上下文代碼感知器、可視化Debug、代碼管理器、Qt Designer、項(xiàng)目和構(gòu)建管理工具等。在進(jìn)行Qt開(kāi)發(fā)時(shí)使用Qt Creator一定程度上可以確保首次上手接觸Qt框架的開(kāi)發(fā)人員能夠迅速上手操作編程。3.2可行性分析可行性分析的任務(wù)是從技術(shù)上、業(yè)務(wù)上、操作上分析所提出的項(xiàng)目是否可行??尚行匝芯康哪康木褪怯米钚〉拇鷥r(jià)在盡可能短的時(shí)間內(nèi)確定系統(tǒng)目標(biāo)和規(guī)模是否可行,是否能夠解決,是否值得解決。3.2.1業(yè)務(wù)可行性隨著互聯(lián)網(wǎng)的迅速發(fā)展,網(wǎng)上實(shí)時(shí)聊天和傳輸文件變成了很多用戶(hù)的需求。而在各個(gè)公司、學(xué)校、乃至學(xué)生宿舍,局域網(wǎng)聊天室也成為了一個(gè)團(tuán)隊(duì)進(jìn)行交流信息的主要工具之一。利用局域網(wǎng)聊天室,成員可以不受具體物理環(huán)境的限制,通過(guò)網(wǎng)絡(luò)進(jìn)行問(wèn)題的探討以及文件的傳輸。3.2.2 技術(shù)可行性隨著計(jì)算機(jī)技術(shù)的發(fā)展,對(duì)于該局域網(wǎng)聊天室,很多語(yǔ)言和集成開(kāi)發(fā)環(huán)境都是理想的選擇。根據(jù)實(shí)際情況,我決定使用基于Qt的跨平臺(tái)C+圖形界面設(shè)計(jì)庫(kù)來(lái)進(jìn)行軟件的開(kāi)發(fā)。Qt在進(jìn)行圖形界面開(kāi)發(fā)上提供了豐富的庫(kù)和API接口,并且提供了Socket實(shí)現(xiàn)通信鏈句柄。3.2.3 操作可行性Qt實(shí)現(xiàn)的軟件具有友好的界面和簡(jiǎn)單易懂的操作提示,很方便用戶(hù)上手即用。在進(jìn)行文件傳輸時(shí),使用TCP協(xié)議進(jìn)行傳輸也保證了數(shù)據(jù)的安全性以及準(zhǔn)確性。3.3 需求分析需求分析是在可行性研究的基礎(chǔ)上,將用戶(hù)對(duì)系統(tǒng)的描述,通過(guò)開(kāi)發(fā)人員的分析概括,抽象為完整的需求定義,再形成一系列文檔的過(guò)程??尚行匝芯恐荚谠u(píng)估目標(biāo)系統(tǒng)是否值得去開(kāi)發(fā),問(wèn)題是否能夠解決,而需求分析旨在回答系統(tǒng)做什么的問(wèn)題,通過(guò)需求分析明確開(kāi)發(fā)軟件的功能、性能和GUI界面,使軟件開(kāi)發(fā)人員清楚的明白用戶(hù)的需求,確保將來(lái)開(kāi)發(fā)出來(lái)的軟件產(chǎn)品能夠真正滿(mǎn)足用戶(hù)的需要。3.3.1 運(yùn)行環(huán)境硬件環(huán)境:HDD 10G以上、內(nèi)存 1G以上操作系統(tǒng):Microsoft Windows XP及系統(tǒng)以后版本3.3.2 功能需求(1) 功能需求說(shuō)明1) 局域網(wǎng)聊天室實(shí)時(shí)聊天功能:主要需要實(shí)現(xiàn)局域網(wǎng)多用戶(hù)之間的實(shí)時(shí)聊天通信,并且用戶(hù)可以直接看到所在局域網(wǎng)內(nèi)其他用戶(hù)的IP信息,用戶(hù)在進(jìn)行聊天時(shí)可以進(jìn)行字體、字號(hào)、顏色、加粗、傾斜、下劃線(xiàn)等設(shè)置,也可以保存聊天記錄。2) 局域網(wǎng)內(nèi)文件傳輸:實(shí)現(xiàn)局域網(wǎng)內(nèi)兩個(gè)用戶(hù)之間文件的相互傳輸。當(dāng)一個(gè)用戶(hù)向另一個(gè)用戶(hù)發(fā)送文件時(shí),另一個(gè)用戶(hù)可以選擇接受文件或者拒絕接收。如果接收文件則開(kāi)始進(jìn)行文件傳輸,傳輸過(guò)程中顯示文件傳輸?shù)乃俣?、用時(shí)、文件總大小、已接受文件大小和剩余時(shí)間。如果拒絕接收,則不發(fā)送文件,并返回發(fā)送端對(duì)方拒絕接收的消息。3) 局域網(wǎng)私聊功能:在用戶(hù)信息欄中雙擊一個(gè)用戶(hù)則可打開(kāi)私聊窗口與該用戶(hù)實(shí)現(xiàn)私聊通信。與局域網(wǎng)聊天室功能相同,可以實(shí)現(xiàn)字體、字號(hào)、顏色、加粗、傾斜、下劃線(xiàn)的設(shè)置,可以 保存聊天記錄。(2) 系統(tǒng)功能描述實(shí)現(xiàn)根據(jù)所提出的需求利用Rational Rose進(jìn)行用例圖的設(shè)計(jì)。利用用例圖可以描述業(yè)務(wù)功能,指導(dǎo)以后軟件的測(cè)試環(huán)節(jié),并且在整個(gè)軟件開(kāi)發(fā)過(guò)程中對(duì)工作流起到指導(dǎo)作用。圖3.2 系統(tǒng)用例圖描述表3.1 chatroom用例說(shuō)明表用例名:chatroom簡(jiǎn)要說(shuō)明:局域網(wǎng)內(nèi)用戶(hù)進(jìn)入聊天室進(jìn)行聊天事件流:用戶(hù)進(jìn)入局域網(wǎng)聊天工具頁(yè)面 在界面文本框中輸入想要發(fā)送的信息 點(diǎn)擊發(fā)送按鈕發(fā)送信息 信息顯示在輸出信息文本框內(nèi)前置條件:用戶(hù)輸入合法信息并提交后置條件:系統(tǒng)處理用戶(hù)發(fā)出的信息并顯示在輸出信息文本框中活動(dòng)圖:圖3.3 聊天室功能活動(dòng)圖描述表3.2 fileTransport用例描述用例名:fileTransport簡(jiǎn)要說(shuō)明:局域網(wǎng)內(nèi)用戶(hù)進(jìn)行文件傳輸事件流:用戶(hù)進(jìn)入局域網(wǎng)聊天工具 點(diǎn)擊發(fā)送文件按鈕,選擇發(fā)送的文件 接收方給予響應(yīng) 進(jìn)行文件傳輸 前置條件:用戶(hù)選擇合法的文件、接收方選擇確定接收文件后置條件:系統(tǒng)通過(guò)TCP協(xié)議進(jìn)行文件傳輸活動(dòng)圖:圖3.4 文件傳輸功能活動(dòng)圖描述表3.3 privateChat用例描述用例名:privateChat簡(jiǎn)要說(shuō)明:局域網(wǎng)內(nèi)兩用戶(hù)私聊事件流:用戶(hù)進(jìn)入局域網(wǎng)聊天工具 雙擊用戶(hù)信息欄中的某個(gè)用戶(hù)名打開(kāi)私聊窗口 發(fā)送消息 對(duì)方接收消息前置條件:用戶(hù)選擇局域網(wǎng)中在線(xiàn)的某個(gè)用戶(hù)并發(fā)送合法消息后置條件:系統(tǒng)處理用戶(hù)發(fā)送的信息并在對(duì)方系統(tǒng)上打開(kāi)私聊窗體,顯示消息活動(dòng)圖:圖3.5私聊功能活動(dòng)圖描述3.3.3性能需求支持網(wǎng)絡(luò)通信,實(shí)現(xiàn)全方位多功能的點(diǎn)對(duì)點(diǎn)通信和文件傳輸功能。系統(tǒng)的局域網(wǎng)聊天功能要求及時(shí)性,還要求盡可能提高文件傳輸?shù)陌踩院蛡鬏斝?,避免無(wú)效數(shù)據(jù)的傳輸。3.3.4界面需求界面設(shè)計(jì)要求美觀(guān),人機(jī)交互界面友好。本程序要求設(shè)計(jì)3個(gè)窗體實(shí)現(xiàn)軟件功能,分別為聊天主程序窗體、發(fā)送文件窗體、接收文件窗體。根據(jù)已有的需求信息和功能分析,聊天主程序窗體需要有信息的輸入框和顯示框、需要能夠現(xiàn)實(shí)局域網(wǎng)中各個(gè)用戶(hù)的IP地址和用戶(hù)名、能夠?qū)斎胛淖值淖煮w、字號(hào)等進(jìn)行設(shè)置,以及傳輸文件按鍵。發(fā)送文件和接收文件窗體需要能夠選擇設(shè)置需要發(fā)送和接受的文件路徑,可以顯示文件傳輸進(jìn)度等。3.4 概要設(shè)計(jì)系統(tǒng)概要設(shè)計(jì)的目的就是根據(jù)需求分析結(jié)果確定系統(tǒng)是由哪些模塊哪些功能組成的,這些模塊之間又有怎樣的關(guān)系,每個(gè)模塊是如何實(shí)現(xiàn)的。模塊化的依據(jù)是抽象、信息屏蔽和局部化、自頂向下逐步求精和模塊的獨(dú)立性,依照高內(nèi)聚低耦合的原則對(duì)系統(tǒng)進(jìn)行模塊化設(shè)計(jì)。3.4.1總體設(shè)計(jì)(1) 系統(tǒng)實(shí)現(xiàn)原理聊天系統(tǒng)的設(shè)計(jì)最重要的就是系統(tǒng)實(shí)時(shí)性的保證。為了減少客戶(hù)端-服務(wù)器這種方式在利用中繼設(shè)備進(jìn)行傳輸時(shí)消耗的時(shí)間,因此該局域網(wǎng)聊天軟件采取P2P技術(shù),實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的連接,這樣處在局域網(wǎng)聊天軟件中的每個(gè)用戶(hù),相對(duì)于其他用戶(hù)來(lái)說(shuō)既是客戶(hù)端,又是服務(wù)器,以此來(lái)避免多用戶(hù)進(jìn)入聊天室時(shí)服務(wù)器響應(yīng)時(shí)間過(guò)長(zhǎng)而導(dǎo)致的系統(tǒng)實(shí)時(shí)性過(guò)差的問(wèn)題發(fā)生。在程序的網(wǎng)絡(luò)通信數(shù)據(jù)傳輸上,即時(shí)聊天采取UDP協(xié)議進(jìn)行數(shù)據(jù)報(bào)的傳輸。利用UDP無(wú)連接協(xié)議可以更快的實(shí)現(xiàn)數(shù)據(jù)報(bào)的傳輸,更好的實(shí)現(xiàn)聊天的實(shí)時(shí)性要求。而文件傳輸則采用TCP協(xié)議。TCP協(xié)議是面向連接的、可靠的通信協(xié)議,具有有序數(shù)據(jù)傳輸、無(wú)錯(cuò)誤數(shù)據(jù)傳輸?shù)葍?yōu)點(diǎn),這樣可以保證文件傳輸中傳輸文件的安全性和完整性,盡可能的避免出現(xiàn)壞包現(xiàn)象的發(fā)生。(2) 系統(tǒng)總體功能結(jié)構(gòu)1) 系統(tǒng)主要的功能框架如圖所示:圖3.6 局域網(wǎng)聊天室軟件功能結(jié)構(gòu)2) 各個(gè)模塊功能描述:局域網(wǎng)聊天:登錄聊天界面,可以對(duì)輸入的文字信息進(jìn)行字體、字號(hào)、加粗、傾斜、下劃線(xiàn)和文字顏色的設(shè)置,可以對(duì)聊天記錄進(jìn)行保存,也可以清除信息框中的聊天信息。通過(guò)聊天界面窗體可以顯示聊天室內(nèi)其他用戶(hù)的用戶(hù)名和IP。文件傳輸:可以在聊天室內(nèi)用戶(hù)之間進(jìn)行文件的發(fā)送和接收。用戶(hù)私聊:可以實(shí)現(xiàn)聊天室內(nèi)任意兩個(gè)用戶(hù)私聊功能。也可以對(duì)輸入的文字信息進(jìn)行字體、字號(hào)、加粗、傾斜、下劃線(xiàn)和文字顏色的設(shè)置,可以對(duì)聊天記錄進(jìn)行保存,也可以清除信息框中的聊天信息。3.4.2接口設(shè)計(jì)(1)用戶(hù)接口:系統(tǒng)采用圖形用戶(hù)接口,以鼠標(biāo)和鍵盤(pán)作為用戶(hù)接口,方便用戶(hù)對(duì)軟件進(jìn)行操作。用戶(hù):登錄系統(tǒng);系統(tǒng):顯示UI界面。用戶(hù):發(fā)送聊天信息;系統(tǒng):顯示聊天信息。用戶(hù):雙擊聊天室內(nèi)其他用戶(hù);系統(tǒng):顯示私聊窗口(2)內(nèi)部接口:UI界面與聊天接口:輸入:聊天信息;輸出:顯示聊天信息。UI界面與傳輸文件接口:輸入:傳輸文件路徑;輸出:傳輸操作。UI界面與顯示信息接口:輸入:登錄信息;輸出:顯示用戶(hù)登錄名、登錄IP。3.4.3系統(tǒng)出錯(cuò)設(shè)計(jì)(1) 出錯(cuò)信息1) 進(jìn)行文件傳輸時(shí)若無(wú)法與所在網(wǎng)絡(luò)中的其他節(jié)點(diǎn)連接,則應(yīng)做出正確提示。2) 聊天時(shí)出現(xiàn)非法操作時(shí),通過(guò)信息對(duì)話(huà)框給出相應(yīng)提示。3) 傳輸文件出現(xiàn)非法操作時(shí),通過(guò)對(duì)話(huà)框給予相應(yīng)提示。(2) 補(bǔ)救措施當(dāng)系統(tǒng)出現(xiàn)錯(cuò)誤時(shí),如果是嚴(yán)重錯(cuò)誤如內(nèi)存泄露等問(wèn)題將直接關(guān)閉程序并提示用戶(hù);若為一般錯(cuò)誤,則通過(guò)messageBox彈出對(duì)話(huà)框給予用戶(hù)提示,讓用戶(hù)重新進(jìn)行操作。3.5 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)階段的根本目標(biāo)是確定應(yīng)該怎樣具體的實(shí)現(xiàn)所要求的系統(tǒng),換言之,經(jīng)過(guò)這個(gè)階段的設(shè)計(jì)工作,應(yīng)該得出目標(biāo)系統(tǒng)的精確描述,從而在編碼階段可以把這個(gè)描述直接翻譯成用某總程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的程序。詳細(xì)設(shè)計(jì)的目標(biāo)不僅僅是邏輯上正確地實(shí)現(xiàn)每個(gè)模塊的功能,更重要的是設(shè)計(jì)的處理過(guò)程應(yīng)該盡可能簡(jiǎn)明易懂,詳細(xì)設(shè)計(jì)階段的任務(wù)還不是具體的編寫(xiě)程序,而是要設(shè)計(jì)出程序的“藍(lán)圖”,以后根據(jù)這個(gè)藍(lán)圖編寫(xiě)出實(shí)際的程序代碼。系統(tǒng)實(shí)現(xiàn)用于對(duì)程序具體設(shè)計(jì)的部分,根據(jù)詳細(xì)設(shè)計(jì)的結(jié)果,把它翻譯成符合某種語(yǔ)言的語(yǔ)法規(guī)則的代碼。3.5.1系統(tǒng)類(lèi)設(shè)計(jì)(1)系統(tǒng)類(lèi)圖總體設(shè)計(jì)圖3.7 系統(tǒng)類(lèi)圖描述(2)Widget類(lèi)1) 功能:Widget類(lèi)主要用于局域網(wǎng)聊天系統(tǒng)中界面各部分按鍵功能的統(tǒng)一實(shí)現(xiàn)以及聊天室內(nèi)利用UDP協(xié)議進(jìn)行聊天的功能實(shí)現(xiàn)。2) 類(lèi)圖圖3.8 Widget類(lèi)圖描述3) 類(lèi)詳細(xì)說(shuō)明表3.4 Widget類(lèi)方法詳細(xì)說(shuō)明函數(shù)名稱(chēng)返回值函數(shù)功能Widget(QWidget *parent = 0)無(wú)構(gòu)造函數(shù)Widget( )無(wú)析構(gòu)函數(shù)sendMessage(MessageType type,QString serverAddress = )void發(fā)送消息newparticipant(QString userName,QString localHostName,QString ipAddress)void新用戶(hù)加入聊天室participantLeft(QString userName,QString localHostName,QString time)void用戶(hù)離開(kāi)聊天室saveFile(const QString &fileName)void保存文件receiveMessage( )void接收消息formatChange(const QTextCharFormat &format)void改變字體設(shè)置receiveFile(QString userName,QString serverAddress,QString clientAddress,QString fileName)void接收文件showChat(QString name,QString ip)void構(gòu)造私聊窗體getFileName(Qstring fileName)void獲取接收文件的文件名getUserName( )QString獲取用戶(hù)名getMessage( )QString獲取文本框中信息getIP( )QString獲取用戶(hù)ipeventFilter(QObject *watched, QEvent *event)bool事件過(guò)濾器changeEvent(QEvent *e)void改變窗體響應(yīng)closeEvent(QCloseEvent *evnet)void關(guān)閉窗體響應(yīng)on_send_clicked( )void發(fā)送按鍵on_fontComboBox_currentFontChanged(QFont font)void字體設(shè)置on_fontsizeComboBox_currentIndexChanged(QString)void字號(hào)設(shè)置on_textbold_clicked(bool checked)void加粗設(shè)置on_textitalic_clicked(bool checked)void傾斜設(shè)置on_textUnderline_clicked(bool checked)void下劃線(xiàn)設(shè)置on_textcolor_clicked( )void顏色設(shè)置on_sendfile_clicked( )void發(fā)送文件按鍵on_save_clicked( )void保存聊天記錄on_clear_clicked( )void 清除聊天記錄on_tableWidget_doubleClicked(QModelIndex index)void雙擊信息顯示框(3)TcpServer類(lèi)1) 功能TcpServer類(lèi)繼承了系統(tǒng)類(lèi)QDialog,為局域網(wǎng)聊天室軟件傳送文件模塊提供了發(fā)送文件的界面,并且利用QTcpServer類(lèi)實(shí)現(xiàn)了傳輸文件中服務(wù)器端的功能。2) 類(lèi)圖圖3.9 TcpServer類(lèi)圖描述3) 類(lèi)詳細(xì)說(shuō)明表3.5 TcpServer類(lèi)方法詳細(xì)說(shuō)明函數(shù)名稱(chēng)返回值函數(shù)功能TcpServer(QWidget *parent=0)無(wú)構(gòu)造函數(shù)TcpServer( )無(wú)析構(gòu)函數(shù)initServer( )void服務(wù)器初始化sendMessage( )void發(fā)送消息refused( )void拒絕接收updateProgress(qint64 numBytes)void更新進(jìn)度條sendFileName(QString fileName)void發(fā)送文件名closeEvent(QCloseEvent *)void關(guān)閉窗體響應(yīng)changeEvent(QEvent *)void改變窗體響應(yīng)on_choose_clicked( )void選擇按鍵on_send_clicked( )void發(fā)送按鍵on_quit_clicked( )void退出按鍵(4) TcpClient類(lèi)1) 功能TcpClient繼承了系統(tǒng)類(lèi)QDialog,主要為局域網(wǎng)聊天室軟件提供了接收文件的圖形化界面,同時(shí)實(shí)現(xiàn)了傳輸文件模塊中客戶(hù)端的功能。2) 類(lèi)圖圖3.10 TcpClient類(lèi)圖描述3) 類(lèi)詳細(xì)說(shuō)明表3.6 TcpClient類(lèi)方法詳細(xì)說(shuō)明函數(shù)名稱(chēng)返回值函數(shù)功能TcpClient(QWidget *parent=0)無(wú)構(gòu)造函數(shù)TcpClient( )無(wú)析構(gòu)函數(shù)setHostAddress(QHostAddress address)void設(shè)置主機(jī)地址setFileName(QString fileName)void獲取文件名newConnect( )void建立新連接readMessage( )void讀取傳輸信息displayError(QAbstractSocket:SocketError socketError)void傳輸錯(cuò)誤處理changeEvent(QEvent *e)void窗體改變響應(yīng)on_cancel_clicked( )void取消按鍵(4) chat類(lèi)1) 功能chat類(lèi)繼承了系統(tǒng)類(lèi)QDialog,與聊天室功能類(lèi)似,利用系統(tǒng)類(lèi)QUdpSocket進(jìn)行了局域網(wǎng)中兩個(gè)用戶(hù)私聊功能的實(shí)現(xiàn)2) 類(lèi)圖圖3.11 chat類(lèi)圖描述3) 類(lèi)詳細(xì)說(shuō)明表3.6 chat類(lèi)方法詳細(xì)說(shuō)明函數(shù)名稱(chēng)返回值函數(shù)功能chat(QString name, QString ip)無(wú)構(gòu)造函數(shù)chat()無(wú)析構(gòu)函數(shù)sendMessage(MessageType type,QString serverAddress=)void發(fā)送消息participantLeft(QString userName,QString localHostName,QString time)void用戶(hù)退出私聊receiveMessage()void接收消息formatChange(const QTextCharFormat &format)void改變字體設(shè)置saveFile(const QString &fileName)bool保存文件getUserName()Qstring獲取聊天室內(nèi)用戶(hù)名getMessage()Qstring獲取文本框中信息getIP()Qstring獲取聊天室內(nèi)用戶(hù)ipeventFilter(QObject *target, QEvent *event)bool事件過(guò)濾器on_send_clicked()void發(fā)送按鍵on_quit_clicked()void退出按鍵on_fontComboBox_currentFontChanged(QFont font)void字體設(shè)置on_fontsizeComboBox_currentIndexChanged(QString)void字號(hào)設(shè)置on_textbold_clicked(bool checked)void加粗設(shè)置on_textitalic_clicked(bool checked)void傾斜設(shè)置on_textUnderline_clicked(bool checked)void下劃線(xiàn)設(shè)置on_textcolor_clicked()void顏色設(shè)置on_save_clicked()void保存聊天記錄on_clear_clicked()void 清除聊天記錄3.5.2模塊設(shè)計(jì)(1) 聊天室模塊 1) 聊天室模塊程序流程圖 圖3.12 聊天室接收端程序流程圖圖3.13 聊天室發(fā)送端程序流程圖2) 模塊詳細(xì)描述局域網(wǎng)群聊軟件群聊功能的實(shí)現(xiàn)可以將局域網(wǎng)中的每個(gè)節(jié)點(diǎn)既當(dāng)成客戶(hù)端又當(dāng)成服務(wù)器來(lái)考慮。當(dāng)節(jié)點(diǎn)發(fā)送消息時(shí),該節(jié)點(diǎn)相當(dāng)于客戶(hù)端,系統(tǒng)獲取節(jié)點(diǎn)的登錄ip、用戶(hù)名和主機(jī)名,然后將聊天信息輸入欄中的消息通過(guò)udp協(xié)議以數(shù)據(jù)報(bào)的形式發(fā)送到其他節(jié)點(diǎn)。當(dāng)節(jié)點(diǎn)接收消息時(shí),節(jié)點(diǎn)相當(dāng)于服務(wù)器,系統(tǒng)通過(guò)UdpSocket綁定一個(gè)固定的端口,然后利用信號(hào)槽對(duì)網(wǎng)絡(luò)進(jìn)行監(jiān)聽(tīng)。如果收到數(shù)據(jù)報(bào),則根據(jù)數(shù)據(jù)報(bào)的消息類(lèi)型(MessageType)確定處理方式。若是新用戶(hù)加入聊天室,則更新用戶(hù)列表并在聊天窗口上添加新用戶(hù)的上線(xiàn)通知;若為用戶(hù)離開(kāi)聊天室,則刪除用戶(hù)列表中離開(kāi)用戶(hù)的具體信息并在聊天窗口中提示用戶(hù)下線(xiàn)通知。若接收到聊天消息,則將收到的聊天消息顯示在聊天窗口上。(2) 文件傳輸模塊1) 文件傳輸模塊程序流程圖圖3.14 文件傳輸模塊發(fā)送端程序流程圖圖3.15 文件傳輸模塊接收端程序流程圖2) 文件傳輸模塊詳細(xì)描述文件傳輸模塊利用TCP協(xié)議進(jìn)行文件傳輸,同樣對(duì)于局域網(wǎng)中的各個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)既是服務(wù)器又是客戶(hù)端。當(dāng)需要進(jìn)行文件傳輸時(shí),發(fā)送端承擔(dān)著服務(wù)器角色。選擇需要發(fā)送的文件并且先通過(guò)udp協(xié)議將文件名傳輸?shù)浇邮斩耍绻邮斩司芙^接收則返回信息提示,若接收端同意接收則利用tcp進(jìn)行文件的傳輸。而在文件傳輸?shù)倪^(guò)程中,接收端承擔(dān)著客戶(hù)端的角色。當(dāng)收到某個(gè)ip傳送過(guò)來(lái)的文件接收信息時(shí),若選擇接收文件則從發(fā)送端處利用TCP協(xié)議接收文件并存放在指定路徑。若拒絕接收則返回發(fā)送端拒絕信息。(3) 私聊模塊1) 私聊模塊程序流程圖圖3.16 私聊模塊發(fā)送消息程序流程圖圖3.17 私聊模塊接收消息程序流程圖2) 私聊模塊詳細(xì)描述對(duì)于發(fā)送端,用戶(hù)想與私聊對(duì)象進(jìn)行私聊時(shí),首先通過(guò)私聊對(duì)象的主機(jī)名和ip建立了privateChat類(lèi),然后綁定本地ip和私聊用的端口。私聊類(lèi)建立以后,利用主群聊的udpSocket向通訊對(duì)方的ip和端口發(fā)送消息類(lèi)型(xchat)、本地用戶(hù)名、主機(jī)名、用戶(hù)ip,完成后顯示私聊窗體。然后即可通過(guò)私聊類(lèi)建立的socket進(jìn)行私聊。對(duì)于接收端,當(dāng)接收到消息類(lèi)型為xchar后接受對(duì)方的用戶(hù)名、主機(jī)名和ip地址,并通過(guò)對(duì)方的用戶(hù)名和ip地址建立私聊類(lèi)privateChat,完成后顯示私

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論