基于安卓的計算器的設計與實現_第1頁
基于安卓的計算器的設計與實現_第2頁
基于安卓的計算器的設計與實現_第3頁
基于安卓的計算器的設計與實現_第4頁
基于安卓的計算器的設計與實現_第5頁
免費預覽已結束,剩余14頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

6、輸入,當輸入模塊的監聽傳到計算模塊中時,計算模塊就要根據相應的方法進行進一步的處理。圖2.5計算模塊3 .設計與實現部分3.1 應用程序構成Android應用程序一般是由Activity>Serviece>ContentProvider>Intent>IntentReceiver>Notification六個組件構成。但并非每一個Android應用程序都包含這六個組件。(1) Activity(活動):應用程序的表示層。Activity是Android的基本組件。每一個activity代表一個單獨的屏幕。每一個activity都是繼承于Activity的獨立類。這

7、個activity類將會顯示出幾個Views控件組成的用戶接口,并對事件作出響應。Android使用了Intent,實現在屏幕與屏幕之間跳轉。Activity跳轉時只需要調用startActivity(IntentmyIntent)方法。然后,系統會在所有安裝的應用程序中定義的IntentFilter中查找,找到最匹配myIntent的Intent對應的activityo新的activity接收到myIntent的通知后,開始啟動運行。當startActivity方法被調用將觸發解析myIntent的動作,這個機制提供了兩個關鍵的好處:能夠重復利用從其他組件中以Intent的形式產生的一個請求

8、和可以在任何時候被一個具有相同IntentFilter的新的startActivity取代。(2) Service(服務):Android應用程序的后臺運行組件。Service沒有用戶界面的程序。服務組件在后臺運行,它們可以更新數據源和可見的Activity,并觸發Notification。它們被用來執行一些需要在后臺持續的常規處理。例如媒體播放器這個activity會使用Context.startService()方法,連接到一個service上(如果這個service還沒有運行將啟動它)。當連接到一個service之后,我們還可以通過service提供的接口與它進行通訊。(3) Conte

9、ntProvider(內容提供器):用來管理和分享應用程序數據庫。ContentProvider是在應用程序之間共享數據的首選方法。通過配置ContentProvider允許其他應用程序訪問存儲的數據,也可以使用其他應用程序提供的ContentProvider來訪問它們存儲的數據。Android平臺也提供了系統自帶的ContentProvider,如聯系人信息等。(4) Intent(意向):Activity之間的粘合劑。使用Intent,可以在系統范圍內向目標活動或者服務廣播消息,說明希望執行某個動作的意圖。之后系統就會確定那些最適合執行動作的目標。(5) Notification(通知):

10、一種用戶通知框架。通過允許向用戶發送信號,而不會過分吸引他們的注意力或者打斷他們當前的活動。它們是服務或者廣播接收器吸引用戶注意的首選方法。例如,當設備接收到一個文本消息或者來電的時候,它可以通過閃燈、發出聲音、顯示圖標或則會顯示對話框信息的方式提示用戶。(6) IntentReceiver(意向接收器):通過IntentReceiver實現應用能夠對一個外部的事件作出響應,IntentReceiver在AndroidManifest.xml中注冊,但也可以在代碼中使用Context.registerReceiver()進行注冊。當一個intentreceive被觸發時,應用不必對請求調用in

11、tentreceive,系統會在需要的時候啟動你的應用。各種應用還可以通過使用Context.broadcastIntent()將它們自己的intentreceive廣播給其他應用程序。3.2 功能的具體實現(1)計算器布局設計:分別實用Button按鈕操作17個按鈕,分別是+、一、*、/、=、0-9、清除按鈕,以及EditTest的文本域,并通過代碼布局調整布局,使布局更加清晰,簡潔。布局方式如圖所示:代碼實現如下:<RelativeLayoutandroid"xmlns:android="http:xmlns:tools="android:layout_

12、widthandroid:layout_height="match_parent"="match_parent"android:paddingBottomandroid:paddingLeftandroid:paddingRightandroid:paddingTop="dimen/activity_vertical_margin"="dimen/activity_horizontal_margin"="dimen/activity_horizontal_margin"="dimen/

13、activity_vertical_margin"tools:context=".MainActivity"<EditTextandroid:id="+id/editText1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentRight="true&qu

14、ot;android:layout_alignParentTop="true"android:layout_marginTop="17dp"android:ems="10"/><Buttonandroid:id="+id/button1"android:layout_widthandroid:layout_heightandroid:layout_alignLeftandroid:layout_below="wrap_content"="wrap_content"

15、="+id/editText1"="+id/editText1"android:layout_marginTop="30dpandroid:text="1"/><Buttonandroid:id="+id/button2"android:layout_widthandroid:layout_heightandroid:layout_alignBaselineandroid:layout_alignBottomandroid:layout_toRightOfandroid:text="

16、2"/>="wrap_content"="wrap_content"="+id/button1"="+id/button1"="+id/button1"<Buttonandroid:id="+id/button3"android:layout_widthandroid:layout_heightandroid:layout_alignBaselineandroid:layout_alignBottomandroid:layout_toRightOfand

17、roid:text="3"/>="wrap_content"="wrap_content"="+id/button2"="+id/button2"="+id/button2"<Buttonandroid:id="+id/button4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_

18、alignParentLeft="true"android:layout_below="+id/button1"android:text="4"/><Buttonandroid:id="+id/button5"android:layout_width="wrap_content"android:layout_heightandroid:layout_alignBaseline="wrap_content"="+id/button4"="

19、;+id/button4"="+id/button2"android:layout_alignBottomandroid:layout_alignLeftandroid:text="5"/>="wrap_content"="wrap_content"<Buttonandroid:id="+id/button6"android:layout_widthandroid:layout_heightandroid:layout_belowandroid:layout_toRight

20、Of="+id/button3"="+id/button5"android:text="6"/><Buttonandroid:id="+id/button7"android:layout_widthandroid:layout_heightandroid:layout_belowandroid:layout_toLeftOf="wrap_content"="wrap_content"="+id/button4"="+id/button

21、5"android:text="7"/><Buttonandroid:id="+id/button8"android:layout_widthandroid:layout_heightandroid:layout_alignBaselineandroid:layout_alignBottomandroid:layout_alignLeft="wrap_content"="wrap_content"="+id/button7"="+id/button7"=

22、"+id/button5"android:text="8"/><Buttonandroid:id="+id/button9"android:layout_width="wrap_content"android:layout_heightandroid:layout_alignBaselineandroid:layout_alignBottomandroid:layout_toRightOf="wrap_content"="+id/button8"="+i

23、d/button8"="+id/button5"android:text="9"/><Buttonandroid:id="+id/button10"android:layout_widthandroid:layout_heightandroid:layout_alignLeftandroid:layout_below="wrap_content"="wrap_content"="+id/button7"="+id/button7"an

24、droid:text="0"/><Buttonandroid:id="+id/button11"android:layout_width="wrap_content"android:layout_heightandroid:layout_belowandroid:layout_toRightOf="wrap_content"="+id/button7"="+id/button7"/>android:text<Buttonandroid:id="

25、;+id/button12="+id/button13"="wrap_content"android:layout_widthandroid:layout_heightandroid:layout_alignBaselineandroid:layout_alignBottomandroid:layout_alignLeftandroid:text="="/><Buttonandroid:idandroid:layout_widthandroid:layout_heightandroid:layout_alignBottom

26、android:layout_toRightOfandroid:text="+"/>="wrap_content"="wrap_content"="+id/button11="+id/button11"="+id/button9"="wrap_content"="+id/button3"="+id/button3"<Buttonandroid:id="+id/button14"android:l

27、ayout_widthandroid:layout_heightandroid:layout_alignBaselineandroid:layout_alignBottomandroid:layout_toRightOfandroid:text="-"/>="wrap_content"="wrap_content"="+id/button6"="+id/button6"="+id/button6"<Buttonandroid:id="+id/button

28、15"android:layout_width="wrap_content"android:layout_heightandroid:layout_aboveandroid:layout_alignLeft="wrap_content"="+id/button12"="+id/button14"android:text=,*,/>="wrap_content"="wrap_content"="+id/button9"="+id/b

29、utton9"<Buttonandroid:id="+id/button16android:layout_widthandroid:layout_heightandroid:layout_belowandroid:layout_toRightOfandroid:text="/"/><Buttonandroid:id="+id/button17android:layout_widthandroid:layout_heightandroid:layout_alignRightandroid:layout_below="m

30、atch_parent"="wrap_content"="+id/button16="+id/button11"android:text="清除,/></RelativeLayout(2)計算功能實現加法實現:從editTest中獲取數字賦值于num1,等待數字num2的輸入。代碼如下:edit.getText().toString();caseR.id.button13Stringmystringadd=if(mystringadd.equals(null)returnnum1=Double.valueOf(m

31、ystringadd);edit.setText(null);op=1;isClickEqu=false;break;減法實現、乘法實現、除法實現和加法實現大體相同,但是op的賦值不同分別是2、3、4。然后進行等號的計算實現,在同時記錄下文本中的num2的數值,然后設置switch方法,case中op的值分別為1、2、3、4代表的分別加、減、乘、除。然后由I(據case選項進行相應的加、減、乘、除運算,代碼實現如下所示:caseR.id.button12:/等號,算法實現StringmyStringeq=edit.getText().toString();if(myStringeq.equal

32、s(null)returnnum2=Double.valueOf(myStringeq);edit.setText(null);switch(op)case0:Result=num2;break;case 1:Result=num1+num2;break;case 2:Result=num1-num2;break;case 3:Result=num1*num2;break;case 4:Result=numl/num2;break;)edit.setText(String.valueOf(Result);isClickEqu=true;break;)4 .運行界面截圖運行結果界面:SSunGu

33、oDong除法:20除以4的結果'>SunGuoOorig乘法3.89乘以1.2的結果X*4:29減法3.6減去0.6:SunGuoDong除數為零:點擊清除之后的效果iRSunGuoDong,l:S2嗝SunGuoDong5 .核心代碼importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importa

34、ndroid.widget.EditText;importandroid.widget.Toast;publicclassMainActivityextendsActivityimplementsOnClickListenerButtonbutton1,button2,button3,button4,button5,button6,button7,button8;Buttonbutton9,button10,button11,button12,button13,button14,button15,button16,button17;EditTextedit=null;doublenum1=0,

35、num2=0,Result=0;booleanisClickEqu=false;intop=0;OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1=(Button)this.findViewById(R.id.button1);button2=(Button)this.findViewById(R.id.button2);button3=(Button)this.findVi

36、ewById(R.id.button3);button4=(Button)this.findViewById(R.id.button4);button5=(Button)this.findViewById(R.id.button5);button6=(Button)this.findViewById(R.id.button6);button7=(Button)this.findViewById(R.id.button7);button8=(Button)this.findViewById(R.id.button8);button9=(Button)this.findViewById(R.id.

37、button9);button10=(Button)this.findViewById(R.id.button10);button11=(Button)this.findViewById(R.id.button11);button12=(Button)this.findViewById(R.id.button12);button13=(Button)this.findViewById(R.id.button13);button14=(Button)this.findViewById(R.id.button14);button15=(Button)this.findViewById(R.id.b

38、utton15);button16=(Button)this.findViewById(R.id.button16);button17=(Button)this.findViewById(R.id.button17);edit=(EditText)findViewById(R.id.editText1);button1.setOnClickListener(this);button2.setOnClickListener(this);button3.setOnClickListener(this);button4.setOnClickListener(this);button5.setOnCl

39、ickListener(this);button6.setOnClickListener(this);button7.setOnClickListener(this);button8.setOnClickListener(this);button9.setOnClickListener(this);button10.setOnClickListener(this);button11.setOnClickListener(this);button12.setOnClickListener(this);button13.setOnClickListener(this);button14.setOn

40、ClickListener(this);button15.setOnClickListener(this);button16.setOnClickListener(this);button17.setOnClickListener(this);OverridepublicbooleanonCreateOptionsMenu(Menumenu)/Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.main,menu);returntrue;Overridepublicvo

41、idonClick(Viewv)/TODOAuto-generatedmethodstubswitch(v.getId()"已經清除",caseR.id.button17:edit.setText(null);Toast.makeText(MainActivity.this,Toast.LENGTH_LONG).show();break;caseR.id.button1:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString1=edit.getText().toString();myString1+

42、="1"edit.setText(myString1);break;caseR.id.button2:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString2=edit.getText().toString();myString2+="2"edit.setText(myString2);break;caseR.id.button3:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString3=edit.get

43、Text().toString();myString3+="3"edit.setText(myString3);break;caseR.id.button4:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString4=edit.getText().toString();myString4+="4"edit.setText(myString4);break;caseR.id.button5:if(isClickEqu)edit.setText(null);isClickEqu=fal

44、se;)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"edit.setText(myString6);break;caseR.id.button7:if(isClickEqu)edit.

45、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();myString8+="8"edit.setText(myString8);break;caseR.id.button9:if(isClickEqu)edit.setText(null);isClickEqu=false;)StringmyString9=edit.getText().toString();myString9+="9"e

溫馨提示

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

評論

0/150

提交評論