java課程設(shè)計 設(shè)計一個圖形界面的計算器,完成簡單的算術(shù)運算_第1頁
java課程設(shè)計 設(shè)計一個圖形界面的計算器,完成簡單的算術(shù)運算_第2頁
java課程設(shè)計 設(shè)計一個圖形界面的計算器,完成簡單的算術(shù)運算_第3頁
java課程設(shè)計 設(shè)計一個圖形界面的計算器,完成簡單的算術(shù)運算_第4頁
java課程設(shè)計 設(shè)計一個圖形界面的計算器,完成簡單的算術(shù)運算_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

java課程設(shè)計設(shè)計一個圖形界面的計算器,完成簡單的算術(shù)運算2.課設(shè)要求要求使用Java語言編寫程序,實現(xiàn)基本的加、減、乘、除四種運算,并且要求在圖形界面中顯示運算過程和結(jié)果。此外,還要求程序具有良好的用戶交互性,能夠處理用戶的輸入錯誤,并給出友好的提示信息。二、需求分析通過對計算器的功能和用戶需求進行分析,我們確定了以下需求:1.支持基本的加、減、乘、除四種運算;2.支持小數(shù)和負數(shù)的運算;3.支持多次連續(xù)運算;4.支持括號運算;5.支持清空、刪除和撤銷功能;6.支持錯誤輸入的提示和糾正。三、設(shè)計思路我們采用MVC架構(gòu)設(shè)計模式,將程序分為三個模塊:模型、視圖和控制器。1.模型:負責進行數(shù)學(xué)運算,計算結(jié)果并返回給控制器;2.視圖:負責顯示運算過程和結(jié)果,以及處理用戶的輸入;3.控制器:負責將用戶輸入傳遞給模型進行計算,并將計算結(jié)果傳遞給視圖進行顯示。四、詳細設(shè)計1.界面設(shè)計我們采用JavaSwing框架設(shè)計圖形界面,主要包括以下組件:1)文本框:用于顯示運算過程和結(jié)果;2)按鈕:用于輸入數(shù)字、運算符和其他功能鍵;3)菜單欄:用于提供設(shè)置和幫助等功能。2.模型設(shè)計我們設(shè)計了一個Calculator類,包括以下方法:1)addition:加法運算;2)subtraction:減法運算;3)multiplication:乘法運算;4)division:除法運算;5)calculate:根據(jù)用戶輸入的表達式進行計算。3.控制器設(shè)計我們設(shè)計了一個Controller類,負責將用戶輸入傳遞給模型進行計算,并將計算結(jié)果傳遞給視圖進行顯示。Controller類包括以下方法:1)handleInput:處理用戶輸入;2)updateView:更新視圖。五、運行調(diào)試與分析討論在開發(fā)過程中,我們遇到了一些問題,如括號匹配、小數(shù)運算精度等,通過調(diào)試和討論,最終解決了這些問題。在測試過程中,我們發(fā)現(xiàn)程序運行穩(wěn)定,界面友好,能夠滿足用戶的需求。六、設(shè)計體會與小結(jié)通過這次課程設(shè)計,我們深入了解了Java語言和GUI編程,掌握了MVC架構(gòu)設(shè)計模式的應(yīng)用,提高了團隊合作和問題解決能力。同時,我們也發(fā)現(xiàn)了自己的不足之處,需要繼續(xù)學(xué)習和提高。七、參考文獻1.《Java編程思想》2.《JavaSwing實戰(zhàn)》3.《MVC設(shè)計模式》附錄代碼實現(xiàn):見附件本次課程設(shè)計要求開發(fā)一個計算器應(yīng)用程序,能夠完成加減乘除和取余運算,同時具備小數(shù)點、正負號、求倒數(shù)、退格和清零功能。我選擇添加開平方根、平方、立方、判斷素數(shù)和求log功能作為拓展功能。為了實現(xiàn)計算器系統(tǒng)的功能,需要實現(xiàn)輸入和輸出兩個功能模塊。系統(tǒng)設(shè)計原則是具有適用性廣、操作簡便等特點,同時滿足以上的功能要求和能夠運行在常見的計算機及其配置上。在布局方面,本次課程設(shè)計程序采用布局管理器BorderLayout,將單行文本框加入到“North”區(qū)域,將面板panel加入到“Center”區(qū)域。面板panel采用Girdlayout布局,選用5行*5列,將各種按鈕添加到面板panel,并增加按鈕監(jiān)聽事件。為了存儲數(shù)字和運算符號,我選擇使用鏈表(Linkedlist類)。程序運行后,輸入的所有數(shù)字及運算符號都全部存儲在鏈表中,待最后運算時,再一一求出來進行計算。對于事件監(jiān)聽的處理問題,計算器的各種按鈕都需要一個對象來進行監(jiān)視,以便對發(fā)生的事件做出處理。計算器的各種按鈕通過調(diào)用相應(yīng)的方法將某個對象作為自己的監(jiān)視器。例如,數(shù)字按鈕的方法為AddActionListener(監(jiān)視器)。對于獲取了監(jiān)視器的數(shù)字按鈕,通過相應(yīng)的操作就會導(dǎo)致事件的發(fā)生,并通知監(jiān)視器,監(jiān)視器就會做出相應(yīng)的處理。成員變量描述Button[]numberButtons數(shù)字按鈕數(shù)組ButtondotButton小數(shù)點按鈕ButtonplusMinusButton正負號按鈕ButtonbackspaceButton退格按鈕ButtonsquareButton平方按鈕ButtonclearButton清零按鈕ButtonequalButton等號按鈕TextFieldresultField顯示計算結(jié)果的文本框LinkedList<Double>dataList儲存數(shù)據(jù)的鏈表ButtonsqrtButton求平方根按鈕ButtonprimeButton判斷素數(shù)按鈕ButtonlogButton對數(shù)按鈕ButtoncubeButton立方按鈕ButtonreciprocalButton倒數(shù)按鈕②方法描述主類Calculator的方法描述表方法名描述publicCalculator()構(gòu)造函數(shù),創(chuàng)建計算器主窗口publicstaticvoidmain(String[]args)程序入口,從此類開始執(zhí)行publicvoidactionPerformed(ActionEvente)監(jiān)聽器,處理按鈕的點擊事件publicvoidcalculate()計算結(jié)果的方法publicvoidclear()清空數(shù)據(jù)的方法publicvoidbackspace()退格的方法publicvoidsquare()求平方的方法publicvoidsqrt()求平方根的方法publicvoidprime()判斷素數(shù)的方法publicvoidlog()求對數(shù)的方法publicvoidcube()求立方的方法publicvoidreciprocal()求倒數(shù)的方法(2)數(shù)字按鈕類NumberButton①成員變量NumberButton類成員變量表成員變量描述按鈕上的數(shù)字主類對象第8頁變量類型intnumber按鈕上的數(shù)字Calculatorcalculator主類對象②方法描述數(shù)字按鈕類NumberButton的方法描述表方法名描述publicNumberButton(intnumber,Calculatorcalculator)構(gòu)造函數(shù),創(chuàng)建數(shù)字按鈕對象publicvoidactionPerformed(ActionEvente)監(jiān)聽器,處理數(shù)字按鈕的點擊事件(3)運算符號按鈕類OperationButton①成員變量OperationButton類成員變量表成員變量描述運算符號主類對象第9頁變量類型Stringoperation運算符號Calculatorcalculator主類對象②方法描述運算符號按鈕類OperationButton的方法描述表方法名描述publicOperationButton(Stringoperation,Calculatorcalculator)構(gòu)造函數(shù),創(chuàng)建運算符號按鈕對象publicvoidactionPerformed(ActionEvente)監(jiān)聽器,處理運算符號按鈕的點擊事件華東交通大學(xué)課程設(shè)計報告六、設(shè)計體會與小結(jié)本次課程設(shè)計整體難度不大,但在細節(jié)處理方面遇到了一些問題。在課設(shè)過程中,我學(xué)習了Swing的使用以及用Java實現(xiàn)鏈表的數(shù)據(jù)結(jié)構(gòu)。這次課程設(shè)計中,我還學(xué)到了很多布局方面的知識。雖然數(shù)據(jù)結(jié)構(gòu)已經(jīng)很久沒有用過了,但是隨著時間的推移,用Java實現(xiàn)鏈表也變得越來越順手了。本次課程設(shè)計的程序構(gòu)架簡單,沒有用到很困難的算法,但這樣編寫出來的程序易于修改。雖然時間緊迫,但我學(xué)到了很多東西。最后感謝在課程設(shè)計中幫助過我的同學(xué)和老師。七、參考文獻[1]耿祥義.《Java2實用教程(第三版)》北京清華大學(xué)出版社2006.8[2]朱福喜.《Java語言程序設(shè)計》.北京清華大學(xué)出版社.2005[3]朱福喜,尹為民,余振坤.《Java語言與面向?qū)ο蟪绦蛟O(shè)計》.武漢武漢大學(xué)出版社.2002附錄程序代碼:packageTZB;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.border.*;importjava.util.LinkedList;publicclassCalculatorextendsJFrameimplementsActionListener{NumberButtonnumberButton[];OperationButtonoprationButton[];JButtondecimalButton,signButton,backspaceButton,squareButton,equalButton,clearButton,sqrtButton,primeButton,logButton,cubeButton,reciprocalButton;JPanelpanel;JTextFieldresultShow;Stringoperators[]={"+","-","*","/"};LinkedList<String>mylist;booleanequalFlag=false;JTextAreablank;}GUI的設(shè)計及監(jiān)視器的添加publicCalculator(){super("計算器");mylist=newLinkedList<String>();numberButton=newNumberButton[10];for(inti=0;i<=9;i++){numberButton[i]=newNumberButton(i);numberButton[i].addActionListener(this);}oprationButton=newOperationButton[4];for(inti=0;i<4;i++){}小數(shù)點按鈕=newJButton(".");正負號按鈕=newJButton("+/-");等號按鈕=newJButton("=");平方按鈕=newJButton("平方");立方按鈕=newJButton("立方");倒數(shù)按鈕=newJButton("1/x");退格按鈕=newJButton("退格");清零按鈕=newJButton("C");sqrt=newJButton("sqrt");log=newJButton("log");素數(shù)=newJButton("素數(shù)");清零按鈕.setForeground(Color.blue);退格按鈕.setForeground(Color.blue);等號按鈕.setForeground(Color.blue);平方按鈕.setForeground(Color.blue);立方按鈕.setForeground(Color.blue);倒數(shù)按鈕.setForeground(Color.blue);正負號按鈕.setForeground(Color.blue);小數(shù)點按鈕.setForeground(Color.blue);sqrt.setForeground(Color.blue);log.setForeground(Color.blue);素數(shù).setForeground(Color.blue);退格按鈕.addActionListener(this);}本文描述了一個計算器的GUI設(shè)計以及監(jiān)視器的添加。在構(gòu)造函數(shù)中,我們創(chuàng)建了一個名為"計算器"的窗口,并初始化了一個LinkedList<String>對象以存儲計算器的輸入。我們還創(chuàng)建了10個數(shù)字按鈕,并為它們添加了事件監(jiān)聽器。我們還創(chuàng)建了4個操作按鈕,但是在這個版本的代碼中,我們沒有為它們添加任何事件監(jiān)聽器。我們還創(chuàng)建了一些其他的按鈕,例如小數(shù)點按鈕、正負號按鈕、等號按鈕、平方按鈕、立方按鈕、倒數(shù)按鈕、退格按鈕、清零按鈕、sqrt按鈕、log按鈕和素數(shù)按鈕。我們?yōu)檫@些按鈕設(shè)置了藍色前景色,并為退格按鈕添加了事件監(jiān)聽器。Stringnum=(String)mylist.getLast();Strings=num.concat(""+number);mylist.set(2,s);//查看鏈表動態(tài)變化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();resultShow.setText(s);elseif(e.getSource()instanceofOperationButton){OperationButtonb=(OperationButton)e.getSource();if(mylist.size()==1){Stringfuhao=b.get運算符號();mylist.add(fuhao);//查看鏈表動態(tài)變化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();}elseif(mylist.size()==2){Stringfuhao=b.get運算符號();mylist.set(1,fuhao);//查看鏈表動態(tài)變化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();}elseif(運算符號.equals("-")){n=n1-n2;//查看鏈表動態(tài)變化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();}elseif(mylist.size()==3){Stringfuhao=b.get運算符號();//查看鏈表動態(tài)變化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();Stringnumber1=(String)mylist.getFirst();}}Stringnumber2=(String)mylist.getLast();Stringoperator=(String)mylist.get(1);try{doublen1=Double.parseDouble(number1);doublen2=Double.parseDouble(number2);doublen=0;if(operator.equals("+")){n=n1+n2;System.out.print(mylist.get(i)+"");}elseif(operator.equals("*")){n=n1*n2;}elseif(operator.equals("/")){n=n1/n2;}elseif(operator.equals("sqrt")){doubleg=Math.sqrt(n2);Strings=String.valueOf(g);}mylist.clear();mylist.add(""+n);mylist.add(operator);//查看鏈表動態(tài)變化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();resultShow.setText(""+n);}catch(Exceptionee){}}elseif(e.getSource()==等號按鈕){//等號操作的處理等號=true;if(mylist.size()==1||mylist.size()==2){Stringnum=(String)mylist.getFirst();for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();resultShow.setText(""+num);}elseif(mylist.size()==3){//處理最后一個數(shù)字和運算符Stringnumber2=(String)mylist.getLast();Stringoperator=(String)mylist.get(1);try{doublen1=Double.parseDouble(number1);doublen2=Double.parseDouble(number2);doublen=0;if(operator.equals("+")){n=n1+n2;}elseif(operator.equals("*")){n=n1*n2;}elseif(operator.equals("/")){n=n1/n2;}elseif(operator.equals("sqrt")){doubleg=Math.sqrt(n2);Strings=String.valueOf(g);}mylist.clear();mylist.add(""+n);mylist.add(operator);//查看鏈表動態(tài)變化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();resultShow.setText(""+n);}catch(Exceptionee){}}}resultShow.setText(num);}else{mylist.removeLast();resultShow.setText("0");}}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();try{doubled=Double.parseDouble(number2);d=Math.sqrt(d);Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("錯誤");}}}elseif(e.getSource()==素數(shù)){//素數(shù)按鈕操作的處理intd;intflag=1;if(mylist.size()==1||mylist.size()==2){Stringnumber1=(String)mylist.getFirst();try{d=Integer.parseInt(number1);for(inti=2;i<d/2;i++){if(d%i==0){flag=2;break;}}if(flag==1){resultShow.setText("輸入的數(shù)為素數(shù)");}else{resultShow.setText("輸入的數(shù)不是素數(shù)");}}catch(Exceptionee){resultShow.setText("請輸入正整數(shù)");}}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();d=Integer.parseInt(number2);resultShow.setText("請輸入正整數(shù)");}}if(e.getSource()==正負號按鈕){if(mylist.size()==1){Stringnumber1=(String)mylist.getFirst();try{doubled=Double.parseDouble(number1);d=-1*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("輸入有誤");}}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();try{doubled=Double.parseDouble(number2);d=-1*d;Stringstr=String.valueOf(d);mylist.set(2,str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("輸入有誤");}}}elseif(e.getSource()==平方按鈕){if(mylist.size()==1||mylist.size()==2){Stringnumber=(String)mylist.getLast();try{doubled=Double.parseDouble(number);d=d*d;Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("輸入有誤");}}}elseif(e.getSource()==平方根按鈕){if(mylist.size()==1||mylist.size()==2){Stringnumber=(String)mylist.getLast();try{doubled=Double.parseDouble(number);d=Math.sqrt(d);Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("輸入有誤");}}}elseif(e.getSource()==求倒數(shù)按鈕){if(mylist.size()==1||mylist.size()==2){Stringnumber=(String)mylist.getLast();try{doubled=Double.parseDouble(number);if(d==0){resultShow.setText("除數(shù)不能為0");}else{d=1/d;Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}}catch(Exceptionee){resultShow.setText("輸入有誤");}}}elseif(e.getSource()==求余按鈕){if(mylist.size()==2){Stringnumber1=(String)mylist.getFirst();Stringnumber2=(String)mylist.getLast();try{doubled1=Double.parseDouble(number1);doubled2=Double.parseDouble(number2);if(d2==0){resultShow.setText("除數(shù)不能為0");}else{doubled=d1%d2;Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}}catch(Exceptionee){resultShow.setText("輸入有誤");}}}elseif(e.getSource()==求冪按鈕){if(mylist.size()==2){Stringnumber1=(String)mylist.getFirst();Stringnumber2=(String)mylist.getLast();try{doubled1=Double.parseDouble(number1);doubled2=Double.parseDouble(number2);doubled=Math.pow(d1,d2);Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("輸入有誤");}}}elseif(e.getSource()==求階乘按鈕){if(mylist.size()==1){Stringnumber=(String)mylist.getFirst();try{intn=Integer.parseInt(number);if(n<0){resultShow.setText("輸入有誤");}else{intf=1;for(inti=1;i<=n;i++){f*=i;}Stringstr=String.valueOf(f);mylist.clear();mylist.add(str);resultShow.setText(str);}}catch(Exceptionee){resultShow.setText("輸入有誤");}}}elseif(e.getSource()==判斷素數(shù)按鈕){if(mylist.size()==1){Stringnumber=(String)mylist.getFirst();try{intd=Integer.parseInt(number);if(d<=1){resultShow.setText("輸入的數(shù)不是素數(shù)");}elseif(d==2||d==3){resultShow.setText("輸入的數(shù)是素數(shù)");}else{booleanflag=true;for(inti=2;i<=Math.sqrt(d);i++){if(d%i==0){flag=false;break;}}if(flag){resultShow.setText("輸入的數(shù)是素數(shù)");}else{resultShow.setText("輸入的數(shù)不是素數(shù)");}}}catch(Exceptionee){resultShow.setText("輸入有誤");}}}Stringnumber1=(String)mylist.getFirst();try{doubled=Double.parseDouble(number1);d=d*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptione){//異常處理}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();try{doubled=Double.parseDouble(number2);d=d*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptione){//異常處理}}elseif(e.getSource()==立方按鈕){if(mylist.size()==1||mylist.size()==2){Stringnumber1=(String)mylist.getFirst();try{doubled=Double.parseDouble(number1);d=d*d*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptione){//異常處理}}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();try{doubled=Double.parseDouble(number2);d=d*d*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptione){//異常處理}}}華東交通大學(xué)課程設(shè)計報告try{if(mylist.size()==1||mylist.size()==2){Stringnumber1=(String)mylist.get

溫馨提示

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

評論

0/150

提交評論