《移動(dòng)應(yīng)用開發(fā)》課程設(shè)計(jì)報(bào)告書_第1頁
《移動(dòng)應(yīng)用開發(fā)》課程設(shè)計(jì)報(bào)告書_第2頁
《移動(dòng)應(yīng)用開發(fā)》課程設(shè)計(jì)報(bào)告書_第3頁
《移動(dòng)應(yīng)用開發(fā)》課程設(shè)計(jì)報(bào)告書_第4頁
《移動(dòng)應(yīng)用開發(fā)》課程設(shè)計(jì)報(bào)告書_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

移動(dòng)應(yīng)用開發(fā)》課程設(shè)計(jì)報(bào)告學(xué)院名稱:計(jì)算機(jī)與信息工程學(xué)院班級(jí)名稱:計(jì)科對(duì)口14學(xué)生:胡聞璐學(xué)號(hào):題目:基于《個(gè)人理財(cái)通》的計(jì)算器任課教師名:起止日期:2017年04月18日至04月30日目錄TOC\o"1-5"\h\z移動(dòng)應(yīng)用開發(fā)》課程設(shè)計(jì)報(bào)告1摘要31項(xiàng)目需求分析31.1需求分析31.2功能需求32系統(tǒng)總體設(shè)計(jì)52.1系統(tǒng)架構(gòu)設(shè)計(jì)52.2系統(tǒng)功能體系53系統(tǒng)詳細(xì)設(shè)計(jì)63.1數(shù)據(jù)庫設(shè)計(jì)63.2系統(tǒng)界面設(shè)計(jì)73.3數(shù)據(jù)存儲(chǔ)設(shè)計(jì)133.4信息統(tǒng)計(jì)設(shè)計(jì)143.5地圖軌跡設(shè)計(jì)143.6服務(wù)應(yīng)用設(shè)計(jì)244系統(tǒng)編碼實(shí)現(xiàn)254.1框架引用254.2交互實(shí)現(xiàn)254.3單元測(cè)試285系統(tǒng)測(cè)試發(fā)布295.1手機(jī)環(huán)境的實(shí)測(cè)295.2APP的發(fā)布實(shí)測(cè)29參考文獻(xiàn)30成績(jī)?cè)u(píng)定31摘要隨著移動(dòng)終端的迅速普及,Android系統(tǒng)平臺(tái)引用軟件的需求隨之增大。伴隨著Android智能手機(jī)與平板電腦已經(jīng)出現(xiàn)在我們生活的大量的使用,越來越多的基于Android開發(fā)平臺(tái)也隨之而出,為豐富人們使用Android智能產(chǎn)品的用途,使其可以幫人們記錄一些事情。本設(shè)計(jì)開發(fā)通過研究Android體系結(jié)構(gòu)和個(gè)人理財(cái)管理方面的知識(shí),設(shè)計(jì)并實(shí)現(xiàn)了個(gè)人理財(cái)通系統(tǒng)。能夠?qū)碡?cái)信息進(jìn)行獲取、匯總、整理、計(jì)算等功能,從而實(shí)現(xiàn)隨身隨時(shí)隨地地進(jìn)行日常的理財(cái)活動(dòng)。1項(xiàng)目需求分析需求分析物質(zhì)和科技的飛速發(fā)展,人們的生活水平也不斷的在提高,往往有很多人在快節(jié)奏的生活中迷失和迷茫,很多人覺得自己沒錢,但每個(gè)月的工資也不是很低,卻往往不知道錢花在哪,為什么每到月底自己的錢包會(huì)空空如也,正因?yàn)檫@樣,人們才需要一款個(gè)人理財(cái)軟件,簡(jiǎn)單的界面,易懂的操作,十分便攜直觀的理財(cái)方式,可以讓人們更好的進(jìn)行個(gè)人理財(cái)。以下是本軟件的一些功能:登錄界面:初始登陸時(shí)沒有密碼,為了方便用戶保護(hù)隱私,可以自行設(shè)置密碼新增支出:添加支出金額、時(shí)間、類別和地點(diǎn)等信息新增收入:添加收入金額、時(shí)間、類別和付款方等信息數(shù)據(jù)管理:支出匯總,收入?yún)R總,便簽信息便簽功能:添加便簽,設(shè)置提醒或事項(xiàng)計(jì)算器:對(duì)數(shù)據(jù)進(jìn)行計(jì)算,方便記錄,長(zhǎng)按結(jié)果可直接復(fù)制移動(dòng)課堂:泛雅平臺(tái)中的安卓課程訪問幫助:對(duì)個(gè)人理財(cái)通各個(gè)功能部件的使用介紹退出:退出該系統(tǒng)功能需求目前國(guó)外理財(cái)軟件已有上百種之多,如美國(guó)的直覺公司QUICKEN軟件為美國(guó)13個(gè)州及加拿大的客戶提供金融管理和預(yù)算等財(cái)務(wù)問題。國(guó)在財(cái)務(wù)管理方面做的比較突出的當(dāng)屬金蝶公司。然而,在手機(jī)理財(cái)軟件方面做的很突出的還沒有,本軟件是針對(duì)個(gè)人用戶的一款A(yù)ndroid軟件,主要對(duì)個(gè)人理財(cái)收入、支出做一個(gè)記錄和統(tǒng)計(jì),可以對(duì)用戶的收入、支出記錄做添加、刪除、查詢和修改的管理,本軟件該具備以下功能:功能操作要方便、易懂、,不要有多余或復(fù)雜的操作。對(duì)用戶收入支出信息做添加、刪除、查詢和修改。系統(tǒng)的功能復(fù)合本人的實(shí)際情況。界面直觀簡(jiǎn)潔,方便用戶更好的使用。保證軟件的安全性。2系統(tǒng)總體設(shè)計(jì)2.1系統(tǒng)架構(gòu)設(shè)計(jì)圖2-1系統(tǒng)架構(gòu)圖2.2系統(tǒng)功能體系系統(tǒng)總體功能主要包括系統(tǒng)各功能模塊的詳細(xì)劃分和定義,以及各子功能模塊具體實(shí)現(xiàn)細(xì)節(jié),通過詳細(xì)劃分和定義細(xì)節(jié)可以將系統(tǒng)各功能進(jìn)行有效區(qū)分,防止功能重疊,功能冗余等現(xiàn)象,系統(tǒng)總體功能分析如表2-2所示.用戶功能具體描述新增支出用戶對(duì)新增支出財(cái)產(chǎn)進(jìn)行詳細(xì)的記錄新增收入在此處添加了計(jì)算器方便用戶對(duì)收入/支出財(cái)產(chǎn)進(jìn)行詳細(xì)記錄我的支出用戶對(duì)我的支出財(cái)產(chǎn)記錄進(jìn)行詳細(xì)的查詢我的收入用戶對(duì)我的收入財(cái)產(chǎn)進(jìn)行詳細(xì)的查詢數(shù)據(jù)管理用戶管理個(gè)人賬戶以及虛擬賬戶等系統(tǒng)設(shè)置對(duì)手機(jī)系統(tǒng)進(jìn)行規(guī)化設(shè)置收支便簽對(duì)財(cái)產(chǎn)的收支進(jìn)行記錄計(jì)算器對(duì)數(shù)據(jù)進(jìn)行計(jì)算,可以長(zhǎng)按結(jié)果進(jìn)行復(fù)制移動(dòng)課堂學(xué)習(xí)泛亞平臺(tái)中的安卓課程3系統(tǒng)詳細(xì)設(shè)計(jì)3.1數(shù)據(jù)庫設(shè)計(jì)1)數(shù)據(jù)類型簡(jiǎn)要規(guī)則程序中需要定義常量,變量,這些需要指定的類型。下面介紹常見的數(shù)據(jù)庫類型,如表3-1所示。數(shù)據(jù)類型簡(jiǎn)寫整形int字符型str布爾型bl單精度浮點(diǎn)型flt雙精度浮點(diǎn)型dbl表3-1數(shù)據(jù)類型簡(jiǎn)要規(guī)則(2)組件命名規(guī)則所有的組件對(duì)象名稱的拼音簡(jiǎn)寫,如果發(fā)現(xiàn)沖突可采用不同的簡(jiǎn)寫規(guī)則。組件命名如表3-2所示??丶s寫形式EditTexttxtButtonbtnSpinnerspListViewlv表3-2組件命名規(guī)則個(gè)人理財(cái)通是一款運(yùn)行在Android系統(tǒng)上的程序,在Android系統(tǒng)中,集成了一種輕量型的數(shù)據(jù)庫,即SQLite,該數(shù)據(jù)庫是使用C語言編寫的開源嵌入式數(shù)據(jù)庫,支持的數(shù)據(jù)庫大小為2TB,使用該數(shù)據(jù)庫,用戶可以像使用SQLServer數(shù)據(jù)庫或者Oracle數(shù)據(jù)庫那樣來存儲(chǔ)、管理和維護(hù)數(shù)據(jù),本系統(tǒng)采用了SQLite數(shù)據(jù)庫,并且命名為account.db,,該數(shù)據(jù)庫中用到了4個(gè)數(shù)據(jù)表,分別是tb_flag、tb_inaccount、tb_outaccount和tb_pwd。3.2系統(tǒng)界面設(shè)計(jì)i啟動(dòng)界面:清新簡(jiǎn)潔的啟動(dòng)界面,標(biāo)識(shí)著個(gè)人理財(cái)通和開發(fā)者微博,提升整體軟件美觀程度,如圖3-1所示。愀箱:我點(diǎn)是命旳同誕呀、圖3-12?用戶登錄:首次登錄不需要密碼,進(jìn)去后可在系統(tǒng)設(shè)置里設(shè)置密碼。由于本軟件屬于個(gè)人客戶端,通常情況下只有本人使用,所以沒有用戶名,直接進(jìn)入密碼輸入環(huán)節(jié),便于保護(hù)用戶隱私,如圖3-2所示。圖3-23?用戶登入后進(jìn)入軟件的主界面,主界面包括軟件的所有功能圖標(biāo),用戶可根據(jù)需要使用,如圖3-3所示。收點(diǎn)鑲茗槪密請(qǐng)空鶴他匱出收點(diǎn)鑲茗槪密請(qǐng)空鶴他匱出圖3-34.計(jì)算器:基本的加減乘除,可以方便用戶對(duì)金額進(jìn)行計(jì)算,從而方便記錄,在本計(jì)算機(jī)中計(jì)算的結(jié)果,可以長(zhǎng)按結(jié)果進(jìn)行復(fù)制,從而到收入支出頁面進(jìn)行快捷的粘貼,如圖3-4、3-5所示。CDELCDEL?89?LQS6+1230■CDEL亍★789-a56+!230圖3-5圖圖3-55?新增支出:此模塊的功能是添加用戶的新增支出。同樣新增支出可以選擇金額、時(shí)間、類別、地點(diǎn)和備注。類別可以選擇餐費(fèi)、應(yīng)酬、禮金、車費(fèi)以及其他,長(zhǎng)按金額后面的填寫框可以快捷復(fù)制計(jì)算器的計(jì)算結(jié)果,如圖3-6、3-7所示。注:地新增支出57920r?-5-l2注:地新增支出57920r?-5-l2圖3-7圖圖3-76?新增收入:此模塊的功能是添加用戶新增的收入。在平時(shí)理財(cái)?shù)倪^程中,添加收入記錄是很頻繁操作,所以此模塊為用戶提供了一個(gè)非常實(shí)用而且便捷的操作過程。在這個(gè)模塊中,用戶可以添加收入信息記錄的容包括:金額、時(shí)間、類別、付款方以及備注。為了用戶能夠方便的查看收入記錄,故將收入類別進(jìn)行了分類,具體分為五類,分別為工資、兼職、分紅、獎(jiǎng)金、其他,長(zhǎng)按金額后面的填寫框可以快捷復(fù)制計(jì)算器的計(jì)算結(jié)果,如圖3-8、3-9所示。魯G魯G即舉田<*f7:QB跑%*事聲比帕*-17^134"t9昭1曲1曲金|qloo"o-J7--5-r£5?|):工薛J忖蹴右:注:新增收入金報(bào):5?^時(shí)[B);2Q17-5-12龍刖:工羽&3tifld-:fld-:圖3-8圖3-97.我的支出、我的收入:當(dāng)在新增收入模塊進(jìn)行了添加操作后,添加的收入記錄就會(huì)顯示在模塊中。在這兩個(gè)界面中可以清楚的看到所有的記錄,如圖3-10、3-11所示。圖3-10圖3-118?數(shù)據(jù)管理:對(duì)于家庭理財(cái)系統(tǒng)來說,數(shù)據(jù)管理功能是非常重要的一個(gè)功能,它主要是管理支出、收入以及便簽的記錄信息,如圖3-12所示。圖3-129?系統(tǒng)設(shè)置:讓用戶來設(shè)置密碼。密碼設(shè)置成功后,用戶再次登錄時(shí)就需要所設(shè)置的密碼,如圖3-13所示。如圖3-13所示。"i-imm理此■■■i7:a^請(qǐng)鎬入密碼:儒將入密筠圖3-1310?新增便簽,主要實(shí)現(xiàn)添加便簽記錄。便簽?zāi)K可以記錄將要進(jìn)行的收入或支出信息,也就是相當(dāng)于備忘錄的功能,如圖3-14所示。圖3-14移動(dòng)課堂:泛雅平臺(tái)的移動(dòng)應(yīng)用開發(fā)學(xué)習(xí)界面,用戶可以在這里學(xué)習(xí)安卓有關(guān)知識(shí),如圖3-15所示。H心喜加■?…■0?*合鈾僭■璐殉動(dòng)裸堂岬*K■甲鬲11■^41*P固■1iivr*|jIC-SHQ^??-廿戸.Id.pM"T"W??圖3-15幫助:《個(gè)人理財(cái)通》使用幫助,用于解決在系統(tǒng)中遇到的問題,如圖3-16所示。E于人理期適;,性用購(gòu)助.*樓克密田:選擇凜統(tǒng)設(shè)盤■撲塊可以棒改皙錄密鉛,項(xiàng)目詛行陀」BtJlS有杳?蠱岀WEB:迭癢凈増夷出?揆快可氐游帕支出伯息;遠(yuǎn)挎“北的支出“嘎垠可以直看、假茂或和除玄出怙息**WtAfi理:選擇噺塔收人■缺可IO血收人庶息;述捽■我的收人“烘垠可以魚看■修菽或曲隱收人'便賽譽(yù)理:選擇“收支便筈■櫻塊可以涵M便淫佗息;述揮“坯據(jù)它理"貫境中樣怏超代息■按超可収直fi、偉占或刪躡愷蘭佶息"?退出垂統(tǒng):這艸“退出糕扶可収退出戌『人色財(cái)逋*項(xiàng)目。圖3-16退出:用戶點(diǎn)擊退出圖標(biāo)后回到登錄界面。3.3數(shù)據(jù)存儲(chǔ)設(shè)計(jì).chzu.xxy.sp15.dao;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;publicclassDBOpenHelperextendsSQLiteOpenHelper{privatestaticfinalintVERSION=1;//定義數(shù)據(jù)庫版本號(hào)privatestaticfinalStringDBNAME="account.db";//定義數(shù)據(jù)庫名publicDBOpenHelper(Contextcontext){//定義構(gòu)造函數(shù)super(context,DBNAME,null,VERSION);//重寫基類的構(gòu)造函數(shù)}OverridepublicvoidonCreate(SQLiteDatabasedb){//創(chuàng)建數(shù)據(jù)庫db.execSQL("createtabletb_outaccount(_idintegerprimarykey,moneydecimal,timevarchar(10),"+"typevarchar(10),addressvarchar(100),markvarchar(200))");//創(chuàng)建支出信息表db.execSQL("createtabletb_inaccount(_idintegerprimarykey,moneydecimal,timevarchar(10),"+"typevarchar(10),handlervarchar(100),markvarchar(200))");//創(chuàng)建收入信息表db.execSQL("createtabletb_pwd(passwordvarchar(20))");//創(chuàng)建密碼表db.execSQL("createtabletb_flag(_idintegerprimarykey,flagvarchar(200))");//創(chuàng)建便簽信息表}OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){//覆寫基類的onUpgrade方法,以便數(shù)據(jù)庫版本更新}

3.4信息統(tǒng)計(jì)設(shè)計(jì)當(dāng)點(diǎn)擊支出匯總、收入?yún)R總或便簽信息時(shí),下方就會(huì)出現(xiàn)所有的支出、收入或便簽信息。如圖3-17、3-18所示?!鯢AffWIiniKttrtflILL■FAffWIiniKttrtflILLXIM*圖3-17圖3-183.5地圖軌跡設(shè)計(jì).chzu.xxy.sp15.hwl;/***計(jì)算器項(xiàng)目*/importandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewTreeObserver;importandroid.view.ViewTreeObserver.OnGlobalLayoutListener;importandroid.widget.Button;importandroid.widget.GridLayout;importandroid.widget.GridLayout.LayoutParams;importandroid.widget.TextView;importandroid.widget.Toast;publicclassCalculatorextendsActivity{privatestaticfinalbooleanisDebug=true;//判斷項(xiàng)目是否處于debug調(diào)試模式,控制是否打印log//char用來進(jìn)行判斷用privatestaticfinalcharCJia='+';privatestaticfinalcharCJian='-';privatestaticfinalcharCCheng='*';privatestaticfinalcharCChu='^';//String用來進(jìn)行顯示用privatestaticfinalStringSJia="+";privatestaticfinalStringSJian="-";privatestaticfinalStringSCheng="*";privatestaticfinalStringSChu="三";privateTextViewtextView;privateButtonmCopy;//複製按鈕privatebooleanisTextViewInputted=false;//判斷textView是否有輸入,用來判斷0按鈕的功能//privateButtonbtn_c,btn_del;//C、DEL//privateButtonbtn_jia,btn_jian,btn_chu,btn_cheng;〃+、-、x、三//privateButtonbtn_dian,btn_dengyu;//.,=//privateButtonbtn_0,btn_1,btn_2,btn_3,btn_4;//0,1,2,3,4//privateButtonbtn_5,btn_6,btn_7,btn_8,btn_9;〃5,6,7,8,900protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_calculator);//布局//動(dòng)態(tài)的設(shè)置Gridlayout中控件的寬度,使其全屏匹配屏幕GridLayoutgridlayout=(GridLayout)findViewById(R.id.gridlayout_c);ViewTreeObservervto=gridlayout.getViewTreeObserver();vto.addOnGlobalLayoutListener(newOnGlobalLayoutListener(){publicvoidonGlobalLayout(){GridLayoutgl=(GridLayout)findViewById(R.id.gridlayout_c);fillview(gl);ViewTreeObserverobs=gl.getViewTreeObserver();obs.removeGlobalOnLayoutListener(this);}});//獲得每個(gè)按鈕的點(diǎn)擊事件initViews();}//為每個(gè)Button設(shè)置了onClick屬性publicvoidonClick(Viewview){switch(view.getId()){//0-9caseR.id.btn_0:button0Function();break;caseR.id.btn_1:button1Function();break;caseR.id.btn_2:button2Function();break;caseR.id.btn_3:button3Function();break;caseR.id.btn_4:button4Function();break;caseR.id.btn_5:button5Function();break;caseR.id.btn_6:button6Function();break;

caseR.id.btn_7:button7Function();break;caseR.id.btn_8:button8Function();break;caseR.id.btn_9:button9Function();break;caseR.id.btn_dian:buttonDianFunction();break;//CcaseR.id.btn_c:buttonClear();break;//DELcaseR.id.btn_del:buttonDel();break;//+caseR.id.btn_jia:buttonJiaYunSuanFunction();break;//-caseR.id.btn_jian:buttonJianYunSuanFunction();break;//XcaseR.id.btn_cheng:buttonChengYunSuanFunction();break;//三caseR.id.btn_chu:buttonChuYunSuanFunction();break;//=caseR.id.btn_dengyu:buttonDengYuFunction();break;default:Buttonb=(Button)view;Toast.makeText(this,b.getText(),Toast.LENGTH_SHORT).show();break;}}*/*//*===============*/*//*private私有方法*//*===============privatevoidfillview(GridLayoutgl){Buttonbuttontemp;GridLayout.LayoutParamsparams;for(inti=0;i<gl.getChildCount();i++){buttontemp=(Button)gl.getChildAt(i);params=(LayoutParams)buttontemp.getLayoutParams();params.width=(gl.getWidth()/gl.getColumnCount())-params.rightMargin-params.leftMargin;buttontemp.setLayoutParams(params);//初始化所有的控件privatevoidinitViews(){textView=(TextView)findViewById(R.id.calculate_textview);mCopy=(Button)findViewById(R.id.fz);mCopy.setOnClickListener(newOnClickListener(){OverridepublicvoidonClick(Viewv){//TODO自動(dòng)生成的方法存根if(textView.getText().toString().equals("")){Toast.makeText(Calculator.this,"結(jié)果為空",Toast.LENGTH_SHORT).show();return;}}});}privatevoidprintDebugInfo(Stringstr){if(isDebug){Log.i("TAG","Debug:"+str);}}//往Textv的尾部追加容privatevoidappendTextView(Stringstr){CharSequencetext=textView.getText();text=text+str;printDebugInfo(text.toString());textView.setText(text);//添加數(shù)字按鈕的功能start===========================//對(duì)于0的輸入的注意點(diǎn)://1、當(dāng)還沒有輸入時(shí),就是textview顯示為0時(shí),什么都不用做,繼續(xù)保持為0//2、當(dāng)textview的顯示不為0時(shí),在textview的尾部追加一個(gè)0//問題:判斷條件怎樣來確定。有兩個(gè)方案〃1、獲取textview的容,一然后調(diào)用比較的方法,是否和0相等一//2、設(shè)置一個(gè)Boolean標(biāo)記,當(dāng)textview第一次輸入不為0時(shí),將標(biāo)記設(shè)為true,然后根據(jù)標(biāo)記來進(jìn)行0按鈕的功能實(shí)現(xiàn)//對(duì)比:方案一有點(diǎn)簡(jiǎn)單,缺點(diǎn)相對(duì)來說耗性能。每次都要讀取textview的值然后進(jìn)行比較;方案二有點(diǎn)性能上比第一個(gè)高,但是控制條件比第一個(gè)復(fù)雜//0按鈕的功能privatevoidbutton0Function(){if(isTextViewInputted&&!textView.getText().toString().equals("0")){//條件成立,textview的值不是0appendTextView("0");}elseif(!textView.getText().toString().equals("0")){textView.setText("0");//當(dāng)有運(yùn)算操作后,isTextViewInputted為false時(shí),需要把textView設(shè)置為0}}//如果已經(jīng)有輸入了,則在textview尾部追加一,是第一次輸入則將textview顯示改為1.此規(guī)則同樣適用于其他數(shù)字按鈕//1按鈕的功能privatevoidbutton1Function(){if(isTextViewInputted){appendTextView("1");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("1");}}//2按鈕的功能privatevoidbutton2Function(){if(isTextViewInputted){appendTextView("2");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("2");}}//3按鈕的功能privatevoidbutton3Function(){if(isTextViewInputted){appendTextView("3");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("3");}}//4按鈕的功能privatevoidbutton4Function(){if(isTextViewInputted){appendTextView("4");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("4");}}//5按鈕的功能privatevoidbutton5Function(){if(isTextViewInputted){appendTextView("5");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("5");}}//6按鈕的功能privatevoidbutton6Function(){if(isTextViewInputted){appendTextView("6");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("6");}}//7按鈕的功能privatevoidbutton7Function(){if(isTextViewInputted){appendTextView("7");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("7");}}//8按鈕的功能privatevoidbutton8Function(){if(isTextViewInputted){appendTextView("8");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("8");}}//9按鈕的功能privatevoidbutton9Function(){if(isTextViewInputted){appendTextView("9");}else{//第一次進(jìn)行輸入isTextViewInputted=true;textView.setText("9");}}//添加數(shù)字按鈕的功能end===========================//功能四的代碼start=========================//C按鈕的功能,清除屏幕使其顯示0,并且改變輸入狀態(tài)是未輸入privatevoidbuttonClear(){if(isTextViewInputted){isTextViewInputted=false;textView.setText("0");}elseif(!textView.getText().toString().equals("0")){textView.setText("0");}//DEL按鈕的功能,當(dāng)有輸入時(shí),每次點(diǎn)擊刪除最后一位字符。當(dāng)只有一個(gè)字符時(shí),將顯示變成0,并且改變輸入狀態(tài)為未輸入privatevoidbuttonDel(){if(isTextViewInputted){CharSequencetext=textView.getText();intlength=text.length();if(length>1){if(length==2){//如果在只有2個(gè)字符并且第一個(gè)還為0的情況,這時(shí)候如果再刪除最后一位時(shí)只剩下一個(gè)0,所以輸入狀態(tài)要改為falsecharc=text.charAt(0);if(c=='0'){isTextViewInputted=false;}}text=text.subSequence(0,length-1);//截取前面部分的容,上網(wǎng)搜索CharSequence和subSequence()方法textView.setText(text);printDebugInfo(textView.getText().toString());}else{buttonClear();//調(diào)用清除功能}}elseif(!textView.getText().toString().equals("0")){textView.setText("0");}}//功能四的代碼end=========================//運(yùn)算符號(hào)添加原則://1、如果textview的最后一個(gè)字符不是運(yùn)算符,則直接在末尾添加,并且修改輸入狀態(tài)為true,激活0和DEL按鈕的功能//2、如果最后一個(gè)字符是運(yùn)算符時(shí),替換最后一個(gè)字符為當(dāng)前點(diǎn)擊的運(yùn)行符//運(yùn)算符號(hào)start========================//+按鈕功能privatevoidbuttonJiaYunSuanFunction(){if(isTextViewInputted){CharSequencetext=textView.getText();intlength=text.length();charc=text.charAt(length-1);if(c==CJia){printDebugInfo("已經(jīng)是+號(hào)運(yùn)算符了");return;}elseif(c==CJian||c==CCheng||c==CChu){text=text.subSequence(0,length-1)+SJia;textView.setText(text);}else{appendTextView(SJia);}}else{isTextViewInputted=true;}}}}appendTextView(SJia);//-按鈕功能privatevoidbuttonJianYunSuanFunction(){if(isTextViewInputted){CharSequencetext=textView.getText();intlength=text.length();charc=text.charAt(length-1);if(c==CJian){printDebugInfo("已經(jīng)是-號(hào)運(yùn)算符了");return;}elseif(c==CJia||c==CCheng||c==CChu){text=text.subSequence(0,length-1)+SJian;textView.setText(text);}else{appendTextView(SJian);}}else{isTextViewInputted=true;appendTextView(SJian);}}//X按鈕功能privatevoidbuttonChengYunSuanFunction(){if(isTextViewInputted){CharSequencetext=textView.getText();intlength=text.length();charc=text.charAt(length-1);if(c==CCheng){printDebugInfo("已經(jīng)是X號(hào)運(yùn)算符了");return;}elseif(c==CJia||c==CJian||c==CChu){text=text.subSequence(0,length-1)+SCheng;textView.setText(text);}else{appendTextView(SCheng);}}else{isTextViewInputted=true;appendTextView(SCheng);}}//三按鈕功能privatevoidbuttonChuYunSuanFunction(){if(isTextViewInputted){CharSequencetext=textView.getText();intlength=text.length();charc=text.charAt(length-1);if(c==CChu){printDebugInfo("已經(jīng)是三號(hào)運(yùn)算符了");return;}elseif(c==CJia||c==CJian||c==CCheng){text=text.subSequence(0,length-1)+SChu;textView.setText(text);}else{appendTextView(SChu);}}else{isTextViewInputted=true;appendTextView(SChu);}}//點(diǎn).按鈕的功能//出現(xiàn)的條件是只有在isTextViewInputted為true或者只是0時(shí)才有用privatevoidbuttonDianFunction(){if(isTextViewInputted){appendTextView(".");}}}elseif(textView.getText().toString().equals("0")){appendTextView(".");isTextViewInputted=true;號(hào)endMr口}}//運(yùn)算符//=按鈕的功能start==============================//=按鈕的功能比較復(fù)雜,重新規(guī)劃了一下進(jìn)度說明和進(jìn)度任務(wù)//本按鈕的實(shí)現(xiàn)需要運(yùn)用java中號(hào)endMr口//使用String類split的方法,可以根據(jù)四則運(yùn)算符去吧字符串分成幾段,最終是把數(shù)字和運(yùn)算符分離,//把數(shù)字字符串轉(zhuǎn)化為基本數(shù)據(jù)類型根據(jù)運(yùn)算符進(jìn)行計(jì)算//實(shí)現(xiàn)步驟://目前先做兩個(gè)數(shù)的運(yùn)行,并且只考慮輸入正確的情況,其他條件的判斷以后進(jìn)行//1、先創(chuàng)建4個(gè)方法,對(duì)應(yīng)四則運(yùn)算中的加,減,乘,除;(在寫完加法算法進(jìn)行測(cè)試時(shí),我們發(fā)現(xiàn)當(dāng)運(yùn)算完第一次后,我點(diǎn)擊其他數(shù)字按鈕時(shí),textView顯示正常,此時(shí)顯示我們剛才點(diǎn)擊的按鈕的數(shù)字,但是我們//點(diǎn)擊0時(shí)發(fā)現(xiàn)數(shù)據(jù)顯示的還是之前運(yùn)算的結(jié)果,所以這時(shí)需要在buttonOFunction方法中加一個(gè)條件判斷,使得這個(gè)時(shí)候點(diǎn)擊0時(shí)可以他textView顯示為0)(同樣的C和DEL也需要處理這個(gè)情況)丫2、分析textview的字符串容,獲取數(shù)字和運(yùn)算符,進(jìn)行運(yùn)算得出結(jié)果,更改textview的顯示//3、當(dāng)進(jìn)行一次等于操作的時(shí)候,將textview的輸入狀態(tài)改為false。結(jié)束了一次運(yùn)算。privatevoidbuttonDengYuFunction(){Stringtext=textView.getText().toString();if(text.contains(SJia)||text.contains(SJian)if(text.contains(SJia)||text.contains(SJian)isTextViewInputted=false;||text.contains(SCheng)||isTextViewInputted=false;onlyOneOperator(text);//只有一種運(yùn)算符的情況}}privatevoidonlyOneOperator(Stringtext){booleanisFisrtWeiFu=false;//判斷第一個(gè)是否為負(fù)數(shù)//左起第一個(gè)數(shù)為負(fù)數(shù)時(shí)if(text.startsWith("-")){text=text.substring(1);//把第一個(gè)-去掉isFisrtWeiFu=true;/}/只有一個(gè)運(yùn)算符的情況,并且如果只有一個(gè)數(shù)字加上任一一個(gè)運(yùn)算符,結(jié)果還是數(shù)字本身。不進(jìn)行操作booleanisInteger=true;//用來判斷是否全部是int數(shù)據(jù),//+if(text.contains(SJia)){String[]arr=text.split("[+]");//四則運(yùn)行中一些特殊符號(hào)需要處理一下,需要理解split()方法intlength=arr.length;float[]arrFlaotNumber=newfloat[length];for(inti=0;i<length;i++){if(arr[i].contains(".")){isInteger=false;}}}if(isInteger){//全部是int類型則使用整數(shù)的方法,將float數(shù)據(jù)強(qiáng)轉(zhuǎn)intarrFlaotNumber[i]=}}if(isInteger){//全部是int類型則使用整數(shù)的方法,將float數(shù)據(jù)強(qiáng)轉(zhuǎn)intint[]arrIntNumber=newint[length];for(inti=0;i<length;i++){arrIntNumber[i]=(int)arrFlaotNumber[i];}textView.setText(jiaFa(arrIntNumber)+"");}else{textView.setText(jiaFa(arrFlaotNumber)+"");}}//-elseif(text.contains(SJian)){String[]arr=text.split("[-]");intlength=arr.length;float[]arrFlaotNumber=newfloat[length];for(inti=0;ifloat[]arrFlaotNumber=newfloat[length];for(inti=0;i<length;i++){if(arr[i].contains(".")){isInteger=false;}arrFlaotNumber[i]=Float.parseFloat(arr[i]);if(0==i&&isFisrtWeiFu){arrFlaotNumber[i]=-arrFlaotNumber[i];}}if(isInteger){//如果全部是int類型則使用整數(shù)的方法int[]arrIntNumber=newint[length];for(inti=0;i<length;i++){arrIntNumber[i]=(int)arrFlaotNumber[i];}textView.setText(jianFa(arrIntNumber)+"");}else{textView.setText(jianFa(arrFlaotNumber)+"");}}elseif(text.contains(SCheng)){String[]arr=text.split("[*]");intlength=arr.length;float[]arrFlaotNumber=newfloat[length];for(inti=0;i<length;i++){if(arr[i].contains(".")){isInteger=false;}arrFlaotNumber[i]=Float.parseFloat(arr[i]);if(0==i&&isFisrtWeiFu){arrFlaotNumber[i]=-arrFlaotNumber[i];}}if(isInteger){//如果全部是int類型則使用整數(shù)的方法int[]arrIntNumber=newint[length];for(inti=0;i<length;i++){arrIntNumber[i]=(int)arrFlaotNumber[i];}textView.setText(chengFa(arrIntNumber)+"");}else{textView.setText(chengFa(arrFlaotNumber)+"");}}//—elseif(text.contains(SChu)){String]]arr=text.split("[F]");intlength=arr.length;float[]arrFlaotNumber=newfloat[length];for(inti=0;i<length;i++){if(arr[i].contains(".")){isInteger=false;}arrFlaotNumber[i]=Float.parseFloat(arr[i]);if(0==i&&isFisrtWeiFu){arrFlaotNumber[i]=-arrFlaotNumber[i];if(isInteger){//如果全部是int類型則使用整數(shù)的方法int[]arrIntNumber=newint[length];for(inti=0;i<length;i++){arrIntNumber[i]=(int)arrFlaotNumber[i];}textView.setText(chuFa(arrIntNumber)+"");}else{textView.setText(chuFa(arrFlaotNumber)+"");}}}}//兩個(gè)數(shù)的加法privateintjiaFa(int[]a){intresult=0;for(inti=0,length=a.length;i<length;i++){result+=a[i];}returnresult;/}/兩個(gè)數(shù)的減法privateintjianFa(int[]a){intresult=a[0];for(inti=1,length=a.length;i<length;i++){result-=a[i];}returnresult;//兩個(gè)數(shù)的乘法privateintchengFa(int[]a){intresult=a[0];for(inti=1,length=a.length;i<length;i++){result*=a[i];}returnresult;/}/兩個(gè)數(shù)的除法privateintchuFa(int[]a){intresult=a[0];for(inti=1,length=a.length;i<length;i++){if(a[i]==0){returnresult;}result/=a[i];}returnresult;//進(jìn)度10小數(shù)的計(jì)算,當(dāng)數(shù)字中出現(xiàn)小數(shù)時(shí),不想使用float類型來進(jìn)行計(jì)算,提供了方法的重載//兩個(gè)數(shù)的加法privatefloatjiaFa(float[]a){floatresult=0;for(inti=0,length=a.length;i<length;i++){result+=a[i];}returnresult;/}/兩個(gè)數(shù)的減法privatefloatjianFa(float[]a){floatresult=a[0];for(inti=1,length=a.length;i<length;i++){result-=a[i];}returnresult;}}}}//兩個(gè)數(shù)的乘法privatefloatchengFa(float[]a){floatresult=a[0];for(inti=1,length=a.length;i<length;i++){result*=a[i];}returnresult;/}/兩個(gè)數(shù)的除法privatefloatchuFa(float[]a){floatresult=a[0];for(inti=1,length=a.length;i<length;i++){if(a[i]==0){returnresult;}result/=a[i];}returnresult;//=按鈕的功能end==============================}3.6服務(wù)應(yīng)用設(shè)計(jì)移動(dòng)課堂:.chzu.xxy.sp15.hwl;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.Window;importandroid.view.WindowManager;//移動(dòng)課堂importandroid.webkit.WebView;importandroid.webkit.WebViewClient;publicclassFyClassActivityextendsActivity{WebViewmWebView;OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODO自動(dòng)生成的方法存根super.onCreate(savedInstanceState);setContentView(R.layout.activity_fy_class);mWebView=(WebView)findViewById(R.id.webview);mWebView.getSettings().setSupportZoom(true);mWebView.getSettings().setBuiltInZoomControls(true);mWebView.loadUrl("mooc1.chaoxing./course/95609226.html");〃覆蓋WebView默認(rèn)使用第三方或系統(tǒng)默認(rèn)瀏覽器打開網(wǎng)頁的行為,使網(wǎng)頁用WebView打開mWebView.setWebViewClient(newWebViewClient(){OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){//TODOAuto-generatedmethodstub〃返回值是true的時(shí)候控制去WebView打開,為false調(diào)用系統(tǒng)瀏覽器或第三方瀏覽器view.loadUrl(url);returntrue;});££0Bnbro>d-3upfraii-v4jar-;?由andraidiTjppDrtamo'tadDn出android.iuppDd.v4.di:ceMibiEr^?rtii:e■■-由BndraidiSJup口oriEd口口申androidiyjpporl.vdiWHTlerTt■出andraid.sjppDrt.vfl-.rarrtentpm由android.£jjppDri.ij4.cofYi0HLr0-i申andn^d.yjpporl.vd.datsbaw?出andraidi^jppDrtv^.graphicE出andF口id.MippDrLM.gwphii:乩dr凸託血亡■■-由android.sup口口兒柯止日詔測(cè)“卻日口1眄申andraidi&uppDrL^.internal.vhiw出android.&jppod.h4-.iri±diA由^ndiraid.cjjppDri.ij4.iriadiA.routing審andr^diPjppDrl.viinifdias^s^icin:"出andraidi?jppDrLv4.n?■出android.uppDd.L^.OG■■-由Hndixjid.sJuppori.^^prijTt申andraidiSJjppDrLi^4.prD¥ider出dndraid.upped.b4.sf)etch.tt5?由日血血乩叩皿0仃訓(xùn)陽M:申andr^diSJupporl.vJiU'til■出andraidi?jppDrLv4Me^'出dndrQid.UppDd.e4.'ui#n.d!:CAGGibilrty?審BndroidiSJupporii^.'widgei:卜&METAJNF圖4-24系統(tǒng)編碼實(shí)現(xiàn)4.1框架引用*Qsrcj出rneduidizuji>y,5pi5nda<j:-色口BDpanl-WpHr^jMH:-回FldgD代O.jb曲ElInaccouFtDAOJsiiaADEuiACCOuhlEiADjMA4國(guó)MdDAO.陽■IBcn-cdu^hEu^wy.iplS.liMl:'國(guó)Accabnrflag.jAb^J3AddinjerourTtjares:"世|AddCLilHccounl.jHYj:-J3CdciiLaltf.jj^ElFlagMana^iava回Hulpjsvd???InocwuFtjn^jjm證|In梔iMan』g亡Ja?』“:Lo^njaiwi卩C^jiJccouiiljiiFaJanid血ShcymlojavsHiKpJj-shAfDMqi.jAYj::?國(guó)^5?^73BJBTulBlCh^rtjHYBri審cn.eddxhiuja^.splS.modelH0Tbj^gjm團(tuán)TbjnjCEaurrLjauji?國(guó)Ib.QiitKcaun^dVdElTb_pwdjw3圖4-14.2交互實(shí)現(xiàn)計(jì)算器:<?xmlversion="2.0"encoding="ut/8"?><LinearLayoutxmlns:android="schemas.android./apk/res/androidandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFFFF"android:orientation="vertical"><TextViewandroid:id="+id/caLcuLate_textview"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:background="#ffffff"android:gravity="right"android:paddingRight="2dp"andrcid:text="0"android:textColor="#6699ff"android:textIsSelectable="true"android:textSize="40sp"/><Spaceandroid:layout_width="ldp"android:layout_height="0dp"android:layout_weight="1"/><GridLayoutandroid:id="+id/gridLayout_c"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:columnCount="4"android:rowCount="5"><!--第0排C、DEL、三、X--><Buttonandroid:id="+id/btn_c"android:layout_column="0"android:layout_row="0"android:onClick="onClick"android:text="C"android:textSize="25dp"/><Buttonandroid:id="+id/btn_del"android:layout_column="1"android:layout_row="0"android:onClick="onClick"android:text="DEL"android:textSize="25dp"/><Buttonandroid:id="+id/btn_chu"android:layout_column="2"android:layout_row="0"android:onClick="onClick"android:text="一"android:textSize="25dp"/><Buttonandroid:id="+id/btn_cheng"android:layout_column="3"android:layout_row="0"android:onClick="onClick"android:text="*"android:textSize="25dp"/><!--第1排7、8、9,-,--><Buttonandroid:id="+id/btn_7"android:layout_column="0"android:layout_row="1"android:onClick="onClick"android:text="7"android:textSize="25dp"/><Buttonandroid:id="+id/btn_8"android:layout_column="1"android:layout_row="1"android:onClick="onClick"android:text="8"android:textSize="25dp"/><Buttonandroid:id="+id/btn_9"android:layout_column="2"android:layout_row="1"android:onClick="onClick"android:text="9"android:textSize="25dp"/><Buttonandroid:id="+id/btn_jian"android:layout_column="3"android:layout_row="1"android:onClick="onClick"android:text=""android:textSize="25dp"/><!--第2排4、5、6,+,--><Buttonandroid:id="+id/btn_4"android:layout_column="0"android:layout_row="2"android:onClick="onClick"android:text="4"android:textS

溫馨提示

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