




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、學(xué)號2016-2017學(xué)年 第二學(xué)期第2頁金融IT入門-程序設(shè)計課程設(shè)計報告題目:用Python編寫簡易計算器程序?qū)W號:指導(dǎo)教師:中國地質(zhì)大學(xué)長城學(xué)院XX系2017年 月3日目錄一總體概述:二. 設(shè)計目標(biāo):三. 程序流程圖: 四程序代碼:五.設(shè)計體會:評分 細(xì)則項 分 評秀好 良等 中差現(xiàn)況 主冃 完2 z(是4z(簡 短日月 名 年評分等級備注隼 中 良設(shè)計內(nèi)容 - 2 -1. 課程設(shè)計目的: - 2 -2.課程設(shè)計任務(wù): - 2 -3. 創(chuàng)新要求: - 2 -4. 設(shè)計要求 : - 2 -原理與分析 - 2 -1. 開發(fā)的技術(shù)及功能 - 2 -2. 設(shè)計思路 - 3 -3. 設(shè)計效果圖 -
2、 3 -三、 設(shè)計過程 - 3 -1. 程序思路: - 3 -2. 功能實現(xiàn): - 4 -1)加減乘除求余以及指數(shù)運算 - 4 -2)其他運算 - 5 -3)主要方法說明 - 6 -4)程序流程圖 - 6 -3. 算法思路: - 7 -4. 數(shù)據(jù)分析: - 8 -四、設(shè)計結(jié)果與分析 - 8 -1運行調(diào)試 -8 -1)進(jìn)行加減乘除求余以及指數(shù)運算 - 8 -2)求倒 - 9 -3)退格 - 10 -4)清零 - 10 -5)求余弦、求正切、對e求幕、求平方根、求自然對數(shù)、求倒運算 11-6)連續(xù)運算(例: 2*3*4=24.0 ) - 11 -7)異常處理(例:求倒時輸入數(shù)為0) - 12 -五
3、、 設(shè)計體會與小結(jié) - 13 -六、參考文獻(xiàn) - 13 -七、源程序 - 14 -、設(shè)計內(nèi)容1. 課程設(shè)計目的:1)掌握 Java 語言的程序設(shè)計方法;2)理論聯(lián)系實際,進(jìn)一步提高學(xué)生的軟件開發(fā)技術(shù);3)培養(yǎng)學(xué)生分析、解決問題的能力;4)提高學(xué)生實踐論文撰寫能力。2. 課程設(shè)計任務(wù):1)設(shè)計的計算器應(yīng)用程序可以完成加法、 減法、乘法、除法以及取余運算 (可 以進(jìn)行浮點數(shù)和負(fù)數(shù)的運算) ;2)有求倒數(shù)、退格和清零功能3. 創(chuàng)新要求:能進(jìn)行正切、余弦,以及求平方根、指數(shù)(包括對e)、自然對數(shù)運算。圖形界面采用繼承 windowadapter 類,采取調(diào)用類方法來注冊監(jiān)聽!4. 設(shè)計要求 :1)設(shè)計
4、的計算器應(yīng)用程序可以完成加法、減法、乘法、除法和取余運算。且 有小數(shù)點、正負(fù)號、求倒數(shù)、退格和清零功能。2)課程設(shè)計可選用Eclipse、JBuilder、NetBeans等作為開發(fā)平臺以提高開發(fā)效 率,通過資料查閱和學(xué)習(xí)盡可能熟練掌握其中一種集成開發(fā)環(huán)境。3 )認(rèn)真按時完成課程設(shè)計報告,課程設(shè)計報告內(nèi)容包括:設(shè)計任務(wù)與要求、 需求分析、 設(shè)計思路、 詳細(xì)設(shè)計、 運行調(diào)試與分析討論和設(shè)計體會與小結(jié)六個部 分。二、原理與分析1. 開發(fā)的技術(shù)及功能- 3 -本課程設(shè)計是要做一個圖形界面的計算器,其界面主要是由swing組件中的控件構(gòu)成。程序?qū)崿F(xiàn)了計算器的基本功能有:加、減、乘、除基本算術(shù)運算(可
5、以進(jìn)行浮點和負(fù)數(shù)運算)和sin、cos、tan等三角函數(shù)求值運算,同時能進(jìn)行指 數(shù)運算和自然對數(shù)運算,還有求倒數(shù)、退格和清零功能。2. 設(shè)計思路設(shè)計這個計算器主要是參考Win dows操作系統(tǒng)中自帶的計算器,由于編者水 平和時間的限制,不能將計算器設(shè)計到科學(xué)型及其他更復(fù)雜的類型,在設(shè)計過程中還參考了一些其他的優(yōu)秀設(shè)計。 但本計算器除了常用的加減乘除(可以進(jìn)行浮 點和負(fù)數(shù)運算)這些基本運算外,還有求余、求倒、退格、清零,甚至還能進(jìn)行 一些復(fù)雜科學(xué)的運算,比如余弦(cos)、正切(tan)、指數(shù)運算(pow)、自然對 數(shù)運算(log)、求平方根(sqrt)以及對e的指數(shù)運算(exp),并且還能進(jìn)行
6、連 續(xù)運算。總體上說來,本計算器設(shè)計簡單,代碼很少,程序很小,但功能卻很強 大,這是同類計算器所不具備的。3. 設(shè)計效果圖設(shè)計時先在設(shè)計界面中添加按鈕等控件,后在按鈕的actionPeformed事件 中添加代碼完成其功能其中調(diào)用了Java類中的Math函數(shù)庫以及各種字符串操作。設(shè)計的界面如下:圖一計算器運行界面三、設(shè)計過程1. 程序思路:1)本應(yīng)用程序繼承自框架類(JFram®,容器 Con tai ner c采用BorderLayout邊 緣布局,將單行文本框加入到“ North”區(qū)域,包含各種按鈕的面板JPa nel p加入 到”Center”區(qū)域。包含各種按鈕的面板 JPan
7、el p采用3行6列的網(wǎng)格布局,然后 將數(shù)字按鈕和運算符按鈕以及控制按鈕用一個 for 循環(huán)添加到面板中同時注冊按 鈕事件監(jiān)聽器。如:Button b=new Button();b.addActionListener(事件監(jiān)聽器); 2)事件監(jiān)聽器中的事件處理方法 void actio nPeformed(Acti on Eve nt evt)完成主要 的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件 ”2” ” ”9”、運算符按鈕事件(”、 正負(fù)號按鈕事件(”+/-“、小數(shù)點按鈕事件(”.”)、等號按鈕事件(”=”、求倒 按鈕事件(”求倒”)、退格按鈕事件(”退格”、清除按鈕事件(C”
8、、正切(tan)、 余弦(cos),以及求平方根(sqrt)、指數(shù) (pow)、對e的指數(shù)(exp)、對數(shù)運 算( log、。3、在事件處理,觸發(fā)按鈕事件時,先判斷是或是數(shù)字是或是“-/+ ”是或是“ . ”是的話就將負(fù)號“ -” 、數(shù)字、小數(shù)點“ .”分別寫入文本框并存放在 sum 中, 然后判斷是或是“退格” 、“求倒”等,是的話進(jìn)行相應(yīng)的處理,都不是的話則跳 到doOperation()執(zhí)行運算同時將運算符存放在 preOperate沖。觸發(fā)按鈕事件時, 要進(jìn)一步分析,是重新開始計算時觸發(fā)的按鈕事件還是計算中間觸發(fā)的按鈕事 件。4、計算器完成的是一個數(shù)學(xué)表達(dá)式,如: 32,所以可以采用一
9、個數(shù)組來存儲 數(shù)字或字符,如 3, 2 分別存儲在數(shù)組中,最后運算時,可以一一取出來進(jìn) 行運算。5、利用按鈕設(shè)計計算器的各個運算符和操作符,通過按鈕的事件處理實現(xiàn)按鈕 計算功能。6、利用文本框顯示操作數(shù)和運算結(jié)果2. 功能實現(xiàn):1) 加減乘除求余以及指數(shù)運算void doOperation()double m=Double.parseDouble(x.getText();if(preOperater.equals("") sum=m; /無前一操作,結(jié)果為剛輸入數(shù) /將結(jié)果與文本框中的數(shù)據(jù)按照前一個運算符運算 if(preOperater.equals("+&qu
10、ot;) sum=sum+m; /加法運算 if(preOperater.equals("-") sum=sum-m; /減法運算 if(preOperater.equals("*") sum=sum*m; /乘法運算 if(preOperater.equals("/") sum=sum/m; /除法運算 if(preOperater.equals("%") sum=sum%m; /求余 if(preOperater.equals("pow") sum=Math.pow(sum, m); /求冪
11、,指數(shù)運算- 7 -2)其他運算I、n>亶、V、求平方根Void sqrt() double m=Double.parseDouble(x.getText();if (m<0)x.setText("負(fù)數(shù)不能開根號");elsex.setText(""+Math.sqrt(m);對數(shù)運算Void log() double m=Double.parseDouble(x.getText();if (m<0)x.setText('負(fù)數(shù)不能進(jìn)行自然對數(shù)運算"); elsex.setText(""+Math.l
12、og(m);余弦運算Void cos() double m=Double.parseDouble(x.getText();x.setText(""+Math.cos(m);正切運算Void tan() double m=Double.parseDouble(x.getText();x.setText(""+Math.tan(m);e 的指數(shù)運算Void exp() double m=Double.parseDouble(x.getText();x.setText(""+Math.exp(m);切、倒數(shù)運算Void daoshu() i
13、f (Double.parseDouble(x.getText()=0)x.setText("除數(shù)不能為零");elsex.setText(""+1/(Double.parseDouble(x.getText();preOperater=""3)主要方法說明public public public public public public publiccos(double x) /求 x 的余弦函數(shù) tan (double x) /求 x 的正切函數(shù) sqrt(double x) /求 x 的平方根 log (double x) /求
14、 x 的自然對數(shù)運算 exp (double x) /求 e 的 x 次冪pow (double a, double b) /求 a 的 b 次幕daoshu (double x) /求 x 的倒數(shù)4)程序流程圖開始3. 算法思路:這是一個簡單的計算器,里面所涉及到的功能就是加、減、乘、除、開方運 算、等基本功能。僅須定義兩個變量來保存雙運算操作的前一個數(shù)和當(dāng)前在計算 器上顯示的數(shù)字即可,而對于單運算的操作要求更加簡單,只需要一個變量就可 以了。當(dāng)然對數(shù)據(jù)進(jìn)行判斷是必不可少的。在輸入數(shù)據(jù)之后 Character.isDigit(Comma nd.charAt(O)判斷輸入的數(shù)據(jù)是否符合要求。不
15、符合要求 給出提示,符合要求以后將判斷點擊的運算符,執(zhí)行相應(yīng)的操作。對于單運算操作要進(jìn)一步判斷是否符合要求,如果是就進(jìn)入下步計算,如果不是就彈出相應(yīng)的提示:“負(fù)數(shù)不能開根號""除數(shù)不能為零"用try :catch捕獲異常,如果有異常則中止活動。在進(jìn)行開方(sqrt)運算時,如果輸入數(shù) 為負(fù)數(shù),則彈出"負(fù)數(shù)不能開根號",中止運算。在進(jìn)行自然對數(shù)運算時(log)如 果輸入數(shù)為負(fù)數(shù), 則彈出 "負(fù)數(shù)不能進(jìn)行自然對數(shù)運算” 。在進(jìn)行三角函數(shù)運算時(cos tan)不必考慮輸入的數(shù)字是否符合規(guī)范,對于任意輸入的數(shù)函數(shù)本身有 一個判斷的過程, 都
16、能把輸入的數(shù)轉(zhuǎn)化為合適的范圍, 進(jìn)而得到正確的結(jié)果。 對 于加減乘除等雙運算操作,每個功能都由每一個模塊來實現(xiàn),當(dāng)按下加按鈕時, 進(jìn)行相應(yīng)的加法操作, 這一塊對相應(yīng)的操作數(shù)沒有要求; 當(dāng)點擊減號時, 則進(jìn)行 減法操作,由jTextField.getText()得到數(shù)字按鈕的值顯示在相應(yīng)的文本框中;乘 法操作在點擊一個操作數(shù)然后點擊乘號再點擊另一個時得出相應(yīng)的結(jié)果顯示在 文本框中;在作除法運算時,當(dāng)被除數(shù)點擊為零時,調(diào)用catch進(jìn)行異常處理,彈出 “Infin ity ”。4. 數(shù)據(jù)分析:在事件處理,觸發(fā)按鈕事件時,先判斷是或是數(shù)字是或是“ -/+”是或是“.”, 是的話就將負(fù)號“ -” 、數(shù)
17、字、小數(shù)點“ .”分別寫入文本框并存放在 sum 中, 然后判斷是或是“退格” 、“求倒”等,是的話進(jìn)行相應(yīng)的處理,都不是的話則跳 到doOperation()執(zhí)行運算同時將運算符存放在 preOperate沖。觸發(fā)按鈕事件時, 要進(jìn)一步分析,是重新開始計算時觸發(fā)的按鈕事件還是計算中間觸發(fā)的按鈕事 件。四、設(shè)計結(jié)果與分析1.運行調(diào)試1)進(jìn)行加減乘除求余以及指數(shù)運算帶負(fù)數(shù)的浮點加法運算(例: -1.2+4=2.8)依次按“ +/-” (也可以最后按) ,“1.2”,“+”,“4”鍵-9 -計算器按下“ + ”鍵按下“4”鍵S9=勢qrtpowIng右。霽即mvp按下“二”鍵- 15 -2)求倒先
18、輸入1.25,再按下“求倒”鍵分析:輸出的結(jié)果如圖所示,倒數(shù)功能實現(xiàn),計算時,不僅是結(jié)果,輸入的數(shù)據(jù) 同樣可以先實現(xiàn)倒數(shù)功能后再進(jìn)行相應(yīng)的計算,沒有影響!3)退格輸入數(shù)字1265圉計算器| 口按下“退格”鍵邑I計算器丨冋分析:輸出的結(jié)果如圖所示,本計算器退格鍵有一個特點是,就算是是計算后得 出的結(jié)果也能實現(xiàn)退格,缺點是不能很好的處理小數(shù)點的問題, 因為小數(shù)點也是 字符串的一部分。4)清零按下“ c”鍵5)求余弦、求正切、對e求幕、求平方根、求自然對數(shù)、求倒運算 (例:cos30)先按下“ 30”鍵再按下“ coS'鍵6)連續(xù)運算(例:2*3*4=24.0)依次按下“ 3”“二”鍵“ A
19、 ”47)異常處理(例:求倒時輸入數(shù)為0) 先按“ 0”鍵再按“求倒”鍵五、設(shè)計體會與小結(jié)作為一名計算機科學(xué)與技術(shù)專業(yè)的學(xué)生, 我覺得能做類似的課程設(shè)計是十分 有意義,而且是十分必要的。 經(jīng)過一段時間的努力, 計算器課程設(shè)計終于結(jié)束了, 雖然很忙碌、很疲勞,但是收獲很大。這些天我?guī)缀趺刻斓膶W⒑托羷冢瑔净亓?我對 Java 這門語言的重新的認(rèn)識,對 Java 這門編程語言也有了深刻的理解。當(dāng)然在本次課程設(shè)計的過程中, 我碰到了很多問題, 比如求倒時, 最先我是 把按鈕新建成“ 1/x”但是出現(xiàn)問題,怎么找都沒找出問題來,其后重新整理思 緒才發(fā)現(xiàn)不能設(shè)成“ 1/x ”,因為“1/X ”中第一個字
20、符是數(shù)字,而 Character.isDigit(Command.charAt(O)會將“ 1/x”當(dāng)做數(shù)字鍵寫入文本框。還有就 是實現(xiàn)退格功能時不知道怎樣處理, 最后上網(wǎng)百度了一下才找到了方法, 這也讓 我深刻體會到了網(wǎng)絡(luò)的作用。 當(dāng)然還遇到了其他的困難, 這些花費了我很多時間, 使我失敗了很多次, 但是通過我們不解的努力還是一一克服了這些問題, 最終還 是成功了。 當(dāng)然在這次試驗中也暴露自己一些問題, 發(fā)現(xiàn)了自己的很多不足, 自 己知識的很多漏洞,基礎(chǔ)知識的不牢固,看到了自己的實踐經(jīng)驗還是比較缺乏, 理論聯(lián)系實際的能力還急需提高。這次課程設(shè)計, 除了全面系統(tǒng)的理解了 JAVA 面向?qū)ο缶幊?/p>
21、原理的一般原理 和基本實現(xiàn)方法, 還把死板的課本知識變得生動有趣, 激發(fā)了學(xué)習(xí)的積極性。 把 學(xué)過的編程原理的知識強化,把課堂上學(xué)的知識通過自己設(shè)計的程序表示出來, 這加深了對理論知識的理解。 課程設(shè)計中程序比較復(fù)雜, 在調(diào)試時應(yīng)該仔細(xì), 在 程序調(diào)試時,注意盡力尋找程序中存在的不足之處,進(jìn)而使功能更加完善。當(dāng)然在做課程設(shè)計要有很大的耐心, 做的過程就是不斷的調(diào)試修改調(diào)試 過程,只有靜下心來才能把問題解決。六、參考文獻(xiàn)1 於東軍等 Java 程序設(shè)計與應(yīng)用開發(fā) (第二版) 清華大學(xué)出版社 2OO9.52 Bruce Eckel Java 編程思想 機械工業(yè)出版社 2OO7.63 楊樹林等 Ja
22、va 語言最新實用案例教程 (第 2 版) 清華大學(xué)出版社2O1O.7七、源程序import java.util.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Calculater extends JFrame implements ActionListener JTextField x; /文本框String preOperater="" /上一次的運算符 double sum=0; /運算結(jié)果 public Calculater(String title) su
23、per(title);Container c=getContentPane(); /容/ 器 c.setLayout(new BorderLayout(); /容器采用邊緣布局 x=new JTextField(50);c.add("North",x);String buttoned="0","1","2","3","+/-",".","C"," 退 格 "," 求 倒II II A II Hf-HII I
24、 II II IIII /II HO/ H IIO" "CM n_l! II.I!.*Ill -.I! !_! HX He."","4","5","6","7","+","-","*","/","%","8","9","=","sqrt","pow","log"
25、;,"cos","tan","exp" ;JPanel p=new JPanel(); /面/ 板p.setLayout(new GridLayout(3,9,10,10); /面板采用行列數(shù) 3,6 的網(wǎng)格布局 for(int k=0;k<buttoned.length;k+) / 用一個 for 循環(huán)將按鈕添加進(jìn)面板并注冊監(jiān) 聽器JButton b=new JButton(buttonedk);p.add(b);b.addActionListener(this);c.add("Center",p);thi
26、s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /響應(yīng)用戶事件,根據(jù)點擊按鈕實現(xiàn)相關(guān)操作 public void actionPerformed(ActionEvent e)String Command=e.getActionCommand();tryif(Character.isDigit(Command.charAt(0) / 如果按鈕事件為數(shù)字鍵 x.setText(x.getText()+Command); /添加數(shù)字else if(Command.equals(".") /如果按鈕事件為 "."
27、; 鍵xiaoshu();else if(Command.equals("+/-") /如果按鈕事件為 "+/-" 鍵 fuhao();else if (Command.equals(退格") /如果按鈕事件為"退格"鍵 backspace();else if(Command.equals("=") /如果按鈕事件為 "="鍵dengyu();else if(Command.equals("sqrt") 如果按鈕事件為"sqrt"鍵sqrt();
28、else if(Command.equals("log") /如果按鈕事件為"log"鍵log();else if(Command.equals("cos") /如果按鈕事件為"cos"鍵cos();else if(Command.equals("tan") /如果按鈕事件為"tan"鍵tan();else if(Command.equals("exp") 如果按鈕事件為"exp"鍵exp();else if (Command.equa
29、ls(求倒")/如果按鈕事件為"求倒"鍵qiudao();else if(Command.equals("C") /如果按鈕事件為"C"鍵 clear();else doOperation(); /記錄運算符和輸入的數(shù)字 x.setText(""); preOperater=Command;catch(Exception ex) sum=0; x.setText("");void xiaoshu() /添加小數(shù)點String s=x.getText();if(s.indexOf(&qu
30、ot;.")=-1)x.setText(s+".");void fuhao() / 添加負(fù)號String s=x.getText();if(s.indexOf("-")=-1)x.setText("-"+x.getText();void backspace() / 退格String s=x.getText();if(s.length()>0)x.setText(s.substring(0,s.length()-1); /刪/ 除最后一個字符 void dengyu() /等號,顯示計算結(jié)果 doOperation();
31、 x.setText(""+sum);preOperater=""void sqrt() /求該數(shù)的平方根double m=Double.parseDouble(x.getText();if (m<0)x.setText(負(fù)數(shù)不能開根號”);elsex.setText(""+Math.sqrt(m);void log() / 求該數(shù)的自然對數(shù)double m=Double.parseDouble(x.getText();if (m<0)x.setText("負(fù)數(shù)不能進(jìn)行自然對數(shù)運算");elsex.setText(""+Math.log(m);void cos()/求該數(shù)的余弦double m=Double.parseDouble(x.getText();x.setText("&
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《春曉》教學(xué)課件
- 折疊電機采購方案(3篇)
- 公司工傷防范方案(3篇)
- 保潔報價方案模板(3篇)
- 房屋變更方案模板(3篇)
- DB13T 5773-2023 仿真冰場開放條件和維護(hù)保養(yǎng)要求
- DB13T 5620-2022 金銀花桑葉粗提物提取技術(shù)規(guī)程
- 農(nóng)村馬廄翻修方案(3篇)
- 魚池施工方案(3篇)
- 學(xué)生校服方案(3篇)
- 四川省宜賓市高縣2023年數(shù)學(xué)六年級第二學(xué)期期末聯(lián)考試題含解析
- 大學(xué)《管理經(jīng)濟學(xué)》期末復(fù)習(xí)核心知識點及考試真題解析
- 第五章-不規(guī)則三角網(wǎng)TIN的建立課件
- 《刑法》講座-課件
- 中級養(yǎng)老護(hù)理人員技能培訓(xùn)
- 第二單元第1課時《線的認(rèn)識》示范課教學(xué)課件【北師大版四年級數(shù)學(xué)上冊】
- 重慶市建設(shè)工程施工項目每日“防高墜三檢”檢查記錄表
- 國開電大本科《人文英語4》機考總題庫
- JJF 1059.1-2012測量不確定度評定與表示
- GB/T 6070-1995真空法蘭
- 民辦非企業(yè)單位理事、監(jiān)事備案表
評論
0/150
提交評論