計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-通訊錄軟件系統(tǒng)設(shè)計(jì)_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-通訊錄軟件系統(tǒng)設(shè)計(jì)_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-通訊錄軟件系統(tǒng)設(shè)計(jì)_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-通訊錄軟件系統(tǒng)設(shè)計(jì)_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-通訊錄軟件系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、?計(jì)算機(jī)網(wǎng)絡(luò)?課程設(shè)計(jì)報(bào)告 題 目: 通訊錄軟件系統(tǒng) 學(xué)生姓名: 指導(dǎo)老師: 學(xué) 院: 信息科學(xué)與工程學(xué)院 專業(yè)班級(jí):物聯(lián)網(wǎng)工程1402班 完成時(shí)間: 2021年10月16日 目錄 TOC o 1-3 h z u HYPERLINK l _Toc465197034 第一章 需求分析 PAGEREF _Toc465197034 h 3 HYPERLINK l _Toc465197035 效勞器端功能要求 PAGEREF _Toc465197035 h 3 HYPERLINK l _Toc465197036 客戶端功能要求 PAGEREF _Toc465197036 h 3 HYPERLINK l

2、 _Toc465197037 第二章 總體設(shè)計(jì) PAGEREF _Toc465197037 h 3 HYPERLINK l _Toc465197038 總體結(jié)構(gòu) PAGEREF _Toc465197038 h 3 HYPERLINK l _Toc465197039 2.2 模塊關(guān)系 PAGEREF _Toc465197039 h 3 HYPERLINK l _Toc465197040 2.3 流程圖 PAGEREF _Toc465197040 h 4 HYPERLINK l _Toc465197041 第三章 詳細(xì)設(shè)計(jì) PAGEREF _Toc465197041 h 5 HYPERLINK l

3、 _Toc465197042 客戶端 PAGEREF _Toc465197042 h 5 HYPERLINK l _Toc465197043 效勞器端 PAGEREF _Toc465197043 h 8 HYPERLINK l _Toc465197044 函數(shù)調(diào)用關(guān)系 PAGEREF _Toc465197044 h 11 HYPERLINK l _Toc465197045 第四章 調(diào)試分析 PAGEREF _Toc465197045 h 12 HYPERLINK l _Toc465197046 第五章 運(yùn)行結(jié)果 PAGEREF _Toc465197046 h 13 HYPERLINK l _T

4、oc465197047 登錄功能 PAGEREF _Toc465197047 h 13 HYPERLINK l _Toc465197048 查詢本機(jī)通訊錄 PAGEREF _Toc465197048 h 14 HYPERLINK l _Toc465197049 備份每個(gè)用戶的通訊錄 PAGEREF _Toc465197049 h 15 HYPERLINK l _Toc465197050 更新每個(gè)用戶的通訊錄 PAGEREF _Toc465197050 h 16 HYPERLINK l _Toc465197051 加密功能 PAGEREF _Toc465197051 h 18 HYPERLINK

5、 l _Toc465197052 第六章 課程設(shè)計(jì)總結(jié) PAGEREF _Toc465197052 h 18 HYPERLINK l _Toc465197053 參考文獻(xiàn) PAGEREF _Toc465197053 h 20 HYPERLINK l _Toc465197054 附錄 PAGEREF _Toc465197054 h 20 第一章 需求分析本設(shè)計(jì)要求完成一個(gè)基于C/S模式的通訊錄備份軟件。采用C/S架構(gòu)。應(yīng)該具有易用、美觀的圖形界面。 效勞器端功能要求1能夠驗(yàn)證客戶身份,接收客戶端的備份通訊錄的請(qǐng)求,能夠?qū)崟r(shí)備份和更新客戶的通訊錄。 2 加密存儲(chǔ)每個(gè)用戶的通訊錄 客戶端功能要求1能

6、登陸連接到效勞器,回應(yīng):連接成功/失敗。2能備份本機(jī)通訊錄。3能實(shí)時(shí)更新本機(jī)通訊錄。4能查詢本機(jī)通訊錄。第二章 總體設(shè)計(jì)總體結(jié)構(gòu)客戶端建立一個(gè)本地文件存儲(chǔ)本地?cái)?shù)據(jù),通過(guò)對(duì)文件進(jìn)行讀寫操作,實(shí)現(xiàn)本地?cái)?shù)據(jù)的增、刪、查等功能。登錄成功后,可以將本地聯(lián)系人信息備份到效勞器,當(dāng)本地文件中的聯(lián)系人信息意外喪失時(shí),可以將效勞器端的備份內(nèi)容更新到本地聯(lián)系人信息,類似于微信的聯(lián)系人備份和導(dǎo)出功能。效勞器負(fù)責(zé)驗(yàn)證客戶端的登錄賬號(hào)和密碼,并通過(guò)JDBC與Mysql建立連接。在客戶登錄成功后,響應(yīng)客戶端的備份請(qǐng)求,實(shí)現(xiàn)聯(lián)系人數(shù)據(jù)的加密存儲(chǔ);響應(yīng)客戶端的更新要求,將客戶聯(lián)系人信息導(dǎo)入到本地文件中。2.2 模塊關(guān)系本地增

7、刪查改 圖2.2 通訊錄系統(tǒng)模塊關(guān)系圖2.3 流程圖 圖2.3 通訊錄系統(tǒng)流程圖第三章 詳細(xì)設(shè)計(jì)如下圖,一共建立了兩個(gè)包,客戶端和效勞器。圖3.1 通訊錄軟件工程包展開圖客戶端客戶端的三個(gè)類分別為L(zhǎng)ogin,LoginListener,Operation。3.1.1 Login類實(shí)現(xiàn)登錄界面,如圖3.2所示,并實(shí)例化LoginListener 類給登錄按鈕添加ActionListner 監(jiān)聽(tīng)方法。 圖3.2 通訊錄系統(tǒng)客戶端登錄界面3.1.2 LoginListener類實(shí)現(xiàn)ActionListener類,重寫抽象函數(shù)ActionPerformed。當(dāng)單擊登錄按鈕時(shí),利用Socket連接到效勞

8、器,將客戶的賬號(hào)和密碼傳給效勞器,等待效勞器傳來(lái)的驗(yàn)證結(jié)果。驗(yàn)證通過(guò)那么彈出操作主界面,失敗那么彈出用戶名或密碼錯(cuò)誤的窗體。響應(yīng)單擊登錄按鈕的代碼如下所示。public void actionPerformed(ActionEvent e) try /發(fā)送密碼和用戶名到客戶端 String user = text.getText(); String pass = pw.getText(); Socket s = new Socket(127.0.0.1,8000); OutputStream os = s.getOutputStream(); OutputStreamWriter osw =

9、new OutputStreamWriter(os); PrintWriter pw = new PrintWriter(osw ,true); pw.println(user+%+pass); /接收效勞器發(fā)回來(lái)確實(shí)認(rèn)信息 InputStream is = s.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String yorn = br.readLine(); /顯示登錄成功界面或密碼錯(cuò)誤界面 if(yorn.

10、equals(ok) Operation o = new Operation(); o.SetSocket(s); frame.dispose(); else JTextField text = new JTextField( 用戶名或密碼錯(cuò)誤); JFrame frame = new JFrame(); frame.setTitle(錯(cuò)誤); frame.setLocation(550,300); frame.setSize(200,100); frame.setDefaultCloseOperation(2); frame.add(text); frame.setVisible(true)

11、; catch(Exception e1) 3.1.3 Operation類實(shí)現(xiàn)操作主界面,如圖3.3所示,同樣implements ActionListener類,重寫抽象方法ActionPerfomed。實(shí)現(xiàn)監(jiān)聽(tīng)的代碼風(fēng)格不同于登錄按鈕,沒(méi)有重新創(chuàng)立一個(gè)類,直接在構(gòu)造方法中實(shí)現(xiàn)。圖3.3 通訊錄系統(tǒng)客戶端主界面Operation中重要的一點(diǎn)是實(shí)現(xiàn) Socket的傳遞,在單擊登錄后,客戶端會(huì)實(shí)Socket對(duì)象而不能重新實(shí)例化一個(gè)新的對(duì)象,實(shí)現(xiàn)值傳遞的方法如下。在Operation中定義一個(gè)方法SetSocket,在LoginListener中收到效勞器傳來(lái)驗(yàn)證成功的指令后,實(shí)例化Operat

12、ion對(duì)象,并調(diào)用SetSocket 函數(shù)實(shí)現(xiàn)Socket的傳遞。SetSocket方法及其調(diào)用如下所示。public Socket s;public void SetSocket(Socket s)this.s = s;if(yorn.equals(ok) Operation o = new Operation(); o.SetSocket(s); frame.dispose(); 效勞器端效勞器端的三個(gè)類分別實(shí)現(xiàn)為ServerFrame、Sever、DESPlus。3.2.1 SeverFrame類簡(jiǎn)單實(shí)現(xiàn)了一個(gè)效勞器端的窗體,用來(lái)顯示客戶端是否登錄成功和客戶端發(fā)來(lái)的指令。如圖3.4所示。

13、圖3.4 通訊錄備份軟件效勞器端顯示窗體3.2.2 Server類是效勞器端的主體局部,實(shí)現(xiàn)的功能有響應(yīng)客戶端的登錄請(qǐng)求,連接Mysql,響應(yīng)客戶端的備份、更新請(qǐng)求。響應(yīng)登錄代碼:/效勞器在8000端口監(jiān)聽(tīng)SuppressWarnings(resource)ServerSocket ss= new ServerSocket(8000);System.out.println(效勞器正在8000端口監(jiān)聽(tīng));Socket s = ss.accept();/接收用戶名和密碼InputStream is = s.getInputStream();InputStreamReader isr = new I

14、nputStreamReader(is);BufferedReader br = new BufferedReader(isr);String uandp = br.readLine();String u = uandp.split(%)0;String p = uandp.split(%)1;/將用戶名密碼的驗(yàn)證結(jié)果傳送到客戶端OutputStream os = s.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os);PrintWriter pw = new PrintWriter(osw,true);i

15、f(u.equals(siru)&p.equals(123)pw.println(ok);sf.text.append(客戶登錄成功+n); else/發(fā)送錯(cuò)誤信號(hào)到客戶端pw.println(error);響應(yīng)客戶端備份和更新指令的代碼:/響應(yīng)客戶端備份命令if(message.equals(備份)sf.text.append(備份聯(lián)系人信息+n);Class.forName(org.gjt.mm.mysql.Driver);Connection cn = DriverManager.getConnection(jdbc:mysql:/127.0.0.1:3306/通訊錄,root,2109

16、24);Statement st = cn.createStatement();st.executeUpdate(delete from 聯(lián)系人 where name is not null);String string = br.readLine();while(!string.equals(end)String name = string.split( )0;String telephone = string.split( )1;PreparedStatement ps = cn.prepareStatement(insert into 聯(lián)系人(name,telephone) values

17、(?,?);ps.setString(1,desPlus.encrypt(name);ps.setString(2,desPlus.encrypt(telephone);ps.executeUpdate();string = br.readLine(); pw.println(備份成功);/響應(yīng)客戶端更新的命令if(message.equals(更新)sf.text.append(更新聯(lián)系人信息+n);Class.forName(org.gjt.mm.mysql.Driver);Connection cn = DriverManager.getConnection(jdbc:mysql:/12

18、7.0.0.1:3306/通訊錄,root,210924);Statement st = cn.createStatement();ResultSet rs = st.executeQuery(select name,telephone from 聯(lián)系人);while (rs.next()String string = new String();string = rs.getString(1)+ +rs.getString(2);pw.println(string);pw.println(更新成功);3.2.3 DESPlus類實(shí)現(xiàn)聯(lián)系人信息的的加密,使用DES對(duì)稱加密算法。開始的時(shí)候采用的是

19、RSA算法,但是很簡(jiǎn)單的信息加密后的內(nèi)容卻很長(zhǎng),需要很大的儲(chǔ)存空間所以就放棄RSA,選擇了DES,計(jì)算量較小,速度也更快。效勞器在響應(yīng)備份指令時(shí)將客戶端傳來(lái)的信息加密后存入數(shù)據(jù)庫(kù),在響應(yīng)更新指令時(shí)將數(shù)據(jù)庫(kù)的信息解密后傳到客戶端。函數(shù)調(diào)用關(guān)系3.3.1 效勞器端主函數(shù)在Server中,運(yùn)行Server,先調(diào)用ServerFrame類的構(gòu)造函數(shù)實(shí)例化一個(gè)對(duì)象,接下來(lái)等待客戶端的請(qǐng)求,接收請(qǐng)求后執(zhí)行Main函數(shù)中對(duì)應(yīng)的代碼段。3.3.2 客戶端主函數(shù)在Operation類中,運(yùn)行客戶端程序,首先調(diào)用Login類的構(gòu)造函數(shù)實(shí)例化Login對(duì)象,顯示登錄界面;假設(shè)用戶名和密碼正確,響應(yīng)登錄按鈕的監(jiān)聽(tīng),調(diào)

20、用Operation類的構(gòu)造方法實(shí)例化Operation對(duì)象,顯示操作主界面。第四章 調(diào)試分析這次的課程設(shè)計(jì)和以往的有很大不同,因?yàn)槭且粋€(gè)較大的工程,所以我是在每完成一個(gè)階段后進(jìn)行一次調(diào)試。比方說(shuō),首先寫的是客戶端的Login類,在寫好這個(gè)類之后,就在類中寫了一個(gè)主函數(shù),簡(jiǎn)單的測(cè)試一下是否可以運(yùn)行出想要的登錄界面。確定沒(méi)有問(wèn)題之后,再給登錄按鈕添加監(jiān)聽(tīng),接著去檢測(cè)監(jiān)聽(tīng)的添加是否正常,這樣一步一調(diào)試的方式可以及時(shí)發(fā)現(xiàn)邏輯錯(cuò)誤和異常語(yǔ)法錯(cuò)誤在寫的過(guò)程中通過(guò)編譯提示隨時(shí)解決。當(dāng)然在測(cè)試的過(guò)程中碰到了很多異常,很多不明的錯(cuò)誤,這種情況下我會(huì)在疑心有錯(cuò)誤的代碼段寫幾條輸出語(yǔ)句,設(shè)置檢驗(yàn)點(diǎn)來(lái)判斷是否該代碼

21、段出錯(cuò)。這個(gè)工程遇到最多的異常是空指針異常,因?yàn)樯婕暗蕉鄠€(gè)類,就會(huì)有值傳遞的問(wèn)題,同樣一行代碼寫的位置不適宜就會(huì)導(dǎo)致異常。但是采用上面提到的方法,一點(diǎn)一點(diǎn)進(jìn)行調(diào)試,最終還是得到了滿意的結(jié)果。例如,在為登錄界面的登錄按鈕設(shè)置監(jiān)聽(tīng)時(shí),創(chuàng)立了一個(gè)監(jiān)聽(tīng)類,LoginListen類,在這個(gè)類中判斷用戶輸入的賬號(hào)和密碼是否正確,那么需獲取Login類中的frame,text,pw屬性,所以在LoginListener類中創(chuàng)立如下所示的函數(shù),在Login中實(shí)例化LoginListener后,調(diào)用該方法,就可以將所需變量傳給LoginListener類。/* * 獲取Login類中的frame text pw

22、屬性 * param frame * param text * param pw */ public LoginListener(JFrame frame,JTextField text,JPasswordField pw) this.frame = frame; this.text = text; this.pw = pw; 當(dāng)然,這個(gè)程序還有許多可以改良的地方,比方用戶界面不夠美觀漂亮,功能方面,注冊(cè)功能還不夠完善。第五章 運(yùn)行結(jié)果5.1登錄功能程序啟動(dòng)后,首先出現(xiàn)登錄界面如圖5.1所示圖5.1 通訊錄備份軟件客戶端登錄窗口假設(shè)用戶名和密碼錯(cuò)誤,那么登錄失敗,彈出表達(dá)窗口,如下圖圖通訊錄備

23、份系統(tǒng)登錄錯(cuò)誤提示界面假設(shè)用戶名和密碼正確,那么登錄成功,出現(xiàn)操作主界面,如下圖圖 通訊錄系統(tǒng)操作主界面5.2查詢本機(jī)通訊錄查詢功能有兩種,可以查詢所有的本地聯(lián)系人信息,也可以查詢確定某個(gè)聯(lián)系人的信息。切換到查詢界面后,如果想要查詢所有聯(lián)系人信息,直接單擊確認(rèn)按鈕,就可以看到得到的結(jié)果如下圖圖 通訊錄系統(tǒng)查詢所有聯(lián)系人如果想要查詢某個(gè)確定聯(lián)系人信息,那么在下方輸入框內(nèi)輸入聯(lián)系人姓名,就可以查詢到具體的信息,如下圖圖 通訊錄系統(tǒng)查詢條件查詢聯(lián)系人信息、如果沒(méi)有所查聯(lián)系人信息,系統(tǒng)會(huì)提示錯(cuò)誤,如下圖圖 通訊錄系統(tǒng)查詢聯(lián)系人不存在5.3備份每個(gè)用戶的通訊錄在客戶端有一個(gè)本地文件存儲(chǔ)本地聯(lián)系人信息,效

24、勞器端連接數(shù)據(jù)庫(kù)mysql接收備份的請(qǐng)求,將客戶的聯(lián)系人信息備份存儲(chǔ)到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中。單擊備份按鈕,就可以實(shí)現(xiàn)備份功能,界面提示操作成功如下圖圖 通訊錄系統(tǒng)備份界面再到數(shù)據(jù)庫(kù)中檢測(cè)一下是否真正存在備份成功的聯(lián)系人信息沒(méi)有備份之前的數(shù)據(jù)庫(kù),如下圖圖 通訊錄系統(tǒng)備份前的數(shù)據(jù)庫(kù)備份成功后的數(shù)據(jù)庫(kù),如下圖為了可以看清楚備份的內(nèi)容,本次運(yùn)行時(shí)暫時(shí)將加密語(yǔ)句進(jìn)行了注釋圖 通訊錄系統(tǒng)備份成功后的數(shù)據(jù)庫(kù)5.4更新每個(gè)用戶的通訊錄當(dāng)存儲(chǔ)本地聯(lián)系人信息的文件意外喪失時(shí),可以通過(guò)備份按鈕實(shí)時(shí)從效勞器獲取當(dāng)前用戶的聯(lián)系人信息,并存儲(chǔ)到本地文件中,如下圖圖 通訊錄系統(tǒng)更新聯(lián)系人信息再到本地文件中檢查一下是否有更新成功的

25、聯(lián)系人信息,更新之前現(xiàn)將本地文件中的聯(lián)系人全部刪除,如下圖:圖5.11 通訊錄系統(tǒng)更新前本地存儲(chǔ)聯(lián)系人信息的空文檔更新成功后的本地聯(lián)系人文檔,如下圖:圖 通訊錄系統(tǒng)更新成功后的本地存儲(chǔ)聯(lián)系人信息的文檔5.5加密功能在客戶發(fā)出備份請(qǐng)求時(shí),效勞器會(huì)將客戶的信息用DES算法加密后在存入數(shù)據(jù)庫(kù)中,而在客戶發(fā)出更新請(qǐng)求時(shí),效勞器會(huì)將數(shù)據(jù)庫(kù)中的信息解密后在傳到客戶端。實(shí)現(xiàn)了數(shù)據(jù)庫(kù)加密存儲(chǔ)。數(shù)據(jù)庫(kù)中的數(shù)據(jù)如下圖。圖 5.13 通訊錄系統(tǒng)效勞器端數(shù)據(jù)庫(kù)加密存儲(chǔ)數(shù)據(jù)第六章 課程設(shè)計(jì)總結(jié)剛拿到這個(gè)題目的時(shí)候,感覺(jué)有點(diǎn)無(wú)從下手。這次的課設(shè)是一個(gè)小工程,涉及到客戶端、效勞器、之間的連接、還需要添加數(shù)據(jù)庫(kù)。這里包括一些

26、我不太熟悉的內(nèi)容,只能一點(diǎn)點(diǎn)從頭學(xué)起。從客戶端開始著手,因?yàn)閷?duì)圖形界面還比擬熟悉,我首先做出來(lái)的是登錄界面和通訊錄系統(tǒng)的主界面,因?yàn)檫€沒(méi)有連接數(shù)據(jù)庫(kù),只能簡(jiǎn)單的通過(guò)登錄按鈕的監(jiān)聽(tīng)將兩個(gè)界面聯(lián)系起來(lái)。接下來(lái)開始寫效勞器端,同樣的是先做出一個(gè)簡(jiǎn)單的界面方便管理人員查看客戶端進(jìn)行的操作,然后利用Socket套接字將效勞器和客戶端連接到一起。這時(shí)大體的框架就根本完成了,還需要重要的一步就是連接數(shù)據(jù)庫(kù),這局部?jī)?nèi)容完全是要自學(xué)完成。去圖書館找了相關(guān)的入門級(jí)的書,跟著敲了一天的代碼,掌握的根本內(nèi)容足夠完成這次課設(shè)的內(nèi)容了。到此,大體的代碼已經(jīng)就寫好了,接下來(lái)做一些細(xì)節(jié)的修改,使系統(tǒng)更方便操作。在完成課設(shè)的過(guò)

27、程中,遇到了很多問(wèn)題。調(diào)試代碼的時(shí)候,程序運(yùn)行過(guò)程中會(huì)拋出很多莫名的異常。因?yàn)槌绦蜉^長(zhǎng)不太好測(cè)試,我會(huì)選擇新建一個(gè)test類,寫入拋出異常的代碼段,在程序的關(guān)鍵點(diǎn)寫一條輸出語(yǔ)句,通過(guò)在控制端的輸出和拋出異常的類型來(lái)判斷代碼的具體錯(cuò)誤。其中最麻煩調(diào)試時(shí)間最長(zhǎng)的是對(duì)文件的一個(gè)操作,沒(méi)有邏輯錯(cuò)誤,沒(méi)有異常拋出,但是得到的內(nèi)容總是不全,看了書上java關(guān)于文件的操作內(nèi)容、查了java的文檔,還是沒(méi)有找到問(wèn)題的所在,最后去找了java相關(guān)的老師,才知道是我函數(shù)使用的問(wèn)題。下面是錯(cuò)誤代碼,錯(cuò)誤就在于if判斷語(yǔ)句中,通過(guò)br.readline()進(jìn)行一次判斷后,沒(méi)有及時(shí)保存用于判斷的這條信息,這條信息就直接

28、喪失了,因此,讀到的內(nèi)容全部都是偶數(shù)行的。當(dāng)你找到問(wèn)題的所在后,可能覺(jué)得這是一個(gè)極其簡(jiǎn)單的錯(cuò)誤,但是發(fā)現(xiàn)問(wèn)題的過(guò)程卻能學(xué)到很多相關(guān)的知識(shí)尤其是通過(guò)自查閱資料的方式,一次次的發(fā)現(xiàn)問(wèn)題解決問(wèn)題,收獲很多。錯(cuò)誤代碼:/指定文件目錄并建立輸出字符流File f = new File (D:ProgrammingJava通訊錄備份軟件Data.txt);FileWriter fw = new FileWriter(f);PrintWriter pw1 = new PrintWriter(fw);/讀取文件數(shù)據(jù),傳送并在控制臺(tái)打印while(br.ready()if(null != br.readLine

29、()pw1.append(br.readLine()+rn); System.out.println(br.readline(); 除此之外,在搭建數(shù)據(jù)庫(kù)的時(shí)候也遇到了一些困難,之前在做數(shù)據(jù)庫(kù)課程的實(shí)驗(yàn)時(shí),使用的是Sql Server,是微軟公司開發(fā)的一個(gè)軟件,不能免費(fèi)使用。而Mysql是一個(gè)免費(fèi)并且更簡(jiǎn)潔的數(shù)據(jù)庫(kù),這次便選擇了使用Mysql。第一次安裝沒(méi)有安裝成功,接下來(lái)又試了幾次,都沒(méi)方法安裝成功。于是我在網(wǎng)上查了一些資料,Mysql安裝沒(méi)有成功有時(shí)也會(huì)生成一些注冊(cè)表,而刪除的時(shí)候這些注冊(cè)表如果沒(méi)有刪除干凈,也會(huì)導(dǎo)致下一次安裝。知道了原因之后,找到注冊(cè)表刪除之后,再次安裝,終于成功了。我覺(jué)

30、得通過(guò)這次課程設(shè)計(jì),收獲的有很多以前不知道的知識(shí),提高了編程能力,動(dòng)手能力,還有很重要的一點(diǎn)是提高了自己解決問(wèn)題的能力,在自己解決的過(guò)程中,總會(huì)有意外的收獲。參考文獻(xiàn)1?Java就該這樣學(xué)?王洋 電子工業(yè)出版社2?Java實(shí)用教程?鄭阿奇 電子工業(yè)出版社3?Java語(yǔ)言程序設(shè)計(jì)? 郭克華、段桂華 清華大學(xué)出版社 附錄Login類:package Client;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import javax.sw

31、ing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import Client.LoginListener;public class Login public Login()/實(shí)例化一個(gè)窗體;JFrame frame = new

32、 JFrame();frame.setTitle(通訊錄系統(tǒng)登錄);frame.setLocation(300,150);frame.setSize(480,380);frame.setDefaultCloseOperation(3);/實(shí)例化northpanel并添加到窗體上JPanel northpanel = new JPanel();northpanel.setBackground(new Color(10,10,100);frame.add(northpanel,BorderLayout.NORTH);/實(shí)例化westpanel并添加到窗體上JPanel westpanel = ne

33、w JPanel();/westpanel.setBackground(Color.white);westpanel.setPreferredSize(new Dimension(160,150);westpanel.setLayout(new FlowLayout(FlowLayout.RIGHT);frame.add(westpanel, BorderLayout.WEST);/實(shí)例化panel并添加到窗體上JPanel panel = new JPanel();/panel.setBackground(Color.white);frame.add(panel, BorderLayout.

34、CENTER);/實(shí)例化組件并添加到northpanel上JLabel lable1 = new JLabel(new ImageIcon(D:ProgrammingJava通訊錄備份軟件圖片5_副本_副本.jpg);northpanel.add(lable1);/實(shí)例化組件并添加到westpanel上 JLabel label2 = new JLabel(new ImageIcon(D:ProgrammingJava通訊錄備份軟件圖片7_副本_副本.jpg); westpanel.add(label2); /實(shí)例化組件并添加到panel上 JLabel accountLabel = new

35、JLabel(賬號(hào):); panel.add(accountLabel); JTextField accountText = new JTextField(); Dimension dim1 = new Dimension(240,30); accountText.setPreferredSize(dim1); panel.add(accountText); javax.swing.JLabel pwLabel = new javax.swing.JLabel(密碼:); panel.add(pwLabel); JPasswordField pwText = new JPasswordFiel

36、d(); Dimension dim2 = new Dimension(240,30); pwText.setPreferredSize(dim2); panel.add(pwText); JCheckBox cb1 = new JCheckBox(記住密碼); Dimension cDim = new Dimension(120,20); cb1.setPreferredSize(cDim); panel.add(cb1); JCheckBox cb2 = new JCheckBox(自動(dòng)登錄); cb2.setPreferredSize(cDim); panel.add(cb2); JBu

37、tton button2 = new JButton(登錄); Dimension bDim = new Dimension(150,25); button2.setPreferredSize(bDim); panel.add(button2); frame.setVisible(true); /給登錄按鈕增加監(jiān)聽(tīng) LoginListener lis = new LoginListener(frame,accountText,pwText); button2.addActionListener(lis);LoginListener類:package Client;import java.awt

38、.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import .Socket;import javax.swing.JFrame;import javax.swing.JPass

39、wordField;import javax.swing.JTextField;public class LoginListener implements ActionListener public String Name; public String Password; public JFrame frame; public JTextField text; public JPasswordField pw; public LoginListener(JFrame frame,JTextField text,JPasswordField pw) this.frame = frame; thi

40、s.text = text; this.pw = pw; SuppressWarnings(deprecation) public void actionPerformed(ActionEvent e) try /發(fā)送密碼和用戶名到客戶端 String user = text.getText(); String pass = pw.getText(); Socket s = new Socket(127.0.0.1,8000); OutputStream os = s.getOutputStream(); OutputStreamWriter osw = new OutputStreamWri

41、ter(os); PrintWriter pw = new PrintWriter(osw ,true); pw.println(user+%+pass); /接收效勞器發(fā)回來(lái)確實(shí)認(rèn)信息 InputStream is = s.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String yorn = br.readLine(); /顯示登錄成功界面或密碼錯(cuò)誤界面 if(yorn.equals(ok) Operatio

42、n o = new Operation(); o.SetSocket(s); frame.dispose(); else JTextField text = new JTextField( 用戶名或密碼錯(cuò)誤); JFrame frame = new JFrame(); frame.setTitle(錯(cuò)誤); frame.setLocation(550,300); frame.setSize(200,100); frame.setDefaultCloseOperation(2); frame.add(text); frame.setVisible(true); catch(Exception e

43、1) Operation類:package Client;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.F

44、ileReader;import java.io.FileWriter;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import .Socket;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing

45、.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;public class Operation/獲取已經(jīng)連接好的Socket值 public Socket s;public void SetSocket(Socket s)this.s = s;/客戶端程序入口public static void main(String args)SuppressWarnings(unused)Login login = new Login();public Operation()/實(shí)例化窗口javax.swing.JFrame

46、 frame = new javax.swing.JFrame();frame.setLayout(new java.awt.BorderLayout(); frame.setTitle(通訊錄系統(tǒng));frame.setLocation(500,150);frame.setSize(390,450);frame.setDefaultCloseOperation(3);/實(shí)例化歡送面板JPanel Welcome = new JPanel(); frame.add(Welcome);/實(shí)例化選項(xiàng)面板JPanel XXPanel = new JPanel();Dimension XXDim = n

47、ew Dimension(70,450);XXPanel.setPreferredSize(XXDim);XXPanel.setLayout(null);frame.add(XXPanel,java.awt.BorderLayout.WEST);/實(shí)例化查詢顯示面板JPanel CXPanel = new JPanel();Dimension PanelDim= new Dimension(300,400);CXPanel.setPreferredSize(PanelDim);/實(shí)例化添加顯示面板JPanel TJPanel = new JPanel();TJPanel.setPreferre

48、dSize(PanelDim);TJPanel.setBackground(Color.white);/實(shí)例化刪除顯示面板JPanel SCPanel = new JPanel();SCPanel.setPreferredSize(PanelDim);/實(shí)例化備份面板JPanel BFPanel = new JPanel();BFPanel.setPreferredSize(PanelDim);BFPanel.setLayout(new FlowLayout(FlowLayout.CENTER);/實(shí)例化更新面板JPanel GXPanel = new JPanel();GXPanel.set

49、PreferredSize(PanelDim);GXPanel.setLayout(new FlowLayout(FlowLayout.CENTER);/實(shí)例化歡送面板組件歡送文本框并添加JLabel label1 = new JLabel(new ImageIcon(D:ProgrammingJava通訊錄備份軟件圖片welcome_副本_副本.jpg);Welcome.add(label1);/實(shí)例化選項(xiàng)面板組件:查詢、添加、修改、刪除、確認(rèn)按鈕并添加JButton CX = new JButton(查詢);JButton ZT = new JButton(增添);JButton SC =

50、 new JButton(刪除);JButton BF = new JButton(備份);JButton GX = new JButton(更新);CX.setBounds(10,100,60,30);ZT.setBounds(10,140,60,30);SC.setBounds(10,180,60,30);BF.setBounds(10,220,60,30);GX.setBounds(10,260,60,30);XXPanel.add(CX);XXPanel.add(ZT);XXPanel.add(SC);XXPanel.add(BF);XXPanel.add(GX);/實(shí)例化查詢界面組件

51、并添加JTextArea CXText = new JTextArea(請(qǐng)?jiān)谙路捷斎胛谋究蚋髦休斎胂胍樵兊穆?lián)系人信息+n +可輸入為聯(lián)系人姓名或 +n +假設(shè)查詢所有聯(lián)系人信息,請(qǐng)直接點(diǎn)擊下方查詢按鈕+n);Dimension textDim = new Dimension(300,350);CXText.setPreferredSize(textDim); JTextField InputText1 = new JTextField();InputText1.setPreferredSize(new Dimension(200,30);JButton QR1 = new JButton(查

52、詢);CXPanel.add(CXText);CXPanel.add(InputText1);CXPanel.add(QR1);/實(shí)例化添加面板組件并添加JTextArea TJText = new JTextArea(n+請(qǐng)?jiān)谙路降奈谋究蜉斎胂胍砑拥穆?lián)系人信息+n +然后單擊添加按鈕+n);TJText.setPreferredSize(new Dimension(300,100);JLabel name = new JLabel(姓名: );JTextField nametext = new JTextField();nametext.setPreferredSize(new Dimen

53、sion(240,30);JLabel tel = new JLabel( : );JTextField teltext = new JTextField();teltext.setPreferredSize(new Dimension(240,30);JLabel add = new JLabel(地址: );JTextField addtext = new JTextField();addtext.setPreferredSize(new Dimension(240,60);JLabel qq = new JLabel(Q Q: );JTextField qqtext = new JTex

54、tField();qqtext.setPreferredSize(new Dimension(240,30);JButton QR2 = new JButton(添加);JTextArea nullarea = new JTextArea();nullarea.setPreferredSize(new Dimension(240,50);TJPanel.add(TJText);TJPanel.add(name);TJPanel.add(nametext);TJPanel.add(tel);TJPanel.add(teltext);TJPanel.add(add);TJPanel.add(add

55、text);TJPanel.add(qq);TJPanel.add(qqtext);TJPanel.add(nullarea);TJPanel.add(QR2);/實(shí)例化刪除面板組件并添加JTextArea SCText = new JTextArea(請(qǐng)?jiān)谙路轿谋究蛑休斎胂胍獎(jiǎng)h除的聯(lián)系人姓名+n);SCText.setPreferredSize(textDim);JTextField InputText3 = new JTextField();InputText3.setPreferredSize(new Dimension(200,30); JButton QR3 = new JButto

56、n(刪除);SCPanel.add(SCText);SCPanel.add(InputText3);SCPanel.add(QR3);/實(shí)例化備份面板組件備份文本框并添加JTextArea BFText = new JTextArea(請(qǐng)稍候,正在備份!+n);BFText.setPreferredSize(textDim);BFPanel.add(BFText);/實(shí)例化更新面板組件更新文本框并添加JTextArea GXText = new JTextArea(請(qǐng)稍候,正在更新!+n);GXText.setPreferredSize(textDim);GXPanel.add(GXText)

57、;frame.setVisible(true);/設(shè)置查詢按鈕的監(jiān)聽(tīng)CX.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) frame.remove(Welcome); frame.remove(TJPanel); frame.remove(SCPanel); frame.remove(BFPanel); frame.remove(GXPanel); frame.add(CXPanel,BorderLayout.EAST); frame.revalidate(); frame.re

58、paint(); );QR1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)CXText.setText(請(qǐng)?jiān)谙路捷斎胛谋究蚋髦休斎胂胍樵兊穆?lián)系人信息+n +可輸入為聯(lián)系人姓名或 +n +假設(shè)查詢所有聯(lián)系人信息,請(qǐng)直接點(diǎn)擊下方查詢按鈕+n);try/在本地文件中查詢通訊錄信息File f = new File(D:ProgrammingJava通訊錄備份軟件Data.txt);FileReader fr = new FileReader(f);BufferedReader br

59、= new BufferedReader(fr);FileReader fr2 = new FileReader(f);BufferedReader br2 = new BufferedReader(fr2);String str = InputText1.getText();if(str.equals() CXText.append(n+全部的聯(lián)系人信息是:+n); CXText.append(姓名 + + 地址 + QQ +n); while(br2.ready()CXText.append(br2.readLine()+n); br2.close();elsewhile(br.ready

60、()String string = br.readLine();String str1 = string.split( )0;String str2 = string.split( )0.split( )1;if(InputText1.getText().equals(str1)|InputText1.getText().equals(str2)CXText.append(n+查詢到的聯(lián)系人信息是:+n);CXText.append(姓名 + + 地址 + QQ +n);CXText.append(string+n);break;if(!br.ready()CXText.append(n+沒(méi)有

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論