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

下載本文檔

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

文檔簡(jiǎn)介

概要設(shè)計(jì)2.1整個(gè)程序的模塊結(jié)構(gòu)及流程根據(jù)課題要求,整個(gè)程序按分為數(shù)字鍵及加減乘除按鍵和顯示屏。為更好地提供程序的人機(jī)交互能力,程序還應(yīng)提供退出程序、重置等功能。圖2-1整個(gè)程序各構(gòu)成模塊2.2實(shí)現(xiàn)可顯示窗口界面由于用戶需要在程序一次運(yùn)行后能夠獲取按鍵(鍵盤按鍵除外)以及所的答案的信息,也就是說,這個(gè)運(yùn)行結(jié)果要始終保留給用戶,所以可以通過一個(gè)可視化的窗口把信息呈現(xiàn)給用戶。這個(gè)可視化的窗口要求可以顯示給用戶,它應(yīng)該相應(yīng)的信息輸出。第3章程序功能的實(shí)現(xiàn)3.1整個(gè)程序的構(gòu)成模塊本程序只存在一個(gè)類,但由四個(gè)模塊構(gòu)成分別為:構(gòu)造按鍵、設(shè)置按鍵監(jiān)聽器并完成按鍵的布局、事件響應(yīng)的處理的顯示以及運(yùn)算算法的構(gòu)造。圖3-1整個(gè)程序各構(gòu)成模塊3.2構(gòu)成模塊的介紹與分析3.2.1構(gòu)造按鍵booleanp=true; JTextFielddisplay=newJTextField(20); JButton[]button_num=newJButton[11]; JButton[]button_bol=newJButton[5]; JButton[]button_fun=newJButton[1];{ for(inti=0;i<10;i++) button_num[i]=newJButton(""+i); button_num[10]=newJButton("."); button_bol[0]=newJButton("+"); button_bol[1]=newJButton("-"); button_bol[2]=newJButton("*"); button_bol[3]=newJButton("/"); button_bol[4]=newJButton("="); button_fun[0]=newJButton("重置"); }本程序在構(gòu)造按鍵的過程中先將按鍵分為三個(gè)種類,分別為數(shù)字鍵、運(yùn)算符號(hào)鍵以及其他鍵,并設(shè)置了輸入輸出框的大小以及不同種類的按鍵的個(gè)數(shù)。緊接著通過一個(gè)for循環(huán)給數(shù)字鍵賦予相應(yīng)的顯示。然后設(shè)置符號(hào)鍵與其它鍵的按鍵表示。3.2.2設(shè)置按鍵監(jiān)聽器并完成按鍵的布局calculater(){ inti=0; for(i=0;i<11;i++) button_num[i].addActionListener(this); for(i=0;i<5;i++) button_bol[i].addActionListener(this); button_fun[0].addActionListener(this);用兩個(gè)for循環(huán)完成了對(duì)button_num[i]以及button_bol[i]的監(jiān)聽器的設(shè)置(也就是對(duì)數(shù)字鍵和符號(hào)鍵的監(jiān)聽器的設(shè)置)。因button_fun[i]只存在一個(gè)鍵(也就是重置鍵)所以直接對(duì)其進(jìn)行監(jiān)聽,不需要用到for循環(huán)。 JPanelp1=newJPanel(); JPanelp2=newJPanel();構(gòu)造p1與p2兩個(gè)容器,用以存放案件。 FlowLayoutflow=newFlowLayout(); flow.setAlignment(FlowLayout.LEFT); p1.setLayout(flow); p1.add(display); p1.add(button_fun[0]);將出入輸出框(display)以及重置鍵(button_fun[0])存放入容器p1,p1的布局管理器類型為FlowLayout型,右對(duì)齊,其布局結(jié)構(gòu)如下:圖3-2容器p1的布局顯示 p2.setLayout(newGridLayout(4,4)); for(i=1;i<4;i++) p2.add(button_num[i]); p2.add(button_bol[0]); for(i=4;i<7;i++) p2.add(button_num[i]); p2.add(button_bol[1]); for(i=7;i<10;i++) p2.add(button_num[i]); p2.add(button_bol[2]); p2.add(button_num[10]); p2.add(button_num[0]); p2.add(button_bol[4]); p2.add(button_bol[3]); 將數(shù)字鍵(button_num[i])與運(yùn)算符號(hào)鍵(button_bol[i])存放入容器p2,p2的布局管理器類型為GridLayout型,4行*4列,其布局結(jié)構(gòu)如下:圖2-3容器p2的布局顯示 add(p1,BorderLayout.NORTH); add(p2,BorderLayout.CENTER);窗體布局使用BorderLayout布局,按圖所示分別使p1在NORTH位置,p2在CENTER位置。圖2-3窗體布局的布局顯示 display.setEditable(false); setTitle("計(jì)算器"); setBounds(100,100,350,220); setVisible(true); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}對(duì)計(jì)算器的其他布局進(jìn)行構(gòu)造,具體為:使輸入輸出框中的數(shù)字輸入只能按鍵輸入,使鍵盤輸入無效化。程序的執(zhí)行窗口上顯示“計(jì)算器”。確定執(zhí)行窗口的大小以及在屏幕上出現(xiàn)的位置。使執(zhí)行窗口可見。使執(zhí)行窗口大小不可改變。設(shè)置是結(jié)束程序運(yùn)行的按鍵。圖3-4簡(jiǎn)單計(jì)算器布局完成圖3.2.3事件響應(yīng)的處理publicvoidactionPerformed(ActionEvente){ Stringstr=""; for(inti=0;i<11;i++){ if(e.getSource()==button_num[i]){ str=display.getText()+button_num[i].getActionCommand(); display.setText(str); } } for(inti=0;i<4;i++){ if(e.getSource()==button_bol[i]){ str=display.getText()+button_bol[i].getActionCommand(); display.setText(str); } }在首先在構(gòu)造方法中為所有的JButton對(duì)象添加監(jiān)聽器,在actionPerformed(ActionEvente)方法中,首先有一個(gè)JButton類型的變量用來獲取事件源的引用,然后程序根據(jù)事件源的不同做出不同的響應(yīng)。 if(e.getSource()==button_bol[4]){ getValue(); }當(dāng)事件源為“=”按鈕時(shí),除了在display后添加字符“=”,還要調(diào)用自定義的方法getValue()得到表達(dá)式的值并將此值添加在display之后。 elseif(e.getSource()==button_fun[0]){ display.setText(""); }}當(dāng)事件源為“重置”按鈕時(shí),lable中的字符清空。3.2.4運(yùn)算算法的構(gòu)造publicvoidgetValue(){Stringtext=display.getText(); doubleresult=0; Strings[]={"+","-","*","/"};將四個(gè)運(yùn)算符號(hào)作為一個(gè)數(shù)組。 Stringtmp=""; intcount=0; for(inti=0;i<s.length;i++){ if(text.contains(s[i])){ tmp=s[i]; count++; if(count>1){ JOptionPane.showMessageDialog(this,"輸入格式錯(cuò)誤!"); display.setText(""); } } }找出輸入的算式中的運(yùn)算符號(hào)并將它賦值于tmp。 if(tmp.equals("+")){ tmp=":"; text=text.replace('+',':'); }elseif(tmp.equals("-")){ tmp=""; text=text.replace('-',''); }elseif(tmp.equals("*")){ tmp=","; text=text.replace('*',','); }elseif(tmp.equals("/")){ tmp=";"; text=text.replace('/',';'); }因eclipse中無法用“+”、“-”、“*”、“/”作為分割字符的標(biāo)志故分別將其用“:”、“”、“,”、“;”取代。 Stringstr[]=text.split(tmp);以tmp為標(biāo)志將算式進(jìn)行分割,分割出的兩數(shù)分別為str[0](前者)和str[1](后者)。 switch(tmp){+ case":": result=Double.parseDouble(str[0])+Double.parseDouble(str[1]); break; case"": result=Double.parseDouble(str[0])-Double.parseDouble(str[1]); break; case",": result=Double.parseDouble(str[0])*Double.parseDouble(str[1]); break; case";": if(Double.parseDouble(str[1])==0){ JOptionPane.showMessageDialog(this,"除數(shù)不能為0!"); display.setText(""); } result=Double.parseDouble(str[0])/Double.parseDouble(str[1]); break; }判斷算式中的符號(hào),并根據(jù)符號(hào)對(duì)分割開來的兩數(shù)進(jìn)行相對(duì)應(yīng)的運(yùn)算。 Stringst=display.getText()+"="+result; display.setText(st);}得到算式的答案并與算式一起輸出,完成getValue()方法。3.3程序的報(bào)錯(cuò)處理與分析3.3.1輸入格式錯(cuò)誤時(shí)的報(bào)錯(cuò)處理Strings[]={"+","-","*","/"}; Stringtmp=""; intcount=0; for(inti=0;i<s.length;i++){ if(text.contains(s[i])){ tmp=s[i]; count++; if(count>1){ JOptionPane.showMessageDialog(this,"輸入格式錯(cuò)誤!"); display.setText(""); } } }若輸入的算式中存在兩個(gè)或兩個(gè)以上的符號(hào)時(shí),則會(huì)跳出對(duì)話框顯示“輸入格式錯(cuò)誤!”并清空輸入輸出框。圖3-5進(jìn)行兩個(gè)數(shù)以上計(jì)算時(shí)的報(bào)錯(cuò)情況圖3-6連續(xù)輸入兩個(gè)運(yùn)算符號(hào)時(shí)的報(bào)錯(cuò)情況3.3.2當(dāng)除數(shù)為0時(shí)的報(bào)錯(cuò)處理case";": if(Double.parseDouble(str[1])==0){ JOptionPane.showMessageDialog(this,"除數(shù)不能為0!"); display.setText("");return; } result=Double.parseDouble(str[0])/Double.parseDouble(str[1]); break; }若輸入的算式中除數(shù)為0,則會(huì)跳出對(duì)話框顯示“除數(shù)不能為0”并清空輸入輸出框。圖3-7當(dāng)除數(shù)為0時(shí)的報(bào)錯(cuò)情況第4章調(diào)試及發(fā)現(xiàn)問題的解決雖然在程序的編寫過程中遇到了很多問題,但是通過上網(wǎng)查閱相關(guān)資料,與其它同學(xué)討論,詢問指導(dǎo)老師等方式,最終都一一解決了,程序?qū)崿F(xiàn)及調(diào)試過程中遇到的主要問題及解決方法如下。如何禁止用鍵盤對(duì)計(jì)算器的輸入輸出框進(jìn)行修改解決方法:在對(duì)計(jì)算器的進(jìn)行布局結(jié)構(gòu)時(shí)加入語句:display.setEditable(false);“display.setEditable(booleanb);”語句是判斷是否可對(duì)display也就是輸入輸出框進(jìn)行編輯的語句,若為“display.setEditable(false);”則意為不可對(duì)輸入輸出框進(jìn)行編輯。當(dāng)算式中存在兩個(gè)相同得符號(hào)時(shí),如何進(jìn)行錯(cuò)誤的判斷解決方法:對(duì)于加法、減法和乘法運(yùn)算,先確定兩個(gè)運(yùn)算對(duì)象及其運(yùn)算結(jié)果的位數(shù),取這三個(gè)位數(shù)的最大值為width,然后以width+4為輸出寬度(因?yàn)檫\(yùn)算數(shù)左邊可能還有運(yùn)算符,大整數(shù)串和運(yùn)算符之間還應(yīng)留少許空白)分三行輸出兩個(gè)運(yùn)算數(shù)及其運(yùn)算結(jié)果。輸出每個(gè)大整數(shù)時(shí),還應(yīng)按為零、為正數(shù)、為負(fù)數(shù)這三種情況具體討論。第5章程序測(cè)試及分析運(yùn)行程序,首先跳出執(zhí)行窗口欄,其中有0-9十個(gè)數(shù)字鍵、“+”、“-”、“*”、“/”、“=”五個(gè)運(yùn)算符號(hào)鍵,“重置”鍵以及輸入輸出框。圖5-1執(zhí)行窗口欄當(dāng)隨意輸入一個(gè)數(shù)字和符號(hào)時(shí),在輸入輸出框上便會(huì)顯示這個(gè)數(shù)字,以4+3為例:圖5-2輸入數(shù)字與符號(hào)當(dāng)輸入等號(hào)時(shí),所的答案會(huì)與之前輸入的等式一起輸出,所得的答案為浮點(diǎn)數(shù)。圖5-3輸入數(shù)字與符號(hào)本計(jì)算器和可計(jì)算小數(shù)與小數(shù)之間的簡(jiǎn)單運(yùn)算。圖5-3小數(shù)與小數(shù)之間的運(yùn)算當(dāng)進(jìn)行除法運(yùn)算時(shí),若兩數(shù)不能除盡時(shí)本計(jì)算器的運(yùn)算結(jié)果如下:圖5-4兩除數(shù)無法除盡的情況顯示第

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論