生活助手詳細(xì)設(shè)計(jì)_第1頁
生活助手詳細(xì)設(shè)計(jì)_第2頁
生活助手詳細(xì)設(shè)計(jì)_第3頁
生活助手詳細(xì)設(shè)計(jì)_第4頁
生活助手詳細(xì)設(shè)計(jì)_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、生活助手詳細(xì)設(shè)計(jì)說明書設(shè) 計(jì) 者:田秋榮指 導(dǎo) 教 師:李 然2014年4月7日目錄1引言61.1編寫目的61.2背景61.3定義61.4參考資料61.4用戶用例圖72項(xiàng)目總體概述82.1項(xiàng)目目標(biāo)81.2系統(tǒng)模型83天氣預(yù)報(bào)設(shè)計(jì)說明93.1程序描述93.2功能113.3性能113.4輸入項(xiàng)113.5輸出項(xiàng)113.6接口113.7注釋設(shè)計(jì)123.8限制條件123.9尚未解決的問題124通訊錄設(shè)計(jì)說明124.1程序描述&流程邏輯124.2功能124.3性能144.4接口144.5注釋設(shè)計(jì)144.6限制條件144.7尚未解決的問題155計(jì)算器設(shè)計(jì)說明155.1程序描述&流程邏輯155.2功能165.

2、3性能165.4輸入項(xiàng)165.5輸出項(xiàng)175.6接口175.7注釋設(shè)計(jì)175.8尚未解決的問題176快遞查詢?cè)O(shè)計(jì)說明176.1程序描述&流程邏輯176.2功能186.3性能196.4輸入項(xiàng)196.5輸出項(xiàng)196.6接口196.7注釋設(shè)計(jì)196.8限制條件196.9尚未解決的問題197記事本設(shè)計(jì)說明197.1程序描述&流程邏輯197.2功能227.3性能237.4接口247.5注釋設(shè)計(jì)247.6限制條件247.7尚未解決的問題248日歷設(shè)計(jì)說明248.1程序描述&流程邏輯248.2功能278.3接口278.4注釋設(shè)計(jì)278.5尚未解決的問題271引言1.1編寫目的本詳細(xì)設(shè)計(jì)說明書是針對(duì)網(wǎng)絡(luò)信息體

3、系結(jié)構(gòu)中android應(yīng)用開發(fā)的課程作業(yè)而編寫的,目的是對(duì)該項(xiàng)目進(jìn)行詳細(xì)設(shè)計(jì),在概要設(shè)計(jì)基礎(chǔ)上進(jìn)一步明確系統(tǒng)結(jié)構(gòu),詳細(xì)的介紹系統(tǒng)的各個(gè)模塊,對(duì)進(jìn)行后面的實(shí)現(xiàn)和測(cè)試做準(zhǔn)備。本詳細(xì)設(shè)計(jì)說明書的預(yù)期讀者為本項(xiàng)目小組的成員以及對(duì)該項(xiàng)目感興趣的,在以后想對(duì)系統(tǒng)進(jìn)行擴(kuò)展和維護(hù)的人員。整合復(fù)習(xí)上一階段知識(shí)。1.2背景當(dāng)今社會(huì)的生活節(jié)奏越來越快,人們對(duì)手機(jī)的要求也越來越高,由于手機(jī)市場(chǎng)發(fā)展迅速,使得手機(jī)操作系統(tǒng)也出現(xiàn)了不同種類,現(xiàn)在的市場(chǎng)上主要有三個(gè)手機(jī)操作系統(tǒng),IOS,Windows mobile,symbian,以及谷歌的Android操作系統(tǒng),其中占有開放源代碼優(yōu)勢(shì)的Android系統(tǒng)有最大的發(fā)展前景。

4、那么能在自己的手機(jī)上擁有自己編寫的手機(jī)助手嗎?答案是肯定的。市場(chǎng)上流行的手機(jī)助手,了解他們各自的插件和編碼方式,分析各種編碼的優(yōu)缺點(diǎn),編寫出功能實(shí)用,方便快捷的手機(jī)助手。同時(shí),鍛煉程序編寫能力,熟悉安卓的設(shè)計(jì)流程。本項(xiàng)目:生活小軟件 生活助手本項(xiàng)目的提出者:安卓越 由老師指導(dǎo)個(gè)人完成。1.3定義API:API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件的以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。1.4參考資料參考資料安卓越自編教材網(wǎng)絡(luò)資料老師講解的Demo實(shí)例1

5、.4用戶用例圖用戶天氣預(yù)報(bào)記事本通訊錄快遞查詢?nèi)諝v計(jì)算器天氣預(yù)報(bào)功能中,當(dāng)輸入正確的城市后,點(diǎn)擊確定,能夠查詢出該城市當(dāng)天的基本天氣情況,由于查詢7天的天氣接口已經(jīng)不再刷新,所以只能用這個(gè)查詢一天的接口。通訊錄功能,進(jìn)入通訊錄后,將顯示出已添加用戶的通訊錄,并且能夠進(jìn)行刪除和撥打電話的功能。記事本功能,進(jìn)入記事本,能夠?qū)崿F(xiàn)記事本的增刪改查。計(jì)算器功能,就是實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的所有功能。快遞查詢功能,輸入正確的快遞公司英文名稱,及其對(duì)應(yīng)快遞單號(hào),將查詢出對(duì)應(yīng)快遞信息。日歷功能,正常顯示每個(gè)月份的日歷信息。并且,所有左右滑動(dòng)能夠?qū)崿F(xiàn)上下月的切換。2項(xiàng)目總體概述2.1項(xiàng)目目標(biāo)在android系統(tǒng)手機(jī)平臺(tái)

6、上實(shí)現(xiàn)手機(jī)助手的天氣查詢、記事本、快遞查詢、通訊錄、計(jì)算器、日歷等功能。1. 天氣查詢:輸入你想查詢的城市,查詢出當(dāng)天輸入城市的天氣狀況。2. 記事本:通過添加記事,來添加你想要添加的事件同時(shí)可以看到添加記事的時(shí)間。3. 快遞查詢:輸入快遞公司的英文名稱、快遞單號(hào)查詢出所需查詢的快遞的信息。4. 通訊錄:添加常用聯(lián)系人,找到聯(lián)系人點(diǎn)擊即可打通聯(lián)系人的電話。5. 計(jì)算器:可以實(shí)現(xiàn)簡(jiǎn)單的計(jì)算功能。6. 日歷:實(shí)現(xiàn)日歷日期的查詢功能。7. 關(guān)于:關(guān)于生活助手的基本信息,例如版本號(hào)1.2系統(tǒng)模型系統(tǒng)模塊劃分如下:進(jìn)行計(jì)算查詢天氣查詢快遞撥打電話刪除聯(lián)系人添加聯(lián)系人有關(guān)信息查詢?nèi)掌诳爝f查詢通訊錄計(jì)算器日

7、歷記事本刪除記事查看記事修改記事新建記事關(guān)于天氣查詢生活助手3天氣預(yù)報(bào)設(shè)計(jì)說明3.1程序描述主界面中點(diǎn)擊天氣查詢按鈕進(jìn)入天氣查詢界面,因?yàn)椴樵儷@取天氣數(shù)據(jù)是耗時(shí)的操作,所以都放在非UI線程中進(jìn)行,通過發(fā)送消息實(shí)現(xiàn)天氣的查詢?;驹O(shè)計(jì)思路如下:1、檢查網(wǎng)絡(luò)連接狀態(tài)。由于是涉及到網(wǎng)絡(luò)的操作,所有應(yīng)該首先想到檢查網(wǎng)絡(luò)狀態(tài)。如果沒有可用的網(wǎng)絡(luò),將用Toast提示用戶,如果網(wǎng)絡(luò)沒有問題,將進(jìn)行下面操作。2、編輯輸入框內(nèi)容,隱藏軟鍵盤。在查詢框中輸入要查詢的城市,點(diǎn)擊確定,程序?qū)⒄{(diào)用隱藏手機(jī)軟鍵盤的方法hideSoftInputFromInputMethod(token,flags),以便于顯示查詢的天氣

8、信息。3、根據(jù)輸入的城市名字,匹配城市編碼接著運(yùn)行WeatherPullParser.getCityCode()方法,將輸入框中獲取的城市名稱傳入進(jìn)去,進(jìn)行Pull解析,進(jìn)行解析assets文件下的”weather_city_list.xml”文件,返回查詢城市的code,當(dāng)返回”error”的時(shí)候說明查詢的城市有誤,彈出提示錯(cuò)誤的Toast。4、查詢天氣信息此時(shí)已經(jīng)是在網(wǎng)絡(luò)連接良好的狀態(tài)下,所以說如果獲取到正確的城市code值后,就可以調(diào)用WeatherNetUtil.getWeatherInfo(String cityCode)方法,到網(wǎng)絡(luò)中獲取code對(duì)應(yīng)城市的天氣信息,由于這時(shí)的返回的

9、天氣信息result是JSON字符串的形式,所以需要調(diào)用WeatherJsonPaser.getItems(String result)方法進(jìn)行JSON解析,又因?yàn)閺腤eb Service中的path =5、顯示天氣信息再使用Handler把獲取的天氣信息發(fā)送出去,主線程接收到信息后更改UI界面,顯示出今天的天氣情況。使用ListView將接下來幾天的信息用列表的形式簡(jiǎn)單顯示出來,使用SimpleAdapter為其適配,并對(duì)ListView的每個(gè)Item做監(jiān)聽,當(dāng)點(diǎn)擊Item后,會(huì)將其對(duì)應(yīng)的信息顯示當(dāng)主顯示界面,點(diǎn)擊主顯示界面講跳轉(zhuǎn)到一個(gè)顯示詳情的Activity,顯示所有相關(guān)信息。3.1.1

10、類/*實(shí)現(xiàn)類操作的工具類*/public class WeatherNetUtil public static boolean getNetState(Context context)ConnectivityManager manager=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);/獲得網(wǎng)絡(luò)狀態(tài)NetworkInfo netInfo=manager.getActiveNetworkInfo();if(netInfo=null)/網(wǎng)絡(luò)無法連接return false;elseif(ne

11、tInfo.isAvailable()return true;return false;/* * 根據(jù)獲得的城市編碼進(jìn)行查詢天氣,返回查到的數(shù)據(jù) */public static String getWeather(String cityCode)String path=path=path+cityCode+.html;InputStream is;StringBuffer buffer=new StringBuffer();URL url;try url = new URL(path);HttpURLConnection conn=(HttpURLConnection) url.openCon

12、nection();conn.setRequestMethod(GET);conn.setConnectTimeout(5000);conn.setReadTimeout(5000);conn.connect();if(conn.getResponseCode()=200)/連接上了is=conn.getInputStream();BufferedReader br=new BufferedReader(new InputStreamReader(is);String line=null;while(line=br.readLine()!=null)buffer.append(line);is

13、.close();conn.disconnect();return buffer.toString(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();return error;/解析最新天氣信息,存入Map集合中public static ListMap getTodayWeather(String weather)ListMap list=new ArrayListMap();Map map=new HashMap();JSONObject json;try json = new JSONO

14、bject(weather);JSONObject json1=json.getJSONObject(weatherinfo);Calendar calendar=Calendar.getInstance();Date date= calendar.getTime();SimpleDateFormat sdf=new SimpleDateFormat(yyyy年MM月dd日);String city=json1.getString(city);String temp1=json1.getString(temp1);String temp2=json1.getString(temp2);Stri

15、ng weather1=json1.getString(weather);String img1=json1.getString(img1);String img2=json1.getString(img2);String img1_sub=img1.substring(1, img1.length()-4);Log.d(Tag, img1_sub);String img2_sub=img2.substring(1,img2.length()-4);Log.d(Tag, img2_sub);String date_y=sdf.format(date);int img0=getPicture(i

16、mg1_sub);map.put(city,city);map.put(temp, temp2+temp1);map.put(weather, weather1);map.put(img1,img1);map.put(img2,img2);map.put(img1_sub,img1_sub);map.put(img2_sub,img2_sub);map.put(date, date_y);map.put(img0, img0);list.add(map); catch (JSONException e) / TODO Auto-generated catch blocke.printStack

17、Trace();return list;/* * 根據(jù)獲得的圖標(biāo)號(hào),獲得相應(yīng)的圖片 */public static int getPicture(String pic)int im=Integer.parseInt(pic);int img=0;switch(im)case 0:img=R.drawable.a0;break;case 1:img=R.drawable.a1;break;case 2:img=R.drawable.a2;break;case 3:img=R.drawable.a3;break;case 4:img=R.drawable.a4;break;case 5:img=R

18、.drawable.a5;break;case 6:img=R.drawable.a6;break;case 7:img=R.drawable.a7;break;case 8:img=R.drawable.a8;break;case 9:img=R.drawable.a9;break;case 10:img=R.drawable.a10;break;case 11:img=R.drawable.a11;break;case 12:img=R.drawable.a12;break;case 13:img=R.drawable.a13;break;case 14:img=R.drawable.a1

19、4;break;case 15:img=R.drawable.a15;break;case 16:img=R.drawable.a16;break;case 17:img=R.drawable.a17;break;case 18:img=R.drawable.a18;break;case 19:img=R.drawable.a19;break;case 20:img=R.drawable.a20;break;case 21:img=R.drawable.a21;break;case 22:img=R.drawable.a22;break;case 23:img=R.drawable.a23;b

20、reak;case 24:img=R.drawable.a24;break;case 25:img=R.drawable.a25;break;case 26:img=R.drawable.a26;break;case 27:img=R.drawable.a27;break;case 28:img=R.drawable.a28;break;case 29:img=R.drawable.a29;break;case 30:img=R.drawable.a30;break;case 31:img=R.drawable.a31;break;default:break;return img;/* * 獲

21、得星期 */public static String getWeek(int i)String week=null;switch (i) case 1:week=星期日;break;case 2:week=星期一;break;case 3:week=星期二;break;case 4:week=星期三;break;case 5:week=星期四;break;case 6:week=星期五;break;case 7:week=星期六;break;default:break;return week;3.2功能實(shí)現(xiàn)功能如圖3.3性能本項(xiàng)目對(duì)精度,時(shí)間要求都不高。3.4輸入項(xiàng)輸入正確的城市名字3.5輸出

22、項(xiàng)輸出該城市當(dāng)天的天氣情況3.6接口該程序沒有使用數(shù)據(jù)庫.3.7注釋設(shè)計(jì)在模塊首部的添加類的功能注釋在各分枝點(diǎn)處添加詳細(xì)方法的注視在各變量的功能、范圍、缺省條件等添加注釋;3.8限制條件必須有網(wǎng)絡(luò)支持3.9尚未解決的問題沒有實(shí)現(xiàn)連續(xù)幾天的天氣情況4通訊錄設(shè)計(jì)說明4.1程序描述&流程邏輯通訊錄實(shí)現(xiàn)了存儲(chǔ)聯(lián)系人姓名和電話號(hào)碼,和長(zhǎng)按刪除該聯(lián)系人信息以及點(diǎn)擊撥打電話。和記事本類似涉及到了對(duì)數(shù)據(jù)庫的添加、查詢和刪除的功能,所以這里就不在描述,下面對(duì)實(shí)現(xiàn)的其他功能做闡述。4.1.1類/*調(diào)用數(shù)據(jù)庫的增刪改的方法來實(shí)現(xiàn)記事本內(nèi)容增刪改的方法*/public class ContactsSqlHelper

23、/* * 獲得聯(lián)系人列表 */public static ListMap getContactsInfo(Context c)/打開數(shù)據(jù)庫ContactsDB contactDB=new ContactsDB(c);SQLiteDatabase db=contactDB.getReadableDatabase();ListMap datalist=new ArrayListMap();Map map=new HashMap();String columns=new StringContactsDB.C_ID,ContactsDB.C_CONTACTS_NAME,ContactsDB.C_CON

24、TACTS_NUMBER;Cursor cursor=db.query(ContactsDB.TABLE_NAME, columns, null, null, null, null, null);if(cursor!=null)datalist.clear();for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()map=new HashMap();map.put(_id, cursor.getInt(cursor.getColumnIndex(_id)+);map.put(c_contacts_name, curs

25、or.getString(cursor.getColumnIndex(c_contacts_name);map.put(c_contacts_number, cursor.getString(cursor.getColumnIndex(c_contacts_number);datalist.add(map);cursor.close();db.close();return datalist;/* * 添加數(shù)據(jù) */public static long add(Context context,ContentValues values)ContactsDB contactsDB=new Conta

26、ctsDB(context);SQLiteDatabase db=contactsDB.getWritableDatabase();long count=db.insert(ContactsDB.TABLE_NAME, null, values);db.close();return count;/* * 刪除數(shù)據(jù) */public static int deleteContact(Context context,int id)ContactsDB contactsDB=new ContactsDB(context);SQLiteDatabase db=contactsDB.getWritabl

27、eDatabase();String whereClause=_id=+id;int count=db.delete(ContactsDB.TABLE_NAME, whereClause, null);db.close();return count;/* * 頁面重新啟動(dòng)時(shí),更新 */Overrideprotected void onRestart() datalist.clear();datalist.addAll(ContactsSqlHelper.getContactsInfo(ContactsActivity.this);myAdapter.notifyDataSetChanged()

28、;super.onRestart();/* * 單擊item中的任意一項(xiàng),進(jìn)行打電話 */public class MyOnItemClick implements OnItemClickListenerOverridepublic void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) String number=datalist.get(arg2).get(c_contacts_number);Uri uri=Uri.parse(tel:+number);Intent inCall=new Intent(Inten

29、t.ACTION_CALL,uri);startActivity(inCall);/* * 長(zhǎng)按刪除 */public class MyOnItemLongClick implements OnItemLongClickListenerprivate int index;Overridepublic boolean onItemLongClick(AdapterView arg0, View arg1,int arg2, long arg3) index = arg2;String contact=datalist.get(arg2).get(c_contacts_name);AlertDia

30、log.Builder builder=new Builder(ContactsActivity.this);builder.setTitle(刪除);builder.setIcon(R.drawable.ic_launcher);builder.setMessage(您確定要?jiǎng)h除+contact+?);builder.setPositiveButton(確定, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) String id=datali

31、st.get(index).get(_id);int inid=Integer.parseInt(id);int judge=ContactsSqlHelper.deleteContact(ContactsActivity.this, inid);if(judge0)Toast.makeText(ContactsActivity.this,刪除成功!, Toast.LENGTH_SHORT).show();datalist.remove(index);myAdapter.notifyDataSetChanged();elseToast.makeText(ContactsActivity.thi

32、s,刪除失?。? Toast.LENGTH_SHORT).show();).setNegativeButton(取消, null);builder.create();builder.show();return false;4.2功能實(shí)現(xiàn)功能如圖模擬器顯示圖,界面無,點(diǎn)擊menu才彈出添加按鈕4.3性能本項(xiàng)目對(duì)精度,時(shí)間要求都不高。4.4接口使用SQLiteDatabase對(duì)Android的內(nèi)部數(shù)據(jù)庫進(jìn)行操作,4.5注釋設(shè)計(jì)在模塊首部的添加類的功能注釋在各分枝點(diǎn)處添加詳細(xì)方法的注視在各變量的功能、范圍、缺省條件等添加注釋;4.6限制條件沒有限制條件4.7尚未解決的問題撥號(hào)撥打電話主界面沒有處理4

33、.8數(shù)據(jù)庫設(shè)計(jì)編號(hào)字段名類型描述1_idintegerPrimarykey,increment2c_contacts_nameVarchar(50)聯(lián)系人姓名3c_contacts_numberString(20)聯(lián)系人號(hào)碼5計(jì)算器設(shè)計(jì)說明5.1程序描述&流程邏輯計(jì)算機(jī)模塊核心內(nèi)容就是其加減乘除混合運(yùn)算的先后順序的算法問題,然后就是各種輸入判斷,達(dá)到輸入內(nèi)容符合正常計(jì)算器的邏輯,下面直接現(xiàn)看算法工具類。CalcUtil工具類中先創(chuàng)建2個(gè)數(shù)組,分別用于存放運(yùn)算符charcompute_sign,和存放算式中數(shù)的數(shù)組double number,生成一個(gè)字符串?dāng)?shù)組String datas = str

34、.split(+-);得到datas數(shù)組,數(shù)組中的元素2種情況,(1)是單純的數(shù)字,(2)是包含乘除的運(yùn)算。然后對(duì)數(shù)組進(jìn)行遍歷,如果數(shù)組元素中包含乘除運(yùn)算就跳轉(zhuǎn)到getCaculatorMD()方法中先進(jìn)行乘除運(yùn)算的處理,返回運(yùn)算后得到的數(shù)字,然后將數(shù)字轉(zhuǎn)成double類型便于接下來的運(yùn)算。下面看getCaculatorMD()方法的處理,將傳過來的乘除運(yùn)算組合按照運(yùn)算符拆分,得到的數(shù)字轉(zhuǎn)成double類型存入數(shù)組double number中。下面要獲取運(yùn)算符的數(shù)組,從傳過來的乘除運(yùn)算組合中提取乘除運(yùn)算符,然后放入compute_sign中,然后再用for循環(huán),求出這個(gè)乘除元算組合的結(jié)果。返回

35、去繼續(xù)下面的加減運(yùn)算,原理和乘除元算一樣,最終獲得該混合運(yùn)算的結(jié)果。接下來就是計(jì)算機(jī)的輸入顯示的邏輯判斷。不能連續(xù)輸入運(yùn)算符的判斷,以運(yùn)算符結(jié)尾按=時(shí)的處理,判斷是否是-開頭,如果是,前面添加一個(gè)0,實(shí)現(xiàn)負(fù)數(shù)功能,以.0結(jié)尾和以.結(jié)尾的去掉。點(diǎn)刪除按鈕使用String.substring(0,length-1);小數(shù)點(diǎn)的操作,用StringBuilder操作數(shù)字的操作,而不用String,防止占用過多的內(nèi)存。5.1.1類和方法public class CalculatorActivity extends Activity private Button mBtn_1;/ 按鍵1private B

36、utton mBtn_2;/ 按鍵2private Button mBtn_3;/ 按鍵3private Button mBtn_4;/ 按鍵4private Button mBtn_5;/ 按鍵5private Button mBtn_6;/ 按鍵6private Button mBtn_7;/ 按鍵7private Button mBtn_8;/ 按鍵8private Button mBtn_9;/ 按鍵9private Button mBtn_0;/ 按鍵0private Button mBtn_add;/ 按鍵+private Button mBtn_sub; / 按鍵-private

37、 Button mBtn_multiply; / 按鍵*private Button mBtn_divide;/ 按鍵除private Button mBtn_del;/ 刪除輸入的一個(gè)字符,鍵盤的DEL按鍵private Button mBtn_equals;/ 按鍵=private Button mBtn_point; / 按鍵.private Button mBtn_clean; / 將計(jì)算面板的所有控件清零鍵,即C鍵private EditText mEdt_play; / 顯示運(yùn)算過程private TextView mTv_result;/ 顯示結(jié)果private String m

38、Str_oper; / 運(yùn)算符,如+ - * private String mStr_result = ; / 暫存結(jié)果private StringBuffer mStr_display = new StringBuffer(); / 創(chuàng)建的StringBuffer對(duì)象,緩存輸入的字符串private char mStr_chr;/ 單個(gè)字符private double mValue;/ 運(yùn)算值/ 上下文。Context提供了關(guān)于應(yīng)用環(huán)境全局信息的接口。它允許獲取以應(yīng)用為特征的資源和類型。/ 同時(shí)啟動(dòng)應(yīng)用級(jí)的操作,如啟動(dòng)Activity,broadcasting和接收intents。priva

39、te Context mContext;/* * 找到面板上的按鍵 */private void findView() mBtn_0 = (Button) findViewById(R.id.btn_0);mBtn_1 = (Button) findViewById(R.id.btn_1);mBtn_2 = (Button) findViewById(R.id.btn_2);mBtn_3 = (Button) findViewById(R.id.btn_3);mBtn_4 = (Button) findViewById(R.id.btn_4);mBtn_5 = (Button) findVie

40、wById(R.id.btn_5);mBtn_6 = (Button) findViewById(R.id.btn_6);mBtn_7 = (Button) findViewById(R.id.btn_7);mBtn_8 = (Button) findViewById(R.id.btn_8);mBtn_9 = (Button) findViewById(R.id.btn_9);mBtn_add = (Button) findViewById(R.id.btn_add);mBtn_sub = (Button) findViewById(R.id.btn_sub);mBtn_multiply =

41、(Button) findViewById(R.id.btn_multiply);mBtn_divide = (Button) findViewById(R.id.btn_divide);mBtn_del = (Button) findViewById(R.id.btn_del);mBtn_equals = (Button) findViewById(R.id.btn_equal);mBtn_point = (Button) findViewById(R.id.btn_point);mBtn_clean = (Button) findViewById(R.id.btn_clear);mEdt_

42、play = (EditText) findViewById(R.id.et_calculator);mTv_result = (TextView) findViewById(R.id.tv_calculator);mEdt_play.setText();/ 顯示面板縱向第二行輸出空字符串Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.calculator);/ 展示當(dāng)前Activity的布局mContext

43、 = this;/ 啟動(dòng)應(yīng)用級(jí)操作findView();/ 找面板上控件/ 注冊(cè)計(jì)算器按鍵的OnClick監(jiān)聽事件BtnOnClick btn_OnClick = new BtnOnClick();mBtn_0.setOnClickListener(btn_OnClick);mBtn_1.setOnClickListener(btn_OnClick);mBtn_2.setOnClickListener(btn_OnClick);mBtn_3.setOnClickListener(btn_OnClick);mBtn_4.setOnClickListener(btn_OnClick);mBtn_5

44、.setOnClickListener(btn_OnClick);mBtn_6.setOnClickListener(btn_OnClick);mBtn_7.setOnClickListener(btn_OnClick);mBtn_8.setOnClickListener(btn_OnClick);mBtn_9.setOnClickListener(btn_OnClick);mBtn_add.setOnClickListener(btn_OnClick);mBtn_sub.setOnClickListener(btn_OnClick);mBtn_multiply.setOnClickListe

45、ner(btn_OnClick);mBtn_divide.setOnClickListener(btn_OnClick);mBtn_point.setOnClickListener(btn_OnClick);mBtn_equals.setOnClickListener(btn_OnClick);mBtn_clean.setOnClickListener(btn_OnClick);mBtn_del.setOnClickListener(btn_OnClick);/* * * 按鈕監(jiān)聽 * */class BtnOnClick implements OnClickListener Override

46、public void onClick(View v) if (mStr_display != null) / 判斷“=號(hào)時(shí)”判斷是否存在if (mStr_display.indexOf(=) != -1) mStr_display = new StringBuffer();/ 清空mStr_displaymStr_display.append(mValue);/ 賦運(yùn)算值if (mStr_display.toString().endsWith(.0) / mStr_display.delete()中傳入字符串最后兩位的偏移值參數(shù)可以刪掉最后兩位數(shù)點(diǎn)和零值,如3.0,執(zhí)行后變?yōu)?mStr_di

47、splay.delete(mStr_display.toString().length() - 2,mStr_display.toString().length();mEdt_play.setText(mStr_display.toString();/ 顯示面板縱向第二行輸出字符串/ 當(dāng)?shù)玫降膍Str_display中數(shù)據(jù)為無窮大,或者數(shù)據(jù)輸入錯(cuò)誤時(shí)if (mStr_display.toString().equals(mContext.getString(R.string.infinite)| mStr_display.toString().equals(mContext.getString(

48、R.string.wrong)| mStr_display.toString().equals(mContext.getString(R.string.minus_infinity) mStr_display = new StringBuffer();/ 清空mStr_displaymEdt_play.setText(mStr_display.toString();/清零switch (v.getId() / 數(shù)字鍵0單擊事件case R.id.btn_0:mStr_display.append(0);/ 顯示面板的輸入緩存在原值上加0mEdt_play.setText(mStr_display.toString();/

溫馨提示

  • 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)論