




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質文檔-傾情為你奉上小型計算器系統(tǒng)1. 課程設計目的JAVA程序設計是計算機相關專業(yè)的必修專業(yè)基礎課程,其實踐性、應用性很強。實踐教學環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設計專題實際是計算機相關專業(yè)學生學習完JAVA程序設計課程后,進行的一次全面的綜合訓練,JAVA程序設計的設計目的是加深對理論教學內容的理解和掌握,使學生較系統(tǒng)地掌握程序設計及其在網絡開發(fā)中的廣泛應用,基本方法及技巧,為學生綜合運用所學知識,利用軟件工程為基礎進行軟件開發(fā)、并在實踐應用方面打下一定基礎。2. 課程設計要求按課程設計指導書提供的課題,要求學生在自行完成各個操作環(huán)節(jié),并能實現且達到舉一反三的目的,完成一
2、個項目解決一類問題。要求學生能夠全面、深入理解和熟練掌握所學內容,并能夠用其分析、設計和解答類似問題;對此能夠較好地理解和掌握,能夠進行簡單分析和判斷;能編寫出具有良好風格的程序;掌握JAVA程序設計的基本技能和面向對象的概念和方法;了解多線程、安全和網絡等編程技術。同時培養(yǎng)學生進行分析問題、解決問題的能力;培養(yǎng)學生進行設計分析、設計方法、設計操作與測試、設計過程的觀察、理解和歸納能力的提高。3. 課程設計內容3.1概要設計3.3.1自定義類說明本程序一共包括:構造方法A5i13w(),setup(), windowClosing(), actionPerformed(), appendcha
3、r(), countall(), counting(), Iscountnum()和一個windowcloser類。(1) A5i13w()是構造方法,在程序創(chuàng)建其對象時就調用,初始化次程序的事件的監(jiān)聽機制。(2) setup()是我定義的方法,是用來初始化程序的圖形應用界面,由A5i13w()來調用。(3) windowClosing()是用來響應用戶的關閉功能。(4) actionPerformed()是用來處理每個事件的響應的方法(5) appendchar()方法的作用是在用戶產生事件后向Textshow追加產生此事件的字符串(6) countall()的意義是在用戶按“=”號后,從最
4、里層括號向最外層逐層把括號里的內容傳遞給counting()方法,并負責對括號本身是否符合數學語法要求進行檢驗。(7) counting()方法的作用是首先對無括號的數學表達式有關的數學計算符號進行調整,并檢驗所有的數學符號,如發(fā)現錯誤的數學符號立即在Labelnow中顯示出來。(8)Iscountnum()方法的作用是把“+ - × ÷ % . ( )”算術符號轉化相應的數字,便于程序的流程控制。開始初始化數據double result=0/存儲的結果boolean newnum=true/是否新數stringlastop=”=”:/存儲操作符按下數字按鈕按下操作符(+*
5、/=)按鈕判斷newnum把當前文本框的內容轉為double后calc方法calc(double.parsedouble(txt.get))文本框顯示新數:txt.setText(數字)newnum=false文本框接著顯示txt.setText(txt.getText+數字)Lastop=”操作符”mewnum=true圖2.1首先分析這個說要完成的功能,它的主要任務是完成十六進制、十進制、八進制和二進制之間的相互轉化,需要包含負數,但不用考慮小數。 其次,確定接口參數。根據功能可知,它傳遞給外部的就是一個轉后的數據,而外部除了需要傳遞給轉化前的數據以外,是否還需要其他參數呢?我
6、們都知道,十進制的負數同樣可以利用其他進制進行表示,例如二進制,轉化方法是:求十進制數的絕對值對應的二進制數,最高位為1;然后對二進制逐位求反,最高位除外;接著最低一位加1,需要進位的話依次進位,最高位除外。如今的問題就擺在了我們面前,我們如何知道這個數的最高位是第幾位呢,也許有人會說,那就用轉化后的前面再加上一位,好,即使這樣可以成立,那么-1轉化后就是11,3轉化后也為11,現在如果需要現在的把這個數二進制數再轉化為十進制,那么我們如何知道原來的是正數還是負數呢,如果要轉化為十六進制,八進制又當如何呢?經過以上的分析發(fā)現,還應該有另外一個參數二進制時的寬度,只有這樣才能知道誰是最高位,因此
7、就稱這個參數為位寬。 最后,設計類。根據第二步的分析,因為位寬對每一個方法都是一樣,所以可能把它作為類的成員變量,而另外兩個參數轉化前的值和轉化后的值就分別作為輸入參數和返回值。而類對外的接口只有各個轉化的方法,因此這幾個方法設計為public權限,而其它所有的輔助方法都為private權限。位寬通過構造函數傳遞,外部不能直接訪問和修改,設置也設置為private權限。為了減少計算量,所有的轉化都以二進制為中介。例如十六進制到十進制,是十六進制二進制十進制。3.2詳細設計(程序部分源代碼及注釋)import java.awt.*; import java.awt.event.*;
8、import javax.swing.*;public class MyCalculator implements ActionListener JFrame f; JMenu mEdit; JMenu mView; JMenu mHelp; JMenuItem mCopy; JMenuItem mPaste; JTextField tResult;JButton bNumber; JButton bOperator; JButton bOther; JButton bM;boolean isDouble=false;/是否為實數 int opFlag=-1; static double t1
9、=0,t2=0,t3=0,result=0; static int opflag1=-1,opflag2=-1,flag=0,resflag=1; int preOp,currentOp=0;/標準位 double op1=0,op2=0;/操作數 double n3; StringBuffer buf=new StringBuffer(20); StringBuffer copyBoard=new StringBuffer(20);/剪貼板 StringBuffer memory = new StringBuffer(20);/M系列 StringBuffer str = new Strin
10、gBuffer(); public MyCalculator() f = new JFrame("計算器ByYX"); Container contentPane = f.getContentPane(); /*菜單的創(chuàng)建開始*/ JMenuBar mBar = new JMenuBar(); mBar.setOpaque(true);mEdit = new JMenu("編輯(E)"); mEdit.setMnemonic(KeyEvent.VK_E); mCopy = new JMenuItem("復制(C)"); mEdit.a
11、dd(mCopy); mPaste = new JMenuItem("粘貼(P)"); mEdit.add(mPaste);mView = new JMenu("查看(V)"); mView.setMnemonic(KeyEvent.VK_V); mView.add(new JMenuItem("標準型"); mView.add(new JMenuItem("科學型"); mView.addSeparator(); mView.add(new JMenuItem("查看分組");mHelp =
12、new JMenu("幫助(H)"); mHelp.setMnemonic(KeyEvent.VK_H); mHelp.add(new JMenuItem("幫助主題"); mHelp.addSeparator(); mHelp.add(new JMenuItem("關于計算器");mBar.add(mEdit); mBar.add(mView); mBar.add(mHelp); f.setJMenuBar(mBar); contentPane.setLayout(new BorderLayout(); JPanel pTop =
13、new JPanel(); tResult = new JTextField("0.",26); tResult.setHorizontalAlignment(JTextField.RIGHT ); tResult.setEditable(false); pTop.add(tResult); contentPane.add(pTop,BorderLayout.NORTH); JPanel pBottom = new JPanel(); pBottom.setLayout(new BorderLayout(); JPanel pLeft = new JPanel(); pLe
14、ft.setLayout(new GridLayout(5,1,3,3); bM = new JButton(" ");bM.setEnabled(false); pLeft.add(bM); bOther = new JButton("MC"); bOther.addActionListener(this); bOther.setForeground(Color.RED); bOther.setMargin(new Insets(3,2,3,2); pLeft.add(bOther); bOther = new JButton("MR&quo
15、t;); bOther.addActionListener(this); bOther.setForeground(Color.RED); bOther.setMargin(new Insets(3,2,3,2); pLeft.add(bOther); bOther = new JButton("MS"); bOther.addActionListener(this); bOther.setForeground(Color.RED); bOther.setMargin(new Insets(3,2,3,2); pLeft.add(bOther); bOther = new
16、JButton("M+"); bOther.addActionListener(this); bOther.setForeground(Color.RED); bOther.setMargin(new Insets(3,2,3,2); pLeft.add(bOther); pBottom.add(pLeft,BorderLayout.WEST); JPanel pRight = new JPanel(); pRight.setLayout(new BorderLayout(); JPanel pUp = new JPanel(); pUp.setLayout(new Gri
17、dLayout(1,3,3,0); bOther = new JButton("Backspace"); bOther.addActionListener(this); bOther.setForeground(Color.RED); bOther.setMargin(new Insets(3,0,3,5); pUp.add(bOther); bOther = new JButton("CE"); bOther.addActionListener(this); bOther.setForeground(Color.RED); pUp.add(bOther
18、); bOther = new JButton("C"); bOther.addActionListener(this); bOther.setForeground(Color.RED); pUp.add(bOther); JPanel pDown = new JPanel(); pDown.setLayout(new GridLayout(4,5,3,2); bNumber = new JButton("7"); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); bN
19、umber.setMargin(new Insets(3,3,3,3); pDown.add(bNumber); bNumber = new JButton("8"); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); bNumber.setMargin(new Insets(3,3,3,3); pDown.add(bNumber); bNumber = new JButton("9"); bNumber.setForeground(Color.blue); bNumb
20、er.addActionListener(this); bNumber.setMargin(new Insets(3,3,3,3); pDown.add(bNumber); bOperator = new JButton("/"); bOperator.setForeground(Color.RED); bOperator.addActionListener(this);bOperator.setMargin(new Insets(3,0,3,0); pDown.add(bOperator); bOperator = new JButton("sqrt"
21、); bOperator.addActionListener(this); bOperator.setForeground(Color.blue); bOperator.setMargin(new Insets(3,0,3,0); pDown.add(bOperator); bNumber = new JButton("4"); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); bNumber.setMargin(new Insets(3,3,3,3); bNumber.setHorizo
22、ntalTextPosition(JButton.LEFT); pDown.add(bNumber); bNumber = new JButton("5"); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); bNumber.setMargin(new Insets(3,3,3,3); pDown.add(bNumber); bNumber = new JButton("6"); bNumber.setForeground(Color.blue); bNumber.ad
23、dActionListener(this); bNumber.setMargin(new Insets(3,3,3,3); pDown.add(bNumber); bOperator = new JButton("*"); bOperator.setForeground(Color.RED); bOperator.addActionListener(this); bOperator.setMargin(new Insets(3,3,3,3); pDown.add(bOperator); bOperator = new JButton("%"); bOpe
24、rator.setForeground(Color.blue); bOperator.addActionListener(this); bOperator.setMargin(new Insets(3,3,3,3); pDown.add(bOperator); bNumber = new JButton("1"); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); bNumber.setMargin(new Insets(3,3,3,3); pDown.add(bNumber); bNum
25、ber = new JButton("2"); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); bNumber.setMargin(new Insets(3,3,3,3); pDown.add(bNumber); bNumber = new JButton("3"); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); bNumber.setMargin(new Insets(3,3,
26、3,3); pDown.add(bNumber); bOperator = new JButton("-"); bOperator.setForeground(Color.RED); bOperator.addActionListener(this); bOperator.setMargin(new Insets(3,3,3,3); pDown.add(bOperator); bOperator = new JButton("1/x"); bOperator.setForeground(Color.blue); bOperator.addActionLi
27、stener(this); pDown.add(bOperator); bNumber = new JButton("0"); bNumber.setForeground(Color.blue); bNumber.addActionListener(this); bNumber.setMargin(new Insets(3,3,3,3); pDown.add(bNumber); bOperator = new JButton("+/-"); bOperator.setForeground(Color.blue); bOperator.addActionL
28、istener(this); bOperator.setMargin(new Insets(3,3,3,3); pDown.add(bOperator); bOperator = new JButton("."); bOperator.setForeground(Color.blue); bOperator.addActionListener(this); bOperator.setMargin(new Insets(3,3,3,3); pDown.add(bOperator); bOperator = new JButton("+"); bOperat
29、or.setForeground(Color.RED); bOperator.addActionListener(this); bOperator.setMargin(new Insets(3,3,3,3); pDown.add(bOperator); bOperator = new JButton("="); bOperator.setForeground(Color.blue); bOperator.addActionListener(this); bOperator.setMargin(new Insets(3,3,3,3); pDown.add(bOperator)
30、; pRight.add(pUp,BorderLayout.NORTH); pRight.add(pDown,BorderLayout.SOUTH); pBottom.add(pRight,BorderLayout.EAST); contentPane.add(pBottom,BorderLayout.SOUTH);f.setSize(new Dimension(320,256);f.setResizable(false); f.setVisible(true); f.addWindowListener(new WindowAdapter() public void windowClosing
31、(WindowEvent e) System.exit(0); ); public void actionPerformed(ActionEvent e) String s=e.getActionCommand(); if(s.equals("復制(C)") String temp=tResult.getText().trim(); copyBoard.replace(0,copyBoard.length(),temp); mPaste.setEnabled(true); else if(s.equals("粘貼(P)") tResult.setText
32、(copyBoard.toString(); else if(s.equals("CE") /如果是CE則清除文本框 tResult.setText("0."); else if(s.equals("Backspace") /如果是backspace則刪除一個字符。 if(!tResult.getText().trim().equals("0.") /如果文本框中有內容 if(str.length()!=1&&str.length()!=0) tResult.setText(str.delete(s
33、tr.length()-1,str.length().toString(); else tResult.setText("0."); str.setLength(0); op2=Double.parseDouble(tResult.getText().trim(); else if(s.equals("C") /如果是C刪除當前計算。 tResult.setText("0."); op1=op2=0; str.replace(0,str.length()," "); preOp=currentOp=0; else
34、if(s.equals("MC") /如果是MC則清除緩沖區(qū) String temp="" memory.replace(0,memory.length(),temp); bM.setText(" "); else if(s.equals("MR") /如果按鍵為MR則恢復緩沖區(qū)的數到文本框 tResult.setText(memory.toString(); else if(s.equals("MS") /如果按鍵為MS則將文本框的數存入緩沖區(qū) String s1=tResult.getTex
35、t().trim(); memory.replace(0,memory.length(),s1); bM.setText("M"); else if(s.equals("M+") /如果按鍵為MS則將文本框值與緩沖區(qū)的數相加但不顯示結果。 String temp1=tResult.getText().trim(); double dtemp=Double.parseDouble(temp1); String temp2=memory.toString(); dtemp+=Double.parseDouble(temp2); temp1=String.va
36、lueOf(dtemp); memory.replace(0,memory.length(),temp1); else if(s.equals("1/x") /如果按鍵為1/x則將文本框中的數據置為它的倒數。 String temp=tResult.getText().trim(); double dtemp=Double.parseDouble(temp); tResult.setText(""+1/dtemp); else if(s.equals("sqrt") /如果按鍵為sqrt則將文本框中的內容求平方根 String tem
37、p=tResult.getText().trim(); double dtemp=Double.parseDouble(temp); tResult.setText(""+Math.sqrt(dtemp); else if(s.equals("+")/+ str.setLength(0); if(currentOp=0) preOp=currentOp=1;/op1=0; op2=0; tResult.setText(""+op1); else currentOp =preOp; preOp =1; switch(currentOp)
38、 case 1:op1=op1+op2;tResult.setText(""+op1);break; case 2:op1=op1-op2;tResult.setText(""+op1);break; case 3:op1=op1*op2;tResult.setText(""+op1);break; case 4:op1=op1/op2;tResult.setText(""+op1);break; else if(s.equals("-")/- str.setLength(0); if(curr
39、entOp=0) preOp=currentOp=2;/op1=op2;op2=0; tResult.setText(""+op1); else currentOp =preOp; preOp =2; switch(currentOp) case 1:op1=op1+op2;tResult.setText(""+op1);break; case 2:op1=op1-op2;tResult.setText(""+op1);break; case 3:op1=op1*op2;tResult.setText(""+op1
40、);break; case 4:op1=op1/op2;tResult.setText(""+op1);break; else if(s.equals("*")/* str.setLength(0); if(currentOp=0) preOp=currentOp=3;/op1=op2;op2=1; tResult.setText(""+op1);/op1=op2; else currentOp =preOp; preOp =3; switch(currentOp) case 1:op1=op1+op2;tResult.setText
41、(""+op1);break; case 2:op1=op1-op2;tResult.setText(""+op1);break; case 3:op1=op1*op2;tResult.setText(""+op1);break; case 4:op1=op1/op2;tResult.setText(""+op1);break; else if(s.equals("/")/ / str.setLength(0); if(currentOp=0) preOp=currentOp=4;/op2=1;
42、 tResult.setText(""+op1);/op1=op2; else currentOp =preOp; preOp =4; switch(currentOp) case 1:op1=op1+op2;tResult.setText(""+op1);break; case 2:op1=op1-op2;tResult.setText(""+op1);break; case 3:op1=op1*op2;tResult.setText(""+op1);break; case 4:op1=op1/op2;tResu
43、lt.setText(""+op1);break; else if(s.equals("=")/ = if(currentOp=0) str.setLength(0); tResult.setText(""+op2); else str.setLength(0); currentOp =preOp; switch(currentOp) case 1:op1=op1+op2;tResult.setText(""+op1);break; case 2:op1=op1-op2;tResult.setText("
44、"+op1);break; case 3:op1=op1*op2;tResult.setText(""+op1);break; case 4:op1=op1/op2;tResult.setText(""+op1);break; currentOp=0; op2=0; else if(s.equals(".") isDouble=true; if(tResult.getText().trim().indexOf('.')!=-1); else if(tResult.getText().trim().equals
45、("0") str.setLength(0); tResult.setText(str.append("0"+s).toString(); /else if(tResult.getText().trim().equals("")/如果初時顯示為空則不做任何操作 else tResult.setText(str.append(s).toString(); else if(s.equals("0")/如果選擇的是"0"這個數字鍵 if(tResult.getText().trim().equals(
46、"0.") else tResult.setText(str.append(s).toString(); op2=Double.parseDouble(tResult.getText().trim(); else tResult.setText(str.append(s).toString(); op2=Double.parseDouble(tResult.getText().trim(); if(currentOp=0) op1=op2; /end actionPerformedpublic static void main(String args) new MyCalculator(); 4.測試分析程序正常的響應按鈕事件,輸入的數值長度受變量length的限定,進行混合四則運算的時候,結果如果不是很大,可以正常顯示,但如果結果很大,就可能采用科學記數方式,這樣帶來了進制轉換時的麻煩,需要特殊的處理科學記數里的E ,當結果太大的時候,有可能超出可能表示的最大值,(結果溢出),這個時候就要對結果進行必要的異常處理,我在輸出結果的方法內設置if 語句,如果結果大于某一個值就拋出一個類型的類,再使用try-catch,捕捉輸出結果的方法拋出的異常對象。然后進行,重制歸零的處理。 圖2.2 圖2.34.1程序運
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 硬幣樹苗木購銷合同
- 安全停車位出租合同
- 2025至2030中國傾斜卡車行業(yè)發(fā)展現狀與未來趨勢研究報告
- 2025至2030中國云母鈦珠光顏料行業(yè)供需形勢與營銷策略研究報告
- 2025-2030高蛋白食品行業(yè)市場現狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 2025-2030醇酸和聚酯表面涂料行業(yè)市場現狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 2025-2030進口葡萄酒行業(yè)市場發(fā)展分析及投資前景研究報告
- 2025-2030調味品行業(yè)市場發(fā)展分析及前景趨勢與投資研究報告
- 2025-2030血糖監(jiān)測儀行業(yè)市場現狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 2025-2030航空金融產業(yè)市場深度分析及前景趨勢與投資研究報告
- GB/T 40848-2021飼料原料壓片玉米
- GB/T 2-2016緊固件外螺紋零件末端
- GB/T 12237-2021石油、石化及相關工業(yè)用的鋼制球閥
- GB/T 1094.11-2007電力變壓器第11部分:干式變壓器
- 考研考博-英語-云南民族大學考試押題三合一+答案詳解2
- A04044《納稅人稅種認定表》
- 危險作業(yè)安全專題培訓
- 廠房庫房屋面墻面彩鋼板施工方案
- 甘肅省綜合醫(yī)院及部分??漆t(yī)院等級一覽表
- DB65∕T 3253-2020 建筑消防設施質量檢測評定規(guī)程
- 中班語言《噓我們有個計劃》課件
評論
0/150
提交評論