康昕宇 耿恒山 翟丹娜 富 坤
(河北工業(yè)大學(xué)計算機(jī)科學(xué)與軟件學(xué)院 天津 300401)
?
基于Android的物流與財務(wù)管理系統(tǒng)的設(shè)計與實現(xiàn)
康昕宇耿恒山翟丹娜富坤
(河北工業(yè)大學(xué)計算機(jī)科學(xué)與軟件學(xué)院天津 300401)
針對大多數(shù)企業(yè)的物流與財務(wù)信息的管理系統(tǒng)一般運(yùn)行在電腦客戶端上,不便于銷售人員與財務(wù)人員實時進(jìn)行數(shù)據(jù)整理與分析的情況,提出在手機(jī)等移動終端上開發(fā)一個基于Android平臺的物流與財務(wù)管理系統(tǒng)。依據(jù)實際需求,將該系統(tǒng)分為客戶端與服務(wù)器端,然后分析相關(guān)算法和設(shè)計,如成本計算方法、損益結(jié)轉(zhuǎn)和數(shù)據(jù)預(yù)取設(shè)計。實驗結(jié)果表明,該系統(tǒng)可以滿足銷售及財務(wù)人員隨時查看、分析并處理相關(guān)信息的需求。
Android物流管理財務(wù)系統(tǒng)成本計算損益結(jié)轉(zhuǎn)
傳統(tǒng)的物流以及財務(wù)信息管理系統(tǒng)是運(yùn)行在每個人的電腦上的,那么銷售人員和財務(wù)人員就需要在電腦上完成所有的工作。但現(xiàn)實工作中,銷售人員可能會在庫房、車間等場地現(xiàn)場作業(yè),核實貨物信息;財務(wù)人員同樣也可能會在會議等非電算化環(huán)境下獲取財務(wù)信息,此時他們的需求便無法滿足。手機(jī)等移動產(chǎn)品的迅速發(fā)展為這一需求的實現(xiàn)創(chuàng)造了空間,再依靠無線網(wǎng)絡(luò)等通信技術(shù),現(xiàn)有的智能手機(jī)等移動設(shè)備完全滿足對于物流、財務(wù)等信息的相關(guān)操作。在此背景下,本文設(shè)計并開發(fā)一個基于手機(jī)等移動平臺[1]的物流及財務(wù)信息管理系統(tǒng)[2],主要功能包括基礎(chǔ)資料維護(hù),物流信息查詢與修改,財務(wù)信息查詢與修改和系統(tǒng)管理。
當(dāng)前的移動平臺市場,Android、IOS和Windows Phone并稱三大移動端操作系統(tǒng)。而在這三者中,Android又占據(jù)了絕大多數(shù)的市場份額。從2013年9月到2014年7月,在將近一年的時間里Android市場占有率穩(wěn)步提升,從最初的29.42%飆升至44.62%,而IOS則從53.68%降至44.19%,Android實現(xiàn)了首次超越。針對于此,越來越多的供應(yīng)商選擇支持Android平臺;同時,消費(fèi)者手中的智能手機(jī)搭載Android系統(tǒng)的不在少數(shù)。所以本文選擇實現(xiàn)的是一款基于Android平臺的物流與財務(wù)管理系統(tǒng)。
Android是Google公司推出的基于Linux平臺的移動設(shè)備操作系統(tǒng)。它主要由以下幾個部分組成:操作系統(tǒng)、中間件、用戶界面和應(yīng)用。由于源代碼開放,Android系統(tǒng)可被移植到不同的硬件平臺上。Android系統(tǒng)采用分層架構(gòu)[3],分為四層,從下至上依次是:(1)Linux內(nèi)核層,包含操作系統(tǒng)及驅(qū)動,主要用C語言開發(fā)。(2)系統(tǒng)運(yùn)行庫,包含本地框架、函數(shù)庫及Java運(yùn)行環(huán)境,主要用C語言和C++開發(fā)。(3)Java框架層,包含諸多組件,如ActivityManager等,用Java語言開發(fā)。(4)Java應(yīng)用層,包含用戶實際使用的短信,打電話,上網(wǎng)等功能,用Java語言編寫。圖1為Android系統(tǒng)的架構(gòu)。
圖1 Android系統(tǒng)架構(gòu)
參考現(xiàn)有的物流管理系統(tǒng),財務(wù)軟件和用戶的實際需求,系統(tǒng)會實現(xiàn)基礎(chǔ)資料維護(hù),物流信息查詢與修改,財務(wù)信息查詢與修改,系統(tǒng)管理等功能。基礎(chǔ)資料包括客戶信息、廠商信息、員工資料、貨品資料、期初開賬信息;物流信息包括采購訂單、采購明細(xì)表、采購入庫單、采購入庫明細(xì)表、銷售訂單、銷售訂單明細(xì)表、銷售出庫單、銷售出庫明細(xì)表、庫存調(diào)撥單、貨品分倉存量、產(chǎn)銷存明細(xì)表、成本計算;財務(wù)信息包括查詢憑證、損益結(jié)轉(zhuǎn)、總賬明細(xì)賬查詢、報表查詢;系統(tǒng)管理包括系統(tǒng)內(nèi)部消息、預(yù)警設(shè)置。以上的這些信息功能僅僅是在移動客戶端上實現(xiàn),簡化了諸多操作??蛻舳诵枰L問服務(wù)器以獲取這些信息,移動客戶端的加入使客戶端的數(shù)量增長,此時則可以使用負(fù)載均衡技術(shù)將訪問分流至其他的服務(wù)器。在服務(wù)器端則使用Spring+Struts+Hibernate框架來實現(xiàn),服務(wù)器與客戶端之間的通信則依靠傳統(tǒng)的http協(xié)議。系統(tǒng)的總體框架如圖2所示。
圖2 系統(tǒng)總體框架
客戶端的框架如圖3所示。客戶端系統(tǒng)在Android平臺上運(yùn)行,并在Android4.2.1真機(jī)環(huán)境下測試。根據(jù)客戶端需要實現(xiàn)的功能,可以把客戶端劃分為信息交互模塊與數(shù)據(jù)計算模塊。其中,信息交互模塊包含了基礎(chǔ)資料、物流信息、財務(wù)信息和系統(tǒng)信息的獲取與修改;數(shù)據(jù)計算模塊則包含成本計算,損益結(jié)轉(zhuǎn)等功能。
圖3 客戶端框架
3.1客戶端界面
物流與財務(wù)管理系統(tǒng)涉及到的信息相當(dāng)多,所以需要系統(tǒng)用最直接且明顯的方式顯示系統(tǒng)信息,并且操作要盡量簡單,以便于銷售與財務(wù)人員進(jìn)行操作??蛻舳说闹鹘缑鎇4]如圖4所示。當(dāng)選中某一按鈕時,系統(tǒng)使用setOnClickListener方法進(jìn)行監(jiān)聽,并利用intent的startActivity方法創(chuàng)建新的Activity進(jìn)行界面切換。在res的布局文件layout中,新建main.xml主界面布局文件,可以為系統(tǒng)界面選擇流線型布局LinearLayout并按照界面框架按順序添加相應(yīng)的控件,如Button,TextView等;然后在配置文件values中添加樣式文件style.xml進(jìn)行樣式編輯,如字體與背景顏色等;最后在AndroidManifest.xml文件中可以配置activity的屬性,包括name,label,intent-filter等。
圖4 客戶端主界面
3.2信息交互
在服務(wù)器端實例化一個TcpClient對象,可以通過ServerListener.AcceptTcpClient()方法獲取。然后從TcpListener對象中提取NetworkStream對象,目的是建立Socket數(shù)據(jù)流。再建立BinaryReader對象為剛剛創(chuàng)建的NetworkStream提供一個接口,借助于這個接口可以非常方便的讀取信息,讀取Stream中的byte array信息然后再轉(zhuǎn)化成String字符串。在客戶端同樣需要建立Socket對象,但I(xiàn)P地址和端口號需要從配置文件中獲取。再依據(jù)Socket創(chuàng)建OutPutStream對象,再建立DateOutPutStream接口,可以通過接口向外寫數(shù)據(jù)。最后,需要在AndroidManifest.xml文件中添加相應(yīng)的權(quán)限
因為客戶端不止一個,如果同時訪問服務(wù)器則會造成無法訪問。所以需要引入多線程。在服務(wù)器端定義一個接受消息的類GetMessage并實現(xiàn)接口Runnable,再將內(nèi)部需要重寫的方法完成。實例化一個Thread對象并以GetMessage為參數(shù),之后調(diào)用Thread對象的start()方法即可;同樣在客戶端定義接收消息和發(fā)送消息的類并實現(xiàn)接口。因為客戶端需要隨時接收消息,所以將接收消息部分的實例化Thread對象過程放在while循環(huán)中進(jìn)行。
在設(shè)計程序時,并未把OutPutStream流包裝成PrintStream,然后使用PrintStream直接輸出信息。這是因為系統(tǒng)的服務(wù)器端程序運(yùn)行在Windows主機(jī)上,當(dāng)直接使用PrintStream輸出字符串時默認(rèn)使用系統(tǒng)平臺的字符串,即GBK進(jìn)行編碼;但程序的客戶端時Android應(yīng)用,依賴于Linux內(nèi)核,因此當(dāng)客戶端讀取網(wǎng)絡(luò)數(shù)據(jù)時默認(rèn)使用UTF-8字符集進(jìn)行解碼,這樣勢必引起亂碼。為了保證客戶端能正常解碼得到數(shù)據(jù),此處手動控制字符串的解碼,強(qiáng)行制定使用UTF-8字符串集進(jìn)行編碼,這樣就可以避免亂碼問題了。
3.3成本計算
成本計算又稱成本核算,是指將企業(yè)在生產(chǎn)過程中發(fā)生的各項耗費(fèi)按照一定的對象進(jìn)行分配和歸集,以計算總成本和單位成本。成本計算通常以會計核算為基礎(chǔ),以貨幣為計算單位。成本計算是成本管理的重要組成部分,對于企業(yè)的成本預(yù)測和企業(yè)的經(jīng)營決策等存在直接影響。
圖5 成本計算界面
常見的成本計算方法[5,6]有移動加權(quán)法、月加權(quán)平均法和年加權(quán)平均法。移動加權(quán)法的含義是每次收到存貨以后,以各批收入數(shù)量和各批收入前得結(jié)存數(shù)量為權(quán)數(shù),從而計算新的加權(quán)平均單位成本的方法;月加權(quán)平均法與年加權(quán)平均法則分別指以月和年為時間單位,在期末計算存貨的平均單位成本時,用期初存貨數(shù)量和本期各批收入的數(shù)量作為權(quán)數(shù)來確定存貨的平均單位成本,從而計算出期末存貨和已銷存貨成本的計算方法。移動加權(quán)法適用于價格變化大或要求精確核算的成本核算,核算比較費(fèi)時,應(yīng)用在系統(tǒng)中可以使用改進(jìn)的加權(quán)遞推平均濾波算法計算;期末加權(quán)平均法則適用于價格變化不大或要求不是特別精確的成本核算,過程比較簡單且節(jié)省時間,在系統(tǒng)中使用普通加權(quán)平均濾波算法即可完成計算。在比較幾種方法異同的同時,考慮到工作人員在移動平臺上的應(yīng)用絕大多數(shù)是為了貨品的進(jìn)銷存而不是精確核算,并且基于移動平臺上運(yùn)算能力的限制等因素,可以采用月加權(quán)平均法來完成成本核算。成本計算界面如圖5所示。
在完成成本計算步驟之后,期初結(jié)存、采購入庫、本期耗用和期末結(jié)存部分的數(shù)據(jù)將會統(tǒng)一,以便于工作人員隨時查看與分析。
3.4損益結(jié)轉(zhuǎn)
損益結(jié)轉(zhuǎn)[7]是指期末時,將各損益類科目的余額轉(zhuǎn)入本年利潤科目,并生成一張損益結(jié)轉(zhuǎn)記賬憑證。它可以反映集團(tuán)企業(yè)在一個會計期間內(nèi)實現(xiàn)的利潤或虧損總額。
考慮到這個業(yè)務(wù)的計算量較大,在Android平臺上生成數(shù)據(jù)較為困難,因此將該結(jié)轉(zhuǎn)業(yè)務(wù)放在服務(wù)器端實現(xiàn)。其流程如圖6所示,在客戶端可以查詢并統(tǒng)計相關(guān)的憑證,在財務(wù)人員核對過后,將結(jié)轉(zhuǎn)信息發(fā)送到服務(wù)器端,服務(wù)器端根據(jù)具體信息從數(shù)據(jù)庫中讀取相應(yīng)的數(shù)據(jù)并進(jìn)行試算,然后將結(jié)果反饋到客戶端。這一過程并不會產(chǎn)生真正的結(jié)轉(zhuǎn)損益記賬憑證,因為財務(wù)人員可能會隨時對賬目進(jìn)行核算,但損益結(jié)轉(zhuǎn)后將不能進(jìn)行期間憑證的修改,所以將真正的結(jié)轉(zhuǎn)功能放置在服務(wù)器或電腦客戶端進(jìn)行,防止出現(xiàn)審計錯誤。
圖6 損益結(jié)轉(zhuǎn)流程圖
在審核期間損益結(jié)轉(zhuǎn)步驟中,可以讓財務(wù)主管或有權(quán)限的工作人員在電腦客戶端上進(jìn)行審核并進(jìn)行后續(xù)步驟操作,生成的數(shù)據(jù)提交系統(tǒng)服務(wù)器處理。
3.5數(shù)據(jù)預(yù)取
當(dāng)用戶在移動端獲取信息時,信息量可能會相當(dāng)龐大,例如本月的銷售訂單統(tǒng)計明細(xì)所包含的內(nèi)容可能就有成百上千條,但是這些信息不可能由系統(tǒng)一次性提供。為了減少用戶查詢信息時系統(tǒng)響應(yīng)時間,可以采用數(shù)據(jù)預(yù)取技術(shù)[8],即在當(dāng)前用戶查詢信息的同時,將下一頁的信息進(jìn)行預(yù)取,以節(jié)省系統(tǒng)響應(yīng)時間。數(shù)據(jù)預(yù)取的鏈表模型如圖7所示。使用兩個緩沖區(qū),一個為當(dāng)前頁面的數(shù)據(jù),另一個為預(yù)取頁面的數(shù)據(jù)。之前已顯示的頁面依靠系統(tǒng)的緩存來實現(xiàn),這樣相比于設(shè)置三個緩沖區(qū)即當(dāng)前頁、預(yù)取頁和已讀頁,更節(jié)省系統(tǒng)資源,可以減小數(shù)據(jù)預(yù)取的成本。
圖7數(shù)據(jù)預(yù)取鏈表
系統(tǒng)使用Spring+Struts+Hibernate框架來實現(xiàn)服務(wù)器端。Spring[9]是一個分層的輕量級開源框架,其核心是控制反轉(zhuǎn)和面向切面,便于編程與代碼管理;Struts[10]是基于MVC的框架,提升了開發(fā)效率并便于后期維護(hù);Hibernate[11]是一個對象關(guān)系映射框架,對于完成數(shù)據(jù)持久化起到關(guān)鍵作用。使用三者的整合框架,更加便于實現(xiàn)網(wǎng)絡(luò)與系統(tǒng)管理。
若系統(tǒng)僅在小范圍內(nèi)使用,不存在訪問延遲,系統(tǒng)響應(yīng)慢等情況;若將系統(tǒng)部署在較大的范圍內(nèi),有大量的客戶端訪問服務(wù)器時,可能會造成上述情況的發(fā)生,此時可以考慮采用負(fù)載均衡[12]。系統(tǒng)所包含的模塊主要有物流和財務(wù)兩大部分且之間關(guān)聯(lián)性較弱,可以考慮部署在不同的服務(wù)器上。
圖8 客戶端登陸界面
本文設(shè)計的系統(tǒng)其客戶端在Android4.2.1 HM2013022和華為Y516-T00設(shè)備上實現(xiàn);服務(wù)器端則采用Spring2.5、Struts2.1和Hibernate4.2的整合框架構(gòu)建,運(yùn)行在Windows7操作系統(tǒng)下;整個開發(fā)過程在Eclipse4.3(kepler)和AndroidSDK上實現(xiàn)。數(shù)據(jù)庫使用SQLServer2008。將數(shù)據(jù)庫安裝并配置好之后,再將服務(wù)器端運(yùn)行在Tomcat v7.0上并實現(xiàn)相應(yīng)程序,此時就可以使用手機(jī)客戶端登錄系統(tǒng)了??蛻舳说牡卿浗缑嫒鐖D8所示。用戶登錄之后就可以正常使用各項功能了。
需要注意的是,現(xiàn)在還有很多的企業(yè)使用WindowsXP系統(tǒng),在這一操作系統(tǒng)下最好使用SQLServer2005,其他版本兼容性較差;同時,在使用本系統(tǒng)時可能會將服務(wù)器連接在局域網(wǎng)內(nèi),隨著服務(wù)器IP地址的變化,此時用戶需注意在登錄客戶端時手動輸入目標(biāo)的IP地址,以免連接不到服務(wù)器。
本文設(shè)計和實現(xiàn)了一種基于Android的物流與財務(wù)管理系統(tǒng),并對該系統(tǒng)的功能進(jìn)行了分析。系統(tǒng)將一般企業(yè)內(nèi)的物流和財務(wù)等主流業(yè)務(wù)進(jìn)行整合,并實現(xiàn)在移動端實時管理數(shù)據(jù),具有方便、便攜和靈活等優(yōu)點(diǎn),為銷售和財務(wù)人員的工作帶來便利,同時對于企業(yè)資源管理與優(yōu)化起到十分關(guān)鍵的作用。
與此同時系統(tǒng)還需要進(jìn)一步的完善。例如,在系統(tǒng)中添加員工簽到和企業(yè)內(nèi)部郵箱等功能,以提升用戶體驗;同時,添加角色權(quán)限,以保證企業(yè)信息的安全性。
[1] 郭建儐,蔡雪松.基于Android平臺的公交信息發(fā)布終端軟件的設(shè)計與實現(xiàn)[J].計算機(jī)應(yīng)用與軟件,2014,31(9):322-324,333.
[2] 李佳,陳亞軍,何先波.財務(wù)管理系統(tǒng)設(shè)計與實現(xiàn)[J].軟件導(dǎo)刊,2015,14(1):111-112.
[3] 黃彬華.Android系統(tǒng)架構(gòu)[EB/OL].2013.http://book.51cto.com/art/201311/415363.htm.
[4] Meier R.Android4高級編程[M].北京.清華大學(xué)出版社,2013.
[5] 李紅娟.企業(yè)成本核算中的配比原則[J].會計之友,2015,2(1):55-57.
[6] IT技術(shù)論壇.成本計算方法[EB/OL].2014.http://www.itpub.net/thread-810008-1-1.html.
[7] 中國會計社區(qū).月末結(jié)轉(zhuǎn)流程[EB/OL].2013.http://bbs.canet.com.cn/thread-536060-1-1.html.
[8] 高萌,王霓虹,李丹,等.一種基于模版的數(shù)據(jù)預(yù)取和緩存算法[J].計算機(jī)應(yīng)用研究,2014,31(11):3240-3246.
[9] Craig Walls.Spring in Action[M].北京.人民郵電出版社,2008.
[10] Brawn,Davis.Struts2[M].北京.人民郵電出版社,2010.
[11] James Elliott.精通Hibernate[M].北京.機(jī)械工業(yè)出版社,2009.
[12] 李燕歌,張志斌,王娜.基于負(fù)載均衡的MapReduce后備任務(wù)上限自適應(yīng)算法[J].計算機(jī)應(yīng)用研究,2015,32(1):67-70.
DESIGN AND IMPLEMENTATION OF LOGISTICS AND FINANCIAL MANAGEMENT SYSTEM BASED ON ANDROID
Kang XinyuGeng HengshanZhai DannaFu Kun
(CollegeofComputerScienceandSoftware,HebeiUniversityofTechnology,Tianjin300401,China)
For such the case that the logistics and financial information management system of most enterprises usually runs on the client computer, it is not convenient for sales and financial personnel to make data collection and analysis timely, we propose to develop an Android platform-based logistics and financial management system on mobile terminals such as mobile phones. According to practical demand, the system is divided into client and server, and then we analyse the relevant algorithms and designs, such as costing method and profit and loss carrying over and data prefetch designs. Experimental results show that the system can meet the sales and financial personnel to check, analyse and deal with the demands of related information at any time.
AndroidLogistics managementFinancial systemCostingProfit and loss carrying over
2015-03-15。國家自然科學(xué)基金項目(31100711)??店坑?,碩士,主研領(lǐng)域:嵌入式系統(tǒng),手機(jī)應(yīng)用開發(fā)與算法。耿恒山,教授。翟丹娜,碩士。富坤,博士。
TP311
A
10.3969/j.issn.1000-386x.2016.08.070