大學四年,即將畢業! 大學期間的最後一篇博客,總結分享下我做的畢業設計。我選的論文命題為《燃氣管網設備儀器進銷存管理系統之後臺設計》,由於我們專業只有我一個走技術路線,所以,我一個人完成了整個系統的設計及開發,總耗時近一個月,最終獲得優的成績。 這裡不討論論文,不寫具體實現細節,主要講如何一步步搭建 ...
大學四年,即將畢業!
大學期間的最後一篇博客,總結分享下我做的畢業設計。我選的論文命題為《燃氣管網設備儀器進銷存管理系統之後臺設計》,由於我們專業只有我一個走技術路線,所以,我一個人完成了整個系統的設計及開發,總耗時近一個月,最終獲得優的成績。
這裡不討論論文,不寫具體實現細節,主要講如何一步步搭建自己的系統框架及系統實現,分享下自己的心得,新手可以互相學習,大牛們就當看作本人拋磚引玉啦!!
博客最後會附上系統開發相關的所有文件但不包括畢業論文,本文已大體包含了論文的內容!
一、系統展示
1.登錄頁面
2.admin登錄後的主頁
3.菜單管理
4.角色管理>新增角色
5.用戶管理
6.添加商品
7.倉庫管理
8.供應商管理
9.採購訂單管理
10.採購訂單導出
11.庫存查看
12.採購統計
二、系統需求分析
上面簡單的展示了完成後的系統測試截圖,你可以下載war包部署到自己的tomcat上看,下麵開始進入正文。
開發一個(簡單)系統,我想首要做的就是進行系統需求分析,弄清楚你為什麼要做這個系統,這個系統有哪些功能模塊,每個功能具體實現些什麼功能。
當然,我這裡的主要目的是完成畢業設計,交出畢業論文。但我並沒有簡單的只是為了完成一個畢業設計而去開發這個系統。主要想法是以開發這套進銷存管理系統為例,詳細說明一個系統從確認需求、技術選型、架構設計、系統實現到測試部署的整個開發過程。綜合運用自己平時所學的知識、技術,及實習獲得的經驗等,去完整且較好的實現一個系統。搭建一個基礎系統框架,形成一定規範,以後在此基礎上做開發,可以省去很多諸如搭建框架、加入依賴、配置等工作。
這次開發所做的主要工作及意義如下:
①學會站在用戶的角度分析用戶需求,完成需求分析設計等。
②熟練使用各種類相關開發、設計工具,及開源軟體。
③熟練掌握Spring+SpringMVC+Hibernate+ExtJs的開發技術。
④熟練使用maven版本管理工具。
⑤站在企業的角度,試著搭建自己的一個底層基礎框架。
⑥建立完整的燃氣管進銷存管理系統,進行測試並分析結果。
⑦將系統部署到互聯網上,以實現真正的web應用。
1.問題分析
首先,對系統進行需求分析,首先需要瞭解的就是什麼是進銷存系統,進銷存系統也稱為供應鏈管理系統,最基本的內容就是採購、庫存、銷售、退貨管理。進銷存系統是對企業生產經營中採購、入庫、銷售進行跟蹤管理,從採購單開始,到商品入庫,商品銷售出庫,每一步都跟蹤記錄。有效解決企業的分銷管理等業務問題。那麼燃氣管進銷存系統有何不同呢,其實進銷存系統已經具備了一般商品的進銷存功能,燃氣管就是一種商品。以此為出發點,開始著手設計系統功能模塊。
2.系統模塊結構
系統分為6大模塊,分別是基礎設置、採購管理、銷售管理、庫存管理、統計分析、系統管理。系統設置的角色有admin、採購員、銷售員、庫存管理員等。
系統模塊結構(使用xmind設計):
3.系統總體流程
系統的一個整體流程,從初次使用開始,系統設置一個超級管理員(admin),擁有系統的所有許可權。admin登錄系統,設置角色(系統管理員,採購員,銷售員,庫存管理員),分配對應的許可權。然後進入用戶管理,錄入系統用戶。一般管理員登錄系統,錄入基礎數據;採購員需要錄入供應商,採購單,退貨單;銷售員則需錄入銷售單,退貨單。庫存管理員就需要在庫存管理中進行採購審核和銷售審核,採購審核通過則商品入庫,增加庫存;銷售審核通過則商品出庫,減少庫存。管理員還可以查看每月的採購統計和銷售統計。
系統總體流程(使用visio設計):
三、開發環境簡介
需求確定了,就要進入具體的開發階段,首先確定開發這個系統綜合用到哪些技術、開發工具等。
簡單說下這個系統的開發環境:
開發平臺:windows 8.1
Java版本:jdk 1.8
項目管理工具:Maven
開發工具:Intellij IDEA
資料庫:MySql 5.1
伺服器:Tomcat 8.5
開發框架:Spring4 + SpringMVC + Hibernate5
前端框架:ExtJs 4.2 + Jsp
建模工具:PowerDesigner、Visio
1.maven
Maven是Apache軟體基金會組織維護的一款自動化構建工具,專註服務於Java平臺的項目構建和依賴管理。它提供了中央倉庫,能幫我們自動下載構件和第三方的開源類庫。你只需要在你的項目中以坐標的方式依賴一個jar包,maven就會自動從中央倉庫下載,並同時下載這個jar包所依賴的其他jar包,以及可以下載源碼進行閱讀。使用maven後每個jar包本身只在本地倉庫中保存一份,極大的節約了存儲空間,讓項目更輕巧,更避免了重覆文件太多而造成的混亂。同時maven可以替我們自動的將當前jar包所依賴的其他所有jar包全部導入進來,無需人工參與,節約了大量的時間和精力。使用maven,只需要一條簡單的命令,就可以自動完成清理、編譯、測試、打包、部署的整個過程。我們的項目一般會分為開發環境和生產環境,不同環境對應不同的配置文件,使用maven,你就可以配置兩個環境,打包的時候指定運行的環境,就可以將對應的配置文件替換,以此減少手工操作及可能帶來的失誤操作等。
2.Intellij IDEA
IDEA是java語言開發的集成環境,Intellij被公認為最好的Java開發工具之一。IDEA在代碼自動提示、重構、調試、各類版本工具(maven、svn等)整合等方面都是比較強的。本人是在實習期間轉用idea開發的,之前一直使用eclipse,相比eclipse,idea在調試、代碼自動提示等方面更顯優勢。項目在idea中有一個更友好的目錄結構,尤其是多工程項目。當然,eclipse比idea更容易上手,使用idea可以提高你的開發速度,但前提是你需要記住大量的快捷鍵。使用idea的調試功能,比如,你只需要按快捷鍵Alt+F8,然後輸入表達式,就可以快速求值;在調試的時候,idea會在變數的後面以不同的顏色顯示變數的值,你就可以很清楚的知道調試的每一步,非常方便。使用好IDEA能在很大程度上提高我們的開發速度。
3.ExtJs
ExtJs可以用來開發富客戶端的ajax應用,是用javascript寫的與後臺技術無關的前端ajax框架,主要用於創建前端用戶界面,擁有強大的數據處理功能,以及圖表統計等。同時,ExtJs擁有很多個性化的主題供你選擇,是開發後臺管理系統的一個不錯的選擇。
四、底層架構設計
在進行進銷存系統的設計和編碼之前,首先設計一個自己的底層框架,這個底層框架在之後可以作為其它具體項目開發的一個基礎,從而不必每次開發項目時,都去做很多重覆的工作。這個底層框架主要包括一個開發的規範,以及一些通用的工具類等,更重要的是分類別引入各個框架,如Spring、Hibernate、各個配置文件等。同時,如果以後在開發中,增加的一些新功能,還可以往這個底層中添加,不斷的去完善。
1.規範
在進行框架設計之前,為了使軟體開發過程順暢、提高代碼的可靠性,可讀性和可維護性等,首先需要確定的就是開發規範了,俗話說,沒有規矩不成方圓,軟體開發亦是如此。下麵列出一些簡單的需要遵守的規範。
1.1基礎規範
首先需要遵守的是一些基礎規範。一般來說,公司會將功能變數名稱作為所有命名的一個基礎,比如文件名、包名等等。因此我申請了一個功能變數名稱[www.lyyzoo.com]作為個人功能變數名稱。然後將D:/lyyzoo-repo作為開發的根目錄,即個人代碼倉庫,以後所有的項目都會建到這個目錄下。所有的項目開發使用maven來管理項目,因此目錄結構是標準的maven規範目錄。
maven約定的目錄結構:
1.2代碼規範
①命名
> 所有的命名需要見名之意,儘量保證通過變數名得知變數的含義,需要註釋的地方儘量添加註釋。
> 包命名全小寫,通過功能變數名稱倒寫+模塊的形式,如:com.lyyzoo.service
> 類命名採用Pascal名法,大寫字母開頭,每個單詞首字母大寫。
> 方法名採用Camel命名法,小寫字母開頭,每個單詞首字母小寫;getter和setter使用Lombok自動生成,只需添加@Data註解即可。
> 變數名採用Camel命名法,小寫字母開頭,每個單詞首字母大寫。變數名不宜過長,可採用首字母縮寫的形式,但要見名之意。
> 常量名全大寫,每個單詞之間使用”_”分隔。
②分層
項目以功能模塊劃分,不同項目建立不同的工程,使用maven的依賴進行管理。包的基本分層有controller(控制層)、service(業務層)、dao(數據訪問層)、entity(模型層)。
2.架構設計
2.1模塊結構
整個項目的底層著重是一些通用的、基礎的東西,整合到一起,以便於以後重用。首先,創建一個名為lyyzoo的maven工程,lyyzoo將作為底層的根目錄。lyyzoo下有兩個主要的子模塊,分別為lyyzoo-base和lyyzoo-starter,lyyzoo-base是基礎模塊,用於一些簡單的Java及JavaEE程式;lyyzoo-starter則是JavaEE相關,會依賴於lyyzoo-base,同時引入了Spring、Hibernate等第三方框架。然後在各個模塊中添加具體的子模塊。以後開發中需要用到哪個模塊,在依賴中添加那個模塊即可。
底層模塊結構圖:
以下是各個POM之間的關係:
① lyyzoo > pom.xml
② lyyzoo-base > pom.xml
③ lyyzoo-starter > pom.xml
2.2依賴管理
結構建好後,就需要進行一些詳細的依賴配置工作了,lyyzoo是所有模塊的父類,所以在lyyzoo中需要添加公用的屬性、依賴管理、maven插件等。
首先將所有的版本號提出來,放到<properties></properties>里,這樣一旦需要切換到另一個版本時,就可以只改個版本號就達到目的了。其中列出了一些屬性如下:包括底層的版本、Java版本、Spring、Hibernate的版本等等。
1 <properties> 2 <!-- Global --> 3 <lyyzoo.version>1.0-SNAPSHOT</lyyzoo.version> 4 <java.version>1.8</java.version> 5 <maven.compiler.source>${java.version}</maven.compiler.source> 6 <maven.compiler.target>${java.version}</maven.compiler.target> 7 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 8 <!-- lombok --> 9 <lombok.version>1.16.14</lombok.version> 10 <!-- log --> 11 <slf4j.version>1.7.7</slf4j.version> 12 <logback.version>1.1.3</logback.version> 13 <!-- jdbc --> 14 <mysql.version>5.1.38</mysql.version> 15 <!-- http://mvnrepository.com/artifact/com.mchange/c3p0/ --> 16 <c3p0.version>0.9.5.2</c3p0.version> 17 <!-- test --> 18 <junit.version>4.12</junit.version> 19 <!-- servlet --> 20 <servlet.version>3.1.0</servlet.version> 21 <!-- spring --> 22 <spring.version>4.2.6.RELEASE</spring.version> 23 <aspectjrt.version>1.7.3</aspectjrt.version> 24 <aspectjweaver.version>1.7.3</aspectjweaver.version> 25 <!-- hibernate --> 26 <hibernate.version>5.0.1.Final</hibernate.version> 27 <hibernate.jpa.version>1.0.0.Final</hibernate.jpa.version> 28 </properties>View Code
接著,引入依賴管理,在lyyzoo中引入其它項目將會用到的所有三方jar包的依賴,所有的依賴都添加到<dependencyManagement><dependencies></dependencies></dependencyManagement>中,這樣就可以方便的管理所有的jar包了。下麵列出引入的一部分jar包,其它的可參考源碼。
① 首先需要引入lyyzoo下的其它模塊,如lyyzoo-base-core、lyyzoo-starter-base等模塊。
1 <!-- lyyzoo --> 2 <dependency> 3 <groupId>com.lyyzoo</groupId> 4 <artifactId>lyyzoo-base-core</artifactId> 5 <version>${lyyzoo.version}</version> 6 </dependency> 7 <dependency> 8 <groupId>com.lyyzoo</groupId> 9 <artifactId>lyyzoo-base-data</artifactId> 10 <version>${lyyzoo.version}</version> 11 </dependency> 12 <dependency> 13 <groupId>com.lyyzoo</groupId> 14 <artifactId>lyyzoo-starter-base</artifactId> 15 <version>${lyyzoo.version}</version> 16 </dependency> 17 <dependency> 18 <groupId>com.lyyzoo</groupId> 19 <artifactId>lyyzoo-starter-jpa</artifactId> 20 <version>${lyyzoo.version}</version> 21 </dependency>View Code
② JDBC相關,相關jar包有c3p0,用於作資料庫連接池;mysql驅動包;dbutils,對JDBC進行了簡單的封裝,使用起來簡單方便。
1 <!-- jdbc --> 2 <dependency> 3 <groupId>com.mchange</groupId> 4 <artifactId>c3p0</artifactId> 5 <version>${c3p0.version}</version> 6 </dependency> 7 <dependency> 8 <groupId>mysql</groupId> 9 <artifactId>mysql-connector-java</artifactId> 10 <version>${mysql.version}</version> 11 </dependency> 12 <dependency> 13 <groupId>commons-dbutils</groupId> 14 <artifactId>commons-dbutils</artifactId> 15 <version>1.5</version> 16 </dependency>View Code
③ 日誌相關:
1 <!-- log --> 2 <dependency> 3 <groupId>org.slf4j</groupId> 4 <artifactId>slf4j-api</artifactId> 5 <version>${slf4j.version}</version> 6 </dependency> 7 <dependency> 8 <groupId>ch.qos.logback</groupId> 9 <artifactId>logback-classic</artifactId> 10 <version>${logback.version}</version> 11 </dependency> 12 <!-- slf4j --> 13 <dependency> 14 <groupId>org.slf4j</groupId> 15 <artifactId>log4j-over-slf4j</artifactId> 16 <version>${slf4j.version}</version> 17 </dependency>View Code
④ spring相關,包括了spring aop、spring mvc等。
1 <!-- springframework --> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-aop</artifactId> 5 <version>${spring.version}</version> 6 </dependency> 7 <dependency> 8 <groupId>org.springframework</groupId> 9 <artifactId>spring-aspects</artifactId> 10 <version>${spring.version}</version> 11 </dependency> 12 <dependency> 13 <groupId>org.springframework</groupId> 14 <artifactId>spring-beans</artifactId> 15 <version>${spring.version}</version> 16 </dependency> 17 <dependency> 18 <groupId>org.springframework</groupId> 19 <artifactId>spring-context</artifactId> 20 <version>${spring.version}</version> 21 </dependency> 22 <dependency> 23 <groupId>org.springframework</groupId> 24 <artifactId>spring-context-support</artifactId> 25 <version>${spring.version}</version> 26 </dependency> 27 <dependency> 28 <groupId>org.springframework</groupId> 29 <artifactId>spring-core</artifactId> 30 <version>${spring.version}</version> 31 </dependency> 32 <dependency> 33 <groupId>org.springframework</groupId> 34 <artifactId>spring-jdbc</artifactId> 35 <version>${spring.version}</version> 36 </dependency> 37 <dependency> 38 <groupId>org.springframework</groupId> 39 <artifactId>spring-jms</artifactId> 40 <version>${spring.version}</version> 41 </dependency> 42 <dependency> 43 <groupId>org.springframework</groupId> 44 <artifactId>spring-orm</artifactId> 45 <version>${spring.version}</version> 46 </dependency> 47 <dependency> 48 <groupId>org.springframework</groupId> 49 <artifactId>spring-tx</artifactId> 50 <version>${spring.version}</version> 51 </dependency> 52 <dependency> 53 <groupId>org.springframework</groupId> 54 <artifactId>spring-web</artifactId> 55 <version>${spring.version}</version> 56 </dependency> 57 <dependency> 58 <groupId>org.springframework</groupId> 59 <artifactId>spring-webmvc</artifactId> 60 <version>${spring.version}</version> 61 </dependency>View Code
⑤ hibernate相關:
1 <dependency> 2 <groupId>org.hibernate</groupId> 3 <artifactId>hibernate-c3p0</artifactId> 4 <version>${hibernate.version}</version> 5 </dependency> 6 <dependency> 7 <groupId>org.hibernate.common</groupId> 8 <artifactId>hibernate-commons-annotations</artifactId> 9 <version>${hibernate.version}</version> 10 </dependency> 11 <dependency> 12 <groupId>org.hibernate</groupId> 13 <artifactId>hibernate-core</artifactId> 14 <version>${hibernate.version}</version> 15 </dependency> 16 <dependency> 17 <groupId>org.hibernate</groupId> 18 <artifactId>hibernate-entitymanager</artifactId> 19 <version>${hibernate.version}</version> 20 </dependency>View Code
所有的依賴添加好後,就需要為各個子模塊添加具體的依賴了,根據每個子模塊的功能,添加相關的依賴,而不是將所有的依賴一次性加入。這樣我們就可以根據自己開發的項目的需要,添加模塊依賴,而不是一次性加入所有jar包,避免冗餘,增大項目的體積。下麵以lyyzoo-base-data和lyyzoo-starter-jpa為例說明。
lyyzoo-base-data模塊是基礎數據相關,主要與資料庫打交道,那麼就需要引入mysql驅動、資料庫連接池c3p0等,pom.xml如下:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <parent> 5 <groupId>com.lyyzoo</groupId> 6 <artifactId>lyyzoo-base</artifactId> 7 <version>1.0-SNAPSHOT</version> 8 </parent> 9 <artifactId>lyyzoo-base-data</artifactId>