計算器安卓設計[共24頁]
《計算器安卓設計[共24頁]》由會員分享,可在線閱讀,更多相關《計算器安卓設計[共24頁](24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、成績 課程設計報告 題 目 ANDROID開發(fā) 課 程 名 稱 簡單計算器 院 部 名 稱 計算機工程學院 專 業(yè) 計算機科學與技術 班 級 15計算機科學與技術 學 生 姓 名 周江成 學 號 1513902035 課程設計地點 1416 課程設計學時
2、 指 導 教 師 葉崧 金陵科技學院教務處制 課程設計報告書寫要求 課程設計報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。 課程設計報告書寫說明 課程設計報告應包含以下七部分內(nèi)容:1、摘要2、目錄3、前言/引言 4.正文 5. 結論6. 參考文獻7. 附錄,每部分的書寫要求參見具體條目要求。 填寫注意事項 (1)準確說明,層次清晰。 (2)盡量采用專用術語來說明事物?!? (3)外文、符號、公式要準確,應使用統(tǒng)一規(guī)定的名詞和符號。 (4)
3、應獨立完成課程設計報告的書寫,嚴禁抄襲、復印,一經(jīng)發(fā)現(xiàn),以零分論處。 課程設計報告批改說明 課程設計報告的批改要及時、認真、仔細,一律用紅色筆批改。課程設計報告的批改成績采用五級計分制或百分制,具體評分標準由各院部自行制定。 課程設計報告裝訂要求 報告批改完畢后,任課老師應將課程設計報告以自然班為單位、按學號升序排列,并附上一份該課程設計的教學大綱。 金陵科技學院課程設計報告 課程設計題目: 簡單計算器 1、 摘要(所進行設計工作的主旨、
4、緣起、 目的,設計工作的主要內(nèi)容、過程,采用的方法及取得的成果。關鍵字(Key Words): 一般3~5個,最能代表報告內(nèi)容特征,或在報告起關鍵作用,最能說明問題的詞組) 目前手機可以說是普及率非常高的電子設備了,由于其便于攜帶,使用方便,資費適中等等原因,現(xiàn)在手機已經(jīng)在一定程度開始代替固定電話的通話功能,以及一些原來電腦軟件上的功能了。手機上的軟件也隨著手機的發(fā)展變得豐富起來了,時至今日已經(jīng)出現(xiàn)了很多專門制作手機軟件的公司,雖然制作的多是游戲軟件,但是一些輔助性的工具軟件也有了很多.我在此次系統(tǒng)中所做的工作主要是設計整個系統(tǒng)以及利用編程語言實現(xiàn)整個系統(tǒng),使系統(tǒng)能夠正確的運行計算功能。
5、 本程序是一個基于現(xiàn)有手機計算器開發(fā)的在觸屏手機上運行的簡單計算器,使用戶可以更加簡單便捷的使用計算器功能,在此次程序設計中所做的工作主要是設計程序的圖形化操作界面,以及利用編程語言實現(xiàn)整個程序的計算功能,使其能夠正確運行。 設計的計算器應用程序可以完成加法、減法、乘法以及除法,并且具有刪除和清空的功能。 關鍵詞:Android、應用開發(fā)、計算器 二、目錄 一.前言 二.正文 1. 開發(fā)環(huán)境 2. 程序流程設計 3. 系統(tǒng)功能設計 4. 基于Android平臺系統(tǒng)具體設計 5. 總體模塊詳細設計 6. 輸入模塊詳細設計 7. 顯示模塊詳細設計
6、 8. 計算模塊詳細設計 9. 界面設計截圖 三.總結 四.參考文獻 五.附錄 I 三、前言(說明本次課程設計課題意義,本課題相關技術特點,擬采用的方案或路線) 通過此次課程設計,鞏固所學Java語言的基礎知識,增進Java語言編輯基本功,掌握JDK,Android Studio等開發(fā)工具的應用,拓展常用類庫的應用。使學生通過該教學環(huán)節(jié)與手段,把所學課程及相關知識加以融匯貫通,全面掌握Java語言的編程思想及面向?qū)ο蟪绦蛟O計的方法。 加法運算 根據(jù)用戶的實際要求,程序應實現(xiàn)以下功能:計算器界面友好,方便使用,具有基本的加、減、乘、除功能,能夠判斷用戶輸入運算數(shù)是
7、否正確,支持小數(shù)點運算,具有退格功能,能夠刪除最后一個輸入,具有清除功能。 減法運算 記憶相關功能 計算器 乘法運算 清除相關功能 除法運算 整個程序基于Android技術開發(fā),除總體模塊外主要分為輸入模塊、顯示模塊以及計算模塊這三大部分。在整個系統(tǒng)中總體模塊控制系統(tǒng)的生命周期,輸入模塊部分負責讀取用戶輸入的數(shù)據(jù),顯示模塊部分負責顯示用戶之前輸入的數(shù)據(jù)以及顯示最終的計算結果,計算機模塊負責進行數(shù)據(jù)的運算以及一些其他的功能。 具體的說,總體模塊的作用主要是生成應用程序的主類,控制應用程序的生命周期。輸入模塊只要描述了計算器鍵盤以及鍵盤的監(jiān)聽即主要負責讀取用戶的
8、鍵盤輸入以及響應觸屏的按鍵,需要監(jiān)聽手機動作以及指針事件處理觸屏的單擊操作,同時提供了較為直觀的鍵盤圖形用戶界面。顯示模塊描述了計算器的顯示區(qū),即該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計算結果,同時負責顯示一些其他的信息。 計算模塊則主要描述了計算器的整體,實現(xiàn)了計算器的界面,負責計算用戶輸入的數(shù)據(jù),包括加、減、乘、除等各種功能,退格以及清零的功能。 系統(tǒng)除了總體模塊以外主要由三大模塊來組成,即輸入模塊、顯示模塊和計算模塊,如下圖所示: 總體系統(tǒng) 顯示模塊 計算模塊 輸入模塊 三大模塊 輸入模塊主要描述了計算器鍵盤以及鍵盤的監(jiān)聽即負責讀取用戶的鍵
9、盤輸入以及響應觸屏的按鍵,需要監(jiān)聽手機按鍵的動作以及指針事件處理方法處理觸屏的單擊操作(以松開按鍵為標準)。同時提供了較為直觀的鍵盤圖形用戶界面。顯示模塊描述了計算器的顯示區(qū),即該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計算結果,同時負責顯示一些其他的信息。計算模塊則主要描述了計算器的整體,實現(xiàn)了計算器的界面,負責計算用戶輸入的數(shù)據(jù),包括加、減、乘、除等各種功能,退格以及清零的功能。 4、 正文(包含所進行設計的整體內(nèi)容) 1、開發(fā)環(huán)境 Android是Google于2007年11月5日宣布基于Linux平臺的開源手機操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應用軟件組
10、成,號稱是首個移動端打造的真正開放和完整的移動軟件??梢园阉斫獬蒐inux上套了一個JAVA的殼。 Android的平臺基本上是免費的,雖然有部分原生鏈接庫會要求費用,但大部分是免權利金的。Android的程序可以采用JAVA開發(fā),因為它的虛擬機Dalvik,只是它將JAVA的bytecode轉(zhuǎn)成自己的格式,回避掉需要付給SUN有關JAVA的授權費用,因此,Android開發(fā)環(huán)境是需要JDK的。 Android Studio 是一個Android集成開發(fā)工具,基于IntelliJ IDEA. 類似EclipseADT,Android Studio 提供了集成的 Android 開發(fā)工具用
11、于開發(fā)和調(diào)試。 2、程序流程設計 知道了系統(tǒng)的功能以后,我們通過main.xml來建立顯示界面,完成后系統(tǒng)開始監(jiān)聽用戶的按鍵輸入,每次輸入系統(tǒng)都會判斷一次用戶輸入的類型,是數(shù)字還是運算符號或者是清除,判斷完后分成不同類型如數(shù)字,符號,基本運算等等進行進一步的處理,根據(jù)用戶的要求繼續(xù)進行下一步的操作,最后計算出最終結果并顯示在顯示區(qū)。 流程設計圖如下所示: 開始 監(jiān)聽用戶按鍵輸入 系統(tǒng)重置 判斷是否清零操作 是 否 判斷是否結算結果
12、 否 是 按照用戶要求進行計算 在顯示區(qū)顯示計算結果 3、系統(tǒng)功能設計 整個系統(tǒng)的功能比較多,比較復雜,如上所說,可以分為十多個功能模塊,但是邏輯上理解其實不算難,系統(tǒng)包括如普通計算功能,包括加減乘除,退格以及清零功能。 加法運算 記憶相關功能 減法運算 計算器 清除相關功能 乘法運算 除法運算 4、 基于Android平臺系統(tǒng)具體設計 系統(tǒng)除了總體模塊以外主要由三大模塊來組成,即輸入模塊,顯示模
13、塊和計算模塊。用系統(tǒng)框圖來顯示。即如下圖: 總體系統(tǒng) 顯示模塊 計算模塊 輸入模塊 5、 總體模塊詳細設計 總體模塊需要完成的任務主要就是系統(tǒng)的程序啟動類,需要負責整個系統(tǒng)的生命周期。同時還要在模塊中完成菜單欄上的所有功能,退出程序,記憶數(shù)據(jù),顯示數(shù)據(jù),清除記憶數(shù)據(jù)這四個功能 總體模塊 如下: 完成程序啟動類 完成菜單功能 6、 輸入模塊詳細設計 系統(tǒng)如果想要完成計算器中的各種功能,首先用戶要能進行數(shù)據(jù)輸入,由于是在觸屏手機上開發(fā)計算器程序,所以要求輸入可以直接使用觸屏進行,所以在設計的時候就要充分考慮這一點。所以在進
14、行模塊設計師,選擇編寫輸入模塊類的時候會選取使用了可以支持觸屏輸入的特殊增強行的圖形用戶界面類。 輸入模塊主要的任務是描述計算器鍵盤以及實現(xiàn)鍵盤監(jiān)聽,即當用戶點擊按鍵或者屏幕的時候監(jiān)聽器會去調(diào)用相應的處理辦法,本模塊還需要為系統(tǒng)提供一個較為直接的鍵盤圖形用戶界面。 輸入模塊 如下: 輸入模塊 實現(xiàn)按鍵監(jiān)聽 描述計算器鍵盤 實現(xiàn)按鍵監(jiān)聽 實現(xiàn)按鍵監(jiān)聽 描述計算器鍵盤 7、 顯示模塊詳細設計 顯示模塊主要完成的任務是描述計算器的顯示區(qū),該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計算結果和一些其他信息。同時本模塊還將提供和設置顯示
15、的具體方法。 顯示模塊 如圖: 設置顯示區(qū)數(shù)據(jù)方法 調(diào)用顯示區(qū)數(shù)據(jù)方法 顯示區(qū)的相關設置 8、 計算模塊詳細設計 系統(tǒng)想要能在屏幕上顯示出計算器的樣子要有整體的布局,在本模塊中要完成布局的具體設計,使用戶能夠看到整個計算器的界面。同時系統(tǒng)想要完成計算功能必須要處理用戶的輸入,當輸入模塊的監(jiān)聽傳到計算模塊中,計算模塊就要根據(jù)相應的方法進行進一步邏輯判斷。 如下: 計算模塊 整體布局 邏輯判斷 數(shù)值輸入判斷 運算輸入判斷 高級功能 普通運算 清零復位功能 記憶相關功能
16、 9、 界面設計截圖 五、結論(對整個設計工作的總結,可以包括作者提出的建議、下一步工作的設想及改進意見等) 課程設計終于在我的努力下做完了。這個時候我更加深入的了解了Java的特點以及一些相關知識。與其臨淵羨魚,不如退而結網(wǎng)。這次Android課程設計給我的最大的印象就是如果自己有了興趣,就動手去做,困難在你的勇氣和毅力下是抬不了頭的。如果你連失敗都不怕了,那你還怕什么,拾起懶惰的心,勤奮著就會走向成功斬。這次的課程設計在我未來的時日里,是一個標桿,因為它告訴了我,只要我努力沒有什么事我做不好的。安卓開發(fā)是個很有意思的事情,以后可以在自己手機上安裝自己開發(fā)的一些小程序,
17、也是個非常不錯的事情,目前還沒有個安卓機子,而在其他同學手機測試過后,還是比較不錯的 六、參考文獻(撰寫論文過程中所參考的文章、書本及其它文獻。) [1] 王小科,Android入門經(jīng)典[M],北京:機械工業(yè)出版社,2013年. [2] DevDiv移動開發(fā)社區(qū),Android開發(fā)實戰(zhàn)體驗[M],北京:海洋出版社,2013 [3] 第一行代碼 [4] 2015最新Android基礎入門教程 7、 附錄(相關圖紙及源程序等) 目錄結構 Activity_main.xml中的源代碼
18、1.0" encoding="utf-8"?>
20、ndroid:id="@+id/et_input"
android:editable="false"
android:gravity="right|bottom"
/>
21、 android:orientation="horizontal"
android:layout_below="@+id/et_input"
android:layout_alignParentStart="true"
android:weightSum="1">
25、************
26、d:layout_alignParentStart="true"
android:weightSum="1">
27、_weight="0.54" />
28、 android:layout_width="59dp"
android:layout_height="74dp"
android:text="9"
android:textSize="20sp"
android:id="@+id/btn_9"
/>
29、 android:text="-"
android:textSize="20sp"
android:id="@+id/btn_minus"
/>
31、idth="60dp"
android:layout_height="74dp"
android:text="4"
android:textSize="20sp"
android:id="@+id/btn_4"
android:layout_weight="0.54" />
32、"74dp"
android:text="5"
android:textSize="20sp"
android:id="@+id/btn_5"
android:layout_weight="0.46" />
33、 android:textSize="20sp"
android:id="@+id/btn_6"
/>
34、 />
35、 android:orientation="horizontal"
android:layout_below="@+id/et_input"
android:layout_alignParentStart="true"
android:weightSum="1">
36、 android:textSize="20sp"
android:id="@+id/btn_1"
android:layout_weight="0.54" />
37、 android:id="@+id/btn_2"
android:layout_weight="0.46" />
38、 39、
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="290dp"
android:orientation="horizontal"
android:layout_below="@+id/et_input"
android:layout_alignParentStart="true"
android:weightSum="1">
40、 41、="223dp"
android:layout_height="74dp"
android:text="="
android:textSize="20sp"
android:id="@+id/btn_equal"
android:layout_weight="0.24" />
42、mple.work; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity implements View.OnClickListener { Button btn_0 ; Butto
43、n btn_1; Button btn_2; Button btn_3 ; Button btn_4 ; Button btn_5 ; Button btn_6 ; //數(shù)字按鈕 Button btn_7 ; Button btn_8 ; Button btn_9 ; Button btn_point ; //小數(shù)點按鈕 Button btn_clear ; Button btn_del ; Button btn_pluse ; Button btn_minus
44、 ; Button btn_multiply ; Button btn_divide ; Button btn_equle ; EditText et_input ; boolean clear_flag ;//清空標識 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ma
45、in); btn_0 = (Button) findViewById(R.id.btn_0) ; btn_1 = (Button) findViewById(R.id.btn_1) ; btn_2 = (Button) findViewById(R.id.btn_2) ; btn_3 = (Button) findViewById(R.id.btn_3) ; btn_4 = (Button) findViewById(R.id.btn_4) ; btn_5 = (Button) find
46、ViewById(R.id.btn_5) ; btn_6 = (Button) findViewById(R.id.btn_6) ; btn_7 = (Button) findViewById(R.id.btn_7) ; btn_8 = (Button) findViewById(R.id.btn_8) ; btn_9 = (Button) findViewById(R.id.btn_9) ; btn_point = (Button) findViewById(R.id.btn_point) ;
47、 btn_clear = (Button) findViewById(R.id.btn_clear) ; btn_del = (Button) findViewById(R.id.btn_del) ; btn_pluse = (Button) findViewById(R.id.btn_plus) ; btn_minus = (Button) findViewById(R.id.btn_minus) ; btn_multiply = (Button) findViewById(R.id.btn_multiply)
48、; btn_divide = (Button) findViewById(R.id.btn_divide) ; btn_equle = (Button) findViewById(R.id.btn_equal) ; //以上實例化按鈕 et_input = (EditText) findViewById(R.id.et_input); //實例化之后的顯示屏 btn_0.setOnClickListener(this); btn_1.setOnClickListener(this);
49、 btn_2.setOnClickListener(this); btn_3.setOnClickListener(this); btn_4.setOnClickListener(this); btn_5.setOnClickListener(this); btn_6.setOnClickListener(this); btn_7.setOnClickListener(this); btn_8.setOnClickListener(this); btn_9.setO
50、nClickListener(this); btn_point.setOnClickListener(this); btn_clear.setOnClickListener(this); btn_del.setOnClickListener(this); btn_pluse.setOnClickListener(this); btn_minus.setOnClickListener(this); btn_multiply.setOnClickListener(this);
51、 btn_divide.setOnClickListener(this); btn_equle.setOnClickListener(this); //設置以上按鈕的點擊事件 } @Override public void onClick(View v) { String str = et_input.getText().toString(); switch (v.getId()) { case R.id.btn_0: case
52、 R.id.btn_1: case R.id.btn_2: case R.id.btn_3: case R.id.btn_4: case R.id.btn_5: case R.id.btn_6: case R.id.btn_7: case R.id.btn_8: case R.id.btn_9: case R.id.btn_point:
53、 if (clear_flag) { clear_flag =false ; str ="" ; et_input.setText(""); } et_input.setText(str + ((Button)v).getText()); break ; case R.id.btn_plus: case R.id
54、.btn_minus: case R.id.btn_multiply: case R.id.btn_divide: if (clear_flag) { clear_flag =false ; str ="" ; et_input.setText(""); } et_input.setText(str+ " " + ((
55、Button)v).getText()+" "); break; case R.id.btn_del: if (clear_flag) { clear_flag =false ; str ="" ; et_input.setText(""); }else if (str!=null&&!str.equals("")){
56、 et_input.setText(str.substring(0,str.length()-1)); } break; case R.id.btn_clear: clear_flag =false ; str ="" ; et_input.setText(""); case R.id.btn_equal: getResult
57、(); break ; } } /* 單獨的調(diào)用運算結果 * * * */ private void getResult(){ String exp = et_input.getText().toString(); if (exp == null||exp.equals("")){ return; } if(!exp.contains(" ")) { ret
58、urn; } if (clear_flag){ clear_flag = false ; return; } clear_flag = true ; double result = 0 ; String s1 = exp.substring(0,exp.indexOf(" ")); //運算符前面的字符串 String op = exp.substring(exp.indexOf(" ")+1,exp.indexO
59、f(" ")+2) ; String s2 = exp.substring(exp.indexOf(" ")+3) ; if (!s1.equals(" ")&&!s2.equals(" ")){ double d1 = Double.parseDouble(s1) ; double d2 = Double.parseDouble(s2) ; if (op.equals("+")){ result = d1 + d2 ;
60、 }else if (op.equals("-")){ result = d1 - d2 ; }else if (op.equals("*")){ result = d1 * d2 ; }else if (op.equals("/")){ if(d2 == 0){ result = 0 ; }else { re
61、sult = d1/d2 ; } } if (s1.contains(".")&&s2.contains(".")) { int r = (int) result; et_input.setText(r+""); }else { et_input.setText(result+""); } }else if (!s1.equals(""
62、)&&s2.equals("")){ et_input.setText(exp); }else if (s1.equals("")&&!s2.equals("")){ double d2 = Double.parseDouble(s2) ; if (op.equals("+")){ result = 0 + d2 ; }else if (op.equals("-")){ result = 0 - d2
63、 ; }else if (op.equals("*")){ result = 0 ; }else if (op.equals("/")){ result = 0 ; } if (s2.contains(".")) { int r = (int) result; et_input.setText(r+""); }else
64、{
et_input.setText(result+"");
}
}else {
et_input.setText("");
}
}
}
AndroidMainfest.xml中的相關設置,代碼如下:
65、on
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。