課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第1頁(yè)
課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第2頁(yè)
課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第3頁(yè)
課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第4頁(yè)
課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

j目錄TOC\o"1-3"\u第1章課題概述 第1章課題概述本次課程設(shè)計(jì)的題目是設(shè)計(jì)并實(shí)現(xiàn)仿照Window系統(tǒng)中的“計(jì)算器”,利用Java的GUI實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器。1.1課題的目的日常生活中我們經(jīng)常會(huì)遇到一些小型數(shù)據(jù)計(jì)算的問題,計(jì)算器在我們的生活中常常會(huì)使用到,本課程設(shè)計(jì)就是以此為出發(fā)點(diǎn),設(shè)計(jì)了這樣一個(gè)簡(jiǎn)單的計(jì)算器,用以實(shí)現(xiàn)基本的數(shù)學(xué)運(yùn)算。在java語言當(dāng)中通過定義類,類中的各種方法實(shí)現(xiàn)對(duì)計(jì)算器相關(guān)功能的實(shí)現(xiàn),并通過與用戶自己手動(dòng)輸入并選擇運(yùn)算功能實(shí)現(xiàn)計(jì)算功能,是一個(gè)完全由用戶控制的簡(jiǎn)易計(jì)算器。本次課程設(shè)計(jì),通過界面以及其中的邏輯處理,完成了四則運(yùn)算的處理。通過awt包或者swing包中的界面設(shè)計(jì)部分對(duì)界面設(shè)計(jì)的細(xì)節(jié)可以有更多的了解。利用面向?qū)ο蟮乃枷耄瑢⒏鱾€(gè)組件的事件響應(yīng)分別用不同的類表達(dá)出來。面向?qū)ο蟮乃枷霃暮艽蟪潭壬峡梢宰尦绦虻乃悸犯忧逦?,而且可重用性很高。?duì)于具有相同事件響;應(yīng)的組件則可以調(diào)用相同的類來處理事件。除此之外,利用棧的知識(shí)來解決運(yùn)算符優(yōu)先的問題也讓我們對(duì)java中的棧有了更多的了解。1.2課題的要求仿照Window系統(tǒng)中的“計(jì)算器”,利用Java的GUI實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器。程序的基本功能:1.單擊“計(jì)算器”上的數(shù)字按鈕(0-9)可以設(shè)置參與計(jì)算的運(yùn)算數(shù)。2.單擊“計(jì)算器”上的運(yùn)算符按鈕(+、-、*、/)可以選擇運(yùn)算符號(hào)。3.單擊“計(jì)算器”上的“=”按鈕顯示計(jì)算結(jié)果。4.應(yīng)用自己所學(xué)課程知識(shí)完成對(duì)計(jì)算器的基本任務(wù)。5.查閱相關(guān)資料,學(xué)習(xí)和掌握項(xiàng)目中涉及的新知識(shí),提高自學(xué)能力。6.通過應(yīng)用java程序編寫計(jì)算器來提升自己對(duì)簡(jiǎn)單的圖形界面有一定的掌握和了解。第2章概要設(shè)計(jì)2.1整個(gè)程序的模塊結(jié)構(gòu)及流程在設(shè)計(jì)程序的時(shí)候,考慮到計(jì)算器的功能,首先編寫一個(gè)CAL類,在該類中按照其功能分別寫了一個(gè)方法實(shí)現(xiàn),在程序開始后,可以看到一個(gè)控制面板形式的計(jì)算器界面展現(xiàn)在用戶面前,用戶自己輸入數(shù)據(jù)和選擇要運(yùn)算的功能進(jìn)行計(jì)算。具體方法有:加減乘除運(yùn)算、乘方開方運(yùn)算、正余弦正切運(yùn)算、刪除階乘運(yùn)算等具體的關(guān)系結(jié)構(gòu)如圖2-1所示圖2-1整個(gè)程序各功能模塊間的流程第3章計(jì)算器詳細(xì)設(shè)計(jì)3.1計(jì)算器界面3.1.1CAL主類的顯示布局為了方便用戶的使用,創(chuàng)建了一個(gè)帶按鈕的控制面板。將所有的運(yùn)算鍵、數(shù)字鍵等都放在該面板中方便用戶選擇與使用。所有的運(yùn)算選擇都完全由用戶掌控。3.1.2計(jì)算器顯示界面實(shí)現(xiàn)代碼publicvoiddisp(){ frame=newJFrame(); frame.setTitle("陳路堯的個(gè)人計(jì)算器"); frame.setSize(360,230); frame.setLocation(380,260); frame.setBackground(Color.LIGHT_GRAY); frame.setLayout(newFlowLayout(FlowLayout.CENTER)); frame.setResizable(false); //計(jì)算器disTop模塊,包括數(shù)字顯示文本框、back,ce,c,about按鈕 show=newJTextField(31); show.setText("0"); show.setHorizontalAlignment(SwingConstants.RIGHT); show.setEditable(false); frame.add(show); PaneldispTop=newPanel(); frame.add(dispTop); dispTop.setLayout(newGridLayout(1,4,3,3)); bc=newJButton("Back"); bc.setForeground(Color.BLUE); dispTop.add(bc); ce=newJButton("CE"); ce.setForeground(Color.BLUE); dispTop.add(ce); c=newJButton("C"); c.setForeground(Color.BLUE); dispTop.add(c); //廣告按鈕,顯示計(jì)算器制作者 ab=newJButton("About"); ab.setForeground(Color.BLUE); dispTop.add(ab); about=newJDialog(frame,"關(guān)于計(jì)算器",true); Labelct=newLabel("本計(jì)算器由陳路堯制作",1); ct.setForeground(Color.RED); about.add(ct,"Center"); about.setSize(200,100); about.setLocation(500,300); //主要按鈕顯示面板包括disLeft和disRight PaneldispMain=newPanel(); frame.add(dispMain); dispMain.setLayout(newGridLayout(1,2,10,10)); //disLeft面板,包括0-9、+/-、。這十二個(gè)按鈕 PaneldispLeft=newPanel(); dispMain.add(dispLeft); dispLeft.setLayout(newGridLayout(4,3,3,3)); PaneldispRight=newPanel(); //disRight面板,包括+、-、*、/、sqrt、%、1/x、=這個(gè)人幾個(gè)按鈕 dispMain.add(dispRight); dispRight.setLayout(newGridLayout(4,2,3,3)); //新建0-9這是個(gè)按鈕,并將其添加到disLeft中 for(l=9;l>=0;l--){ b[l]=newJButton(String.valueOf(l)); dispLeft.add(b[l]); b[l].addActionListener(this); } //新建其余按鈕,并分別將其添加到各自的面板中 jia=newJButton("+"); jia.setForeground(Color.RED); jian=newJButton("-"); jian.setForeground(Color.RED); cheng=newJButton("*"); cheng.setForeground(Color.RED); chu=newJButton("/"); chu.setForeground(Color.RED); equ=newJButton("="); equ.setForeground(Color.RED); point=newJButton("."); zf=newJButton("+/-"); sqrt=newJButton("sqrt"); bfh=newJButton("%"); ds=newJButton("1/x"); dispRight.add(chu); dispRight.add(sqrt); dispRight.add(cheng); dispRight.add(bfh); dispRight.add(jian); dispRight.add(ds); dispRight.add(jia); dispRight.add(equ); dispLeft.add(zf); dispLeft.add(point);3.2監(jiān)聽各個(gè)按鈕的類3.2.1編寫監(jiān)聽類目的編寫監(jiān)聽類的目的主要監(jiān)聽用戶所按下的數(shù)字鍵和運(yùn)算鍵,為了計(jì)算機(jī)后續(xù)的取得數(shù)據(jù)并進(jìn)行運(yùn)算做預(yù)備工作。給后續(xù)計(jì)算工作提供保障。3.2.2監(jiān)聽類實(shí)現(xiàn)代碼算法的代碼實(shí)現(xiàn)如下://為各個(gè)按鈕綁定監(jiān)聽器 about.addWindowListener(this); bc.addActionListener(this); ce.addActionListener(this); c.addActionListener(this); ab.addActionListener(this); jia.addActionListener(this); jian.addActionListener(this); cheng.addActionListener(this); chu.addActionListener(this); equ.addActionListener(this); point.addActionListener(this); zf.addActionListener(this); sqrt.addActionListener(this); bfh.addActionListener(this); ds.addActionListener(this); frame.addWindowListener(this); frame.setVisible(true); }3.3按鍵響應(yīng)類3.3.1響應(yīng)類編寫的目的通過監(jiān)聽類的監(jiān)聽,采集用戶所按下的按鍵信息進(jìn)行分析,并將分析結(jié)果保存為不同的方法和標(biāo)記,通過不同的標(biāo)記在運(yùn)算過程中調(diào)用處理類中的不同方法實(shí)現(xiàn)計(jì)算功能。3.3.2響應(yīng)類實(shí)現(xiàn)代碼算法的主體代碼實(shí)現(xiàn)如下:publicvoidactionPerformed(ActionEvente){ getValue=Double.valueOf(show.getText()).doubleValue(); if(e.getSource()==jia){//加運(yùn)算,可連加 if(j==0){ sum=getValue; }elseif(action==1){ sum+=getValue; } setSum(); j++; p=0; i=0; action=1; }elseif(e.getSource()==jian){//減運(yùn)算,可連減 if(j==0){ sum=getValue; }elseif(action==2){ sum-=getValue; } setSum(); j++; p=0; i=0; action=2; }elseif(e.getSource()==cheng){//乘運(yùn)算,可連乘 if(j==0){ sum=getValue; }elseif(action==3){ sum*=getValue; } setSum(); j++; p=0; i=0; action=3; }elseif(e.getSource()==chu){//除運(yùn)算,可連除 if(j==0) sum=getValue; elseif(action==4){ sum/=getValue; } setSum(); j++; p=0; i=0; action=4; }elseif(e.getSource()==equ){//等號(hào),運(yùn)算最后一個(gè)操作數(shù) switch(action){ case1: show.setText(String.valueOf(sum+=getValue)); break; case2: show.setText(String.valueOf(sum-=getValue)); break; case3: show.setText(String.valueOf(sum*=getValue)); break; case4: show.setText(String.valueOf(sum/=getValue)); break; } setSum(); i=0; j=0; action=0; }elseif(e.getSource()==point){//小數(shù)點(diǎn),只能按一個(gè)小數(shù)點(diǎn) if(p==0) show.setText(show.getText()+e.getActionCommand()); p=1; }elseif(e.getSource()==c||e.getSource()==ce){//清空與復(fù)位 i=0; j=0; p=0; sum=0; action=0; show.setText("0"); }elseif(e.getSource()==bc){//退格 Strings=show.getText(); if(s.length()>1){ show.setText(""); for(l=0;l<s.length()-1;l++){//按一下,刪除尾部一位 chara=s.charAt(l); show.setText(show.getText()+a); } }else show.setText("0"); }elseif(e.getSource()==ab){//關(guān)于 about.setVisible(true); }elseif(e.getSource()==sqrt){//開2次方根 sum=Math.sqrt(getValue); setSum(); i=0; }elseif(e.getSource()==ds){//求倒數(shù) sum=1/getValue; setSum(); i=0; }elseif(e.getSource()==bfh){//百分號(hào) sum=getValue/100; setSum(); i=0; }elseif(e.getSource()==zf){//正負(fù)號(hào)切換,正號(hào)不顯示 Strings=show.getText(); chara=s.charAt(0); if(a=='-'){ show.setText(""); for(l=1;l<s.length();l++){//去掉負(fù)號(hào) show.setText(show.getText()+s.charAt(l)); } }elseif(getValue!=0){//加上負(fù)號(hào) show.setText("-"+s); } }for(l=0;l<10;l++){//0~9數(shù)字鍵觸發(fā) if(e.getSource()==b[l]){ if(i==0) show.setText(""); Strings=show.getText(); if(s.length()<slength) show.setText(show.getText()+e.getActionCommand()); if(e.getSource()==b[0]&&getValue==0&&p==0) show.setText("0"); if(e.getSource()!=b[0]&&getValue==0&&p==0) show.setText(e.getActionCommand()); i++;//i用來標(biāo)記數(shù)字鍵觸發(fā)的狀態(tài) }3.4運(yùn)算處理類3.4.1處理方式通過獲得上訴用戶所按下數(shù)字鍵和運(yùn)算功能鍵的信息,用響應(yīng)類的處理結(jié)果信息進(jìn)行判斷標(biāo)示符的形式對(duì)號(hào)入座進(jìn)行調(diào)用不同運(yùn)算處理并把運(yùn)算結(jié)果顯示在輸入數(shù)據(jù)框中。3.4.2處理類實(shí)現(xiàn)代碼publicvoidsetSum(){//把計(jì)算結(jié)果顯示出來 show.setText(String.valueOf(sum)); Strings=show.getText(); chara=s.charAt((s.length()-1)); charb=s.charAt((s.length()-2)); if(a=='0'&&b=='.'){//如果是整數(shù),則去掉后面的小數(shù)點(diǎn)和0 show.setText(String.valueOf(Math.round(sum))); } } publicvoidwindowClosing(WindowEvente){ if(e.getSource()==about) about.setVisible(false); elseif(e.getSource()==frame) System.exit(0); } 第4章調(diào)試及發(fā)現(xiàn)問題的解決雖然在程序的編寫過程中遇到了很多問題,但是通過上網(wǎng)查閱相關(guān)資料,與其它同學(xué)討論,詢問指導(dǎo)老師等方式,最終都一一解決了,程序?qū)崿F(xiàn)及調(diào)試過程中遇到的主要問題及解決方法如下。設(shè)計(jì)難點(diǎn)1:布局計(jì)算器的界面雖然是按照系統(tǒng)中的計(jì)算器為模型的,但是由于按鈕太多,使得計(jì)算器的布局就相對(duì)的難一點(diǎn)了。設(shè)計(jì)難點(diǎn)2:代碼代碼的運(yùn)用是計(jì)算器設(shè)計(jì)成功的關(guān)健所在,每一個(gè)按鈕卜的代碼都不一樣,不一樣的按鈕實(shí)現(xiàn)的功能也不一樣,尤其是小數(shù)點(diǎn)和等號(hào)的代碼,因?yàn)檫@兩個(gè)按鈕關(guān)系著整個(gè)計(jì)算器的運(yùn)算,計(jì)算器能否設(shè)計(jì)成功就在這兩個(gè)按鈕上了。而這兩個(gè)按鈕代碼的編寫既是重點(diǎn)也是難點(diǎn),稍稍有一點(diǎn)的錯(cuò)誤就有能夠運(yùn)算出正確結(jié)果。在編寫java計(jì)算器時(shí)有異常出現(xiàn)。異常是這次設(shè)計(jì)中的重點(diǎn)也是一個(gè)難點(diǎn)。任何計(jì)算機(jī)語言的程序都難免有漏洞,捕獲錯(cuò)誤最理想的是在編譯期間,最好在試圖運(yùn)行程序以前。Java支持的異常處理功能比其他語言提供的更靈活。當(dāng)java程序執(zhí)行中發(fā)生錯(cuò)誤時(shí),錯(cuò)誤事件對(duì)象可能導(dǎo)致的程序運(yùn)行錯(cuò)誤稱為異常,異常會(huì)輸出錯(cuò)誤消息,使其知道該如何正確地處理遇到的問題。當(dāng)java運(yùn)行系統(tǒng)在得到一個(gè)異常對(duì)象時(shí),它將會(huì)尋找處理這一異常的代碼,找到能夠處理這種類型異常的方法后,運(yùn)行時(shí)系統(tǒng)把當(dāng)前異常對(duì)象交給這個(gè)方法進(jìn)行處理,這一過程稱為捕獲(catch)異常。如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將會(huì)終止,相應(yīng)的java程序也將退出。這次在java記事木程序用到的就是try,catch來捕獲的異常。設(shè)計(jì)難點(diǎn)3:運(yùn)行結(jié)果運(yùn)行結(jié)果也是難點(diǎn)之一,你的代碼編寫再正確運(yùn)行不出結(jié)果也是徒勞的,所以代碼正確了那也不算是全正確,只有代碼和運(yùn)行結(jié)果全都正確那才是真起碼的正確呢。第5章程序測(cè)試及分析運(yùn)行程序,首先顯示程序主菜單。圖5-1所示,是程序主界面。圖5-1簡(jiǎn)單計(jì)算器主界面圖5-2所示,是簡(jiǎn)單計(jì)算器實(shí)現(xiàn)加減乘除功能的運(yùn)算。例如:333乘于555。圖5-2簡(jiǎn)單計(jì)算器的加減乘除功能實(shí)現(xiàn)圖5-3所示,是簡(jiǎn)單計(jì)算器實(shí)現(xiàn)退格的運(yùn)算。例如;例如:333乘于555結(jié)果的退格。圖5-3簡(jiǎn)單計(jì)算器實(shí)現(xiàn)退格的運(yùn)算圖5-4所示,是簡(jiǎn)單計(jì)算器實(shí)現(xiàn)清零功能的運(yùn)算。例如:333乘于555結(jié)果的清零。圖5-4簡(jiǎn)單計(jì)算器實(shí)現(xiàn)清零功能的運(yùn)算圖5-5所示,是簡(jiǎn)單計(jì)算器實(shí)現(xiàn)開方功能的運(yùn)算。例如:36開方圖5-5簡(jiǎn)單計(jì)算器實(shí)現(xiàn)開方功能的運(yùn)算圖5-6所示,是簡(jiǎn)單計(jì)算器實(shí)現(xiàn)倒數(shù)功能的運(yùn)算。例如:88的倒數(shù)圖5-6簡(jiǎn)單計(jì)算器實(shí)現(xiàn)開方功能的運(yùn)算圖5-7所示,是簡(jiǎn)單計(jì)算器實(shí)現(xiàn)百分?jǐn)?shù)功能的運(yùn)算。例如:百分之25圖5-7簡(jiǎn)單計(jì)算器實(shí)現(xiàn)百分?jǐn)?shù)功能的運(yùn)算第6章總結(jié)本次課程設(shè)計(jì)到此算是告一段落了,經(jīng)過這次的學(xué)習(xí),我學(xué)到了很多東西,在此基礎(chǔ)上更加鞏固了自己對(duì)java的認(rèn)識(shí)與了解。在這次課程設(shè)計(jì)中,獨(dú)自編寫計(jì)算器的各個(gè)功能,并對(duì)其進(jìn)行按鍵的排版、監(jiān)聽、處理、運(yùn)算等各個(gè)步驟的親力親為,基本上完成了任務(wù)書上的各項(xiàng)內(nèi)容。在做本項(xiàng)目的時(shí)候,會(huì)遇到很多小問題,比如說,在整個(gè)運(yùn)算過程中要如何確保輸入的計(jì)算數(shù)據(jù)哪個(gè)是第一個(gè)計(jì)算數(shù)據(jù)的,哪個(gè)是第二個(gè)計(jì)算數(shù)據(jù)的,同時(shí)也要區(qū)分運(yùn)算符,因?yàn)樵撚?jì)算器程序應(yīng)用的都是利用字符串來完成計(jì)算的,而且不能重復(fù)輸出運(yùn)算符,更不能將運(yùn)算符錯(cuò)誤的存儲(chǔ)在了第一個(gè)計(jì)算數(shù)據(jù)的數(shù)值中,也得考慮到萬一不小心重復(fù)點(diǎn)擊了運(yùn)算符按鈕會(huì)不會(huì)造成第一個(gè)計(jì)算數(shù)據(jù)的重新賦值等等問題,最后想到利用布爾類型來很好的控制運(yùn)算符的應(yīng)用!在設(shè)計(jì)這個(gè)系統(tǒng)的時(shí)候,我查閱了很多相關(guān)的書籍,并通過網(wǎng)絡(luò)解決了不少問題。通過這次課程式設(shè)計(jì),我對(duì)eclipse的開發(fā)環(huán)境有了更多的認(rèn)識(shí)和了解,讓我對(duì)java語言的認(rèn)識(shí)又加深了一步,不僅使我學(xué)會(huì)了如何查閱資料,同時(shí)也讓了網(wǎng)絡(luò)這個(gè)好老師

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論