java模擬科學計算器課程設計_第1頁
java模擬科學計算器課程設計_第2頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

8/8java模擬科學計算器課程設計軟件學院

課程設計報告書

課程名稱面向對象程序設計

設計題目模擬科學計算器

專業班級

學號

姓名

指導教師

2012年6月

目錄

1設計時間(3)

2設計目的(3)

3設計任務(3)

4設計內容(3)

4.1需求分析(3)

4.1.1問題描述(3)

4.1.2基本要求(3)

4.2總體設計(3)

4.2.1包的描述(3)

4.2.2類的描述(4)

4.2.3類之間的關系(4)

4.3詳細設計(5)

4.3.1類圖(5)

4.3.2頁面設計(6)

4.4測試與分析(6)

4.5程序與代碼(8)

5總結與展望(17)

1設計時間

2012年6月11日-17日

2設計目的

《面向對象程序設計》是一門實踐性很強的計算機專業基礎課程,課程設計是學習完該課程后進行的一次較全面的綜合練習。其目的在于通過實踐加深學生對面向對象程序設計的理論、方法和基礎知識的理解,掌握使用Java語言進行面向對象設計的基本方法,提高運用面向對象知識分析實際問題、解決實際問題的能力,提高自身的應用能力。

3設計任務

模擬科學計算器

要求:界面模擬Windows中的計算器程序。

實現基本數學運算、函數等功能:加、減、乘、除、階乘、正弦、余弦和指數運算。

實現要點:添加相關組件并進行按鈕事件處理。

4設計內容

4.1需求分析

4.1.1問題描述

日常生活中經常需要用到計算器,比如科學計算,數值計算,會計業務等等,在Applet中實現一個精巧的計算器,可以讓用戶的操作也更方便和快捷。

4.1.2基本要求

本項目需要實現一個具有四則運算的計算器,能夠實現基本的加、減、乘、除運算,以及其他的輔助功能(階乘、正弦、余弦、指數運算);界面簡潔實用,模擬Windows中的計算器程序。要提供主要的設計思路、類的設計。

4.2總體設計

4.2.1包的描述

本程序導入了

java.awt.BorderLayout包,

java.awt.Color包,

java.awt.GridLayout包,

java.awt.event.ActionEvent包,

java.awt.event.ActionListener包,

java.text.DecimalFormat包,

javax.swing.JButton包,

javax.swing.JFrame包,

javax.swing.JPanel包,

javax.swing.JTextField包

4.2.2類的描述

本程序共有五個類。

其中Calculator是主類,main方法里會建立一個Calculator對象。

Signs類為內部類,是一個監聽器類,實現Actionlistener,實現運算符號的事件監聽。當運算符號為一目運算符(sin,cos,n!)時,實現該類的actionPerformed方法,對sin,cos,n!按鈕進行事件處理。

Clear類為內部類,是一個監聽器類,實現Actionlistener,實現清除按鈕的事件監聽。當按鈕為"C"(清零)或"Backspace"時,實現該類的actionPerformed方法,對C,Backspace按鈕進行事件處理。

Num類為內部類,是一個監聽器類,實現Actionlistener,實現數字輸入的事件監聽。當點擊0-9這十個數字按鈕時,如果是要輸入的運算數則將文本框清空后將數字顯示在文本框中。

Dot類為內部類,是一個監聽器類,實現Actionlistener,實現小數點的事件監聽。當點擊小數點按鈕時,如果文本框中輸入值中沒有小數點則在文本后加一個小數點。

4.2.3類之間的關系

類Calculator與Signs類、Clear類、Num類、Dot類是依賴關系,Calculator依賴于Signs類、Clear類、Num類、Dot類。Calculator類中初始化init方法中調用addButton方法,其中創建了Signs類、Clear類、Num類、Dot類的實例,以實現Calculator類的實例的創建。

Signs類、Clear類、Num類、Dot類與Calculator類有關聯關系。Signs類、Clear類、Num類、Dot類中的actionPerformed方法中調用了Calculator類中的私有變量tf、IfResult、oper、result、df,與Calculator類中這些變量值相關聯。

4.3詳細設計

4.3.1類圖

(1)Calculator類圖(2)Signs類圖(3)Clear類圖

(4)Num類(5)Dot類

Calculator類tfpanel1Panel2Panel3IfResultoperresultdf

calculator()init()addButton()getResult()main()

Signs類

actionPerformed()

Clear類

actionPerformed()

Num類

actionPerformed()

Dot類

actionPerformed()

圖4.3.1-1Calculator類圖4.3.1-3Clear類

圖4.3.1-2Signs類圖4.3.1-4Num類

圖4.3.1-5Dot類

4.3.2頁面設計

圖4.3.2-1科學計算器頁面

4.4測試與分析

(1)加運算(2)減運算

圖4.4-1加運算1+2結果圖4.4-2減運算18-3結果

(3)乘運算(4)除運算

圖4.4-3乘運算2×4結果圖4.4-4除運算8÷5結果(5)退格(2)清零

圖4.4-5Backspace1.6退格結果圖4.4-6C1.清零結果(7)正弦運算(8)余弦運算

圖4.4-7sin90結果圖4.4-8cos90結果(9)指數運算(10)階乘運算

圖4.4-92^3結果圖4.4-108!結果

4.5程序代碼

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.GridLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.text.DecimalFormat;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

publicclassCalculatorextendsJFrame

{

privateJTextFieldtf;

privateJPanelpanel1,panel2,panel3;

privatebooleanIfResult=true;

privateStringoper="=";

privatedoubleresult=0;

privateDecimalFormatdf;

publicCalculator(){

super("科學計算器");//設置標題欄

df=newDecimalFormat("#.####");//保留四位小數

this.setLayout(newBorderLayout(10,5));

panel1=newJPanel(newGridLayout(1,2,10,10));

panel2=newJPanel(newGridLayout(5,4,5,5));//5行4列

panel3=newJPanel(newBorderLayout(5,5));

tf=newJTextField();//文本域,即為計算器的屏幕顯示區域tf.setEditable(false);//文本區域不可編輯

tf.setBackground(Color.white);//文本區域的背景色

tf.setHorizontalAlignment(JTextField.RIGHT);//文字右對齊

tf.setText("0");

init();//對計算器進行初始化

}

privatevoidinit()//初始化操作,添加按鈕{

addButton(panel1,"Backspace",newClear(),Color.orange);

addButton(panel1,"C",newClear(),Color.orange);

addButton(panel2,"7",newNum(),Color.blue);

addButton(panel2,"8",newNum(),Color.blue);

addButton(panel2,"9",newNum(),Color.blue);

addButton(panel2,"÷",newSigns(),Color.red);

addButton(panel2,"4",newNum(),Color.blue);

addButton(panel2,"5",newNum(),Color.blue);

addButton(panel2,"6",newNum(),Color.blue);

addButton(panel2,"×",newSigns(),Color.red);

addButton(panel2,"1",newNum(),Color.blue);

addButton(panel2,"2",newNum(),Color.blue);

addButton(panel2,"3",newNum(),Color.blue);

addButton(panel2,"-",newSigns(),Color.red);

addButton(panel2,".",newDot(),Color.blue);

addButton(panel2,"0",newNum(),Color.blue);

addButton(panel2,"!",newSigns(),Color.magenta);

addButton(panel2,"+",newSigns(),Color.red);

addButton(panel2,"sin",newSigns(),Color.magenta);

addButton(panel2,"cos",newSigns(),Color.magenta);

addButton(panel2,"^",newSigns(),Color.magenta);

addButton(panel2,"=",newSigns(),Color.cyan);

panel3.add(panel1,BorderLayout.NORTH);

panel3.add(panel2,BorderLayout.CENTER);

this.add(tf,BorderLayout.NORTH);

this.add(panel3);

pack();

this.setResizable(false);//窗口不可改變大小

this.setLocation(300,200);

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

privatevoidaddButton(JPanelpanel,Stringname,ActionListeneraction,Colorcolor){//統一設置按鈕的的使用方式JButtonbt=newJButton(name);

panel.add(bt);//在面板上增加按鈕

bt.setForeground(color);//設置前景(字體)顏色

bt.addActionListener(action);//增加監聽事件

}

privatevoidgetResult(doublex)//+-×÷^=操作

{

if(oper=="+")

{

result+=x;

}

else

if(oper=="-")

{

result-=x;

}

else

if(oper=="×")

{

result*=x;

}

else

if(oper=="÷")

{

result/=x;

}

else

if(oper=="^")

{

result=Math.pow(result,x);

}

else

if(oper=="=")

{

result=x;

}

tf.setText(df.format(result));

}

classSignsimplementsActionListener

{

publicvoidactionPerformed(ActionEvente)

{

Stringstr=e.getActionCommand();

if(str.equals("sin"))//sin求正弦函數

{

doublei=Double.parseDouble(tf.getText());

tf.setText(String.valueOf(df.format(Math.sin(i))));

}

elseif(str.equals("cos"))//cos求余弦函數

{

doublei=Double.parseDouble(tf.getText());

tf.setText(String.valueOf(df.format(Math.cos(i))));

}

elseif(str.equals("!"))//n!求階乘{

doublei=Double.parseDouble(tf.getText());

if((i%2==0)||(i%2==1))//如果是整數進行階乘操作

{

intj=(int)i;//強制類型轉換

intresult=1;

for(intk=1;k0)

{

if(tf.getText().length()>1)

{

tf.setText(tf.getText().substring(0,tf.getText().length()-1));

//使用退格刪除最后一位字符

}else

{

tf.setText("0");

IfResult=true;

}

}else

{

if(tf.getText().length()>2)

{

tf.setText(tf.getText().substring(0,tf.getText().length()-1));

}

else

{

tf.setText("0");

IfResult=true;

}

}

}

}

}

classNumimplementsActionListener

{

publicvoidactionPerformed(ActionEvente)

{

Stringstr=e.getActionCommand();

if(IfResult)

{

tf.setText("");

IfResult=false;

}

else

{

tf.setText(tf.getText().trim()+str);

if(tf.getText().equals("0"))

{

tf.setText("0");

IfResult=true;

}

}

}

}

classDotimplementsActionListener

{

publicvoidactionPerformed(ActionEvente)

{

IfResult=false;

if(tf.getText().trim().indexOf(".")==-1)

{

tf.setText(tf.getText()+".");

}

}

}

publicstaticvoidmain(String[]args)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論