

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、- 目錄 一、課程設(shè)計(jì)目的2二、課程設(shè)計(jì)任務(wù).22.1、設(shè)計(jì)任務(wù)22.2、課程設(shè)計(jì)要求:22.3、需求分析2三、開發(fā)工具與平臺. 33.1、開發(fā)工具33.2、開發(fā)平臺34、 設(shè)計(jì)思路.4 4.1、 界面設(shè)計(jì).44.2.1、邏輯設(shè)計(jì)4 4.2.2、程序流程圖.5 4.2.3、主要代碼展示及說明.54.3、 程序測試10五、實(shí)驗(yàn)小結(jié)11六、附錄 (程序代碼)12一、課程設(shè)計(jì)目的1、熟練掌握java面向?qū)ο缶幊獭?、選擇適宜的數(shù)據(jù)構(gòu)造實(shí)現(xiàn)需求。3、熟練使用各種控制構(gòu)造。4、GUI組件、事件處理技術(shù)。二、課程設(shè)計(jì)任務(wù)2.1、設(shè)計(jì)任務(wù)設(shè)計(jì)一個簡易的計(jì)算器,可以進(jìn)展四則運(yùn)算:加、減、乘、除等限于十進(jìn)制下程
2、序要求:1應(yīng)具有相應(yīng)的界面,可參考Windows操作系統(tǒng)自帶的計(jì)算器界面。2操作符號定為:“+,“-,“*,“/,“+/-等。按國際慣例設(shè)計(jì)3用戶通過點(diǎn)擊程序界面上按鈕,實(shí)現(xiàn)數(shù)字、運(yùn)算符的輸入操作。4以上局部為必須完成的容。選作局部:1具有操作符號“1/*,“sqrt開方,“.小數(shù)功能等。2.2、課程設(shè)計(jì)要求: 1應(yīng)用自己所學(xué)課程知識完成對計(jì)算器的根本任務(wù)。 2查閱相關(guān)資料,學(xué)習(xí)和掌握工程中涉及的新知識,提高自學(xué)能力。 3通過應(yīng)用java程序編寫計(jì)算器來提升自己對簡單的圖形界面有一定的掌握和了解。2.3、需求分析1. 設(shè)計(jì)的計(jì)算器可以完成加法、減法、乘法、除法的簡單運(yùn)算。2. 實(shí)現(xiàn)一些簡單的擴(kuò)
3、展運(yùn)算,如:正負(fù)號、倒數(shù)、退格、清零等功能。3. 添加小數(shù)點(diǎn)功能,用以實(shí)現(xiàn)浮點(diǎn)型數(shù)據(jù)的計(jì)算。4. 使用布局管理器設(shè)計(jì)一個計(jì)算器的界面,使用事件監(jiān)聽器處理數(shù)據(jù)的輸入,并完成相關(guān)的計(jì)算。三、開發(fā)工具與平臺3.1、開發(fā)工具 Microsoft Windows 7旗艦版3.2、開發(fā)平臺 JDK1.6.0-02 和UE編譯器四、設(shè)計(jì)思路 4.1、界面設(shè)計(jì):如圖3-1圖3-14.2.1、邏輯設(shè)計(jì):(1) 根據(jù)所設(shè)計(jì)出來的界面,首先要設(shè)計(jì)其GUI界面,總體界面有一個文本框,20個按鈕,總體界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/等按鈕放置到一個面板Panel
4、中,完成界面設(shè)計(jì)。(2) 設(shè)計(jì)計(jì)算流程,首先點(diǎn)擊數(shù)字按鈕時,將按鈕數(shù)值添加到文本框當(dāng)中,并將該數(shù)值保存到一個字符串中,再次點(diǎn)擊數(shù)字按鈕時,將之前保存的字符串與新的數(shù)值拼接起來,再添加到文本框當(dāng)中,直到點(diǎn)擊運(yùn)算符按鈕時,將文本框當(dāng)中的字符串保存在一個字符串變量中,然后重置文本框容,將運(yùn)算符號顯示到文本框中,隨后輸入第二個計(jì)算數(shù)據(jù)時,用同樣的方法保存數(shù)據(jù),最后通過控制“=運(yùn)算符先將字符串?dāng)?shù)據(jù)轉(zhuǎn)化成雙精度類型,然后計(jì)算出結(jié)果并顯示到文本框當(dāng)中。(3) 根本運(yùn)算設(shè)計(jì)完成以后則開場考慮其他個別功能的實(shí)現(xiàn),例如倒數(shù)、清零、退格等功能的實(shí)現(xiàn),清零直接重置文本框容,退格功能則采用substring函數(shù)截取字符
5、串長度。 4.2.2、程序流程圖: 4.2.3、主要代碼展示及說明: 總體代碼的設(shè)計(jì):程序采用繼承windowadapter類,新建Jframe窗體,利用數(shù)組來定義otton按鈕,同時利用數(shù)組注冊監(jiān)聽,采用4行5列網(wǎng)格布局,完成計(jì)算器界面的根本設(shè)置,在窗體的正常關(guān)閉方面,采用匿名類實(shí)現(xiàn)窗體的正常關(guān)閉。最后對按鈕進(jìn)展計(jì)算分析,分別設(shè)定輸入數(shù)據(jù)的A類、運(yùn)算符控制的Opertion類,退格功能的BackSpace類、計(jì)算結(jié)果的Result類等等,一步步實(shí)現(xiàn)計(jì)算器的根本功能!1類A的設(shè)計(jì)數(shù)據(jù)的輸入class A implements ActionListenerpublic void actionPe
6、rformed(ActionEvent e)String a = Jte*t.getTe*t();String s = e.getActionmand();if(a.equals("0.")|a.equals("+")|a.equals("-")|a.equals("*")|a.equals("/") Jte*t.setTe*t(s);elseif(flag2)Jte*t.setTe*t(s);flag2=false;elseJte*t.setTe*t(a+s);功能解釋:程序開場時,程序初始化
7、文本框的容為“0.,點(diǎn)擊數(shù)字按鈕,則調(diào)用類A,首先用a來獲取當(dāng)前文本框容,s來獲取按鈕數(shù)值,然后進(jìn)展判斷,假設(shè)a的值為上述代碼的值則輸出s的值,再次點(diǎn)擊數(shù)字按鈕時,再次調(diào)用A類,此時a的值為上次輸入的s值,第一個if語句不滿足,執(zhí)行下個if語句if(flag2),flag2初始值為false,該語句的功能是在執(zhí)行了“=號按鈕時,防止新的數(shù)字按鈕的值合并到到已經(jīng)得出的結(jié)果上,例如:12+12=24,此時再點(diǎn)擊數(shù)字按鈕3時,則文本框容被重置,輸出數(shù)值3,而不是243,如果if(flag2)不滿足,則將字符串a(chǎn)和s合并并輸出,得出第一個要計(jì)算的數(shù)據(jù)。2類Opertion的設(shè)計(jì):運(yùn)算符的控制class
8、 Opertion implements ActionListener public void actionPerformed(ActionEvent e)cal=e.getActionmand();if(flag1=true) *=Jte*t.getTe*t();Jte*t.setTe*t(cal);flag1=false;功能解釋:當(dāng)點(diǎn)擊運(yùn)算符控制按鈕時,首先將運(yùn)算符的數(shù)值賦值給cal初值為空,緊接著進(jìn)展判斷,flag1初值為ture,該類的作用為在點(diǎn)擊運(yùn)算符按鈕時,將計(jì)算的第一個數(shù)據(jù)保存在*字符串變量當(dāng)中,然后將文本框容重置為點(diǎn)擊的運(yùn)算符的數(shù)值,類的結(jié)尾將flag1賦值為false,防止
9、再次點(diǎn)擊運(yùn)算符按鈕時改變了*的值。附:此時文本框容為運(yùn)算符的值,輸入第二個計(jì)算數(shù)據(jù)時,點(diǎn)擊數(shù)字按鈕,則再次調(diào)用A類,此時滿足A類中第一個if語句,文本框容被重置為數(shù)字按鈕的值,接下來與獲取第一個計(jì)算數(shù)據(jù)步驟一樣,直到點(diǎn)擊“=號運(yùn)算符為止!3類Result的設(shè)計(jì):計(jì)算并輸出結(jié)果class Result implements ActionListener/計(jì)算并顯示結(jié)果public void actionPerformed(ActionEvent e)double num1;num1=Double.parseDouble(*);y=Jte*t.getTe*t();double num2;num2=
10、Double.parseDouble(y);double result=0;if(num2!=0)if(cal.equals("+")result=num1+num2;if(cal.equals("-")result=num1-num2;if(cal.equals("*")result=num1*num2;String s1=Double.toString(result);Jte*t.setTe*t(s1);if(cal.equals("/")if(num2=0)Jte*t.setTe*t("除數(shù)不能為0
11、");elseresult=num1/num2;String s1=Double.toString(result);Jte*t.setTe*t(s1); flag1=true; flag2=true;功能解釋:首先定義兩個Double型num1,num2,將之前保存的第一個計(jì)算數(shù)據(jù)*強(qiáng)制轉(zhuǎn)換為Double型后賦值給num1,接著用字符串變量y來獲取當(dāng)前文本框的容,即第二個計(jì)算數(shù)據(jù)的值,同樣再將其強(qiáng)制轉(zhuǎn)換Double型后賦值給num2,然后進(jìn)展運(yùn)算符判斷,對cal的值進(jìn)展比擬,然后進(jìn)展相應(yīng)的計(jì)算,將計(jì)算的結(jié)果轉(zhuǎn)換成字符串后將其輸出到文本框中,在類的最后將flag1、flag2賦值為tr
12、ue,作用是將計(jì)算的結(jié)果當(dāng)作第二次計(jì)算的數(shù)據(jù)進(jìn)展再運(yùn)算,即將結(jié)果重新賦值給*作為第一個計(jì)算數(shù)據(jù)!附:在此類中還考慮了當(dāng)除數(shù)為零的情況。4類BackSpace的設(shè)計(jì):功能類退格class BackSpace implements ActionListenerpublic void actionPerformed(ActionEvent e)String s = e.getActionmand();String s1 = Jte*t.getTe*t();if(s.equals("退格")s1=new String (s1.substring(0,s1.length()-1);J
13、te*t.setTe*t(s1);功能解釋:這是計(jì)算器附加功能的實(shí)現(xiàn),這里只介紹退格功能,像正負(fù)號、求倒數(shù)、清零等功能相似,所以就不再一一介紹。首先獲取退格按鈕的命令值賦給s,然后獲取當(dāng)前文本框的容,即輸入的數(shù)據(jù),將其賦給s1,接著進(jìn)展判斷,利用substring函數(shù)將s1字符串截取為從第一個字符至倒數(shù)第二個字符為止的字符串并重新賦值給s1,再將其輸出到文本框,實(shí)現(xiàn)退格的功能。4.3、 程序測試1.簡單的運(yùn)算:以加法為例:123+456分析:計(jì)算的結(jié)果為579.0,為雙精度型,計(jì)算的結(jié)果被設(shè)置在文本框的最右端,該計(jì)算器的一個特點(diǎn)是可直接在文本框中輸入數(shù)據(jù)以及進(jìn)展更改。2.倒數(shù)的運(yùn)算:以123為
14、例分析:輸出的結(jié)果如下圖,倒數(shù)功能實(shí)現(xiàn),計(jì)算時,不僅是結(jié)果,輸入的數(shù)據(jù)同樣可以先實(shí)現(xiàn)倒數(shù)功能后再進(jìn)展相應(yīng)的計(jì)算,沒有影響!3.退格的運(yùn)算:以123為例分析:輸出的結(jié)果如下圖,本計(jì)算器退格鍵有一個特點(diǎn)是,就算是是計(jì)算后得出的結(jié)果也能實(shí)現(xiàn)退格,缺點(diǎn)是不能很好的處理小數(shù)點(diǎn)的問題,因?yàn)樾?shù)點(diǎn)也是字符串的一局部。4.正負(fù)號的運(yùn)算:以123為例分析:輸出的結(jié)果如下圖,正負(fù)號添加能夠很好的實(shí)現(xiàn),但可以進(jìn)展一些改良,比方在計(jì)算過程當(dāng)中直接點(diǎn)擊負(fù)號運(yùn)算符輸入負(fù)數(shù)進(jìn)展計(jì)算!5.總體分析:該計(jì)算器根本運(yùn)算沒有問題,清零、正負(fù)號、求倒數(shù)、退格功能都能很好的實(shí)現(xiàn),總體能完成一個計(jì)算器的根本功能,但仍有許多地方需要改良,
15、比方小數(shù)點(diǎn)的實(shí)現(xiàn)所存在的一些問題,雖然在根本的運(yùn)算過程當(dāng)中不會造成太大影響,但這依然不能認(rèn)為是一個很好的計(jì)算器,同時,在另一方面,該計(jì)算器還沒能很好的實(shí)現(xiàn)連續(xù)計(jì)算的功能,必須每次按下等號按鈕計(jì)算出結(jié)果后才能用產(chǎn)生的結(jié)果接著進(jìn)展下一次的計(jì)算,改良的方法是在運(yùn)算符上同時注冊Result類,讓運(yùn)算符同時擁有計(jì)算結(jié)果的功能。五、實(shí)驗(yàn)小結(jié)本次課程設(shè)計(jì)到此算是告一段落了,經(jīng)過這次的學(xué)習(xí),我學(xué)到了很多東西,在此根底上更加穩(wěn)固了自己對java的認(rèn)識與了解。在做本工程是時候,會遇到很多小問題,比方說,在整個運(yùn)算過程中要如何確保輸入的計(jì)算數(shù)據(jù)哪個是第一個計(jì)算數(shù)據(jù)的,哪個是第二個計(jì)算數(shù)據(jù)的,同時也要區(qū)分運(yùn)算符,因?yàn)?/p>
16、該計(jì)算器程序應(yīng)用的都是利用字符串來完成計(jì)算的,而且不能重復(fù)輸出運(yùn)算符,更不能將運(yùn)算符錯誤的存儲在了第一個計(jì)算數(shù)據(jù)的數(shù)值中,也得考慮到萬一不小心重復(fù)點(diǎn)擊了運(yùn)算符按鈕會不會造成第一個計(jì)算數(shù)據(jù)的重新賦值等等問題,最后想到利用布爾類型來很好的控制運(yùn)算符的應(yīng)用!此次課程設(shè)計(jì)讓我更了解熟悉了Java中的圖形用戶界面和它的編程方式。在完成課題的過程中也不斷充實(shí)了自己,學(xué)習(xí)到了很多以前沒有學(xué)習(xí)到的知識,收獲很大。最大的收獲就是對大學(xué)學(xué)習(xí)的總結(jié)和培養(yǎng)了解決困難的信心和能力,使我對所學(xué)知識能夠融會貫穿,又不斷豐富了新知識。Java計(jì)算器設(shè)計(jì)使得我們對所學(xué)的專業(yè)課有了更為深刻的認(rèn)識,使得知識得到了穩(wěn)固和提高。在接下
17、來的時間里,我覺得我要更加努力的往深一層次的方面看齊,了解更多有關(guān)java的知識,對java有更深一步的了解,我會一步一步的走下去!六、附錄 (程序代碼)import java.awt.*;import java*.swing.*;import java.awt.event.*;public class TheCalculator e*tends WindowAdapter/程序框架繼承自WindowAdapter類private JTe*tField Jte*t=new JTe*tField("0.");private JFrame f=new JFrame("
18、計(jì)算器-磊");private String *="private String y="private String cal="private boolean flag1=true;private boolean flag2=false;public void init()/初始化String buttonValue = new String"1","2","3","+","C","4","5","6&qu
19、ot;,"-","退格","7","8","9","*","1/*","0","+/-",".","/","="Container contain = f.getContentPane();JPanel Jpan = new JPanel();utton =new utton20;contain.setLayout(new BorderLayout();/采
20、用4行5列的網(wǎng)格布局Jpan.setLayout(new GridLayout(4,5);Jte*t.setHorizontalAlignment(JTe*tField.RIGHT);contain.add(Jte*t,"North");contain.add(Jpan);A num=new A();/數(shù)據(jù)Result re=new Result();/結(jié)果Opertion op=new Opertion();/運(yùn)算符Clear cl=new Clear();/清零BackSpace back=new BackSpace();/退格CountDown count_d=new
21、 CountDown();/倒數(shù)Strains stra=new Strains();/相反數(shù)for(int i = 0 ; i <.length ; i+)/利用For循環(huán)添加按鈕i = new utton (buttonValuei);Jpan.add(i); if(i=3 | i=8 | i=13 | i=18)i.addActionListener(op);if(i=0 | i=1 | i=2 | i=5 | i=6 | i=7| i=10 | i=11 | i=12 | i=15 | i=17)i.addActionListener(num);if(i=3|i=4|i=8|i=
22、9)|(i>12)&&(i<=19)&&i!=15)i.setForeground(new Color(255, 0, 0);elsei.setForeground(new Color(0, 0, 255); /控制按鈕字體顏色4.addActionListener(cl);9.addActionListener(back);14.addActionListener(count_d);16.addActionListener(stra);19.addActionListener(re);f.setSize(320,240);f.setVisible(
23、true);f.addWindowListener(/采用匿名類實(shí)現(xiàn)窗口的正常關(guān)閉new WindowAdapter()public void windowClosing(WindowEvent e)System.e*it(0););class A implements ActionListener/輸入數(shù)據(jù)public void actionPerformed(ActionEvent e)String a = Jte*t.getTe*t();String s = e.getActionmand();if(a.equals("0.")|a.equals("+&qu
24、ot;)|a.equals("-")|a.equals("*")|a.equals("/") Jte*t.setTe*t(s);elseif(flag2)Jte*t.setTe*t(s);flag2=false;elseJte*t.setTe*t(a+s);class Opertion implements ActionListener public void actionPerformed(ActionEvent e)cal=e.getActionmand();if(flag1=true) *=Jte*t.getTe*t();Jte
25、*t.setTe*t(cal);flag1=false;class Clear implements ActionListener/清零功能public void actionPerformed(ActionEvent e)Jte*t.setTe*t("0.");class CountDown implements ActionListener/求倒數(shù)類public void actionPerformed(ActionEvent e)String s = e.getActionmand();String s1 = Jte*t.getTe*t();if(s.equals(&
26、quot;1/*")s1 = new String ("+1/Double.parseDouble(s1);Jte*t.setTe*t(s1);class Strains implements ActionListener /求相反數(shù)類public void actionPerformed(ActionEvent e)String s = e.getActionmand();String s1 = Jte*t.getTe*t();if(s.equals("+/-")s1=new String ("+(0-Double.parseDouble(s1);Jte*t.setTe*t(s1);class BackSpace implements Ac
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025的標(biāo)準(zhǔn)合同協(xié)議范本
- 財務(wù)管理專題講座
- 課程故事大班自主簽到
- 急救生存鏈步驟
- 二零二五學(xué)校聘用教師勞動合同書
- 二零二五人事委托代理協(xié)議書
- 部隊(duì)感染控制管理制度
- 食品加工全程管理制度
- 門診處方登記管理制度
- 餐飲前廳管理制度意義
- 《事故汽車常用零部件修復(fù)與更換判別規(guī)范》
- 2023-2024學(xué)年河南省安陽市殷都區(qū)八年級(下)期末數(shù)學(xué)試卷(含答案)
- 國家糧食和物資儲備局湖北局三三八處招聘筆試參考題庫含答案解析2024
- 江蘇省蘇州市昆山、太倉、常熟、張家港市2023-2024學(xué)年七年級下學(xué)期語文期末試卷
- 家族辦公室公司章程
- 敲墻搬運(yùn)合同范本
- (高清版)JTGT 5190-2019 農(nóng)村公路養(yǎng)護(hù)技術(shù)規(guī)范
- 浙江省強(qiáng)基聯(lián)盟聯(lián)考2023-2024學(xué)年高一下學(xué)期5月聯(lián)考語文試題(含答案)
- 質(zhì)量通病防治指引(二次結(jié)構(gòu))
- 2024年輔警招聘考試試題庫含完整答案(各地真題)
- 《工程建設(shè)標(biāo)準(zhǔn)強(qiáng)制性條文電力工程部分2023年版》
評論
0/150
提交評論