(附源码)ssm财务管理系统 毕业设计 282251
SSM財(cái)務(wù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
摘要
現(xiàn)實(shí)生活中,許多人風(fēng)險(xiǎn)意識(shí)不足,對(duì)個(gè)人財(cái)務(wù)風(fēng)險(xiǎn)管理的認(rèn)識(shí)就更少。在進(jìn)行財(cái)務(wù)決策時(shí),更多依靠的是以往經(jīng)驗(yàn)和個(gè)人判斷,對(duì)決策對(duì)象缺乏細(xì)致的認(rèn)知、分析和推斷,更不用提風(fēng)險(xiǎn)防范與控制了。然而,財(cái)務(wù)風(fēng)險(xiǎn)是客觀存在的,如何減少個(gè)人財(cái)務(wù)風(fēng)險(xiǎn)損失,增加個(gè)人財(cái)務(wù)風(fēng)險(xiǎn)收益,值得探討。
財(cái)務(wù)管理系統(tǒng)主要功能模塊包括用戶管理、理財(cái)產(chǎn)品管理、財(cái)務(wù)支出、分類信息管理等,采取面對(duì)對(duì)象的開(kāi)發(fā)模式進(jìn)行軟件的開(kāi)發(fā)和硬體的架設(shè),能很好的滿足實(shí)際使用的需求,完善了對(duì)應(yīng)的軟體架設(shè)以及程序編碼的工作,采取MySQL作為后臺(tái)數(shù)據(jù)的主要存儲(chǔ)單元,采用SSM框架、JSP技術(shù)、Ajax技術(shù)進(jìn)行業(yè)務(wù)系統(tǒng)的編碼及其開(kāi)發(fā),實(shí)現(xiàn)了小程序的全部功能。本次報(bào)告,首先分析了研究的背景、作用、意義,為研究工作的合理性打下了基礎(chǔ)。針對(duì)財(cái)務(wù)管理系統(tǒng)的各項(xiàng)需求以及技術(shù)問(wèn)題進(jìn)行分析,證明了系統(tǒng)的必要性和技術(shù)可行性,然后對(duì)設(shè)計(jì)系統(tǒng)需要使用的技術(shù)軟件以及設(shè)計(jì)思想做了基本的介紹,最后來(lái)實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng)的部署與運(yùn)行。
關(guān)鍵詞:財(cái)務(wù)管理,SSM,數(shù)據(jù)庫(kù)
Design and implementation of SSM financial management system ???????????????????abstract
In real life, many people lack risk awareness and have less understanding of personal financial risk management. When making financial decisions, they rely more on past experience and personal judgment, and lack detailed cognition, analysis and inference of the decision-making object, let alone risk prevention and control. However, financial risk exists objectively. How to reduce personal financial risk loss and increase personal financial risk income is worth discussing.
The main functional modules of the financial management system include user management, financial product management, financial expenditure, classified information management, etc. the object-oriented development mode is adopted for software development and hardware erection, which can well meet the needs of actual use, improve the corresponding software architecture and program coding, take MySQL as the main storage unit of background data, adopt SSM framework, JSP technology Ajax technology encodes and develops the business system, and realizes all the functions of the applet. This report first analyzes the background, function and significance of the research, which lays a foundation for the rationality of the research work. This paper analyzes the various requirements and technical problems of the financial management system, proves the necessity and technical feasibility of the system, then makes a basic introduction to the technical software and design ideas needed to design the system, and finally realizes the deployment and operation of the financial management system.
Key words:?financial management, SSM, database
目 ?錄
第1章?緒???論
1.1課題背景
1.2 研究?jī)?nèi)容
1.3 開(kāi)發(fā)工具及技術(shù) 3
第2章 系統(tǒng)分析 7
2.1 可行性分析 7
2.2總體設(shè)計(jì)原則 7
2.3 系統(tǒng)需求分析 8
2.4 業(yè)務(wù)流程分析 8
第3章 系統(tǒng)設(shè)計(jì) 11
3.1 系統(tǒng)概要設(shè)計(jì) 11
3.2系統(tǒng)結(jié)構(gòu)設(shè)計(jì) 11
3.3 數(shù)據(jù)庫(kù)設(shè)計(jì) 12
第4章系統(tǒng)實(shí)現(xiàn)
4.1系統(tǒng)功能模塊
4.2管理員功能模塊 22
4.3用戶功能模塊 24
第5章軟件測(cè)試
5.1軟件測(cè)試的重要性
5.2測(cè)試實(shí)例的研究與選擇
5.3測(cè)試環(huán)境與測(cè)試條件
5.4系統(tǒng)運(yùn)行情況
5.5系統(tǒng)評(píng)價(jià)
第6章?總結(jié) 30
參考文獻(xiàn): 31
致謝 33
1.1課題背景
財(cái)務(wù)經(jīng)營(yíng)目標(biāo)與財(cái)務(wù)能力不協(xié)調(diào)。當(dāng)今耳熟能詳?shù)囊痪湓捑褪?#xff0c;“你不理財(cái),財(cái)不理你”,很多人在不具備相應(yīng)的財(cái)務(wù)能力時(shí),將財(cái)務(wù)經(jīng)營(yíng)目標(biāo)定得很高,把自己的血汗錢放到了收益率很高的理財(cái)產(chǎn)品上,認(rèn)為這些理財(cái)產(chǎn)品是有保障的,比炒股收益穩(wěn)定又保險(xiǎn)。但是,在理財(cái)?shù)倪x擇上,選擇的是非保本型的產(chǎn)品,結(jié)果賠得一塌糊涂。
在個(gè)人財(cái)務(wù)活動(dòng)中,對(duì)收益的追求無(wú)可厚非,但是由于財(cái)務(wù)風(fēng)險(xiǎn)存在的客觀性、財(cái)務(wù)環(huán)境和財(cái)務(wù)活動(dòng)本身的復(fù)雜性、人們對(duì)風(fēng)險(xiǎn)認(rèn)識(shí)的滯后性等原因,個(gè)人財(cái)務(wù)活動(dòng)中的風(fēng)險(xiǎn)損失和風(fēng)險(xiǎn)收益很難平衡,這就需要進(jìn)行財(cái)務(wù)管理。
1.2 研究?jī)?nèi)容
財(cái)務(wù)管理系統(tǒng)的開(kāi)發(fā)及實(shí)現(xiàn),所需要的工作內(nèi)容:
(1)首先是確定選題,確定好所要做的系統(tǒng),并對(duì)系統(tǒng)的背景及現(xiàn)在面臨的一些問(wèn)題等進(jìn)行系統(tǒng)的初步確認(rèn)。
(2)系統(tǒng)確認(rèn)完成后,結(jié)合系統(tǒng)開(kāi)發(fā)的需求進(jìn)行確認(rèn)系統(tǒng)開(kāi)發(fā)所使用的技術(shù),財(cái)務(wù)管理系統(tǒng)的開(kāi)發(fā)使用SSM框架,數(shù)據(jù)庫(kù)進(jìn)行平臺(tái)的搭建開(kāi)發(fā),確認(rèn)好使用的技術(shù)進(jìn)行技術(shù)分析,所使用的技術(shù)是否可以完成系統(tǒng)的實(shí)現(xiàn)。
(3)確定好系統(tǒng)使用的技術(shù),進(jìn)行在線確認(rèn)系統(tǒng)所劃分的用戶角色,并且根據(jù)用戶角色劃分確定所要設(shè)計(jì)的功能模塊,對(duì)財(cái)務(wù)管理系統(tǒng)的設(shè)計(jì)主要?jiǎng)澐謩e為管理員和用戶角色,并所使用的功能模塊也相應(yīng)不同,但是系統(tǒng)的數(shù)據(jù)庫(kù)實(shí)現(xiàn)的內(nèi)容是交互的,用戶可以隨時(shí)根據(jù)自己的需求進(jìn)行信息查詢,對(duì)于系統(tǒng)工作人員可以根據(jù)自己的分管內(nèi)容進(jìn)行在線信息的處理及操作,管理員獲取到所有用戶的詳細(xì)數(shù)據(jù)信息,并根據(jù)需求進(jìn)行第一時(shí)間處理解決。
(4)系統(tǒng)的功能模塊確認(rèn)完成后進(jìn)行程序及界面的設(shè)計(jì),設(shè)計(jì)完成后,并且通過(guò)測(cè)試來(lái)判斷程序是否完善,對(duì)于系統(tǒng)測(cè)試,需要不同的用戶進(jìn)行不同的內(nèi)容編輯及提交,及使用不同的測(cè)試方式找出程序中存在的漏洞,并對(duì)程序出現(xiàn)的漏洞問(wèn)題進(jìn)行在線解決處理,如果測(cè)試系統(tǒng)沒(méi)有任何問(wèn)題時(shí),可以將系統(tǒng)上傳進(jìn)行正式操作使用。
1.3 開(kāi)發(fā)技術(shù)
本系統(tǒng)前端部分基于MVVM模式進(jìn)行開(kāi)發(fā),采用B/S模式,后端部分基于Java的ssm框架進(jìn)行開(kāi)發(fā)。
前端部分:前端框架采用了比較流行的漸進(jìn)式JavaScript框架Vue.js。使用Vue-Router和Vuex實(shí)現(xiàn)動(dòng)態(tài)路由和全局狀態(tài)管理,Ajax實(shí)現(xiàn)前后端通信,Element UI組件庫(kù)使頁(yè)面快速成型,項(xiàng)目前端通過(guò)柵格布局實(shí)現(xiàn)響應(yīng)式,可適應(yīng)PC端、平板端、手機(jī)端等不同屏幕大小尺寸的完美布局展示。
后端部分:采用ssm作為開(kāi)發(fā)框架,同時(shí)集成MyBatis、Redis等相關(guān)技術(shù)。
1.3.1ssm框架介紹
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個(gè)開(kāi)源框架整合而成(SpringMVC是Spring中的部分內(nèi)容)。常作為數(shù)據(jù)源較簡(jiǎn)單的web項(xiàng)目的框架。
1.1 Spring
Spring就像是整個(gè)項(xiàng)目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數(shù)去調(diào)用實(shí)體類的構(gòu)造方法來(lái)實(shí)例化對(duì)象。也可以稱之為項(xiàng)目中的粘合劑。
Spring的核心思想是IoC(控制反轉(zhuǎn)),即不再需要程序員去顯式地`new`一個(gè)對(duì)象,而是讓Spring框架幫你來(lái)完成這一切。
1.2 SpringMVC
SpringMVC在項(xiàng)目中攔截用戶請(qǐng)求,它的核心Servlet即DispatcherServlet承擔(dān)中介或是前臺(tái)這樣的職責(zé),將用戶請(qǐng)求通過(guò)HandlerMapping去匹配Controller,Controller就是具體對(duì)應(yīng)請(qǐng)求所執(zhí)行的操作。SpringMVC相當(dāng)于SSH框架中struts。
1.3 mybatis
mybatis是對(duì)jdbc的封裝,它讓數(shù)據(jù)庫(kù)底層操作變的透明。mybatis的操作都是圍繞一個(gè)sqlSessionFactory實(shí)例展開(kāi)的。mybatis通過(guò)配置文件關(guān)聯(lián)到各實(shí)體類的Mapper文件,Mapper文件中配置了每個(gè)類對(duì)數(shù)據(jù)庫(kù)所需進(jìn)行的sql語(yǔ)句映射。在每次與數(shù)據(jù)庫(kù)交互時(shí),通過(guò)sqlSessionFactory拿到一個(gè)sqlSession,再執(zhí)行sql命令。
頁(yè)面發(fā)送請(qǐng)求給控制器,控制器調(diào)用業(yè)務(wù)層處理邏輯,邏輯層向持久層發(fā)送請(qǐng)求,持久層與數(shù)據(jù)庫(kù)交互,后將結(jié)果返回給業(yè)務(wù)層,業(yè)務(wù)層將處理邏輯發(fā)送給控制器,控制器再調(diào)用視圖展現(xiàn)數(shù)據(jù)。
?
1.3.2?MySQL數(shù)據(jù)庫(kù)
科技的進(jìn)步,給日常帶來(lái)許多便利:教室的投影器用到了虛擬成像技術(shù),數(shù)碼相機(jī)用到了光電檢測(cè)技術(shù),比如超市貨物進(jìn)出庫(kù)的記錄需要一個(gè)信息倉(cāng)庫(kù)。這個(gè)信息倉(cāng)庫(kù)就是數(shù)據(jù)庫(kù),而這次的財(cái)務(wù)管理系統(tǒng)也需要這項(xiàng)技術(shù)的支持。
用MySQL這個(gè)軟件,是因?yàn)樗芙邮芏鄠€(gè)使用者訪問(wèn),而且里面存在Archive等。它會(huì)先把數(shù)據(jù)進(jìn)行分類,然后分別保存在表里,這樣的特別操作就會(huì)提高數(shù)據(jù)管理系統(tǒng)自身的速度,讓數(shù)據(jù)庫(kù)能被靈活運(yùn)用。MySQL的代碼是公開(kāi)的,而且允許別人二次編譯升級(jí)。這個(gè)特點(diǎn)能夠降低使用者的成本,再搭配合適的軟件后形成一個(gè)良好的網(wǎng)站系統(tǒng)。雖然它有缺點(diǎn),但是綜合各方面來(lái)說(shuō),它是使用者的主流運(yùn)用的對(duì)象。
1.3.3?B/S結(jié)構(gòu)
BROWSER/SERVER程序架構(gòu)方式是使用電腦中安裝的各種瀏覽器來(lái)進(jìn)行訪問(wèn)和使用的,相比C/S的程序結(jié)構(gòu)不需要進(jìn)行程序的安裝就可以直接使用。BROWSER/SERVER架構(gòu)的運(yùn)行方式是在遠(yuǎn)程的服務(wù)器上進(jìn)行安裝一個(gè),然后在任何接入互聯(lián)網(wǎng)的電腦上訪問(wèn)和使用。BROWSER/SERVER架構(gòu)的開(kāi)發(fā)方式給用戶帶來(lái)了極大的便利,在任何時(shí)間和地點(diǎn)都可以使用開(kāi)發(fā)的程序系統(tǒng)。
在B/S的結(jié)構(gòu)中,用戶可以在任何可以上網(wǎng)的地方訪問(wèn)和使用系統(tǒng)網(wǎng)站的功能,沒(méi)有地域和時(shí)間等方面的限制,B/S結(jié)構(gòu)是把程序完整放置到計(jì)算機(jī)網(wǎng)絡(luò)的服務(wù)器上,通過(guò)計(jì)算機(jī)互聯(lián)網(wǎng)給用戶提供遠(yuǎn)程的網(wǎng)絡(luò)服務(wù)。在三層體系結(jié)構(gòu)的B/S系統(tǒng)中,通過(guò)瀏覽器,會(huì)員可以對(duì)很多服務(wù)器發(fā)出請(qǐng)求, B/S系統(tǒng)會(huì)很大程度的降低工作量,用戶只需要安裝運(yùn)行較少的用戶端即可,大量的工作將由服務(wù)器承擔(dān),另外,服務(wù)器也完成包括訪問(wèn)數(shù)據(jù)庫(kù),執(zhí)行應(yīng)用程序的工作等等。
B/S結(jié)構(gòu)主要有三層,分別為數(shù)據(jù)層、控制邏輯層和視圖層。用戶通過(guò)視圖層,讓控制層調(diào)用數(shù)據(jù)層的數(shù)據(jù),從而達(dá)到整個(gè)訪問(wèn)過(guò)程。三層相互獨(dú)立,維護(hù)方便,使用安全,三層有互相調(diào)用,提高效率。
1.3.4?B/S體系工作原理
B/S架構(gòu)采取瀏覽器請(qǐng)求,服務(wù)器響應(yīng)的工作模式。
用戶可以通過(guò)瀏覽器去訪問(wèn)Internet上由Web服務(wù)器產(chǎn)生的文本、數(shù)據(jù)、圖片、動(dòng)畫(huà)、視頻點(diǎn)播和聲音等信息;
而每一個(gè)Web服務(wù)器又可以通過(guò)各種方式與數(shù)據(jù)庫(kù)服務(wù)器連接,大量的數(shù)據(jù)實(shí)際存放在數(shù)據(jù)庫(kù)服務(wù)器中;
從Web服務(wù)器上下載程序到本地來(lái)執(zhí)行,在下載過(guò)程中若遇到與數(shù)據(jù)庫(kù)有關(guān)的指令,由Web服務(wù)器交給數(shù)據(jù)庫(kù)服務(wù)器來(lái)解釋執(zhí)行,并返回給Web服務(wù)器,Web服務(wù)器又返回給用戶。在這種結(jié)構(gòu)中,將許許多多的網(wǎng)連接到一塊,形成一個(gè)巨大的網(wǎng),即全球網(wǎng)。而各個(gè)企業(yè)可以在此結(jié)構(gòu)的基礎(chǔ)上建立自己的Internet。
在 B/S 模式中,用戶是通過(guò)瀏覽器針對(duì)許多分布于網(wǎng)絡(luò)上的服務(wù)器進(jìn)行請(qǐng)求訪問(wèn)的,瀏覽器的請(qǐng)求通過(guò)服務(wù)器進(jìn)行處理,并將處理結(jié)果以及相應(yīng)的信息返回給瀏覽器,其他的數(shù)據(jù)加工、請(qǐng)求全部都是由Web Server完成的。通過(guò)該框架結(jié)構(gòu)以及植入于操作系統(tǒng)內(nèi)部的瀏覽器,該結(jié)構(gòu)已經(jīng)成為了當(dāng)今軟件應(yīng)用的主流結(jié)構(gòu)模式。
1.3.5 ?ssm框架各層關(guān)系
DAO層、Service層這兩個(gè)層次都可以單獨(dú)開(kāi)發(fā),互相的耦合度很低,完全可以獨(dú)立進(jìn)行,這樣的一種模式在開(kāi)發(fā)大項(xiàng)目的過(guò)程中尤其有優(yōu)勢(shì)。
Controller,View層因?yàn)轳詈隙缺容^高,因而要結(jié)合在一起開(kāi)發(fā),但是也可以看作一個(gè)整體獨(dú)立于前兩個(gè)層進(jìn)行開(kāi)發(fā)。這樣,在層與層之前只需要知道接口的定義,調(diào)用接口即可完成所需要的邏輯單元應(yīng)用,一切顯得非常清晰簡(jiǎn)單。
1.JavaScript 運(yùn)行模式:
JavaScript是一種屬于網(wǎng)絡(luò)的高級(jí)腳本語(yǔ)言,已經(jīng)被廣泛用于Web應(yīng)用開(kāi)發(fā),常用來(lái)為網(wǎng)頁(yè)添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過(guò)嵌入在HTML中來(lái)實(shí)現(xiàn)自身的功能的。
1.1是一種解釋性腳本語(yǔ)言(代碼不進(jìn)行預(yù)編譯)。
1.2主要用來(lái)向HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)頁(yè)面添加交互行為。
1.3可以直接嵌入HTML頁(yè)面,但寫(xiě)成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。
1.4跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行(如Windows、Linux、Mac、Android、iOS等)。
1.5 JavaScript腳本語(yǔ)言同其他語(yǔ)言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運(yùn)算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來(lái)處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
系統(tǒng)分析
2.1?可行性分析
可行性分析的目的是確定一個(gè)系統(tǒng)是否有必要開(kāi)發(fā)、確定系統(tǒng)是否能以最小的代價(jià)實(shí)現(xiàn)。其工作主要有三個(gè)方面,分別是技術(shù)、經(jīng)濟(jì)和社會(huì)三方面的可行性。我會(huì)從這三個(gè)方面對(duì)財(cái)務(wù)管理系統(tǒng)進(jìn)行詳細(xì)的分析。
2.1.1技術(shù)可行性
該系統(tǒng)主要使用SSM框架啊和MySQL數(shù)據(jù)庫(kù)進(jìn)行開(kāi)發(fā),Java易于學(xué)習(xí)和使用靈活。在校期間也接觸過(guò)SSM和MySQL數(shù)據(jù)庫(kù)的課程,對(duì)此有一定的開(kāi)發(fā)經(jīng)驗(yàn),因此開(kāi)發(fā)難度不高,所以從技術(shù)上來(lái)說(shuō)是可行的。
2.1.2經(jīng)濟(jì)可行性
本系統(tǒng)設(shè)計(jì)所選擇的開(kāi)發(fā)工具和服務(wù)器都是免費(fèi)的開(kāi)源軟件,又或者是適合學(xué)生使用的免費(fèi)版本,并不需要支付費(fèi)用,而且由作者本人單獨(dú)完成,也不存在團(tuán)隊(duì)費(fèi)用,幾乎沒(méi)有經(jīng)濟(jì)成本,具備經(jīng)濟(jì)可行性。
2.1.3社會(huì)可行性
社會(huì)可行性主要包括法律和用戶兩個(gè)方面,下面將從這兩方面進(jìn)行分析。
(1)法律因素
本系統(tǒng)是學(xué)習(xí)開(kāi)發(fā)所制作的程序,并不用作商業(yè)用途,是在根據(jù)實(shí)際調(diào)研的結(jié)果結(jié)合現(xiàn)有的考研互助系統(tǒng)后得出的,而且系統(tǒng)制作的全部過(guò)程都是在個(gè)人的工作電腦中完成的,使用的都是開(kāi)源和免費(fèi)的開(kāi)發(fā)環(huán)境、分析軟件和數(shù)據(jù)庫(kù),不存在侵權(quán)問(wèn)題。
(2)用戶可行性
操作人員或者客戶只需要具備一定的windows電腦操作常識(shí),不需要精通計(jì)算機(jī)技能。此外系統(tǒng)管理人員,只需要在windows常識(shí)之上再熟悉下使用Tomcat服務(wù)器的操作流程,只要掌握一定的計(jì)算機(jī)知識(shí)即可,在正式上線運(yùn)營(yíng)之前,僅需要對(duì)操作人員進(jìn)行簡(jiǎn)單的熟悉流程培訓(xùn)即可。所以從用戶可行性上也是可行的。
2.2總體設(shè)計(jì)原則
一個(gè)系統(tǒng)要在開(kāi)發(fā)和維護(hù)的過(guò)程中方便使用,必須采取一定的設(shè)計(jì)原則,其主要設(shè)計(jì)原則有:
簡(jiǎn)單性:系統(tǒng)功能簡(jiǎn)單易懂,只需要掌握基本的計(jì)算機(jī)操作能力即可使用。
針對(duì)性:針對(duì)特定的用戶,沒(méi)有多余的其他功能,使用戶可以專心使用。
實(shí)用性:能夠滿足用戶查看理財(cái)產(chǎn)品等方面的需求。
先進(jìn)性:本系統(tǒng)的代碼采用讀取數(shù)據(jù)的方式,方便后續(xù)開(kāi)發(fā)、拓展。
2.3 系統(tǒng)需求分析
財(cái)務(wù)管理系統(tǒng)需要滿足的需求有以下幾個(gè):
1.信息獲取方便,用戶可在網(wǎng)頁(yè)上快速瀏覽到新的信息
2.查看理財(cái)產(chǎn)品信息,單獨(dú)查看理財(cái)產(chǎn)品信息等。
3.注冊(cè)登錄,需要吸引用戶,即通過(guò)注冊(cè)來(lái)提高用戶的存留率。
4.歷史記錄,用戶可以查看自己歷史搜索信息以及其他操作。
5.修改用戶信息,可以修改用戶密碼或者用戶名等一些個(gè)性化操作。
6.管理員功能,管理員可以對(duì)用戶或者財(cái)務(wù)收入信息、財(cái)務(wù)支出信息、理財(cái)產(chǎn)品等進(jìn)行管理。
7.系統(tǒng)安全,操作簡(jiǎn)便,不過(guò)于復(fù)雜。
8.系統(tǒng)可以穩(wěn)定運(yùn)行,不存在卡頓等問(wèn)題造成用戶反感。
2.4 業(yè)務(wù)流程分析
2.4.1登錄流程
登錄模塊主要滿足管理員以及用戶的權(quán)限登錄,用戶登錄流程圖如圖2-1所示。
?
圖2-1?登錄流程圖
2.4.2注冊(cè)流程
未有賬號(hào)的用戶可進(jìn)入注冊(cè)界面進(jìn)行注冊(cè)操作,用戶注冊(cè)流程圖如圖2-2所示。
?
圖2-2?注冊(cè)流程圖
2.4.3添加信息流程
用戶在添加信息時(shí),信息編號(hào)自動(dòng)生成,系統(tǒng)會(huì)對(duì)添加的信息進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)則添加至數(shù)據(jù)庫(kù),添加信息成功,反之添加失敗。添加信息流程如圖2-3所示。
?
圖2-3?添加信息流程圖
2.4.4刪除信息流程
用戶可選擇要?jiǎng)h除的信息進(jìn)行信息刪除操作,在刪除信息時(shí)系統(tǒng)提示是否確定刪除信息,是則刪除信息成功,系統(tǒng)數(shù)據(jù)庫(kù)將信息進(jìn)行刪除。刪除信息流程圖如圖2-4所示。
?
圖2-4刪除信息流程圖
3.1 系統(tǒng)概要設(shè)計(jì)
本財(cái)務(wù)管理系統(tǒng)選擇B/S結(jié)構(gòu)(Browser/Server,瀏覽器/服務(wù)器結(jié)構(gòu))和基于Web服務(wù)兩種模式。適合在互聯(lián)網(wǎng)上進(jìn)行操作,只要用戶能連網(wǎng),任何時(shí)間、任何地點(diǎn)都可以進(jìn)行系統(tǒng)的操作使用。系統(tǒng)工作原理圖如圖3-1所示:
?
圖3-1 系統(tǒng)工作原理圖
3.2系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
整個(gè)系統(tǒng)是由多個(gè)功能模塊組合而成的,要將所有的功能模塊都一一列舉出來(lái),然后進(jìn)行逐個(gè)的功能設(shè)計(jì),使得每一個(gè)模塊都有相對(duì)應(yīng)的功能設(shè)計(jì),然后進(jìn)行系統(tǒng)整體的設(shè)計(jì)。
本財(cái)務(wù)管理系統(tǒng)結(jié)構(gòu)圖如圖3-2所示。
?
圖3-2?財(cái)務(wù)管理系統(tǒng)結(jié)構(gòu)圖
3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)可以說(shuō)是所有軟件的根本,如果數(shù)據(jù)庫(kù)存在缺陷,那么會(huì)導(dǎo)致系統(tǒng)開(kāi)發(fā)的不順利、維護(hù)困難、用戶使用不順暢等一系列問(wèn)題,嚴(yán)重時(shí)將會(huì)直接損害企業(yè)的利益,同時(shí)在開(kāi)發(fā)完成后,數(shù)據(jù)庫(kù)缺陷也更加難以解決。所以必須要對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)重點(diǎn)把握,做到認(rèn)真細(xì)致。因此,數(shù)據(jù)庫(kù)設(shè)計(jì)是這個(gè)財(cái)務(wù)管理系統(tǒng)的重點(diǎn)要素。
3.3.1概念結(jié)構(gòu)設(shè)計(jì)
(1)管理員實(shí)體屬性圖如下圖3-3所示
?
圖3-3管理員實(shí)體屬性圖
(2)?財(cái)務(wù)支出實(shí)體屬性如下圖3-4所示
?
圖3-4財(cái)務(wù)支出實(shí)體屬性圖
(3)?人情賬本實(shí)體屬性如下圖3-5所示
?
圖3-5人情賬本實(shí)體屬性圖
3.3.2數(shù)據(jù)庫(kù)表設(shè)計(jì)
將數(shù)據(jù)庫(kù)概念設(shè)計(jì)的E-R圖轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫(kù)。在關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)關(guān)系是由數(shù)據(jù)表組成,但是表的結(jié)構(gòu)表現(xiàn)在表的字段上。
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| user_account_id | int | 11 | 是 | 是 | 用戶賬戶ID |
| user_number | varchar | 64 | 否 | 否 | 用戶編號(hào) |
| user_name | varchar | 64 | 否 | 否 | 用戶姓名 |
| gender | varchar | 64 | 否 | 否 | 性別 |
| age | varchar | 64 | 否 | 否 | 年齡 |
| personal_signature | varchar | 64 | 否 | 否 | 個(gè)性簽名 |
| total_balance | varchar | 64 | 否 | 否 | 總余額 |
| consumption_suggestions | text | 0 | 否 | 否 | 消費(fèi)建議 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| personal_ledger_id | int | 11 | 是 | 是 | 人情賬本ID |
| bill_no | varchar | 64 | 否 | 否 | 賬單編號(hào) |
| bill_type | varchar | 64 | 否 | 否 | 賬單類型 |
| bill_amount | varchar | 64 | 否 | 否 | 賬單金額 |
| billing_object | varchar | 64 | 否 | 否 | 賬單對(duì)象 |
| statement_date_ | date | 0 | 否 | 否 | 賬單日期 |
| user_number | int | 11 | 否 | 否 | 用戶編號(hào) |
| user_name | varchar | 64 | 否 | 否 | 用戶姓名 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| financial_products_id | int | 11 | 是 | 是 | 理財(cái)產(chǎn)品ID |
| product_name | varchar | 64 | 否 | 否 | 產(chǎn)品名稱 |
| registration_code | varchar | 64 | 否 | 否 | 登記編碼 |
| issuer | varchar | 64 | 否 | 否 | 發(fā)行機(jī)構(gòu) |
| operation_pattern_ | varchar | 64 | 否 | 否 | 運(yùn)作模式 |
| raising_method | varchar | 64 | 否 | 否 | 募集方式 |
| term_type | varchar | 64 | 否 | 否 | 期限類型 |
| raised_currency | varchar | 64 | 否 | 否 | 募集幣種 |
| nature_of_investment | varchar | 64 | 否 | 否 | 投資性質(zhì) |
| risk_level | varchar | 64 | 否 | 否 | 風(fēng)險(xiǎn)等級(jí) |
| start_date_of_raising | date | 0 | 否 | 否 | 募集起始日期 |
| end_date_of_raising | date | 0 | 否 | 否 | 募集結(jié)束日期 |
| product_start_date | date | 0 | 否 | 否 | 產(chǎn)品起始日期 |
| product_end_date | date | 0 | 否 | 否 | 產(chǎn)品結(jié)束日期 |
| actual_days | int | 11 | 否 | 否 | 實(shí)際天數(shù) |
| regional_sale | varchar | 64 | 否 | 否 | 發(fā)售地區(qū) |
| hits | int | 11 | 是 | 否 | 點(diǎn)擊數(shù) |
| praise_len | int | 11 | 是 | 否 | 點(diǎn)贊數(shù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| financial_income_id | int | 11 | 是 | 是 | 財(cái)務(wù)收入ID |
| month | varchar | 64 | 否 | 否 | 月份 |
| revenue_number | varchar | 64 | 否 | 否 | 收入編號(hào) |
| income_type | varchar | 64 | 否 | 否 | 收入類型 |
| revenue_amount | varchar | 64 | 否 | 否 | 收入金額 |
| income_time | date | 0 | 否 | 否 | 收入時(shí)間 |
| user_number | int | 11 | 否 | 否 | 用戶編號(hào) |
| user_name | varchar | 64 | 否 | 否 | 用戶姓名 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| financial_expenditure_id | int | 11 | 是 | 是 | 財(cái)務(wù)支出ID |
| month | varchar | 64 | 否 | 否 | 月份 |
| expenditure_number | varchar | 64 | 否 | 否 | 支出編號(hào) |
| expenditure_type | varchar | 64 | 否 | 否 | 支出類型 |
| expenditure_amount | varchar | 64 | 否 | 否 | 支出金額 |
| expenditure_time | date | 0 | 否 | 否 | 支出時(shí)間 |
| user_number | int | 11 | 否 | 否 | 用戶編號(hào) |
| user_name | varchar | 64 | 否 | 否 | 用戶姓名 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| announcement_information_id | int | 11 | 是 | 是 | 公告信息ID |
| title_name | varchar | 64 | 否 | 否 | 標(biāo)題名稱 |
| publisher | varchar | 64 | 否 | 否 | 發(fā)布人 |
| announcement_annex | varchar | 255 | 否 | 否 | 公告附件 |
| announcement_content | text | 0 | 否 | 否 | 公告內(nèi)容 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| feedback_id | int | 11 | 是 | 是 | 意見(jiàn)反饋ID |
| feedback_title | varchar | 64 | 否 | 否 | 反饋標(biāo)題 |
| feedback_type | varchar | 64 | 否 | 否 | 反饋類型 |
| user_number | int | 11 | 否 | 否 | 用戶編號(hào) |
| user_name | varchar | 64 | 否 | 否 | 用戶姓名 |
| feedback_content | text | 0 | 否 | 否 | 反饋內(nèi)容 |
| feedback_reply | text | 0 | 否 | 否 | 反饋回復(fù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| classification_information_id | int | 11 | 是 | 是 | 分類信息ID |
| income_type | varchar | 64 | 否 | 否 | 收入類型 |
| expenditure_type | varchar | 64 | 否 | 否 | 支出類型 |
| term_type | varchar | 64 | 否 | 否 | 期限類型 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
第4章系統(tǒng)實(shí)現(xiàn)
4.1系統(tǒng)功能模塊
財(cái)務(wù)管理系統(tǒng),在用戶首頁(yè)可以查看公告消息內(nèi)容,如圖4-1所示。
????????? ? ? ? ? ? ? ? ? ? ? ? ?
?
圖4-1公告消息界面圖
??理財(cái)產(chǎn)品推薦,在此用戶可以查看理財(cái)產(chǎn)品推薦信息等,如圖4-2所示。
?
圖4-2理財(cái)產(chǎn)品推薦界面圖
理財(cái)產(chǎn)品推薦的邏輯代碼如下:
?@PostMapping("/add")
????@Transactional
????public Map<String, Object> add(HttpServletRequest request) throws IOException {
????????service.insert(service.readBody(request.getReader()));
????????return success(1);
????}
????@Transactional
????public Map<String, Object> addMap(Map<String,Object> map){
????????service.insert(map);
????????return success(1);
}
????public Map<String,Object> readBody(BufferedReader reader){
????????BufferedReader br = null;
????????StringBuilder sb = new StringBuilder("");
????????try{
????????????br = reader;
????????????String str;
????????????while ((str = br.readLine()) != null){
????????????????sb.append(str);
????????????}
????????????br.close();
????????????String json = sb.toString();
????????????return JSONObject.parseObject(json, Map.class);
????????}catch (IOException e){
????????????e.printStackTrace();
????????}finally{
????????????if (null != br){
????????????????try{
????????????????????br.close();
????????????????}catch (IOException e){
????????????????????e.printStackTrace();
????????????????}
????????????}
????????}
????????return null;
}
????public void insert(Map<String,Object> body){
????????StringBuffer sql = new StringBuffer("INSERT INTO ");
????????sql.append("`").append(table).append("`").append(" (");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
????????}
????????sql.deleteCharAt(sql.length()-1);
????????sql.append(") VALUES (");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????Object value = entry.getValue();
????????????if (value instanceof String){
????????????????sql.append("'").append(entry.getValue()).append("'").append(",");
????????????}else {
????????????????sql.append(entry.getValue()).append(",");
????????????}
????????}
????????sql.deleteCharAt(sql.length() - 1);
????????sql.append(")");
????????log.info("[{}] - 插入操作:{}",table,sql);
????????Query query = runCountSql(sql.toString());
????????query.executeUpdate();
????}
理財(cái)產(chǎn)品列表欄,在此頁(yè)面可以查看:產(chǎn)品名稱、登記編碼、發(fā)行機(jī)構(gòu)、運(yùn)作模式等,如圖4-3所示。在注冊(cè)頁(yè)面通過(guò)填寫(xiě)工號(hào)、用戶賬號(hào)、密碼、用戶姓名、手機(jī)等信息完成用戶注冊(cè),如圖4-4所示。
?
圖4-3理財(cái)產(chǎn)品列表界面圖
?
圖4-4注冊(cè)界面圖
用戶注冊(cè)邏輯代碼如下:
/**
?????* 注冊(cè)
?????* @param user
?????* @return
?????*/
????@PostMapping("register")
????public Map<String, Object> signUp(@RequestBody User user) {
????????// 查詢用戶
????????Map<String, String> query = new HashMap<>();
????????query.put("username",user.getUsername());
????????List list = service.select(query, new HashMap<>()).getResultList();
????????if (list.size()>0){
????????????return error(30000, "用戶已存在");
????????}
????????user.setUserId(null);
????????user.setPassword(service.encryption(user.getPassword()));
????????service.save(user);
????????return success(1);
}
/**
?????* 用戶ID:[0,8388607]用戶獲取其他與用戶相關(guān)的數(shù)據(jù)
?????*/
????@Id
????@GeneratedValue(strategy = GenerationType.IDENTITY)
????@Column(name = "user_id")
????private Integer userId;
????/**
?????* 賬戶狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷)
?????*/
????@Basic
????@Column(name = "state")
????private Integer state;
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權(quán)限
?????*/
????@Basic
????@Column(name = "user_group")
????private String userGroup;
????/**
?????* 上次登錄時(shí)間:
?????*/
????@Basic
????@Column(name = "login_time")
????private Timestamp loginTime;
????/**
?????* 手機(jī)號(hào)碼:[0,11]用戶的手機(jī)號(hào)碼,用于找回密碼時(shí)或登錄時(shí)
?????*/
????@Basic
????@Column(name = "phone")
????private String phone;
????/**
?????* 手機(jī)認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)
?????*/
????@Basic
????@Column(name = "phone_state")
????private Integer phoneState;
????/**
?????* 用戶名:[0,16]用戶登錄時(shí)所用的賬戶名稱
?????*/
????@Basic
????@Column(name = "username")
????private String username;
????/**
?????* 昵稱:[0,16]
?????*/
????@Basic
????@Column(name = "nickname")
????private String nickname;
????/**
?????* 密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成
?????*/
????@Basic
????@Column(name = "password")
????private String password;
????/**
?????* 郵箱:[0,64]用戶的郵箱,用于找回密碼時(shí)或登錄時(shí)
?????*/
????@Basic
????@Column(name = "email")
????private String email;
????/**
?????* 郵箱認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)
?????*/
????@Basic
????@Column(name = "email_state")
????private Integer emailState;
????/**
?????* 頭像地址:[0,255]
?????*/
????@Basic
????@Column(name = "avatar")
????private String avatar;
????/**
?????* 創(chuàng)建時(shí)間:
?????*/
????@Basic
????@Column(name = "create_time")
????@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
????private Timestamp createTime;
????@Basic
????@Transient
????private String code;
}
4.2管理員功能模塊
管理員登錄,通過(guò)填寫(xiě)注冊(cè)時(shí)輸入的用戶名、密碼、權(quán)限進(jìn)行登錄,如圖4-5所示。
?
圖4-5管理員登錄界面圖
管理員登錄的關(guān)鍵代碼如下。
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執(zhí)行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????QueryWrapper wrapper = new QueryWrapper<User>();
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}else{
????????????return error(30000, "賬號(hào)或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號(hào)或密碼不能為空");
????????}
????????//判斷是否有這個(gè)用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String, String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態(tài)
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過(guò)")){
????????????????return error(30000,"該用戶審核未通過(guò)");
????????????}
????????}
????????//查詢用戶狀態(tài)
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態(tài),不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲(chǔ)Token到數(shù)據(jù)庫(kù)
????????????AccessToken accessToken = new AccessToken();
????????????accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
????????????accessToken.setUser_id(byUsername.getUserId());
????????????tokenService.save(accessToken);
????????????// 返回用戶信息
????????????JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
????????????user.put("token", accessToken.getToken());
????????????JSONObject ret = new JSONObject();
????????????ret.put("obj",user);
????????????return success(ret);
????????} else {
????????????return error(30000, "賬號(hào)或密碼不正確");
????????}
}
????public String select(Map<String,String> query,Map<String,String> config){
????????StringBuffer sql = new StringBuffer("select ");
????????sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
????????sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
????????if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
????????????sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
????????}
????????if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
????????????sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
????????}
????????if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
????????????int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
????????????int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
????????????sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
????????}
????????log.info("[{}] - 查詢操作,sql: {}",table,sql);
????????return sql.toString();
}
????public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
管理員登錄進(jìn)入財(cái)務(wù)管理系統(tǒng),具體功能:用戶管理(管理員、用戶)財(cái)務(wù)收入管理、財(cái)務(wù)支出管理、理財(cái)產(chǎn)品管理、留言反饋管理等,如圖4-6所示。
?
圖4-6管理員功能界面圖
管理員功能界面邏輯代碼如下:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
????????Query count = service.avg(service.readQuery(request), service.readConfig(request));
????????return success(count.getResultList());
}
財(cái)務(wù)支出管理,在管理列表中對(duì)支出編號(hào)、支出類型、支出金額、支出時(shí)間、用戶編號(hào)等內(nèi)容維護(hù)管理,還可以對(duì)信息進(jìn)行修改或刪除操作,如圖4-7所示。
?
圖4-7財(cái)務(wù)支出管理界面圖
財(cái)務(wù)支出管理界面邏輯代碼如下:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
????????Query count = service.avg(service.readQuery(request), service.readConfig(request));
????????return success(count.getResultList());
}
人情賬本管理,在人情賬本管理中可以對(duì)賬單編號(hào)、賬單類型、賬單金額、賬單對(duì)象等信息進(jìn)行維護(hù)管理,并可根據(jù)需求進(jìn)行修改或刪除操作,如圖4-8所示。
?
圖4-8人情賬本管理界面圖
人情賬本管理界面邏輯代碼如下:
@PostMapping("/add")
????@Transactional
????public Map<String, Object> add(HttpServletRequest request) throws IOException {
????????service.insert(service.readBody(request.getReader()));
????????return success(1);
????}
????@Transactional
????public Map<String, Object> addMap(Map<String,Object> map){
????????service.insert(map);
????????return success(1);
}
????public Map<String,Object> readBody(BufferedReader reader){
????????BufferedReader br = null;
????????StringBuilder sb = new StringBuilder("");
????????try{
????????????br = reader;
????????????String str;
????????????while ((str = br.readLine()) != null){
????????????????sb.append(str);
????????????}
????????????br.close();
????????????String json = sb.toString();
????????????return JSONObject.parseObject(json, Map.class);
????????}catch (IOException e){
????????????e.printStackTrace();
????????}finally{
????????????if (null != br){
????????????????try{
????????????????????br.close();
????????????????}catch (IOException e){
????????????????????e.printStackTrace();
????????????????}
????????????}
????????}
????????return null;
}
????public void insert(Map<String,Object> body){
????????StringBuffer sql = new StringBuffer("INSERT INTO ");
????????sql.append("`").append(table).append("`").append(" (");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
????????}
????????sql.deleteCharAt(sql.length()-1);
????????sql.append(") VALUES (");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????Object value = entry.getValue();
????????????if (value instanceof String){
????????????????sql.append("'").append(entry.getValue()).append("'").append(",");
????????????}else {
????????????????sql.append(entry.getValue()).append(",");
????????????}
????????}
????????sql.deleteCharAt(sql.length() - 1);
????????sql.append(")");
????????log.info("[{}] - 插入操作:{}",table,sql);
????????Query query = runCountSql(sql.toString());
????????query.executeUpdate();
????}
留言管理,管理員可以對(duì)用戶的留言信息進(jìn)行維護(hù)管理,如圖4-9所示。
?
圖4-9留言管理界面圖
留言管理界面邏輯代碼如下:
?@RequestMapping("/get_list")
????public Map<String, Object> getList(HttpServletRequest request) {
????????Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
????????return success(map);
}
財(cái)務(wù)支出管理,在財(cái)務(wù)支出管理列表中可以對(duì)月份、支出編號(hào)、支出類型、支出時(shí)間、用戶姓名等信息進(jìn)行管理,并且根據(jù)需要進(jìn)行修改或刪除操作,如圖4-10所示。
?
圖4-10財(cái)務(wù)支出管理界面圖
4.3用戶功能模塊
用戶登錄進(jìn)入財(cái)務(wù)管理系統(tǒng)可以查看公告信息,如圖4-11所示。
?
圖4-11公告信息界面圖
意見(jiàn)反饋,在反饋信息列表中通過(guò)填寫(xiě)反饋標(biāo)題、用戶編號(hào)、反饋類型、反饋內(nèi)容等信息進(jìn)行提交,如圖4-12所示。
?
圖4-12意見(jiàn)反饋界面圖
理財(cái)產(chǎn)品信息,在列表中用戶可以查看產(chǎn)品名稱、登記編號(hào)、發(fā)行機(jī)構(gòu)、期限類型、投資性質(zhì)、風(fēng)險(xiǎn)登記西悉尼等,如圖4-13所示。
?
圖4-13理財(cái)產(chǎn)品信息界面圖
理財(cái)產(chǎn)品信息界面關(guān)鍵代碼如下:
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
????/**
?????* 服務(wù)對(duì)象
?????*/
????@Autowired
????public AuthController(AuthService service) {
????????setService(service);
????}
??????????????????第5章軟件測(cè)試
測(cè)試存在于軟件開(kāi)發(fā)進(jìn)程中的最后一個(gè)階段,它可以保證一個(gè)軟件的開(kāi)發(fā)質(zhì)量是否符合設(shè)計(jì)者的初衷,也為程序的正式上線做了最后一道質(zhì)量檢測(cè)的工序。軟件測(cè)試主要是控制各種條件、包括軟件輸出方式,使用模式和運(yùn)行環(huán)境等,來(lái)評(píng)估一個(gè)系統(tǒng)或應(yīng)用是否符合設(shè)計(jì)標(biāo)準(zhǔn)。在軟件測(cè)試過(guò)程中,我們一般刻意的去制造錯(cuò)誤和極端條件,不能僅依照正常模式允許,而是多去嘗試那些意外的情況。
5.1軟件測(cè)試的重要性
只有在運(yùn)行和維護(hù)階段之前經(jīng)歷大量的測(cè)試的軟件,才能說(shuō)明它的質(zhì)量是經(jīng)得起檢驗(yàn)的。最近計(jì)算機(jī)業(yè)界也都一致認(rèn)為,測(cè)試應(yīng)該存在于軟件設(shè)計(jì)的每個(gè)階段,因?yàn)樵皆绨l(fā)現(xiàn)錯(cuò)誤,修復(fù)起來(lái)就越容易。
實(shí)際上,對(duì)于一個(gè)軟件應(yīng)用,錯(cuò)誤是必然存在的,無(wú)論使用何種技術(shù)或手段,都不可能絕對(duì)的排除軟件漏洞。測(cè)試是隨著軟件開(kāi)發(fā)一同誕生的,兩者是共同發(fā)展進(jìn)步的。實(shí)際上,測(cè)試可以大幅度的降低維護(hù)的成本,如果一個(gè)漏洞在開(kāi)發(fā)的早期就被發(fā)現(xiàn),那么修復(fù)它的成本遠(yuǎn)比上線后再修復(fù)的成本要低得多。
5.2測(cè)試實(shí)例的研究與選擇
測(cè)試有白盒測(cè)試和黑盒測(cè)試兩種方式。
其中,白盒測(cè)試是將軟件看成一個(gè)透明的白盒子,按照程序的內(nèi)部控制結(jié)構(gòu)和處理技術(shù)邏輯來(lái)選定測(cè)試用例、軟件系統(tǒng)測(cè)試的邏輯路徑及過(guò)程需要進(jìn)行管理測(cè)試,又稱玻璃盒測(cè)試。因此白盒測(cè)試需要選擇足夠多的測(cè)試用例,覆蓋盡可能多的代碼來(lái)發(fā)現(xiàn)程序中的錯(cuò)誤。
黑盒測(cè)試,也稱為功能測(cè)試。它將需軟件看作一個(gè)黑盒,像一個(gè)普通用戶一樣來(lái)模擬軟件的使用流程。黑盒測(cè)試通過(guò)大量的輸入邊界值或錯(cuò)誤數(shù)據(jù),來(lái)檢查是否可產(chǎn)生正確的輸出。
本系統(tǒng)測(cè)試 主要選擇黑盒測(cè)試,少量采用白盒測(cè)試。通過(guò)測(cè)試達(dá)到以下測(cè)試目的:
1.檢查各大功能模塊的運(yùn)行,確保其能夠正確運(yùn)行,并檢查各頁(yè)面的完整性,保證頁(yè)面完整。
2.檢查各個(gè)接口是否可以正確地輸入和輸出,保證數(shù)據(jù)流通穩(wěn)定可行。
3.檢查數(shù)據(jù)結(jié)構(gòu),保證其和外部接口沒(méi)有訪問(wèn)錯(cuò)誤,訪問(wèn)順利。
4.檢查原計(jì)劃的性能需求有沒(méi)有完成,運(yùn)行流暢。
本系統(tǒng)的測(cè)試用例(部分):
| 登錄部分測(cè)試用例 | |||||
| 編號(hào) | 對(duì)象 | 項(xiàng)目 | 操作 | 預(yù)期結(jié)果 | 結(jié)果 |
| 1 | 登錄 | 登錄提示 | 使用正確的賬號(hào)密碼登錄 | 成功登錄 | 預(yù)期結(jié)果 |
| 2 | 登錄提示 | 使用正確的賬號(hào)但錯(cuò)誤的密碼登錄 | 提示密碼錯(cuò)誤 | 預(yù)期結(jié)果 | |
| 3 | 登錄提示 | 使用錯(cuò)誤的賬號(hào)登錄 | 提示不存在賬戶 | 預(yù)期結(jié)果 | |
| 4 | 登錄提示 | 不輸入賬號(hào),點(diǎn)擊登錄 | 提示輸入賬號(hào) | 預(yù)期結(jié)果 | |
| 5 | 登錄提示 | 輸入賬號(hào)但不輸入密碼點(diǎn)擊登錄 | 提示輸入密碼 | 預(yù)期結(jié)果 | |
| 6 | 登錄入口 | 已登錄賬號(hào),查看登錄入口 | 不顯示登錄入口 | 預(yù)期結(jié)果 | |
5.3測(cè)試環(huán)境與測(cè)試條件
處理器:Inter Core I7-4710MQ四核處理器
內(nèi)存:4GB
硬盤(pán):1T
操作系統(tǒng):Windows 10
數(shù)據(jù)庫(kù):MySQL
5.4系統(tǒng)運(yùn)行情況
全部測(cè)試用例都已通過(guò)(包括但不限于以上測(cè)試用例),且不存在漏洞,實(shí)現(xiàn)了論文開(kāi)始時(shí)所作要求。本系統(tǒng)運(yùn)行穩(wěn)定,使用流暢,可以滿足客戶需求。
5.5系統(tǒng)評(píng)價(jià)
5.5.1系統(tǒng)功能評(píng)價(jià)
試運(yùn)行后進(jìn)行系統(tǒng)評(píng)估,可以認(rèn)為該系統(tǒng)達(dá)到預(yù)定的目標(biāo)要求,可以滿足用戶的需求,也滿足了系統(tǒng)開(kāi)發(fā)前所作目標(biāo)。
5.5.2系統(tǒng)技術(shù)評(píng)價(jià)
系統(tǒng)在經(jīng)過(guò)大量重復(fù)測(cè)試后運(yùn)行十分穩(wěn)定,安全實(shí)用,功能模塊已經(jīng)達(dá)到預(yù)定目標(biāo)所需。
5.5.3系統(tǒng)經(jīng)濟(jì)評(píng)價(jià)
在規(guī)定的時(shí)間內(nèi)實(shí)現(xiàn)系統(tǒng)的大部分功能,且滿足要求,節(jié)省開(kāi)發(fā)成本,有助于提高科學(xué)管理水平,符合本人經(jīng)濟(jì)情況。
第6章 總結(jié)
隨著計(jì)算機(jī)互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,各行各業(yè)都已經(jīng)實(shí)現(xiàn)采用計(jì)算機(jī)相關(guān)技術(shù)對(duì)日益放大的數(shù)據(jù)進(jìn)行管理。該課題是理財(cái)管理為核心展開(kāi)的。本研究針對(duì)財(cái)務(wù)管理需求建模,數(shù)據(jù)建模及過(guò)程建模分析設(shè)計(jì)并實(shí)現(xiàn)程序研究的過(guò)程。給出系統(tǒng)應(yīng)用架構(gòu)并分析優(yōu)劣勢(shì),通過(guò)功能分解圖,系統(tǒng)組件圖描述功能需求。設(shè)計(jì)建立了數(shù)據(jù)庫(kù),給出系統(tǒng)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的定義。通過(guò)類關(guān)系圖描述組件間的協(xié)作關(guān)系,給出各個(gè)類的定義方法。通過(guò)描述每一個(gè)類的字段,屬性及方法實(shí)現(xiàn)系統(tǒng)的前后端代碼。最終給出系統(tǒng)集成整合方法,完成財(cái)務(wù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。投入運(yùn)行時(shí),各功能均運(yùn)行正常。系統(tǒng)的每個(gè)界面的操作符合常規(guī)邏輯,對(duì)使用者來(lái)說(shuō)操作簡(jiǎn)單,界面友好。整個(gè)系統(tǒng)的各個(gè)功能設(shè)計(jì)合理,體現(xiàn)了人性化。
但是由于自己在系統(tǒng)開(kāi)發(fā)過(guò)程中對(duì)一些用到的相關(guān)知識(shí)和技術(shù)掌握不夠牢固,再加上自身開(kāi)發(fā)經(jīng)驗(yàn)欠缺,因此系統(tǒng)在有些方面的功能還不夠完善,考慮的不夠全面,因此整個(gè)系統(tǒng)還有待日后逐步完善。。
參考文獻(xiàn):
[1]陳敏強(qiáng).新形勢(shì)下優(yōu)化工程施工企業(yè)財(cái)務(wù)管理的相關(guān)措施[J].中國(guó)市場(chǎng),2022(06):90-91.DOI:10.13939/j.cnki.zgsc.2022.06.090.
[2]張暄妍.企業(yè)財(cái)務(wù)管理和內(nèi)部控制的提升路徑探究[J].中國(guó)市場(chǎng),2022(06):126-127.DOI:10.13939/j.cnki.zgsc.2022.06.126.
[3]劉玲.新時(shí)期背景下企業(yè)財(cái)務(wù)管理內(nèi)控制度建設(shè)及財(cái)務(wù)風(fēng)險(xiǎn)規(guī)避[J].中國(guó)市場(chǎng),2022(06):139-140.DOI:10.13939/j.cnki.zgsc.2022.06.139.
[4]黃英.大數(shù)據(jù)背景下企業(yè)財(cái)務(wù)管理的挑戰(zhàn)與變革[J].中國(guó)市場(chǎng),2022(06):184-185.DOI:10.13939/j.cnki.zgsc.2022.06.184.
[5]徐祥升.現(xiàn)代酒店業(yè)財(cái)務(wù)管理發(fā)展問(wèn)題探究[J].中國(guó)市場(chǎng),2022(05):84-87.DOI:10.13939/j.cnki.zgsc.2022.05.084.
[6]黃明海.制造業(yè)企業(yè)財(cái)務(wù)管理信息化建設(shè)研究[J].中國(guó)市場(chǎng),2022(05):197-198.DOI:10.13939/j.cnki.zgsc.2022.05.197.
[7]周穎.混合所有制改革背景下國(guó)有企業(yè)財(cái)務(wù)管理探究[J].財(cái)會(huì)通訊,2022(04):103-107.DOI:10.16144/j.cnki.issn1002-8072.2022.04.012.
[8]朱艷.供應(yīng)鏈現(xiàn)代化下跨企業(yè)財(cái)務(wù)管理研究[J].財(cái)會(huì)通訊,2022(04):119-123+169.DOI:10.16144/j.cnki.issn1002-8072.2022.04.009.
[9]陳楠.財(cái)務(wù)管理課程協(xié)同混合式教學(xué)模式改革研究[J].陜西教育(高教),2022(02):45-46.DOI:10.16773/j.cnki.1002-2058.2022.02.020.
[10]謝惠芳.探討如何培養(yǎng)財(cái)務(wù)管理人才財(cái)務(wù)大數(shù)據(jù)分析處理能力[J].中國(guó)鄉(xiāng)鎮(zhèn)企業(yè)會(huì)計(jì),2022(02):187-189.
[11]宿倩.農(nóng)業(yè)股份有限公司財(cái)務(wù)管理目標(biāo)與研究[J].中國(guó)集體經(jīng)濟(jì),2022(04):158-159.
[12]吳鴻嬌.大數(shù)據(jù)時(shí)代信息化在財(cái)務(wù)管理中的重要性和應(yīng)用[J].中國(guó)集體經(jīng)濟(jì),2022(04):154-155.
[13]夏茜.“互聯(lián)網(wǎng)”背景下煙草商業(yè)企業(yè)財(cái)務(wù)管理創(chuàng)新研究[J].現(xiàn)代商業(yè),2022(03):162-164.DOI:10.14097/j.cnki.5392/2022.03.051.
[14]方芳.數(shù)字經(jīng)濟(jì)背景下企業(yè)財(cái)務(wù)管理模式創(chuàng)新探討[J].產(chǎn)業(yè)與科技論壇,2022,21(03):193-194.
[15]周宇.內(nèi)部控制用于疾控中心財(cái)務(wù)管理的效果分析[J].當(dāng)代醫(yī)學(xué),2022,28(03):125-127.
致???謝
大學(xué)生活在這個(gè)時(shí)候即將劃上一個(gè)句號(hào),但是對(duì)于我的人生道路來(lái)說(shuō),這僅僅是一個(gè)逗號(hào),我將面對(duì)的是又一次征程的開(kāi)始。
回憶過(guò)去,許許多多的事情浮現(xiàn)在腦海:剛上大學(xué)時(shí)歡樂(lè)心情和興奮的場(chǎng)景還歷歷在目。一切都是那么新鮮,那么富有吸引力。有快樂(lè)也有艱辛,有收獲也有失落。衷心感謝信息學(xué)院所有支持幫助過(guò)我的老師,謝謝你們多年來(lái)的關(guān)心和愛(ài)護(hù)。同窗的友情同樣難忘,你們與我共同走過(guò)了人生中不平凡的道路,給我留下了值得珍藏的美好記憶。
最后,我要特別感謝指導(dǎo)財(cái)務(wù)管理系統(tǒng)設(shè)計(jì)的老師。本論文是在他的悉心指導(dǎo)和熱情幫助下完成的,老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和精深的理論水平都使我受益匪淺。老師無(wú)論在理論上還是在實(shí)踐中,都給予我很大的幫助,使我專業(yè)技能的應(yīng)用水平得到很大提高,這對(duì)于我以后的工作和學(xué)習(xí)都有益處。值此論文完成之際,特別向老師表示衷心的感謝和崇高的敬意,謝謝他細(xì)心而又耐心地輔導(dǎo),使得我得以順利的完成畢業(yè)設(shè)計(jì)開(kāi)發(fā)工作,同時(shí)也要感謝其他幫助過(guò)我的老師和同學(xué),他們?cè)谖页砷L(zhǎng)過(guò)程中給予了我很大的幫助,在此一并表示感謝。
由于本人水平有限,加上時(shí)間緊促,本文一定有不少缺點(diǎn)和不足,懇請(qǐng)各位老師給予幫助和指正。
免費(fèi)領(lǐng)取本源代碼,請(qǐng)關(guān)注點(diǎn)贊+私信
總結(jié)
以上是生活随笔為你收集整理的(附源码)ssm财务管理系统 毕业设计 282251的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ios+html+音频播放器代码,音频播
- 下一篇: 飞机订票系统- c语言课程设,C语言课程