基于安卓的計算器的設(shè)計與實現(xiàn)_第1頁
基于安卓的計算器的設(shè)計與實現(xiàn)_第2頁
基于安卓的計算器的設(shè)計與實現(xiàn)_第3頁
基于安卓的計算器的設(shè)計與實現(xiàn)_第4頁
基于安卓的計算器的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、安卓應(yīng)用程序設(shè)計簡易計算器的實現(xiàn)院(系)名稱專業(yè)名稱學(xué)生姓名學(xué)生學(xué)號課程名稱2016年6月曰1 .系統(tǒng)需求分析Android是以Linux為核心的手機(jī)操作平臺,作為一款開放式的操作系統(tǒng),隨著Android的快速發(fā)展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開發(fā)者的歡迎,成為真正意義上的開放式操作系統(tǒng)。計算器通過算法實行簡單的數(shù)學(xué)計算從而提高了數(shù)學(xué)計算的效率,實現(xiàn)計算器的界面優(yōu)化,使界面更加友好,操作更加方便?;赼ndroid的計算器的設(shè)計,系統(tǒng)具有良好的界面;必要的交互信息;簡約美觀的效果。使

2、用人員能快捷簡單地進(jìn)行操作,即可單機(jī)按鈕進(jìn)行操作,即時準(zhǔn)確地獲得需要的計算的結(jié)果,充分降低了數(shù)字計算的難度和節(jié)約了時間。2 .系統(tǒng)概要設(shè)計2.1 計算器功能概要設(shè)計根據(jù)需求,符合用戶的實際要求,系統(tǒng)應(yīng)實現(xiàn)以下功能:計算器界面友好,方便使用,具有基本的加、減、乘、除功能,能夠判斷用戶輸入運(yùn)算數(shù)是否正確,支持小數(shù)運(yùn)算,具有清除功能。圖2.1系統(tǒng)功能圖整個程序基于Android技術(shù)開發(fā),除總體模塊外主要分為輸入模塊、顯示模塊以及計算模塊這三大部分。在整個系統(tǒng)中總體模塊控制系統(tǒng)的生命周期,輸入模塊部分負(fù)責(zé)讀取用戶輸入的數(shù)據(jù),顯示模塊部分負(fù)責(zé)顯示用戶之前輸入的數(shù)據(jù)以及顯示最終的計算結(jié)果,計算模塊部分負(fù)責(zé)

3、進(jìn)行數(shù)據(jù)的運(yùn)算以及一些其他的功能。具體的說,總體模塊的作用主要是生成應(yīng)用程序的主類,控制應(yīng)用程序的生命周期。輸入模塊主要描述了計算器鍵盤以及鍵盤的監(jiān)聽即主要負(fù)責(zé)讀取用戶的鍵盤輸入以及響應(yīng)觸屏的按鍵,需要監(jiān)聽手機(jī)動作以及用指針事件處理方法處理觸屏的單擊動作。同時提供了較為直觀的鍵盤圖形用戶界面。顯示模塊描述了計算器的顯示區(qū),即該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計算結(jié)果,同時負(fù)責(zé)顯示一些其他的信息。計算模塊則主要描述了計算器的整體,實現(xiàn)了計算器的界面,負(fù)責(zé)計算用戶輸入數(shù)據(jù),包括加、減、乘、除等各種功能,記憶數(shù)據(jù)的相關(guān)功能,清零的功能。圖2.2三大模塊2.2 輸入模塊設(shè)計系統(tǒng)如果想完成計算器中各

4、種功能,首先用戶要能進(jìn)行數(shù)據(jù)輸入,由于是在觸屏手機(jī)上開發(fā)計算器程序,所以要求輸入可以直接使用觸屏進(jìn)行,所以在設(shè)計的時候就要充分的考慮這一點。正是由于考慮到這個特殊的地方,所以在進(jìn)行模塊設(shè)計中,選擇編寫輸入模塊類的時候會特意選取使用可以支持觸屏輸入的特殊增強(qiáng)型圖形用戶界面類。輸入模塊主要的任務(wù)是描述計算器鍵盤以及實現(xiàn)鍵盤的監(jiān)聽,即當(dāng)用戶點擊按鍵或者屏幕的時候監(jiān)聽會去調(diào)用相應(yīng)的處理辦法,本模塊還需要為系統(tǒng)提供一個較為直觀的鍵盤圖形用戶界面。輸入模塊的功能圖如圖圖2.3輸入模塊2.3 顯示模塊設(shè)計作為手機(jī)計算器系統(tǒng),顯示部分也是必不可少的一部分。沒有顯示部分就沒有辦法顯示用戶輸入的數(shù)字是否正確,甚至

5、不能顯示計算出的結(jié)果,由此可見顯示模塊即包括輸入的部分(因個人技術(shù)原因不能顯示表達(dá)式的形式)也包括輸出的部分。顯示模塊主要完成的任務(wù)是描述計算器的顯示區(qū),該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計算結(jié)果和一些其他信息。同時本模塊還將提供調(diào)用和設(shè)置顯示的具體方法2.4 計算模塊設(shè)計系統(tǒng)要完成整個的計算器的功能,那么計算模塊就是整個系統(tǒng)的重要模塊。沒有計算模塊系統(tǒng)就不能順利的完成計算,就無法達(dá)到用戶的要求。所以計算模塊的設(shè)計也是本次系統(tǒng)設(shè)計的重點。系統(tǒng)想要能在屏幕上顯示出計算器的樣子要有整體的布局。在本模塊中要完成布局的具體設(shè)計,使用戶能夠看到整個計算器的界面。同時系統(tǒng)想完成計算功能必須要處理用戶的

6、輸入,當(dāng)輸入模塊的監(jiān)聽傳到計算模塊中時,計算模塊就要根據(jù)相應(yīng)的方法進(jìn)行進(jìn)一步的處理。圖2.5計算模塊3 .設(shè)計與實現(xiàn)部分3.1 應(yīng)用程序構(gòu)成Android應(yīng)用程序一般是由ActivityServieceContentProviderIntentIntentReceiverNotification六個組件構(gòu)成。但并非每一個Android應(yīng)用程序都包含這六個組件。(1) Activity(活動):應(yīng)用程序的表示層。Activity是Android的基本組件。每一個activity代表一個單獨(dú)的屏幕。每一個activity都是繼承于Activity的獨(dú)立類。這個activity類將會顯示出幾個Vie

7、ws控件組成的用戶接口,并對事件作出響應(yīng)。Android使用了Intent,實現(xiàn)在屏幕與屏幕之間跳轉(zhuǎn)。Activity跳轉(zhuǎn)時只需要調(diào)用startActivity(IntentmyIntent)方法。然后,系統(tǒng)會在所有安裝的應(yīng)用程序中定義的IntentFilter中查找,找到最匹配myIntent的Intent對應(yīng)的activityo新的activity接收到myIntent的通知后,開始啟動運(yùn)行。當(dāng)startActivity方法被調(diào)用將觸發(fā)解析myIntent的動作,這個機(jī)制提供了兩個關(guān)鍵的好處:能夠重復(fù)利用從其他組件中以Intent的形式產(chǎn)生的一個請求和可以在任何時候被一個具有相同Inten

8、tFilter的新的startActivity取代。(2) Service(服務(wù)):Android應(yīng)用程序的后臺運(yùn)行組件。Service沒有用戶界面的程序。服務(wù)組件在后臺運(yùn)行,它們可以更新數(shù)據(jù)源和可見的Activity,并觸發(fā)Notification。它們被用來執(zhí)行一些需要在后臺持續(xù)的常規(guī)處理。例如媒體播放器這個activity會使用Context.startService()方法,連接到一個service上(如果這個service還沒有運(yùn)行將啟動它)。當(dāng)連接到一個service之后,我們還可以通過service提供的接口與它進(jìn)行通訊。(3) ContentProvider(內(nèi)容提供器):用來

9、管理和分享應(yīng)用程序數(shù)據(jù)庫。ContentProvider是在應(yīng)用程序之間共享數(shù)據(jù)的首選方法。通過配置ContentProvider允許其他應(yīng)用程序訪問存儲的數(shù)據(jù),也可以使用其他應(yīng)用程序提供的ContentProvider來訪問它們存儲的數(shù)據(jù)。Android平臺也提供了系統(tǒng)自帶的ContentProvider,如聯(lián)系人信息等。(4) Intent(意向):Activity之間的粘合劑。使用Intent,可以在系統(tǒng)范圍內(nèi)向目標(biāo)活動或者服務(wù)廣播消息,說明希望執(zhí)行某個動作的意圖。之后系統(tǒng)就會確定那些最適合執(zhí)行動作的目標(biāo)。(5) Notification(通知):一種用戶通知框架。通過允許向用戶發(fā)送信號

10、,而不會過分吸引他們的注意力或者打斷他們當(dāng)前的活動。它們是服務(wù)或者廣播接收器吸引用戶注意的首選方法。例如,當(dāng)設(shè)備接收到一個文本消息或者來電的時候,它可以通過閃燈、發(fā)出聲音、顯示圖標(biāo)或則會顯示對話框信息的方式提示用戶。(6) IntentReceiver(意向接收器):通過IntentReceiver實現(xiàn)應(yīng)用能夠?qū)σ粋€外部的事件作出響應(yīng),IntentReceiver在AndroidManifest.xml中注冊,但也可以在代碼中使用Context.registerReceiver()進(jìn)行注冊。當(dāng)一個intentreceive被觸發(fā)時,應(yīng)用不必對請求調(diào)用intentreceive,系統(tǒng)會在需要的時

11、候啟動你的應(yīng)用。各種應(yīng)用還可以通過使用Context.broadcastIntent()將它們自己的intentreceive廣播給其他應(yīng)用程序。3.2 功能的具體實現(xiàn)(1)計算器布局設(shè)計:分別實用Button按鈕操作17個按鈕,分別是+、一、*、/、=、0-9、清除按鈕,以及EditTest的文本域,并通過代碼布局調(diào)整布局,使布局更加清晰,簡潔。布局方式如圖所示:代碼實現(xiàn)如下:RelativeLayoutandroidxmlns:android=http:xmlns:tools=android:layout_widthandroid:layout_height=match_parent=ma

12、tch_parentandroid:paddingBottomandroid:paddingLeftandroid:paddingRightandroid:paddingTop=dimen/activity_vertical_margin=dimen/activity_horizontal_margin=dimen/activity_horizontal_margin=dimen/activity_vertical_margintools:context=.MainActivity=wrap_content=wrap_content=+id/button1=+id/button1=+id/bu

13、tton1=wrap_content=wrap_content=+id/button2=+id/button2=+id/button2=wrap_content=wrap_contentButtonandroid:id=+id/button11android:layout_width=wrap_contentandroid:layout_heightandroid:layout_belowandroid:layout_toRightOf=wrap_content=+id/button7=+id/button7=wrap_content=wrap_content=+id/button11=+id

14、/button11=+id/button9=wrap_content=+id/button3=+id/button3=wrap_content=wrap_content=+id/button6=+id/button6=+id/button6=wrap_content=wrap_content=+id/button9=+id/button9SunGuoOorig乘法3.89乘以1.2的結(jié)果X*4:29減法3.6減去0.6:SunGuoDong除數(shù)為零:點擊清除之后的效果iRSunGuoDong,l:S2嗝SunGuoDong5 .核心代碼importandroid.app.Activity;im

15、portandroid.os.Bundle;importandroid.view.Menu;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;publicclassMainActivityextendsActivityimplementsOnClickListenerButtonbutton1,button2,button3,button4,butt

16、on5,button6,button7,button8;Buttonbutton9,button10,button11,button12,button13,button14,button15,button16,button17;EditTextedit=null;doublenum1=0,num2=0,Result=0;booleanisClickEqu=false;intop=0;OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.

17、layout.activity_main);button1=(Button)this.findViewById(R.id.button1);button2=(Button)this.findViewById(R.id.button2);button3=(Button)this.findViewById(R.id.button3);button4=(Button)this.findViewById(R.id.button4);button5=(Button)this.findViewById(R.id.button5);button6=(Button)this.findViewById(R.id

18、.button6);button7=(Button)this.findViewById(R.id.button7);button8=(Button)this.findViewById(R.id.button8);button9=(Button)this.findViewById(R.id.button9);button10=(Button)this.findViewById(R.id.button10);button11=(Button)this.findViewById(R.id.button11);button12=(Button)this.findViewById(R.id.button

19、12);button13=(Button)this.findViewById(R.id.button13);button14=(Button)this.findViewById(R.id.button14);button15=(Button)this.findViewById(R.id.button15);button16=(Button)this.findViewById(R.id.button16);button17=(Button)this.findViewById(R.id.button17);edit=(EditText)findViewById(R.id.editText1);bu

20、tton1.setOnClickListener(this);button2.setOnClickListener(this);button3.setOnClickListener(this);button4.setOnClickListener(this);button5.setOnClickListener(this);button6.setOnClickListener(this);button7.setOnClickListener(this);button8.setOnClickListener(this);button9.setOnClickListener(this);butto

21、n10.setOnClickListener(this);button11.setOnClickListener(this);button12.setOnClickListener(this);button13.setOnClickListener(this);button14.setOnClickListener(this);button15.setOnClickListener(this);button16.setOnClickListener(this);button17.setOnClickListener(this);OverridepublicbooleanonCreateOpti

22、onsMenu(Menumenu)/Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.main,menu);returntrue;OverridepublicvoidonClick(Viewv)/TODOAuto-generatedmethodstub已經(jīng)清除,switch(v.getId()caseR.id.button17:edit.setText(null);Toast.makeText(MainActivity.this,Toast.LENGTH_LONG).

23、show();break;caseR.id.button1:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString1=edit.getText().toString();myString1+=1;edit.setText(myString1);break;caseR.id.button2:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString2=edit.getText().toString();myString2+=2;edit.setTex

24、t(myString2);break;caseR.id.button3:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString3=edit.getText().toString();myString3+=3;edit.setText(myString3);break;caseR.id.button4:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString4=edit.getText().toString();myString4+=4;edit.

25、setText(myString4);break;caseR.id.button5:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString5=edit.getText().toString();myString5+=5;edit.setText(myString5);break;caseR.id.button6:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString6=edit.getText().toString();myString6+=6

26、;edit.setText(myString6);break;caseR.id.button7:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString7=edit.getText().toString();myString7+=7;edit.setText(myString7);break;caseR.id.button8:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString8=edit.getText().toString();myStri

27、ng8+=8;edit.setText(myString8);break;caseR.id.button9:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString9=edit.getText().toString();myString9+=9;edit.setText(myString9);break;caseR.id.button10:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString10=edit.getText().toString(

28、);myString10+=0;edit.setText(myString10);break;點caseR.id.button11:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString11=edit.getText().toString();myString11+=.;edit.setText(myString11);break;加caseR.id.button13:Stringmystringadd=edit.getText().toString();if(mystringadd.equals(null)return;num1=Double.valueOf(mystringadd);edit.setText(null);op=1;isClickEqu=false;break;減caseR.id.butto

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論