超市订单管理系统
1 系統需求分析
超市訂單管理系統是一個專為連鎖店、超市等商業場所提供訂單管理平臺的系統。該系統的目標是建立一個訂單管理平臺,為需要合理規劃超市供應鏈、供應商以及工作人員提供的便捷的平臺。該系統的主要業務需求包括記錄并維護某超市的供應商信息,以及該超市與供應商之間的交易訂單信息,包括三種角色,系統管理員經理,普通員工。
1.1 系統功能分析
本系統主要的功能是實現超市訂單管理功能,以便為超市、連鎖店提供以及其他負責人提供訂單詳情、聯系方式等,系統的主要功能有以下五個方面:
(1)登錄/注銷:
管理員可以在網站上登錄瀏覽,離開時注銷并退出。
(2)訂單管理:
管理員可以瀏覽所有訂單信息,并且通過點擊查看了解訂單詳情信息。
(3)供應商管理:
管理員可以在網站瀏覽所有供應商信息,并在在與其他供應商達成合作之后,添加相關供應商信息,并且通過點擊查看了解他們的聯系方式等。
(4)用戶管理:
管理員可以管理所有超市員工用戶,對用戶進行增刪改查,對于離職或其他原因的未工作用戶給予注銷管理。
(5)密碼修改:
管理員可對自己的賬號密碼進行修改,填寫對應之前的正確密碼以及新密碼之后,即完成相關修改密碼操作。
(6)搜索功能:
在以上管理界面中,均允許了管理員根據關鍵字進行搜索,要求搜索框中輸入的字段必須完全包含在物品名稱中,否則無法查詢。
圖1.1 超市訂單管理系統
1.2 系統功能需求
根據系統功能要求,該超市訂單管理系統以管理員為中心的用戶角色,可以將系統分解成幾個模塊來分別設計應用程序界面,如圖 1.1所示。
圖1.2 用戶功能模塊結構圖
1.3 系統性能需求
超市訂單管理系統的開發是在Window10平臺上,以SSM為架構,采用MySQL 作為數據庫管理系統管理后臺數據庫。本系統是超市信息管理建設中必不可少的一部分,它實現了現代管理信息系統的大部分功能需要。使用本系統可以使超市管理更加方便快捷,合理的頁面設計也使得這個用戶充分享受到基于Internet管理信息系統的優越。本系統開發說明:
· 功能完備
在開發初期,查看了大量關于電子商務,管理信息系統,J2EE等方面的資料,同時借鑒了很多其他電子商務網站和管理信息的流程。經過總結,確定了滿足需求分析的基本模塊。系統總體設計上實現了整個系統模塊的劃分,系統主要包含5大模塊,分別是:訂單管理信息,供應商管理,用戶管理,修改密碼,登陸退出系統,基本上實現了綜合管理系統的所有功能。
· 界面友好
系統用戶登陸到管理頁面后,每頁有導航和引領的作用。系統具有自適應的能力,同時導航條方便快捷的引導用戶進行各種合理的操作。
· 管理科學
本系統一開始就從管理學的角度做出了詳細細致的考慮,后來有參考了電子商務管理等,最后才做出了系統總體設計,因此可以講該系統是較為科學的。
系統的性能需求主要表現在數據庫中的各個表需要頻繁地被插入、刪除以及更新。對于用戶來說,系統地響應時間不宜太長,否則會降低用戶體驗。為此要求我們建立良好的表結構,加上足夠的存儲空間以及硬件性能。
2 可行性分析
2.1 研究前提
隨著我國經濟情況的日新月異,飛速發展,涌現出許許多多的超市和便利店。越來越多的人喜歡到超市購物,超市里銷售的商品也呈現出多種多樣的變化趨勢。我們開發一個超市訂單管理系統,它可以對倉儲各環節實施全過程控制管理,對整個進貨、退貨、盤點等各個環節的規范化作業,控制整個過程的正常運行。去掉了手工書寫票據和送到機房輸入的步驟,解決庫房信息陳舊滯后的弊病,方便了倉庫管理人員對物品的放置和調配,提高了工作效率。
該系統容易被接受,具有簡單易學性,便于管理等功能,是對超市訂單管理的一種有效工具。
2.2 設計要求
2.2.1 安全性
超市訂單管理增強對產品規范的審計,重點確定該項目中需要審計的產品。買家只能針對賣家允許公開的信息進行查閱。買家只享受對自己賬號內數據的查閱權,與定后處理權,訂貨支付權,申請退貨權,不允許偷窺其他人。賣家只能針對買家允許公開的信息進行查閱。賣家只享受對自己賬號內數據的查閱權,發貨權,退款相應處理權,不允許偷窺其他人。
2.2.2 系統性能
管理員登錄查看超市供應商與超市員工用戶管理,可以進行增、刪、改、查等操作。超市訂單系統可以使超市的管理趨于正規化、現代化和系統化。本項目的產品可以達到以下目標:
(1)提高工作效率,減少返工。
(2)業務流程的流水線化。
(3)符合相關標準和規則。
(4)與目前的應用產品相比較,提高了可用性或減少了失效程度。
2.2.3 可擴展性
所有信息呈現,操作完全由打開的網頁呈現并完成。本系統所占有的是超市市場,它追求的是簡單、易學、易用,能夠更好地解決管理人員的負擔,能夠輔助超市有效的管理物品。對于訂單管理系統的用戶,可滿足對訂單管理的需求,且此種需求被接受并且滿足,其系統便可以推廣。
3 數據庫設計
3.1 數據庫需求分析
經過對超市管理系統的調查分析,得出用戶的需求大致如下:
(1)管理員可以在系統中對訂單、供應商以及用戶進行增、刪、改、查的處理。
(2)管理員需要輸入賬號密碼登錄,并且可以增添新的管理員。
如下是利用數據流圖方法對數據庫做需求分析:
第一步:由用戶的需求,可以得到頂層數據流圖如圖3.1.1所示。
圖3.1.1 超市訂單管理系統的頂層數據流圖
第二步:超市訂單管理系統的第1層數據流圖如圖3.1.2所示。
圖3.1.2 超市訂單管理系統的第1層數據流圖
第三步:超市訂單管理系統的第2層數據庫流圖——訂單管理的細化數據流圖如圖3.1.3所示。
圖3.1.3 超市訂單管理系統的第2層數據庫流圖——訂單管理的細化數據流圖
第四步:超市訂單管理系統的第2層數據流庫——供應商管理的細化數據流圖如圖3.1.4所示。
圖3.1.4 超市訂單管理系統的第2層數據庫流圖——供應商管理的細化數據流圖
第五步超市訂單管理系統的第2層數據流庫——用戶管理的細化數據流圖如圖3.1.5所示。
圖3.1.5 超市訂單管理系統的第2層數據庫流圖——用戶管理的細化數據流圖
根據如上的數據流程圖,可以列出以下記錄超市訂單管理所需的數據項和數據結構:
·管理員:管理員ID、管理員姓名、管理員密碼、管理員性別、管理員角色、管理員出生日期、管理員電話、管理員住址。
·訂單:訂單編碼、商品名稱、供應商名稱、訂單金額、是否付款。
·供應商:供應商編碼、供應商名稱、聯系人、聯系電話、微信。
3.2 數據庫概念結構設計
本系統一共有用戶、供應商、訂單、角色、地址這五個基本實體。
管理員可以對應多個訂單,而一個訂單只能對應于一個管理員。管理員可以管理多個供應商,而一個供應商只能對應于一個管理員。一個供應商可以對應多條訂單,但一條訂單只能對應于一個供應商。此外,有一個用戶對應一個角色,一個角色對應多個用戶;一個地址對應多個訂單,一個訂單對應一個地址。數據庫表之間的關系如下:
圖3.2.1 數據庫E-R圖分析
(1)用戶:主鍵ID、用戶編碼、用戶名稱、用戶密碼、性別、出生日期、手機、地址、用戶角色、創建者、創建時間、更新者、更新時間、用戶頭像、工作照。
(2)賬單:訂單編號、訂單編碼、商品名稱、商品描述、商品單位、商品數量、商品總額、是否支付、創建者、創建時間、更新者、更新時間、供應商ID。
(3)供應商:供應商ID、供貨商編碼、供貨商名稱、供應商詳細描述、供應商聯系人、聯系電話、地址、微信、創建者、創建時間、更新時間、更新者、營業執照、組織機構代碼證。
(4)地址:主鍵ID、聯系人姓名、收貨地址明細、郵編、聯系人電話、創建者、創建日期、修改者、修改時間、用戶ID。
(5)角色:角色編號、角色編碼、角色名稱、創建者、創建時間、修改者、修改時間。
3.3 數據庫邏輯結構設計
將概念結構設計中的各個模型轉化為DBMS支持的表結構,同時保持不會出現插入異常、刪除異常和修改異常,表結構應該做到符合3NF。根據系統 E-R 圖,需要設計4個數據表來存放信息。在本系統中,一共有五個實體,實體轉化為數據庫模型為如下所示:
1、一對多聯系轉化為一個關系模式
用戶–訂單(用戶編號,訂單編號)
供貨商–訂單(供貨商編號,訂單編號)
用戶–身份(用戶編號,身份編號)
用戶–地址(用戶編號)
2、利用以上關系模式得到的所有數據表如下所示:
(1)用戶表(smbms_user):
·數據項:主鍵ID、用戶編碼、用戶名稱、用戶密碼、性別、出生日期、手機、地址、用戶角色、創建者、創建時間、更新者、更新時間、用戶頭像、工作照。
·說明:用戶ID是唯一的用戶標識,使此表的主鍵。如表3.3.1所示。
表3.3.1 用戶表
| Id | bigint | 20 | Not null | 主鍵ID | 
| userCode | varchar | 15 | Not null | 用戶編碼 | 
| userName | varchar | 15 | Not null | 用戶名稱 | 
| userPassword | varchar | 15 | Not null | 用戶密碼 | 
| gender | int | 10 | 性別 | |
| birthday | date | 出生日期 | ||
| phone | varchar | 15 | 手機 | |
| address | varchar | 30 | 地址 | |
| userRole | int | 10 | 用戶角色 | |
| createdBy | bigint | 20 | 創建者 | |
| creationDate | datetime | 創建時間 | ||
| modifyBy | bigint | 20 | 更新者 | |
| modifyDate | datetime | 更新時間 | ||
| idPicPath | varchar | 300 | 用戶頭像 | |
| workPicPath | varchar | 300 | 工作照 | 
(2)供應商表(smbms_provider):
·數據項:供應商ID、供貨商編碼、供貨商名稱、供應商詳細描述、供應商聯系人、聯系電話、地址、微信、創建者、創建時間、更新時間、更新者、營業執照、組織機構代碼證。
·說明:這張表標識的是超市管理信息系統中商品供應商的信息列表,供應商ID是該表的主鍵。
·編號方法:商品供應商ID采用自動生成方式,如表3.3.2所示。
表3.3.2 供貨商表
| Id | Bigint | 20 | Not null | 供貨商ID(主鍵) | 
| proCode | Varchar | 20 | Not null | 供貨商編碼 | 
| proName | varchar | 20 | Not null | 供貨商名稱 | 
| ProDesc | varchar | 50 | 供應商詳細描述 | |
| proContact | varchar | 20 | Not null | 供貨商聯系人 | 
| proPhone | Varchar | 20 | Not null | 聯系電話 | 
| ProAddress | Varchar | 50 | Not null | 供貨商地址 | 
| proFax | varchar | 20 | 微信 | |
| CreateBy | bigint | 20 | 創建者 | |
| CreatationDate | datetime | 創建時間 | ||
| modifyDate | datetime | 更新時間 | ||
| modifyBy | bigint | 20 | 更新者 | |
| companyLicPicPath | varchar | 300 | 營業執照 | |
| orgCodePicPath | varchar | 300 | 組織機構代碼證 | 
(3)訂單表(smbms_bill):
·數據項:訂單編號、訂單編碼、商品名稱、商品描述、商品單位、商品數量、商品總額、是否支付、創建者、創建時間、更新者、更新時間、供應商ID。
·說明:這張表標識的是超市管理信息系統訂單信息列表,訂單ID是該表的主鍵。
·編號方法:訂單ID采用自動生成方式,供應商ID與供應商表中供應商ID一一對應,如表3.3.3所示。
表3.3.3 訂單表
| Id | bigint | 20 | Not null | 訂單ID(主鍵) | 
| billCode | varchar | 20 | Not null | 訂單編碼 | 
| ProductName | Varchar | 20 | Not null | 商品名稱 | 
| ProductDescent | Varchar | 50 | Not null | 商品描述 | 
| ProductUnit | Varchar | 10 | Not null | 商品單位 | 
| ProductCount | Decimal | 20,2 | Not null | 商品數量 | 
| totalPrice | Decimal | 20,2 | Not null | 商品總額 | 
| isPayment | int | 10 | Not null | 是否支付 | 
| createdBy | bigint | 20 | 創建者 | |
| creationDate | Datetime | 創建時間 | ||
| modifyBy | bigint | 20 | 更新者 | |
| modifyDate | datetime | 更新時間 | ||
| providerID | Int | 20 | 供應商ID | 
(4)身份表(smbms_role):
·數據項:角色編號、角色編碼、角色名稱、創建者、創建時間、修改者、修改時間。
·說明:這張表標識的是超市訂單管理信息系統中用戶身份列表,身份編號是該表的主鍵。
·編號方法:用戶身份編號與用戶表中的員工身份編號一一對應,如表3.3.4所示。
表3.3.4 身份表
| Id | bigint | 20 | Not null | 角色ID(主鍵) | 
| RoleCode | varchar | 15 | Not null | 角色編碼 | 
| roleName | Varchar | 15 | Not null | 角色名稱 | 
| createdBy | bigint | 20 | 創建者 | |
| creationDate | datetime | 創建時間 | ||
| modifyBy | bigint | 20 | 修改者 | |
| modifyDate | datetime | 修改時間 | 
(5)地址表(smbms_address):
· 數據項:主鍵ID、聯系人姓名、收貨地址明細、郵編、聯系人電話、創建者、創建日期、修改者、修改時間、用戶ID。
· 編號方法:用戶ID與用戶表中的用戶ID一一對應,如表3.3.5所示。
表3.3.5 地址表
| Id | bigint | 20 | Not null | 主鍵ID(主鍵) | 
| Contact | varchar | 15 | Not null | 聯系人姓名 | 
| addressDesce | Varchar | 50 | Not null | 收貨地址明細 | 
| postcode | Varchar | 15 | 郵編 | |
| Tel | Varchar | 20 | Not null | 聯系人電話 | 
| createdBy | bigint | 20 | 創建者 | |
| creationDate | Datetime | 創建時間 | ||
| modifyBy | bigint | 20 | 修改者 | |
| modifyDate | datetime | 修改時間 | ||
| userID | Bigint | 20 | 用戶ID | 
數據庫連接利用了SSM框架的底層的MyBatis,建立了實體類與MySQL之間映射關系,從而實現數據持久化、封裝數據庫連接等操作。
3.4 數據庫物理結構設計
1、選擇關系模式的存取方式
對數據庫邏輯結構設計中建立的表結構,供應商表的供應商編號屬性唯一決定每一個供應商元組,所以對供應商表建立以供應商編號為主關鍵字的索引。同理,對管理員關系模式、訂單關系模式也采用類似的索引存取方法。
2、數據表存儲結構設計
本系統的所有數據表均存放在物理磁盤中。用戶表、供應商表和訂單表的結構是相對穩定的,表中的已有記錄是要長期保存的,在此基礎上系統會相應用戶的操作對數據表進行增、刪、改、查等操作。
圖3.4.1 超市訂單管理系統數據庫表之間的關系
3.5 數據庫的建立
3.5.1 數據庫的建立
(1)創建數據庫
create database smbms;
USE smbms;
(2)創建表smbms_address
DROP TABLE IF EXISTS smbms_address;
CREATE TABLE smbms_address (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵ID’,
contact varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘聯系人姓名’,
addressDesc varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘收貨地址明細’,
postCode varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘郵編’,
tel varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘聯系人電話’,
createdBy bigint(20) DEFAULT NULL COMMENT ‘創建者’,
creationDate datetime DEFAULT NULL COMMENT ‘創建時間’,
modifyBy bigint(20) DEFAULT NULL COMMENT ‘修改者’,
modifyDate datetime DEFAULT NULL COMMENT ‘修改時間’,
userId bigint(20) DEFAULT NULL COMMENT ‘用戶ID’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
(3)創建表smbms_bill
DROP TABLE IF EXISTS smbms_bill;
CREATE TABLE smbms_bill (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵ID’,
billCode varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘賬單編碼’,
productName varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘商品名稱’,
productDesc varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘商品描述’,
productUnit varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘商品單位’,
productCount decimal(20,2) NOT NULL COMMENT ‘商品數量’,
totalPrice decimal(20,2) NOT NULL COMMENT ‘商品總額’,
isPayment int(10) NOT NULL COMMENT ‘是否支付(1:未支付 2:已支付)’,
createdBy bigint(20) DEFAULT NULL COMMENT ‘創建者(userId)’,
creationDate datetime DEFAULT NULL COMMENT ‘創建時間’,
modifyBy bigint(20) DEFAULT NULL COMMENT ‘更新者(userId)’,
modifyDate datetime DEFAULT NULL COMMENT ‘更新時間’,
providerId int(20) DEFAULT NULL COMMENT ‘供應商ID’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
(4)創建表smbms_provider
DROP TABLE IF EXISTS smbms_provider;
CREATE TABLE smbms_provider (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵ID’,
proCode varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘供應商編碼’,
proName varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘供應商名稱’,
proDesc varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘供應商詳細描述’,
proContact varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘供應商聯系人’,
proPhone varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘聯系電話’,
proAddress varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘地址’,
proFax varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘微信’,
createdBy bigint(20) DEFAULT NULL COMMENT ‘創建者(userId)’,
creationDate datetime DEFAULT NULL COMMENT ‘創建時間’,
modifyDate datetime DEFAULT NULL COMMENT ‘更新時間’,
modifyBy bigint(20) DEFAULT NULL COMMENT ‘更新者(userId)’,
companyLicPicPath varchar(300) DEFAULT NULL COMMENT ‘營業執照’,
orgCodePicPath varchar(300) DEFAULT NULL COMMENT ‘組織機構代碼證’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
(5)創建表smbms_role
DROP TABLE IF EXISTS smbms_role;
CREATE TABLE smbms_role (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵ID’,
roleCode varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘角色編碼’,
roleName varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘角色名稱’,
createdBy bigint(20) DEFAULT NULL COMMENT ‘創建者’,
creationDate datetime DEFAULT NULL COMMENT ‘創建時間’,
modifyBy bigint(20) DEFAULT NULL COMMENT ‘修改者’,
modifyDate datetime DEFAULT NULL COMMENT ‘修改時間’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
(6)創建表smbms_user
DROP TABLE IF EXISTS smbms_user;
CREATE TABLE smbms_user (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵ID’,
userCode varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘用戶編碼’,
userName varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘用戶名稱’,
userPassword varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘用戶密碼’,
gender int(10) DEFAULT 2 COMMENT ‘性別(1:女、 2:男)’,
birthday date DEFAULT NULL COMMENT ‘出生日期’,
phone varchar(15) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘手機’,
address varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT ‘地址’,
userRole int(10) DEFAULT NULL COMMENT ‘用戶角色(取自角色表-角色id)’,
createdBy bigint(20) DEFAULT NULL COMMENT ‘創建者(userId)’,
creationDate datetime DEFAULT NULL COMMENT ‘創建時間’,
modifyBy bigint(20) DEFAULT NULL COMMENT ‘更新者(userId)’,
modifyDate datetime DEFAULT NULL COMMENT ‘更新時間’,
idPicPath varchar(300) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘用戶頭像’,
workPicPath varchar(300) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘工作照’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
3.5.2 初始數據的輸入
數據表創建成功后,數據庫中還沒有實際的數據。為了保證外部鍵能使用,數據需要提前輸入,如用戶編碼、用戶姓名、訂單名稱和供應商等等。具體插入語句如下:
(1)向smbms_address表插入數據
insert into smbms_address(id,contact,addressDesc,postCode,tel,createdBy,creationDate,modifyBy,modifyDate,userId) values
(1,‘王麗’,‘北京市東城區東交民巷44號’,‘100010’,‘13678789999’,1,‘2020-04-13 00:00:00’,NULL,NULL,1),
(2,‘張紅麗’,‘北京市海淀區丹棱街3號’,‘100000’,‘18567672312’,1,‘2020-04-13 00:00:00’,NULL,NULL,1),
(3,‘任志強’,‘北京市東城區美術館后街23號’,‘100021’,‘13387906742’,1,‘2020-04-13 00:00:00’,NULL,NULL,1),
(4,‘曹穎’,‘北京市朝陽區朝陽門南大街14號’,‘100053’,‘13568902323’,1,‘2020-04-13 00:00:00’,NULL,NULL,2),
(5,‘李慧’,‘北京市西城區三里河路南三巷3號’,‘100032’,‘18032356666’,1,‘2020-04-13 00:00:00’,NULL,NULL,3),
(6,‘王國強’,‘北京市順義區高麗營鎮金馬工業區18號’,‘100061’,‘13787882222’,1,‘2020-04-13 00:00:00’,NULL,NULL,3);
(2)向smbms_bill表插入數據
insert into smbms_bill(id,billCode,productName,productDesc,productUnit,productCount,totalPrice,isPayment,createdBy,creationDate,modifyBy,modifyDate,providerId) values
(1,‘BILL2016_001’,‘洗發水、護發素’,‘日用品-洗發、護發’,‘瓶’,‘500.00’,‘25000.00’,2,1,‘2020-06-14 13:02:03’,NULL,NULL,13),
(2,‘BILL2016_002’,‘香皂、肥皂、藥皂’,‘日用品-皂類’,‘塊’,‘1000.00’,‘10000.00’,2,1,‘2020-03-23 04:20:40’,NULL,NULL,13),
(3,‘BILL2016_003’,‘大豆油’,‘食品-食用油’,‘斤’,‘300.00’,‘5890.00’,2,1,‘2020-05-14 13:02:03’,NULL,NULL,6),
(4,‘BILL2016_004’,‘橄欖油’,‘食品-進口食用油’,‘斤’,‘200.00’,‘9800.00’,2,1,‘2020-04-10 03:12:13’,NULL,NULL,7),
(5,‘BILL2016_005’,‘洗潔精’,‘日用品-廚房清潔’,‘瓶’,‘500.00’,‘7000.00’,2,1,‘2020-05-14 13:02:03’,NULL,NULL,9),
(6,‘BILL2016_006’,‘美國大杏仁’,‘食品-堅果’,‘袋’,‘300.00’,‘5000.00’,2,1,‘2020-04-14 06:08:09’,NULL,NULL,4),
(7,‘BILL2016_007’,‘沐浴液、精油’,‘日用品-沐浴類’,‘瓶’,‘500.00’,‘23000.00’,1,1,‘2020-07-01 10:10:22’,NULL,NULL,14),
(8,‘BILL2016_008’,‘不銹鋼盤碗’,‘日用品-廚房用具’,‘個’,‘600.00’,‘6000.00’,2,1,‘2020-04-14 05:12:13’,NULL,NULL,14),
(9,‘BILL2016_009’,‘塑料杯’,‘日用品-杯子’,‘個’,‘350.00’,‘1750.00’,2,1,‘2020-02-04 11:40:20’,NULL,NULL,14),
(10,‘BILL2016_010’,‘豆瓣醬’,‘食品-調料’,‘瓶’,‘200.00’,‘2000.00’,2,1,‘2020-01-29 05:07:03’,NULL,NULL,8),
(11,‘BILL2016_011’,‘海之藍’,‘飲料-國酒’,‘瓶’,‘50.00’,‘10000.00’,1,1,‘2020-04-14 16:16:00’,NULL,NULL,1),
(12,‘BILL2016_012’,‘芝華士’,‘飲料-洋酒’,‘瓶’,‘20.00’,‘6000.00’,1,1,‘2020-06-09 17:00:00’,NULL,NULL,1),
(13,‘BILL2016_013’,‘長城紅葡萄酒’,‘飲料-紅酒’,‘瓶’,‘60.00’,‘800.00’,2,1,‘2020-04-14 15:23:00’,NULL,NULL,1),
(14,‘BILL2016_014’,‘泰國香米’,‘食品-大米’,‘斤’,‘400.00’,‘5000.00’,2,1,‘2020-05-09 15:20:00’,NULL,NULL,3),
(15,‘BILL2016_015’,‘東北大米’,‘食品-大米’,‘斤’,‘600.00’,‘4000.00’,2,1,‘2020-05-14 14:00:00’,NULL,NULL,3),
(16,‘BILL2016_016’,‘可口可樂’,‘飲料’,‘瓶’,‘2000.00’,‘6000.00’,2,1,‘2020-03-27 13:03:01’,NULL,NULL,2),
(17,‘BILL2016_017’,‘脈動’,‘飲料’,‘瓶’,‘1500.00’,‘4500.00’,2,1,‘2020-05-10 12:00:00’,NULL,NULL,2),
(18,‘BILL2016_018’,‘哇哈哈’,‘飲料’,‘瓶’,‘2000.00’,‘4000.00’,2,1,‘2020-06-24 15:12:03’,NULL,NULL,2);
(3)向smbms_provider表插入數據
insert into smbms_provider(id,proCode,proName,proDesc,proContact,proPhone,proAddress,proFax,createdBy,creationDate,modifyDate,modifyBy) values
(1,‘BJ_GYS001’,‘北京三木堂商貿有限公司’,‘長期合作伙伴,主營產品:茅臺、五糧液、郎酒、酒鬼酒、瀘州老窖、賴茅酒、法國紅酒等’,‘張國強’,‘13566667777’,‘北京市豐臺區育芳園北路’,‘010-58858787’,1,‘2020-03-21 16:52:07’,NULL,NULL),
(2,‘HB_GYS001’,‘石家莊帥益食品貿易有限公司’,‘長期合作伙伴,主營產品:飲料、水飲料、植物蛋白飲料、休閑食品、果汁飲料、功能飲料等’,‘王軍’,‘13309094212’,‘河北省石家莊新華區’,‘0311-67738876’,1,‘2020-04-13 04:20:40’,NULL,NULL),
(3,‘GZ_GYS001’,‘深圳市泰香米業有限公司’,‘初次合作伙伴,主營產品:良記金輪米,龍輪香米等’,‘鄭程瀚’,‘13402013312’,‘廣東省深圳市福田區深南大道6006華豐大廈’,‘0755-67776212’,1,‘2020-03-21 16:56:07’,NULL,NULL),
(4,‘GZ_GYS002’,‘深圳市喜來客商貿有限公司’,‘長期合作伙伴,主營產品:堅果炒貨.果脯蜜餞.天然花茶.營養豆豆.特色美食.進口食品.海味零食.肉脯肉’,‘林妮’,‘18599897645’,‘廣東省深圳市福龍工業區B2棟3樓西’,‘0755-67772341’,1,‘2020-03-22 16:52:07’,NULL,NULL),
(5,‘JS_GYS001’,‘興化佳美調味品廠’,‘長期合作伙伴,主營產品:天然香辛料、雞精、復合調味料’,‘徐國洋’,‘13754444221’,‘江蘇省興化市林湖工業區’,‘0523-21299098’,1,‘2020-02-22 16:52:07’,NULL,NULL),
(6,‘BJ_GYS002’,‘北京納福爾食用油有限公司’,‘長期合作伙伴,主營產品:山茶油、大豆油、花生油、橄欖油等’,‘馬鶯’,‘13422235678’,‘北京市朝陽區珠江帝景1號樓’,‘010-588634233’,1,‘2020-03-21 17:52:07’,NULL,NULL),
(7,‘BJ_GYS003’,‘北京國糧食用油有限公司’,‘初次合作伙伴,主營產品:花生油、大豆油、小磨油等’,‘王馳’,‘13344441135’,‘北京大興青云店開發區’,‘010-588134111’,1,‘2020-04-13 00:00:00’,NULL,NULL),
(8,‘ZJ_GYS001’,‘慈溪市廣和綠色食品廠’,‘長期合作伙伴,主營產品:豆瓣醬、黃豆醬、甜面醬,辣椒,大蒜等農產品’,‘薛圣丹’,‘18099953223’,‘浙江省寧波市慈溪周巷小安村’,‘0574-34449090’,1,‘2020-01-21 06:02:07’,NULL,NULL),
(9,‘GX_GYS001’,‘優百商貿有限公司’,‘長期合作伙伴,主營產品:日化產品’,‘李立國’,‘13323566543’,‘廣西南寧市秀廂大道42-1號’,‘0771-98861134’,1,‘2020-03-21 19:52:07’,NULL,NULL),
(10,‘JS_GYS002’,‘南京火頭軍信息技術有限公司’,‘長期合作伙伴,主營產品:不銹鋼廚具等’,‘陳女士’,‘13098992113’,‘江蘇省南京市浦口區浦口大道1號新城總部大廈A座903室’,‘025-86223345’,1,‘2020-03-25 16:52:07’,NULL,NULL),
(11,‘GZ_GYS003’,‘廣州市白云區美星五金制品廠’,‘長期合作伙伴,主營產品:海綿床墊、坐墊、靠墊、海綿枕頭、頭枕等’,‘梁天’,‘13562276775’,‘廣州市白云區鐘落潭鎮福龍路20號’,‘020-85542231’,1,‘2020-01-21 06:12:17’,NULL,NULL),
(12,‘BJ_GYS004’,‘北京隆盛日化科技’,‘長期合作伙伴,主營產品:日化環保清洗劑,家居洗滌專賣、洗滌用品網、墻體除霉劑、墻面霉菌清除劑等’,‘孫欣’,‘13689865678’,‘北京市大興區舊宮’,‘010-35576786’,1,‘2020-01-21 12:51:11’,NULL,NULL),
(13,‘SD_GYS001’,‘山東豪克華光聯合發展有限公司’,‘長期合作伙伴,主營產品:洗衣皂、洗衣粉、洗衣液、洗潔精、消殺類、香皂等’,‘吳洪轉’,‘13245468787’,‘山東濟陽濟北工業區仁和街21號’,‘0531-53362445’,1,‘2020-01-28 10:52:07’,NULL,NULL),
(14,‘JS_GYS003’,‘無錫喜源坤商行’,‘長期合作伙伴,主營產品:日化品批銷’,‘周一清’,‘18567674532’,‘江蘇無錫盛岸西路’,‘0510-32274422’,1,‘2020-04-23 11:11:11’,NULL,NULL),
(15,‘ZJ_GYS002’,‘樂擺日用品廠’,‘長期合作伙伴,主營產品:各種中、高檔塑料杯,塑料樂扣水杯(密封杯)、保鮮杯(保鮮盒)、廣告杯、禮品杯’,‘王世杰’,‘13212331567’,‘浙江省金華市義烏市義東路’,‘0579-34452321’,1,‘2020-06-22 10:01:30’,NULL,NULL);
(4)向smbms_role表插入數據
insert into smbms_role(id,roleCode,roleName,createdBy,creationDate,modifyBy,modifyDate) values
(1,‘SMBMS_ADMIN’,‘系統管理員’,1,‘2020-01-01 00:00:00’,NULL,NULL),
(2,‘SMBMS_MANAGER’,‘經理’,1,‘2020-02-02 00:01:00’,NULL,NULL),
(3,‘SMBMS_EMPLOYEE’,‘普通員工’,1,‘2020-02-03 00:00:00’,NULL,NULL);
(5)向smbms_user表插入數據
insert into smbms_user(id,userCode,userName,userPassword,gender,birthday,phone,address,userRole,createdBy,creationDate,modifyBy,modifyDate) values
(1,‘admin’,‘系統管理員’,‘1234567’,1,‘1983-10-10’,‘13688889999’,‘山東省日照市東港區成府路207號’,1,1,‘2020-03-21 16:52:07’,NULL,NULL),
(2,‘liming’,‘李明’,‘0000000’,2,‘1983-12-10’,‘13688884457’,‘山東省日照市東港區前門東大街9號’,2,1,‘2020-03-01 00:00:00’,NULL,NULL),
(5,‘hanlubiao’,‘韓路彪’,‘0000000’,2,‘2001-06-05’,‘18567542321’,‘山東省日照市東港區北辰中心12號’,2,1,‘2020-02-11 19:52:09’,NULL,NULL),
(6,‘zhanghua’,‘張華’,‘0000000’,1,‘1980-06-15’,‘13544561111’,‘山東省日照市東港區學院路61號’,3,1,‘2020-02-11 10:51:17’,NULL,NULL),
(7,‘wangyang’,‘王洋’,‘0000000’,2,‘2001-12-31’,‘13444561124’,‘山東省青島市三二二區西二旗輝煌國際16層’,3,1,‘2020-06-11 19:09:07’,NULL,NULL),
(8,‘zhaoyan’,‘趙燕’,‘0000000’,1,‘1999-03-07’,‘18098764545’,‘山東省青島市東科區回龍觀小區10號樓’,3,1,‘2020-04-21 13:54:07’,NULL,NULL),
(10,‘sunlei’,‘孫磊’,‘0000000’,2,‘1998-01-04’,‘13387676765’,‘山東省日照市朝陽區管莊新月小區12樓’,3,1,‘2020-05-06 10:52:07’,NULL,NULL),
(11,‘sunxing’,‘孫興’,‘0000000’,2,‘1997-03-12’,‘13367890900’,‘北京市朝陽區建國門南大街10號’,3,1,‘2020-01-09 16:51:17’,NULL,NULL),
(12,‘zhangchen’,‘張晨’,‘0000000’,1,‘1986-03-28’,‘18098765434’,‘朝陽區管莊路口北柏林愛樂三期13號樓’,3,1,‘2019-06-09 05:52:37’,1,‘2020-04-14 14:15:36’),
(13,‘dengchao’,‘鄧超’,‘0000000’,2,‘1981-11-04’,‘13689674534’,‘北京市海淀區北航家屬院10號樓’,3,1,‘2020-07-01 08:02:47’,NULL,NULL),
(14,‘yangguo’,‘楊過’,‘0000000’,2,‘1989-01-01’,‘13388886623’,‘北京市朝陽區北苑家園茉莉園20號樓’,3,1,‘2020-02-01 03:52:07’,NULL,NULL),
(15,‘zhaomin’,‘趙敏’,‘0000000’,1,‘1989-12-04’,‘18099897657’,‘山東省臨沂市昌平區天通苑3區12號樓’,2,1,‘2020-01-12 12:02:12’,NULL,NULL);
此外,本系統中所用到的用戶性別和用戶身份代碼如表3.5.1至表3.5.2所示。
表3.5.1 用戶性別代碼表
| 1 | 女 | 
| 2 | 男 | 
表3.5.2 用戶身份代碼
| 1 | 系統管理員 | 
| 2 | 經理 | 
| 3 | 普通員工 | 
4 各功能模塊的設計與實現
4.1 系統開發條件
4.1.1 開發語言
系統使用的開發語言是Java。Java具有簡單性、面向對象、分布式、健壯性、安全性、平臺獨立與可移植性、多線程等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統應用程序等。正是因為Java語言擁有如此諸多的優秀特性,所以我們選擇了它作為開發超市訂單管理系統,使得整個開發、調試過程更加高效。
4.1.2 開發框架
超市訂單管理系統以SSM架構作為支撐,分為表現層、業務層和持久層三層,實現后臺數據更新。該架構由Spring MVC、Spring和MyBatis三個開源框架整合而成,用于開發結構合理,性能優越,代碼健壯的應用程序。
圖4.1.1 SSM架構示意圖
4.1.3 前端框架
由于本系統是Web應用,所以使用了HTML5+CSS3+JavaScript的方式實現前端頁面。實現過程中參考了Bootstrap前端開發框架。Bootstrap是Twitter退出的一個用于前端開發的開源工具包。在設計前端頁面時,參考了Bootstrap的相關開源代碼。
4.1.4 集成開發環境
編程所使用的集成開發環境是Eclipse,是著名的跨平臺的自由集成開發環境(IDE)。Eclipse 是一個開放源代碼的、基于Java的可擴展開發平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構建開發環境。本次系統便選用了Eclipse作為開發平臺。
4.1.5 Web應用服務器
Tomcat由Apache、Sun和其他一些公司及個人共同開發而成。由于有了Sun的參與和支持,最新的Servlet和JSP規范可以在Tomcat中得到體現。因為Tomcat技術先進、性能穩定,因而成為目前比較流行的Web應用服務器。本次系統選用的便是Tomcat作為應用服務器。
4.1.6 數據庫管理系統
本系統使用的數據庫管理系統是MySQL Community。MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB公司開發。在WEB應用方面,MySQL是最好的RDBMS (Relational Database Management System,關系數據庫管理系統)應用軟件。
系統中的數據庫以及數據庫中的所有關系模式都使用MySQL進行處理。
4.2 用戶界面設計
完成數據庫創建和功能說明以后,我們進行下一步工作,即設計用戶界面,完成了系統要求的 5 項主要功能。
我們把超市訂單管理系統的窗體分成5個主要部分,如下圖所示。
1、 訂單管理
圖 4.2.1 訂單管理界面
2、 供應商管理
圖 4.2.2 供應商管理界面
3、 用戶管理
圖 4.2.3 用戶管理界面
4、 修改密碼
圖 4.2.4 修改密碼界面
5、 登錄注銷
圖 4.2.5 登錄界面
4.3 功能模塊說明
1、訂單信息添加、查詢、修改與刪除
(1)訂單信息查看:為了對訂單瀏覽信息,能夠實現瀏覽的功能是十分必要的。管理員輸入需要搜索的相應信息,點擊查看按鈕后系統將尋找到的數據展示到網頁中。
圖4.3.1 訂單查看界面
(2)訂單信息添加:作為超市訂單管理系統,訂單信息的管理是很重要的。每當采購部門增加新的訂單時,訂單信息就要增加。超市也可能因為其它原因增加訂單信息,訂單添加模塊都可以做出快捷的解決方案。管理員輸入相應的信息,點擊提交后系統將數據保存到數據庫中。
圖4.3.2 訂單添加界面
(3)訂單信息修改:根據訂單編號可以查詢訂單詳細信息,然后修改訂單的所有信息。系統從數據庫中讀取數據并顯示到頁面上,管理員修改數據后,點擊修改按鈕,系統將更新表中的數據。
圖4.3.3 訂單修改界面
(4)訂單信息刪除:根據訂單編號可以刪除該訂單的信息。管理員選擇需要刪除訂單名稱并點擊刪除按鈕,系統將從數據庫中刪除相應數據。
(5)訂單信息查詢:在成千上萬種商品種,如果人為尋找某一個商品肯定是不可能的,只有通過商品信息查詢模塊才能為用戶或管理人員解決這個難題。根據訂單名稱可以查詢該訂單的信息。管理員輸入訂單名稱并點擊查詢按鈕,系統將從數據庫中查詢相應的數據并顯示到頁面上。
圖4.3.4 訂單查詢界面
2、 供應商信息添加、查詢、修改與刪除
(1)供應商查詢界面:供應商查詢界面提供了供應商的信息,可根據供應商名稱的關鍵字進行篩選查詢,并提供了添加供應商、查看供應商詳細信息、修改供應商信息、刪除供應商的功能。
圖4.3.5 供應商查詢界面
(2)供應商查看詳情界面:在供應商查詢界面點擊具體供應商操作列表的查看按鈕,可以查看供應商的具體信息,包括:供貨商編碼、供貨商名稱、詳細描述、聯系人、聯系電話、地址、微信。
圖4.3.6 供應商查看界面
(3)供應商修改頁面:若供應商信息變動,管理員可通過供應商信息修改功能對供應商信息進行更新,更新后的數據將保存到數據庫中。
圖4.3.7 供應商修改界面
(4)商品供應商信息刪除:企業倒閉或者經營策略的改變,當它對超市商品的供應沒有作用時,商品供應商廠家信息的刪除是正常的。管理員輸入供應商名稱查詢數據表中的數據并顯示到頁面上,點擊刪除后系統將表中的相應數據刪除。
(5)供應商添加界面:與供應商達成交易后,管理員在供應商添加頁面填寫供應商具體信息,填寫完畢點擊提交,添加后的數據將保存到數據庫中。
圖4.3.8 供應商添加界面
3、 用戶信息添加、查詢、修改與刪除
(1)用戶管理頁面,通過輸入用戶名和身份查詢用戶。當不記得用戶名的具體名字時,只輸入用戶名的其中一個字,會檢索出所有帶這個字的用戶,方便管理員查詢管理。點擊右邊鏈接添加用戶,會連接到相關網頁添加用戶信息。點擊操作里的查看、修改等可以進行相應的改、刪、查操作。
圖4.3.9 用戶查詢界面
(2)用戶信息刪除:當企業員工離職時,或者經過一段時間后,會發現用戶表中一些信息時無用的,用戶刪除模塊可以解決這樣的問題。
(3)添加用戶信息:填寫用戶相關信息,下面有兩個按鈕,可以選擇重置或者提交。
圖4.3.10 用戶添加界面
4、 修改密碼
為了系統的安全,用戶的應該只有用戶個人才能修改,這不僅保證了整個公司的利益也保護了個人隱私。用戶在輸入相應的用戶編號,填寫舊密碼以及新密碼后,點擊提交,重置密碼成功。發現輸入錯誤時,可以手動刪除或者點擊重置按鈕,重新填寫。
圖4.3.13 修改密碼界面
修改用戶密碼成功后,會彈出修改用戶密碼成功頁面,如圖4.3.14所示。
圖4.3.14 修改密碼成功界面
5、 登錄/注銷
輸入用戶名以及用戶密碼登錄進入超市訂單管理界面,可以查看管理信息。管理員可以對相關數據進行增、改、查等操作,也可以注銷退出系統。
5 實訓總結
5.1 所遇困難
在實現本系統時遇到的困難主要體現在兩個方面,一是系統的前端頁面的設計,二是怎樣Web與數據庫實現交互。
系統前端頁面的設計困難的解決是通過參考著名的前端框架Bootstrap實現的。Bootstrap框架提供了許多精美的組建、布局,還開放了源代碼供參考。在此基礎上我們還加入了一些利用JavaScript代碼實現的美化效果,使得前端設計更加美觀。
實體Web與數據庫交互的解決得益于SSM框架的三層Spring MVC、Spring和MyBatis,能夠分離處理數據庫與Web層的視圖,從而達到交互的目的。
此外,在編寫后端的時候,變量的大小寫、系統配置也是困難重重。好在,在反復編寫之后,迅速熟悉的技巧,能夠讓頁面自由切換。系統配置更是反復在網上求證,得以解決。
5.2 實驗心得
這一次合作開發超市訂單管理系統,從開始選擇課題的困惑到最終完成了一個我們還算滿意的作品,使我學到了很多東西。從設計數據庫到編寫后臺代碼,鏈接數據庫,在網頁上顯示,令人印象深刻。反復查閱資料,啟動Tomcat到凌晨0點,都是藏著對這次項目的努力。其實,從一開始選擇哪個題目是否用SSM框架來開發我一直也猶豫過,像國內勢頭正旺的ThinkPHP,易學易用,完善的中文開發文檔,遇到問題或者bug可以非常容易的在中文社區得到解答。但是我最后選擇了SSM框架,不僅僅因為它廣泛,而是我希望能夠挑戰自己。經過這一個周的磨練,我最大的收獲除了學到了真正可以應用的知識外,更重要的是學會了項目合作開發的經驗。
6 附件
6.1 核心代碼(一)
package cn.smbms.controller;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.smbms.pojo.Order;
import cn.smbms.pojo.User;
import cn.smbms.service.OrderService;
import cn.smbms.utils.Constants;
import cn.smbms.utils.PageHelper;
@Controller
public class OrderController {
//引入業務層的資源
? @Autowired
? OrderService orderService;
? //添加訂單界面
? @RequestMapping("/orderAdd")
? public String orderAdd() {
? return “orderAdd”;
? }
? //添加訂單處理方法
? @RequestMapping("/orderAddGo")
? public String orderAddGo(Order order,HttpSession session) {
? Order ord = new Order();
? ord = order;
? Integer oid=null;
? oid=((User) session.getAttribute(Constants.USER_SESSION)).getId();
? if(null!=oid) {
? ord.setCreatedBy(oid);
? if(orderService.orderAdd(ord))
? return “redirect:getOrder”;
? else
? return “redirect:orderAdd”;
? }
? else
? return “redirect:login”;
? }
? //獲取訂單列表的處理方法
? @RequestMapping("/getOrder")
public String getOrderList(String orderName,Model md,String pageIndex) {
String strName="";if(!StringUtils.isEmpty(orderName)) {strName=orderName;}Integer currentPageNo=1;Integer pageSize=Constants.pageSize;if(!StringUtils.isEmpty(pageIndex)) {currentPageNo=Integer.parseInt(pageIndex);}//根據條件獲取總記錄數Integer totalCount=orderService.getOrderCount(strName);//計算可以分幾頁PageHelper pages=new PageHelper();pages.setCurrentPageNo(currentPageNo);pages.setPageSize(pageSize);pages.setTotalCount(totalCount);int totalPageCount = pages.getTotalPageCount();List<Order> order=orderService.getOrderList(strName,(currentPageNo-1)*pageSize,pageSize);md.addAttribute("totalPageCount", totalPageCount);? md.addAttribute(“totalCount”, totalCount);
? md.addAttribute(“currentPageNo”, currentPageNo);
md.addAttribute("order",order);return "orderList";}
? //根據id刪除訂單信息
? @RequestMapping(“deleteOrderById”)
? public String deleteOrderById(String id,Model md) {
? String msg="";
? if(orderService.deleteOrderById(id)) {
? msg=“刪除訂單成功!”;
? }else
? msg=“刪除訂單失敗!”;
? md.addAttribute(“msg”, msg);
? return “redirect:getOrder”;
? }
? //添加修改界面
? @RequestMapping("/modifyOrder")
? public String modifyOrder(String id,Model md) {
? Order order=new Order();
? order=orderService.getOrderById(id);
? md.addAttribute(“order”, order);
? return “modifyOrder”;
? }
? //添加修改用戶的執行路由信息
? @RequestMapping("/modifyOrderGo")
? public String modifyOrderGo(Order order,HttpSession session) {
? Integer oid=((User)session.getAttribute(Constants.USER_SESSION)).getId();
? if(null!=order) {
? order.setModifyBy(oid);
? order.setModifyDate(new Date());
? orderService.modifyOrder(order);
? }
? return “redirect:getOrder”;
? }
? //根據ID查看訂單
? @RequestMapping("/viewOrder")
? public String viewOrder(String id,Model md) {
? Order order=new Order();
? order=orderService.getOrderById(id);
? md.addAttribute(“order”, order);
? return “viewOrder”;
? }
}
6.2 核心代碼(二)
package cn.smbms.controller;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.smbms.pojo.Provider;
import cn.smbms.pojo.User;
import cn.smbms.service.ProviderService;
import cn.smbms.utils.Constants;
import cn.smbms.utils.PageHelper;
@Controller
public class ProviderController {
//引入業務層的資源
? @Autowired
? ProviderService proService;
? //添加供應商處理方法
? @RequestMapping("/providerAddGo")
? public String providerAddGo(Provider provider,HttpSession session) {
? Provider pro=new Provider();
? pro=provider;
? Integer uid=null;
? uid=((User) session.getAttribute(Constants.USER_SESSION)).getId();
? if(null!=uid) {
? pro.setCreatedBy(uid);
? if(proService.providerAdd(pro))
? return “redirect:getProviders”;
? else
? return “redirect:providerAdd”;
? }
? else
? return “redirect:login”;
? }
? //添加供應商界面
? @RequestMapping("/providerAdd")
? public String providerAdd() {
? return “providerAdd”;
? }
? @RequestMapping("/getProviders")
public String getProviderList(String proName,Model md,String pageIndex) {
String strName="";if(!StringUtils.isEmpty(proName)) {strName=proName;}Integer currentPageNo=1;Integer pageSize=Constants.pageSize;if(!StringUtils.isEmpty(pageIndex)) {currentPageNo=Integer.parseInt(pageIndex);}//根據條件獲取總記錄數Integer totalCount=proService.getProviderCount(strName);//計算可以分幾頁PageHelper pages=new PageHelper();pages.setCurrentPageNo(currentPageNo);pages.setPageSize(pageSize);pages.setTotalCount(totalCount);int totalPageCount = pages.getTotalPageCount();List<Provider> providers=proService.getProviderList(strName,(currentPageNo-1)*pageSize,pageSize);md.addAttribute("totalPageCount", totalPageCount);? md.addAttribute(“totalCount”, totalCount);
? md.addAttribute(“currentPageNo”, currentPageNo);
md.addAttribute("providers",providers);return "providerList";}
? //添加修改界面
? @RequestMapping("/modifyProvider")
? public String modifyProvider(String id,Model md) {
? Provider provider=new Provider();
? provider=proService.getProvider(id);
? md.addAttribute(“provider”, provider);
? return “modifyProvider”;
? }
? //修改供應商
? @RequestMapping("/modifyProviderGo")
? public String modifyProviderGo(Provider provider,HttpSession session) {
? Integer oid=((User)session.getAttribute(Constants.USER_SESSION)).getId();
? if(null!=provider) {
? provider.setModifyBy(oid);
? provider.setModifyDate(new Date());
? proService.modifyProvider(provider);
? }
? return “redirect:getProviders”;
? }
? //從ID獲取某一個供應商信息
? @RequestMapping("/viewProvider")
? public String viewProvider(String id,Model md) {
? Provider provider=new Provider();
? provider=proService.getProvider(id);
? md.addAttribute(“provider”, provider);
? return “viewProvider”;
? }
? //刪除供應商
? @RequestMapping(“deleteProviderById”)
? public String deleteProviderById(String id,Model md) {
? String msg="";
? if(proService.deleteProviderById(id)) {
? msg=“刪除訂單成功!”;
? }else
? msg=“刪除訂單失敗!”;
? md.addAttribute(“msg”, msg);
? return “redirect:getProviders”;
? }
}
6.3 核心代碼(三)
package cn.smbms.controller;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import cn.smbms.pojo.User;
import cn.smbms.service.UserService;
import cn.smbms.utils.Constants;
import cn.smbms.utils.PageHelper;
import cn.smbms.utils.UploadHelper;
@Controller
public class UserController {
? @Resource
? UserService userService;
? //更據id刪除用戶信息
? @RequestMapping(“deleteUserById”)
? public String deleteUserById(String id,Model md) {
? String msg="";
? if(userService.deleteUserById(id)) {
? msg=“刪除用戶成功!”;
? }else
? msg=“刪除用戶失敗!”;
? md.addAttribute(“msg”, msg);
? return “redirect:getUserList”;
? }
? //添加修改用戶的執行路由信息
? @RequestMapping("/modifyUserGo")
? public String modifyUserGo(User user,HttpSession session) {
? Integer uid=((User)session.getAttribute(Constants.USER_SESSION)).getId();
? if(null!=user) {
? user.setModifyBy(uid);
? user.setModifyDate(new Date());
? userService.modifyUser(user);
? }
? return “redirect:getUserList”;
? }
? //添加修改用戶的界面路由
? @RequestMapping("/modifyUser")
? public String modifyUser(String id,Model md) {
? User user=new User();
? user=userService.getUserById(id);
? md.addAttribute(“user”, user);
? return “modifyUser”;
? }
? //修改密碼實現方法
? @RequestMapping("/modifyPasswordGo")
? public String modifyPasswordGo(String userCode,String userPassword,String newPassword,Model md) {
? String msg="";
? if(userService.modifyPasswd(userCode, userPassword, newPassword))
? msg=“修改密碼成功!”;
? else
? msg=“修改密碼失敗!”;
? md.addAttribute(“msg”,msg);
? return “modifyPasswordFinish”;
? }
? //添加用戶打開修改密碼的界面
? @RequestMapping("/modifyPasswd")
? public String modifyPasswd() {
? return “modifyPasswd”;
? }
? //添加用戶處理方法
? @RequestMapping(“addUserGo”)
? public String addUserGo(User user,HttpSession session,HttpServletRequest request,
? @RequestParam(value =“midPicPath”, required = false) MultipartFile attach,
? @RequestParam(value =“mworkPicPath”, required = false) MultipartFile attach1,
? Model md) {
? String strIdPicPath=null;
? String strWorkPicPath=null;
? Map<String,String> msgMap=new HashMap<String,String>();
? String savePath= request.getSession().getServletContext().getRealPath(“uploads”);
? msgMap=UploadHelper.saveFile(savePath, attach);
? if(msgMap.get(“flag”)==“fail”) {
? md.addAttribute(“error”,msgMap.get(“msg”));
? return “redirect:addUser”;
? }else {
? strIdPicPath=msgMap.get(“url”);
? }
? msgMap=UploadHelper.saveFile(savePath, attach1);
? if(msgMap.get(“flag”)==“fail”) {
? md.addAttribute(“error”,msgMap.get(“msg”));
? return “redirect:addUser”;
? }else {
? strWorkPicPath=msgMap.get(“url”);
? }
? User user1=new User();
? user1=user;
? Integer uid=null;
? uid=((User) session.getAttribute(Constants.USER_SESSION)).getId();
? if(null!=uid) {
? user1.setCreatedBy(uid);
? user1.setIdPicPath(strIdPicPath);
? user1.setWorkPicPath(strWorkPicPath);
? if(userService.addUser(user1))
? return “redirect:getUserList”;
? else {
? md.addAttribute(“error”,“您還沒有登錄,請登錄!”);
? return “redirect:addUser”;
? }
? }
? else
? return “redirect:login”;
? }
? //添加用戶界面
? @RequestMapping(“addUser”)
? public String addUser() {
? return “addUser”;
? }
? //請求登錄界面
? @RequestMapping("/login")
? public String login() {
? return “login”;
? }
? //退出界面
? @RequestMapping("/logout")
? public String logout(HttpSession session){
? session.removeAttribute(“user”);
? return “login”;
? }
? //請求處理程序
? @RequestMapping("/loginGo")
? public String loginGo(String userCode,String userPassword,Model md,HttpSession session) {
? User user=new User();
? user=userService.checkLogin(userCode, userPassword);
? if(null!=user) {
? md.addAttribute(“user”,user);
? session.setAttribute(Constants.USER_SESSION, user);
? return “frame”;
? }else {
? //md.addAttribute(“msg”,“用戶名或密碼錯誤!”);
? throw new RuntimeException(“用戶名或密碼錯誤!”);
? //return “login”;
? }
? }
? //異常處理
// @ExceptionHandler(value= {RuntimeException.class})
// public String handlerException(RuntimeException e,HttpServletRequest req) {
// req.setAttribute(“e”, e);
// return “error”;
// }
? @RequestMapping("/main")
? public String main(HttpSession session) {
? //檢查是否登錄
? if(session.getAttribute(“user”)==null) {
? return “redirect:login”;
? }
? return “main”;
? }
? //查詢用戶列表
? @RequestMapping("/getUserList")
? public String getUserList(String userName,String roleName,String pageIndex,Model md) {
? //設置頁面容量
int pageSize = Constants.pageSize;//當前頁碼int currentPageNo = 1;if(pageIndex != null){try{currentPageNo = Integer.valueOf(pageIndex);}catch(NumberFormatException e){return "redirect:/user/syserror.html";//response.sendRedirect("syserror.jsp");}}//總數量(表)if(StringUtils.isEmpty(userName))userName="";if(StringUtils.isEmpty(roleName))roleName="";int totalCount = userService.getUserCount(userName, roleName);//總頁數PageHelper pages=new PageHelper();pages.setCurrentPageNo(currentPageNo);pages.setPageSize(pageSize);pages.setTotalCount(totalCount);int totalPageCount = pages.getTotalPageCount();//控制首頁和尾頁if(currentPageNo < 1){currentPageNo = 1;}else if(currentPageNo > totalPageCount){currentPageNo = totalPageCount;}? if(StringUtils.isEmpty(userName)) {
? userName="";
? }
? List users=userService.getUserList(userName,roleName,(currentPageNo-1)*pageSize,pageSize);
? md.addAttribute(“userList”, users);
? md.addAttribute(“totalPageCount”, totalPageCount);
? md.addAttribute(“totalCount”, totalCount);
? md.addAttribute(“currentPageNo”, currentPageNo);
? return “userList”;
? }
? @RequestMapping("/viewUser")
? public String viewUser(String id,Model md) {
? User user=new User();
? user=userService.getUserById(id);
? md.addAttribute(“user”, user);
? return “viewUser”;
? }
}
6.4 核心代碼(四)
package cn.smbms.controller;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import cn.smbms.pojo.User;
@Controller
public class IndexController{
? //用戶登錄處理界面
? @RequestMapping("/userLoginGo")
? public ModelAndView userLoginGo(User user,HttpSession session) {
? ModelAndView mv =new ModelAndView();
? mv.addObject(“user”,user);
? session.setAttribute(“userName”,“ddd”);
? mv.setViewName(“success”);
? return mv;
? }
? //用戶登錄界面
? @RequestMapping("/userLogin")
? public String userLogin() {
? return “userLogin”;
? }
? @RequestMapping("/input")
? public String input() {
? return “input”;
? }
? //@RequestMapping({"/index","/","/my"})
? @RequestMapping(value="/index",method=RequestMethod.GET)
? public String index(@RequestParam(value=“username”,required=false) String username,Model md) {
? System.out.println(“Hello SpringMVC”);
? md.addAttribute(“username”,username);
? return “index”;
? }
? @RequestMapping("/welcome")
? public ModelAndView welcome(String username) {
? ModelAndView mv=new ModelAndView();
? mv.addObject(“username”,username);
? mv.setViewName(“welcome”);
? return mv;
? }
}
總結
 
                            
                        - 上一篇: linux如何安装github下载的东西
- 下一篇: PBRT的程序运行流程
