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