




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《Java程序設(shè)計》課程設(shè)計聯(lián)系方式號碼備注QQ765725111765725111@(優(yōu)先)Terryztx@126.comE-Mail一、課程設(shè)計總體要求:本次課程設(shè)計是對前面學(xué)過的所有面向?qū)ο蟮木幊趟枷胍约熬幊谭椒ǖ囊粋€總結(jié)、回顧和實踐,因此,開始設(shè)計前學(xué)生一定要先回顧以前所學(xué)的內(nèi)容,明確本次作業(yè)設(shè)計所要用到的技術(shù)點并到網(wǎng)上搜索以及查閱相關(guān)的書籍來搜集資料。通過編寫一個基于JAVA的應(yīng)用系統(tǒng)綜合實例,來掌握Java語言編程技巧。具體要求有以下幾點:1.問題的描述與程序2.程序3.代碼實現(xiàn)。將要實現(xiàn)的具體功能。功能實現(xiàn)的具體設(shè)計思路或框架,并檢查流程設(shè)計。4.程序測試(如程序代碼、功能測試、可靠性測試和效率測試等)。5.設(shè)計小結(jié)。二、選題(題目在后面)整體要求:建議使用Eclipse或NetBeans、JBuilder集成開發(fā)環(huán)境完成作業(yè),界面友好,代碼的可維護性好,有必要的注釋和相應(yīng)的文檔。三、考核辦法根據(jù)提交的設(shè)計文檔(包括程序有何創(chuàng)新,有何收獲和所存在的不足以及需要改進的地方。),程序進行考核:無任何文檔,無程序文檔混亂,沒有思路,程序主要完成的功能、設(shè)計思路和框圖、主要代碼,程序中功能的實現(xiàn)(要求演示),得0分;不能運行,不及格;文檔描述清晰,程序?qū)崿F(xiàn)了基本功能,及格;文檔描述清晰準(zhǔn)確,思路清晰,程序?qū)崿F(xiàn)了要求的所有功能,良好;文檔完備,設(shè)計合理有創(chuàng)新,報告清晰明確,深入分析了自己進行實驗的體會感想,程序?qū)崿F(xiàn)了全部功能,功能完善,并有其它的創(chuàng)新實現(xiàn),優(yōu)秀。四、課程設(shè)計報告內(nèi)容(樣例請參照第十頁樣本1和樣本2)1.目錄2.選題與分工3.設(shè)計題目及具體要求4.總體設(shè)計思路(簡要說明系統(tǒng)包含的java源程序及其功能,描述類之間的主要關(guān)系)5.具體設(shè)計(以表格形式描述各個類含有的成員變量和方法,并對關(guān)鍵代碼加以說明,顯示程序運行界面)6.總結(jié)(包括對本課程的建議)7.參考資料五、設(shè)計時間兩周(詳細時間安排經(jīng)供參考),具體安排如下:第一階段:1.班級分組,選定課題,查閱相關(guān)資料2.劃分模塊、小組成員分工,2天利用CASE工具進行系統(tǒng)設(shè)計和分析,并編制源程序第二階段:上機調(diào)試,修改、調(diào)試、完善系統(tǒng)5天4天第三階段:撰寫、上交課程設(shè)計報告,上交課程設(shè)計作品源程序(每課題組一份)2天六、設(shè)計方式和安排分組選題:最多3人為一組,每組一個課題(可根據(jù)課題工作量大小,合理分配人數(shù)),每組設(shè)組長一名,負責(zé)該組設(shè)計工作的協(xié)調(diào)、分工等。設(shè)計過程:1.分析設(shè)計準(zhǔn)備階段(按組討論、對系統(tǒng)功能進行分析,確定算法,并進行明確分工);2.編程調(diào)試階段(繪制可能涉及到的數(shù)據(jù)流圖、數(shù)據(jù)字典、圖時序和圖活動圖等,編制源程序,上機調(diào)試,修改程序,編寫軟件測使用手冊3.總結(jié)和書寫報告階段(撰寫上交相關(guān)資料)、系統(tǒng)流程圖、用例圖、類試報告,用戶)七、課程設(shè)計提交內(nèi)容由小組組長負責(zé)將課程設(shè)計報告(WORD文檔包(注意:課程設(shè)計報告這個word文檔放置在“報告”這個文件夾,程序的項目文件夾(如eclipse新建的項目文件夾)放置在“程序”文件夾,然后將這兩個文件一起選中右鍵選擇壓縮為,取名為你們的“班級拼音代號-你們小組各成員的學(xué)號_姓名-《選題名稱》”,例如:R082-20081408024_王五_20081408025_李四_20081408026_張三-《網(wǎng)絡(luò)監(jiān)聽程序》.rar),然后聯(lián)系我發(fā)送到E-Mail或當(dāng)面提交電子稿。)和程序的項目文件夾統(tǒng)一壓縮打.....課程設(shè)計選題第一部分:小型項目1、編寫一個記事本程序要求:用圖形用戶界面實現(xiàn)。能實現(xiàn)編輯、保存、另存為、查找替換等功能。提示:使用文件輸入輸出流。2、模擬龜兔賽跑要求:用圖形用戶界面實現(xiàn)。能設(shè)置比賽時間,馬匹的數(shù)量等等。在任意時間段內(nèi)馬匹的速度是隨機的。開始比賽之后以動畫顯示賽馬過程。提示:使用多線程3、學(xué)生信息管理系統(tǒng)要求:使用圖形用戶界面用數(shù)據(jù)庫建立1或2個學(xué)生信息表。(不限使用哪種數(shù)據(jù)庫)能連接數(shù)據(jù)庫并實現(xiàn)查詢、增、刪、改等功能。4、圖書信息管理系統(tǒng)要求:使用圖形用戶界面用數(shù)據(jù)庫建立1或2個圖書信息表。(不限使用哪種數(shù)據(jù)庫)能連接數(shù)據(jù)庫并實現(xiàn)查詢、增、刪、改(CRUD)等功能。5、聊天小程序要求:使用圖形用戶界面。能實現(xiàn)一個聊天室中多人聊天??梢詢扇怂搅?。提示:使用socket通信6、ATM柜員機模擬程序要求:使用圖形用戶界面。當(dāng)輸入給定的卡號和密碼(初始卡號和密碼為123456)時,系統(tǒng)能登錄ATM柜員機系統(tǒng),用戶1、查詢初始余額為10000元2、ATM取款:每次取款金額為100的倍數(shù)3、ATM存款:不能4、修改密碼:新密碼長度不小于6位,不可以按照以下規(guī)則進行:余額:,總額不超過5000元,支取金額不允許透支。出現(xiàn)負存款。允許出現(xiàn)6位完全相同的情況,只有舊密碼正確,新密碼符合要求,且兩次輸入相同的情況下才可以成功修改密碼。7、超市收銀系統(tǒng)要求:使用圖形用戶界面。由收銀員輸入顧客的會員卡卡號(價格信息,再把這些信息返回給收銀臺。同時把該收銀臺的銷售總量和有關(guān)種類商品的剩余量以及該持卡顧客的消費情況交數(shù)據(jù)庫存儲以供查詢。另外,對沒有卡的消費情況不記錄該顧客的消費情況等個人信息。如果一個未持卡顧客一次購物滿200元,可為其發(fā)放一張會員卡,以后在該商場購物可向9折優(yōu)惠。若有卡)、所購商品的貨號等。從數(shù)據(jù)庫中取出有關(guān)8、萬年歷要求:使用圖形用戶界面。實現(xiàn)日期與星期的查詢9、網(wǎng)絡(luò)監(jiān)聽程序要求:使用圖形用戶界面。有服務(wù)器和客戶端,服務(wù)器監(jiān)聽客戶端的登陸。即:如果A客戶端登陸服務(wù)器,則服
務(wù)器界面上的A字母對應(yīng)的紅燈變成綠色。綠燈表示連接,紅燈表示斷線。提示:socket的監(jiān)聽方法10、全球通計費程序要求:使用圖形用戶界面。使用真實的全球通資費標(biāo)準(zhǔn),模擬統(tǒng)計一個特定號碼的一個月的實時話費。能根據(jù)輸入實現(xiàn)各種用戶的話費的計算并顯示月實時帳單。提示:使用接口和多個子類實現(xiàn)分別表示金卡、銀卡等各種套餐的話費計算。11.日歷記事本要求:帶有日程提醒功能的日歷。1、顯示信息:用戶可以向前翻頁查詢前一個月的日期,也可以向后翻頁查詢下一個月的日期。2、定時提醒:用戶可以針對某一天來添加,刪除和編輯這一天的日程提醒信息,當(dāng)系統(tǒng)時間和提醒時間相吻合時,給出具有提示信息的對話框。3、查詢信息:用戶可以查詢到某個月的所有的提示信息。12.電子英漢詞典要求:能夠編輯詞典庫中的信息能夠?qū)崿F(xiàn)英譯漢,漢譯英。(要考慮一詞多義)13.加密與解密要求:采用圖形用戶界面1、給定任意一個文本文件2、對加密后的文件還原,進行加密,生成另一個文件。。14.小游戲要求:程序隨機產(chǎn)生20—50根火柴,由人與計算機輪流拿,每次拿的數(shù)量不超過3根,拿到最后一根為勝。(使用圖形界面)15.敏感詞匯分析要求:任意選擇一個文本文件,分析該文件,如果存在敏感詞匯(這些詞匯保存在sentive.txt文件中,每個詞占一行),報告每個詞出現(xiàn)的次數(shù)。16、猜數(shù)字游戲要求:計算機產(chǎn)生隨機數(shù),猜中即勝,猜不中,提示是大了還是小了,繼續(xù)猜,直至猜到,給出所用時間和評語。要求提交Application和Applet兩個版本的程序。
17、小學(xué)算術(shù)運算測試程序要求:制作一個可供小學(xué)數(shù)學(xué)運算程序:10以內(nèi)加減法,能根據(jù)輸入題數(shù)出題,判斷做題是否正確,最后計算分數(shù)。要求提交Application和Applet兩個版本的程序。18、模擬科學(xué)計算器【已提供此程序樣本,故不能選擇此題】要求:界面模擬Windows中的計算器程序。實現(xiàn)基本數(shù)學(xué)運算、函數(shù)等功能:加、減、乘、除、階乘、正弦、余弦和指數(shù)運算。實現(xiàn)要點:添加相關(guān)組件并進行按鈕事件處理。要求提交Application和Applet兩個版本的程序。19、模擬畫圖要求:模擬Windows中的畫圖程序,實現(xiàn)圖形圖像的編輯、修改、保存等功能。20、模擬時鐘要求:通過多線程技術(shù),重繪界面,界面包括表盤和指針。并用數(shù)字表顯示時間。實現(xiàn)要點:多線程技術(shù),圖形的繪制。21、打字訓(xùn)練測試軟件要求:設(shè)計一個中英文打字測試軟件。從文件中調(diào)入中英文錄入材料,最后可以給出錯誤率,速度。22、ip地址、手機歸屬地查詢實現(xiàn)要點:數(shù)據(jù)庫查詢。23、五子棋功能要求:可兩人對下(用鼠標(biāo)操作),判斷勝負。界面要求:美觀簡潔,有簡單操作說明。24、電話號碼查詢系統(tǒng)。要求:有電話錄入,修改,增加,刪除,按姓名查詢,按電話號碼查詢,按部門查詢,按部門顯示,顯示所有電話號碼信息,打印等功能。25、其他題目:如掃雷、紅心大戰(zhàn)等游戲程序的設(shè)計;作業(yè)管理系統(tǒng),具有對本學(xué)期所有作業(yè)管理、運行的管理系統(tǒng);學(xué)生成績管理系統(tǒng);學(xué)生信息管理系統(tǒng);試題管理系統(tǒng);動畫制作,根據(jù)及媒體播放器等等自擬題所學(xué)知識編制一些動畫程序;目。第二部分:中型項目一.一個簡單的學(xué)生成績管理信息系統(tǒng)數(shù)據(jù)庫要求:1.建立的數(shù)據(jù)庫中包含如下信息:學(xué)生學(xué)號2.至少要有5個班級,每個班級要有10名以上學(xué)生3.使用.txt格式文本表示各種表。、姓名、班級,語文、數(shù)學(xué)、英語成績。。功能需求:1.能夠?qū)崿F(xiàn)根據(jù)2.能夠?qū)崿F(xiàn)按照單科成績、總成績、平均成績、學(xué)號排序。3.能夠?qū)崿F(xiàn)學(xué)生信息的4.能夠查詢每個課程的5.能夠查詢每個班級某門課程的優(yōu)秀率(90分及以上)、不及格率,并進行排序。以下關(guān)鍵字查詢:學(xué)生姓名、學(xué)號、班級、課程名稱。插入、刪除和修改。最高分、最低分及相應(yīng)學(xué)生姓名、班級和學(xué)號。界面要求:1.盡量使用圖形界面實現(xiàn),要2.如果無法實現(xiàn)圖形界面,則在命令行方式下其他要求:符合日常軟件使用規(guī)范來設(shè)計菜單和界面。也需要提供菜單,方便用戶操作。1.標(biāo)識符命名遵循Windows命名規(guī)范。2.能夠注意各種異常處理,注重提高程序運行效率。提交內(nèi)容:1.用于表示數(shù)據(jù)庫的2.全部源代碼。3.軟件設(shè)計和使用說明書(UML類圖;實現(xiàn)的功能、主要技術(shù);使用幫助文檔)。.txt文件格式說明。二、一個簡單的算法演示程序功能要求:1.選擇一個算法(提供選擇見下),利用各種方法(圖形、動畫等)演示算法的演示過程。2.可以進行手動演示,也可以自動步進式演示。3.允許用戶設(shè)置算法的各個輸入?yún)?shù),以及自動步進式演示中的時間間隔。4.不同的算法輸入要求見下。界面要求:1.盡量使用圖形界面實現(xiàn),要符合日常軟件使用規(guī)范來設(shè)計菜單和界面。2.如果無法實現(xiàn)圖形界面,則在命令行方式下也需要提供菜單,方便用戶操作。
其他要求:1.標(biāo)識符命名遵循Windows命名規(guī)范。2.能夠注意各種異常處理,注重提高程序運行效率。提交內(nèi)容:1.全部源代碼。2.軟件設(shè)計和使用說明書(UML類圖;實現(xiàn)的功能、主要技術(shù);使用幫助文檔)參考算法:1.最小生成樹算法:Prim算法、Kruskal算法。允許以下方式輸入一個圖形:繪制圖形、輸入鄰接矩陣、輸入邊及其關(guān)聯(lián)的頂點。要求在圖形方式下進行演示算法執(zhí)行步驟。2.單源最短路算法:Dijkstra算法。允許以下方式輸入一個圖形:繪制圖形、輸入鄰接矩陣、輸入邊及其關(guān)聯(lián)的頂點。要求在圖形方式下進行演示算法執(zhí)行步驟。3.最優(yōu)編碼算法:Huffman編碼或者打開一個txt文算法。允許用戶輸入一段英文文字,檔(英文內(nèi)容),據(jù)此文檔內(nèi)容進行編碼。要求動態(tài)列出每個字符的出現(xiàn)概率統(tǒng)計結(jié)果以及對應(yīng)編碼。4.其他可供演示的具有一定難度的算法,如關(guān)鍵路徑問題、有向圖的極大連通分支等。三、一個簡單的網(wǎng)絡(luò)聊天程序功能要求:1.實現(xiàn)類似與飛鴿的功能,自動偵測局域網(wǎng)內(nèi)部啟動該軟件的用戶,并顯示在用戶列表中。2.可以進行兩個人之間的私聊。3.可以群聊。4.可以發(fā)送文件。界面要求:1.盡量使用圖形界面實現(xiàn),要符合日常軟件使用規(guī)范來設(shè)計菜單和界面。其他要求:1.標(biāo)識符命名遵循Windows命名規(guī)范。2.能夠注意各種異常處理,注重提高程序運行效率。提交內(nèi)容:
1.全部源代碼。2.軟件設(shè)計和使用說明書(UML類圖;實現(xiàn)的功能、主要技術(shù);使用幫助文檔)四、一個簡單的萬年歷功能要求:1.能夠顯示實現(xiàn)1800-2100年的日期,包括公歷、農(nóng)歷、星期、二十四節(jié)氣。2.能夠按照月份格式顯示,或按照星期格式顯示。3.能夠顯示系統(tǒng)時間。4.能夠設(shè)置鬧鐘。5.能夠查詢?nèi)舾蓢H大城市(分布在不同時區(qū))的時間。界面要求:1.盡量使用圖形界面實現(xiàn),要符合日常軟件使用規(guī)范來設(shè)計菜單和界面。其他要求:1.標(biāo)識符命名遵循Windows命名規(guī)范。2.能夠注意各種異常處理,注重提高程序運行效率。提交內(nèi)容:1.全部源代碼。2.軟件設(shè)計和使用說明書(UML類圖;實現(xiàn)的功能五、一個計算數(shù)學(xué)表達式的程序功能要求:、主要技術(shù);使用幫助文檔)1.由用戶輸入一個簡單的四則運算表達式,求出其計算結(jié)果后顯示。2.允許在表達式中出現(xiàn)常用的數(shù)學(xué)函數(shù),如絕對值、取整、三角函數(shù)、倒數(shù)、平方根、平方、立方等。界面要求:1.盡量使用圖形界面實現(xiàn),要符合日常軟件使用規(guī)范來設(shè)計菜單和界面。2.如果無法實現(xiàn)圖形界面,則在命令行方式下也需要提供菜單,方便用戶操作。其他要求:1.標(biāo)識符命名遵循Windows命名規(guī)范。2.能夠注意各種異常處理,注重提高程序運行效率。
提交內(nèi)容:1.全部源代碼。2.軟件設(shè)計和使用說明書(UML類圖;實現(xiàn)的功能、主要技術(shù);使用幫助文檔)
課程設(shè)計樣本1一.設(shè)計GUI界面的計算器程序1.問題描述:設(shè)計GUI界面的計算器程序,用戶可以通過鼠標(biāo)依次輸入?yún)⒓佑嬎愕臄?shù)值,、減、乘、除混合運算2.設(shè)計思路:功能不是太復(fù)雜,主要工作是界面的設(shè)計。為減少通進行加。本程序信接口設(shè)計,所有功能均在一個類中實現(xiàn)。程序中的函數(shù)列表如下:函數(shù)名稱函數(shù)功能簡介publicCalculator()<構(gòu)造函數(shù)>加載窗體及窗體關(guān)閉事件等publicvoidactionPerformed(ActionEventprivateDoublenumberFormat(String去掉多于的0,返回dosrc)uble數(shù)值privateStringnumberFormat(double去掉多于的0,返回字符串src)響應(yīng)事件,執(zhí)行相應(yīng)的邏輯處理e)privatevoidsetNumber(String為顯示域exid)tField設(shè)置數(shù)值privatevoidcompute(double計算并在d1,TextdoubleF中i顯e示ldd2,intot)3.代碼實現(xiàn):importjava.awt.*;importjavax.swing.*;importjavax.swing.border.*;importjava.awt.event.*;importjava.text.*;publicclassCalculatorextendsJFrameimplementsstaticfinalString[]button_name={"7",""sqrt","4","5","6","*","%"3","-","1/x","0","+/-",".doublenum=0;privatebooleanoperate_flag=false;privateintoperate_type=0;privateJPaneldisplay_main=newJPanel();privateJPaneldisplay=newJPanel();privateJPanelbuttons=newJPanel();privateJButtonbackspace=newJButton("BackspprivateJButtonc=newJButton("C");privateJButtonce=newJButton("CE");privateJButton[]bg=newJButton[20];privateJTextFieldtext=newJTextField("0");privateJPanelmain=newJPanel();publicCalculator(){super("簡易計算器");setIconImage((Toolkit.getDefaultToolkit()).ge//獲得圖標(biāo)文件display.setLayout(newGridLayout(1,3,15,15display.add(backspace);display.add(c);display.add(ce);display.setBorder(newLineBorder(display.getB//添加邊框c.addActionListener(this);ce.addActionListener(this);backspace.addActionListener(this);text.setFont(new宋體",FFont("ont.BOLD+Font.ITALIC,20)//設(shè)置顯示字體text.setBackground(Color.getHSBColor(44,3,8text.setBorder(newLineBorder(Color.ORANGE,1text.setHorizontalAlignment(SwingConstants.RI設(shè)置鼠標(biāo)靠右text.setEditable(false);屏蔽鍵盤輸入,防止非法字//符display_main.setLayout(newGridLayout(2,1,1display_main.add(text,BorderLayout.NORTH);display_main.add(display,BorderLayout.SOUTH)buttons.setLayout(newGridLayout(4,5,10,20for(inti=0;i<20;i++){bg[i]=newJButton(button_name[i]);bg[i].addActionListener(this);為各個按鈕添加事件監(jiān)聽//buttons.add(bg[i]);}buttons.setBorder(newLineBorder(display.getB邊框this.setLayout(newBorderLayout());this.add(display_main,BorderLayout.NORTH);this.add(buttons,BorderLayout.SOUTH);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE//添加關(guān)閉窗口事件監(jiān)聽器pack();自動設(shè)置//窗體大小setResizable(false);設(shè)置面板大小不可變//setVisible(true);Toolkittk=this.getToolkit();Dimensionde=tk.getScreenSize();setBounds((de.width-this.getWidth())/2,(.getHeight())/2,this.getWidth(),this.//使之居于屏幕正中央}publicvoidactionPerformed(ActionEvent事件響應(yīng)e){//Objectsource=e.getSource();if(operate_flag==true){text.setText("0");operate_flag=false;}if(!("".equals(text.getText()))&&text.getTtext.setText(text.getText().substring(1,te}//存在'+',就去掉try{Double.parseDouble(text.getText());}catch(Exceptionee){text.setText("0");}//檢測輸入數(shù)據(jù)格式是否合法,不合法就重置為0if(source==c||source==ce){
text.setText("0");}elseif(source==backspace){if("0".equals(text.getText())||"+".equal||"-".equals(text.getText())){}else{text.setText(text.getText().substring(0,text.getText().length()-1));}}elseif(source==bg[0]){setNumber("7");}elseif(source==bg[1]){setNumber("8");}elseif(source==bg[2]){setNumber("9");}elseif(source==運算bg[3]){//"/"operate_flag=true;operate_type=1;num=Double.parseDouble(text.getText());}elseif(source求平==方根bg[4]){//doublesqrt=Double.parseDouble(text.getTeif(sqrt<0){text.setText("函數(shù)輸入無效!");}elseif(sqrt==0){}else{text.setText(""+Math.sqrt(sqrt));}}elseif(source==bg[5]){setNumber("4");}elseif(source==bg[6]){setNumber("5");}elseif(source==bg[7]){setNumber("6");}elseif(source==bg[8]){operate_flag=true;operate_type=2;num=Double.parseDouble(text.getText());}elseif(source==bg[9]){text.setText("Sorry,我還沒理解該功能的意思!");}elseif(source==bg[10]){setNumber("1");}elseif(source==bg[11]){setNumber("2");}elseif(source==bg[12]){setNumber("3");}elseif(source==bg[13]){operate_flag=true;operate_type=3;num=Double.parseDouble(text.getText());}elseif(source==bg[14]){doublereciprocal=Double.parseDouble(textif(reciprocal==0.0){
text.setText("數(shù)據(jù)非法!");}else{text.setText(""+1/reciprocal);}}elseif(source==bg[15]){if("0".equals(text.getText())){}else{text.setText(text.getText()+"0");}}elseif(source取相==反數(shù)bg[16]){//doublelinshi=numberFormat(text.getText()if(linshi>0){text.setText("-"+text.getText());}elseif(linshi<0){text.setText(text.getText().substring(1,text.getText().length()));}else{}}elseif(source‘.==’的輸bg[17])入{//intcount_comma=0;for(inti=0;i<text.getText().length()if('.'==(text.getText().charAt(i))){count_comma++;}}if(count_comma>0){count_comma--;return;檢測到//兩次輸入".",不響應(yīng)}else{if("".equals(text.getText())){text.setText("0.");}else{text.setText(text.getText()+".");}}}elseif(source==bg[18]){operate_flag=true;operate_type=4;num=Double.parseDouble(text.getText());}elseif(source等號==被按下bg[19])就計算{//compute(num,Double.parseDouble(text.getTex}}privateDoublenumberFormat(String去掉多于的0,返回doub數(shù)l值src)e{//inti=0;doubledest=0.0;for(i=0;i<src.length();i++){if(!(src.charAt(i)=='0')){break;}
}src=src.substring(i);try{dest=Double.parseDouble(src);}catch(Exceptione){System.out.println(e);}returndest;}privateStringnumberFormat(double進行了方法重src)載!{//numDecimalFormatdf=newDecimalFormat("###################.##################")Stringsrc2=df.format(src);returnsrc2;}//去除數(shù)字前無效的0,返回字符串privatevoidsetNumber(Stringid){text.setText(text.getText()+id);text.setText(numberFormat(numberFormat(text.g}privatevoidcompute(double運算d1,doubled2,intswitch(ot){case1://"/"if(d2==0.0){text.setText("除數(shù)不能為零!");return;}else{text.setText(""(d1/))d;+2}break;case2://"*"text.setText(""(d1*)d;+2)num=d1*d2;break;case3://"-"text.setText(""+(d1-d2));num=d1-d2;break;case4://"+"text.setText(""+(d1+d2));num=d1+d2;break;}}publicstaticvoidmain(String[]args)throwsEnewCalculator();}}
4.程序運行:運用jar命令打包后如下:界面如下:5.小結(jié):本程序的實現(xiàn)不難,主要是其中的一些細節(jié)問題,如數(shù)字的格式,按鈕按下的次序不同導(dǎo)致的問題(如不能二次以上按下“.”應(yīng)不響應(yīng);不能輸入“00.1”這種數(shù)據(jù)等),需要經(jīng)多次調(diào)試才行。程序的整體結(jié)果其實并不好,界面的實現(xiàn)應(yīng)該和邏輯處理分離開來。但是鑒于程序的規(guī)模,本程序未曾進行包間的調(diào)用,而是采用了單類實現(xiàn)。課程設(shè)計樣本21.問題描述:文件分割、合并器。實現(xiàn)對任意文件的分割,并且能夠?qū)Ψ指詈蟮奈募M行合并還原。實現(xiàn)系統(tǒng)托盤,最小化時到系統(tǒng)托盤。2.設(shè)計思路:要實現(xiàn)對任意文件的分割,這就需要找到所有文件的共同之處。其實,也很簡單,我們把文件都看作是一連串的字節(jié)流組成的即可。利用java.io包中的FileOutputStream和FileInputStream并文件的辨認(本程序通過后綴“-split”來確定),將分割后的文件ArrayList<File>中,利用迭代器用文件分割同樣的道理進行合并還原。對文件進行字節(jié)流的讀寫。文件和并,通過對欲合加入一個3.代碼實現(xiàn):importjava.awt.*;importjava.awt.event.*;importjava.io.*;import.*;importjava.sql.Date;importjava.util.*;importjavax.swing.*;importjavax.swing.border.LineBorder;publicclassFileCutextendsJFrameimplementsClone/**operateKind存儲操作種類(分割或者合并文件)cutKind存儲分割文件的方式*/publicstaticintoperateKind=1,cutKind=1;//加載框架頂部的圖片由類MyCanvas實現(xiàn)//下部框架privateJPanelfloor=newJPanel(newBorderLayout//左部框架privateJPanelleft=newJPanel(newGridLayout(2,privateJPanelleft_up=newJPanel(newGridLayouprivateJLabelleft_up_label功能選=擇-new----JLabel("--");privateCheckboxGroupcheckgroup_left=newCheckbprivateCheckboxsplit分割文件=",newtruCheckbox("e,checkgroup_left);---privateCheckboxunion合并文件=",newfalCheckbox("se,checkgroup_left)privateJTextArealeft_down_label=newJTextArea("歡迎使用\n文件分割年元月~");//右部框架privateJPanelright=newJPanel(newBorderLayoutprivateJPanelright_up=new右JPanel(new上※合并器1.0\n\n作者:陳維\n地址:太原理工大學(xué)\n~成于2007GridLayoupublicstaticJLabelcutMethod分割方式:")=;newJLabel("publicstaticCheckboxGroupcheckgroup_right=newpublicstaticCheckboxbigOrSmall按大小",tr=uenew,Checkbox(checkgroup_right);publicstaticCheckboxfileNumber按數(shù)目",fa=lsnewe,Checkbox("checkgroup_right);privateJPanelright_mid=newJPanel(new右中BorderLapublicstaticJLabelJLabel1參數(shù):"=),newJLabel("JLabel2=new源文JLabel("件:"),JLabel3=目new標(biāo)目錄:JLabel("");publicstaticJTextFieldJTextField1分割方式參數(shù)=newJTextFiJTextField2=newJTextField(13),//源文件路徑及文件名JTextField3=newJTextField(13);//分割后文件存放目錄publicstaticJComboBoxunit=newJComboBox();privateJButtoncalcu計算"=),new/調(diào)/用計算JButton("器進行計算browse_source=瀏new覽"),JButton("http://瀏覽源文件browse_target=瀏new覽"),JButton("http://瀏覽分割后文件存放目錄clear=new重JButton("置");//所有參數(shù)重置privateJPanelright_down右下=newJPanel();//privateJButtonenter確定"=),newcanJButton("cel=new取消"JButton(");staticJTextAreamessage=信new息提示JTextArea(5,20);/privateJScrollPanejsp=newJScrollPane();publicFileCut()構(gòu)造函數(shù){//super("文件分割※合并器1.0--chenwei_computer@163.com");this.setIconImage(Toolkit.getDefaultToolkit().gBoxbox_main=Box.createVerticalBox();//頂部圖片box_main.add(newMyCanvas());//左部組件left_up.setBorder(newLineBorder(new邊框Color(8,57left_up.add(left_up_label);split.addItemListener(newSplitItemListener());left_up.add(split);union.addItemListener(newUnionItemListener());left_up.add(union);left_up.add(left_down_label);left.add(left_up);left_down_label.setBorder(newLineBorder(new邊框Coleft_down_label.setEditable(false);left_down_label.setBackground(left_up.getBackgrleft_down_label.setFont(new宋體",Font.HFont("ANGING_BASELINE+Font.ITALIC,13));left.setBorder(newLineBorder(newColor(8,57,10left.add(left_down_label);floor.add(left,"West");//右部上組件right.setBorder(BorderFactory.createEmptyBorder邊框right_up.add(cutMethod);bigOrSmall.addItemListener(newBigOrSmallItemLi
right_up.add(bigOrSmall);fileNumber.addItemListener(newFileNumberItemLiright_up.add(fileNumber);right.add(right_up,"North");//右部中組件Boxbox=Box.createHorizontalBox(),box1=Box.Box.createVerticalBox(),box3=Box.createVertbox1.add(JLabel1);box1.add(Box.createVerticalStrut(9));//添加垂直間距box1.add(JLabel2);box1.add(Box.createVerticalStrut(9));box1.add(JLabel3);box2.add(JTextField1);box2.add(JTextField2);box2.add(JTextField3);unit.insertItemAt("MB",0);unit.insertItemAt("KB",1);unit.insertItemAt("B",2);unit.setSelectedIndex(0);box3.add(unit);browse_source.addActionListener(newSourceActiobox3.add(browse_source);browse_target.addActionListener(newTargetActiobox3.add(browse_target);box.add(box1);box.add(box2);box.add(box3);right_mid.add(box,"Center");message.setEditable(false);//設(shè)置為不可編輯jsp.setBorder(BorderFactory.createEmptyBorder(1jsp.getViewport().add(message);message.setBackground(Color.LIGHT_GRAY);right_mid.add(jsp,"South");right.add(right_mid,"Center");//右部下組件calcu.addActionListener(newCalcuAction());right_down.add(calcu);enter.addActionListener(newEnterAction());right_down.add(enter);cancel.addActionListener(newCancelAction());right_down.add(cancel);clear.addActionListener(newClearAction());right_down.add(clear);
right.add(right_down,"South");floor.add(right,"Center");//整體下部組件box_main.add(floor);this.add(box_main);//設(shè)置可見性和窗體大小,窗口居中this.setVisible(true);//this.setDefaultCloseOperation(JFrame.EXIT_ONthis.pack();Toolkittk=this.getToolkit();Dimensionde=tk.getScreenSize();this.setBounds((de.width-this.getWidth())/2.getHeight())/2,this.getWidth(),使之居于this.ge屏幕正中央this.setResizable(false);this.addWindowListener(MyWindowListener.getInst}publicstaticvoidmain(String[]主函數(shù)args){//newFileCut();}}classBrowseSourceFileimplementsActionListener{publicvoidactionPerformed(ActionEvente){try{JFileChooserdf=new請選擇要JFileChooser("分割的文件:");if(FileCut.operateKind==1)df.setFileSelectionMode(JFileChooser.FILES_if(FileCut.operateKind==2)df.setFileSelectionMode(JFileChooser.FILES_df.showSaveDialog(newJPanel());df.setVisible(true);FileCut.JTextField2.setText(df.getSelectedFilif(df.getSelectedFile().isDirectory())當(dāng)為文件夾時{//File[]aimFiles=df.getSelectedFile().listString[]strFiles=newString[df.getSelectedFile().listFiles().length];for(inti=0;i<df.getSelectedFile().listrFiles[i]=aimFiles[i].getName();FileCut.message.setText("文件夾名稱:"+df.getSelectedFile().getName()子文件:\n");+"\nfor(inti=0;i<df.getSelectedFile().liFileCut.message.append(strFiles[i]+"\n"}if(df.getSelectedFile().isFile())當(dāng)為文件時{//
FileCut.message.setText("該目標(biāo)是一個文件\n文件夾名稱:\n"+df.getSelectedFile().getName()文件大小:"+"\n+df.getSelectedFile().length()+"Byte+newDate(df.getSelectedFile().lastMod}}catch(Exceptionex){FileCut.message.setText("\n找不到指定文件或文件夾!");}}}classSplitItemListenerimplements分割文件功能ItemListener{//publicvoiditemStateChanged(ItemEvente){FileCut.operateKind=1;booleanbool=true;FileCut.cutMethod.setEnabled(bool);FileCut.JLabel1.setEnabled(bool);FileCut.JLabel2.setText("源文件:");FileCut.JLabel3.setText("目標(biāo)目錄:");FileCut.bigOrSmall.setEnabled(bool);FileCut.fileNumber.setEnabled(bool);FileCut.JTextField1.setEnabled(bool);FileCut.unit.setEnabled(bool);}}classUnionItemListenerimplements合并文件功能ItemListener{//publicvoiditemStateChanged(ItemEvente){FileCut.operateKind=2;booleanbool=false;FileCut.cutMethod.setEnabled(bool);FileCut.JLabel1.setEnabled(bool);FileCut.JLabel2.setText("分塊文件目錄:");FileCut.JLabel3.setText("合成文件目錄:");FileCut.bigOrSmall.setEnabled(bool);FileCut.fileNumber.setEnabled(bool);FileCut.JTextField1.setEnabled(bool);FileCut.unit.setEnabled(bool);}}classBigOrSmallItemListener按implements大小分割I(lǐng)temListenerpublicvoiditemStateChanged(ItemEvente){FileCut.cutKind=1;
FileCut.unit.setEnabled(true);}}classFileNumberItemListener按implements數(shù)目分割I(lǐng)temListenerpublicvoiditemStateChanged(ItemEvente){FileCut.cutKind=2;FileCut.unit.setEnabled(false);}}classSourceActionListenerimplements源文件ActionListenerpublicvoidactionPerformed(ActionEvente){try{JFileChooserjfc=newJFileChooser();if(FileCut.operateKind文件分割模式,==只能選1)擇文件{//jfc.setDialogTitle("請選擇要分割的文件");jfc.setFileSelectionMode(JFileChooser.FILES}if(FileCut.operateKind文件合并模式,==可選擇2)文件或{//文件夾jfc.setDialogTitle("請選擇要合并的文件或其所在文件夾");jfc.setFileSelectionMode(JFileChooser.FILES}jfc.showOpenDialog(newJPanel());jfc.setVisible(true);Stringsource=jfc.getSelectedFile().toStrinFileCut.JTextField2.setText(source);if(jfc.getSelectedFile().isDirectory())當(dāng)為文件夾時{//File[]aimFiles=jfc.getSelectedFile().lisString[]strFiles=newString[aimFiles.lenfor(inti=0;i<aimFiles.length;i++)strFiles[i]=aimFiles[i].getName();FileCut.message.setText("文件夾名稱為:"+jfc.getSelectedFile().getName()子文件:\n");+"\nfor(inti=0;i<aimFiles.length;i++)FileCut.message.append(strFiles[i]+"\n"}if(jfc.getSelectedFile().isFile())當(dāng)為文件時{//FileCut.message.setText("該目標(biāo)是一個文件:\n文件名:"+jfc.getSelectedFile().getName()+"\n文件大?。?+jfc.getSelectedFile().length()+"Bytes\n最后修改時間:"
+newDate(jfc.getSelectedFile().la+"\n");}}catch(NullPointerExceptionnpe){return;//直接關(guān)閉窗體退出的情況}catch(Exceptionexception){找不到指定文件或文件夾!");FileCut.message.setText("}}}classTargetActionListenerimplementsActionListenerpublicvoidactionPerformed(ActionEvente){JFileChooserjfc=newJFileChooser();jfc.setVisible(true);if(FileCut.operateKind==1){jfc.setDialogTitle("請選擇分割后文件存放目錄");}if(FileCut.operateKind==2){jfc.setDialogTitle("請選擇合并后文件存放目錄");}jfc.setFileSelectionMode(JFileChooser.DIRECTORIjfc.showOpenDialog(newJPanel());FileCut.JTextField3.setText(jfc.getSelectedFile}}classCalcuActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){DesktopTray.calculator("calc");}}classEnterActionimplementsActionListener{publicvoidactionPerformed(ActionEvent調(diào)用核心功能代碼e){//if(FileCut.operateKind==1)ProcessFile.cutFile();elseProcessFile.unionFile();}}classCancelActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){FileCut.JTextField1.setText("");FileCut.JTextField2.setText("");FileCut.JTextField3.setText("");FileCut.message.setText("");
}}classClearActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){FileCut.JTextField1.setText("");FileCut.JTextField2.setText("");FileCut.JTextField3.setText("");}}classProcessFile{publicstaticvoid文件cutFile()分割{//intfileSize=0,fileNumber=0;FileCut.message.setText("文件分割開始...\n");Filesource=newFile(FileCut.JTextField2.getTif(FileCut.cutKind按文件長==度分割1){/////if(FileCut.unit.getSelectedItem()=="MB")fileSize=(int)(Float.parseFloat(FileCut..getText())*1024*1024);elseif(FileCut.unit.getSelectedItem()=="KfileSize=(int)(Float.parseFloat(FileCut..getText())*1024);elseif(FileCut.unit.getSelectedItem()=="BfileSize=(int)(Float.parseFloat(FileCut..getText()));System.out.println("dierci:"+fileNumber+"+source.length());fileNumber=(int)(source.length()/fileSizif(source.length()%fileSize!=0){fileNumber++;}}if(FileCut.cutKind==2){fileNumber=Integer.parseInt(FileCut.JTextFifileSize=((int)(source.length()/fileNumb}File[]newFile=newFile[fileNumber];try{intcount=0,i=0;byte[]bueff=newbyte[fileSize];FileOutputStreamout=null;FileInputStreamin=newFileInputStream(sourFilef=newFile(FileCut.JTextField3.getText\\","/"));if(!f.exists())
f.createNewFile();for(i=0;i<newFile.length;i++){FileCut.message.append("正在創(chuàng)建第"+(i+個文1)件..+.\"n");newFile[i]=newFile(FileCut.JTextField3.g"\\","/"),source.getName()+"-"+i}i=0;while((count=in.read(bueff,0,fileSize))FileCut.message.append("正在寫入第"+(i+個文1)件..+.\"n");out=newFileOutputStream(newFile[i]);out.write(bueff,0,count);out.close();i++;}in.close();FileCut.message.append("哈哈,分割成功了!\n");}catch(Exceptione){FileCut.message.append("唉,為什么分割失敗呢?\n");}}publicstaticvoid文件unionFile()合并//輸出流的目標(biāo)文件{//ArrayList<File>al=newArrayList<File>();intcount,fileNumber用于判斷文件合并=是否0;//結(jié)束File[]unionFiles;FileoutFile=newFile(FileCut.JTextField3.getif(outFile.isDirectory())outFile=newFile(outFile,"union");FileInputStream輸入in流=null;//FileOutputStream輸出out流=null;//byte[]buff=new用于byte[1024];//讀寫,相當(dāng)一個緩沖區(qū)FileCut.message.setText("開始合并文件......\n");Filesource=newFile(FileCut.JTextField2.getT//添加的是要合并文件的文件名if(source.isFile()){try{out=newFileOutputStream(outFile,創(chuàng)建輸出硫true);/in=newFileInputStream(source);創(chuàng)建輸入流//while((count=in.read(buff,0,1024))!=out.write(buff,0,count);}in.close();out.close();FileCut.message.append("哈哈,合并成功了!\n");
}catch(Exceptione){唉,為什么合并失敗呢!\n"+e.getMessage());FileCut.message.append("}}//添加的是要合并文件所在目錄if(source.isDirectory()){Fileresult;File[]fileList=source.listFiles();for(inti=0;i<fileList.length;i++){if(fileList[i].getName().endsWith("-split"al.add(fileList[i]);fileNumber++;}}}try{inttemp=0;out=newFileOutputStream(newFile(al.get(0).replace("-0-split","")));for(Iteratoriter=al.iterator();iter.hasNFileCut.message.append("正在對第"+(++temp)個文件進行+合"并......\n");in=newFileInputStream((File)iter.next()while((count=in.read(buff,0,1024))!=out.write(buff,0,count);}in.close();}out.close();FileCut.message.append("哈哈,合并成功!\n");}catch(FileNotFoundExceptionfnfe){FileCut.message.append("}catch(IOExceptionioe){ioe.printStackTrace();唉,為什么合并失敗呢!\n"+fnfe.getMessage(FileCut.message.append("唉,為什么文件失敗呢!\n"+ioe.getMessage()}}}classMyCanvasextends加載頂部圖片Canvas{////由tool負責(zé)獲取圖像.staticImagemyimage=Toolkit.getDefaultToolkit(MyCanvas(){setSize(438,45);
}publicvoidpaint(Graphicsg){g.drawImage(myimage,0,0,myimage.getWidth(thi.getHeight(this),this);}}classMyWindowListenerimplementsWindowListener{(單態(tài))模式獲取唯一對象//利用singletonprivatestaticMyWindowListenermwl=newMyWindowprivateMyWindowListener(){}publicstaticMyWindowListenergetInstance(){returnmwl;}publicvoidwindowActivated(WindowEvente){}publicvoidwindowClosed(WindowEvente){}publicvoidwindowClosing(WindowEvente){System.exit(0);//關(guān)閉窗體,退出程序}publicvoidwindowDeactivated(WindowEvente){}publicvoidwindowDeiconified(WindowEvente){}publicvoidwindowIconified(WindowEvent最小化到托盤圖標(biāo)e){//e.getWindow().dispose();DesktopTray.creatDesktopTray();}publicvoidwindowOpened(WindowEvente){}}classDesktopTray實現(xiàn)托盤圖標(biāo){//privatestaticDesktopdesktop;privatestaticSystemTrayst;privatestaticPopupMenupm;privatestaticTrayIconti;publicstaticvoidcreatDesktopTray(){if(Desktop.isDesktopSupported())判斷當(dāng)前平臺是否支持Desk類t{//opdesktop=Desktop.getDesktop();}if(SystemTray.isSupported())判斷當(dāng)前平臺是否支持系統(tǒng)托{//盤
st=SystemTray.getSystemTray();//定義托盤圖標(biāo)的圖片Imageimage=Toolkit.getDefaultToolkit().getcreatePopupMenu();ti=newTrayIcon(image,"chenwei",pm);try{st.add(ti);}catch(AWTExceptionex){ex.printStackTrace();}}}publi
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 林地全面清理施工方案
- 打磨施工方案
- 新型頂板套管施工方案
- 滑移施工方案
- TSHAEPI 006-2023 源分離水沖式廁所技術(shù)導(dǎo)則
- 2025年度汽車美容店技師專業(yè)用工合同示范文本
- 二零二五年度戶外廣告牌租賃與廣告效果評估協(xié)議
- 2025年度林業(yè)砍樹與生態(tài)保護基金管理協(xié)議
- 二零二五年度5G通信設(shè)備合作誠意金合同
- 2025年度碼頭港口集裝箱拼箱與拆箱服務(wù)合同
- 輸血與創(chuàng)傷性凝血病
- 人工挖孔樁爆破技術(shù)方案
- 2023年牡丹江大學(xué)單招面試題庫及答案解析
- 手機號碼歸屬地
- 運行程序etops二放手冊b787qrh快速檢查單
- MT 220-1990煤礦用防爆柴油機械排氣中一氧化碳、氮氧化物檢驗規(guī)范
- GB/T 5824-2021建筑門窗洞口尺寸系列
- GB/T 30795-2014食品用洗滌劑試驗方法甲醇的測定
- GB/T 26148-2010高壓水射流清洗作業(yè)安全規(guī)范
- GB/T 1345-2005水泥細度檢驗方法篩析法
評論
0/150
提交評論