![java課程設(shè)計(jì)模板_第1頁](http://file4.renrendoc.com/view/c62940bbd361f8b65157d9099ca717a4/c62940bbd361f8b65157d9099ca717a41.gif)
![java課程設(shè)計(jì)模板_第2頁](http://file4.renrendoc.com/view/c62940bbd361f8b65157d9099ca717a4/c62940bbd361f8b65157d9099ca717a42.gif)
![java課程設(shè)計(jì)模板_第3頁](http://file4.renrendoc.com/view/c62940bbd361f8b65157d9099ca717a4/c62940bbd361f8b65157d9099ca717a43.gif)
![java課程設(shè)計(jì)模板_第4頁](http://file4.renrendoc.com/view/c62940bbd361f8b65157d9099ca717a4/c62940bbd361f8b65157d9099ca717a44.gif)
![java課程設(shè)計(jì)模板_第5頁](http://file4.renrendoc.com/view/c62940bbd361f8b65157d9099ca717a4/c62940bbd361f8b65157d9099ca717a45.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
年4月19日java課程設(shè)計(jì)模板文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。課程設(shè)計(jì)報(bào)告(—第2學(xué)期)課程名稱Java課程設(shè)計(jì)報(bào)告學(xué)生姓名張曉甜班級(jí)學(xué)號(hào)指導(dǎo)教師康軍完成日期.6.23目錄10341一、設(shè)計(jì)目的及要求 1287711.1課程設(shè)計(jì)目的 11.2課程設(shè)計(jì)內(nèi)容和要求 117057二、系統(tǒng)需求分析 2246982.1系統(tǒng)目標(biāo) 2264302.2游戲需求 244092.3開發(fā)環(huán)境 231463三、系統(tǒng)總體設(shè)計(jì) 3244963.1系統(tǒng)的功能模塊劃分 34553.2系統(tǒng)流程圖 418525四、系統(tǒng)詳細(xì)設(shè)計(jì) 5213714.1具體的設(shè)計(jì)步驟如下:
595204.2界面設(shè)計(jì) 5265794.3關(guān)鍵功能的實(shí)現(xiàn) 61495五、代碼調(diào)試 114728六、小結(jié) 1412090參考文獻(xiàn) 1527891七、附錄 15設(shè)計(jì)目的及要求=1.11.1課程設(shè)計(jì)目的經(jīng)過本游戲的設(shè)計(jì),綜合自己在校期間所學(xué)的理論知識(shí),設(shè)計(jì)開發(fā)24點(diǎn)游戲,使自己熟悉應(yīng)用系統(tǒng)的開發(fā)過程,進(jìn)一步理解面向?qū)ο蟪绦蛟O(shè)計(jì)的思想和方法,利用Java語言進(jìn)行程序設(shè)計(jì)的能力,培養(yǎng)自主思考能力,檢驗(yàn)學(xué)習(xí)效果和動(dòng)手能力,初步掌握基礎(chǔ)編程知識(shí),并鍛煉發(fā)現(xiàn)問題、分析問題和解決問題的能力。從而達(dá)到理論與實(shí)踐相結(jié)合的目的。加深對(duì)《Java語言與面向?qū)ο蠹夹g(shù)》課程基礎(chǔ)知識(shí)的理解,掌握J(rèn)ava語言面向?qū)ο蟪绦蛟O(shè)計(jì)的開發(fā)方法和步驟。=1.21.2課程設(shè)計(jì)內(nèi)容和要求24點(diǎn)游戲是一種使用撲克牌來進(jìn)行的益智的游戲,游戲內(nèi)容為:從一副撲克牌四個(gè)花色的1到K等52張牌中,任意抽取4張牌,運(yùn)用加、減、乘、除和括號(hào)等運(yùn)算符把牌面上的數(shù)進(jìn)行運(yùn)算得到24。游戲有不同的版本,其實(shí)是對(duì)J、Q、和K的處理有所不同。有的版本版本是把J、Q、和K去除,只用1到10來進(jìn)行游戲;有的版本是把J、Q、和K當(dāng)成10;還有的版本是用J表示11,Q表示12,K表示13。此次課程設(shè)計(jì)采用的是把J表示11,Q表示12,K表示13,使游戲的四張牌在1~K這13張牌中隨機(jī)取牌。具體功能如下:
=1\*GB2⑴對(duì)游戲設(shè)計(jì)三個(gè)難易級(jí)別,分別為初級(jí)、中級(jí)和高級(jí)。每次開始游戲前能夠根據(jù)玩家的需要進(jìn)行難度設(shè)置,如若不設(shè)置,系統(tǒng)默認(rèn)難度級(jí)別為初級(jí),設(shè)置完難度級(jí)別之后就能夠開始游戲了,單擊“發(fā)牌”按鈕,桌面上出現(xiàn)四張翻開的撲克牌,與此同時(shí),游戲開始計(jì)時(shí),時(shí)間條開始前進(jìn)。
=2\*GB2⑵在規(guī)定的時(shí)間內(nèi),玩家能夠在“輸入結(jié)果”的編輯框中輸入自己想好的算式,然后點(diǎn)擊“驗(yàn)算”按鈕:如果輸入的算式經(jīng)運(yùn)算后所的答案正確,則會(huì)彈出“恭喜,你成功答對(duì)了一題”的窗口;如果輸入的數(shù)字與給出的牌的數(shù)字不符或者符號(hào)不合法,則會(huì)彈出“抱歉,你答錯(cuò)了”的窗口;如果未輸入任何的數(shù)字和算符,則會(huì)彈出“輸入不能為空!”的窗口。=3\*GB2⑶
程序中能夠記錄游戲的歷史記錄。=4\*GB2⑷如果在規(guī)定的時(shí)間內(nèi),玩家沒有點(diǎn)擊驗(yàn)算按鈕,則會(huì)彈出“對(duì)不起,你失敗了”的窗口。=5\*GB2⑸在結(jié)束本輪游戲后,如果玩家想繼續(xù)游戲,則可點(diǎn)擊“發(fā)牌”按鈕即可重新發(fā)牌,開始下一輪的游戲;如果玩家想結(jié)束游戲,則可點(diǎn)擊“結(jié)束”按鈕即可結(jié)束游戲二、系統(tǒng)需求分析=2.12.1系統(tǒng)目標(biāo)使用所學(xué)知識(shí)制作一個(gè)基于java的24點(diǎn)游戲。=2.22.2游戲需求游戲界面需求:設(shè)計(jì)良好的游戲界面能夠讓玩家充分感受到游戲帶來的娛樂性,游戲的背景色是綠色,盡量降低玩家游戲時(shí)的用眼疲勞,最大化的為玩家?guī)硎孢m的娛樂環(huán)境。游戲形狀需求:根據(jù)數(shù)字顏色的不同,顯示不同的紙牌。鼠標(biāo)處理事件需求:經(jīng)過點(diǎn)擊菜單欄中對(duì)應(yīng)的菜單項(xiàng),能夠?qū)崿F(xiàn)游戲開始、結(jié)束、數(shù)字的驗(yàn)算及其它游戲選擇等功能。=2.32.3開發(fā)環(huán)境MyEclipse,windowbuilder三、系統(tǒng)總體設(shè)計(jì)=3.13.1系統(tǒng)的功能模塊劃分 圖一系統(tǒng)功能圖=3.23.2系統(tǒng)流程圖保存歷史記錄至數(shù)據(jù)庫中,并顯示在表格中保存歷史記錄至數(shù)據(jù)庫中,并顯示在表格中YNNYNYYN是否設(shè)置難度?1.低級(jí)2.中級(jí)3.高級(jí)系統(tǒng)默認(rèn)難度級(jí)別為中級(jí)初始化發(fā)牌計(jì)時(shí)開始輸入算式,進(jìn)行計(jì)算比較函數(shù)值與參數(shù)值得大小顯示“錯(cuò)誤!”驗(yàn)算函數(shù)判斷計(jì)算結(jié)果是否為24?超時(shí)顯示:“超時(shí)”輸入字符錯(cuò)誤:顯示:“錯(cuò)誤!”運(yùn)算結(jié)果正確:“正確!”運(yùn)算結(jié)果錯(cuò)誤:顯示:“錯(cuò)誤!”繼續(xù)否?結(jié)束開始圖二系統(tǒng)流程圖四、系統(tǒng)詳細(xì)設(shè)計(jì)=4.14.1具體的設(shè)計(jì)步驟如下:
1)在對(duì)話框中添加4個(gè)圖像(分別用于四張撲克牌),3個(gè)按鈕(分別是發(fā)牌、運(yùn)算、結(jié)束),1個(gè)編輯框,一個(gè)進(jìn)度條和一個(gè)下拉框(用于選擇難度級(jí)別)接著根據(jù)屬性對(duì)以上所添加的控件進(jìn)行屬性修改,主要進(jìn)行重命名,以便編輯源代碼的時(shí)候區(qū)分,另外對(duì)圖像的處理除了對(duì)其進(jìn)行重命名外還要對(duì)其添加位圖。之后經(jīng)過打開圖片,并對(duì)其進(jìn)行重命名。
2)根據(jù)流程圖在類的原文件中逐一添加實(shí)現(xiàn)各個(gè)模塊其功能所需要的各種函數(shù),并添加相應(yīng)的源代碼,同時(shí)在頭文件中添加對(duì)各種函數(shù)及變量的聲明。
3)對(duì)編譯好的程序進(jìn)行保存,開始進(jìn)行調(diào)試,邊調(diào)試邊根據(jù)報(bào)錯(cuò)對(duì)原程序進(jìn)行修改,直到程序不在報(bào)錯(cuò)為止。=4.24.2界面設(shè)計(jì)表1控件類型、ID及相關(guān)說明對(duì)象變量名Caption或說明靜態(tài)文本Label耗時(shí)標(biāo)志靜態(tài)文本Label-1第一張圖靜態(tài)文本Label-2第二張圖靜態(tài)文本Label-3第三張圖靜態(tài)文本Label-4第四張圖靜態(tài)文本lblNewLabel輸入算式靜態(tài)文本lblNewLabel-1歷史記錄靜態(tài)文本Label-5選擇難度下拉框comboBox選擇難度表格table歷史記錄編輯框textField輸入計(jì)算滾動(dòng)條progressBar耗時(shí)按鈕btnNewButton發(fā)牌按鈕Button驗(yàn)算按鈕Button-1結(jié)束=4.34.3關(guān)鍵功能的實(shí)現(xiàn)(1)發(fā)牌功能的實(shí)現(xiàn)首先,經(jīng)過Number[i]=rand()%13。來產(chǎn)生0-9的隨機(jī)數(shù),利用該函數(shù)加載了標(biāo)號(hào)1~10的10張紙牌和一張背景紙牌。然后運(yùn)行中的以下一段代碼,即可在圖像框中得到四張鋪開的紙牌。代碼如下:Random
random=new
Random();
r1=random.nextInt(10)+1;(2)計(jì)時(shí)功能的實(shí)現(xiàn)首先,定義線程類,經(jīng)過每隔不同的時(shí)間來發(fā)送信息來控制三個(gè)級(jí)別的時(shí)間不同。設(shè)置了時(shí)間限制,如果時(shí)間超過代表游戲結(jié)束,用戶沒有時(shí)間進(jìn)行思考了,本輪游戲結(jié)束。源代碼如下:
class
MyThread
extends
Thread
{
boolean
lock=true;
JProgressBar
progressBar;
JLabel
label_1;
JLabel
label_2;
JLabel
label_3;
JLabel
label_4;
JTextField
textField;
JButton
button;
int
difficulty=0;
MyThread(JProgressBar
progressBar,JLabel
label_1,JLabel
label_2,JLabel
label_3,JLabel
label_4,JTextField
textField,int
difficulty,JButton
button){
gressBar=progressBar;
this.label_1=label_1;
this.label_2=label_2;
this.label_3=label_3;
this.label_4=label_4;
this.textField=textField;
this.difficulty=difficulty;
this.button=button;
}
public
void
run()
{
//
TODO
Auto-generated
method
stub
for(int
i=0;i<=60-20*difficulty;i++){
try
{
if(lock==true){
this.sleep(1000);
progressBar.setValue(i*(difficulty+1));
}
}
catch
(InterruptedException
e)
{
//
TODO
Auto-generated
catch
block
lock=false;
}
}
if(lock==true){
JOptionPane.showMessageDialog(null,
"對(duì)不起,沒有時(shí)間了",
"Message",JOptionPane.WARNING_MESSAGE);
label_1.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\1.jpg"));
label_2.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\2.jpg"));
label_3.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\1.jpg"));
label_4.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\2.jpg"));
progressBar.setValue(0);
textField.setText("");
textField.setEnabled(false);
button.setEnabled(false);
textField.setText(null);
}
}
}(3)驗(yàn)算功能的實(shí)現(xiàn)只簡(jiǎn)單介紹彈出框的實(shí)現(xiàn)的功能完成。在規(guī)定的時(shí)間內(nèi)玩家輸入算式進(jìn)行驗(yàn)算,根據(jù)不同的情況會(huì)彈出不同的對(duì)話框。有以下兩種情況:如果玩家輸入的數(shù)字與撲克牌給出的數(shù)字不符合,則會(huì)彈出“抱歉,你答錯(cuò)了”的提示對(duì)話框。如果玩家輸入算式經(jīng)運(yùn)算后所得答案正確,則會(huì)彈出“恭喜,你成功答對(duì)了一題”的提示對(duì)話框。具體代碼如下:button.addMouseListener(new
MouseAdapter()
{
@Override
public
void
mouseClicked(MouseEvent
e)
{
String
s=
textField.getText().toString();
if(cacComplex(s)==24&&kuohao(s)==1&&shuzi(s)==1){
JOptionPane.showMessageDialog(null,
"恭喜,你成功答對(duì)了一題",
"Message",JOptionPane.PLAIN_MESSAGE);
currenttime=System.currentTimeMillis();
if(time>currenttime-firsttime||time==0){
time=(int)
(currenttime-firsttime);
}
correct++;
textField.setText("");
label_1.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\1.jpg"));
label_2.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\2.jpg"));
label_3.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\1.jpg"));
label_4.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\2.jpg"));
errupt();
progressBar.setValue(0);
textField.setEnabled(false);
button.setEnabled(false);
}else{
JOptionPane.showMessageDialog(null,
"抱歉,你答錯(cuò)了",
"Message",JOptionPane.PLAIN_MESSAGE);
textField.setText("");
label_1.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\1.jpg"));
label_2.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\2.jpg"));
label_3.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\1.jpg"));
label_4.setIcon(new
ImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipse
CI\\pukeImage\\2.jpg"));
errupt();
progressBar.setValue(0);
textField.setEnabled(false);
button.setEnabled(false);
}
}
});=4\*GB2⑷計(jì)算功能的實(shí)現(xiàn)對(duì)于輸入結(jié)果的計(jì)算,主要是經(jīng)過intLastPos(CStringStr),intFirstPos(CStringStr),charFirstF(CStringStr),intSubCompute(CStringStr),intTotalCompute(CStringStr)等函數(shù)來來確定輸入的算式的優(yōu)先級(jí)別而且計(jì)算出輸入算式的最終結(jié)果。現(xiàn)摘兩段代碼進(jìn)行詳細(xì)說明private
static
double
cacComplex(String
str)
{
if
(str.equals(""))
return
0;
//System.out.println("CAC:"
+
str);
str
=
str.replaceAll("[\\(]",
"(").replaceAll("[\\)]",
")");
int
cl
=
str.lastIndexOf('(');
if
(cl
==
-1)
return
cac(str);
int
cr
=
str.indexOf(')',
cl);
String
left
=
str.substring(0,
cl);
String
right
=
str.substring(cr
+
1);
String
middle
=
str.substring(cl
+
1,
cr);
return
cacComplex(left
+
cac(middle)
+
right);
}
public
static
double
cac(String
str)
{
if
(str.equals(""))
return
0;
int
ml
=
str.indexOf('*');
int
dl
=
str.indexOf('/');
if
(ml
==
-1
&&
dl
==
-1)
{
return
cacNoMD(str);
}
int
index
=
ml
==
-1
?
dl
:
ml;
//
4+5*6*7+8
String
left
=
str.substring(0,
index);//
4+5
String
m1
=
lastNumber(left);
left
=
left.substring(0,
left.length()
-
m1.length());
String
right
=
str.substring(index
+
1);//
6*7+8
String
m2
=
firstNumber(right);//
m2:6
right
=
right.substring(m2.length());//
*7+8
double
d1
=
Double.parseDouble(m1);
double
d2
=
Double.parseDouble(m2);
double
tmp
=
0;
if
(index
==
ml)
{
tmp
=
d1
*
d2;
}
else
if
(index
==
dl)
{
tmp
=
d1
/
d2;
}
return
cac(left
+
tmp
+
right);
}
private
static
String
lastNumber(String
str)
{
StringBuilder
sb
=
new
StringBuilder();
for
(int
i
=
str.length()
-
1;
i
>=
0;
i--)
{
char
c
=
str.charAt(i);
if
(!Character.isDigit(c)
&&
c
!=
'.')
break;
sb.append(c);
}
return
sb.reverse().toString();
}
private
static
String
firstNumber(String
str)
{
StringBuilder
sb
=
new
StringBuilder();
for
(char
c
:
str.toCharArray())
{
if
(!Character.isDigit(c)
&&
c
!=
'.')
break;
sb.append(c);
}
return
sb.toString();
}
private
static
double
cacNoMD(String
str)
{
double
ret
=
0;
StringBuilder
sb
=
new
StringBuilder();
char
sign
=
'+';
for
(char
c
:
(str
+
"+").toCharArray())
{
if
(!Character.isDigit(c)
&&
c
!=
'.')
{
if
(sb.length()
==
0)
continue;
double
tmp
=
Double.parseDouble(sb.toString());
if
(sign
==
'+')
{
ret
+=
tmp;
}
else
{
ret
-=
tmp;
}
sb
=
new
StringBuilder();
sign
=
c;
}
else
{
sb.append(c);
}
}
return
ret;
}=5\*GB2⑸括號(hào)匹配功能的實(shí)現(xiàn)進(jìn)行括號(hào)配對(duì)并優(yōu)先進(jìn)行括號(hào)內(nèi)運(yùn)算:private
static
double
kuohao(String
str){
Stack<Character>
stack
=new
Stack<Character>();
for(int
i=0;i<str.length();i++){
if(str.charAt(i)=='('||str.charAt(i)==')'){
if(stack.isEmpty()){
stack.push(str.charAt(i));
}else
if(stack.peek()=='('&&str.charAt(i)==')'){
stack.pop();
}else{
stack.push(str.charAt(i));
}
}
}
if(stack.isEmpty()){
return
1;
}else{
return
0;
}
}我負(fù)責(zé)的是驗(yàn)算功能的實(shí)現(xiàn),1.括號(hào)匹配:建立一個(gè)棧stock,自右向左遍歷字符串,當(dāng)匹配到“(”,將“(”放入棧中,繼續(xù)遍歷。當(dāng)匹配到“)”,如果棧頂為“(”,就執(zhí)行stock.pop(),取出棧頂,否則就將字符放入棧中。直到遍歷完字符串。如果??談t匹配成功,否則就算匹配失敗。
2.檢驗(yàn)次數(shù):利用Pattern類,Matcher類,遍歷字符串并檢測(cè)其中中出現(xiàn)4個(gè)隨機(jī)數(shù)的次數(shù),超過1次表明錯(cuò)誤。
3.檢驗(yàn)運(yùn)算式:引入javascript中eval函數(shù),檢驗(yàn)表示式,如果錯(cuò)誤,返回null。五、代碼調(diào)試(1)進(jìn)入游戲界面說明:本界面為游戲初始界面,默認(rèn)難度級(jí)別為初級(jí)。(2)發(fā)牌說明:點(diǎn)擊“發(fā)牌”按鈕,自動(dòng)發(fā)牌,計(jì)時(shí)進(jìn)度條開始滾動(dòng)。(3)輸入驗(yàn)算公式界面說明:驗(yàn)算正確說明:驗(yàn)算錯(cuò)誤(4)沒有來的及輸入表示式,超過限制時(shí)間,頁面顯示為說明:.如果在規(guī)定的時(shí)間內(nèi),玩家沒有點(diǎn)擊驗(yàn)算按鈕,則會(huì)彈出“內(nèi)部錯(cuò)誤”的窗口。(5)歷史記錄說明:每結(jié)束一次游戲會(huì)將歷史記錄在數(shù)據(jù)庫中。六、小結(jié)心得與體會(huì)開始了為期兩周的緊張的java課程設(shè)計(jì),這已經(jīng)是大學(xué)時(shí)代的第四次課程設(shè)計(jì)了,較之之前的三次,感覺這次的與以往大大不同,是利用自己的知識(shí)開發(fā)一個(gè)小游戲,心里著實(shí)興奮了一把,可是這個(gè)設(shè)計(jì)用的是大二下學(xué)期學(xué)的java的知識(shí),不是很理解或是熟練運(yùn)用,因此剛剛開始的時(shí)候,毫無頭緒,感覺好難真的好難,難于上青天。心里障礙阻當(dāng)著我讓我不敢向前邁步。我很怕自己做不好,怕自己不能按時(shí)完成,很怕自己不如其它同學(xué)。內(nèi)心滿是恐懼,被恐懼占具的心靈又怎么能出眾的完成課程設(shè)計(jì)呢?最初進(jìn)行設(shè)計(jì)的時(shí)候,沒有一點(diǎn)頭緒,后來上網(wǎng)查閱,將計(jì)算器和菜單欄制作這兩個(gè)范例看了幾遍。感覺很有收獲,可是對(duì)于進(jìn)程條的設(shè)置還是不清楚,又翻出課件來看重新學(xué)習(xí),經(jīng)與同學(xué)討論,終于弄清了進(jìn)程條的設(shè)置。而對(duì)于編程,是最龐大又棘手的一塊,那是忘得更多了,于是把課本和圖書館借來的參考書重新針對(duì)性的學(xué)了一次,遇到難處先是仔細(xì)的思考然后在向同學(xué)請(qǐng)教。能夠說開始的那么幾天都是在查找資料,翻閱相關(guān)的書籍。在最后添加代碼的時(shí)候還有一些程序不知道怎么寫。于是,于是又利用了網(wǎng)絡(luò)資源,收集里了一些,經(jīng)分析、查詢資料仍有一些地方看不懂。就請(qǐng)教同學(xué),嘗試往對(duì)話框中添加相應(yīng)代碼的方法。根據(jù)一大段的分析,感覺程序執(zhí)行某個(gè)功能,將這段代碼添加到對(duì)應(yīng)位置。所有的代碼添加完后,運(yùn)行、調(diào)試,開始會(huì)出現(xiàn)了很多很多的錯(cuò)誤。逐條進(jìn)行修改,再進(jìn)行運(yùn)行和調(diào)試,有時(shí)候錯(cuò)誤看不懂,就找同學(xué)商量。也不知道錯(cuò)了多少次,改了多少次,終于最后做出了完美的游戲界面。終于完成了設(shè)計(jì)。可是本次課程設(shè)計(jì)是自己第一次開發(fā)小游戲,心理很甜。經(jīng)過此次課程設(shè)計(jì),收獲頗多,最主要的是對(duì)java知識(shí)重新學(xué)習(xí)了一遍,感受到了它的博大精深.首先,編程有了很大的提高,雖然有時(shí)候自己沒有思路,可是能夠借鑒別人的代碼,看別人設(shè)計(jì)的思路,理解的同時(shí)自己小試一下也能夠編出來,因此凡事不能被困難嚇倒,只要有開始,去嘗試。就會(huì)有意想不到的收獲。再次,在運(yùn)行、調(diào)試過程中也學(xué)到了很多,以前編程最怕的就是報(bào)錯(cuò),特別是錯(cuò)誤多了的時(shí)候,感覺毫無頭緒直接頭大,可是編程不可能不出錯(cuò),報(bào)錯(cuò),只要逐一對(duì)付,然后細(xì)心研究改正,終究一切問題都會(huì)迎刃而解的,因此遇到問題,不能急,要心平氣和的去應(yīng)對(duì),才能把所學(xué)的只是真正用于實(shí)際,這不得不說正是我們當(dāng)代大學(xué)生所嚴(yán)重缺乏的,以后的學(xué)習(xí)中更應(yīng)注意。經(jīng)過這次課程設(shè)計(jì),加強(qiáng)了我動(dòng)手、思考和解決問題的能力。比如細(xì)心還有耐心還有對(duì)自己有一定的自信等等。而且課程設(shè)計(jì)同時(shí)也是對(duì)課本知識(shí)的鞏固和加強(qiáng),由于課本上的知識(shí)太多,平時(shí)只有課間的學(xué)習(xí)是遠(yuǎn)遠(yuǎn)不夠的,因此以后要多花時(shí)間溫故知新。兩個(gè)星期的課程設(shè)計(jì),過程曲折可謂一語難盡。在此期間我也從毫無頭緒到一度熱情高漲。到從開始時(shí)滿富盛激情到調(diào)不出結(jié)果的焦頭爛額,到最后慧心的笑,點(diǎn)點(diǎn)滴滴無不令我回味無長(zhǎng)??傊畬?duì)我而言,知識(shí)上的收獲重要,精神上的豐收更加可喜。挫折是一份財(cái)富,經(jīng)歷是一份擁有。這次課設(shè)必是我人生旅途上一個(gè)非常美好的回憶!參考文獻(xiàn)[1]耿祥義,張躍平.Java面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社,.11.七、附錄importjava.awt.BorderLayout;importjava.awt.EventQueue;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.border.EmptyBorder;importjava.awt.Color;importjavax.swing.JButton;importjavax.swing.JComboBox;importjavax.swing.JProgressBar;importjavax.swing.JScrollPane;importjavax.swing.SwingWorker;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.util.List;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.TimeUnit;importjava.util.concurrent.TimeoutException;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importjava.awt.Rectangle;importjavax.swing.border.CompoundBorder;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;importjava.awt.Font;importjavax.swing.ImageIcon;importjava.util.Random;importjava.util.Stack;importjavax.swing.JTextField;importjavax.swing.SwingConstants;importjavax.swing.JList;importjavax.swing.JTable;importjavax.swing.table.DefaultTableModel;importjavax.script.ScriptEngine;importjavax.script.ScriptEngineManager;importjavax.script.ScriptException;importjavax.swing.DefaultComboBoxModel;importjava.awt.event.ItemListener;importjava.awt.event.ItemEvent;importjava.sql.*;publicclassMyFrameextendsJFrame{ privateJPanelcontentPane; privateJProgressBarprogressBar; privateJLabellabel_1; privateJLabellabel_2; privateJLabellabel_3; privateJLabellabel_4; MyThreadthread; privateJTextFieldtextField; privateJScrollPanescrollPane; privateJTabletable; JComboBoxcomboBox; JButtonbutton; intdifficulty=0; inttotal=0; intcorrect=0; inttime=0; longfirsttime; longcurrenttime; intr1,r2,r3,r4; /** *Launchtheapplication. */ publicstaticvoidmain(String[]args)throwsException{ EventQueue.invokeLater(newRunnable(){ publicvoidrun(){ try{ MyFrameframe=newMyFrame(); frame.setVisible(true); }catch(Exceptione){ e.printStackTrace(); } } }); } privatestaticdoublecacComplex(Stringstr){ if(str.equals("")) return0; //System.out.println("CAC:"+str); str=str.replaceAll("[\\(]","(").replaceAll("[\\)]",")"); intcl=str.lastIndexOf('('); if(cl==-1) returncac(str); intcr=str.indexOf(')',cl); Stringleft=str.substring(0,cl); Stringright=str.substring(cr+1); Stringmiddle=str.substring(cl+1,cr); returncacComplex(left+cac(middle)+right); } publicstaticdoublecac(Stringstr){ if(str.equals("")) return0; intml=str.indexOf('*'); intdl=str.indexOf('/'); if(ml==-1&&dl==-1){ returncacNoMD(str); } intindex=ml==-1?dl:ml; //4+5*6*7+8 Stringleft=str.substring(0,index);//4+5 Stringm1=lastNumber(left); left=left.substring(0,left.length()-m1.length()); Stringright=str.substring(index+1);//6*7+8 Stringm2=firstNumber(right);//m2:6 right=right.substring(m2.length());//*7+8 doubled1=Double.parseDouble(m1); doubled2=Double.parseDouble(m2); doubletmp=0; if(index==ml){ tmp=d1*d2; }elseif(index==dl){ tmp=d1/d2; } returncac(left+tmp+right); } privatestaticStringlastNumber(Stringstr){ StringBuildersb=newStringBuilder(); for(inti=str.length()-1;i>=0;i--){ charc=str.charAt(i); if(!Character.isDigit(c)&&c!='.') break; sb.append(c); } returnsb.reverse().toString(); } privatestaticStringfirstNumber(Stringstr){ StringBuildersb=newStringBuilder(); for(charc:str.toCharArray()){ if(!Character.isDigit(c)&&c!='.') break; sb.append(c); } returnsb.toString(); } privatestaticdoublecacNoMD(Stringstr){ doubleret=0; StringBuildersb=newStringBuilder(); charsign='+'; for(charc:(str+"+").toCharArray()){ if(!Character.isDigit(c)&&c!='.'){ if(sb.length()==0) continue; doubletmp=Double.parseDouble(sb.toString()); if(sign=='+'){ ret+=tmp; }else{ ret-=tmp; } sb=newStringBuilder(); sign=c; }else{ sb.append(c); } } returnret; } privatestaticdoublekuohao(Stringstr){ Stack<Character>stack=newStack<Character>(); for(inti=0;i<str.length();i++){ if(str.charAt(i)=='('||str.charAt(i)==')'){ if(stack.isEmpty()){ stack.push(str.charAt(i)); }elseif(stack.peek()=='('&&str.charAt(i)==')'){ stack.pop(); }else{ stack.push(str.charAt(i)); } } } if(stack.isEmpty()){ return1; }else{ return0; } } privateintshuzi(Stringstr){ intcount1=0; Patternp1=Ppile(String.valueOf(r1)); Matcherm1=p1.matcher(str); while(m1.find()){ count1++; } intcount2=0; Patternp2=Ppile(String.valueOf(r2)); Matcherm2=p2.matcher(str); while(m2.find()){ count2++; } intcount3=0; Patternp3=Ppile(String.valueOf(r3)); Matcherm3=p3.matcher(str); while(m3.find()){ count3++; } intcount4=0; Patternp4=Ppile(String.valueOf(r4)); Matcherm4=p1.matcher(str); while(m4.find()){ count4++; } // ScriptEngineManagersem=newScriptEngineManager();// ScriptEnginese=sem.getEngineByName("js");// //Strings=textField.getText().toString();// intresult=0;// //longstartTime=System.currentTimeMillis();// try{// result=(int)(se.eval(str));// // }catch(ScriptExceptione1){// return0;// } //System.out.println(result); if(count1==1&&count2==1&&count3==1&&count4==1){ return1; }else{ return0; } } /** *Createtheframe. */ publicMyFrame(){ setResizable(false); setTitle("24\u70B9\u6E38\u620F"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100,100,726,392); contentPane=newJPanel(); contentPane.setBackground(newColor(0,128,0)); contentPane.setBorder(newEmptyBorder(5,5,5,5)); setContentPane(contentPane); contentPane.setLayout(null); progressBar=newJProgressBar(); progressBar.setBounds(102,281,383,29); progressBar.setMaximum(60); contentPane.add(progressBar); JButtonbtnNewButton=newJButton("\u53D1\u724C"); btnNewButton.setBounds(32,227,68,21); btnNewButton.setFont(newFont("宋體",Font.PLAIN,15)); btnNewButton.addMouseListener(newMouseAdapter(){ @Override publicvoidmouseClicked(MouseEvente){ total++; firsttime=System.currentTimeMillis(); textField.setEnabled(true); button.setEnabled(true); comboBox.setEnabled(false); Randomrandom=newRandom(); r1=random.nextInt(10)+1; r2=random.nextInt(10)+1; while(r2==r1){ r2=random.nextInt(10)+1; } r3=random.nextInt(10)+1; while(r3==r2||r3==r1){ r3=random.nextInt(10)+1; } r4=random.nextInt(10)+1; while(r4==r1||r4==r2||r4==r3){ r4=random.nextInt(10)+1; } Strings1="C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\1\\"+String.valueOf(r1)+".jpg"; label_1.setIcon(newImageIcon(s1)); Strings2="C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\2\\"+String.valueOf(r2)+".jpg"; label_2.setIcon(newImageIcon(s2)); Strings3="C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\3\\"+String.valueOf(r3)+".jpg"; label_3.setIcon(newImageIcon(s3)); Strings4="C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\4\\"+String.valueOf(r4)+".jpg"; label_4.setIcon(newImageIcon(s4)); System.out.println(r1+","+r2+","+r3+","+r4); if(thread!=null&&thread.isAlive()==true){ errupt(); } thread=newMyThread(progressBar,label_1,label_2,label_3,label_4,textField,difficulty,button); thread.start(); } }); contentPane.add(btnNewButton); JLabellabel=newJLabel("\u8017\u65F6\u6807\u5FD7"); label.setBounds(37,283,55,27); label.setForeground(newColor(255,255,255)); contentPane.add(label); label_1=newJLabel(""); label_1.setBounds(32,21,105,172); label_1.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\1.jpg")); contentPane.add(label_1); label_2=newJLabel(""); label_2.setBounds(147,21,105,172); label_2.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\2.jpg")); contentPane.add(label_2); label_3=newJLabel(""); label_3.setBounds(262,21,105,172); label_3.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\1.jpg")); contentPane.add(label_3); label_4=newJLabel(""); label_4.setBounds(379,21,105,172); label_4.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\2.jpg")); contentPane.add(label_4); textField=newJTextField(); textField.setEnabled(false); textField.setBounds(179,228,124,21); contentPane.add(textField); textField.setColumns(10); button=newJButton("\u9A8C\u7B97"); button.setEnabled(false); button.addMouseListener(newMouseAdapter(){ @Override publicvoidmouseClicked(MouseEvente){ Strings=textField.getText().toString(); System.out.println(kuohao(s)); System.out.println(cacComplex(s)); System.out.println(shuzi(s)); if(cacComplex(s)==24&&kuohao(s)==1&&shuzi(s)==1){ JOptionPane.showMessageDialog(null,"恭喜,你成功答對(duì)了一題","Message",JOptionPane.PLAIN_MESSAGE); currenttime=System.currentTimeMillis(); if(time>currenttime-firsttime||time==0){ time=(int)(currenttime-firsttime); } correct++; textField.setText(""); label_1.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\1.jpg")); label_2.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\2.jpg")); label_3.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\1.jpg")); label_4.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\2.jpg")); errupt(); progressBar.setValue(0); textField.setEnabled(false); button.setEnabled(false); }else{ JOptionPane.showMessageDialog(null,"抱歉,你答錯(cuò)了","Message",JOptionPane.PLAIN_MESSAGE); textField.setText(""); label_1.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\1.jpg")); label_2.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\2.jpg")); label_3.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\1.jpg")); label_4.setIcon(newImageIcon("C:\\Users\\zcs\\Workspaces\\MyEclipseCI\\pukeImage\\2.jpg")); errupt(); progressBar.setValue(0); textField.setEnabled(false); button.setEnabled(false); } } }); button.setBounds(307,228,68,21); button.setFont(newFont("宋體",Font.PLAIN,15)); contentPane.add(button); JButtonbutton_1=newJButton("\u7ED3\u675F\u6E38\u620F"); button_1.setBounds(379,228,105,21); button_1.addMouseListener(newMouseAdapter(){ @Override publicvoidmouseClicked(MouseEvente){ //輸入數(shù)據(jù)庫 if(total!=0){ Connectionconn=null; PreparedStatementpstmt=null; try{ Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql:///test","root",""); pstmt=conn.prepareStatement("insertintorecordvalues(?,?,?,?)"); pstmt.setInt(1,total); pstmt.setInt(2,correct); pstmt.setInt(3,difficulty); pstmt.setInt(4,time); pstmt.executeUpdate(); }catch(ClassNotFoundExceptione1){ e1.printStackTrace(); }catch(SQLExceptione1){ e1.printStackTrace(); }finally{ try{ pstmt.close(); conn.close(); }catch(SQLExceptione1){ e1.printStackTrace(); } } } MyFrameframe=newMyFrame(); frame.setVisible(true); setVisible(false); if(thread!=null&&thread.isAlive()==true){ errupt(); } } }); button_1.setFont(newFont("宋體",Font.PLAIN,15)); contentPane.add(button_1); JLabellblNewLabel=newJLabel("\u8F93\u5165\u7B97\u5F0F\uFF1A"); lblNewLabel.setBounds(102,227,75,21); lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); lblNewLabel.setForeground(Color.WHITE); lblNewLabel.setFont(newFont("宋體",Font.PLAIN,15)); contentPane.add(lblNewLabel); scrollPane=newJScrollPane(); scrollPane.setBounds(495,197,215,108); contentPane.add(scrollPane); finalString[]columnNames={"題數(shù)","正確率","難度","最短時(shí)間"}; //數(shù)據(jù)庫輸出 Objectdata[][]; data=newObject[5][4]; Connectionconn=null; Statementstmt=null; ResultSetrs=null; try{ Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql:///test","root",""); stmt=conn.createStatement(); rs=stmt.executeQuery("select*fromrecord"); intrecordx=0; while(rs.next()){ data[recordx][0]=rs.getString("total"); data[recordx][1]=String.valueOf(Float.parseFloat(rs.getString("correct"))/Float.parseFloat(rs.getString("total"))); if(Integer.valueOf(rs.getString("difficulty"))==0){ data[recordx][2]="初級(jí)"; }elseif(Integer.valueOf(rs.getString("difficulty"))==1){ data[recordx][2]="中級(jí)"; }elseif(Integer.valueOf(rs.getString("difficulty"))==2){ data[recordx][2]="高級(jí)"; } //data[recordx][2]=rs.getString("difficulty"); if(Integer.valueOf(rs.getString("time"))==0){ data[recordx][3]="null"; }els
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能機(jī)器人研發(fā)與銷售合作合同
- 中秋月餅購(gòu)銷合同書
- 無人機(jī)技術(shù)開發(fā)與應(yīng)用作業(yè)指導(dǎo)書
- 農(nóng)業(yè)休閑旅游與三農(nóng)深度融合策略研究
- 化妝品買賣合同
- 房屋買賣合同協(xié)議書
- 個(gè)人地皮轉(zhuǎn)讓協(xié)議書
- 人力資源管理關(guān)鍵步驟指導(dǎo)書
- 國(guó)際貿(mào)易進(jìn)口合同履行流程
- 企業(yè)內(nèi)訓(xùn)師工作指導(dǎo)書
- 校園安全視頻監(jiān)控維保方案
- 政府購(gòu)買報(bào)刊訂閱服務(wù)協(xié)議
- 第三單元名著導(dǎo)讀《駱駝祥子》整本書閱讀教學(xué)設(shè)計(jì)+2023-2024學(xué)年統(tǒng)編版語文七年級(jí)下冊(cè)
- 工程數(shù)學(xué)試卷及答案
- DB11T 211-2017 園林綠化用植物材料 木本苗
- 《PLC應(yīng)用技術(shù)(西門子S7-1200)第二版》全套教學(xué)課件
- 第01講 直線的方程(九大題型)(練習(xí))
- 2024上海申康醫(yī)院發(fā)展中心招聘2人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 《氣排球》教學(xué)大綱
- 市政道路監(jiān)理大綱34368
- 《基礎(chǔ)會(huì)計(jì)》教學(xué)課件-整套教程電子講義
評(píng)論
0/150
提交評(píng)論