《java課程設(shè)計報告 計算器》由會員分享,可在線閱讀,更多相關(guān)《java課程設(shè)計報告 計算器(14頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、目 錄
一、課設(shè)任務(wù)及要求 1
二、需求分析 1
三、設(shè)計思路 2
四、詳細設(shè)計 4
五、運行調(diào)試與分析討論 8
六、設(shè)計體會與小結(jié) 12
七、參考文獻 13
一、課設(shè)任務(wù)及要求
設(shè)計一個圖形界面(GUI)的計算器應(yīng)用程序,完成簡單的算術(shù)運算。
設(shè)計要求 設(shè)計的計算器應(yīng)用程序可以完成加法、減法、乘法、除法和取余運算。且有小數(shù)點、正負號、求倒數(shù)、退格和清零功能。
本程序主要練習(xí)使用布局管理器設(shè)計一個計算器的界面,并練習(xí)使用事件監(jiān)聽器處理數(shù)據(jù)的輸入,并完成相關(guān)的計算。
除上述要求外,本次設(shè)計的程序還附加了進制轉(zhuǎn)換和求平方,求立方的功能。
二、需求分析
2、日常生活中經(jīng)常需要用到計算器,比如科學(xué)計算、數(shù)值計算、會計業(yè)務(wù)等,在Applet中實現(xiàn)一個精巧實用的計算器,可以讓用戶在使用網(wǎng)站服務(wù)的同時,可以很方便地進行數(shù)據(jù)運算,可增加頁面的實用性,同時讓用戶的操作也更方便與快捷。本項目需要實現(xiàn)一個具有四則運算的計算器,擁有加、減、乘、除功能,并且還要具備求倒數(shù),小數(shù)點,求余,退格和清零的功能。除此之外,本次設(shè)計的程序添加轉(zhuǎn)進制和求平方與立方功能。
三、設(shè)計思路
本應(yīng)用程序繼承自框架類(Frame),此程序使用Frame布局管理器BorderLayout,將單行文本框加入到“North”區(qū)域,包含各種按鈕的面板buttonPanel加入到”Cente
3、r”區(qū)域。
還可以將進制轉(zhuǎn)換的面板與單行文本框放一塊。
包含各種按鈕的面板buttonPanel 采用n行n列的網(wǎng)格布局,然后將數(shù)字按鈕和運算符按鈕以及控制按鈕添加到面板中。同時注冊按鈕事件監(jiān)聽器。如:
Button b=new Button();
b.addActionListener(事件監(jiān)聽器);
事件監(jiān)聽器中的事件處理方法void actionPerformed(ActionEvent e)完成主要的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件(”0”,”1”,”2”…”8”,”9”)、運算符按鈕事件(”+”,”-“,”*”,”/”,”%”)、正負號按鈕事件(”+/-
4、“)、小數(shù)點按鈕事件(”.”)、等號按鈕事件(”=”)、求倒按鈕事件(”1/x”)、求平方按鈕事件(“x2”)、求立方按鈕事件(“x3”)、退格按鈕事件(”退格”)、清楚按鈕事件(“C”),進制轉(zhuǎn)換事件。
在事件處理觸發(fā)按鈕事件時,要進一步分析,是重新開始計算時觸發(fā)的按鈕事件還是計算中間觸發(fā)的按鈕事件。
計算器完成的是一個數(shù)學(xué)表達式,如:3+2,所以可以采用不同的變量來存儲數(shù)字和字符,如3,+,2分別存儲在變量pre,operatorchar,和 current中,最后運算時,要按住按鈕“=”才能運算,當(dāng)按住運算符按鈕時便將之前輸入的數(shù)字存儲在變量 pre中,并將運算符存儲在operato
5、rchar中,當(dāng)按住等號按鈕時,便將后輸入的數(shù)字存儲到current中并根據(jù)所輸入的運算符進行相關(guān)運算。
本應(yīng)用程序中的數(shù)字按鈕和運算符按鈕可以分別定義兩個不同的對象組件。如:數(shù)字按鈕button,可以用數(shù)組button[]存放,數(shù)組按鈕與數(shù)字聯(lián)系在一起,如當(dāng)按下button[1]時,也相當(dāng)與在計算器中輸入數(shù)字1。預(yù)算符用變量operatorchar來存放。
工作原理:
將數(shù)字鍵與其他鍵分別進行監(jiān)聽,一個單行文本框用來顯示輸入的數(shù)據(jù),inputstring用來存放每次錄入的數(shù)據(jù),數(shù)據(jù)與字符錄入都通過按鍵來觸發(fā)事件,單行文本框設(shè)置的不可編輯(這樣可靠性很高)。然后對所有的button來進
6、行監(jiān)聽,當(dāng)按到“+,-,*,/,%”按鈕時,將第一輸入的數(shù)字存儲到pre,輸入的運算符通過變量operatorchar來存儲,當(dāng)再輸入數(shù)字后遇到“=”時,便將運算符后的數(shù)字存儲到變量“current”里,接著調(diào)用“+,-,*,/,%”運算函數(shù)進行 pre operatorchar current之間的運算,將結(jié)果用 result保存起來,并顯示在單行文本框中。
這里需要聲明的是每次輸入的數(shù)據(jù)都要進行類型轉(zhuǎn)換,將字符串型的數(shù)據(jù)轉(zhuǎn)換成 double型才能進行運算,設(shè)計一個轉(zhuǎn)換函數(shù),并將轉(zhuǎn)換后的數(shù)據(jù)用 temp 存儲,所以數(shù)據(jù)存儲起來比較簡單,也不會有什么語法上的錯誤。誠然,通過這樣的數(shù)據(jù)存儲方式
7、就可以很方便的加進其他的擴展功能,如要進行求倒數(shù)的運算,只要將1.0/temp 重新賦值給temp便可以實現(xiàn)。
退格按鈕事件只需將輸入的數(shù)據(jù)字符型重新編輯后把最后的一個數(shù)字消去顯示出來,清空按鈕只需將所以變量初始化。
求平方與立方可調(diào)用系統(tǒng)Math類的靜態(tài)方法pow(),進制轉(zhuǎn)換同樣與其他button類似分別進行事件監(jiān)聽,設(shè)計一個內(nèi)部私類來進行進制轉(zhuǎn)換,觸發(fā)事件后調(diào)用類中方法就行了。
功能規(guī)劃:
(1)基本運算;
(2)進制運算,如二進制和十進制數(shù),十進制數(shù)和十六進制數(shù)之間的轉(zhuǎn)換;
(3)類設(shè)計。Calculator和Calculate,Calculate是個內(nèi)部類,功能是進行
8、進制的轉(zhuǎn)換,Calculator是初始化界面,以及響應(yīng)用戶的操作。
四、詳細設(shè)計
1.數(shù)據(jù)分析
計算器的程序設(shè)計,必然會有數(shù)據(jù)的輸入,其中數(shù)據(jù)包括運算符和數(shù)字,均要通過計算器上的button按鈕選項按鍵輸入進去,里面錄入的必然是字符型的數(shù)據(jù),如果要進行運算,要將輸入的字符型轉(zhuǎn)換成double型,以防止運算出錯。如可以這樣定義一個轉(zhuǎn)換函數(shù):
public double formatConvert(String inputString)/*將字符串轉(zhuǎn)換為double類型*/
{
double temp = 0.0;
temp = Double.pars
9、eDouble(inputString);
return temp;
}
2.算法思路
大致思路已經(jīng)在上文有比較詳細的介紹,主要是通過將數(shù)字鍵和其他符號區(qū)別開來進行監(jiān)聽,可以Pre變量存儲運算符前的數(shù)據(jù),operatorchar存儲運算符,current存儲運算符后的數(shù)據(jù)。當(dāng)按住運算符按鈕時便將之前輸入的數(shù)字存儲在變量 pre中,并將運算符存儲在operatorchar中,當(dāng)按住等號按鈕時,便將后輸入的數(shù)字存儲到current中并根據(jù)所輸入的運算符進行相關(guān)運算。每次輸入的數(shù)字數(shù)據(jù)將進行類型轉(zhuǎn)換,將inputstring的值賦值給temp,這樣便可以直接通過對
10、temp的運算來實現(xiàn)對 X的平方,立方,倒數(shù)和進制轉(zhuǎn)換了。
3.類設(shè)計
class Calculator extends JFrame implements ActionListener
{
} //Calculator是初始化界面,以及響應(yīng)用戶的操作。
Calculate是個內(nèi)部類,功能是進行進制的轉(zhuǎn)換,
private class Calculate{
public Calculate()throws NumberFormatException{}
//轉(zhuǎn)換為二進制
//轉(zhuǎn)換為八進制
//轉(zhuǎn)換為十六進制
}
4.功能設(shè)計
主要
11、程序流程圖:
主要代碼及其注釋:
//響應(yīng)用戶點擊按鈕事件
//將數(shù)字按鈕鍵與數(shù)字一一對應(yīng)起來
public void actionPerformed(ActionEvent e) //數(shù)字按鈕事件
{
for(int i=0;i<10;i++)
{ if(e.getSource() == button[i])
{ inputString +=i; //當(dāng)按鍵是數(shù)字N,監(jiān)聽到輸入的數(shù)字
input.setText(inputString); //也是N
}
}
12、
if(e.getSource()==clearButton) //清空按鈕事件
{ pre = 0.0; //將所有的變量都初始化
current = 0.0;
result = 0.0;
operatorChar = ' ';
inputString = " ";
input.setText("0.0");
decimalButton.setSelected(true); //十進制按鈕選中
}
if(e.getSource()==backspaceButto
13、n) //退格
{ if(inputString.length()>0) //判斷有數(shù)據(jù)輸入
{ inputString = inputString.substring(0, inputString.length()-1);
input.setText(inputString); //顯示退格后的結(jié)果
}
}
if(e.getSource() == plusButton){ setValue('+');}//加法
if(e.getSource() == subtractButton){setValue('-');}/
14、/減法
if(e.getSource() == multiButton){setValue('*');}//乘法
if(e.getSource() == divisionButton){setValue('/');}//除法
if(e.getSource() == modButton){ setValue('%');}//求余
//加減乘除求余都調(diào)用setvalue()函數(shù)
//setVlaue()
private void setValue(char opChar)//賦值pre和operatorChar
{ operatorChar = opChar;
p
15、re = formatConvert(inputString);
input.setText(opChar+"");
inputString = " ";
}
//等號(運算)事件
if(e.getSource()==equalButton)
{ current = formatConvert(inputString);//賦值給current
doOperator(); //調(diào)用計算函數(shù)
input.setText(""+result); //顯示運算結(jié)果
inputString = ""+resu
16、lt;
decimalButton.setSelected(true);
}
// 計算函數(shù) DoOperator():
/*該方法用于根據(jù)用戶的輸入進行數(shù)值計算,得到計算結(jié)果*/
public double doOperator()
{ switch(operatorChar) //判斷運算符
{ case '+':result = pre + current;break; //加運算
case '-':result = pre - current;break; //減運算
case '*':result = pr
17、e * current;break; //乘法運算
case '/':result = pre / current;break; //除法運算
case '%':result = pre % current;break; //求余運算
}
return result; //返回結(jié)果
}
//小數(shù)點事件
if(e.getSource()==pointButton)//小數(shù)點
{ int index = inputString.indexOf('.');
if(index == -1)//如果數(shù)字中沒有小數(shù)點.,則添加小數(shù)點
18、
{ inputString += ".";}
}
運行界面:
可見下文。
五、運行調(diào)試與分析討論
1)運行程序后顯示界面如下,可在計算器面板上按鍵,單項文本框不可編輯的:
2)進行簡單的加減乘除運算,如 3+2:
3)將上式的結(jié)果 5.0 % 2運算:
3)進制運算轉(zhuǎn)換,如 在十進制下輸入 63,將它轉(zhuǎn)換成其他的進制。
轉(zhuǎn)換成二進制:
轉(zhuǎn)換成八進制:
轉(zhuǎn)換成十六進:
4)異常處理:
異常處理提示數(shù)據(jù)轉(zhuǎn)換出錯!
六、設(shè)計體會與小結(jié)
設(shè)計,給人以創(chuàng)作的沖動,但是也要為這次沖動承擔(dān)一定的痛苦,但
19、事后會發(fā)現(xiàn),這一切都是值得的。本次的JAVA課程設(shè)計讓我對JAVA的理論知識又有更深一步的了解,溫故而知新,開始設(shè)計之時完全沒頭緒,對于理論知識學(xué)習(xí)不夠扎實的我深感“書到用時方恨少”,只好再把書中介紹的相關(guān)的知識重新閱讀了一番,對知識系統(tǒng)而全面進行了梳理,遇到難處先是苦思冥想再向同學(xué)請教,終于熟練掌握了基本理論知識,而且領(lǐng)悟諸多平時學(xué)習(xí)難以理解掌握的較難知識,學(xué)會了如何思考的思維方式,找到了設(shè)計的靈感。
這次課程設(shè)計使我感到收獲不小,使我對JAVA的設(shè)計過程有了更深的了解,促進了對理論知識的消化與吸收,也鞏固和完善了本門課程的知識體系結(jié)構(gòu)。設(shè)計過程中遇到了不少的麻煩,在調(diào)試過程中也出現(xiàn)了一些
20、平時學(xué)習(xí)過程中,沒有遇到過的錯誤,通過在課程設(shè)計中老師的耐心指導(dǎo)以及查閱相關(guān)的資料,努力的思考,一一解決了遇到的問題,通過這些問題,使我對課本知識的理解也更加深刻了。
通過實踐可以讓我發(fā)現(xiàn)更多平時學(xué)習(xí)中不可能遇到的問題,提高綜合能力,因此在以后的學(xué)習(xí)過程中,我將要通過更多的實踐來提高自己,來加強完善知識結(jié)構(gòu)體系。
綜上所述,課程設(shè)計誠然是一門專業(yè)課,給我很多專業(yè)知識以及專業(yè)技能上的提升,同時又是一門講道課,一門辯思課,給了我許多道理,給了我很多思想,給了我莫大的空間。大學(xué)教育當(dāng)如此。
七、參考文獻
[1] 盧曉惠主編.《Java 編程指導(dǎo)》.西安:西安科技大學(xué)出版社. 2006
[2] 張國寧主編 .《Java程序設(shè)計案例教程 》.北京:中國水利出版社.2007
[3] 黃明 ,梁旭主編.《Java信息系統(tǒng)設(shè)計與開發(fā)實例》.北京:機械工業(yè)出版社.2006
[4]