Java課程設(shè)計-保存計算過程的計算器_第1頁
Java課程設(shè)計-保存計算過程的計算器_第2頁
Java課程設(shè)計-保存計算過程的計算器_第3頁
Java課程設(shè)計-保存計算過程的計算器_第4頁
Java課程設(shè)計-保存計算過程的計算器_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上保存計算過程的計算器1.課程設(shè)計的目的隨著計算機技術(shù)的飛速發(fā)展,人們已經(jīng)不能滿足于采用人工進行大量的計算,計算器快速的計算速度和穩(wěn)定的準確率很好的滿足了用戶的需要,保存計算過程的計算器更是能夠讓用戶隨時隨地的查找以前的計算過程。保存計算過程的計算器正是在這樣的市場需求之下研發(fā)的,目的旨在幫助用戶快速準確的得到計算結(jié)果。掌握Java語言編程的基礎(chǔ)知識并能熟練運用,熟悉類聲明與對象的使用,理解委托時間處理模型,了解Java語言的圖形用戶界面的設(shè)計知識,運用JCreator編寫簡單計算器程序,并實現(xiàn)其功能 。2.設(shè)計方案論證2.1需求分析設(shè)計一個圖形界面的帶保存過程的計算器

2、應(yīng)用程序,完成簡單的算術(shù)過程。設(shè)計的計算器應(yīng)用程序除了普通的計算功能外,還有n次方、算術(shù)平方根、正弦函數(shù)、對數(shù)、隨機取值、退格、清零等功能。程序主要是設(shè)計一個計算器的界面,并練習(xí)使用事件監(jiān)聽器處理數(shù)據(jù)的輸入,并完成相關(guān)計算。用戶可以利用鼠標點擊數(shù)值或操作符按鍵完成計算的輸入,計算的過程將被顯示在窗口右邊的文本框中,另外使用程序自帶的保存功能將計算過程保存到想要的地方。2.2設(shè)計思路本應(yīng)用程序繼承自框架類(Frame),此程序不使用布局管理器,將單行輸入顯示文本框、各個按鈕功能、計算過程顯示區(qū)加入到同一個面板內(nèi),直接添加到各自區(qū)域。同時注冊按鈕時間監(jiān)聽器。如:b0 = new JButton(0

3、);b0.addActionListener(new ActionListener()事件監(jiān)聽器中的事件處理方法void actionPerformed(ActionEvent e), 完成主要事件的按鈕事件的處理。事件處理分以下幾種情況:數(shù)字按鈕事件(“1”,“2”,“3”,“9”,“0”)、運算符按鈕事件(“+”,“-”, “*”,“/”)、正負號按鈕事件(“”)、小數(shù)點按鈕事件(“.”)、等號按鈕事件(“=”)、n次方按鈕事件(“xy”)、算術(shù)平方根按鈕事件(“”)、正弦函數(shù)按鈕事件(“sin”)、對數(shù)函數(shù)按鈕事件(“l(fā)og”)、隨機取值按鈕事件(“R”)、PI按鈕事件(“”)、退格按鈕

4、事件(“”)、清零按鈕事件(“C”)、保存復(fù)制清除按鈕事件(“保存”,“復(fù)制”,“清除”)。2.3設(shè)計方法將數(shù)字鍵與其他鍵分別進行監(jiān)聽,一個單行文本框用來顯示輸入的數(shù)據(jù),str用來存放每次錄入的數(shù)據(jù),數(shù)據(jù)與字符錄入都通過按鍵來觸發(fā)事件,單行文本框設(shè)置為不可編輯、下沉。然后對所有的button進行監(jiān)聽,當(dāng)按到“+,-,*,/”按鈕時,將之前輸入的數(shù)字存儲到s中,輸入的運算符通過變量operatorchar來儲存,當(dāng)再輸入數(shù)字后遇到“=”時,便將運算符后的數(shù)字存儲到變量s2里,接著調(diào)用“+,-,*,/”運算函數(shù)進行運算,將結(jié)果用s1保存起來,并顯示 在單行文本框中。退格按鈕事件只需將輸入的數(shù)據(jù)字符

5、型重新編輯后,把最后一個數(shù)字消去再重新顯示出來,清空按鈕即是將所有變量初始化。求n次方、開方、正弦函數(shù)和對數(shù)函數(shù)可調(diào)用系統(tǒng)Math類的靜態(tài)方法t1(),隨機取值設(shè)定當(dāng)事件發(fā)生時100以內(nèi)的正數(shù)隨機出現(xiàn)。2.4功能模塊設(shè)計按下數(shù)字鍵在文本框上會顯示數(shù)字,這是計算器最基本的功能;在任何時候按下“+-”鍵,計算器文本框上的數(shù)字置相反數(shù);右邊一個文本框顯示計算過程,上面一個文本框顯示輸入的數(shù)字;當(dāng)按下的運算符號時前面已經(jīng)按下過運算符號時,右邊一個文本框顯示上一個運算符號以及兩個數(shù)之間的運算結(jié)果;按下清除“C”鍵,數(shù)據(jù)被全部清除;點擊右側(cè)“保存”按鈕,可保存計算過程。2.4.1基本運算模塊功能(1)加法

6、兩個數(shù)據(jù)相加操作,可以為正負數(shù)、小數(shù)。(2)減法兩個數(shù)據(jù)相減操作,可以為正負數(shù)、小數(shù)。(3)乘法兩個數(shù)據(jù)相乘操作,可以為正負數(shù)、小數(shù)。(4)除法兩個數(shù)據(jù)相除操作,可以為正負數(shù)、小數(shù)。2.4.2特殊運算模塊功能(1)n次方求一個自然數(shù)m的n次方。(2)算術(shù)平方根求一個非負整數(shù)的算術(shù)平方根。(3)正弦函數(shù)求一個自然數(shù)的正弦值。(4)對數(shù)函數(shù)求一個正數(shù)以10為底的對數(shù)。(5)隨機函數(shù)隨機出現(xiàn)一個0100以內(nèi)的整數(shù)。2.4.3保存計算過程模塊(1)保存:選擇保存位置、輸入保存文件名稱及格式,確定完成保存。(2)復(fù)制:復(fù)制運算過程區(qū)域內(nèi)容。(3)清除:清除運算過程區(qū)域所有內(nèi)容。系統(tǒng)結(jié)構(gòu)圖,如圖1所示。計

7、算器標題欄文本框按鍵計算過程區(qū)計算器文本框0-9、+、-、*、/、=、. 、C、xy、sin、log、R計算過程保存區(qū)域保存復(fù)制清除選擇保存位置、輸入保存名稱格式確定完成保存圖1 系統(tǒng)結(jié)構(gòu)圖主要程序運算過程流程圖,如圖2所示。開始初始化數(shù)據(jù)退格數(shù)字否刪除輸入的數(shù)是否運算符輸出數(shù)字結(jié)束進行計算是否等號是是輸出結(jié)果否清除否初始化變量圖2 運算過程流程圖3.設(shè)計結(jié)果與分析編寫Java程序,開發(fā)環(huán)境為JCreator,程序包含jisuan.java和jisq.java兩個java源文件。其中,jisuan.java為程序的主類,jisq.java內(nèi)包含程序主界面設(shè)計、各類算法設(shè)計以及保存計算過程等部分

8、。程序經(jīng)過檢查修改無誤后運行得到如下運行結(jié)果。(1)計算器程序主界面,如圖3所示。圖3 計算器主界面(2)各種運算界面,如圖4所示。圖4 運算界面(3)計算器顯示框清零操作,如圖5所示。圖5 清零操作(4)保存計算過程,如圖6所示。圖6 保存計算過程(5)查看保存后文件,如圖7所示。圖7 保存文件(6)點擊“清除”按鈕,清除計算過程區(qū)內(nèi)容,清除內(nèi)容后,界面返回程序主界面,計算過程顯示區(qū)重新顯示新的計算過程。當(dāng)輸入數(shù)據(jù)有誤時,程序會運行出錯。(1)當(dāng)程序進行除法運算除數(shù)為零時,程序運行錯誤,如圖8所示。圖8 除數(shù)為零錯誤(2)當(dāng)程序進行求算術(shù)平方根運算根號下為負數(shù)時,程序運行錯誤,如圖9所示。圖

9、9 根號下為負數(shù)錯誤(3)當(dāng)程序進行對數(shù)運算底數(shù)為非正數(shù)時,程序運行錯誤,如圖10所示。圖10 底數(shù)為非正數(shù)錯誤4.設(shè)計體會在這兩周的Java課程設(shè)計中,我學(xué)到了很多很多,感受也是頗多。越來越發(fā)現(xiàn)實踐的重要性。首先在做這次課程設(shè)計的時候,遇到了很多問題,這些問題讓我改掉了自己暴躁的性格,學(xué)會了有耐心,耐心的去琢磨枯燥的代碼,耐心的去敲代碼,耐心的去調(diào)試代碼,修改錯誤其中最大的問題的如何保存已經(jīng)輸入的數(shù)字或者符號進行運算,如何顯示運算過程,經(jīng)過多次研究和查詢發(fā)現(xiàn)有很多種保存運算過程的方法,可以運用鏈表進行存儲和提取數(shù)據(jù),也可以用棧。另外,此次課程設(shè)計讓我更了解熟悉了Java中的圖形用戶界面和它的

10、編程方式。在完成課題的過程中也不斷充實了自己,學(xué)習(xí)到了很多以前沒有學(xué)習(xí)到的知識,收獲很大。最大的收獲是在完成過程中培養(yǎng)的解決問題的能力。在做課程設(shè)計時必然會遇到困難,會有不會的東西,重要的不是現(xiàn)在會不會,而是遇到問題知道如何找到解決的途徑。還使我對所學(xué)知識能夠融會貫通,又不斷豐富了新知識。Java計算器設(shè)計使得我對所學(xué)的專業(yè)課有了更為深刻的認識,使得知識得到了鞏固和提高。這兩周磨平了尖銳的棱角,讓我變的更加成熟,同時,更加加深對知識的理解和印象。在學(xué)習(xí)的過程中,我發(fā)現(xiàn)了許多簡便方法,例如檢查錯誤,嘗試新方法,調(diào)試不懂語句的作用但是,這也是在深刻的教訓(xùn)中學(xué)到的,慢慢發(fā)現(xiàn)自己的Java語言學(xué)的還不

11、夠好,理解的還不夠深,知道的還少,有的甚至都沒見過,所以,我的學(xué)習(xí)還有待于加強,并且要繼續(xù)努力學(xué)習(xí),吾生也有涯,而知也無涯,所以應(yīng)該樹立良好的學(xué)習(xí)理念,更何況現(xiàn)代信息技術(shù)高速發(fā)展,不學(xué)習(xí)就會落后,就會被社會所淘汰,因此要時刻提醒自己學(xué)習(xí),學(xué)習(xí)新的科學(xué)技術(shù)。5.參考文獻1劉升華.JAVA從入門到實踐M. 北京:清華大學(xué)出版社 20092王曉東.算法設(shè)計與分析M. 北京:清華大學(xué)出版社 20033艾力江. Java2范例入門與提高M. 北京:清華大學(xué)出版社20034陳國君. Java2設(shè)計基礎(chǔ)M. 北京:清華大學(xué)出版社 20095饒一梅. Java語言程序設(shè)計M. 北京:人民郵電出版社 2009附

12、錄(1)jisuan.java/jisuan.javaimport javax.swing.*;public class jisuan public static void main(String args) jisq ji = new jisq();(2)jisq.java/ jisq.javaimport java.awt.*;import java.awt.event.*;import java.io.*;import java.text.*;import java.util.*;import javax.swing.*;import javax.swing.border.*;publi

13、c class jisq extends JFrame implements ActionListener JPanel pane = new JPanel();String s, s1, s2;double t, t1, t2 = 0;JTextField fiel, show;JTextArea area;JButton b0, b1, b2, add, b3, b4, b5, b6, b7, b8, b9, sub, mul, dele, equ, dev;JButton sqrt, pow, random, sin, p, log, zf, tui, save, clear, copy

14、, point;public jisq() init();this.setBounds(123, 143, 500, 330);this.setTitle(計算器);this.setVisible(true);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);void init() pane.setLayout(null);this.add(pane);area = new JTextArea(); JScrollPane scrollPane = new JScrollPane(area,

15、JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrollPane.setBounds(280, 70, 200, 140);area.setEditable(false);pane.add(scrollPane);fiel = new JTextField();fiel.setBounds(10, 30, 250, 30);fiel.setEditable(false);fiel.setFont(new Font(TimesRoman, Font.BOLD, 16);

16、/ 顯示框中的數(shù)字大小和顏色fiel.setHorizontalAlignment(JTextField.RIGHT);/ 文字右對齊fiel.setBackground(Color.white);/ 設(shè)置背景顏色fiel.setBorder(new SoftBevelBorder(BevelBorder.LOWERED);pane.add(fiel);show = new JTextField();show.setBounds(280, 30, 200, 30);show.setEditable(false);show.setFont(new Font(TimesRoman, Font.BO

17、LD, 16);/ 顯示框中的數(shù)字大小、顏色show.setHorizontalAlignment(JTextField.CENTER);/ 文字居中pane.add(show);b0 = new JButton(0);b0.setBounds(10, 70, 43, 33);pane.add(b0);b0.addActionListener(new ActionListener() / 匿名類實例做監(jiān)視器public void actionPerformed(ActionEvent e) if (e.getSource() = b0) fiel.setText(fiel.getText()

18、+ 0);show.setText(fiel.getText(););b1 = new JButton(1);b1.setBounds(59, 70, 43, 33);pane.add(b1);b1.addActionListener(this);b2 = new JButton(2);b2.setBounds(108, 70, 43, 33);pane.add(b2);b2.addActionListener(this);add = new JButton(+);add.setForeground(Color.BLUE);add.setBounds(157, 70, 43, 33);pane

19、.add(add);add.addActionListener(this);b3 = new JButton(3);b3.setBounds(10, 109, 43, 33);pane.add(b3);b3.addActionListener(this);b4 = new JButton(4);b4.setBounds(59, 109, 43, 33);pane.add(b4);b4.addActionListener(this);b5 = new JButton(5);b5.setBounds(108, 109, 43, 33);pane.add(b5);b5.addActionListen

20、er(this);sub = new JButton(-);sub.setForeground(Color.BLUE);sub.setBounds(157, 109, 43, 33);pane.add(sub);sub.addActionListener(this);b6 = new JButton(6);b6.setBounds(10, 148, 43, 33);pane.add(b6);b6.addActionListener(this);b7 = new JButton(7);b7.setBounds(59, 148, 43, 33);pane.add(b7);b7.addActionL

21、istener(this);b8 = new JButton(8);b8.setBounds(108, 148, 43, 33);pane.add(b8);b8.addActionListener(this);mul = new JButton(*);mul.setForeground(Color.BLUE);mul.setBounds(157, 148, 43, 33);pane.add(mul);mul.addActionListener(this);b9 = new JButton(9);b9.setBounds(10, 187, 43, 33);pane.add(b9);b9.addA

22、ctionListener(this);dele = new JButton(C);dele.setForeground(Color.red);dele.setBounds(59, 187, 43, 33);pane.add(dele);dele.addActionListener(this);equ = new JButton(=);equ.setBounds(108, 187, 43, 33);pane.add(equ);equ.addActionListener(this);dev = new JButton(/);dev.setForeground(Color.blue);dev.se

23、tBounds(157, 187, 43, 33);pane.add(dev);dev.addActionListener(this);point = new JButton(.);point.setBounds(10, 226, 43, 33);pane.add(point);point.addActionListener(this);p = new JButton();p.setBounds(59, 226, 43, 33);pane.add(p);p.addActionListener(this);zf = new JButton();zf.setBounds(108, 226, 43,

24、 33);pane.add(zf);zf.addActionListener(this);tui = new JButton();tui.setBounds(206, 70, 53, 33);pane.add(tui);tui.addActionListener(this);sqrt = new JButton();sqrt.setBounds(206, 148, 53, 33);pane.add(sqrt);sqrt.addActionListener(this);pow = new JButton(xy);pow.setBounds(206, 109, 53, 33);pane.add(p

25、ow);pow.addActionListener(this);random = new JButton(R);random.setBounds(156, 226, 43, 33);pane.add(random);random.addActionListener(this);sin = new JButton(sin);sin.setBounds(206, 187, 53, 33);pane.add(sin);sin.addActionListener(this);log = new JButton(log);log.setBounds(206, 226, 53, 33);pane.add(

26、log);log.addActionListener(this);save = new JButton(保存);save.setForeground(Color.RED);save.setBounds(280, 220, 60, 42);pane.add(save);save.addActionListener(this);copy = new JButton(復(fù)制);copy.setForeground(Color.BLACK);copy.setBounds(350, 220, 60, 42);pane.add(copy);copy.addActionListener(this);clear

27、 = new JButton(清除);clear.setForeground(Color.BLUE);clear.setBounds(420, 220, 60, 42);pane.add(clear);clear.addActionListener(this);save.setToolTipText(保存計算過程到文件); copy.setToolTipText(復(fù)制選中的計算過程); clear.setToolTipText(清除計算過程);public void actionPerformed(ActionEvent e) String str = e.getActionCommand()

28、;if (str.equals(1) fiel.setText(fiel.getText() + 1);show.setText(fiel.getText(); else if (str.equals(2) fiel.setText(fiel.getText() + 2);show.setText(fiel.getText(); else if (str.equals(3) fiel.setText(fiel.getText() + 3);show.setText(fiel.getText(); else if (str.equals(4) fiel.setText(fiel.getText(

29、) + 4);show.setText(fiel.getText(); else if (str.equals(5) fiel.setText(fiel.getText() + 5);show.setText(fiel.getText(); else if (str.equals(6) fiel.setText(fiel.getText() + 6);show.setText(fiel.getText(); else if (str.equals(7) fiel.setText(fiel.getText() + 7);show.setText(fiel.getText(); else if (

30、str.equals(8) fiel.setText( fiel.getText() +8);show.setText(fiel.getText(); else if (str.equals(9) fiel.setText(fiel.getText() + 9);show.setText(fiel.getText();else if (str.equals(清除) area.setText(null);else if (str.equals(.) fiel.setText(fiel.getText() + .);show.setText(fiel.getText(); else if (str

31、.equals(C) fiel.setText();show.setText(); if (str.equals(復(fù)制) area.copy(); if (str.equals(清除) area.setText(null); if (str.equals(保存) JFileChooser chooser = new JFileChooser(); int state = chooser.showSaveDialog(null); File file = chooser.getSelectedFile(); if (file != null & state = JFileChooser.APPR

32、OVE_OPTION) try String content = area.getText(); StringReader read = new StringReader(content); BufferedReader in = new BufferedReader(read); FileWriter outOne = new FileWriter(file); BufferedWriter out = new BufferedWriter(outOne); String str1 = null; while (str1 = in.readLine() != null) out.write(

33、str1); out.newLine(); in.close(); out.close(); catch (IOException exc) else if (str.equals() StringBuffer s = new StringBuffer(fiel.getText();if (s.length() 0) fiel.setText(s.delete(s.length() - 1, s.length().toString(); else if (str.equals() t = Math.PI;fiel.setText( + t);show.setText(fiel.getText(

34、);area.append( + =+fiel.getText()+ n); else if (str.equals(+) s = fiel.getText();s1 =+;fiel.setText();show.setText(s1); else if (str.equals(/) s = fiel.getText();s1 = /;fiel.setText();show.setText(s1); else if (str.equals(-) s = fiel.getText();s1 = -;fiel.setText();show.setText(s1); else if (str.equals(*) s = fiel.getText();s1 = *;fiel.setText();show.setText(s1); else if (str.equals() s = fiel.getText();t1 = Double.parseDouble(s);t = Math.sqrt(t1);fiel.setText(t + ); String process = sqrt( + s + ) = + t; sho

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論