軟件工程專(zhuān)業(yè)實(shí)訓(xùn)報(bào)告_第1頁(yè)
軟件工程專(zhuān)業(yè)實(shí)訓(xùn)報(bào)告_第2頁(yè)
軟件工程專(zhuān)業(yè)實(shí)訓(xùn)報(bào)告_第3頁(yè)
軟件工程專(zhuān)業(yè)實(shí)訓(xùn)報(bào)告_第4頁(yè)
軟件工程專(zhuān)業(yè)實(shí)訓(xùn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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)介

1、中原工學(xué)院軟件學(xué)院中原工學(xué)院軟件學(xué)院 二二級(jí)級(jí)實(shí)實(shí)踐踐課課題題設(shè)設(shè)計(jì)計(jì)任任務(wù)務(wù)書(shū)書(shū) 姓姓 名名 專(zhuān)業(yè) 班 題題 目目通信錄系統(tǒng)的開(kāi)發(fā) 設(shè)設(shè) 計(jì)計(jì) 任任 務(wù)務(wù) 開(kāi)發(fā)一個(gè)比較完善的基于 java 的通信錄服務(wù)系統(tǒng),包括校友交流所能用到的所有聯(lián)系 方式,為軟件學(xué)院校友提供一個(gè)強(qiáng)大的通信網(wǎng)絡(luò)。 主要功能包括: 1. 對(duì)聯(lián)系人信息的增加:在通信錄中增加聯(lián)系人的信息;(獨(dú)立完成) 2. 對(duì)聯(lián)系人信息的修改:在通信錄中修改聯(lián)系人的信息;(參與) 3. 對(duì)聯(lián)系人信息的刪除:在通信錄中刪除聯(lián)系人的信息;(參與) 4. 對(duì)聯(lián)系人信息的查詢(xún):在通信錄中查詢(xún)聯(lián)系人的信息;(獨(dú)立完成) 開(kāi)發(fā)工具: java、photo

2、shop 時(shí)時(shí) 間間 進(jìn)進(jìn) 度度 第 1 周(開(kāi)始時(shí)間結(jié)束時(shí)間): 學(xué)習(xí)編寫(xiě)通信錄中所需要的相關(guān)的知識(shí),為后兩周的課題的編寫(xiě)大下基礎(chǔ)。 第 2 周(開(kāi)始時(shí)間結(jié)束時(shí)間): 開(kāi)始編寫(xiě)程序的界面代碼,參考各種資料,逐個(gè)實(shí)現(xiàn)程序的功能。 第 3 周(開(kāi)始時(shí)間結(jié)束時(shí)間): 測(cè)試已編好的程序,找到程序中的不知,修改程序,使程序更加完善。 原原 主主 始始 要要 資資 參參 料料 考考 與與 文文 獻(xiàn)獻(xiàn) 01(美)梁(liang,y.d.). java 語(yǔ)言程序設(shè)計(jì)基礎(chǔ)篇(原書(shū)第 6 版)m:機(jī)械工業(yè)出版 社 2008.6 02 凱德納黑德, 勒邁, 陳武. 21 天學(xué)通 java 2:專(zhuān)業(yè)參考版.m 人民

3、郵電出版社 2004.01 03 洪維恩 何嘉. java 2 面向?qū)ο蟪绦蛟O(shè)計(jì).m 中國(guó)鐵道出版社 2005.01 04 張靚 顧慧敏. java 案例開(kāi)發(fā).m 中國(guó)水利水電出版社.2005.01 指導(dǎo)教師簽字:指導(dǎo)教師簽字: 年年 月月 日日 小小通信錄 摘 要 社會(huì)在不斷的進(jìn)步,紙制的通信錄已經(jīng)快要被淘汰了。電子通信錄已經(jīng)成為了主流。 電子通信錄與原有的紙制通信錄相比,紙質(zhì)通訊錄有以下缺陷:儲(chǔ)存信息量少、查找不 方便、信息容易丟失,且對(duì)于隱私保護(hù)不強(qiáng)。而電子通信錄則克服了這些缺陷,且具有 占用空間小,查找方便,不易丟失等多個(gè)優(yōu)點(diǎn)。 應(yīng)校友的需求我們編寫(xiě)了程序:小小通信錄。它可以記錄學(xué)友的

4、各項(xiàng)通信信息。方 便校友盡快聯(lián)系需要聯(lián)系的人??筛玫脑鰪?qiáng)校友之間的聯(lián)系、友誼。 本程序具有界面簡(jiǎn)便大方,使用戶(hù)不用學(xué)習(xí)操作指南也可以簡(jiǎn)單操作。大大提高了 工作效率。 本程序是用 java 語(yǔ)言編寫(xiě)的,程序占用系統(tǒng)資源相對(duì)較少,且可移植性很強(qiáng),可 以適用各種操作系統(tǒng)。用戶(hù)還可以根據(jù)自己的需求不同對(duì)程序做出相應(yīng)的修改,使每個(gè) 用戶(hù)都有最適用于自己的通信錄。這也是本程序的實(shí)用性所在。 關(guān)鍵詞:通信錄; 方便; 簡(jiǎn)單; 實(shí)用 目 錄 摘摘 要要.1 第第 1 章章 項(xiàng)目分析項(xiàng)目分析.1 1.1 問(wèn)題描述.1 1.2 技術(shù)分析.1 第第 2 章章 實(shí)現(xiàn)實(shí)現(xiàn).2 2.1 程序開(kāi)始模塊.3 2.1.1 流

5、程圖.3 2.1.2 界面.4 2.1.3 代碼講解.5 2.2 程序界面顯示模塊.6 2.2.1 流程圖.7 2.2.2 界面.8 2.2.3 代碼講解.8 2.3 聯(lián)系人信息模塊.13 2.3.1 代碼講解.13 2.4 程序的功能模塊.14 2.4.1 流程圖.14 2.4.2 界面.17 2.4.3 代碼講解.18 第第 3 章章 結(jié)束語(yǔ)結(jié)束語(yǔ).23 附錄附錄 a: 附加圖、表附加圖、表.27 附錄附錄 b: 主要源程序主要源程序.28 第 1 章 項(xiàng)目分析 為方便校友之間的聯(lián)系,儲(chǔ)存校友的聯(lián)系方式。使校友之間得到更好的聯(lián)系。所以 我們組決定制作小小通信錄,以為同學(xué)們提供方便。 1.1

6、 問(wèn)題描述 程序需要有一個(gè)簡(jiǎn)潔的界面,使同學(xué)們一看便知怎么操作。程序還需要實(shí)現(xiàn)增加、 修改、刪除、查詢(xún)功能。由于對(duì)數(shù)據(jù)庫(kù)和 java 之間聯(lián)系的欠缺,本組決定用文本儲(chǔ)存 聯(lián)系人的基本信息。同時(shí)為解決用戶(hù)大意錯(cuò)誤修改聯(lián)系人,本程序在修改過(guò)聯(lián)系人以后 還需要確認(rèn)要修改聯(lián)系人的姓名。為解決這些問(wèn)題我們就得查詢(xún)個(gè)方面的資料,為更好 的解決問(wèn)題做好準(zhǔn)備。 1.2 技術(shù)分析 本程序中使用 jframe 類(lèi)編寫(xiě)程序的界面,運(yùn)用各種監(jiān)聽(tīng)方法,監(jiān)聽(tīng)窗口、按鍵、鼠 標(biāo)的各種動(dòng)作。本程序的所有信息都儲(chǔ)存在文件當(dāng)中,所以本程序是使用 file 類(lèi)來(lái)實(shí)現(xiàn) 對(duì)文本的讀取、儲(chǔ)存、增加、修改、查詢(xún)。 為使程序簡(jiǎn)單話(huà),我們決定

7、把整個(gè)程序分成 4 個(gè)類(lèi), 分別為 usersystem.java、userservice.java、mysystem.java、user.java。分別實(shí)現(xiàn)程序的部分功能。 usersystem.java 該類(lèi)是程序的主類(lèi),該類(lèi)含有 main 方法,程序從該類(lèi)開(kāi)始執(zhí)行。 mysystem.java 該類(lèi)主要是實(shí)現(xiàn)圖形化界面的,實(shí)現(xiàn)按鈕,輸入框,標(biāo)簽等圖形化面。 user.java 該類(lèi)主要是聯(lián)系人的相關(guān)數(shù)據(jù)。 userservice.java 該類(lèi)主要是對(duì)各種操作方法的定義和實(shí)現(xiàn),是實(shí)現(xiàn)增刪改查等主要 功能的服務(wù)類(lèi)。 第 2 章 實(shí)現(xiàn) 程序的主流程圖: 圖 2-1 程序的主流程圖 程序的增加

8、、修改、刪除、查詢(xún),都是在程序中的 userservice.java 實(shí)現(xiàn)的。程序中 的主界面主要是通過(guò)程序中的 mysystem.java 實(shí)現(xiàn)的。程序的開(kāi)始也就是程序的主類(lèi)是通 過(guò)程序中的 usersystem.java。各類(lèi)之間的關(guān)系可以用下圖表示。 程序開(kāi)始 程序主界面 程序是否退出 增加聯(lián)系人修改聯(lián)系人刪除聯(lián)系人查詢(xún)聯(lián)系人 程序關(guān)閉 是 否 圖 2-2 程序各類(lèi)之間的調(diào)用關(guān)系 下面將為你講解我們程序功能實(shí)現(xiàn)的詳細(xì)細(xì)節(jié)。 2.1 程序開(kāi)始模塊 程序的主模塊是由 usersystem.java 類(lèi)實(shí)現(xiàn)的。該類(lèi)中有對(duì)各個(gè)類(lèi)的調(diào)用。該類(lèi)的開(kāi) 始先檢驗(yàn)程序所需文件是否存在。如果系統(tǒng)沒(méi)有創(chuàng)建文件

9、,程序會(huì)為你新創(chuàng)建文本。如 果有程序會(huì)問(wèn)你是否繼續(xù)使用已創(chuàng)建的通信錄。你也可以新建通信錄,重新輸入聯(lián)系人。 接下來(lái)系統(tǒng)會(huì)顯示程序的主界面,這通過(guò) mysystem.java 實(shí)現(xiàn)。 2.1.1 流程圖 usersystem.java 類(lèi)運(yùn)行的主要流程如下: usersystem.java mysystem.java userservice.java user.java 調(diào)用 調(diào)用 調(diào)用 圖 2-3 開(kāi)始類(lèi)的流程圖 2.1.2 界面 本類(lèi)中將出現(xiàn)的界面: 圖 2-4 系統(tǒng)中沒(méi)有所需的儲(chǔ)存文件時(shí),提示系統(tǒng)為用戶(hù)新建文件。 程序開(kāi)始 判斷程序所需文件 是否存在 判斷用戶(hù)是否需要 重建文件 程序繼續(xù)運(yùn)

10、行 為用戶(hù)新建文件 為用戶(hù)新建文件 是 否 是 否 圖 2-5 系統(tǒng)中已有文件存在,程序會(huì)提問(wèn)你是否需要新建通信錄。 圖 2-6 為用戶(hù)重新建立文件,并提示用戶(hù)原通信錄已刪除。 2.1.3 代碼講解 import java.io.filenotfoundexception; 在程序得開(kāi)始我們向程序中導(dǎo)入了文件類(lèi)(file 類(lèi)) 。類(lèi)是 java 系統(tǒng)中預(yù)定義類(lèi),類(lèi) 可以反復(fù)使用,而不必每次“重新編寫(xiě)” 。file 類(lèi)是文件名及其目錄路徑的一個(gè)包裝類(lèi), 我們?cè)诔绦蛑惺褂?file 類(lèi)獲得文件的屬性、刪除和重命名文件。但是,file 類(lèi)沒(méi)有包含讀 寫(xiě)文件內(nèi)容的方法。所以在下一個(gè)類(lèi)中我會(huì)講到用 pr

11、intwriter 寫(xiě)數(shù)據(jù),用 scanner 讀數(shù)據(jù)。 import javax.swing.joptionpane; 程序中我們還要用消息對(duì)話(huà)框顯示文本信息,所以我們還需向程序中導(dǎo)入 joptionpane 類(lèi)。我們使用 joptiongpane 類(lèi)中的 showmessagedialog 方法顯示文本信息, showinputdialog 方法獲得可輸入的對(duì)話(huà)框。 public class usersystem 接下來(lái)我們創(chuàng)建 usersystem 類(lèi)。在這個(gè)類(lèi)中我們包含了 main 方法。 public static void main(string args) throws file

12、notfoundexception 我們創(chuàng)建了 main 方法,每個(gè) java 應(yīng)用程序必須有一個(gè)用戶(hù)聲明的 main 方法,它定 義了程序從何處開(kāi)始。jvm 通過(guò)調(diào)用 main 方法執(zhí)行應(yīng)用程序。 程序中還用到了 throws。throws 是用來(lái)聲明一個(gè)方法可能拋出的所有異常信息,注意, 是可能的,所有的異常信息,在 java 里面,大家很熟悉什么是類(lèi)和對(duì)象,在這里, throws 要拋出的就是一個(gè)異常類(lèi),因?yàn)樗⒉恢谰唧w會(huì)出現(xiàn)哪種異常,所以就簡(jiǎn)單拋 出一個(gè)異常類(lèi),包含這個(gè)異常類(lèi)下面所有可能的異常。throws 通常不用顯示的捕獲異常, 而是由系統(tǒng)自動(dòng)將所有捕獲到的異常信息拋給上級(jí)方法來(lái)

13、處理,舉個(gè)簡(jiǎn)單的例子來(lái)說(shuō):a 類(lèi)聲明拋出了一個(gè)異常類(lèi),如果系統(tǒng)捕獲到該異常類(lèi)下面某個(gè)具體的異常對(duì)象,則上交 給 a 的父類(lèi) b 來(lái)處理,假如 b 不做處理,那么 b 繼續(xù)上拋,上拋給 b 的父類(lèi) c 來(lái)處理, 以此類(lèi)推,直至找到可以處理該異常的方法為止。 java.io.file file = new java.io.file(txl.txt); 本語(yǔ)句為文件 txl.txt 創(chuàng)建一個(gè) file 對(duì)象。 if (file.exists()else 查看文件是否存在 file 類(lèi)中的 exsits()方法。利用 if 語(yǔ)句判斷文件存在與不存在時(shí)的 動(dòng)作。 string s = joptionpa

14、ne.showinputdialog(null,已有人使用本通信錄(文件位于 txl.txt) 。 n 新建通信錄請(qǐng)按任意數(shù)字鍵n + 繼續(xù)使用請(qǐng)按數(shù)字鍵 1); 當(dāng)文件存在時(shí),顯示消息對(duì)話(huà)框,提示用戶(hù)接下來(lái)的操作。并將用戶(hù)輸入的信息傳 遞給 string 類(lèi)型的 s。s 的值關(guān)系到程序的下一步運(yùn)行。 if (s.equals(1) new mysystem(); 在上一步的選擇中如果用戶(hù)鍵入了數(shù)字 1。則表示用戶(hù)需要繼續(xù)使用已有的通信錄。 系統(tǒng)則會(huì)調(diào)用程序的 mysystem()類(lèi),顯示程序主界面。equals( ) 如果此對(duì)象與指定對(duì)象 相同,則返回 true。如果不相同,則返回 fals

15、e。 joptionpane.showmessagedialog(null,以為你創(chuàng)建好文件(文件位于 txl.txt) 。源文件 已刪除! ); new java.io.printwriter(file); new mysystem(); 在文件已存在時(shí)如果用戶(hù)鍵入其他鍵,則程序會(huì)為用戶(hù)重新建立文件。也會(huì)把原有 的通信錄刪除。程序調(diào)用構(gòu)造方法 new printwinter(string filename)創(chuàng)建一個(gè)新的文件。并 把原有文件的內(nèi)容刪除。程序新建文件后會(huì)調(diào)用程序的 mysystem()類(lèi),顯示程序的主界 面。使程序繼續(xù)運(yùn)行。 2.2 程序界面顯示模塊 程序的界面顯示主要是有 my

16、system.java 類(lèi)實(shí)現(xiàn)的。mysystem.java 主要是實(shí)現(xiàn)圖形 化界面的,實(shí)現(xiàn)按鈕,輸入框,標(biāo)簽等圖形化界面.。 這個(gè)類(lèi)中的方法主要是java 語(yǔ)言程序設(shè)計(jì)基礎(chǔ)篇中第 3 篇 圖形用戶(hù)界面程序設(shè) 計(jì)的知識(shí)。我們利用第一周的部分時(shí)間學(xué)習(xí)了這部分的知識(shí)。為我們?cè)谶@里編寫(xiě)程序的 界面打下了基礎(chǔ)。這個(gè)類(lèi)中主要用的是不抽象窗口工具集(abstract window tookit, awt)。 awt 使用于開(kāi)發(fā)簡(jiǎn)單的圖形用戶(hù)界面。而是使用的比 awt 用戶(hù)界面組件更穩(wěn)定、通用 和靈活的 swing 組件庫(kù)取代。swing 組件更少地依賴(lài)目標(biāo)機(jī)器上的平臺(tái),更少使用本地的 gui 資源。 my

17、system 類(lèi) uml 類(lèi)圖: 圖 2-7 mysystem.java 類(lèi) uml 圖 2.2.1 流程圖 mysystem.java 類(lèi)運(yùn)行的流程圖: mysystem +mysystem() + actionperformed(actionevent e):void 圖 2-8 程序界面系統(tǒng)的流程圖 2.2.2 界面 本類(lèi)中出現(xiàn)程序的主界面,好程序退出時(shí)的界面,界面如下圖: 程序經(jīng)上一步調(diào)用 程序顯示主界面 增加鍵是否按 下 刪除鍵是否按 下 修改鍵是否按 下 查詢(xún)鍵是否按 下 退出按鍵是否 按下 調(diào)用增加方法調(diào)用刪除方法調(diào)用修改方法調(diào)用查找方法 程序退出 是是是 是 是 圖 2-9 程

18、序的主界面 圖 2-10 程序的退出界面 2.2.3 代碼講解 import java.awt.*; import javax.swing.*; 由于本類(lèi)是用于編寫(xiě)程序的界面,所以本類(lèi)中需要向程序中導(dǎo)入 java.awt 包和 javax.swing 包。用于程序編譯界面。swing 組件不能取代 awt 的全部類(lèi),只能替代 awt 的 gui 組建類(lèi)。所以程序還需調(diào)用 java.awt 包。 public class mysystem extends jframe implements actionlistener 建立 mysystem 類(lèi)并繼承 jframe 類(lèi),繼承可訪(fǎng)問(wèn)的數(shù)據(jù)域和方法

19、。同時(shí)對(duì) mysystem 類(lèi)實(shí)現(xiàn) actionlistener 接口。接口是一種與類(lèi)相似的結(jié)構(gòu),只包含常量和抽象的方法。接 口在許多方面與抽象類(lèi)相似,但是抽象類(lèi)除了包含常量和抽象方法外,還可以包含變量 和具體方法。 在 java 中,接口被認(rèn)為是特殊的類(lèi)。就像通常的類(lèi)一樣,每個(gè)接口編譯為獨(dú)立的字 節(jié)碼文件。與抽象類(lèi)相似,不能使用 new 操作符創(chuàng)建接口的實(shí)例,但是大多數(shù)情況下, 使用接口或多或少有點(diǎn)像使用抽象類(lèi)。 jbutton b1 = new jbutton(查詢(xún)); jbutton b2 = new jbutton(增加); jbutton b3 = new jbutton(刪除);

20、jbutton b4 = new jbutton(修改); jbutton b5 = new jbutton(退出); jbutton b11 = new jbutton(按姓名查詢(xún)); jbutton b12 = new jbutton(按號(hào)碼查詢(xún)); component 類(lèi)是所有用戶(hù)界面類(lèi)的父類(lèi),而 jcomponent 類(lèi)是所有輕型 swing 組件的 父類(lèi)。由于 jcomponent 是一個(gè)抽象類(lèi),所以,不能用 new jcomponent()創(chuàng)建 jcomponent 的實(shí)例,但是,可以使用 jcomponent 具體子類(lèi)的構(gòu)造方法來(lái)創(chuàng)建 jcomponent 的實(shí)例。 所以可以直接

21、使用 jbutton jbutton = new jbutton();來(lái)直接創(chuàng)建按鍵。本部分為程序創(chuàng)建 了 7 個(gè)按鍵。 container con = getcontentpane(); container 用來(lái)組織組件??蚣?frame、面板 panel 和 applet 都是容器的例子。每個(gè) jframe 都包含一個(gè)內(nèi)容窗口。每個(gè)內(nèi)容窗格都是 java.awt.container 的一個(gè)實(shí)例??梢韵?con 中添加按鍵、圖像。 imageicon aicon = new imageicon(通信錄.jpg); imageicon icon=new imageicon(“”); 語(yǔ)句創(chuàng)建一

22、個(gè)圖像圖標(biāo)。 mysystem() 這個(gè)類(lèi)中顯示程序主界面的方法。界面的編寫(xiě)在這個(gè)程序中實(shí)現(xiàn)。 super(個(gè)人通信錄管理程序); 設(shè)置窗口的題目。 setsize(390, 460); 設(shè)置窗口的大小。 con.setlayout(new borderlayout(); 設(shè)置容器的布局管理器。borderlayout 管理器將窗口分成五個(gè)區(qū)域:東區(qū)、南區(qū)、西 區(qū)、北區(qū)和中央。 p1.setbackground(color.red); p3.setbackground(color.blue); 設(shè)置區(qū)域 p1、p2 的顏色。 p1.add(new jlabel(); p3.add(b2); p

23、3.add(b4); p3.add(b3); p3.add(b1); p3.add(b5); 向 p1 中添加標(biāo)題,p3 中添加各個(gè)按鍵。 add(new jlabel(aicon); con.add(north, p1); con.add(south, p3); dimension consize=getsize(); int halfwidth = consize.width/2; int halfheight = consize.height/2; dimension screensize=toolkit.getdefaulttoolkit().getscreensize(); int

24、centerx = screensize.width/2; int centery = screensize.height/2; setlocation(centerx-halfwidth,centery-halfheight); setvisible(true); 本段代碼是確定程序窗口的位置,舉例說(shuō)明: 1、有一個(gè) 200*200 像素的窗口,想要把它放在 800*600 像素的屏幕中間,屏幕的位 置應(yīng)是(800/2,600/2)=(400,300) 2、為了設(shè)置該窗口左上角的位置,以使窗口中心與屏幕中心相吻合,必須符合 2 個(gè) 小條件(1)窗口的一半或 100 像素必須落在屏幕的中心的左

25、邊(2)窗口的一半或 100 像素必 須落在屏幕的中心的上方,因此窗口左上角的位置必須定位于(400-100,300-100) =(300,200) 。 但在實(shí)際程序運(yùn)行的過(guò)程中,程序的運(yùn)行環(huán)境顯示屏幕的實(shí)際尺寸和像素清晰度是 不盡相同的,我們必須能動(dòng)態(tài)的判斷運(yùn)行 java 程序的計(jì)算機(jī)屏幕的大小,以使程序不管 運(yùn)行在什么計(jì)算機(jī)上都能居中,java 的 awt 提供了一個(gè) toolkit 類(lèi),以使我們做出判 斷! 具體應(yīng)用: 1、在 toolkit 類(lèi)上調(diào)用一個(gè)靜態(tài)方法 getdefaulttoolkit(),以便為這個(gè)平臺(tái)在 awt 的 toolkit 對(duì)象上獲得一個(gè)句柄。 2、然后調(diào)用 t

26、oolkit 對(duì)象的 getscreensize()方法,該方法返回一個(gè) dimension(中文意 為尺寸)類(lèi)對(duì)象。demension 對(duì)象正好有兩個(gè) public int 屬性,即 width(以像素為單位),和 heigth(以像素為單位) 3、把這種方法調(diào)用“系”在一起,因?yàn)槲覀儾幌腴L(zhǎng)時(shí)間的保持 toolkit 對(duì)象。我們只 想暫時(shí)用它來(lái)恢復(fù)屏幕的 dimension 對(duì)象:代碼: dimension screensize=toolkit.getdefaulttoolkit().getscreensize(); 因此不必向引用變量分配 toolkit 對(duì)象的句柄。 addwindowl

27、istener(new windowadapter() public void windowclosing(windowevent e) setvisible(false); system.exit(0); ); 對(duì)窗口添加監(jiān)聽(tīng),當(dāng)窗口被關(guān)閉時(shí)系統(tǒng)退出 b1.addactionlistener(this); b2.addactionlistener(this); b3.addactionlistener(this); b4.addactionlistener(this); b5.addactionlistener(this); b11.addactionlistener(this); b12.

28、addactionlistener(this); 為各個(gè)按鍵添加監(jiān)聽(tīng),為按鍵后續(xù)實(shí)現(xiàn)功能做下鋪墊。 public void actionperformed(actionevent e) 創(chuàng)建監(jiān)聽(tīng)方法實(shí)現(xiàn)各個(gè)按鍵的監(jiān)聽(tīng)。 if (b1 = e.getsource() final jframe newf = new jframe(查詢(xún)方式); newf.setsize(200, 150); newf.setvisible(true); jbutton b13 = new jbutton(關(guān)閉); newf.setlayout(new gridlayout(3, 1, 5, 5); newf.add

29、(b11); newf.add(b12); newf.add(b13); b13.addmouselistener(new mouseadapter() public void mouseclicked(mouseevent ee) newf.setvisible(false); ); 當(dāng)按鍵查詢(xún)被按下時(shí),顯示窗體讓用戶(hù)選擇查詢(xún)的方式。并對(duì)關(guān)閉按鍵添加鼠標(biāo) 監(jiān)聽(tīng),當(dāng)鼠標(biāo)按下關(guān)閉按鍵時(shí)查詢(xún)窗體退出。 if (b11 = e.getsource() userservice.cx(); 當(dāng)按下按姓名查詢(xún)時(shí),調(diào)用 userservice 類(lèi)中的 cx()方法。實(shí)現(xiàn)按姓名查詢(xún)。 if (b12 = e.

30、getsource() userservice.cx1(); 當(dāng)按下按手機(jī)號(hào)查詢(xún)時(shí),調(diào)用 userservice 類(lèi)中的 cx1()方法。實(shí)現(xiàn)按手機(jī)號(hào)查詢(xún)。 if (b2 = e.getsource() ) userservice.add(); 當(dāng)按下增加鍵時(shí),調(diào)用 userservice 類(lèi)的 add()方法,增加功能。 if (b3 = e.getsource() userservice.delete(); 當(dāng)按下刪除鍵時(shí),調(diào)用 userservice 類(lèi)的 delete()方法,刪除功能。 if (b4 = e.getsource() userservice.xg(); 當(dāng)按下修改時(shí),調(diào)

31、用 userservice 類(lèi)的 xg()方法,實(shí)現(xiàn)修改功能。 if (b5 = e.getsource()joptionpane.showmessagedialog(null,本通訊錄由劉旭輝,翟瑞東, 張淵喆共同制作.n 謝謝使用,再見(jiàn)!); system.exit(0); 當(dāng)按下退出時(shí),提示退出,退出系統(tǒng)。 2.3 聯(lián)系人信息模塊 聯(lián)系人的信息板塊主要是 user.java 類(lèi),該類(lèi)主要是聯(lián)系人的相關(guān)數(shù)據(jù)。該類(lèi)中建 立聯(lián)系人對(duì)象包含了聯(lián)系人的各項(xiàng)信息,聯(lián)系人姓名、聯(lián)系人手機(jī)號(hào)、聯(lián)系人 qq 等。同 時(shí)類(lèi)中還包含了很多的方法,來(lái)得到相關(guān)的信息。 user 類(lèi) uml 類(lèi)圖: 圖 2-11

32、user 類(lèi) uml 圖 2.3.1 代碼講解 public class user 為程序創(chuàng)建 user 類(lèi)。 public user() super(); public user(int id, string name, string tel, string email, string phone, user +name; string +tel; string +email; string +phone; string +address; string +qq; string +user() +user(int id, string name, string tel, string ema

33、il, string phone, string category, string address, string work, string q, string qq) +getqq():string +setqq(string qq):void +getname():string +setname(string name):void +gettel():string +settel(string tel):void +getemail():string +setemail(string email):void +getphone():string +setphone(string phone

34、):void +getaddress():string +setaddress(string address):void string category, string address, string work, string q, string qq) super(); = name; this.tel = tel; this.email = email; this.phone = phone; this.address = address; this.qq = qq; user 類(lèi)中的不含參構(gòu)造方法和含參構(gòu)造方法。當(dāng)從一個(gè)類(lèi)繼承時(shí),子類(lèi)和父類(lèi)都有 一個(gè)同名方法,也就是子

35、類(lèi)覆蓋了父類(lèi)的方法,可是又想調(diào)用父類(lèi)的方法,那么就要用 super。 其他下面的代碼是為了實(shí)現(xiàn)對(duì)信息的讀寫(xiě)。在此不做詳細(xì)的介紹。 2.4 程序的功能模塊 程序的主要功能是在這個(gè) userservice.java 類(lèi)實(shí)現(xiàn)的,該類(lèi)是程序?qū)崿F(xiàn)功能的主要 類(lèi)。該類(lèi)中包括 add()方法、add1(file file, user u)方法、delete()方法、delete1(file file)方 法、xg()方法、xg1(file file)方法、xg11(file file, user u)方法、cx()方法、search1(file file) 方法、cx1()方法、search12(file

36、file)方法。分別實(shí)現(xiàn)程序的添加功能、刪除功能、修改功 能、查詢(xún)功能。 userservice 類(lèi)的 uml 類(lèi)圖: userservice +add():void +add1(file file, user u):void +delete():void +delete1(file file):void +xg():void +xg1(file file):void +xg11(file file, user u):void +cx();void +search1(file file):void +cx1():void +search12(file file):void 圖 2-12 use

37、rservice.java 類(lèi) uml 圖 2.4.1 流程圖 增加方法的流程圖: 按下增加鍵 顯示增加窗口 讀取聯(lián)系人在文件 中的個(gè)數(shù),確定聯(lián) 系人的添加位置 判斷用戶(hù)是否輸入 聯(lián)系人姓名 判斷聯(lián)系人是否輸 入聯(lián)系人的手機(jī)號(hào) 從輸入框中獲得用 戶(hù)輸入的信息 以字符串的形式儲(chǔ) 存到文件中 儲(chǔ)存關(guān)閉文件 結(jié)束 提示用戶(hù)沒(méi)有輸入 姓名 提示用戶(hù)沒(méi)有輸入 手機(jī)號(hào) 否 否 是 是 是 圖 2-13 增加方法流程圖 查詢(xún)功能的流程圖如下: 圖 2-14 程序查詢(xún)的流程圖 按下查詢(xún)鍵 顯示查詢(xún)窗口 是否按下按姓 名查詢(xún)鍵 是否按下按手 機(jī)號(hào)查詢(xún)鍵 是否按下關(guān)閉 鍵 彈出按姓名查 詢(xún)窗口 彈出按手機(jī)號(hào) 查詢(xún)

38、窗口 是否有要查詢(xún) 的姓名 是否有要查詢(xún) 的手機(jī)號(hào) 顯示聯(lián)系人顯示聯(lián)系人提示無(wú)此人提示無(wú)此人 結(jié)束 是 是 是 是 是否否 2.4.2 界面 本類(lèi)中出現(xiàn)的界面: 圖 2-15 添加聯(lián)系人界面 圖 2-16 添加成功界面 圖 2-17 查詢(xún)界面 圖 2-18 修改聯(lián)系人界面 圖 2-19 刪除聯(lián)系人成功界面 2.4.3 代碼講解 這個(gè)類(lèi)中需要導(dǎo)入很多的類(lèi),原理和前三個(gè)的一樣在這里不做過(guò)多的解釋。 本類(lèi)中首先實(shí)現(xiàn)的是添加方法 add()。程序中先建立添加的窗口。 bb1.addmouselistener(new mouseadapter() public void mouseclicked(mou

39、seevent ee) user u = new user(); u.setname(jtf1.gettext(); u.setphone(jtf2.gettext(); u.settel(jtf3.gettext(); u.setqq(jtf4.gettext(); u.setemail(jtf5.gettext(); u.setaddress(jtf6.gettext(); file file = new file(txl.txt); try add1(file, u); catch (filenotfoundexception e1) e1.printstacktrace(); ); 為

40、確定按鍵,設(shè)置監(jiān)聽(tīng),并設(shè)置動(dòng)作。從輸入對(duì)話(huà)框中得到信息。并執(zhí)行 add1()方 法,實(shí)現(xiàn)對(duì)聯(lián)系人的添加。 bb2.addmouselistener(new mouseadapter() public void mouseclicked(mouseevent ee) newf.setvisible(false); ); 為關(guān)閉按鍵添加監(jiān)聽(tīng)。當(dāng)關(guān)閉按鍵按下時(shí),窗口關(guān)閉。 接下來(lái)該類(lèi)實(shí)現(xiàn) add1()方法,這個(gè)方法主要是讀取文件中聯(lián)系人的數(shù)目,并在相應(yīng) 的位置添加鍵入的聯(lián)系人。 while (input.hasnext() useri = new user(); = input

41、.next(); useri.phone = input.next(); useri.tel = input.next(); useri.qq = input.next(); useri.email = input.next(); useri.address = input.next(); i+; 上述代碼的主要作用是讀出文件中已有聯(lián)系人的數(shù)目,并由 i 記錄聯(lián)系人總數(shù)目。 string m = u.getname(); if (m = null | m.equals() break; 如果輸入的聯(lián)系人姓名為空,程序?qū)⑼顺觥?for (j = 0; j i; j+) if (userj.nam

42、e.equals(m) joptionpane.showmessagedialog(null, 此人已存在!); return; 本段代碼逐個(gè)檢測(cè)系統(tǒng)儲(chǔ)存的通信錄中是否存在同名的聯(lián)系人。 string h = u.getphone(); if (h = null | h.equals() break; 如果輸入的聯(lián)系人的手機(jī)號(hào)為空,程序?qū)⑼顺觥?for (j = 0; j i; j+) if (userj.phone.equals(h) joptionpane.showmessagedialog(null, 此手機(jī)號(hào)已存在!); return; 本段代碼逐個(gè)檢測(cè)系統(tǒng)儲(chǔ)存的通信錄中是否存在同手機(jī)

43、號(hào)的聯(lián)系人。 useri = new user(); = m; useri.phone = h; useri.qq = z; useri.tel = t; useri.email = r; useri.address = g; i+; joptionpane.showmessagedialog(null, 添加成功!n 已有聯(lián)系人數(shù)目為 +i+n 新新增聯(lián)系人的信息為:+ n 姓名: + m + n 手機(jī)號(hào): + h + nqq: + z + n 固定電話(huà):+ t + nemail: + r + n 地址: + g + ); 檢查出聯(lián)系人中沒(méi)有與索要添加聯(lián)系人信息相同的。

44、則聯(lián)系人的信息分別從窗口中 得到。并對(duì) i 進(jìn)行加 1,為在文件最后一個(gè)聯(lián)系人后面添加上新加入的聯(lián)系人的信息。 printwriter output = new printwriter(file); for (int k = 0; k i; k+) string a = + + userk.tel + + userk.email + + userk.phone + + userk.address + + userk.qq + rn; output.print(a); 創(chuàng)建寫(xiě)入方法并向文件的正確位置添加新增聯(lián)系人。到此增加方法結(jié)束。 下面為本系統(tǒng)查詢(xún)方法的講解。 查詢(xún)方法還

45、是需要先檢驗(yàn)文件中已有聯(lián)系人的數(shù)目。 while (input.hasnext() useri = new user(); = input.next(); useri.phone = input.next(); useri.email = input.next(); useri.tel = input.next(); useri.address = input.next(); useri.qq = input.next(); i+; i 記錄聯(lián)系人的總數(shù)目。 for (j = 0; j i; j+) if (.equals(t11) break; if

46、 (j = i - 1) joptionpane.showmessagedialog(null, 通信錄中沒(méi)有此人, 按確定退出!); return; 在文件中查找是否有與輸入聯(lián)系人姓名相同的聯(lián)系人。如果有記下位置 j。 joptionpane.showmessagedialog(null, 查到聯(lián)系人!n 您要查詢(xún)聯(lián)系人的當(dāng)前信息如下: + n 姓名: + + n 電話(huà): + userj.phone + n 固定電話(huà): + userj.tel + nqq: + userj.qq + nemail: + userj.email + n 地址: + userj.addres

47、s); 程序顯示查找到的聯(lián)系人。 對(duì)手機(jī)號(hào)的查找跟對(duì)姓名的查找都是一樣的在這里不做解釋。 其余兩個(gè)功能由本組的其他倆名成員完成,在他們的報(bào)告中會(huì)有詳細(xì)的講解。 第 3 章 結(jié)束語(yǔ) 本次的課題已經(jīng)較好的完成,只有部分功能沒(méi)有實(shí)現(xiàn)。還得通過(guò)以后的繼續(xù)學(xué)習(xí)來(lái) 慢慢的完善。整個(gè)程序的效果還是很好的簡(jiǎn)單使用,沒(méi)有錯(cuò)誤??梢詭椭脩?hù)建立完善 的通信錄。程序中還有很多的不足,比如程序沒(méi)有模糊查詢(xún)的功能,只有用戶(hù)輸入與文 本中出入的相同的信息,系統(tǒng)才會(huì)檢索出來(lái)該聯(lián)系人。程序中還沒(méi)有列出所有聯(lián)系人的 信息,這不方便用戶(hù)的各項(xiàng)操作。程序的添加功能也存在一定的不足,qq 必須添加,如 果不添加程序就會(huì)出錯(cuò)。文件被打

48、包后,程序的圖片無(wú)法顯示。當(dāng)程序中沒(méi)有聯(lián)系人信 息時(shí),刪除、修改、查詢(xún),雖然可以出東西但是程序出錯(cuò)。這些問(wèn)題在后續(xù)的學(xué)習(xí)中我 相信我一定會(huì)得到解決的方法。 三周的課題實(shí)踐使我知道了自學(xué)能力的重要性。老師是不會(huì)把所有的知識(shí)都交給你 的,老師也交不完。自學(xué)有的時(shí)候比老師講的要記憶的更加的深刻。通過(guò)自己的學(xué)習(xí)我 學(xué)會(huì)了簡(jiǎn)單界面的制作,為本程序制作了簡(jiǎn)潔的界面。使程序不在是去年編的那樣出來(lái) 一個(gè)黑框框,所有的操作都在那里實(shí)現(xiàn),而是有了自己的窗口。 在制作程序的各項(xiàng)功能的時(shí)候也遇到了很多的問(wèn)題。雖然有很多問(wèn)題老師已經(jīng)講過(guò), 但是經(jīng)過(guò)一個(gè)暑假,大部分知識(shí)都已經(jīng)忘記了。所以我以后要多多的復(fù)習(xí)以前學(xué)習(xí)的知 識(shí)

49、,不能學(xué)著新的知識(shí),忘了以前學(xué)的知識(shí)。在寫(xiě)程序階段我參考了很多書(shū)本上的程序, 還有老師在課上寫(xiě)的程序。其實(shí)我們的課題并不是很難,只要我們好好的學(xué)習(xí) java 根據(jù) 課本,借助網(wǎng)絡(luò)其實(shí)我們會(huì)很容易的做出來(lái)。 例如編寫(xiě)程序時(shí),開(kāi)始的時(shí)候我們記錄聯(lián)系人得文檔都是存儲(chǔ)在系統(tǒng)的 e 盤(pán),系統(tǒng) 所需要的圖片也是儲(chǔ)存在 e 盤(pán)。也就是說(shuō)如果系統(tǒng)中沒(méi)有 e 盤(pán)我們的程序就沒(méi)有辦法使 用,經(jīng)過(guò)我就課本的深入研究我從課本的 331 頁(yè)找到了答案,12.10 圖像圖標(biāo) 以下的語(yǔ) 句使用當(dāng)前類(lèi)路徑下的 image 目錄的圖像文件 us.gif 來(lái)創(chuàng)建一個(gè)圖標(biāo): imageicon icon = new imageic

50、on(“imageus.gif”);根據(jù)這個(gè)依據(jù)我也更改了文檔的目錄。 在程序中我們會(huì)遇到很多不熟悉的用語(yǔ),我們借助網(wǎng)絡(luò)懂得了這些方法的作用。并 能 把他熟練的運(yùn)用到本程序中。 網(wǎng)絡(luò)和圖書(shū)能讓我們知道新的技術(shù)。學(xué)到課本上沒(méi)有的東西。學(xué)到更簡(jiǎn)單的方法。 其實(shí)學(xué)習(xí)本來(lái)就是自己的事情,別人逼著學(xué)是不會(huì)真正的學(xué)進(jìn)去的。養(yǎng)成自學(xué)的習(xí)慣是 很有助與以后 3 年的學(xué)習(xí)的。 程序中的不足希望,我會(huì)通過(guò)大二的學(xué)習(xí),使程序中的問(wèn)題得到解決,爭(zhēng)取做出一 個(gè)完善、健全、強(qiáng)大的程序。 通過(guò)課題的編寫(xiě)以及對(duì)相對(duì)資料的查詢(xún),我重新認(rèn)識(shí)了 java。 java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人

51、 pc、 數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話(huà)和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi) 發(fā)者專(zhuān)業(yè)社群。 java 是一個(gè)純的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它繼承了 c+ 語(yǔ)言面向?qū)ο蠹夹g(shù)的核心, java 舍棄了 c +語(yǔ)言中容易引起錯(cuò)誤的指針(以引用取代) 、運(yùn)算符重載(operator overloading) 、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被 引用的對(duì)象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂(yōu)。 java 不同于一般的編譯執(zhí)行計(jì)算機(jī)語(yǔ)言和解釋執(zhí)行計(jì)算機(jī)語(yǔ)言。它首先將源代碼編 譯成二進(jìn)制字節(jié)碼(bytecode),然后依賴(lài)各種不同平臺(tái)上的虛擬機(jī)來(lái)解釋執(zhí)

52、行字節(jié)碼,從 而實(shí)現(xiàn)了“一次編譯、到處執(zhí)行”的跨平臺(tái)特性。不過(guò),每次的編譯執(zhí)行需要消耗一定的時(shí) 間,這同時(shí)也在一定程度上降低了 java 程序的運(yùn)行效率。 編寫(xiě)程序的過(guò)程我也發(fā)現(xiàn)了自己的很多毛病,我發(fā)現(xiàn)自己做不下來(lái)看著長(zhǎng)長(zhǎng)的代碼, 對(duì)著長(zhǎng)長(zhǎng)的代碼頭都疼。在檢查程序錯(cuò)誤時(shí)也沒(méi)有足夠的耐心。我要在以后的學(xué)習(xí)生活 中改掉這些壞毛病,使自己具有一個(gè)程序員的良好品質(zhì)。 參考文獻(xiàn): 01(美)梁(liang,y.d.). java 語(yǔ)言程序設(shè)計(jì)基礎(chǔ)篇(原書(shū)第 6 版)m:機(jī)械工業(yè)出版社 2008.6 02 凱德納黑德, 勒邁, 陳武. 21 天學(xué)通 java 2:專(zhuān)業(yè)參考版.m 人民郵電出版社 2004.

53、01 03 洪維恩 何嘉. java 2 面向?qū)ο蟪绦蛟O(shè)計(jì).m 中國(guó)鐵道出版社 2005.01 04 張靚 顧慧敏. java 案例開(kāi)發(fā).m 中國(guó)水利水電出版社.2005.01 指導(dǎo)教師評(píng)語(yǔ) 成績(jī): 指導(dǎo)教師簽名: 年 月 日 附錄 a: 附加圖、表 mysystem 類(lèi) uml 類(lèi)圖: 附表 1 mysystem.java 類(lèi) uml 圖 user 類(lèi) uml 類(lèi)圖: 附表 2 user 類(lèi) uml 圖 userservice 類(lèi)的 uml 類(lèi)圖: mysystem +mysystem() + actionperformed(actionevent e):void user +name; s

54、tring +tel; string +email; string +phone; string +address; string +qq; string +user() +user(int id, string name, string tel, string email, string phone, string category, string address, string work, string q, string qq) +getqq():string +setqq(string qq):void +getname():string +setname(string name):v

55、oid +gettel():string +settel(string tel):void +getemail():string +setemail(string email):void +getphone():string +setphone(string phone):void +getaddress():string +setaddress(string address):void 附表 3 userservice.java 類(lèi) uml 圖 附錄 b: 主要源程序 系統(tǒng)的主程序: public class usersystem public static void main(string

56、 args) throws filenotfoundexception java.io.file file = new java.io.file(txl.txt);/ 檢查文件是否存在 if (file.exists() string s = joptionpane.showinputdialog(null, 已有人使用本通信錄。n 新建通信錄請(qǐng)按任意數(shù)字鍵n + 繼續(xù)使用請(qǐng)按數(shù)字 鍵 1); if (s.equals(1) new mysystem(); else joptionpane.showmessagedialog(null, 以為你創(chuàng)建好文件。源文件已刪除! ); new java

57、.io.printwriter(file);/ 為用戶(hù)創(chuàng)建文件 new mysystem();/ 調(diào)用窗口類(lèi),實(shí)現(xiàn)系統(tǒng)的顯示 else joptionpane.showmessagedialog(null, 這是新的通信錄,以為你創(chuàng)建好文件。); new java.io.printwriter(file); new mysystem(); userservice +add():void +add1(file file, user u):void +delete():void +delete1(file file):void +xg():void +xg1(file file):void +xg

58、11(file file, user u):void +cx();void +search1(file file):void +cx1():void +search12(file file):void 系統(tǒng)的功能函數(shù): public class userservice / 本類(lèi)是實(shí)現(xiàn)系統(tǒng)各項(xiàng)功能的類(lèi)。 public static void add() / 實(shí)現(xiàn)增加功能 final jframe newf = new jframe(添加聯(lián)系人);/ 創(chuàng)建增加用戶(hù)界面 newf.setsize(300, 400); newf.setvisible(true); newf.setlayout(new

59、 gridlayout(7, 2, 5, 5); jlabel jb1 = new jlabel(聯(lián)系人姓名: ); final jtextfield jtf1 = new jtextfield(15); panel pp1 = new panel(); pp1.add(jb1); pp1.add(jtf1); newf.add(pp1); jlabel jb2 = new jlabel(聯(lián)系人手機(jī)號(hào): ); final jtextfield jtf2 = new jtextfield(15); panel pp2 = new panel(); pp2.add(jb2); pp2.add(jt

60、f2); newf.add(pp2); jlabel jb3 = new jlabel(固 定 電 話(huà): ); final jtextfield jtf3 = new jtextfield(15); panel pp3 = new panel(); pp3.add(jb3); pp3.add(jtf3); newf.add(pp3); jlabel jb4 = new jlabel(聯(lián)系人 qq : ); final jtextfield jtf4 = new jtextfield(15); panel pp4 = new panel(); pp4.add(jb4); pp4.add(jtf4

溫馨提示

  • 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)論