




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、?計算機(jī)網(wǎng)絡(luò)?課程設(shè)計報告 題 目: 通訊錄軟件系統(tǒng) 學(xué)生姓名: 指導(dǎo)老師: 學(xué) 院: 信息科學(xué)與工程學(xué)院 專業(yè)班級:物聯(lián)網(wǎng)工程1402班 完成時間: 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è)計 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è)計 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 備份每個用戶的通訊錄 PAGEREF _Toc465197049 h 15 HYPERLINK l _Toc465197050 更新每個用戶的通訊錄 PAGEREF _Toc465197050 h 16 HYPERLINK l _Toc465197051 加密功能 PAGEREF _Toc465197051 h 18 HYPERLINK
5、 l _Toc465197052 第六章 課程設(shè)計總結(jié) PAGEREF _Toc465197052 h 18 HYPERLINK l _Toc465197053 參考文獻(xiàn) PAGEREF _Toc465197053 h 20 HYPERLINK l _Toc465197054 附錄 PAGEREF _Toc465197054 h 20 第一章 需求分析本設(shè)計要求完成一個基于C/S模式的通訊錄備份軟件。采用C/S架構(gòu)。應(yīng)該具有易用、美觀的圖形界面。 效勞器端功能要求1能夠驗證客戶身份,接收客戶端的備份通訊錄的請求,能夠?qū)崟r備份和更新客戶的通訊錄。 2 加密存儲每個用戶的通訊錄 客戶端功能要求1能
6、登陸連接到效勞器,回應(yīng):連接成功/失敗。2能備份本機(jī)通訊錄。3能實時更新本機(jī)通訊錄。4能查詢本機(jī)通訊錄。第二章 總體設(shè)計總體結(jié)構(gòu)客戶端建立一個本地文件存儲本地數(shù)據(jù),通過對文件進(jìn)行讀寫操作,實現(xiàn)本地數(shù)據(jù)的增、刪、查等功能。登錄成功后,可以將本地聯(lián)系人信息備份到效勞器,當(dāng)本地文件中的聯(lián)系人信息意外喪失時,可以將效勞器端的備份內(nèi)容更新到本地聯(lián)系人信息,類似于微信的聯(lián)系人備份和導(dǎo)出功能。效勞器負(fù)責(zé)驗證客戶端的登錄賬號和密碼,并通過JDBC與Mysql建立連接。在客戶登錄成功后,響應(yīng)客戶端的備份請求,實現(xiàn)聯(lián)系人數(shù)據(jù)的加密存儲;響應(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è)計如下圖,一共建立了兩個包,客戶端和效勞器。圖3.1 通訊錄軟件工程包展開圖客戶端客戶端的三個類分別為Login,LoginListener,Operation。3.1.1 Login類實現(xiàn)登錄界面,如圖3.2所示,并實例化LoginListener 類給登錄按鈕添加ActionListner 監(jiān)聽方法。 圖3.2 通訊錄系統(tǒng)客戶端登錄界面3.1.2 LoginListener類實現(xiàn)ActionListener類,重寫抽象函數(shù)ActionPerformed。當(dāng)單擊登錄按鈕時,利用Socket連接到效勞
8、器,將客戶的賬號和密碼傳給效勞器,等待效勞器傳來的驗證結(jié)果。驗證通過那么彈出操作主界面,失敗那么彈出用戶名或密碼錯誤的窗體。響應(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ā)回來確實認(rèn)信息 InputStream is = s.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String yorn = br.readLine(); /顯示登錄成功界面或密碼錯誤界面 if(yorn.
10、equals(ok) Operation o = new Operation(); o.SetSocket(s); frame.dispose(); else JTextField text = new JTextField( 用戶名或密碼錯誤); JFrame frame = new JFrame(); frame.setTitle(錯誤); 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類實現(xiàn)操作主界面,如圖3.3所示,同樣implements ActionListener類,重寫抽象方法ActionPerfomed。實現(xiàn)監(jiān)聽的代碼風(fēng)格不同于登錄按鈕,沒有重新創(chuàng)立一個類,直接在構(gòu)造方法中實現(xiàn)。圖3.3 通訊錄系統(tǒng)客戶端主界面Operation中重要的一點是實現(xiàn) Socket的傳遞,在單擊登錄后,客戶端會實Socket對象而不能重新實例化一個新的對象,實現(xiàn)值傳遞的方法如下。在Operation中定義一個方法SetSocket,在LoginListener中收到效勞器傳來驗證成功的指令后,實例化Operat
12、ion對象,并調(diào)用SetSocket 函數(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(); 效勞器端效勞器端的三個類分別實現(xiàn)為ServerFrame、Sever、DESPlus。3.2.1 SeverFrame類簡單實現(xiàn)了一個效勞器端的窗體,用來顯示客戶端是否登錄成功和客戶端發(fā)來的指令。如圖3.4所示。
13、圖3.4 通訊錄備份軟件效勞器端顯示窗體3.2.2 Server類是效勞器端的主體局部,實現(xiàn)的功能有響應(yīng)客戶端的登錄請求,連接Mysql,響應(yīng)客戶端的備份、更新請求。響應(yīng)登錄代碼:/效勞器在8000端口監(jiān)聽SuppressWarnings(resource)ServerSocket ss= new ServerSocket(8000);System.out.println(效勞器正在8000端口監(jiān)聽);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;/將用戶名密碼的驗證結(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ā)送錯誤信號到客戶端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類實現(xiàn)聯(lián)系人信息的的加密,使用DES對稱加密算法。開始的時候采用的是
19、RSA算法,但是很簡單的信息加密后的內(nèi)容卻很長,需要很大的儲存空間所以就放棄RSA,選擇了DES,計算量較小,速度也更快。效勞器在響應(yīng)備份指令時將客戶端傳來的信息加密后存入數(shù)據(jù)庫,在響應(yīng)更新指令時將數(shù)據(jù)庫的信息解密后傳到客戶端。函數(shù)調(diào)用關(guān)系3.3.1 效勞器端主函數(shù)在Server中,運(yùn)行Server,先調(diào)用ServerFrame類的構(gòu)造函數(shù)實例化一個對象,接下來等待客戶端的請求,接收請求后執(zhí)行Main函數(shù)中對應(yīng)的代碼段。3.3.2 客戶端主函數(shù)在Operation類中,運(yùn)行客戶端程序,首先調(diào)用Login類的構(gòu)造函數(shù)實例化Login對象,顯示登錄界面;假設(shè)用戶名和密碼正確,響應(yīng)登錄按鈕的監(jiān)聽,調(diào)
20、用Operation類的構(gòu)造方法實例化Operation對象,顯示操作主界面。第四章 調(diào)試分析這次的課程設(shè)計和以往的有很大不同,因為是一個較大的工程,所以我是在每完成一個階段后進(jìn)行一次調(diào)試。比方說,首先寫的是客戶端的Login類,在寫好這個類之后,就在類中寫了一個主函數(shù),簡單的測試一下是否可以運(yùn)行出想要的登錄界面。確定沒有問題之后,再給登錄按鈕添加監(jiān)聽,接著去檢測監(jiān)聽的添加是否正常,這樣一步一調(diào)試的方式可以及時發(fā)現(xiàn)邏輯錯誤和異常語法錯誤在寫的過程中通過編譯提示隨時解決。當(dāng)然在測試的過程中碰到了很多異常,很多不明的錯誤,這種情況下我會在疑心有錯誤的代碼段寫幾條輸出語句,設(shè)置檢驗點來判斷是否該代碼
21、段出錯。這個工程遇到最多的異常是空指針異常,因為涉及到多個類,就會有值傳遞的問題,同樣一行代碼寫的位置不適宜就會導(dǎo)致異常。但是采用上面提到的方法,一點一點進(jìn)行調(diào)試,最終還是得到了滿意的結(jié)果。例如,在為登錄界面的登錄按鈕設(shè)置監(jiān)聽時,創(chuàng)立了一個監(jiān)聽類,LoginListen類,在這個類中判斷用戶輸入的賬號和密碼是否正確,那么需獲取Login類中的frame,text,pw屬性,所以在LoginListener類中創(chuàng)立如下所示的函數(shù),在Login中實例化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)然,這個程序還有許多可以改良的地方,比方用戶界面不夠美觀漂亮,功能方面,注冊功能還不夠完善。第五章 運(yùn)行結(jié)果5.1登錄功能程序啟動后,首先出現(xiàn)登錄界面如圖5.1所示圖5.1 通訊錄備份軟件客戶端登錄窗口假設(shè)用戶名和密碼錯誤,那么登錄失敗,彈出表達(dá)窗口,如下圖圖通訊錄備
23、份系統(tǒng)登錄錯誤提示界面假設(shè)用戶名和密碼正確,那么登錄成功,出現(xiàn)操作主界面,如下圖圖 通訊錄系統(tǒng)操作主界面5.2查詢本機(jī)通訊錄查詢功能有兩種,可以查詢所有的本地聯(lián)系人信息,也可以查詢確定某個聯(lián)系人的信息。切換到查詢界面后,如果想要查詢所有聯(lián)系人信息,直接單擊確認(rèn)按鈕,就可以看到得到的結(jié)果如下圖圖 通訊錄系統(tǒng)查詢所有聯(lián)系人如果想要查詢某個確定聯(lián)系人信息,那么在下方輸入框內(nèi)輸入聯(lián)系人姓名,就可以查詢到具體的信息,如下圖圖 通訊錄系統(tǒng)查詢條件查詢聯(lián)系人信息、如果沒有所查聯(lián)系人信息,系統(tǒng)會提示錯誤,如下圖圖 通訊錄系統(tǒng)查詢聯(lián)系人不存在5.3備份每個用戶的通訊錄在客戶端有一個本地文件存儲本地聯(lián)系人信息,效
24、勞器端連接數(shù)據(jù)庫mysql接收備份的請求,將客戶的聯(lián)系人信息備份存儲到對應(yīng)的數(shù)據(jù)庫中。單擊備份按鈕,就可以實現(xiàn)備份功能,界面提示操作成功如下圖圖 通訊錄系統(tǒng)備份界面再到數(shù)據(jù)庫中檢測一下是否真正存在備份成功的聯(lián)系人信息沒有備份之前的數(shù)據(jù)庫,如下圖圖 通訊錄系統(tǒng)備份前的數(shù)據(jù)庫備份成功后的數(shù)據(jù)庫,如下圖為了可以看清楚備份的內(nèi)容,本次運(yùn)行時暫時將加密語句進(jìn)行了注釋圖 通訊錄系統(tǒng)備份成功后的數(shù)據(jù)庫5.4更新每個用戶的通訊錄當(dāng)存儲本地聯(lián)系人信息的文件意外喪失時,可以通過備份按鈕實時從效勞器獲取當(dāng)前用戶的聯(lián)系人信息,并存儲到本地文件中,如下圖圖 通訊錄系統(tǒng)更新聯(lián)系人信息再到本地文件中檢查一下是否有更新成功的
25、聯(lián)系人信息,更新之前現(xiàn)將本地文件中的聯(lián)系人全部刪除,如下圖:圖5.11 通訊錄系統(tǒng)更新前本地存儲聯(lián)系人信息的空文檔更新成功后的本地聯(lián)系人文檔,如下圖:圖 通訊錄系統(tǒng)更新成功后的本地存儲聯(lián)系人信息的文檔5.5加密功能在客戶發(fā)出備份請求時,效勞器會將客戶的信息用DES算法加密后在存入數(shù)據(jù)庫中,而在客戶發(fā)出更新請求時,效勞器會將數(shù)據(jù)庫中的信息解密后在傳到客戶端。實現(xiàn)了數(shù)據(jù)庫加密存儲。數(shù)據(jù)庫中的數(shù)據(jù)如下圖。圖 5.13 通訊錄系統(tǒng)效勞器端數(shù)據(jù)庫加密存儲數(shù)據(jù)第六章 課程設(shè)計總結(jié)剛拿到這個題目的時候,感覺有點無從下手。這次的課設(shè)是一個小工程,涉及到客戶端、效勞器、之間的連接、還需要添加數(shù)據(jù)庫。這里包括一些
26、我不太熟悉的內(nèi)容,只能一點點從頭學(xué)起。從客戶端開始著手,因為對圖形界面還比擬熟悉,我首先做出來的是登錄界面和通訊錄系統(tǒng)的主界面,因為還沒有連接數(shù)據(jù)庫,只能簡單的通過登錄按鈕的監(jiān)聽將兩個界面聯(lián)系起來。接下來開始寫效勞器端,同樣的是先做出一個簡單的界面方便管理人員查看客戶端進(jìn)行的操作,然后利用Socket套接字將效勞器和客戶端連接到一起。這時大體的框架就根本完成了,還需要重要的一步就是連接數(shù)據(jù)庫,這局部內(nèi)容完全是要自學(xué)完成。去圖書館找了相關(guān)的入門級的書,跟著敲了一天的代碼,掌握的根本內(nèi)容足夠完成這次課設(shè)的內(nèi)容了。到此,大體的代碼已經(jīng)就寫好了,接下來做一些細(xì)節(jié)的修改,使系統(tǒng)更方便操作。在完成課設(shè)的過
27、程中,遇到了很多問題。調(diào)試代碼的時候,程序運(yùn)行過程中會拋出很多莫名的異常。因為程序較長不太好測試,我會選擇新建一個test類,寫入拋出異常的代碼段,在程序的關(guān)鍵點寫一條輸出語句,通過在控制端的輸出和拋出異常的類型來判斷代碼的具體錯誤。其中最麻煩調(diào)試時間最長的是對文件的一個操作,沒有邏輯錯誤,沒有異常拋出,但是得到的內(nèi)容總是不全,看了書上java關(guān)于文件的操作內(nèi)容、查了java的文檔,還是沒有找到問題的所在,最后去找了java相關(guān)的老師,才知道是我函數(shù)使用的問題。下面是錯誤代碼,錯誤就在于if判斷語句中,通過br.readline()進(jìn)行一次判斷后,沒有及時保存用于判斷的這條信息,這條信息就直接
28、喪失了,因此,讀到的內(nèi)容全部都是偶數(shù)行的。當(dāng)你找到問題的所在后,可能覺得這是一個極其簡單的錯誤,但是發(fā)現(xiàn)問題的過程卻能學(xué)到很多相關(guān)的知識尤其是通過自查閱資料的方式,一次次的發(fā)現(xiàn)問題解決問題,收獲很多。錯誤代碼:/指定文件目錄并建立輸出字符流File f = new File (D:ProgrammingJava通訊錄備份軟件Data.txt);FileWriter fw = new FileWriter(f);PrintWriter pw1 = new PrintWriter(fw);/讀取文件數(shù)據(jù),傳送并在控制臺打印while(br.ready()if(null != br.readLine
29、()pw1.append(br.readLine()+rn); System.out.println(br.readline(); 除此之外,在搭建數(shù)據(jù)庫的時候也遇到了一些困難,之前在做數(shù)據(jù)庫課程的實驗時,使用的是Sql Server,是微軟公司開發(fā)的一個軟件,不能免費(fèi)使用。而Mysql是一個免費(fèi)并且更簡潔的數(shù)據(jù)庫,這次便選擇了使用Mysql。第一次安裝沒有安裝成功,接下來又試了幾次,都沒方法安裝成功。于是我在網(wǎng)上查了一些資料,Mysql安裝沒有成功有時也會生成一些注冊表,而刪除的時候這些注冊表如果沒有刪除干凈,也會導(dǎo)致下一次安裝。知道了原因之后,找到注冊表刪除之后,再次安裝,終于成功了。我覺
30、得通過這次課程設(shè)計,收獲的有很多以前不知道的知識,提高了編程能力,動手能力,還有很重要的一點是提高了自己解決問題的能力,在自己解決的過程中,總會有意外的收獲。參考文獻(xiàn)1?Java就該這樣學(xué)?王洋 電子工業(yè)出版社2?Java實用教程?鄭阿奇 電子工業(yè)出版社3?Java語言程序設(shè)計? 郭克華、段桂華 清華大學(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()/實例化一個窗體;JFrame frame = new
32、 JFrame();frame.setTitle(通訊錄系統(tǒng)登錄);frame.setLocation(300,150);frame.setSize(480,380);frame.setDefaultCloseOperation(3);/實例化northpanel并添加到窗體上JPanel northpanel = new JPanel();northpanel.setBackground(new Color(10,10,100);frame.add(northpanel,BorderLayout.NORTH);/實例化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);/實例化panel并添加到窗體上JPanel panel = new JPanel();/panel.setBackground(Color.white);frame.add(panel, BorderLayout.
34、CENTER);/實例化組件并添加到northpanel上JLabel lable1 = new JLabel(new ImageIcon(D:ProgrammingJava通訊錄備份軟件圖片5_副本_副本.jpg);northpanel.add(lable1);/實例化組件并添加到westpanel上 JLabel label2 = new JLabel(new ImageIcon(D:ProgrammingJava通訊錄備份軟件圖片7_副本_副本.jpg); westpanel.add(label2); /實例化組件并添加到panel上 JLabel accountLabel = new
35、JLabel(賬號:); 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(自動登錄); 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)聽 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ā)回來確實認(rèn)信息 InputStream is = s.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String yorn = br.readLine(); /顯示登錄成功界面或密碼錯誤界面 if(yorn.equals(ok) Operatio
42、n o = new Operation(); o.SetSocket(s); frame.dispose(); else JTextField text = new JTextField( 用戶名或密碼錯誤); JFrame frame = new JFrame(); frame.setTitle(錯誤); 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()/實例化窗口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);/實例化歡送面板JPanel Welcome = new JPanel(); frame.add(Welcome);/實例化選項面板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);/實例化查詢顯示面板JPanel CXPanel = new JPanel();Dimension PanelDim= new Dimension(300,400);CXPanel.setPreferredSize(PanelDim);/實例化添加顯示面板JPanel TJPanel = new JPanel();TJPanel.setPreferre
48、dSize(PanelDim);TJPanel.setBackground(Color.white);/實例化刪除顯示面板JPanel SCPanel = new JPanel();SCPanel.setPreferredSize(PanelDim);/實例化備份面板JPanel BFPanel = new JPanel();BFPanel.setPreferredSize(PanelDim);BFPanel.setLayout(new FlowLayout(FlowLayout.CENTER);/實例化更新面板JPanel GXPanel = new JPanel();GXPanel.set
49、PreferredSize(PanelDim);GXPanel.setLayout(new FlowLayout(FlowLayout.CENTER);/實例化歡送面板組件歡送文本框并添加JLabel label1 = new JLabel(new ImageIcon(D:ProgrammingJava通訊錄備份軟件圖片welcome_副本_副本.jpg);Welcome.add(label1);/實例化選項面板組件:查詢、添加、修改、刪除、確認(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);/實例化查詢界面組件
51、并添加JTextArea CXText = new JTextArea(請在下方輸入文本框各中輸入想要查詢的聯(lián)系人信息+n +可輸入為聯(lián)系人姓名或 +n +假設(shè)查詢所有聯(liá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);/實例化添加面板組件并添加JTextArea TJText = new JTextArea(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);/實例化刪除面板組件并添加JTextArea SCText = new JTextArea(請在下方文本框中輸入想要刪除的聯(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);/實例化備份面板組件備份文本框并添加JTextArea BFText = new JTextArea(請稍候,正在備份!+n);BFText.setPreferredSize(textDim);BFPanel.add(BFText);/實例化更新面板組件更新文本框并添加JTextArea GXText = new JTextArea(請稍候,正在更新!+n);GXText.setPreferredSize(textDim);GXPanel.add(GXText)
57、;frame.setVisible(true);/設(shè)置查詢按鈕的監(jiān)聽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(請在下方輸入文本框各中輸入想要查詢的聯(lián)系人信息+n +可輸入為聯(lián)系人姓名或 +n +假設(shè)查詢所有聯(liá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+沒有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GA/T 1049.2-2024公安交通集成指揮平臺通信協(xié)議第2部分:交通信號控制系統(tǒng)
- 抗微生物藥的試題及答案
- 阿里巴巴java初級面試題及答案
- 空管三校聯(lián)考試題及答案
- 體弱兒培訓(xùn)試題及答案
- 軟件設(shè)計師學(xué)員必讀材料及試題及答案
- 軟件設(shè)計師考試高效備考與試題答案
- 電子測量技術(shù)試題及答案
- 計算機(jī)軟件測試的質(zhì)量保證試題及答案
- 項目進(jìn)度控制中的工具與技巧試題及答案
- 國家開放大學(xué)2025年春《形勢與政策》形考任務(wù)1-5和大作業(yè)參考答案
- 安全生產(chǎn) 規(guī)章制度和安全操作規(guī)程
- 河南省洛陽市伊川縣2024-2025學(xué)年七年級下學(xué)期期中生物試題(含答案)
- 定額〔2025〕1號文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價格水平調(diào)整的通知
- 2023深圳一模數(shù)學(xué)試卷及答案
- 初中八年級紅色文化課方志敏精神教案
- (完整版)METS醫(yī)護(hù)英語水平考試
- 車險查勘定損中級培訓(xùn)水淹車處理指引及定損培訓(xùn)
- GB/T 25695-2010建筑施工機(jī)械與設(shè)備旋挖鉆機(jī)成孔施工通用規(guī)程
- 納米酶研究進(jìn)展
- 力平之獨特的血脂管理課件
評論
0/150
提交評論