版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 Android項(xiàng)目開發(fā)實(shí)訓(xùn)報(bào)告 姓 名: 趙炳琪 學(xué) 號: 140840131 專 業(yè): 軟件技術(shù) 項(xiàng)目名稱: Android手機(jī)記賬本 指導(dǎo)教師: 陳雪蓮 實(shí)訓(xùn)日期:2016年10月30日至 2016年12月30日 2016年 12月 25日 Android項(xiàng)目開發(fā)實(shí)訓(xùn)報(bào)告Android項(xiàng)目開發(fā)實(shí)訓(xùn)記錄單學(xué)號140840131姓名趙炳琪性別男指導(dǎo)教師 陳雪蓮項(xiàng)目名稱 Android手機(jī)記賬本項(xiàng)目描述收支管理模塊是程序的主體功能,實(shí)現(xiàn)了處理用戶的收入和支出的信息,進(jìn)行處理后用表單的形式進(jìn)行顯示,同時提供時間段的收支情況查詢功能。 系統(tǒng)除了總體模塊以外主要由三大模塊來組成,即統(tǒng)計(jì)功能和備份功能
2、。項(xiàng)目評語分項(xiàng)成績平時成績實(shí)踐能力實(shí)訓(xùn)報(bào)告總成績等級目 錄第一章 概述1第二章 需求分析22.1 項(xiàng)目背景22.2 項(xiàng)目需求2第三章 相關(guān)技術(shù)53.1 Adnroid平臺介紹53.2 關(guān)鍵技術(shù)研究7第四章 概要設(shè)計(jì)104.1 系統(tǒng)體系結(jié)構(gòu)104.2 用戶界面設(shè)計(jì)154.2.1計(jì)算器界面154.2.2小數(shù)點(diǎn)運(yùn)算界面154.2.3負(fù)數(shù)運(yùn)算界面164.2.4開方運(yùn)算界面16第五章 詳細(xì)設(shè)計(jì)175.1數(shù)據(jù)輸入模塊175.2數(shù)據(jù)顯示模塊175.3 數(shù)據(jù)計(jì)算功能模塊17第六章 結(jié)論27第一章 概述隨著社會的發(fā)展,經(jīng)濟(jì)水平的提高,手機(jī)越來越普及。同時伴隨著已送慧聯(lián)網(wǎng)技術(shù)的發(fā)展,手機(jī)的功能也變得越來越豐富。從
3、原來只具有簡單通信功能的非智能手機(jī)到現(xiàn)在具有手機(jī)操作系統(tǒng),除通話功能以外,還集上網(wǎng)、聊天、炒股、收發(fā)郵件等功能于一身的智能手機(jī)系統(tǒng)。由Google公式牽頭眾多實(shí)力雄厚的軟硬件廠商加盟商成立了OMS聯(lián)盟,病退出的Android平臺手機(jī)系統(tǒng),作為時代的新生兒,Android手機(jī)操作平臺有著得天獨(dú)厚的優(yōu)勢廣闊的發(fā)展前景。而計(jì)算器作為現(xiàn)在人們?nèi)粘I钪谐S玫囊环N工具也已經(jīng)可以說是人們?nèi)粘I钪斜夭豢缮俚墓ぞ吡?。?jì)算器的發(fā)展同樣經(jīng)歷了漫長的過程,凝聚無數(shù)仙人的智慧,甚至連計(jì)算機(jī)的發(fā)展都可以說是源于計(jì)算器的發(fā)展。本程序正式基于Android平臺開發(fā)的計(jì)算器。本課題要求:設(shè)計(jì)一個基于Android的計(jì)算器的
4、軟件。實(shí)現(xiàn)的功能有:具有基本的加、減、乘、除功能,能夠判斷用戶輸入運(yùn)算數(shù)是否正確,支持小數(shù)運(yùn)算,具有退格功能,能夠刪除最后一個輸入,具有清除功能,即“C”。因?yàn)榇蜷_(ON)、關(guān)閉(OFF)屏幕按鍵的功能需重點(diǎn)研究的關(guān)鍵問題:計(jì)算器的運(yùn)算和顯示問題。15- 15 -第二章 需求分析2.1 項(xiàng)目背景隨著社會的發(fā)展,經(jīng)濟(jì)水平的提高,手機(jī)越來越普及。同時伴隨著移動互聯(lián)網(wǎng)技術(shù)的發(fā)展,手機(jī)的功能也變得越來越豐富。從原來只具有簡單通信功能的非智能手機(jī)到現(xiàn)在具有手機(jī)操作系統(tǒng),除通話功能以外,還集上網(wǎng)、聊天、炒股、收發(fā)郵件等功能于一身的智能手機(jī)系統(tǒng)。 Java語言是當(dāng)今流行的網(wǎng)絡(luò)編程語言,它具有面向?qū)ο蟆⒖缙脚_
5、、分布應(yīng)用等特點(diǎn)。面向?qū)ο蟮拈_發(fā)方法是當(dāng)今世界最流行的開發(fā)方法,它不僅具有更貼近自然的語義,而且有利于軟件的維護(hù)和繼承。 為了進(jìn)一步鞏固課堂上所學(xué)到的知識,深刻把握嵌入式系統(tǒng)以及Java語言的重要概念及其面向?qū)ο蟮奶匦裕刮覀兡軌蚴炀毜膽?yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問題的能力。 通過此次課程設(shè)計(jì),鞏固所學(xué)Java語言基本知識,增進(jìn)Java語言編輯基本功,掌握J(rèn)DK、Editplus、Eclipse、JCreator等開發(fā)工具的運(yùn)用,拓寬常用類庫的應(yīng)用。使學(xué)生通過該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知識加以融會貫通,全面掌握J(rèn)ava語言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法,為今后從事實(shí)際工作打
6、下堅(jiān)實(shí)的基礎(chǔ)。2.2 項(xiàng)目需求根據(jù)需求,符合用戶的實(shí)際要求,系統(tǒng)應(yīng)實(shí)現(xiàn)以下功能:計(jì)算器界面友好,方便使 用,顯示到少6位結(jié)果,具有基本的加、減、乘、除功能,能夠判斷用戶輸入運(yùn)算數(shù)是否正確,支持小數(shù)運(yùn)算,具有退格功能,能夠刪除最后一個輸入,具有清除功能,即“C”。因?yàn)榇蜷_(ON)、關(guān)閉(OFF)屏幕按鍵的功能等。如圖2-1所示。整個程序基于Android技術(shù)開發(fā),除總體模塊外主要分為輸入模塊、顯示模塊以及 計(jì)算模塊這三大部分。在整個系統(tǒng)中總體模塊控制系統(tǒng)的生命周期,輸入模塊部分負(fù)責(zé)讀取用戶輸入的數(shù)據(jù),顯示模塊部分負(fù)責(zé)顯示用戶之前輸入的數(shù)據(jù)以及顯示最終的計(jì)算結(jié)果,計(jì)算機(jī)模塊部分負(fù)責(zé)進(jìn)行數(shù)據(jù)的運(yùn)算以
7、及一些其他的功能。下面較為詳細(xì)的做了說明。 具體的說,總體模塊的作用主要是生成應(yīng)用程序的主類,控制應(yīng)用程序的生命周期。 輸入模塊主要描述了計(jì)算器鍵盤以及鍵盤的監(jiān)聽即主要負(fù)責(zé)讀取用戶的鍵盤輸入以及響應(yīng)觸屏的按鍵,需要監(jiān)聽手機(jī)動作以及用指針事件處理方法處理觸屏的單擊動作。同時提供了較為直觀的鍵盤圖形用戶界面。 顯示模塊描述了計(jì)算器的顯示區(qū),即該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計(jì)算結(jié)果,同時負(fù)責(zé)顯示一些其他的信息。計(jì)算模塊則主要描述了計(jì)算器的整體,實(shí)現(xiàn)了計(jì)算器的界面,負(fù)責(zé)計(jì)算用戶輸入數(shù) 據(jù),包括加、減、乘、除等各種功能,記憶數(shù)據(jù)的相關(guān)功能,退格以及清零的功能。 系統(tǒng)除了總體模塊以外主要由三大模塊
8、來組成,即輸入模塊、顯示模塊和計(jì)算模塊, 如圖2-2所示:輸入模塊主要描述了計(jì)算器鍵盤以及鍵盤的監(jiān)聽即主要負(fù)責(zé)讀取用戶的鍵盤輸入以 及響應(yīng)觸屏的按鍵,需要監(jiān)聽手機(jī)按鍵動作以及用指針事件處理方法處理觸屏的單擊動作(以松開按鍵為準(zhǔn))。同時提供了較為直觀的鍵盤圖形用戶界面。 顯示模塊描述了計(jì)算器的顯示區(qū),即該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計(jì) 算結(jié)果,同時還負(fù)責(zé)顯示一些其他的信息。 計(jì)算模塊則主要描述了計(jì)算器的整體,實(shí)現(xiàn)了計(jì)算器的界面,負(fù)責(zé)計(jì)算用戶輸入數(shù) 據(jù),包括加、減、乘、除、等各種計(jì)算功能,記憶數(shù)據(jù)的相關(guān)功能,退格以及清零的功能。第三章 相關(guān)技術(shù)3.1 Adnroid平臺介紹Android是
9、Google于2007年11月5日宣布的基于Linux平臺的開源手機(jī)操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件??梢园阉唵卫斫獬?Linux上套了一個 JAVA 的殼。 Android 的平臺基本上是免費(fèi)的,雖然有部份原生鏈接庫會要求費(fèi)用,但大部份是免權(quán)利金。 Android 的程序可以采用 JAVA 開發(fā), 因?yàn)樗奶摂M機(jī)(Virtual Machine) Dalvik,只是它將 JAVA 的 bytecode 轉(zhuǎn)成自己的格式,回避掉需要付給 SUN 有關(guān) JAVA 的授權(quán)費(fèi)用。因此,Android 開發(fā)環(huán)境是需要
10、JDK 的。 1. 新建項(xiàng)目:打開 Eclipse,選擇 File New Project Android Project,具體輸入如圖3-1所示:在Project name:中輸入工程的名字,build target中選擇所用的平臺,Application name為應(yīng)用程序的名稱,create activity為活動類的名稱,配制運(yùn)行方式:點(diǎn)擊Run Configurations會出現(xiàn)圖3-2的界面,然后點(diǎn)擊androidandroid application新建一個動行方式,在右邊project中輸入要運(yùn)行的工程名稱。至此運(yùn)行方式配制完成。運(yùn)擊會行,便會出下如圖3-3界面:3.2 關(guān)鍵技
11、術(shù)研究每一個應(yīng)用程序,我們都要設(shè)計(jì)一個圖標(biāo),可以說圖標(biāo)是應(yīng)用程序的名片,好的圖標(biāo)能夠很快地吸引用戶。在此不對圖標(biāo)問題做過多的介紹。由于不同的android手機(jī)有著不同的分辨率,將不同分辨率的圖標(biāo)圖片放置在相應(yīng)位置,如圖3-4所示。drawable-hdpi中放置分辨率最高的圖標(biāo),drawable-mdpi中放置分辨率中等的圖標(biāo),drawable-ldpi中放置分辨率最低的圖標(biāo)。 圖標(biāo)圖片大小的要求如圖3-5所示:在AndroidManifest.xml文件中進(jìn)行修改,修改情況如下: 其他設(shè)置保持不變。 在value中的String.xml中加入app_name,代碼為:計(jì)算器界面設(shè)計(jì)應(yīng)該盡量簡
12、潔而美觀,應(yīng)該具有良好的交互性。當(dāng)然,我們每個人可以根據(jù)自己的喜好來進(jìn)行設(shè)計(jì),根據(jù)我個人的喜好,我最終設(shè)計(jì)出來的計(jì)算器界面如圖3-6所示: 從上圖中,我們可以很直觀的看到,從上到下分別是:顯示模塊、輸入模塊、計(jì)算模塊。 輸入模塊,主要描述了計(jì)算器鍵盤以及鍵盤的監(jiān)聽即主要負(fù)責(zé)讀取用戶的鍵盤輸入以及響應(yīng)觸屏的按鍵,當(dāng)用戶點(diǎn)擊按鍵或者屏幕的時候監(jiān)聽器會去調(diào)用相應(yīng)的處理辦法,具體的處理辦法會在相關(guān)的地方進(jìn)行說明。在本項(xiàng)目中,在觸屏上提供了各種功能的按鍵,分別是C,0,1,2,3,4,5,6,7,8,9,+,-,=,ON, OFF。 在整體界面的設(shè)置中,我還為各個按鍵的設(shè)置中我還設(shè)置了字體的大小,字體的
13、顏色,分別用下列語句實(shí)現(xiàn): 字體大小:android:textSize=25dip 字體顏色:android:textColor = #7f0000 界面背景:android:background=#888FFF 顯示模塊,主要描述了計(jì)算器的顯示區(qū),即該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計(jì)算結(jié)果和一些其他信息。顯示模塊還設(shè)置了顯示的字體,大小,顏色,同時還設(shè)置了顯示字體的顏色。具體設(shè)置如下代碼: 顯示區(qū)中使用的是基于增強(qiáng)型的圖形用戶界面EditText,利用此類的功能,在顯示模塊中完成了以上設(shè)置。顯示模塊聲明了這些設(shè)置,在用戶使用系統(tǒng)的時候,會在協(xié)同布局設(shè)置一同完成以上設(shè)置,使用戶在使用的時
14、候可以直觀的看到顯示區(qū)的樣子。 一般情況下都會選擇差不多的字體,所以此處選擇的字體和鍵盤上顯示的字體其實(shí)是一樣的,但是事實(shí)上系統(tǒng)中進(jìn)行了兩次聲明,即邏輯上這是兩種不同的字體,以及設(shè)置字符串text為空。顯示區(qū)和輸入模塊中的表格一樣,同樣分別設(shè)置了最小顯示以及完美顯示這兩種狀態(tài)。然后聲明了顯示區(qū)的畫法,畫法中包括了顯示區(qū)的兩個矩形組成的顯示框,顯示框的顏色和大小以及顯示框中顯示的文字所使用的字體,還有文字在顯示框中的位置。最后設(shè)置了計(jì)算模塊中的變量得到以及改變顯示中所顯示的內(nèi)容的方法,當(dāng)顯示中的內(nèi)容發(fā)生變化時,系統(tǒng)會運(yùn)行repaint命令來重畫顯示區(qū),由于使用的是比較低級的方法,所以只能通過整個
15、顯示區(qū)來實(shí)現(xiàn)顯示更新這個命令。這樣雖然和使用高級的方法相比速度上可能有點(diǎn)慢,但是由于時間相差的不是很多,在用戶的正常使用中是不會有所感覺的。以上就是顯示模塊的具體實(shí)現(xiàn)流程。第四章 概要設(shè)計(jì)4.1 系統(tǒng)體系結(jié)構(gòu)計(jì)算模塊則主要描述了計(jì)算器的整體,實(shí)現(xiàn)了計(jì)算器的界面,定義了用戶單擊的處理辦法,通過定義的處理辦法來完成用戶的操作命令,實(shí)現(xiàn)用戶的計(jì)算要求,這些計(jì)算要求包括了數(shù)值的輸入,小數(shù)點(diǎn)的輸入,正負(fù)號的輸入,記憶相關(guān)功能的完成,加、減、乘、除等各種計(jì)算功能的完成,運(yùn)算符的替換,初始化系統(tǒng)等等。按鍵監(jiān)聽同時監(jiān)聽了觸屏上的按鍵和鍵盤上的按鍵,其中按鍵的監(jiān)聽使用了的松開為判斷的標(biāo)準(zhǔn),即用戶松開按鍵的時候程
16、序才會讀取數(shù)據(jù)。計(jì)算模塊是整個系統(tǒng)的主體部分,整個計(jì)算器功能是通過Jisuanq2Activity.java來實(shí)現(xiàn)的。 首先,我使用一個數(shù)組btn來分別監(jiān)控十個數(shù)字鍵,用et_led來監(jiān)控輸入內(nèi)容,用btn_div、btn_mul、btn_sub、btn_plus、btn_equal、btn_dot,分別來表示除法、乘法、減法、加法、等號、點(diǎn)號,具體實(shí)現(xiàn)如下代碼: private Button btn = new Button10; private EditText et_led; private Button btn_div, btn_mul, btn_sub, btn_plus, btn_
17、equal, btn_dot; 其次,對內(nèi)容的操作。當(dāng)有內(nèi)容輸入時,首先接收內(nèi)容,接受的內(nèi)容分為兩部分:當(dāng)輸入為數(shù)據(jù)時,則是通過傳遞給數(shù)組str,根據(jù)數(shù)據(jù)的傳遞判斷數(shù)據(jù)內(nèi)容的長度,如果沒有內(nèi)容輸入則,則通過et_led.setText()為0,如果有數(shù)據(jù)輸入的時候,則通過et_led.setText()顯示數(shù)據(jù),并且將第一次輸入的數(shù)據(jù)保存predata;當(dāng)輸入為符號時,像“+、-、*、/、C、ON、OFF”時,然后對符號進(jìn)行判斷,具體實(shí)現(xiàn)代碼如下: private OnClickListener actionPerformed = new OnClickListener() public vo
18、id onClick(View v) String command = (Button)v).getText().toString(); str=et_led.getText().toString();if(pareTo(Bksp) = 0) if(str.length() 1) et_led.setText(str.substring(0, str.length() - 1);else if(str.length() = 1) et_led.setText(0); vbegin=true; if(et_led.getText().toString().compareTo(-)=0) et_l
19、ed.setText(0); vbegin = true; else if ; 最后,當(dāng)?shù)诙屋斎霐?shù)據(jù)的時候,將會數(shù)據(jù)存到temp,再根據(jù)上次輸入的符號進(jìn)行運(yùn)算,然后將結(jié)果保存在temp,如果按鍵“=”,則會將將結(jié)果輸出,如果是其他的符號,則會進(jìn)行相應(yīng)的運(yùn)算。程序結(jié)構(gòu)圖如下:參照程序的流程圖,設(shè)計(jì)十個Activity。分別為進(jìn)入頁面的Activity,選擇運(yùn)算的Activity,剩下八個分別為輸入數(shù)據(jù)的Activity和顯示運(yùn)算結(jié)果的Activity,如圖2。在這里應(yīng)該注意的是每當(dāng)創(chuàng)建一個新的class,就要繼承Activity。需要用到public class jisuanqi extend
20、s Activity這句代碼因此整理好程序的流程是關(guān)鍵,設(shè)計(jì)好Activity之間的Intent鏈接是關(guān)鍵。程序所需的Activity 相應(yīng)的,需要在res/layout文件夾中建立3個XML文件來對上述的十個Activity進(jìn)行布局,如圖4-4:總體上所需要的Activity和XML布局文件已經(jīng)建立完畢,下面開始對進(jìn)入計(jì)算器的Activity進(jìn)行編寫,首先在布局文件main.xml中創(chuàng)建兩個Button按鈕,并且對兩個按鈕聲明ID和布局。兩個Button按鈕顯示為“開始計(jì)算”和“退出”如圖4-5:然后在jisuanqi.java中,首先要聲明Button按鈕用到如下代碼: private B
21、utton button1 private Button button2 在安卓里面,用ID找控件是個非常方便的方法,使用findViewById方法來找到在XML文件中創(chuàng)建的對象。因此在jisuanqi.java中,同樣需要使用findViewById方法來找到兩個Button控件,代碼如下: button1 = (Button)findViewById(R.id.button1); button2 = (Button)findViewById(R.id.button2); 接下來開始編輯第二個Activity,也就是選擇運(yùn)算法則的界面,本界面需要創(chuàng)建4個Button按鈕,分別為加、減、乘、
22、除。Id分別為button3、button4、button5、button6。 再下來以加法頁面為例,在本頁面當(dāng)中需要創(chuàng)件兩個EditText,一個TextView,還有一個Button按鈕,TextView顯示為“加上”,Button按鈕顯示為“計(jì)算” 三個Activity創(chuàng)建完成后,我們需要實(shí)現(xiàn)以下動作:在用戶打開軟件之后,點(diǎn)擊“開始計(jì)算”,然后跳轉(zhuǎn)到選擇運(yùn)算法則的界面,當(dāng)用戶點(diǎn)擊“加”則程序進(jìn)入加法界面。由此可見,在整個動作中,需要使用偵聽代碼來識別用戶的操作,然后使用Intent來實(shí)現(xiàn)Activity的切換。我們以開始界面跳轉(zhuǎn)到選擇運(yùn)算法則界面為例:首先在“開始計(jì)算”按鈕上設(shè)置偵聽代碼
23、如下: button1.setOnClickListener(new button1Listener(); 然后開始偵聽,當(dāng)用戶點(diǎn)擊“開始計(jì)算”時,啟動Intent來將本界面切換到選擇運(yùn)算法則的界面,在這里需要JAVA中偵聽的方法和Intent方法,代碼如下:class button1Listener implements OnClickListener Override public void onClick(View v) /生成一個Intent對象 Intent intent = new Intent(); intent.setClass(jisuanqi.this, Activityo
24、ne.class);jisuanqi.this.startActivity(intent); 在這句代碼當(dāng)中intent.setClass(jisuanqi.this, Activityone.class);是規(guī)定了本次跳轉(zhuǎn)是從哪個Activity跳轉(zhuǎn)到Activity,在這里是從jisuanqi.java跳轉(zhuǎn)到Activity.java。 完成了Activity之間的切換,下面我們開始進(jìn)行運(yùn)算的編輯,在加法界面,我們編寫如下代碼來實(shí)現(xiàn)將用戶輸入的兩個數(shù)傳送到Intent中: /生成一個Intent對象 /取得兩個值 String FactorOnestr=FactorOne.getText(
25、).toString(); String FactorTwostr=FactorTwo.getText().toString(); /取得兩個值放在Intent中 Intent intent = new Intent(); intent.putExtra(one,jiashuoneStr);intent.putExtra(two,jiashutwoStr);/使用這個Intent來激活答案頁 intent.setClass(plus.this, resultplus.class);plus.this.startActivity(intent); 接下來要進(jìn)行的是顯示答案的Activity的編寫
26、,在這里我們要注意的是Intent傳過來的是兩個字符串,字符串是不能相加的,因此我們要將兩個字符串強(qiáng)制轉(zhuǎn)換為整形,然后才可以相加,代碼如下: plusresult = (TextView)findViewById(R.id.plusresult); /得到Intent對象當(dāng)中的值 Intent intent = getIntent(); String FactorOnestr=FactorOne.getText().toString(); String FactorTwostr=FactorTwo.getText().toString(); /將字符串轉(zhuǎn)為整形 Log.i(FactorOnes
27、tr,FactorOnestr);Log.i(FactorTwostr,FactorTwostr); /計(jì)算兩數(shù)之和 int result = jiashuone + jiashutwo; plusresult.setText(result + ); 減法,乘法,除法的界面類似于加法的界面,這里不再過多介紹了。 最后需要注意的是要在AndroidMainfest.xml文件中將所有的Activity進(jìn)行注冊,然后才可以運(yùn)行。4.2 用戶界面設(shè)計(jì)4.2.1計(jì)算器界面 圖.2小數(shù)點(diǎn)運(yùn)算界面圖.3負(fù)數(shù)運(yùn)算界面圖.4開方運(yùn)算界面圖4第5章 詳細(xì)設(shè)計(jì)5.1
28、數(shù)據(jù)輸入模塊系統(tǒng)如果想完成計(jì)算器中的各種功能,首先用戶要能進(jìn)行數(shù)據(jù)輸入,由于是在觸屏手機(jī)上開發(fā)計(jì)算器程序,所以要求輸入可以直接使用觸屏進(jìn)行,所以在設(shè)計(jì)的時候就要充分的考慮要這一點(diǎn)。正是由于考慮到這個特殊的地方,所以在進(jìn)行模塊設(shè)計(jì)中,選擇編寫輸入模塊類的時候會特意選取使用了可以支持觸屏輸入的特殊增強(qiáng)型圖形用戶界面類。輸入模塊主要的任務(wù)是描述計(jì)算器鍵盤以及實(shí)現(xiàn)鍵盤的監(jiān)聽,即當(dāng)用戶點(diǎn)擊按鍵或者屏幕的時候監(jiān)聽器會去調(diào)用相應(yīng)的處理辦法,本模塊還需要為系統(tǒng)提供了一個較為直觀的鍵盤圖形用戶界面。5.2數(shù)據(jù)顯示模塊作為手機(jī)計(jì)算器系統(tǒng),顯示部分也是必不可少的一部分。沒有顯示部分就沒有辦法顯示用戶輸入的數(shù)字是否正
29、確,甚至不能顯示計(jì)算出的結(jié)果,由此可見顯示模塊即包括輸入的部分也包括輸出的部分。顯示模塊主要要完成的任務(wù)是描述計(jì)算器的顯示區(qū),該區(qū)域用于顯示用戶輸入的數(shù)據(jù)以及最終的計(jì)算結(jié)果和一些其他信息。同時本模塊還將提供調(diào)用和設(shè)置顯示的具體方法。5.3 數(shù)據(jù)計(jì)算功能模塊系統(tǒng)要完成整個的計(jì)算器的計(jì)算功能,那么計(jì)算模塊就是整個系統(tǒng)的重點(diǎn)模塊。沒有計(jì)算模塊系統(tǒng)就不能順利的完成計(jì)算,就無法達(dá)到用戶的要求。所以計(jì)算模塊的設(shè)計(jì)也是本次系統(tǒng)設(shè)計(jì)中的重點(diǎn)。系統(tǒng)想要能在屏幕上顯示出計(jì)算器的樣子要有整體的布局,在本模塊中要完成布局的具體設(shè)計(jì),使用戶能夠看到整個計(jì)算器的畫面。同時系統(tǒng)想完成計(jì)算功能必須要處理用戶的輸入,當(dāng)輸入模塊
30、的監(jiān)聽傳到計(jì)算模塊中時,計(jì)算模塊就要根據(jù)相應(yīng)的方法進(jìn)行進(jìn)一步的處理。這部分主要是對輸入進(jìn)行的邏輯判斷,基本會通if else來實(shí)現(xiàn)邏輯判斷。package com.android.calculator; import java.math.BigDecimal; import java.math.RoundingMode; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.Selection; import android.view.Vi
31、ew; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; class Flag private int a0; private int a1; private int a2; private int a3; public int a0() return a0; public int a1() return a1; public int a2() return a2; public int a3() return a3; public Fl
32、ag(int a,int b,int c,int d) a0=a; a1=b; a2=c; a3=d; public Flag next; class FlagList private Flag first;public FlagList(int a,int b,int c,int d) first=null; public boolean isEmpty() return (first=null); public void insertFirst(int a,int b,int c,int d) Flag newFlag = new Flag(a,b,c,d); newFlag.next =
33、 first; first = newFlag; public Flag deleteFirst() Flag temp = first; first = first.next; return temp; class FlagStack private FlagList theFlagList; private int count; public FlagStack() theFlagList = new FlagList(0,0,0,0); count=0; public void push(int a,int b,int c,int d) theFlagList.insertFirst(a
34、,b,c,d); count+; public Flag pop() count=count-1; return theFlagList.deleteFirst(); public boolean isEmpty() return ( theFlagList.isEmpty() ); public int count() return count; class Num private String s=new String(); public Num(String s1) s=s1; public String getNum() return s; public Num next; class
35、 NumList private Num firstNum; public NumList() firstNum=null; public boolean isEmpty() return (firstNum=null); public void insertFirst(String s1) Num newNum = new Num(s1); newNum.next = firstNum; firstNum = newNum; public Num deleteFirst() Num temp = firstNum; firstNum = firstNum.next; return temp;
36、 class NumStack private NumList theNumList; private int countNum; public NumStack() theNumList = new NumList(); countNum=0; public void push(String s1) theNumList.insertFirst(s1); countNum+; public Num pop() countNum=countNum-1; return theNumList.deleteFirst(); public boolean isEmpty() return ( theN
37、umList.isEmpty() ); public int countNum() return countNum; class Symbol private char c; private int degree1; public Symbol(char c1) c=c1; if(c=|c=) degree1=2; else degree1=1; public int getDegree() return degree1; public char getSymbol() return c; public Symbol next; class SymbolList private Symbol
38、firstSymbol; public SymbolList() firstSymbol=null; public boolean isEmpty() return (firstSymbol=null); public void insertFirst(char c1) Symbol newSymbol = new Symbol(c1); newSymbol.next = firstSymbol; firstSymbol = newSymbol; public Symbol deleteFirst() Symbol temp = firstSymbol; firstSymbol = first
39、Symbol.next; return temp; class SymbolStack private SymbolList theSymbolList; private int countSymbol; public SymbolStack() theSymbolList = new SymbolList(); countSymbol=0; public void push(char c1) theSymbolList.insertFirst(c1); countSymbol+; public Symbol pop() countSymbol=countSymbol-1; return th
40、eSymbolList.deleteFirst(); public boolean isEmpty() return ( theSymbolList.isEmpty() ); public int countSymbol() return countSymbol; public class CalculatorActivity extends Activity /* Called when the activity is first created. */ if(Character.isDigit(mass j)|mass j=46) n=n+massj; else if(n.length()
41、!=0) numStack.push(n); n=new String(); symbolStack.push(massj); if(j=mass.length-1&n.length()!=0) numStack.push(n); n=new String(); /在這使用了棧,需要使用這兩個循環(huán)改變計(jì)算 順序 while(numStack.countNum()0) numStack1.push(numStack.pop().getNum(); while(symbolStack.countSymbol()0) symbolStack1.push(symbolStack.pop().getSy
42、mbol(); BigDecimal result=calculator(numStack1,symbolStack1); String resultString=result.toString(); String s=outprocess(resultString); text1.setText(s); flag5=1; if(Button)v=button18) str=0; text.setText(str); flag0=1; flag1=0; flag2=0; flag3=0; FlagStack flagstack1=new FlagStack(); flagstack=flagstack1; text1.setText(); if(Button)v=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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超市供水井施工合同
- 二零二五年度個人知識產(chǎn)權(quán)糾紛保證金連帶責(zé)任保證擔(dān)保合同3篇
- 二零二五年度公寓裝修半包服務(wù)合同2篇
- 二零二五年度家具展覽館租賃合同3篇
- 智能工業(yè)車輛項(xiàng)目可行性研究報(bào)告申請立項(xiàng)
- 高速公路改造項(xiàng)目立項(xiàng)報(bào)告
- 打造繁榮文化消費(fèi)環(huán)境的策略與實(shí)施路徑
- 廣西梧州市(2024年-2025年小學(xué)六年級語文)部編版專題練習(xí)((上下)學(xué)期)試卷及答案
- 城中村更新改造的策略與實(shí)踐路徑
- 2025北京朝陽初二(上)期末數(shù)學(xué)真題試卷(含答案解析)
- 做賬實(shí)操-科學(xué)研究和技術(shù)服務(wù)業(yè)的賬務(wù)處理示例
- 2025年人教版歷史八上期末復(fù)習(xí)-全冊重難點(diǎn)知識
- 2024年國家安全員資格考試題庫及解析答案
- 山東省濱州市2023-2024學(xué)年高一上學(xué)期1月期末考試 政治 含答案
- 儀控技術(shù)手冊-自控專業(yè)工程設(shè)計(jì)用典型條件表
- 法務(wù)崗位招聘筆試題及解答(某大型國企)2025年
- 《慶澳門回歸盼祖國統(tǒng)一》主題班會教案
- 洗衣房工作人員崗位職責(zé)培訓(xùn)
- 廣東省深圳市光明區(qū)2022-2023學(xué)年五年級上學(xué)期數(shù)學(xué)期末試卷(含答案)
- XX小區(qū)春節(jié)燈光布置方案
評論
0/150
提交評論