

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 精密合金企業數字化轉型與智慧升級戰略研究報告
- 磁致伸縮液位計企業數字化轉型與智慧升級戰略研究報告
- 自行車輪輞企業數字化轉型與智慧升級戰略研究報告
- 聚丁二酸丁二醇酯(PBS)纖維企業縣域市場拓展與下沉戰略研究報告
- 2025公司管理人員安全培訓考試試題及答案一套
- 進入超市購物安全指南
- 2025年自動氣體滅火系統合作協議書
- 習題與核心素養培養-全面剖析
- 黑龍江省牡丹江市林口縣2020-2021學年八年級下學期期末考試物理試題【含答案解析】
- 超導材料應用研究-第1篇-全面剖析
- 被執行人生活費申請書范文
- 2024年江蘇省鐵路集團有限公司招聘筆試參考題庫含答案解析
- 社區成人血脂管理中國專家共識2024(完整版)
- 老年健康照護課件
- 西師版小學三年級下冊數學半期試題
- 過敏性皮炎的護理查房
- 2023年《思想道德與法治》期末考試復習題庫(帶答案)
- GB/T 19494.1-2023煤炭機械化采樣第1部分:采樣方法
- 彩繪曼陀羅課件
- GB/T 28417-2023碳素軸承鋼
- 華為人力資源管理手冊
評論
0/150
提交評論