版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p> 題目一 計(jì)算器1</p><p> 1.1 需求分析1</p><p> 1.2 總體設(shè)計(jì)1</p><p> 1.2.1 功能設(shè)計(jì)1</p><p> 1.2.2 用戶(hù)界面設(shè)計(jì)2</p><
2、;p> 1.2.3 關(guān)鍵算法設(shè)計(jì)2</p><p> 1.3 代碼實(shí)現(xiàn)3</p><p> 1.3.1 類(lèi)之間的關(guān)系4</p><p> 1.3.2 運(yùn)行效果6</p><p> 1.3.3 打包發(fā)布10</p><p> 1.4 程序測(cè)試10</p><p>&l
3、t;b> 1.5 總結(jié)10</b></p><p> 題目二 學(xué)生管理系統(tǒng)11</p><p> 2.1 需求分析11</p><p> 2.2 總體設(shè)計(jì)11</p><p> 2.2.1 功能設(shè)計(jì)11</p><p> 2.2.2 用戶(hù)界面設(shè)計(jì)12</p>&
4、lt;p> 2.2.3 數(shù)據(jù)庫(kù)表設(shè)計(jì)12</p><p> 2.2.4 關(guān)鍵算法設(shè)計(jì)14</p><p> 2.3 代碼實(shí)現(xiàn)15</p><p> 2.3.1 類(lèi)之間的關(guān)系16</p><p> 2.3.2 運(yùn)行效果17</p><p> 2.3.3 打包發(fā)布22</p>&
5、lt;p> 2.4 程序測(cè)試23</p><p><b> 2.5 總結(jié)23</b></p><p> 題目三 五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)24</p><p> 3.1 需求分析24</p><p> 3.2 總體設(shè)計(jì)24</p><p> 3.2.1 功能設(shè)計(jì)24<
6、;/p><p> 3.2.2 用戶(hù)界面設(shè)計(jì)25</p><p> 3.2.2 關(guān)鍵算法設(shè)計(jì)25</p><p> 3.3 代碼實(shí)現(xiàn)26</p><p> 1.3.1 類(lèi)之間的關(guān)系26</p><p> 1.3.2 運(yùn)行效果29</p><p> 1.3.3 打包發(fā)布33<
7、;/p><p> 3.4 程序測(cè)試34</p><p><b> 3.5 總結(jié)34</b></p><p> 附錄3 部分源碼34</p><p><b> 題目一 計(jì)算器</b></p><p><b> 1.1 需求分析</b></
8、p><p> 普通計(jì)算器包括加、減、乘、除等基本運(yùn)算,廣泛運(yùn)用于菜市場(chǎng),商店等處,而像學(xué)生,老師等科研工作者則需要更高級(jí)功能的科學(xué)計(jì)算器。它包括求導(dǎo)、平方、求余、以及sin、cos、tan等函數(shù)功能以及可以實(shí)現(xiàn)不同進(jìn)制轉(zhuǎn)換的問(wèn)題。該項(xiàng)目設(shè)計(jì)的是一個(gè)可以實(shí)現(xiàn)普通計(jì)算器和科學(xué)計(jì)算器相互轉(zhuǎn)換的新型計(jì)算器。</p><p><b> 1.2 總體設(shè)計(jì)</b></p>
9、;<p> 1.2.1 功能設(shè)計(jì)</p><p> 計(jì)算器有兩個(gè)部分,標(biāo)準(zhǔn)型和科學(xué)型,二者可以相互切換。標(biāo)準(zhǔn)型主要包括簡(jiǎn)單的四則運(yùn)算:加、減、乘、除、求倒數(shù),MC、MS、MR、 M+;科學(xué)型怎主要有:正余弦函數(shù)、對(duì)數(shù)、求冪、階乘、進(jìn)制轉(zhuǎn)換、邏輯的與或非等。功能模塊圖見(jiàn)下:</p><p> 圖 1.1 功能模塊圖</p><p> 1.2.2
10、 用戶(hù)界面設(shè)計(jì)</p><p> 計(jì)算器有兩個(gè)界面。一個(gè)標(biāo)準(zhǔn)界面,一個(gè)科學(xué)界面。標(biāo)準(zhǔn)界面包含了四則運(yùn)算、平方、求導(dǎo)等最基本的計(jì)算器功能;科學(xué)型界面包含了該計(jì)算器的所有功能。兩個(gè)界面之間可以相互切換。</p><p> 圖 1.2 界面設(shè)計(jì)圖</p><p> 菜單欄有菜單:編輯、查看、幫助。數(shù)字按鈕就是1、2、3等</p><p>
11、; 運(yùn)算符有加減乘除,百分號(hào),求倒數(shù)</p><p> 主屏幕寬:260 px ,高:260 px 背景色的RGB為:(240,240,240)</p><p> 按鈕上的字體一律采用宋體,小5。</p><p> 1.2.3 關(guān)鍵算法設(shè)計(jì)</p><p><b> 功能實(shí)現(xiàn)思路:</b></p>
12、<p> 1.按下按鈕后,對(duì)輸入的符號(hào)進(jìn)行分類(lèi):數(shù)字,運(yùn)算符,括號(hào),數(shù)學(xué)函數(shù),編輯......</p><p> 2.響應(yīng)對(duì)應(yīng)事件,不同按鈕返回級(jí)別不一樣,按下數(shù)字按鈕,立即在顯示屏顯示,按下操作符號(hào)按鈕則對(duì)之前按下的數(shù)據(jù)和后輸入數(shù)據(jù)操作,將結(jié)果存入棧中。按下函數(shù)按鈕,則只對(duì)之前數(shù)據(jù)操作,結(jié)果入棧</p><p> 3.按清屏等將堆棧中數(shù)據(jù)銷(xiāo)毀,按等于按鈕將結(jié)果顯示給用戶(hù)
13、</p><p> 主函數(shù)流程圖見(jiàn)下圖:</p><p><b> 圖 1.3 流程圖</b></p><p><b> 1.3 代碼實(shí)現(xiàn)</b></p><p> 1.3.1 類(lèi)及其相互關(guān)系 </p><p> 1. Eclipse中視圖 <
14、/p><p><b> 圖 1.4 包視圖</b></p><p> 項(xiàng)目各個(gè)類(lèi)的成員UML圖</p><p> 1. OperatorLevel類(lèi)處理各種運(yùn)算的優(yōu)先級(jí),通過(guò)數(shù)字的大小返回優(yōu)先級(jí)別</p><p> 圖 1.5 UML圖</p><p> ButtonTips類(lèi)主要負(fù)責(zé)消息
15、幫助</p><p> 圖 1.6 UML圖</p><p> CarryConvert類(lèi)負(fù)責(zé)不同進(jìn)制的轉(zhuǎn)換</p><p> 圖 1.7 UML圖</p><p> Arith 類(lèi)是基本運(yùn)算處理部分,內(nèi)部成員有add、sub、mul、divxsqrty、;xpowy等,分別處理加減乘除、方根、求冪等操作</p>&
16、lt;p> 圖 1.8 UML圖</p><p> ScienceArith類(lèi)是科學(xué)計(jì)算類(lèi),用來(lái)計(jì)算函數(shù)、求平均值等</p><p> 圖 1.9 UML圖</p><p> 6. Calculator類(lèi)是程序的主類(lèi),它是展現(xiàn)窗口的主體,主要有兩個(gè)部分:文本框、按鈕。有一個(gè)main(String[] args)和actionPerformed(Ac
17、tionEvent e)方法。</p><p> 圖1.10 UML圖</p><p> 1.3.2 功能實(shí)現(xiàn)及運(yùn)行效果</p><p> 1、基本加減運(yùn)算功能實(shí)現(xiàn):</p><p> public static BigDecimal add(String s1, String s2) </p><p>&l
18、t;b> { </b></p><p> BigDecimal b1 = new BigDecimal(s1);</p><p> BigDecimal b2 = new BigDecimal(s2); </p><p> return b1.add(b2); </p><p><b> } <
19、;/b></p><p> public static BigDecimal sub(String s1, String s2) </p><p><b> { </b></p><p> BigDecimal b1 = new BigDecimal(s1);</p><p> BigDecimal b2
20、 = new BigDecimal(s2); </p><p> return b1.subtract(b2); </p><p><b> } </b></p><p> public static BigDecimal mul(String s1, String s2)</p><p><b>
21、{ </b></p><p> BigDecimal b1 = new BigDecimal(s1); </p><p> BigDecimal b2 = new BigDecimal(s2); </p><p> return b1.multiply(b2); </p><p><b> } </b&
22、gt;</p><p> public static BigDecimal div(String s1, String s2) </p><p><b> { </b></p><p> return div(s1, s2, DEF_DIV_SCALE); </p><p><b> } </b&
23、gt;</p><p> 2. 求冪、平方、次方、開(kāi)方等運(yùn)算功能實(shí)現(xiàn):</p><p> public static BigDecimal xpowy(String s1,String s2)</p><p><b> { </b></p><p> BigDecimal d1=new BigDecimal(s
24、1);</p><p> BigDecimal d2=new BigDecimal(s2);</p><p> b1=newBigDecimal(Math.pow(d1.doubleValue(),d2.doubleValue())); return b1; </p><p> } public static BigDecimal xpow2(Strin
25、g x) </p><p><b> { </b></p><p> BigDecimal d1=new BigDecimal(x);</p><p> BigDecimal d2=new BigDecimal("2");</p><p> BigDecimal b1=d1.pow(d2.
26、intValue());</p><p> return b1; </p><p><b> } </b></p><p> 3. 優(yōu)先級(jí)判斷功能實(shí)現(xiàn):</p><p> public static int getLevel(String opt){</p><p> if(opt
27、.equals("x^y")){</p><p> return 20;</p><p><b> }</b></p><p> else if(opt.equals("*")||opt.equals("/")||opt.equals("Mod")||opt.
28、equals("Or")||opt.equals("Lsh")||opt.equals("And")||opt.equals("Xor"))</p><p><b> {</b></p><p> return 18;</p><p><b> }&
29、lt;/b></p><p> else if(opt.equals("+")||opt.equals("-"))</p><p><b> {</b></p><p><b> return 9;</b></p><p><b> }
30、</b></p><p> else if(opt.equals("(")||opt.equals("=")){</p><p><b> return 3;</b></p><p><b> }</b></p><p><b>
31、 else{</b></p><p><b> return 0;</b></p><p><b> }</b></p><p><b> }</b></p><p> public static double asinh( double x )</p
32、><p><b> {</b></p><p> return Math.log( x + Math.sqrt( x * x + 1 ) );</p><p><b> } </b></p><p> public static double acosh( double x )</p>
33、;<p><b> {</b></p><p> return Math.log( x + Math.sqrt( x * x - 1 ) );</p><p><b> }</b></p><p> public static double tanh( double x )</p>&l
34、t;p><b> {</b></p><p> return sinh( x ) / cosh( x );</p><p><b> }</b></p><p> 4. 進(jìn)制轉(zhuǎn)換功能的實(shí)現(xiàn):</p><p> public static BigDecimal todec(BigDe
35、cimal bdnum,int oldcarry)</p><p><b> {</b></p><p> String num=bdnum.toString();</p><p> String hexnum="0123456789abcdef";</p><p> num=num.toLo
36、werCase();</p><p> if (oldcarry==10 ||num.equals("0")) </p><p> return new BigDecimal(num);</p><p> boolean neg=(num.charAt(0)=='-');</p><p> if (
37、neg) num=num.substring(1);</p><p> double newnum=0;</p><p> for(index=1;index<=num.length();index++)newnum=newnum*oldcarry+hexnum.indexOf(num.charAt(index-1));</p><p><b>
38、; if (neg)</b></p><p> newnum=-newnum;</p><p> BigDecimal bd=new BigDecimal(newnum);</p><p> return bd;</p><p><b> }</b></p><p> pu
39、blic static BigDecimal todec(String num,int oldcarry)</p><p><b> {</b></p><p> String hexnum="0123456789abcdef";</p><p> num=num.toLowerCase();</p>&
40、lt;p> num=num.replace(",","");</p><p> if (oldcarry==10 ||num.equals("0")) return new BigDecimal(num);</p><p> boolean neg=(num.charAt(0)=='-');</p
41、><p> if (neg) num=num.substring(1);</p><p> double newnum=0;</p><p> for (int index=1;index<=num.length();index++)</p><p> newnum=newnum*oldcarry+hexnum.indexOf(nu
42、m.charAt(index-1));</p><p><b> if (neg)</b></p><p> newnum=-newnum;</p><p> BigDecimal bd=new BigDecimal(newnum);</p><p> return bd;</p><p>
43、;<b> }</b></p><p><b> 5. 運(yùn)行效果</b></p><p> 圖1.11 標(biāo)準(zhǔn)型 圖 1.12 科學(xué)型</p><p> 1.3.3 打包發(fā)布</p><p> 1.用記事本編寫(xiě)清單文件;</p><
44、p> Mymoon.mf:</p><p> Mainfest-version: 1.0</p><p> Main-Class: Calculator</p><p> 將 Mymoon.mf 保存到D:\Workspaces\課設(shè)-計(jì)算器\bin目錄下</p><p><b> 生成JAR文件</b>
45、</p><p> Dos下進(jìn)入D:\Workspaces\課設(shè)-計(jì)算器\bin</p><p> D:\Workspaces\課設(shè)-計(jì)算器\bin jar cfm Calculator.jar mymoon.mf *.class</p><p><b> 1.4 程序測(cè)試</b></p><p> 運(yùn)行程序
46、進(jìn)入主界面:</p><p> 輸入:2.1*3+2 按等于“=”得8.3</p><p> 輸入:2÷0 按等于“=”屏幕顯示除數(shù)不能為0</p><p> 點(diǎn)擊查看菜單—》科學(xué)型。</p><p> 輸入 4! 按等于“=”得 24</p><p> 輸入 ln0 按等于“=”屏幕顯示
47、函數(shù)輸入無(wú)效</p><p> 輸入sin 60 按等于“=”得0.8660254037844386</p><p> 其他各方面的計(jì)算,經(jīng)測(cè)試全部正確。程序測(cè)試通過(guò)!</p><p><b> 1.5 總結(jié)</b></p><p> 通過(guò)這一周時(shí)間的學(xué)習(xí),能更好的將書(shū)本知識(shí)和社會(huì)需求相結(jié)合,在編寫(xiě)查看別人代
48、碼的過(guò)程中意識(shí)到程序模塊化,封裝的重要性。如果整個(gè)程序就只有一兩個(gè)類(lèi),可想其冗余多大,移植性更別說(shuō)了。之前對(duì)swing組件的運(yùn)用不是很熟悉,通過(guò)這次學(xué)習(xí)我能很好的利用組件布局窗口。遇到某些不懂的方法,會(huì)利用eclipse工具解釋?zhuān)檎褹PI,上網(wǎng)查找。充分利用網(wǎng)絡(luò)資源,學(xué)習(xí)了很多。這次也很系統(tǒng)的學(xué)習(xí)了怎樣寫(xiě)文檔。</p><p> 題目二 學(xué)生管理系統(tǒng)</p><p><b>
49、 2.1 需求分析</b></p><p> 學(xué)生信息管理作為學(xué)校管理的一個(gè)重要方面,其可變因素多,管理方面繁瑣復(fù)雜,時(shí)間跨度大,再加上其固有的基數(shù)大,因而形成了巨大的數(shù)據(jù)量。以前的人工管理方式以人為方式處理這樣大量的數(shù)據(jù),不可避免地增加了管理的工作量及復(fù)雜程度,使有關(guān)管理人員工作繁復(fù)、負(fù)擔(dān)重、壓力大。</p><p> 根據(jù)現(xiàn)實(shí)情況,要徹底改變?cè)瓉?lái)的不利局面,一個(gè)基于網(wǎng)
50、絡(luò)的綜合的學(xué)生管理信息系統(tǒng)的建立勢(shì)在必行。 “學(xué)生管理系統(tǒng)” 為尚未達(dá)到信息化管理的學(xué)校提供了報(bào)名基本信息采集的補(bǔ)充手段,主要用于招生學(xué)校學(xué)生的基本信息采集與報(bào)名管理。</p><p><b> 2.2 總體設(shè)計(jì)</b></p><p> 2.2.1 功能設(shè)計(jì)</p><p> 該學(xué)生管理系統(tǒng)包括三個(gè)部分:學(xué)生,教師,管理員,其中管理員權(quán)
51、限最大,其次是老師,學(xué)生權(quán)限最低。系統(tǒng)可以對(duì)用戶(hù)基本信息進(jìn)行管理(不同用戶(hù)登錄后權(quán)限不一樣),可以管理學(xué)生的基本信息,可以查詢(xún)學(xué)生成績(jī)。功能模塊圖如下:</p><p><b> 圖 2.1</b></p><p> 其中用戶(hù)信息管理包括:用戶(hù)注冊(cè),用戶(hù)刪除,信息修改。其中刪除與修改的權(quán)限只有管理員具有。學(xué)生信息管理包括:查詢(xún)、刪除,修改,學(xué)生課表信息查詢(xún)。其中刪
52、除修改的信息屬于管理員所有。學(xué)生成績(jī)管理包括:查詢(xún)、修改。修改的權(quán)限屬于教師所有。</p><p> 2.2.2 用戶(hù)界面設(shè)計(jì)</p><p> 用戶(hù)界面界面見(jiàn)后面所述的運(yùn)行效果圖</p><p> 其中:對(duì)于登錄界面用戶(hù)身份有:管理員,學(xué)生,教師。</p><p> 界面大小為:寬:506 px高:430 px 字體:宋體,顏色為默
53、認(rèn)顏色。加載背景圖片;</p><p> 學(xué)生管理系統(tǒng)主界面,菜單欄中有菜單:用戶(hù)信息管理,學(xué)生信息管理,學(xué)生成績(jī)管理,幫助系統(tǒng),退出系統(tǒng)。</p><p> 界面大小為:寬:501 px 高:405 px ,字體:宋體,顏色默認(rèn),加載一個(gè)背景圖片。</p><p> 2.2.3 數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)</p><p> 在mysql中創(chuàng)建
54、了數(shù)據(jù)庫(kù)“stu”數(shù)據(jù)庫(kù)中共有四個(gè)表:stus(學(xué)生信息)、score(學(xué)生成績(jī))、course(選課)、users(用戶(hù))各個(gè)表的具體屬性見(jiàn)下圖:</p><p> 表 2.2 學(xué)生基本信息表</p><p> 表 2.3 成績(jī)表</p><p> 表 2.4 選課信息表</p><p> 表 2.5 用戶(hù)基本信息表</
55、p><p> 2.2.4 關(guān)鍵算法設(shè)計(jì)</p><p> 圖 2.6 流程圖</p><p> 用戶(hù)登錄界面后按照其不同的身份分別具有不同的權(quán)限,對(duì)于管理員除不具備修改學(xué)生成績(jī)的權(quán)限外,其他權(quán)限列如刪除學(xué)生,添加,修改,添加用戶(hù)等均具有,對(duì)于教師,具有基本的學(xué)生成績(jī)修改等權(quán)限。學(xué)生具有查詢(xún)自己的成績(jī)的權(quán)限,所有的用戶(hù)都具有修改自身密碼的權(quán)力。</p>
56、<p> 程序執(zhí)行后用戶(hù)選擇不同的功能操作,可以使查詢(xún)等等,當(dāng)操作完畢后,如果用戶(hù)沒(méi)喲選擇退出當(dāng)前窗口,則繼續(xù)這一功能的查詢(xún),如果選擇了退出則跳出該功能模塊,用戶(hù)可以再主界面選擇其他的功能部分進(jìn)行查詢(xún)等具體操作。無(wú)論是在主界面還是在某一功能模塊用戶(hù)均可以直接退出系統(tǒng)。程序最主要的操作部分是對(duì)數(shù)據(jù)庫(kù)的操作,這要求數(shù)據(jù)庫(kù)中的各個(gè)表要建的合理恰當(dāng)。部分存在外鍵的屬性,加上級(jí)聯(lián)操作,防止在進(jìn)行刪除操作過(guò)程中不能刪除的意外。<
57、;/p><p><b> 2.3 代碼實(shí)現(xiàn)</b></p><p> 2.3.1 類(lèi)之間的關(guān)系</p><p> Eclipse中視圖如下:</p><p><b> 2.7 包視圖</b></p><p> 2. 類(lèi)成員、方法間的調(diào)用關(guān)系</p><
58、;p> 由本程序類(lèi)較多,所以只闡述部分重要的類(lèi):</p><p> 1. 下圖描述了幾個(gè)主要類(lèi)間的調(diào)用關(guān)系:</p><p> 2.8 類(lèi)間調(diào)用關(guān)系圖</p><p> 圖中MainWindows為主類(lèi)它加載著程序的主體,login為登錄后主界面,它為主類(lèi)所調(diào)用,而ManageStu為學(xué)生管理類(lèi),它為login類(lèi)調(diào)用。程序還有一個(gè)ConnectDB類(lèi)
59、為大多類(lèi)所調(diào)用,它執(zhí)行的是連接數(shù)據(jù)庫(kù)的操作。其他類(lèi)每次調(diào)用它來(lái)實(shí)現(xiàn)與數(shù)據(jù)的連接。</p><p><b> 2. 其他幾個(gè)類(lèi):</b></p><p> 其他幾個(gè)類(lèi)主要是進(jìn)行對(duì)數(shù)據(jù)庫(kù)的基本操作(查詢(xún),插入,刪除,修改)</p><p> 他們基本都繼承JFrame類(lèi),他們又調(diào)用ConnectDB類(lèi)。</p><p>
60、; 下面列出selectScore類(lèi)的主要成員與方法,其他幾個(gè)類(lèi)相似,在此不一一列出:</p><p> 圖2.9 selectScore類(lèi)圖</p><p> 2.3.2 功能實(shí)現(xiàn)及運(yùn)行效果</p><p> 主類(lèi) MainWindows主要負(fù)責(zé)搭建程序的主窗口,調(diào)用其他的類(lèi),其中包擴(kuò)一個(gè)加載進(jìn)度條的方法,還有實(shí)列化login類(lèi);</p>
61、<p> public class MainWindow extends JWindow{</p><p> JLabel jl=new JLabel(new ImageIcon("12.jpg"));</p><p> JProgressBar progressBar=new JProgressBar(1,100);</p><p&
62、gt; public MainWindow(){</p><p> this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));</p><p> this.setLocation((size.width-this.getWidth())/2,(size.height-this.getWidth())/2);</
63、p><p> this.setVisible(true);</p><p> Thread th=new MyThread(this);</p><p> th.start();</p><p><b> }</b></p><p> public static void main(Stri
64、ng[] args) {</p><p> new MainWindow();</p><p><b> }</b></p><p> class MyThread extends Thread{</p><p> MainWindow main;</p><p> public MyT
65、hread(MainWindow main){</p><p> this.main=main;</p><p><b> }</b></p><p> public void run(){</p><p> while(main.progressBar.getValue()<100){</p>
66、<p> main.progressBar.setValue(main.progressBar.getValue()+1);</p><p><b> try {</b></p><p> Thread.sleep(100);</p><p> } catch (InterruptedException e) {</
67、p><p> e.printStackTrace(); </p><p><b> }</b></p><p><b> }</b></p><p> main.dispose();</p><p> new login();</p><p
68、><b> }</b></p><p><b> }</b></p><p> ConnectDB類(lèi),該類(lèi)是實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接的操作,先加載驅(qū)動(dòng)包,然后指定數(shù)據(jù)庫(kù)名,密碼路徑等</p><p> public class ConnectDB {</p><p> public stati
69、c Connection Connect(){</p><p><b> try {</b></p><p> Class.forName("com.mysql.jdbc.Driver");</p><p> String url = "jdbc:mysql://localhost:3306/stu"
70、;;</p><p> Connection con = DriverManager.getConnection(url, "root", "123");</p><p> return con;</p><p> } catch (Exception e) {</p><p> // TODO
71、: handle exception</p><p> return ("數(shù)據(jù)庫(kù)連接異常");</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><
72、p> 3. Login類(lèi),該類(lèi)主要是實(shí)現(xiàn)登錄后的界面主要按鈕等,它大量采用label標(biāo)簽等進(jìn)行界面布局。</p><p> Public class login extends JFrame implements ActionListener,ItemListener,KeyListener {</p><p> String [] leixing=new String[3]
73、; </p><p> JLabel jlb1=new JLabel("賬號(hào):");</p><p> JLabel jlb2=new JLabel("密 碼:"); </p><p> JTextField yhm=new JTextField();</p><p> JPasswo
74、rdField mm=new JPasswordField(); </p><p> JComboBox jcb=null;</p><p> JButton dl=new JButton("登錄"); </p><p> JButton tc=new JButton("退出");</p><p>
75、; public static int quanxian=0;</p><p> Connection con=null;</p><p> Statement st=null;</p><p> ResultSet rs=null;</p><p> public login() {</p><p> e
76、nableEvents(AWTEvent.WINDOW_EVENT_MASK);</p><p><b> try {</b></p><p><b> jbInit();</b></p><p><b> }</b></p><p> catch(Exception
77、e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p> hy.setBounds(0,0,img.getIconWidth(),img.getIconHeight());</p><p> ((JPanel)getContentPane()).
78、setOpaque(false);</p><p><b> }</b></p><p> public static void main(String[] args) {</p><p> new login();</p><p><b> }</b></p><p&g
79、t; 4. ManageStu類(lèi),該類(lèi)主要是用來(lái)搭建學(xué)生基本信息供其他各個(gè)類(lèi)所調(diào)用,</p><p> public class ManageStu extends JFrame {</p><p> private JMenuBar getJJMenuBar() {</p><p> if (jJMenuBar == null) {</p>
80、<p> jJMenuBar = new JMenuBar();</p><p> jJMenuBar.setFont(new Font("Lucida Bright", Font.BOLD, 12));</p><p> jJMenuBar.add(getJMenu1());</p><p> jJMenuBar.add
81、(getJMenu2());</p><p><b> }</b></p><p> return jJMenuBar;</p><p><b> }</b></p><p> private JMenu getJMenu1() {</p><p> if (jMe
82、nu1 == null) {</p><p> jMenu1 = new JMenu();</p><p> jMenu1.setText("用戶(hù)信息管理");</p><p> jMenu1.add(getJMenuItem1());</p><p> jMenu1.add(getJMenuItem2());&l
83、t;/p><p><b> }</b></p><p> return jMenu1;</p><p><b> }</b></p><p> private JMenu getJMenu2() {</p><p> if (jMenu2 == null) {</
84、p><p> jMenu2 = new JMenu();</p><p> jMenu2.setText("學(xué)生信息管理");</p><p> jMenu2.add(getJMenuItem5());</p><p><b> }</b></p><p> retu
85、rn jMenu2;</p><p><b> }</b></p><p> selectScore類(lèi)是用來(lái)實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中查找學(xué)生的成績(jī)。</p><p> public void actionPerformed(ActionEvent e) {</p><p> JButton jbt=(JButton)e.g
86、etSource();</p><p> String uname=yhm.getText().trim(); </p><p> if(jbt==dl){</p><p><b> try</b></p><p><b> {</b></p><p
87、> con = ConnectDB.Connect();</p><p> stat = con.createStatement();</p><p> rs=stat.executeQuery("select* from score where stuId='"+uname+"' ");</p>&
88、lt;p> if(rs.next())</p><p> { </p><p> this.setVisible(false);</p><p> log=new JDialog(); </p><p> lab1=new JLabel("學(xué)號(hào):");</p
89、><p> lab2=new JLabel("各課成績(jī)?nèi)缦?");</p><p> if (result == JOptionPane.YES_OPTION) {</p><p> log.setVisible(false);</p><p><b> }</b></p><
90、p><b> }</b></p><p> }); </p><p> txt1=new JTextField(10);</p><p> txt2=new JTextField(10); txt1.setEditable(false)</p>
91、;<p> if(rs.getInt("courseId")==1){</p><p> txt2.setText(rs.getString("score").trim());</p><p> txt2.setEditable(false);</p><p> rs.next();</p>
92、<p> log.add(jp1);</p><p> log.add(jp2); </p><p> log.setTitle("查詢(xún)成績(jī)");</p><p> log.setSize(300,340);</p><p> log.setResizable(false);</p&g
93、t;<p> Dimension s;</p><p> }catch(Exception ee){</p><p> ee.printStackTrace();</p><p><b> }</b></p><p> }else if(jbt==tc){</p><
94、p> int result = JOptionPane.showOptionDialog(null,"是否退出系統(tǒng)登錄?","系統(tǒng)提示",</p><p> JOptionPane.YES_NO_OPTION,javax.swing.JOptionPane.QUESTION_MESSAGE,null,new String[] {"是",&qu
95、ot;否"},"否");</p><p> if (result == JOptionPane.YES_OPTION)</p><p><b> {</b></p><p> this.dispose();</p><p><b> } </b></p&
96、gt;<p><b> }</b></p><p><b> 運(yùn)行效果圖:</b></p><p> 圖 2.10 用戶(hù)登錄界面</p><p> 圖 2.11 登錄后主界面</p><p> 圖 2.12 學(xué)生查詢(xún)主界面</p><p> 2.
97、3.3 打包發(fā)布</p><p> 1.用記事本編寫(xiě)清單文件;</p><p> Mymoon.mf:</p><p> Mainfest-version: 1.0</p><p> Main-Class: MainWindow</p><p> 將 Mymoon.mf 保存到D:\Workspaces\學(xué)生
98、管理系統(tǒng)\bin目錄下生成JAR文件</p><p> Dos下進(jìn)入D:\Workspaces\學(xué)生管理系統(tǒng)\bin</p><p> D:\Workspaces\學(xué)生管理系統(tǒng)\bin jar cfm MainWindow.jar mymoon.mf *.class</p><p><b> 2.4 程序測(cè)試</b></p>
99、<p> 以管理員身份進(jìn)入系統(tǒng),登錄成功后選擇“學(xué)生信息管理”進(jìn)入學(xué)生管理系統(tǒng),選擇查詢(xún)-----》模糊查詢(xún) 輸入“信息”:程序以列表的形式彈出所有信息系的學(xué)生。</p><p> 選擇系統(tǒng)下的添加信息,輸入學(xué)號(hào):20102235 姓名:江政波 選擇性別:男,系別:信息系 年齡:21 籍貫:九江 密碼:123 選擇保存,提示“添加成功”</p><p> 查詢(xún)數(shù)據(jù)庫(kù)發(fā)現(xiàn)
100、學(xué)生信息添加確實(shí)成功!</p><p> 選擇系統(tǒng)下的查詢(xún)學(xué)生成績(jī)輸入學(xué)號(hào):20102200 成功顯示了該學(xué)生各門(mén)課程的成績(jī)</p><p> 其他各種功能測(cè)試均成功驗(yàn)證在此不一一說(shuō)明,程序測(cè)試通過(guò)!</p><p><b> 2.5 總結(jié)</b></p><p> 通過(guò)這次的學(xué)生管理系統(tǒng)的設(shè)計(jì),首先學(xué)會(huì)了怎么連
101、接數(shù)據(jù)庫(kù),怎么將利用java程序?qū)?shù)據(jù)庫(kù)進(jìn)行刪除,插入,查詢(xún)等各種操作。其次,在建表的過(guò)程中明白了表要?jiǎng)澐值淖屑?xì),不能僅僅建幾個(gè)復(fù)雜的表,應(yīng)該建多個(gè)簡(jiǎn)單表 ,最后就是學(xué)會(huì)了怎么給程序弄加載的進(jìn)度條。這個(gè)過(guò)程中離不開(kāi)同學(xué)和老師的指導(dǎo)。在此表示感謝。</p><p> 題目三 五子棋游戲設(shè)計(jì)</p><p><b> 3.1 需求分析</b></p>&
102、lt;p> 五子棋,是一種兩人對(duì)弈的純策略型棋類(lèi)游戲,亦稱(chēng)“串珠”、“連五子”:是中國(guó)明間非常熟知的一個(gè)古老棋種。相傳,它起源于四千多年前,比圍棋的歷史還要悠久。</p><p> 五子棋游戲容易上手,老少皆宜,而且趣味橫生,引人入勝;它不僅能使人娛樂(lè),也能開(kāi)發(fā)人的智力,而且富含哲理,有助于修身養(yǎng)性。如今的社會(huì)高速發(fā)展,人們用來(lái)娛樂(lè)的時(shí)間越來(lái)越來(lái)越少,一起對(duì)弈機(jī)會(huì)更少,而現(xiàn)在大多數(shù)的人都有了一部手機(jī),于
103、是我們開(kāi)發(fā)了這個(gè)手機(jī)版的五子棋游戲,人們可以在閑暇時(shí)候和手機(jī)對(duì)弈,游戲可以選擇級(jí)別,播放音樂(lè),可以記錄用戶(hù)的成績(jī)等。</p><p><b> 3.2 總體設(shè)計(jì)</b></p><p> 3.2.1 功能設(shè)計(jì)</p><p> 該項(xiàng)目實(shí)現(xiàn)了手機(jī)版五子棋游戲,是用J2ME編寫(xiě)的,開(kāi)發(fā)工具為:Eclipse,window 7系統(tǒng),sun的WT
104、K2.5.1</p><p> 游戲有背景音樂(lè),默認(rèn)為關(guān)閉狀態(tài),用戶(hù)可以選擇游戲的難度,游戲中播放的音樂(lè)類(lèi)型,設(shè)置游戲背景顏色,設(shè)置棋盤(pán)的大小。功能圖如下:</p><p> 圖 3.1 功能模塊圖</p><p> 3.2.2 用戶(hù)界面設(shè)計(jì)</p><p> 圖 3.2 界面設(shè)計(jì)圖</p><p> 3.
105、2.3 關(guān)鍵算法設(shè)計(jì)</p><p><b> 圖3.3 流程圖</b></p><p> 程序默認(rèn)為電腦先走,難度為1級(jí),用戶(hù)可以自行設(shè)置,程序最關(guān)鍵的算法為人工智能的實(shí)現(xiàn),主要是根據(jù)可能的下棋方式進(jìn)行打分,最后電腦將棋子下在分?jǐn)?shù)最高的位置。具體實(shí)現(xiàn)見(jiàn)后面附錄的關(guān)鍵代碼部分。</p><p><b> 3.3 代碼實(shí)現(xiàn)<
106、/b></p><p> 3.3.1 類(lèi)之間的關(guān)系</p><p> 1. Eclipse中的包視圖:</p><p><b> 圖3.4 包視圖</b></p><p><b> 類(lèi)之間調(diào)用關(guān)系</b></p><p> 圖 3.5 類(lèi)調(diào)用關(guān)系圖</
107、p><p> 3. 類(lèi)成員及其方法</p><p><b> 項(xiàng)目共有7個(gè)類(lèi):</b></p><p> 1. About類(lèi),該類(lèi)主要負(fù)責(zé)設(shè)計(jì)幫助文檔 </p><p> 圖 3.6 成員方法圖</p><p> 2. Dot類(lèi),該類(lèi)主要用雷記錄棋子的位置等信息</p>
108、<p> 圖 3.7 成員方法圖</p><p> 3. FIRCanvas類(lèi),該類(lèi)主要繪制棋盤(pán),棋子,引導(dǎo)框等</p><p> 圖 3.8 成員方法圖</p><p> 4 . FIRMIDlet類(lèi),該類(lèi)主要負(fù)責(zé)搭建游戲開(kāi)啟后第一界面,包擴(kuò)退出,menu等</p><p> 圖 3.9 成員方法圖</p&
109、gt;<p> 5. Music類(lèi)用來(lái)播放游戲背景音樂(lè)</p><p> 圖 3.10成員方法圖</p><p> 6. Options類(lèi),實(shí)現(xiàn)設(shè)置類(lèi)中的各種功能,設(shè)置游戲背景音樂(lè)類(lèi)型,棋盤(pán)大小,背景顏色游戲難易等</p><p> 圖 3.11 成員方法圖</p><p> 3.3.2 功能實(shí)現(xiàn)及運(yùn)行效果<
110、/p><p><b> 繪制棋盤(pán)面板</b></p><p> 該功能實(shí)現(xiàn)在類(lèi) FIRCanvas中</p><p> 主要使用了g.fillRect方法;</p><p> public void paint(Graphics g)</p><p><b> {</b>
111、;</p><p> g.setColor(backGroundColor);</p><p> g.fillRect(0, 0, canvasWidth, canvasHeight); </p><p> if(isColor)</p><p><b> {</b></p><p>
112、 g.setColor(0xcc8837);</p><p> g.fillRect(boardX, boardY, boardLength, boardLength); </p><p><b> }</b></p><p> g.setColor(0); </p>&l
113、t;p><b> int y;</b></p><p> for(int r = 0; r < boardSize; r++)</p><p><b> {</b></p><p> int x1 = boardX + gridLength / 2;</p><p> int
114、x2 = (x1 + boardLength) - gridLength;</p><p> y = boardY + r * gridLength + gridLength / 2;</p><p> g.drawLine(x1, y, x2, y); </p><p><b> }</b></p><p>&l
115、t;b> int x;</b></p><p> for(int c = 0; c < boardSize; c++)</p><p><b> {</b></p><p> x = boardX + c * gridLength + gridLength / 2;</p><p> i
116、nt y1 = boardY + gridLength / 2;</p><p> int y2 = (y1 + boardLength) - gridLength;</p><p> g.drawLine(x, y1, x, y2); </p><p><b> }</b></p><p><b>
117、 加載音樂(lè)</b></p><p> 加載音樂(lè)的功能在音樂(lè)類(lèi)music中</p><p> public void playMusic(int music) {</p><p> this.stopMusic();</p><p> switch (music) {</p><p><b&g
118、t; case 1:</b></p><p><b> break;</b></p><p><b> case 2:</b></p><p> this.playSpringMusic();</p><p><b> break;</b></p&g
119、t;<p><b> case 3:</b></p><p> this.playCityMusic();</p><p><b> break;</b></p><p><b> case 4:</b></p><p> this.playFlower
120、Music();</p><p><b> break;</b></p><p><b> default:</b></p><p><b> break;</b></p><p><b> }</b></p><p>&l
121、t;b> }</b></p><p><b> 判斷勝負(fù)</b></p><p> 判斷勝負(fù)即判斷是否有五子連珠的出現(xiàn),分別從八個(gè)方向經(jīng)行判別</p><p> private boolean isGameOver()</p><p> {isGameOver = false;</p&g
122、t;<p> for(int r = 0; r < boardSize; r++)</p><p><b> {</b></p><p> for(int c = 0; c < boardSize; c++) {</p><p> if(table[r][c] == 0 || checkF
123、iveInRow(r, c, 5, -1) == -1)</p><p><b> continue;</b></p><p> isGameOver = true;</p><p> isComputerWon = table[r][c] == 1;</p><p> break; }&l
124、t;/p><p> if(isGameOver)</p><p><b> break;</b></p><p><b> }</b></p><p> private int checkFiveInRow(int row, int col, int n, int exceptDirection
125、)</p><p><b> {</b></p><p> int player = table[row][col];</p><p> int cd[] = connectedIn8D(player, row, col);</p><p> int ed[] = expandedIn8D(player, row
126、, col);</p><p> int existDirection = -1;</p><p> for(int i = 0; i < 4; i++)</p><p> { </p><p> if(i == exceptDirection || cd[i] + cd[i + 4] + 1 &
127、lt; n || (ed[i] - cd[i]) + (ed[i + 4] - cd[i + 4]) < 0)</p><p><b> continue;</b></p><p> existDirection = i;</p><p> break; }</p><p> return e
128、xistDirection;</p><p><b> }</b></p><p><b> 記錄棋子位置</b></p><p> 主要是記錄棋子所在的行列及棋子的顏色</p><p> public class Dot</p><p><b> {&l
129、t;/b></p><p> public Dot()</p><p><b> {</b></p><p><b> row = 0;</b></p><p><b> col = 0;</b></p><p><b> }&
130、lt;/b></p><p> public Dot(int r, int c)</p><p><b> {</b></p><p><b> row = r;</b></p><p><b> col = c;</b></p><p>
131、<b> }</b></p><p> public Dot(int boardSize)</p><p><b> {</b></p><p> row = boardSize / 2;</p><p> col = boardSize / 2;</p><p>
132、<b> }</b></p><p> public void setRowCol(int r, int c)</p><p><b> {</b></p><p><b> row = r;</b></p><p><b> col = c;</b&
133、gt;</p><p><b> }</b></p><p> public void copyFrom(Dot d)</p><p><b> {</b></p><p> row = d.row;</p><p> col = d.col;</p>
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告-
- java課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告--beatbox
- JAVA課程設(shè)計(jì)報(bào)告.doc
- java語(yǔ)言課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告--java日歷設(shè)計(jì)
- java課程設(shè)計(jì)報(bào)告---java實(shí)現(xiàn)畫(huà)筆系統(tǒng)
- java課程設(shè)計(jì)-猜數(shù)游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)-蜘蛛紙牌游戲設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告——蜘蛛紙牌
- java課程設(shè)計(jì)--掃雷游戲報(bào)告
- java代購(gòu)網(wǎng)課程設(shè)計(jì)報(bào)告
- java坦克大戰(zhàn)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告---考試系統(tǒng)
- java課程設(shè)計(jì)報(bào)告--hannoi塔
- java火柴游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告—蜘蛛紙牌
- java課程設(shè)計(jì)報(bào)告--hannoi塔
評(píng)論
0/150
提交評(píng)論