




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、西北農(nóng)林科技大學信息工程學院面向對象程序設計實踐實習報告題 目: 簡易聊天軟件 學 號2015012755姓 名羅鍵昆專業(yè)班級電子商務1501指導教師王美麗老師實踐日期2017年6月26日-7月7日目 錄一、綜合訓練目的與要求1二、綜合訓練任務1三、總體設計1四、詳細設計說明7五、調試與測試16六、實習日志17七、實習總結20八、附錄:核心代碼清單20一、綜合訓練目的與要求(一) 目的學生通過利用面向對象程序設計思想進行項目開發(fā),加深學生對面向對象程序設計核心思想的理解,提高的編程能力,掌握撰寫規(guī)范程序設計文檔的能力,為今后從事軟件開發(fā)打下必要的基礎。(二) 要求通過本實踐性教學環(huán)節(jié),鞏固學生
2、理解和掌握面向對象程序設計的類、對象、繼承、接口等主要內(nèi)容。將理論與實踐結合,提高學生利用面向對象程序設計思想開發(fā)程序的能力。二、綜合訓練任務簡易聊天軟件要求:仿QQ軟件,開發(fā)簡潔美觀的界面,實現(xiàn)注冊、登錄、查找好友,文件傳輸和雙人或多人聊天等基本功能。三、總體設計根據(jù)題目要求和需求分析,我對簡易聊天軟件的總體設計如下: 圖1 用例圖圖2 類圖圖3 活動圖_注冊圖4 活動圖_登錄圖5 活動圖_查找好友圖6 活動圖_群聊圖7 活動圖_截圖四、詳細設計說明圖8-1 類圖_Clientframe圖8-2 運行結果_Clientframe(一) 登錄界面1. 界面構成頭像,Logo,背景均為JLabe
3、l。UI風格為Nimbus風格(以下均同)。清除窗口裝飾,并通過JLabel設計圖標及其對應監(jiān)聽器(以下均同)。2. 功能構成無界面拖動功能:沒有窗口修飾下實現(xiàn)拖動(以下均同)。注冊賬號:新建注冊界面。找回密碼:新建找回密碼界面。登錄:客戶端先判斷基本的賬號、密碼是否輸入,之后調用客戶端寫信息線程對服務器發(fā)送請求。圖9-1 類圖_Clientframe_register圖9-2 運行結果_Clientframe_register(二) 注冊賬號界面1. 界面構成提示信息、頭像為JLabel,密碼框與輸入密碼框為JPasswordField,頭像選擇框為JComboBox,其余輸入框均為JTex
4、tField。2. 功能構成注冊:發(fā)送注冊請求到服務器建立數(shù)據(jù)庫數(shù)據(jù)。返回:返回登錄界面。圖10-1 類圖_Clientframe_control圖10-2 運行結果_ Clientframe_control(三) 控制界面1. 界面構成頭像為JLabel,用戶信息為自定義的JList,它的模型為繼承AbstractListModel的ArrayList<>,它的列表項繼承了JLabel和實現(xiàn)了ListCellRenderer,詳細如圖10-1類圖_Clientframe_control2. 功能構成查看好友信息:點擊好友頭像查看信息。刷新好友列表:直接刷新好友列表。發(fā)起群聊:發(fā)起
5、多人聊天。添加好友:根據(jù)昵稱、賬號、地址等信息進行精確和模糊查找。吸附功能:類似QQ,貼近上邊緣自動吸附。圖11-1 類圖_Clientframe_add圖11-2 運行結果_Clientframe_add(四) 添加好友界面1. 界面構成提示信息為JLabel,輸入框為JTextField和一個添加按鈕Button2. 功能構成精確添加好友:查找好友唯一時直接添加好友。模糊添加好友:查找好友不唯一時彈出選擇框由用戶選擇添加好友。圖12-1 類圖_Clientframe_chat圖12-2 運行結果_Clientframe_chat(五) 聊天界面1. 界面構成輸入和輸出窗口為JtextAre
6、a,發(fā)送按鈕為Button,背景、截圖功能為JLabel。2. 功能構成群發(fā)信息:發(fā)送群發(fā)請求給服務器接著轉發(fā)給所有客戶端。截圖功能:截圖,并能顯示截圖點RGB值和截圖大小,最終以當前時間命名保存桌面。圖13 類圖_Server(六) 服務器類1. 界面構成無界面,運行后打印。2. 功能構成獲得服務器:可以獲得服務器唯一實例,一個服務器對應多客戶端,保證線程安全。獲得在線客戶端集合:每登錄一個客戶端便存儲在集合中,調用群發(fā)信息時使用。圖14 類圖_ServerJDBC(七) 服務器連接數(shù)據(jù)庫類1. 界面構成無界面,供調用數(shù)據(jù)庫時使用。2. 功能構成查詢功能:執(zhí)行查詢語句,返回ResultSet
7、。更新功能:執(zhí)行更新語句,返回影響行數(shù)。插入賬號功能:根據(jù)用戶輸入信息插入信息到用戶表,并返回生成的賬號。登錄驗證功能:判斷用戶賬號密碼是否一致。用戶頭像、用戶昵稱、好友列表信息:返回對應查詢到串值。添加朋友:插入用戶間關系到好友表中。圖15 類圖_ServerReaderThread(八) 服務器讀信息進程類1. 界面構成無界面,供客戶端發(fā)送功能請求時使用。2. 功能構成注冊、登錄、獲取昵稱、獲取頭像、獲取好友列表、找回密碼、查找好友、添加好友、群聊、退出功能:處理客戶端注冊等對應請求。圖16 類圖_ServerWriterThread(九) 服務器寫信息進程類1. 界面構成無界面,供服務器
8、讀信息進程類返回處理客戶端請求結果時使用。2. 功能構成輸出信息:建立線程輸出信息給客戶端。五、調試與測試(一) 對象流無法讀寫最初的預想是結合對象流和網(wǎng)絡編程以傳對象的方法對信息進行讀寫,但是在這個困難上困擾了兩天的時間,最后不得已放棄這個方法,改為用更有效率的前綴法,通過構建服務器和客戶端雙方協(xié)議,讀取某一類信息并進行處理。(二) 去除窗口裝飾(最小化、最大化、關閉)后無法拖動去除窗口修飾后,整個畫面風格變得非常優(yōu)美簡潔,但是帶來一個很大的缺點是無法拖動、最小化、關閉等基礎功能,鑒于此,我添加了兩個JLabel來模擬最小化和關閉的功能。并在查資料后獲得窗口拖動的方法,建立兩個點和鼠標監(jiān)聽器
9、,通過boolean變量來切換可否拖拽,并實時setLocation來改變窗口坐標。(三) 方法內(nèi)變量覆蓋類的變量有時為了方便申請變量的名字比較求簡,這時候容易造成方法內(nèi)變量覆蓋類變量的情況。方法內(nèi)變量覆蓋類變量后一些方法的輸出便變得很奇怪,這個時候并不會出現(xiàn)編譯錯誤、異常等明顯的錯誤,此時只需要使用回溯的思想,根據(jù)輸出的結果一點點追究源頭來發(fā)現(xiàn)覆蓋的變量名,發(fā)現(xiàn)后改名即可。六、實習日志(一) 6.26第一天1. 一天工作今天我的主要工作為前期分析,進行準備工作。完成了項目功能分類,類的設計概況,UML圖繪制,與學習相關繪制知識。具體成果有1張用例圖,1張類圖,4張活動圖。2. 遇到的問題最大
10、的問題是不知從何下手,其次是不清楚UML圖的具體功能及其繪制方法。3. 解決方案為解決不知從何下手,我首先明確我的項目“簡易聊天軟件”的基本功能有哪些并記錄紙上,同時利用知網(wǎng)搜索相關資料查閱類似項目概況。接著,我翻閱早已準備好的瘋狂Java講義,認真閱讀理解此書第二章理解面向對象,并且仔細閱讀UML的相關介紹內(nèi)容,大致了解了UML圖的功能。為了解UML圖繪制方法,我結合此書和搜索引擎及電子書大象Thinking in UML,在了解和模仿的基礎上不斷對書上內(nèi)容補充、更正,之后利用億圖圖示專家進行繪制。(二) 6.27第二天1. 一天工作早上我的工作仍然以前期準備工作為主。完成了類圖大致的具體設
11、計,與學習相關網(wǎng)絡編程知識。具體成果有1張類圖,2張活動圖。下午我進行了JDBC編程,對程序進行數(shù)據(jù)庫連接,同時編程實現(xiàn)了通用SQL函數(shù),以此完成了注冊的部分功能,成功將數(shù)據(jù)插入到數(shù)據(jù)庫表中。2. 遇到的問題最大的問題是不清楚網(wǎng)絡編程的具體過程,導致繪制類圖的時候沒有準確的屬性和方法,只能大概繪制。第二大問題是不熟悉JDBC編程的前期準備過程,最重要的是連接MySQL數(shù)據(jù)庫。3. 解決方案我先將網(wǎng)絡編程擺在一邊,將每個功能模塊可能涉及的數(shù)據(jù)項寫出,并初步完成表的劃分。接著進行數(shù)據(jù)庫連接,通過詢問老師和查閱瘋狂Java講義,安裝MySQL后,初步建表,添加JAR到程序后照著老師PPT和書上實例成
12、功連接數(shù)據(jù)庫。(三) 6.28第三天1. 一天工作今天我的工作以知識儲備為主。早上我深入學習了網(wǎng)絡編程的ServerSocket和Socket建立連接方法,并成功實現(xiàn)服務器和客戶端的連接。下午我學習了流的各種概念,掌握了各種流的基本使用方法,重點學習了重頭戲對象流,并明確了對象流的兩個關鍵點:一,父類最好序列化。二、引用類也應序列化。同時了解了序列化算法的流程,及自定義序列化將讓賬號傳輸加密,使其具有更高安全性。2. 遇到的問題心理上感覺一天沒怎么敲代碼,感覺心慌不踏實。3. 解決方案冷靜下來喝杯水,下位走一走,覺得今天的知識復習和儲備是值得的,因為后面的大量編程將多次使用到今天所重點學習的知
13、識。(四) 6.29第四天1. 一天工作早上我根據(jù)昨天學習的網(wǎng)絡編程ServerSocket和Socket建立方法和對象流,想通過網(wǎng)絡傳輸對象,但是卻一直報錯。整個早上都在調試bug,試圖修正錯誤,然而徒勞無功。和老師討論后發(fā)現(xiàn),我的服務器同時應該建立起多線程,并且通過這個討論的過程,我了解了使用Debug的一些小技巧。下午我瀏覽了多線程的內(nèi)容,根據(jù)網(wǎng)上的例子一步步將我的客戶端建立起來,并使用List將客戶端的Socket存儲起來以便管理。2. 遇到的問題不懂得將Java的三個難點“對象流”,“網(wǎng)絡編程”與“多線程”的知識完美結合在一起,寫出一個能正常運行的C/S結構。3. 解決方案將書上內(nèi)容
14、結合在一起,并深入理解流和網(wǎng)絡編程的知識。接著通過搜索引擎搜索相關小論文對比代碼。詢問老師,演示程序,討論得出解決大方向。將所遇到的問題利用搜索引擎尋找多線程的例子,模仿例子完善自我代碼。(五) 6.30第五天1. 一天工作認識到網(wǎng)絡編程最好結合界面來做后,我果斷拋棄一直堅持的問題,轉而進行界面的設計,完成了客戶端登錄界面和用戶界面,并進行了十分滿意的美化。同時設計了用戶界面像QQ一樣能吸附到上方的功能。2. 遇到的問題不懂得如何進行模仿QQ界面的窗口部件如最小化、關閉等的美化,不懂得如何實現(xiàn)吸附功能。3. 解決方案結合書上內(nèi)容,設計出大概布局,然后根據(jù)想實現(xiàn)的功能進行搜索,看懂別人實現(xiàn)方法后
15、根據(jù)我的需求進行更改。(六) 7.3第六天1. 一天工作由于下午和晚上要考試,今天的工作較少。今天我完成了界面的相對位置和相對大小的實現(xiàn)。因為每臺PC屏幕都可能不一樣,我根據(jù)操作環(huán)境的比例,設計了兩個函數(shù)使界面打開后能處于一個合適的大小和位置,提高用戶體驗。2. 遇到的問題不懂得如何在一開始調整界面相對大小及各個部件的位置。3. 解決方案根據(jù)需求使用搜索引擎獲得的方法進行改進并解決現(xiàn)實問題。(七) 7.4第七天1. 一天工作設計注冊賬號、找回密碼、登錄驗證的功能,并根據(jù)現(xiàn)實需求完善用戶體驗,同時對應通過數(shù)據(jù)庫類對數(shù)據(jù)庫進行增、查操作。2. 遇到的問題不懂得如何傳輸信息給服務器。3. 解決方案根
16、據(jù)需求使用搜索引擎得知,傳輸信息給服務器可以加個前綴,但最好不要使用硬編碼。并在服務器接收到信息的時候判斷這個信息對應的前綴要求實現(xiàn)怎樣的功能,同時根據(jù)需求調用數(shù)據(jù)庫類。(八) 7.5第八天1. 一天工作完成查找好友功能,能根據(jù)號碼、昵稱、郵箱、手機號、地址進行精確查找或模糊查找。2. 遇到的問題不懂數(shù)據(jù)庫的某些操作可能引發(fā)的異常,在數(shù)據(jù)庫查找沒有結果的時候不能夠使用next()函數(shù)進行取值,否則會引發(fā)異常。如果查找到多個好友如何選擇對應的那個并再傳信息給客戶端進行添加好友操作。3. 解決方案使用Array類存儲匹配到多個可能好友的串,并傳給輸入選擇框展示給用戶,接著再進行一次信息發(fā)送和返回。
17、(九) 7.6第九天1. 一天工作實現(xiàn)用戶列表功能和群聊功能,在自定義JList的基礎上實現(xiàn)群聊。2. 遇到的問題不懂如何實現(xiàn)自定義的JList。不懂如何實現(xiàn)群聊,在客戶端處統(tǒng)一實現(xiàn)Socket。3. 解決方案通過搜索引擎查找JList繼承AbstractListModel類和實現(xiàn)ListCellRenderer 接口的范例,并通過自己的具體情況進行深化,最后實現(xiàn)用戶列表含有用戶頭像、昵稱和賬號,并且點擊后可以顯示對應的信息。查看相關功能的視頻,并類似地學會思想,在服務器接收Socket的同時,以客戶端name為Key,對應的Socket為value,來生成一個對應的Map集合類。(十) 7.
18、7第十天1. 一天工作今天主要完成了PPT的設計,直至凌晨4點才睡。接著我負責收集全班的Java工程在自己的電腦上導入并配置好環(huán)境,讓下午1點的答辯能順利進行。到了下午進行答辯,在細節(jié)和溝通上沒有處理好,導致和老師產(chǎn)生矛盾,這是值得反思的。2. 遇到的問題視頻錄制和剪輯的時間過長。3. 解決方案日后多找機會鍛煉視頻錄制和剪輯的能力。七、實習總結通過這次實習,我深深認識到自己的編程僅僅局限在敲代碼層面上,而沒有上升到更為高級更為高效的面向對象系統(tǒng)設計當中。因此,日后課下應多多主動去了解相關系統(tǒng)設計的知識中,才能在日后的大程序設計中設計出高效、系統(tǒng)的程序。八、附錄:核心代碼清單(一) 登錄請求(客
19、戶端發(fā)送請求信息)void login() Socket socket = ChatUtil.getInstance().getSocket();/獲得唯一實例SocketPrintWriter pw = new PrintWriter(socket.getOutputStream();/輸出流 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream();/輸入流 pw.println(ChatUtil.LOGIN+num+ChatUtil.SPLIT+pas); /雙方協(xié)議好的前綴,
20、此時不應用硬編碼pw.flush(); /刷新緩沖區(qū)String message = "" /用來接收服務器返回的信息while(message=null | message.length()<=0) message = br.readLine();/等待服務器回傳信息 (二) 登錄請求(服務器處理請求信息)void login(String str)String arr = str.split(ChatUtil.SPLIT); /將客戶端發(fā)送的信息分隔開String number = arr1; /提取賬號String password = arr2; /提取密碼S
21、erverJDBC serverjdbc = new ServerJDBC(); /實例化服務器連接數(shù)據(jù)庫類if(serverjdbc.checkPassword(number, password)=true) /調用數(shù)據(jù)庫類方法驗證密碼new ServerWriterThread(socket,Client.ChatUtil.LOGIN+"succ").start(); /回傳登陸成功信息Map<String,Socket> userOnlineMap = server.getUserOnlineMap();/存儲客戶端的SocketuserOnlineMap.put(number, socket);/一個賬號對應一個Socket Collection<Socket> sockets = userOnlineMap.values();/存儲客戶端的Socket else new ServerWriterThread(socket,Client.ChatUtil.LOGIN+"fail").start();/回傳登陸失敗信息(三) 自定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 促進校園國際化的社團活動計劃
- 制定高科技企業(yè)安全方案計劃
- 加強對特殊群體的招聘與支持計劃
- 美容院面診知識培訓課件
- 貴州康騰能源集團有限公司畢節(jié)市七星關區(qū)小壩鎮(zhèn)王家壩煤礦變更礦產(chǎn)資源綠色開發(fā)利用方案(三合一)評審意見
- 小學英語五年級選詞填空
- 2025年河北貨運從業(yè)資格證模擬考試題及答案詳解
- 2025年合肥貨運從業(yè)資格證考試試題和答案詳解
- 鼻綜合培訓專業(yè)知識課件
- 【人教PEP版英語六年級上冊】期末測試卷(12)及答案
- 2025年安徽合肥市軌道交通集團限公司社會招聘24人高頻重點提升(共500題)附帶答案詳解
- 民法典合同編培訓
- 醫(yī)學倫理與醫(yī)患溝通技巧
- 個人信息保護:維護個人隱私和數(shù)據(jù)安全
- 5.3.2 函數(shù)的極值與最大(?。┲?第2課時 教學設計
- 2024-2030年中國油用牡丹行業(yè)需求狀況及產(chǎn)銷規(guī)模預測報告
- 無機化學實驗(下)知到智慧樹章節(jié)測試課后答案2024年秋陜西師范大學
- 高等教育自學考試自考《英語二》試題及答案指導(2025年)
- 急性心力衰竭-
- 痔瘡中醫(yī)治療課件
- 2024年皖北衛(wèi)生職業(yè)學院單招職業(yè)技能測試題庫
評論
0/150
提交評論