![個(gè)人記賬本 - 副本_第1頁(yè)](http://file4.renrendoc.com/view/20486d47e036b8d73212ac7d93f6a8d8/20486d47e036b8d73212ac7d93f6a8d81.gif)
![個(gè)人記賬本 - 副本_第2頁(yè)](http://file4.renrendoc.com/view/20486d47e036b8d73212ac7d93f6a8d8/20486d47e036b8d73212ac7d93f6a8d82.gif)
![個(gè)人記賬本 - 副本_第3頁(yè)](http://file4.renrendoc.com/view/20486d47e036b8d73212ac7d93f6a8d8/20486d47e036b8d73212ac7d93f6a8d83.gif)
![個(gè)人記賬本 - 副本_第4頁(yè)](http://file4.renrendoc.com/view/20486d47e036b8d73212ac7d93f6a8d8/20486d47e036b8d73212ac7d93f6a8d84.gif)
![個(gè)人記賬本 - 副本_第5頁(yè)](http://file4.renrendoc.com/view/20486d47e036b8d73212ac7d93f6a8d8/20486d47e036b8d73212ac7d93f6a8d85.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
手機(jī)自誕生以來(lái)不過(guò)數(shù)十年光景,但其商用及其更新?lián)Q代的速度卻讓人難以置信,在谷歌Android大潮席卷市場(chǎng),蘋果iOS□□□□□□□□□,以往對(duì)于虛擬現(xiàn)實(shí)、增強(qiáng)現(xiàn)實(shí)、高速無(wú)線網(wǎng)絡(luò)、更絢麗的屏幕、更強(qiáng)悍的圖形芯片以及多核處理器的暢想早已不再遙遠(yuǎn),完全集成在一部小小的智能設(shè)備當(dāng)中。在移動(dòng)互聯(lián)網(wǎng)大潮的侵襲下,想必未來(lái)的智能手機(jī)市場(chǎng)還將掀起一場(chǎng)智能化的革命。手機(jī)核處理器的暢想早已不再遙遠(yuǎn),完全集成在一部小小的智能設(shè)備當(dāng)中。在移動(dòng)互聯(lián)網(wǎng)大潮的侵襲下,想必未來(lái)的智能手機(jī)市場(chǎng)還將掀起一場(chǎng)智能化的革命。手機(jī)行業(yè)快速的變化需求對(duì)手機(jī)設(shè)計(jì)行業(yè)提出了更新的要求。QQ、QQ、微信;影音我們有百度影音、優(yōu)酷、土豆;金融我們有支付寶、微信支付;百度影音、優(yōu)酷、土豆;金融我們有支付寶、微信支付;網(wǎng)購(gòu)我們有淘寶、京東,各色各樣應(yīng)用占滿了手機(jī)存儲(chǔ)空間。李嘉誠(chéng)說(shuō)過(guò),“30歲以后,投資理財(cái)?shù)闹匾灾饾u提升,中年時(shí)賺多少錢各色各樣應(yīng)用占滿了手機(jī)存儲(chǔ)空間。李嘉誠(chéng)說(shuō)過(guò),“30歲以后,投資理財(cái)?shù)闹匾灾饾u提升,中年時(shí)賺多少錢已經(jīng)不重要,反而是如何管錢比較重要?!比缃?,隨著生活水平的提高,個(gè)人投資理財(cái)在當(dāng)今社會(huì)變得越來(lái)越重要。很多人沒(méi)有記賬的習(xí)慣,就會(huì)導(dǎo)致錢花完了資理財(cái)在當(dāng)今社會(huì)變得越來(lái)越重要。很多人沒(méi)有記賬的習(xí)慣,就會(huì)導(dǎo)致錢花完了到頭來(lái)卻不知道花在了什么地方。而使用記賬APP,到頭來(lái)卻不知道花在了什么地方。而使用記賬APP,雖然不能幫我們省錢,卻能讓我們知道自己的錢花在了什么地方。久而久之,就會(huì)對(duì)自己的消費(fèi)情況有個(gè)了讓我們知道自己的錢花在了什么地方。久而久之,就會(huì)對(duì)自己的消費(fèi)情況有個(gè)了解,學(xué)會(huì)更好的調(diào)配自己的資金,避免亂花錢、花冤枉錢的情況。本文著重介紹Android記賬類應(yīng)用《個(gè)人記賬本》,它擁有記賬、本文著重介紹Android記賬類應(yīng)用《個(gè)人記賬本》,它擁有記賬、錢包管理、報(bào)表生成、賬本分類等功能。相比于同類產(chǎn)品,操作簡(jiǎn)單、界面清晰、更加簡(jiǎn)單易用。緒論1.研1究背景Android系統(tǒng)是基于Linux□□□□□□□,2007年11月,Google與84家軟件開發(fā)商、硬件制造商及電信運(yùn)營(yíng)商組建開發(fā)手機(jī)聯(lián)盟,共同研發(fā)、改良Android系統(tǒng)。隨后Google以Apache□□□□□□□□□□,□□□Android□□□,□□□□Android□□□□□□□□□□□□,Android□□□□□發(fā)展,也與它的公開免費(fèi)不無(wú)關(guān)系。隨著Android□□□□□□□,□□□□□□□□□□□□□□□□□□□系統(tǒng)。它不僅僅是一款手機(jī)操作系統(tǒng),它還廣泛的被應(yīng)用于平板電腦、電視、數(shù)□□□□□□□□,□□□□□□□Android□□□□□□□□□□□□從2007年11月5日谷歌公司正式向外界展示了這款名為Android□□□□至今,Android□□□□□□□□□□□□,□□Android7.0的相關(guān)新聞也層出不窮,這意味著新版本即將到來(lái)。主要技術(shù)Eclipse集成開發(fā)環(huán)境Eclipse□□□□□□□□□□□□□□□□□IDE)□□□□□□□Java語(yǔ)言開發(fā),□□□□□□□□□,Eclipse□□□□□□□□□□□□,比如Python和C++。Eclipse本身只是一個(gè)框架平臺(tái),但是有了眾多插件的支持,使得Eclipse具有很高的靈活性,許多軟件開發(fā)商都以Eclipse為框架開發(fā)自己的IDE。Eclipse的插件機(jī)制是輕型軟件組件化架構(gòu)。Eclipse所有的附加功能都是由插件提供的,例如支持Java以外的其他語(yǔ)言。已有的分離的插件已經(jīng)能夠支持Ruby、Python、Perl、C/C++、telnet和數(shù)據(jù)庫(kù)開發(fā)。插件架構(gòu)能夠支持將任意的擴(kuò)展加入到現(xiàn)有環(huán)境中,而決不僅僅限于支持各種編程語(yǔ)言。Eclipse的設(shè)計(jì)思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。
Android技術(shù)Android是基于Linux的自由且開放源代碼的操作系統(tǒng),主要用于便攜設(shè)備,如平板電腦、智能手機(jī)。其系統(tǒng)架構(gòu)采用了分層的架構(gòu),從底層到高層分別是Linux內(nèi)核層、系統(tǒng)運(yùn)行庫(kù)層、應(yīng)用程序框架層和應(yīng)用程序?qū)?。Android開發(fā)四大組件分別是:活動(dòng)(Activity):用于表現(xiàn)功能。服務(wù)(Service):后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn)。內(nèi)容提供商(ContentProvider):支持在多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù)。廣播接收器(BroadcastRecei(BroadcastRecei:用于接收廣播。SQLiteSQLite是一款輕型的、遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)有許多嵌入式產(chǎn)品在使用它,在嵌入式設(shè)備有限的資源中,它僅需幾百K的內(nèi)存空間。它支持Windows/Linux/Unix等主流操作系統(tǒng),同時(shí)還能夠跟很多主流的程序語(yǔ)言相結(jié)合,比如Java、C#、PHP等,還有ODBC接口。比起PostgreSQL、Mysql這樣的著名數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度毫不遜色。論文的主要研究?jī)?nèi)容本課題將實(shí)現(xiàn)一個(gè)Android平臺(tái)的記賬應(yīng)用,它為手機(jī)用戶提供了豐富的功能,便于管理生活中一些理財(cái)?shù)膯?wèn)題。具體的研究?jī)?nèi)容如下:(1)介紹實(shí)現(xiàn)系統(tǒng)的主要技術(shù),包括Android技術(shù)、SQLite數(shù)據(jù)庫(kù)。(2)使用Android技術(shù)開發(fā)記賬軟件。(3)分模塊實(shí)現(xiàn)該軟件的每個(gè)子模塊和UI交互。1.4本章小結(jié)本章簡(jiǎn)要介紹了本次課題研究中應(yīng)用的主要技術(shù)以及開發(fā)工具,也就是為什么要選擇它們的原因。其中包括開發(fā)所使用的Android技術(shù)以及用于建立數(shù)據(jù)庫(kù)的SQLite數(shù)據(jù)庫(kù)管理系統(tǒng),在接下來(lái)的開發(fā)中均會(huì)使用到這些技術(shù)與工具。2分析與設(shè)計(jì)2.1需求分析只有本階段是面向在軟件生命周期中,其他階段都是面向軟件技術(shù)方面的,只有本階段是面向用戶的。需求分析是對(duì)用戶的業(yè)務(wù)活動(dòng)進(jìn)行分析的,以便確定在用戶的業(yè)務(wù)環(huán)境用戶的。需求分析是對(duì)用戶的業(yè)務(wù)活動(dòng)進(jìn)行分析的,以便確定在用戶的業(yè)務(wù)環(huán)境中軟件系統(tǒng)需要“做什么”。軟件需求包括兩部分:功能性需求和非功能性需求。雖然功能性需求是對(duì)軟件系統(tǒng)的一項(xiàng)基本需求,但卻并不是唯一的需求。除功能性需求外,軟件質(zhì)量屬性的特性,稱為系統(tǒng)的非功能性需求。這些特性包括:系統(tǒng)的易用性、執(zhí)行速度、可靠性,處理異常情況的能力與方式等。在決定系統(tǒng)的成功或失敗的因素中,軟件需求包括兩部分:功能性需求和非功能性需求。雖然功能性需求是對(duì)軟件系統(tǒng)的一項(xiàng)基本需求,但卻并不是唯一的需求。除功能性需求外,軟件質(zhì)量屬性的特性,稱為系統(tǒng)的非功能性需求。這些特性包括:系統(tǒng)的易用性、執(zhí)行速度、可靠性,處理異常情況的能力與方式等。在決定系統(tǒng)的成功或失敗的因素中,足非功能性需求往往比滿足功能性需求更為重要。有研究表明,客戶對(duì)系統(tǒng)的不滿意很多因素是因?yàn)樵O(shè)計(jì)者沒(méi)有與客戶進(jìn)行良好的溝通而造成的,所以編寫需求分析報(bào)告要求無(wú)歧義性、完整性、可驗(yàn)證性足非功能性需求往往比滿足功能性需求更為重要。有研究表明,客戶對(duì)系統(tǒng)的不滿意很多因素是因?yàn)樵O(shè)計(jì)者沒(méi)有與客戶進(jìn)行良好的溝通而造成的,所以編寫需求分析報(bào)告要求無(wú)歧義性、完整性、可驗(yàn)證性一致性、可追蹤性、運(yùn)行和維護(hù)階段的可使用性。下面是在我們經(jīng)過(guò)調(diào)研后得一致性、可追蹤性、運(yùn)行和維護(hù)階段的可使用性。下面是在我們經(jīng)過(guò)調(diào)研后得出的客戶需求:提供“流水明細(xì)”“記(1)明細(xì)界面:顯示當(dāng)前年、月、周、日的收支情況,提供“流水明細(xì)”“記(2)錢包界面:管理用戶的賬戶,如現(xiàn)金、支付寶、借記卡、信用卡,查詢剩余金額,還可進(jìn)行轉(zhuǎn)賬功能。(3)報(bào)表界面:按時(shí)間、分類型地對(duì)用戶的收支情況進(jìn)行統(tǒng)計(jì)分析。(4)更多界面:可以設(shè)置軟件密碼,只有密碼正確了才能進(jìn)入該系統(tǒng),否則無(wú)法操作賬本內(nèi)的數(shù)據(jù),還有清空數(shù)據(jù)的功能。2.22.2系統(tǒng)整體設(shè)計(jì)根據(jù)以上的分析,該軟件可按功能集合進(jìn)行劃分,整體結(jié)構(gòu)如圖2-1所示:圖2-1系統(tǒng)結(jié)構(gòu)圖2.32.3數(shù)據(jù)庫(kù)設(shè)計(jì)2.3.1賬本數(shù)據(jù)庫(kù)根據(jù)系統(tǒng)設(shè)計(jì)的分析,本系統(tǒng)需要錢包管理、賬本管理、成員管理、收支類型管理、收支明細(xì)管理、密碼管理這6張表。賬戶管理表,需要記錄賬戶名稱以及余額。表2-1錢包管理數(shù)據(jù)表屬性數(shù)據(jù)類型說(shuō)明idINTEGER自動(dòng)增加的主鍵acountTEXT賬戶名稱balanceREAL余額表2-2賬本管理數(shù)據(jù)表屬性數(shù)據(jù)類型說(shuō)明idINTEGER自動(dòng)增加的主鍵booksTEXT賬本名稱表2-3成員管理數(shù)據(jù)表屬性數(shù)據(jù)類型說(shuō)明idINTEGER自動(dòng)增加的主鍵memberTEXT成員名稱表2-4收支類型數(shù)據(jù)表屬性數(shù)據(jù)類型說(shuō)明idINTEGER自動(dòng)增加的主鍵typeINTEGER類型名稱books_idINTEGER所屬的賬本IDin_outTEXT屬于支出(2)或收入(1)
表2-5收支明細(xì)數(shù)據(jù)表屬性數(shù)據(jù)類型說(shuō)明idINTEGER□□□□□□□in_outINTEGER□□□□□2)或收入(1口type_idINTEGER類型IDmoneyREAL金額date_timeTEXT日期member_idINTEGER成員IDaccount_idINTEGER賬戶IDbooks_idINTEGER賬本ID表2-6密碼管理數(shù)據(jù)表屬性數(shù)據(jù)類型說(shuō)明idINTEGER□□□□□□□passTEXT密碼2.4本章小結(jié)本章首先對(duì)系統(tǒng)進(jìn)行了需求分析,將客戶端分為四個(gè)大模塊來(lái)進(jìn)行管理,分別是明細(xì)、錢包、報(bào)表、更多。從四大模塊入手,再到各個(gè)小功能,逐一實(shí)現(xiàn)。同時(shí)根據(jù)各功能模塊的需求,分析哪些數(shù)據(jù)是需要存儲(chǔ)的,從而對(duì)數(shù)據(jù)庫(kù)進(jìn)行初步的設(shè)計(jì)。3系統(tǒng)的實(shí)現(xiàn)系統(tǒng)功能模塊實(shí)現(xiàn)MainActivity作為整個(gè)程序的入口,采用Fragment來(lái)管理明細(xì)、錢包、報(bào)表,更多四個(gè)模塊,同時(shí)將已經(jīng)建立好的數(shù)據(jù)庫(kù)文件導(dǎo)入,以供存儲(chǔ)查詢使用。明細(xì)模塊根據(jù)上面的分析,在明細(xì)界面需要顯示年、月、周、日的收支情況,以及需要提供切換賬本、記一筆、查看流水明細(xì)三個(gè)按鈕。(1)顯示收支情況:當(dāng)APP啟動(dòng)的時(shí)候,默認(rèn)進(jìn)入明細(xì)界面,此時(shí)需要去查詢收支情況,如下代碼是查詢?cè)率杖氲恼Z(yǔ)句:dbHelper.queryMonth(DateUtils.ParseDateToString(calendar.getTime(),"yyyy-MM"),1,booksId)其中DateUtils的ParseDateToString是將Date類型的日期轉(zhuǎn)化為指定格式的String類型,因?yàn)閝ueryMonth方法的日期參數(shù)(即第一個(gè)參數(shù))類型被定義為String類型,所以需要統(tǒng)一。第二個(gè)參數(shù)則是代表收支,“1”為收入,“2”為支出。第三個(gè)參數(shù)是賬本ID。使用這個(gè)方法,就查詢不同賬本在不同月份的收支情況了。其他的年收支、周收支、日收支與此相似,不再贅述。(2)切換賬本:我們實(shí)現(xiàn)了一個(gè)自定義的彈窗類AlertDialogText,它可以幫助我們顯示想要的展示的內(nèi)容。首先,需要查詢數(shù)據(jù)庫(kù)中有多少本賬本可以給用戶選擇,于是,我們執(zhí)行了數(shù)據(jù)庫(kù)查詢:booksList=dbHelper.queryBooksList();queryBooksList方法將查詢到的數(shù)據(jù)賦值給了booksList,然后設(shè)置Adapter,Adapter規(guī)定了每一個(gè)item的樣式:adapterBooks=newQuickAdapter<Books>(getActivity(),R.layout.item_text_view){protectedvoidconvert(BaseAdapterHelperhelper,Booksitem){helper.setText(R.id.tv_name,item.books);};接著為adapater添加數(shù)據(jù)源:adapterBooks.addAll(booksList);Adapter已經(jīng)設(shè)置完畢,可以進(jìn)行展示了。我們?yōu)橘~本按鈕添加點(diǎn)擊事件,在點(diǎn)擊事件中彈出一個(gè)窗口進(jìn)行展示:tvBooks.setOnClickListener(clickListener);privateOnClickListenerclickListener=newOnClickListener(){@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.tv_books:alertDialogText=newAlertDialogText(getActivity(),"選擇賬本","");alertDialogText.setGoneButton();alertDialogText.setListViewAdapter(adapterBooks,itemClickListener,null);break;}}};實(shí)現(xiàn)一個(gè)彈窗展示就完成了,當(dāng)用戶點(diǎn)擊賬本切換按鈕的時(shí)候就會(huì)彈出一個(gè)窗口,顯示了當(dāng)前所有賬本,用戶即可點(diǎn)擊切換。(3)記一筆:記一筆是系統(tǒng)中一個(gè)重要的功能,無(wú)論是想要記錄收入狀況還是支出狀況都可以在此完成??梢栽O(shè)置時(shí)間、收入或支出、金額、錢包、成員、類型,對(duì)于成員和類型,系統(tǒng)默認(rèn)提供一些標(biāo)簽,如果用戶覺(jué)得沒(méi)有合適的,還可以添加自定義標(biāo)簽。類型選擇、添加、刪除等操作,使用了一個(gè)GridView直接展示在界面底部,而非前面使用到的彈出窗口,首先查詢所有類型,再為設(shè)置好每一行的樣式,然后為GridView設(shè)置Adapter,設(shè)置點(diǎn)擊事件與長(zhǎng)按監(jiān)聽事件,點(diǎn)擊的時(shí)候即選中當(dāng)前類型,按住item的時(shí)候會(huì)彈出刪除確認(rèn)窗口:typeList=dbHelper.queryTypeList(newDetail.books_id,1);adapterType=newQuickAdapter<Type>(this,R.layout.item_text_view){@Overrideprotectedvoidconvert(BaseAdapterHelperhelper,Typeitem){helper.setText(R.id.tv_name,item.type);}};adapterType.addAll(typeList);gridView.setAdapter(adapterType);gridView.setOnItemClickListener(itemClickListener);gridView.setOnItemLongClickListener(itemLongClickListener);以下是刪除功能實(shí)現(xiàn)代碼,先彈出一個(gè)窗口詢問(wèn)用戶是否確認(rèn)要?jiǎng)h除,避免誤操作造成了不必要的損失,當(dāng)用戶點(diǎn)擊確認(rèn)按鈕即確認(rèn)要?jiǎng)h除當(dāng)前數(shù)據(jù),執(zhí)行后給出成功或失敗的提示,告訴用戶結(jié)果:privateOnItemLongClickListeneritemLongClickListener=newOnItemLongClickListener(){@OverridepublicbooleanonItemLongClick(AdapterView<?>parent,Viewview,intposition,longid){finalintpos=position;if(parent.getAdapter()==adapterType){alertDialogText=newAlertDialogText(AddDetailActivity.this,"提示","是否要?jiǎng)h除類型:"+adapterType.getItem(pos).type+"?");alertDialogText.setButtonConfirm("確定",newOnClickListener(){@OverridepublicvoidonClick(Viewv){if(dbHelper.deleteType(adapterType.getItem(pos).id)>0){typeList.remove(adapterType.getItem(pos));adapterType.remove(adapterType.getItem(pos));alertDialogText.dismiss();Toast.makeText(AddDetailActivity.this,"類型刪除成功",Toast.LENGTH_LONG).show();}else{Toast.makeText(AddDetailActivity.this,"類型刪除失敗",Toast.LENGTH_LONG).show();}}});}returntrue;}};接下來(lái)是添加自定義標(biāo)簽的代碼,只需要獲取用戶輸入的名稱,并且添加到數(shù)據(jù)庫(kù)就可以了,當(dāng)然,還需要輸入內(nèi)容不能空,添加成功后還要刷新Adapter:if(typeList.indexOf(adapterType.getItem(i))==typeList.size()-1){alertDialogText=newAlertDialogText(AddDetailActivity.this,"添加類型","");alertDialogText.setEditTextMsg("",10);alertDialogText.setButtonConfirm("確定",newOnClickListener(){@OverridepublicvoidonClick(Viewv){if(alertDialogText.getEditTextMsg()==null||alertDialogText.getEditTextMsg().length()==0){Toast.makeText(AddDetailActivity.this,"名稱不能為空",Toast.LENGTH_LONG).show();return;}dbHelper.insertType(alertDialogText.getEditTextMsg(),newDetail.books_id,newDetail.in_out);typeList=dbHelper.queryTypeList(newDetail.books_id,newDetail.in_out);typeList.add(addT);adapterType.clear();adapterType.addAll(typeList);Toast.makeText(AddDetailActivity.this,"類型添加成功",Toast.LENGTH_LONG).show();alertDialogText.dismiss();}});return;}(4)流水明細(xì):該界面顯示了用戶的所有記錄,可以按時(shí)間查詢,使用ListView展示,如果發(fā)現(xiàn)某條記錄寫錯(cuò)了,也可進(jìn)行刪除,重新記錄。錢包模塊在這個(gè)界面所要展示的則是一個(gè)賬戶列表,其中顯示賬戶名稱和余額,所以使用ListView來(lái)作為顯示的控件。第一步,查詢所有賬戶資料:accountList=dbHelpser.queryAccountList();設(shè)置Adapter,里面除了設(shè)置要顯示的數(shù)據(jù)之外,還為每一行設(shè)置一個(gè)顏色背景,而顏色則是隨機(jī)的,用random實(shí)現(xiàn):adapterAccount=newQuickAdapter<Account>(getActivity(),R.layout.item_account){@Overrideprotectedvoidconvert(BaseAdapterHelperhelper,Accountitem){helper.setBackgroundColor(R.id.layout_root,getResources().getColor(colors[random.nextInt(max)%(max-min+1)+min]));helper.setText(R.id.tv_account_name,">>"+item.acount);helper.setText(R.id.tv_account_blance,"¥"+DoubleUtils.getFormatTwo(item.balance));}};報(bào)表模塊報(bào)表功能實(shí)現(xiàn)按收支類型查詢指定時(shí)間內(nèi)的收支狀況,給出百分比柱狀圖,直接展示了用戶在各類型上的收支,同時(shí)也統(tǒng)計(jì)出所有金額總和。百分比柱狀圖是用ProgressBar來(lái)實(shí)現(xiàn)的。例如查詢一個(gè)月內(nèi)的收入報(bào)表,那么就查詢出該月的所有類型的收入金額,進(jìn)行統(tǒng)計(jì),將某類型的金額除以總金額,得出條狀圖的百分比。根據(jù)賬本、收入或支出、開始時(shí)間、結(jié)束時(shí)間四個(gè)條件來(lái)查詢總金額:sumMoney=dbHelper.queryReportSumMoney(DetailFragment.booksId,inOut,startDate,endDate);接著設(shè)置Adapter:adapterReport=newQuickAdapter<Report>(getActivity(),R.layout.item_report_form){@Overrideprotectedvoidconvert(BaseAdapterHelperhelper,Reportitem){helper.setText(R.id.tv_name,item.type);helper.setText(R.id.tv_money,"¥"+DoubleUtils.getFormatTwo(item.money));helper.setText(R.id.tv_proportion,DoubleUtils.getFormatOne((item.money/sumMoney)*100)+"%");//設(shè)置條狀圖百分比helper.setProgress(R.gressBar,(int)((item.money/sumMoney)*100));//設(shè)置文字顏色,收入為紅,支出為綠if(selectPos==0){helper.setTextColor(R.id.tv_money,getResources().getColor(R.color.rule_red_dark));}else{helper.setTextColor(R.id.tv_money,getResources().getColor(R.color.rule_green_light));}}};更多模塊(1)設(shè)置密碼:既然是一個(gè)賬本,有時(shí)為了避免他人查看或操作自己的賬本,就需要密碼功能的存在了。一旦打開密碼功能,那么用戶就需要輸入正確的密碼才能進(jìn)入程序的首頁(yè),才能繼續(xù)才做,密碼錯(cuò)誤是無(wú)法進(jìn)入的,密碼設(shè)定長(zhǎng)度為4,當(dāng)輸入框的內(nèi)容長(zhǎng)度等于4的時(shí)候會(huì)自動(dòng)結(jié)束輸入,以下是設(shè)置密碼功能實(shí)現(xiàn):if(type.equals("set")){if(tvTip.getText().toString().equals("請(qǐng)輸入4位密碼")){passFirst=edPass.getText().toString();tvTip.setText("請(qǐng)?jiān)俅屋斎朊艽a");edPass.setText("");return;}if(tvTip.getText().toString().equals("請(qǐng)?jiān)俅屋斎朊艽a")){if(passFirst.equals(edPass.getText().toString())){//兩次密碼相同,存入數(shù)據(jù)庫(kù),設(shè)置成功Toast.makeText(PasswordActivity.this,"密碼設(shè)置成功",Toast.LENGTH_LONG).show();dbHelper.insertPass(passFirst);finishActivity();}else{//兩次輸入不同則要求重新輸入Toast.makeText(PasswordActivity.this,"密碼設(shè)置失敗",Toast.LENGTH_LONG).show();tvTip.setText("請(qǐng)輸入4位密碼");edPass.setText("");passFirst="";}}設(shè)置好密碼之后,每次啟動(dòng)程序就需要驗(yàn)證了,當(dāng)密碼正確的時(shí)候則關(guān)閉密碼驗(yàn)證界面,錯(cuò)誤則給出提示,讓用戶重新輸入:if(type.equals("check")){Passpass=dbHelper.queryPass();if(pass!=null&&pass.pass.equals(edPass.getText().toString())){finishActivity();}else{Toast.makeText(PasswordActivity.this,"密碼錯(cuò)誤,請(qǐng)重新輸入",Toast.LENGTH_LONG).show();edPass.setText("");}}(2)清空數(shù)據(jù):該功能解決的問(wèn)題是,當(dāng)用戶想初始化系統(tǒng)數(shù)據(jù)的時(shí)候可以方便地解決,無(wú)需到手機(jī)系統(tǒng)的程序設(shè)置里面去情況數(shù)據(jù),而且普通手機(jī)用戶也不一定知道可以這么做。清空數(shù)據(jù)的實(shí)現(xiàn)很簡(jiǎn)單,只要把數(shù)據(jù)庫(kù)數(shù)據(jù)刪除就可以了:publicbooleandeleteDatabase(Contextcontext){returncontext.deleteDatabase("/data/data/"+context.getPackageName()+"/databases/"+DBNAME);}數(shù)據(jù)庫(kù)訪問(wèn)的實(shí)現(xiàn)現(xiàn)在的主流移動(dòng)設(shè)備如iPhone、Android等都是使用SQLite作為復(fù)雜數(shù)據(jù)的存儲(chǔ)引擎,對(duì)于Android平臺(tái)而言,系統(tǒng)提供了豐富的API來(lái)供開發(fā)人員操作SQLite,幫助開發(fā)人員完成對(duì)數(shù)據(jù)的存取。本系統(tǒng)的數(shù)據(jù)庫(kù)是在電腦上創(chuàng)建,并初始化默認(rèn)數(shù)據(jù)的,所以需要把該數(shù)據(jù)庫(kù)文件導(dǎo)入到項(xiàng)目中。當(dāng)程序第一次運(yùn)行的時(shí)候,會(huì)判斷項(xiàng)目目錄下存不存在數(shù)據(jù)庫(kù)文件,如不存在,則導(dǎo)入到項(xiàng)目中,如果存在,則無(wú)需導(dǎo)入,以下是實(shí)現(xiàn)代碼:InputStreamis=this.context.getResources().openRawResource(DB_ID);FileOutputStreamfos=newFileOutputStream(dbfile);byte[]buffer=newbyte[BUFFER_SIZE];intcount=0;while((count=is.read(buffer))>0){fos.write(buffer,0,count);}fos.close();is.close();Android系統(tǒng)提供了一個(gè)管理數(shù)據(jù)庫(kù)的工具類SQLiteOpenHelper,利用該類,我們可以對(duì)數(shù)據(jù)庫(kù)的創(chuàng)建、更新以及增刪改查進(jìn)行管理。通過(guò)繼承SQLiteOpenHelper可以打造我們需要的功能,利用SQLiteDatabase對(duì)象的rawQuery()、insert()、update()、delete()等方法來(lái)對(duì)數(shù)據(jù)進(jìn)程查詢、添加、更新和刪除等操作,如要查詢某個(gè)賬戶的余額:publicdoublequeryAccountMoney(intid){doublemoney=0;Cursorcursor=sqlDb.rawQuery("selectbalancefrom"+Account.class.getSimpleName().toLowerCase()+"whereid="+id,null);while(cursor.moveToNext()){money=cursor.getDouble(0);cursor.close();returnmoney;此方法將會(huì)從account表查詢id等于指定值的賬戶余額balance并返回結(jié)果,在查詢結(jié)束時(shí)要記得關(guān)閉Cursor,以防內(nèi)存內(nèi)漏??赐炅瞬樵児δ苤?,再來(lái)看插入數(shù)據(jù)的方法,以下方法是新增一條類型的數(shù)據(jù),即自定義類型標(biāo)簽的時(shí)候所調(diào)用的方法:publiclonginsertType(Stringtype,intbooksId,intinOut){ContentValuescontentValues=newContentValues();contentValues.put("type",type);
contentValues.put("in_out",inOut);contentValues.put("books_id",booksId);returnsqlDb.insert(Type.class.getSimpleName().toLowerCase(),null,contentValues);}還有刪除與更新的方法:publicintdeleteMember(intid){returnsqlDb.delete(Member.class.getSimpleName().toLowerCase(),"id=?",newString[]{String.valueOf(id)});}publicintupdateAccountMoney(intid,doublebalacne){ContentValuesvalues=newContentValues();values.put("balance",balacne);returnsqlDb.update(Account.class.getSimpleName().toLowerCase(),values,"id=?",newString[]{String.valueOf(id)});}文件結(jié)構(gòu)和功能項(xiàng)目結(jié)構(gòu)¥出co¥出com.iaccount,model[J]Accountjava[J]Books.java[J|DayToDay.java團(tuán)Detail.java[J]Member.java[J|Pass.java團(tuán)R.eport.java[J]Typejava7!七com.iaccount.utilsDjAlertDiaIogText.java[J]AppManager.javaJ?|DateUtils.java團(tuán)DensityUtilsjava[J]DoubleUtils.java出Ljava團(tuán)StringUtils.javav£5src7com.iaccount.activity[JjAddDetaiIActivityJavaJTjDayToDayActivity.java[J]MainActivityJava[J]PasswordActivity.]ava[JiTransferActivity.java申com.iaccount.adapterv!七com.iaccount.base[J|BaseActivity.java!JjBaseFragmentjava;J]BaseFragmentActivityJa,七com.iaccount.datetime7com.iaccount.dbJJ]DBHelperJava0InputDB.java7com.iaccount.fragment「::_.一圖3-1一客戶端文件結(jié)構(gòu)JT|DetaiIFragment.java[7|MoreFragment.javaJT]ReportFormFragment.java
表3-1客戶端文件對(duì)應(yīng)功能表包名文件名說(shuō)明com.iaccount.activityAddDetailActivity.java添加賬本記錄界面DayToDayActivity.java流水明細(xì)界面MainActivity.java程序入口PasswordActivity.java設(shè)置密碼界面TransferActivity.java轉(zhuǎn)賬界面com.iaccount.baseBaseActivity.javaActivity基類BaseFragment.javaFragment基類BaseFragmentActivity.javaFragmentActivity基類com.iaccount.dbDBHelper.java數(shù)據(jù)庫(kù)操作工具類InputDB.java導(dǎo)入數(shù)據(jù)庫(kù)工具類com.iaccount.fragmentAccountFragment.java錢包界面DetailFragment.java明細(xì)界面MoreFragment.java更多界面ReportFormFragment.java報(bào)表界面com.iaccount.modelAccount.java賬戶實(shí)體類Books.java賬本實(shí)體類DayToDay.java流水明細(xì)實(shí)體類Detail.java賬本記錄實(shí)體類Member.java成員實(shí)體類Pass.java密碼實(shí)體類
Report.java□□□□□Type.java□□□□□com.iaccount.utilsAlertDialogText.java□□□□□AppManager.javaActivity□□□□□DateUtils.java□□□□□DensityUtils.java□□□□□□□DoubleUtils.javaDouble工具類L.javaLog工具類StringUtils.javaString工具類3.4軟件界面通過(guò)對(duì)系統(tǒng)的功能分析,成功將系統(tǒng)實(shí)現(xiàn),在這給出部分運(yùn)行界面:本月收入:本月支出:/2016本月結(jié)余:21:0821:080.32K/S令21:080.20K/S令二::您分類收入V更多2016-03-01設(shè)置密碼總金額:¥36.00清空數(shù)據(jù)工資¥36.00圖3-4報(bào)表界面圖3-5更多界面21:100.47K/S令21:101.34K/S分二::牌2016-03-18<7詳情2016-(我在工資支tl錢包現(xiàn)金2016-03-18我在工資收入36。類型工資圖3-7流水明細(xì)界面15:2915:290.16K/Sf15;300.30K/S令:二牌?請(qǐng)輸入4位密碼請(qǐng)?jiān)俅屋斎朊艽a圖3-8驗(yàn)證密碼界面圖圖3-8驗(yàn)證密碼界面3.5本章小結(jié)□□□□□□□□□□□□□□,□□□□□□□□□□□,□用EclipseJ□□□□□□□□□,□□SQLite□□□□□□□□□□□□□□□□□□□□TOC\o"1-5"\h\z□□□□□□□□□□□□□□□□□□□□a564569789?0<首1頁(yè)測(cè)試打開應(yīng)用程序可以看到首頁(yè)顯示有年、當(dāng)前所屬賬本的功能。當(dāng)前的數(shù)據(jù)是生活賬本的月收入余27元,如圖本,可以看到,收支情況都為4系統(tǒng)測(cè)試4-1。點(diǎn)擊切換賬本,出現(xiàn)選擇窗,如圖月、周、日的收支情況還有可以切換36元,月支出4-2,例如切換到旅游賬9元,結(jié)0,因?yàn)槲覀冞€沒(méi)添加任何記錄,如圖4-3。本月收入:本月支出:本月結(jié)余:圖4-1生活賬本生;舌強(qiáng)本旅游賬本本周03月211本年01月01116:130.82K/S令::;:!^(M>93%3/2016旅游賬本>本月收入:¥0.00本月支出:¥0.00本月結(jié)余:¥0.00流水明細(xì)記一筆今天今天0.000.002記一筆測(cè)試圖4-3旅游賬本本周030,000.00接下來(lái)我們就來(lái)為旅游賬本新增一條收入記錄和支出記錄,點(diǎn)擊“記一筆”按鈕,出現(xiàn)(365)門r八-■-■A*.|?門添加界面,默認(rèn)處于收入狀態(tài),如圖4-4。時(shí)間默認(rèn)為當(dāng)前時(shí)間,如果要添加的記錄不是當(dāng)前的時(shí)間,可以點(diǎn)擊設(shè)置,如圖4-5。接著選擇錢包、成員,如圖4-6、4-7。再選擇好收入的類型,我們選擇公司報(bào)銷,如圖4-8。最后設(shè)置金額,輸入的數(shù)字可以是小數(shù),且有合法性驗(yàn)證,即不能出現(xiàn)兩個(gè)小數(shù)點(diǎn),不能輸入以0開始的非小數(shù)數(shù)字,也不能兩個(gè)0開始的數(shù)字,輸入36元并成功保存數(shù)據(jù),保存后會(huì)彈出一匿口,可以選擇關(guān)閉當(dāng)前界面,或者選擇再記一筆,則留在當(dāng)前界面,如圖4-9。我們選擇關(guān)閉,則回到主界面,此時(shí)可以看到,當(dāng)前的旅游賬本有36元的收入,如圖4-10。收入弟弟其他選擇賬戶?現(xiàn)金¥2>>支付寶¥a徵信¥選擇錢包賬戶>>借歷¥?信用卡¥選擇時(shí)間20152016年蛆姐妹妹錢包現(xiàn)金類型公司報(bào)銷J今天圖4-10保存成本周在添加記錄的時(shí)候,如果在成員、類型提供的默認(rèn)標(biāo)簽找不到合適的,還可以添加自定義標(biāo)簽,添加的時(shí)候名稱不能為空,如圖4-11。添加一個(gè)名為“家里資助”的收入類型,添加成功后則顯示在列表中,如圖4-12。如果對(duì)某個(gè)標(biāo)簽不滿意,可以按住刪除,如圖4-13。錢包交通出行交通出行公司報(bào)用現(xiàn)金交通出行交通出行3流水明細(xì)測(cè)試現(xiàn)生活賬本中有4條記錄,點(diǎn)擊流水明細(xì),出現(xiàn)了一個(gè)列表,展示了在某段時(shí)間內(nèi)的收支情況,默認(rèn)是顯示當(dāng)前月的收支情況,如圖4-14。同時(shí)也可以根據(jù)用戶的需要自己選擇時(shí)間段,例如我們改為從2月開始,可以看到列表多了一條記錄,如圖4-15。如果對(duì)某條記錄不滿意,想要?jiǎng)h除,只需按住該條記錄,再確認(rèn)刪除即可。17:320,10K/S417:330,12K/S零G詳情(詳情2016-03-01-2016-2016-02-21-2016-03-312016-02-21我在我在獎(jiǎng)金收入99.02016-0:我在我在水果支出22016-03-212016-0:我在紅包收入10.0我在餐飲支出12016-03-212016-03-21圖4-14三月記錄圖4-15二月到三月記錄我在工資收入100,0我在紅包收入10.0錢包功能測(cè)試2016-03-21點(diǎn)擊錢包界面,可以看到已經(jīng)有了一些賬戶,如現(xiàn)金、支付寶、微信、借記卡、信用卡。其中現(xiàn)金賬戶的余額有326元,接下來(lái)設(shè)置支付寶的金額,點(diǎn)擊彈出選擇菜單,選擇“設(shè)置金額”,如圖4-16。設(shè)置金額為300元,當(dāng)前這里輸入的金額也是不能為空的,如圖4-17。完成后即可看到支付寶賬戶的余額變?yōu)?00元,總余額為626元,如圖4-18。17:380.12K/S
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店管理晉升路徑
- 酒店管理工作目標(biāo)
- All Touch移動(dòng)信息化管理平臺(tái)介紹課件
- 2025-2030全球動(dòng)畫工作室行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)超細(xì)玻璃棉行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球機(jī)器人電子皮膚行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)光伏增效膜行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)近紅外(NIR)超透鏡行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)3D感知數(shù)智化解決方案行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球數(shù)字布局軟件行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 快遞代收點(diǎn)合作協(xié)議
- 食堂項(xiàng)目組織架構(gòu)圖
- 食材配送公司機(jī)構(gòu)設(shè)置及崗位職責(zé)
- 2023年版一級(jí)建造師-水利工程實(shí)務(wù)電子教材
- 房地產(chǎn)工程管理 -中建八局機(jī)電工程質(zhì)量通病治理辦法
- GB/T 6403.4-2008零件倒圓與倒角
- GB/T 2518-2019連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
- 企業(yè)合規(guī)管理-課件
- 火電廠安全工作規(guī)程
- GB∕T 33047.1-2016 塑料 聚合物熱重法(TG) 第1部分:通則
- 特發(fā)性肺纖維化IPF
評(píng)論
0/150
提交評(píng)論