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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、清除:清除運(yùn)算過程區(qū)域所有內(nèi)容。系統(tǒng)結(jié)構(gòu)圖,如圖1所示。圖1系統(tǒng)結(jié)構(gòu)圖主要程序運(yùn)算過程流程圖,如圖 2所示圖2運(yùn)算過程流程圖3 .設(shè)計(jì)結(jié)果與分析編寫Java程序,開發(fā)環(huán)境為JCreator ,程序包含jisuan.java 和jisq.java 兩個 java源文件。其中,jisuan.java為程序的主類,jisq.java內(nèi)包含程序主界面設(shè)計(jì)、各類算法設(shè)計(jì)以及保存計(jì)算過程等部分。程序經(jīng)過檢查修改無誤后運(yùn)行得到如下運(yùn)行結(jié) 果。(1)計(jì)算器程序主界面,如圖3所示。文案大全圖3計(jì)算器主界面(2)各種運(yùn)算界面,如圖4所示。圖4運(yùn)算界面(3)計(jì)算器顯示框清零操作,如圖 5所示。魚計(jì)其器仁41窩一Na

8、N sqrt(-7.0) = NaN圖9根號下為負(fù)數(shù)錯誤(3)當(dāng)程序進(jìn)行對數(shù)運(yùn)算底數(shù)為非正數(shù)時,程序運(yùn)行錯誤,如圖 10所示-Infinitylog(O) = -Infinitylog(-7.0) = NaN log(Q)=-Infinity46TTsinlog圖10底數(shù)為非正數(shù)錯誤4 .設(shè)計(jì)體會在這兩周的Java課程設(shè)計(jì)中,我學(xué)到了很多很多,感受也是頗多。越來越發(fā)現(xiàn)實(shí) 踐的重要性。首先在做這次課程設(shè)計(jì)的時候,遇到了很多問題,這些問題讓我改掉了自 己暴躁的性格,學(xué)會了有耐心,耐心的去琢磨枯燥的代碼,耐心的去敲代碼,耐心的去 調(diào)試代碼,修改錯誤其中最大的問題的如何保存已經(jīng)輸入的數(shù)字或者符號進(jìn)行運(yùn)

9、 算,如何顯示運(yùn)算過程,經(jīng)過多次研究和查詢發(fā)現(xiàn)有很多種保存運(yùn)算過程的方法,可以 運(yùn)用鏈表進(jìn)行存儲和提取數(shù)據(jù),也可以用棧。另外,此次課程設(shè)計(jì)讓我更了解熟悉了Java中的圖形用戶界面和它的編程方式。在完成課題的過程中也不斷充實(shí)了自己,學(xué)習(xí)到了很多以前沒有學(xué)習(xí)到的知識,收獲很 大。最大的收獲是在完成過程中培養(yǎng)的解決問題的能力。在做課程設(shè)計(jì)時必然會遇到困 難,會有不會的東西,重要的不是現(xiàn)在會不會,而是遇到問題知道如何找到解決的途徑。 還使我對所學(xué)知識能夠融會貫通,又不斷豐富了新知識。Java計(jì)算器設(shè)計(jì)使得我對所學(xué) 的專業(yè)課有了更為深刻的認(rèn)識,使得知識得到了鞏固和提高。這兩周磨平了尖銳的棱角,讓我變的更

10、加成熟,同時,更加加深對知識的理解和印 象。在學(xué)習(xí)的過程中,我發(fā)現(xiàn)了許多簡便方法,例如檢查錯誤,嘗試新方法,調(diào)試不懂 語句的作用但是,這也是在深刻的教訓(xùn)中學(xué)到的,慢慢發(fā)現(xiàn)自己的Java語言學(xué)的還不夠好,理解的還不夠深,知道的還少,有的甚至都沒見過,所以,我的學(xué)習(xí)還有待 于加強(qiáng),并且要繼續(xù)努力學(xué)習(xí),吾生也有涯,而知也無涯,所以應(yīng)該樹立良好的學(xué)習(xí)理 念,更何況現(xiàn)代信息技術(shù)高速發(fā)展,不學(xué)習(xí)就會落后,就會被社會所淘汰,因此要時刻 提醒自己學(xué)習(xí),學(xué)習(xí)新的科學(xué)技術(shù)。5 .參考文獻(xiàn)1劉升華.JAVA從入門到實(shí)踐M.北京:清華大學(xué)出版社20092王曉東.算法設(shè)計(jì)與分析M.北京:清華大學(xué)出版社20033艾力江.

11、Java2范例入門與提高M(jìn).北京:清華大學(xué)出版社20034陳國君.Java2設(shè)計(jì)基礎(chǔ)M.北京:清華大學(xué)出版社20095饒一梅.Java語言程序設(shè)計(jì)M.北京:人民郵電出版社2009附錄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.*;impo

12、rt java.text.*;import java.util.*;import javax.swing.*;import javax.swing.border.*;public 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

13、, mul, dele, equ, dev;JButton sqrt, pow, random, sin, p, log, zf, tui, save, clear, copy, point;public jisq() init();this.setBounds(123, 143, 500, 330);this.setTitle( 計(jì)算器);this.setVisible(true);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);void init() pane.setLayout(nu

14、ll);this.add(pane);area = new JTextArea();JScrollPanescrollPane=newJScrollPane(area,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,

15、 250, 30);fiel.setEditable(false);fiel.setFont(new Font(TimesRoman, Font.BOLD, 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(

16、280, 30, 200, 30); show.setEditable(false);show.setFont(new Font(TimesRoman, Font.BOLD, 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() /匿名類實(shí)例做監(jiān)視器public void acti

17、onPerformed(ActionEvent e) if (e.getSource() = b0) fiel.setText(fiel.getText() + 0);show.setText(fiel.getText(); );bl = new JButton(T);b1.setBounds(59, 70, 43, 33);pane.add(bl);bl.addActionListener(this);b2 = new JButton(2);b2.setBounds(108, 70, 43, 33);pane.add(b2);b2.addActionListener(this);add =

18、new JButton(+);add.setForeground(Color.BLUE); add.setBounds(157, 70, 43, 33); pane.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);

19、b5 = new JButton(5);b5.setBounds(108, 109, 43, 33);pane.add(b5);b5.addActionListener(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.addActionListene

20、r(this);b7 = new JButton(7);b7.setBounds(59, 148, 43, 33);pane.add(b7);b7.addActionListener(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.addActio

21、nListener(this);b9 = new JButton(9);b9.setBounds(10, 187, 43, 33);pane.add(b9);b9.addActionListener(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(e

22、qu);equ.addActionListener(this);dev = new JButton(/);dev.setForeground(Color.blue); dev.setBounds(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, 2

23、26, 43, 33); pane.add(p);p.addActionListener(this);zf = new JButton( ); zf.setBounds(108, 226, 43, 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); pa

24、ne.add(sqrt);sqrt.addActionListener(this);pow = new JButton(xy);pow.setBounds(206, 109, 53, 33);pane.add(pow);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);

25、pane.add(sin);sin.addActionListener(this);log = new JButton(log);log.setBounds(206, 226, 53, 33);pane.add(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.se

26、tForeground(Color.BLACK);copy.setBounds(350, 220, 60, 42);pane.add(copy);copy.addActionListener(this);clear = new JButton( 清除);clear.setForeground(Color.BLUE);clear.setBounds(420, 220, 60, 42);pane.add(clear);clear.addActionListener(this);save.setToolTipText(保存計(jì)算過程到文件);copy.setToolTipText(復(fù)制選中的計(jì)算過程

27、);clear.setToolTipText( 清除計(jì)算過程); public void actionPerformed(ActionEvent e) String str = e.getActionCommand();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)

28、fiel.setText(fiel.getText() + 3); show.setText(fiel.getText(); else if (str.equals(4) fiel.setText(fiel.getText() + 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.set

29、Text(fiel.getText(); else if (str.equals(7) fiel.setText(fiel.getText() + 7); show.setText(fiel.getText(); else if (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( 清

30、除) area.setText(null);else if (str.equals(.) fiel.setText(fiel.getText() + .); show.setText(fiel.getText(); else if (str.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 stat

31、e = chooser.showSaveDialog(null);File file = chooser.getSelectedFile();if (file != null & state = JFileChooser.APPROVE_OPTION) try String content = area.getText();StringReader read = new StringReader(content);BufferedReader in = new BufferedReader(read);FileWriter outOne = new FileWriter(file);Buffe

32、redWriter out = new BufferedWriter(outOne);String str1 = null;while (str1 = in.readLine() != null) out.write(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()

33、- 1, s.length().toString(); else if (str.equals(兀)t = Math.PI;fiel.setText( +1);show.setText(fiel.getText();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.setT

34、ext(sl); else if (str.equals(-) s = fiel.getText();si =-;fiel.setText();show.setText(sl); else if (str.equals(*) s = fiel.getText();si = *;fiel.setText();show.setText(sl); else if (str.equals( ,)s = fiel.getText();t1 = Double.parseDouble(s);t = Math.sqrt(tl);fiel.setText(t + );String process = sqrt( + s + ) = + t; show.setText(proc

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論