食品進(jìn)銷存管理系統(tǒng)_第1頁
食品進(jìn)銷存管理系統(tǒng)_第2頁
食品進(jìn)銷存管理系統(tǒng)_第3頁
食品進(jìn)銷存管理系統(tǒng)_第4頁
食品進(jìn)銷存管理系統(tǒng)_第5頁
已閱讀5頁,還剩73頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

頁第1章課題簡(jiǎn)介1.1開發(fā)背景在我國數(shù)量眾多的食品批發(fā)公司中,中小食品批發(fā)公司占了絕大多數(shù),這些食品批發(fā)公司也不可避免地要加入國際化食品批發(fā)公司的競(jìng)爭(zhēng)行列,而實(shí)現(xiàn)食品批發(fā)公司信息化是參與競(jìng)爭(zhēng)的必要條件,但是中小食品公司的多樣性及其靈活多變的經(jīng)營方式,加上其資金投入量的限制,使得很多中小食品批發(fā)公司沒能進(jìn)行信息化建設(shè)。實(shí)際上大部分中小食品批發(fā)公司需要的只是能解決食品進(jìn)、銷、存管理和財(cái)務(wù)管理等的基礎(chǔ)軟件。因此,開發(fā)基于中小食品批發(fā)公司應(yīng)用的進(jìn)銷存管理系統(tǒng)尤為重要。而隨著社會(huì)的不斷發(fā)展,計(jì)算機(jī)被廣泛應(yīng)用于各行各業(yè)之中。用計(jì)算機(jī)管理軟件對(duì)公司業(yè)務(wù)進(jìn)行管理更是一種行業(yè)發(fā)展趨勢(shì),也是衡量一個(gè)國家技術(shù)發(fā)展水平的標(biāo)志。利用計(jì)算機(jī)管理不但可以提升工作效率,還可以節(jié)省人力物力,增強(qiáng)數(shù)據(jù)準(zhǔn)確性、實(shí)時(shí)性和有效性。因此在食品批發(fā)公司使用計(jì)算機(jī)管理軟件進(jìn)行進(jìn)貨、銷售、庫存等管理是非常必要的。當(dāng)前,隨著經(jīng)濟(jì)的全球化以及中國經(jīng)濟(jì)改革的逐漸深入,食品批發(fā)業(yè)面臨著越來越激烈的競(jìng)爭(zhēng),改善公司內(nèi)部以及整個(gè)供應(yīng)鏈各個(gè)環(huán)節(jié)的管理、調(diào)度及資源配置,具備迅速適應(yīng)客戶的新需求和市場(chǎng)新機(jī)遇的能力,是中國公司贏得競(jìng)爭(zhēng)勝利的決定性因素。為了適應(yīng)發(fā)展需要設(shè)計(jì)本系統(tǒng)。1.2研究?jī)?nèi)容高科技的發(fā)展,軟件管理系統(tǒng)成為工作的得力助手。今天,計(jì)算機(jī)價(jià)格越來越大眾化,管理軟件性能越來越優(yōu)秀,逐漸被應(yīng)用于眾多領(lǐng)域。管理軟件廣泛普及應(yīng)用的原因主要有以下幾個(gè)方面:第一,計(jì)算機(jī)行業(yè)本身發(fā)展迅速;第二,計(jì)算機(jī)可以代替人工進(jìn)行繁雜和重復(fù)性的工作;第三,管理軟件可以節(jié)省許多資源;第四,管理軟件可以提高人們的工作效率;第五,管理軟件便于管理人員的管理。本食品進(jìn)銷存管理系統(tǒng)是基于先進(jìn)的軟件和高速、大容量的硬件基礎(chǔ)上的新的進(jìn)銷存管理模式,做到通過集中式的信息數(shù)據(jù)庫,將公司的進(jìn)貨、銷售、存儲(chǔ)等經(jīng)營業(yè)務(wù)有機(jī)的結(jié)合起來,大大減少公司管理部門的勞動(dòng)量,改善公司內(nèi)部以及整個(gè)供應(yīng)鏈各個(gè)環(huán)節(jié)的管理、調(diào)度及資源配置,使得管理合理規(guī)范。系統(tǒng)盡量合理的控制物流,尤其是食品庫存的控制,將食品數(shù)量控制到只在需要的時(shí)候向需要的部門按需要的數(shù)量提供所需要的食品,也就是說,它既防止食品供應(yīng)滯后于對(duì)他們的需求,也防止食品過早地進(jìn)貨,以免增加庫存,造成物資和資金的積壓,實(shí)現(xiàn)食品銷售的全方面管理。通過系統(tǒng)實(shí)現(xiàn)從基礎(chǔ)數(shù)據(jù)維護(hù)、進(jìn)貨直到銷售后利潤(rùn)統(tǒng)計(jì)的一系列功能。簡(jiǎn)化手工勞動(dòng)的繁雜性、降低人工勞動(dòng)強(qiáng)度、提高數(shù)據(jù)的時(shí)效性、提高工作效率、降低經(jīng)營成本,為管理層決策提供強(qiáng)有力的支持。本系統(tǒng)還要考慮到經(jīng)濟(jì)、技術(shù)和運(yùn)行環(huán)境等方面的條件,來確定系統(tǒng)的總體結(jié)構(gòu)和系統(tǒng)各組成部分的技術(shù)方案,把系統(tǒng)用戶與訂單、食品的關(guān)系確定好。將系統(tǒng)用戶的權(quán)限限制為單一獨(dú)立的,這樣可以讓權(quán)限在分配的時(shí)候互不干擾。第2章需求分析根據(jù)對(duì)一般中小食品批發(fā)公司的調(diào)查研究,其對(duì)系統(tǒng)的日常經(jīng)營管理需求分析為:批發(fā)公司準(zhǔn)備進(jìn)貨時(shí)由進(jìn)貨員制作進(jìn)貨訂單,制單時(shí)先選擇食品,輸入食品數(shù)量,之后選擇食品供應(yīng)商,最后確認(rèn)制單。進(jìn)貨的食品到貨后倉庫員再入庫,并對(duì)食品數(shù)量進(jìn)行調(diào)整,然后財(cái)務(wù)員付款完成交易。食品訂貨商予訂購食品時(shí),通過電話與批發(fā)公司的銷售員聯(lián)系,由銷售員制作銷售訂單,制單時(shí)先選擇食品、輸入數(shù)量,之后選擇訂貨商確認(rèn)制單。制單完成后倉庫員發(fā)貨,發(fā)貨后對(duì)食品數(shù)量進(jìn)行調(diào)整,之后銷售員送貨并收款,最后財(cái)務(wù)員確認(rèn)收款完成交易。倉庫管理中,對(duì)食品庫存、食品庫存金額進(jìn)行記錄。記錄供應(yīng)商及訂貨商中消費(fèi)金額或積分。1.具體任務(wù)根據(jù)調(diào)查分析,該系統(tǒng)完成如下具體任務(wù):(1)系統(tǒng)用戶管理:系統(tǒng)用戶信息管理、分配系統(tǒng)用戶角色。(2)進(jìn)貨訂單流程:進(jìn)貨員選擇食品,選擇供應(yīng)商,倉庫管理員入庫,制單員確認(rèn)完成交易。(3)銷售訂單流程:銷售員選擇訂貨商,選擇食品、倉庫管理員發(fā)貨、分銷員確認(rèn)付款、收款員確認(rèn)收款、交易完成。(4)食品管理:管理食品類別信息、食品品牌信息、食品名稱、食品數(shù)量和食品單價(jià)信息、食品庫存(5)訂貨商管理:用于維護(hù)訂貨商的編號(hào)、名稱、聯(lián)系人、地址、電話、積分額度等基本信息。(6)供應(yīng)商管理:用于維護(hù)供應(yīng)商的編號(hào)、名稱、地址、電話、消費(fèi)金額等的基本信息。2.系統(tǒng)用例模型用例模型是面向?qū)ο蠓治雠c設(shè)計(jì)的概念模型,一般用于前期的需求研究以及項(xiàng)目范圍的控制、功能的分析,主要描述系統(tǒng)用戶可以對(duì)哪些模塊或者子模塊進(jìn)行操作[1]。根據(jù)上面的任務(wù)分析,繪制本系統(tǒng)用例模型,本系統(tǒng)的用例模型如圖2—1所示。圖2—1食品進(jìn)銷存管理系統(tǒng)用例模型第3章總體設(shè)計(jì)經(jīng)過需求分析之后,進(jìn)入總體設(shè)計(jì)階段??傮w設(shè)計(jì)其目標(biāo)是產(chǎn)生一個(gè)模塊化的程序結(jié)構(gòu),根據(jù)需求分析階段的工作,從用例模型得出可行方案,同時(shí)確定系統(tǒng)中每個(gè)程序由哪些模塊組成及其相互關(guān)系[2]。經(jīng)分析,系統(tǒng)共分為RBAC管理菜單、進(jìn)貨訂單管理、銷售訂單管理、客戶管理、倉庫管理5大模塊。以上各模塊按層次劃分子模塊,每個(gè)子模塊完成相應(yīng)功能,且每個(gè)子模塊具有單獨(dú)入口單獨(dú)出口。3.1系統(tǒng)模塊設(shè)計(jì)1.RBAC管理菜單模塊包括用戶管理一個(gè)子模塊。實(shí)現(xiàn)對(duì)系統(tǒng)用戶登錄賬號(hào)、密碼、用戶姓名、性別、激活狀態(tài)信息進(jìn)行增加、修改、刪除、查詢、設(shè)置用戶角色功能。此模塊中封裝角色權(quán)限。RBAC管理菜單模塊功能結(jié)構(gòu)圖如圖3—1所示。RBACRBAC管理菜單用戶管理圖3—1RBAC管理菜單模塊功能結(jié)構(gòu)圖進(jìn)貨訂單管理經(jīng)理操作入庫管理進(jìn)貨訂單2.進(jìn)貨訂單管理經(jīng)理操作入庫管理進(jìn)貨訂單圖3—2進(jìn)貨訂單模塊功能結(jié)構(gòu)圖3.銷售訂單管理模塊包括訂單管理、訂單發(fā)貨管理、確認(rèn)訂單交易、經(jīng)理操作四個(gè)子模塊。訂單管理實(shí)現(xiàn)創(chuàng)建銷售訂單、修改訂單、查詢個(gè)人訂單、確認(rèn)付款功能。創(chuàng)建銷售訂單時(shí)需要操作員選擇食品、輸入食品數(shù)量,之后選擇分銷商完成訂單創(chuàng)建。訂單發(fā)貨管理實(shí)現(xiàn)銷售訂單查詢、發(fā)貨確認(rèn)。確認(rèn)訂單交易實(shí)現(xiàn)訂單檢索、確認(rèn)此訂單交易完成。經(jīng)理操作實(shí)現(xiàn)所有銷售訂單查詢、確認(rèn)訂單交易完成。銷售訂單管理模塊功能結(jié)構(gòu)圖如圖3—3所示。銷售訂單管理銷售訂單管理經(jīng)理操作訂單發(fā)貨管理訂單管理確認(rèn)訂單交易圖3—3銷售訂單管理模塊功能結(jié)構(gòu)圖客戶管理訂貨商管理供應(yīng)商管理4.客戶管理模塊包括供應(yīng)商管理和訂貨商管理兩個(gè)子模塊。其中供應(yīng)商管理實(shí)現(xiàn)查詢供應(yīng)商、修改供應(yīng)商信息、新增供應(yīng)商、刪除供應(yīng)商。訂貨商管理實(shí)現(xiàn)查詢訂貨商、修改訂貨商信息、新增訂貨商、刪除訂貨商。客戶管理模塊功能結(jié)構(gòu)圖如圖客戶管理訂貨商管理供應(yīng)商管理圖3—4客戶管理模塊功能結(jié)構(gòu)圖5.倉庫管理模塊包括食品管理、食品銷售記錄、食品類別、食品品牌四個(gè)子模塊。食品管理實(shí)現(xiàn)對(duì)食品的查詢、新增、刪除、編輯、食品明細(xì),食品明細(xì)實(shí)現(xiàn)查詢顯示該食品的進(jìn)貨訂單信息。食品銷售記錄實(shí)現(xiàn)對(duì)該食品的銷售訂單查詢。食品類別實(shí)現(xiàn)食品類別的查詢、新增、修改、刪除功能。食品品牌實(shí)現(xiàn)食品品牌的查詢、新增、修改、刪除功能。倉庫管理模塊功能結(jié)構(gòu)圖如圖3—5所示。倉庫管理倉庫管理食品品牌食品銷售記錄食品管理食品類別圖3—5倉庫管理模塊功能結(jié)構(gòu)圖3.2數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫系統(tǒng)的使用過程是將現(xiàn)實(shí)世界的數(shù)據(jù)經(jīng)過人為加工和計(jì)算機(jī)處理之后,又為現(xiàn)實(shí)世界提供信息的過程[3]。根據(jù)前面的分析,對(duì)本系統(tǒng)進(jìn)行如下數(shù)據(jù)庫設(shè)計(jì)。1.PURCHASEORDERDETAILSID(進(jìn)貨訂單詳細(xì)信息表):用于存儲(chǔ)進(jìn)貨訂單詳細(xì)信息,表結(jié)構(gòu)如表3—1所示。表3—1PURCHASEORDERDETAILSID字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明PURDETAILSIDNUMBER38—否詳細(xì)進(jìn)貨訂單idPURCHASERIDNUMBER38—否進(jìn)貨商PRODUCTNUMBER38—否食品PRODUCTQUERYNUMBER38—否訂貨數(shù)量PRODUCTPRICENUMBER72否食品單價(jià)PRODUCTMONEYNUMBER72否訂單總價(jià)SFRKVARCHAR26—否是否入庫PURCHASEORDERIDNUMBER38—否進(jìn)貨訂單編號(hào)QRRKYNUMBER38—是入庫員JHYNUMBER38—否進(jìn)貨員JYZTNUMBER38—否訂單狀態(tài)2.PRODUCT(食品信息表):用于存儲(chǔ)食品基本信息,表結(jié)構(gòu)如表3—2所示。表3—2PRODUCT字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明PRODUCTIDNUMBER38—否食品idPRODUCTNUMVARCHAR220—否食品編號(hào)PRODUCTSELLPRICENUMBER72否銷售單價(jià)PRODUCTSURPLUSNUMBER38—是庫存量CATEGORYNUMBER38—否類別PRODUCTNAMEVARCHAR250—否食品名稱3.ORDER(銷售訂單信息表):用于存儲(chǔ)銷售訂單信息,表結(jié)構(gòu)如表3—3所示。表3—3ORDER字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明ORDERIDNUMBER38—否訂單idORDERNUMVARCHAR216—否訂單編號(hào)ORDERTIMEDATE——否制單時(shí)間ORDERMONEYNUMBER92否訂單總價(jià)CUSTOMNAMENUMBER38—否訂貨商ORDERACTIVATEVARCHAR26—否訂單狀態(tài)ORDERCONSIGNORNUMBER38—否發(fā)貨員PAYMONEYVARCHAR26—否是否付款EMPLOYEENUMBER38—否制單員ORDERTIMEDELIVERYDATE——否發(fā)貨時(shí)間ORDERACTUALCOSTMONEYNUMBER92否實(shí)際付款金額PAYMONETEMPNUMBER38—否確認(rèn)收款員JYZTVARCHAR26—否交易狀態(tài)4.ORDERDETAILSID(銷售訂單詳細(xì)信息表):用于存儲(chǔ)銷售訂單詳細(xì)信息,表結(jié)構(gòu)如表3—4所示。表3—4ORDERDETAILSID字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明ORDERDETNUMBER38—否詳細(xì)訂單idORDERNUMNUMBER38—否訂單編號(hào)PRODUCTNAMENUMBER38—否食品PRODUCTQUERYNUMBER38—否訂貨數(shù)量PRODUCTPRICENUMBER72否食品單價(jià)PRODUCTMONEYNUMBER72否訂單總價(jià)CATEGORYNUMBER38—否食品類型BRANDNUMBER38—否食品品牌PRODUCTBRANDNUMBER38—否食品品牌5.PURCHASEORDER(進(jìn)貨訂單信息表):用于存儲(chǔ)進(jìn)貨訂單信息,表結(jié)構(gòu)如表3—5所示。表3—5PURCHASEORDER字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明PURCHASEIDNUMBER38—否進(jìn)貨訂單idPURCHASEIDVARCHAR216—否進(jìn)貨訂單號(hào)PURCHASEMONEYNUMBER92否訂單總額PURCHASETIMEDATE——否制單時(shí)間PURCHASERNUMBER38—否進(jìn)貨商PURCHASERACTIVATEVARCHAR26—否訂單狀態(tài)PUREMPLOYEENUMBER38—否制單員JYZTVARCHAR26—否交易狀態(tài)QUERENEMPNUMBER38—否確認(rèn)人6.EMPLOYEE(系統(tǒng)用戶表):用于存儲(chǔ)系統(tǒng)用戶信息,表結(jié)構(gòu)如表3—6所示。表3—6EMPLOYEE字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明IDNUMBER38—否用戶idEIDVARCHAR217—否用戶登錄名ENAMEVARCHAR216—-否用戶名PASSWORDVARCHAR212—-否密碼BIRTHDAYDATE—否出生日期GENDERVARCHAR2—否性別ACTIVATENUMBER1—否用戶狀態(tài)VISITDATE6—否上次登錄時(shí)間WORKBIRTHDAYDATE6—否入職時(shí)間YJNUMBER82是業(yè)績(jī)DEPTVARCHAR230—否部門ROLEVARCHAR230—否角色AUTHVARCHAR230—否權(quán)限7.PURCHASER(供應(yīng)商信息表):用于存儲(chǔ)供應(yīng)商的基本信息,表結(jié)構(gòu)如表3—7所示。表3—7PURCHASER字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明PIDNUMBER38—否供應(yīng)商idPURNAMEVARCHAR250—否供應(yīng)商名稱PURUSERVARCHAR210—是聯(lián)系人PURTELVARCHAR250—是電話PURADDVARCHAR2200—是地址8.CUSTOMER(訂貨商信息表):用于存儲(chǔ)訂貨商的信息,表結(jié)構(gòu)如表3—8所示。表3—8CUSTOMER字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明CUSTOMIDNUMBER38—否訂貨商idCUSTOMNAMEVARCHAR250—否姓名CUSTOMTELVARCHAR250—是電話CUSTOMADDVARCHAR250—是地址JFNUMBER38—是積分XYNUMBER3—是信用評(píng)價(jià)9.BRAND(食品品牌信息表):用于存儲(chǔ)食品品牌信息,表結(jié)構(gòu)如表3—9所示。表3—9BRAND字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明BIDNUMBER38—否食品品牌idBRANDNAMEVARCHAR250—否食品品牌名稱10.GATEGORY(食品類別表):用于存儲(chǔ)食品的類別,表結(jié)構(gòu)如表3—10所示。表3—10GATEGORY字段名字段類型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說明CATEGORYIDNUMBER38—否食品類別idCATEGORYNAMEVARCHAR250—否食品類別名稱第4章詳細(xì)設(shè)計(jì)4.1系統(tǒng)登錄界面設(shè)計(jì)系統(tǒng)設(shè)計(jì)過程中采用了jsp技術(shù),jsp技術(shù)是目前企業(yè)級(jí)應(yīng)用網(wǎng)絡(luò)管理系統(tǒng)最流行的技術(shù)之一[4]。登錄界面的設(shè)計(jì)過程是先創(chuàng)建一個(gè)名為login.jsp的頁面,然后在頁面中添加一個(gè)表格,在表格中添加兩個(gè)文本框用于輸入用戶名和密碼,將文本框的id和name屬性分別設(shè)置為loginname和password,并提供一個(gè)登錄按鈕用于讓用戶提交表單。在后臺(tái),創(chuàng)建個(gè)LoginAction的Struts2控制器類,用于處理用戶登錄,通過struts2功能,取出loginname和password的值,之后把值添加到hql語句中去數(shù)據(jù)庫查詢,在LoginAction中設(shè)置一個(gè)名為error的域成員,用于登錄失敗時(shí)提示用戶,如果登錄,將用戶的id,及用戶擁有的權(quán)限全部存入到session中,用于權(quán)限分配。系統(tǒng)登錄界面如圖4—1所示。圖4—1系統(tǒng)登錄界面4.2系統(tǒng)主界面設(shè)計(jì)系統(tǒng)主界面是系統(tǒng)用戶登錄后進(jìn)入的界面,設(shè)計(jì)過程是先新建一個(gè)名為main.jsp的頁面,通過框架對(duì)界面進(jìn)行設(shè)計(jì)。左面引用的界面為menu.jsp,用于顯示當(dāng)前登錄用戶名稱的標(biāo)簽,及本系統(tǒng)的各個(gè)功能模塊的入口鏈接。當(dāng)用戶單擊左側(cè)各個(gè)功能模塊時(shí),架框右則會(huì)通過超鏈接跳轉(zhuǎn)到各自相應(yīng)的操作界面。系統(tǒng)主界面如圖4—2所示。圖4—2系統(tǒng)主界面4.3功能模塊設(shè)計(jì)系統(tǒng)后臺(tái)設(shè)計(jì)過程中采用了java語言設(shè)計(jì),java語言的優(yōu)點(diǎn)是一次編譯到處運(yùn)行,可移植能力非常強(qiáng),只需開發(fā)人員在自己的計(jì)算機(jī)上編譯后,在其它計(jì)算機(jī)上就可以運(yùn)行[5]。1.進(jìn)貨訂單管理界面進(jìn)貨訂單管理界面為purorder/list.jsp。在頁面中插入一個(gè)表格,用于顯示進(jìn)貨訂單相應(yīng)信息,每一行提供“修改”、“完成”和“配置”的超鏈接按鈕以進(jìn)行相對(duì)應(yīng)操作。后臺(tái)創(chuàng)建PurchaseOrderAction的Struts2控制器類,該類定義了檢索、修改、創(chuàng)建訂單、配置訂單的供應(yīng)商功能。條件檢索功能由PurchaseOrderAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)ddbh(訂單編號(hào))、dddate(制單日期)、wcdate(完成日期)通過struts2進(jìn)行賦值,之后把值添加到hql語句中去數(shù)據(jù)庫檢索,可進(jìn)行單一條件或多條件檢索。系統(tǒng)中進(jìn)貨訂單編號(hào)是由后臺(tái)PurOrderAction類完成的,前兩位“jh”表示進(jìn)貨訂單,之后八位為當(dāng)天日期,最后四位為當(dāng)日訂單個(gè)數(shù)。進(jìn)貨訂單管理界面如圖4—3所示。圖4—3進(jìn)貨訂單管理界面2.進(jìn)貨訂單經(jīng)理操作界面進(jìn)貨訂單經(jīng)理操作界面為purorder/jlcz.jsp。在頁面中插入一個(gè)表格,用于顯示所有進(jìn)貨訂單相應(yīng)信息,每行提供“修改”、“完成”和“配置”的超鏈接按鈕以進(jìn)行相對(duì)應(yīng)操作。后臺(tái)創(chuàng)建PurchaseOrderAction的Struts2控制器類,該類定義了檢索、修改、創(chuàng)建訂單,配置訂單的供應(yīng)商等。條件檢索功能由PurchaseOrderAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)ddbh(訂單編號(hào))、dddate(制單日期)、wcdate(完成日期)通過struts2進(jìn)行賦值,之后把值添加到hql語句中去數(shù)據(jù)庫檢索,可進(jìn)行單一條件或多條件檢索。進(jìn)貨訂單管理經(jīng)理操作界面如圖4—4所示。圖4—4進(jìn)貨訂單管理經(jīng)理操作界面3.進(jìn)貨訂單創(chuàng)建界面單擊進(jìn)貨訂單管理界面中的“創(chuàng)建訂單”進(jìn)入進(jìn)貨訂單創(chuàng)建界面。進(jìn)貨訂單創(chuàng)建界面為purorder/table.jsp。使用ajax技術(shù)實(shí)現(xiàn)選擇食品,每行提供“刪除”按鈕,通過ajax技術(shù)實(shí)現(xiàn)異步刷新,單擊“刪除”后該行直接刪除。單擊“保存”按鈕,執(zhí)行PurchaseOrderAction中的save方法,來確認(rèn)保存訂單食品。進(jìn)貨訂單創(chuàng)建界面如圖4—5所示。圖4—5進(jìn)貨訂單創(chuàng)建界面4.進(jìn)貨食品選擇界面單擊進(jìn)貨訂單創(chuàng)建界面中的“選擇食品”進(jìn)入進(jìn)貨食品選擇界面。進(jìn)貨食品選擇界面為purorder/selectTable.jsp。在頁面中插入一個(gè)表格,表格顯示食品的相應(yīng)信息,通過ajax來傳遞到進(jìn)貨訂單創(chuàng)建界面,并且用PurchaseOrderAction中的productIds域成員來保存食品id,將選過的食品框變?yōu)椴豢蛇x,防止用戶重復(fù)選擇食品。之后通過PurchaseOrderDetailsAction中save方法保存訂單。進(jìn)貨食品選擇界面如圖4—6所示。圖4—6進(jìn)貨食品選擇界面5.銷售訂單管理界面銷售訂單管理界面為order/list.jsp。在頁面中插入一個(gè)表格,表格顯示銷售訂單相應(yīng)信息。條件檢索功能由OrderAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)ddbh(訂單編號(hào))、dddate(制單日期)、wcdate(發(fā)貨日期)、customId(訂貨商)、employeeId(發(fā)貨員)通過struts2進(jìn)行賦值,之后把值添加到hql語句中去數(shù)據(jù)庫查詢,可單一條件伙伴多條件檢索。銷售訂單編號(hào)是由后臺(tái)OrderAction的類完成的,“dd”表示銷售訂單,之后八位是當(dāng)天日期,最后四位是當(dāng)日銷售訂單個(gè)數(shù),在查詢時(shí),OrderAction中獲取session中的登錄id,只查詢?cè)搃d創(chuàng)建的訂單。銷售訂單管理界面如圖4—7所示。圖4—7銷售訂單管理界面6.銷售訂單編輯界面系統(tǒng)設(shè)計(jì)過程中采用了Ajax技術(shù),其作用是提供網(wǎng)頁瀏覽者與網(wǎng)頁內(nèi)容的交互,并可以進(jìn)行信息驗(yàn)證,可實(shí)現(xiàn)異步刷新頁面[6]。單擊銷售訂單管理界面中的“編輯”進(jìn)入銷售訂單編輯界面,銷售訂單編輯界面為order/table.jsp。在頁面中插入一個(gè)表格,表格顯示銷售訂單明細(xì)信息。當(dāng)輸入購買數(shù)量時(shí)使用ajax技術(shù)自動(dòng)取出食品單價(jià)與食品數(shù)量的值并算出所需金額。單擊“保存”時(shí)通過OrderDetailsAction中的save方法來保存該訂單,保存訂單時(shí)從session中取出該用戶id。銷售訂單編輯界面如圖4—8所示。圖4—8銷售訂單編輯界面7.訂單發(fā)貨管理界面訂單發(fā)貨管理界面為dispathorder/list.jsp。在頁面中插入一個(gè)表格,表格顯示銷售訂單相關(guān)信息。上方檢索功能由后臺(tái)DispathOrderAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)ddbh(訂單編號(hào))、dddate(制單日期)、custom(訂貨商)、employee(發(fā)貨員)、activate(訂單狀態(tài))、paymoney(付款狀態(tài))、wczt(交易狀態(tài))條件通過struts2功能自動(dòng)對(duì)其賦值。單擊每行訂單時(shí),DispathOrderAction的類中的orderList域成員的信息可在其下面顯示,再次單擊則隱藏。訂單發(fā)貨管理界面如圖4—9所示。圖4—9訂單發(fā)貨管理界面8.銷售訂單經(jīng)理操作界面銷售訂單經(jīng)理操作界面為dispathorder/jlcz.jsp。在頁面中插入一個(gè)表格,表格顯示所有銷售訂單相應(yīng)信息。上方檢索功能由后臺(tái)DispathOrderAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)ddbh(訂單編號(hào))、dddate(制單日期)、custom(訂貨商)、employee(發(fā)貨員)、activate(訂單狀態(tài))、paymoney(付款狀態(tài))、wczt(交易狀態(tài))、fdate(發(fā)貨日期)、fxyId(分銷員)、skyId(收款員)條件通過struts2功能自動(dòng)對(duì)其賦值??砂磫我换蚨鄺l件進(jìn)行檢索。單擊每行訂單時(shí),檢索其明細(xì)在下面顯示,再次單擊則隱藏。銷售訂單經(jīng)理操作界面如圖4—10所示。圖4—10銷售訂單經(jīng)理操作界面9.供應(yīng)商管理界面供應(yīng)商管理界面為purchaser/list.jsp。在頁面中插入一個(gè)表格,表格顯示供應(yīng)商信息。后臺(tái)使用PurchaserAction類中的add、edit、list、delete等方法來實(shí)現(xiàn)對(duì)供應(yīng)商的新增、修改、刪除、檢索。供應(yīng)商管理界面如圖4—11所示。圖4—11供應(yīng)商管理界面10.新增供應(yīng)商界面單擊供應(yīng)商管理界面中的“新增供應(yīng)商”進(jìn)入新增供應(yīng)商界面,新增供應(yīng)商界面為purchaser/edit.jsp。在頁面中插入一個(gè)表格插入三個(gè)文本框,設(shè)置其id和name屬性,單擊“保存”按鈕時(shí)purchasername(供應(yīng)商名稱)、purchasertel(供應(yīng)商電話)、purchaseradd(供應(yīng)商地址)通過struts2的功能賦值,將值傳到后臺(tái)PurchaserAction類中的相對(duì)應(yīng)域成員中,之后用save方法保存供應(yīng)商。新增供應(yīng)商界面如圖4—12所示。圖4—12新增供應(yīng)商界面11.訂貨商管理界面訂貨商管理界面為custom/list.jsp。在頁面中插入一個(gè)表格,表格顯示供應(yīng)商信息。后臺(tái)使用CustomAction類中的add、edit、delete、list方法來實(shí)現(xiàn)對(duì)訂貨商的新增、修改、刪除、檢索。訂貨商管理界面如圖4—一三所示。圖4—一三訂貨商管理界面12.新增訂貨商界面單擊訂貨商管理界面中的“新增訂貨商”進(jìn)入新增訂貨商界面,新增訂貨商界面為custom/edit.jsp。在頁面中插入一個(gè)表格插入三個(gè)文本框,設(shè)置其id和name屬性,單擊“保存”按鈕時(shí)customname(訂貨商名稱)、customtel(訂貨商電話)、customadd(訂貨商地址)通過struts2的功能賦值,將值傳到后臺(tái)CustomAction類中的相對(duì)應(yīng)域成員中,之后用save方法保存訂貨商信息。新增訂貨商界面如圖4—14所示。圖4—14新增訂貨商界面一三.食品管理界面食品管理界面為product/list.jsp。在頁面中插入一個(gè)表格,表格顯示食品信息。在后臺(tái)建立ProductAction的類,使用里面的list、add、edit、mingxi、delete方法來實(shí)現(xiàn)對(duì)食品信息的檢索、新增、編輯、明細(xì)查詢、刪除操作。上方檢索功能由后臺(tái)ProductAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)productname(商品名稱)、category(食品類型)、brand(食品品牌)、productquery(商品數(shù)量)條件通過struts2功能自動(dòng)對(duì)其賦值??砂磫我换蚨鄺l件進(jìn)行食品檢索。食品管理界面如圖4—一五所示。圖4—一五食品管理界面14.食品銷售記錄界面食品銷售記錄界面為product/profit.jsp。在頁面中插入一個(gè)表格,表格顯示食品銷售信息。單擊每行時(shí),在后臺(tái)使用ProductAction類中的spxiaoshou的方法在該行下方顯示該食品的銷售訂單,再單擊則隱藏。上方檢索功能由后臺(tái)ProductAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)productname(商品名稱)、category(食品類型)、brand(食品品牌)、pxff(排序方法)條件通過struts2功能自動(dòng)對(duì)其賦值??砂磫我换蚨鄺l件進(jìn)行食品檢索。食品銷售記錄界面如圖4—16所示。圖4—16食品銷售記錄界面一五.員工管理界面員工管理界面為employee/list.jsp。在頁面中插入一個(gè)表格,表格顯示員工信息。在后臺(tái)使用EmployeeAction類中的list、edit、save、delete、saverole方法來實(shí)現(xiàn)對(duì)員工的檢索、編輯、保存、刪除、設(shè)置角色操作。上方檢索功能由后臺(tái)EmployeeAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)empname(員工名)條件通過struts2功能自動(dòng)對(duì)其賦值。最后訪問時(shí)間是在退出登錄的時(shí)候通過后臺(tái)的logoutAction類來修改的。員工管理界面如圖4—17所示。圖4—17員工管理界面16.員工新增界面單擊員工管理界面中的“增加員工”進(jìn)入員工新增界面,員工新增界面為employee/edit.jsp。單擊“新增員工”按鈕時(shí)通過Employee類中的edit方法彈出該界面。在頁面中插入一個(gè)表格三個(gè)文本框、一個(gè)單選按鈕和一個(gè)select下拉列表,并且分別設(shè)置其id和name屬性。手動(dòng)輸入用戶信息單擊“保存”時(shí),通過struts2功能將值傳入后臺(tái)EmployeeAction類中的loginname、password、empname、gender、activate域成員,再調(diào)用save方法來保存員工信息。員工新增界面如圖4—一八所示。圖4—一八員工新增界面第5章測(cè)試系統(tǒng)測(cè)試的重要性體現(xiàn)在它是保證系統(tǒng)質(zhì)量與可靠性的最后關(guān)口,是對(duì)整個(gè)系統(tǒng)開發(fā)過程包括系統(tǒng)分析、系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)的最終審查。系統(tǒng)測(cè)試的對(duì)象顯然不僅僅是源程序,而應(yīng)是整個(gè)軟件,它把系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、以及程序設(shè)計(jì)各階段的開發(fā)文檔,都作為測(cè)試的對(duì)象。軟件測(cè)試不等于程序測(cè)試,它是根據(jù)軟件開發(fā)各個(gè)階段的規(guī)格說明和程序的內(nèi)容結(jié)構(gòu)而精心設(shè)計(jì)的一批測(cè)試用例,并利用這些用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤的過程[7]。單元測(cè)試是指程序中的一個(gè)模塊或一個(gè)子程序,是程序運(yùn)行的最小單元,或是程序最小的獨(dú)立編譯單位。單元測(cè)試是軟件開發(fā)過程中進(jìn)行的最低級(jí)別的測(cè)試活動(dòng),其目的是要檢測(cè)程序模塊中有無故障。1.創(chuàng)建銷售訂單測(cè)試測(cè)試數(shù)據(jù):可口可樂的購買數(shù)量5,統(tǒng)一綠茶的購買數(shù)量不填。測(cè)試界面如圖5—1所示。圖5—1創(chuàng)建銷售訂單測(cè)試界面測(cè)試結(jié)果:可口可樂購買數(shù)量下方提示“此貨物購買數(shù)量不能大于庫存量”,統(tǒng)一綠茶購買數(shù)量下方提示“食品個(gè)數(shù)必須填寫”,測(cè)試結(jié)果與預(yù)期結(jié)果相符。2.新增用戶測(cè)試測(cè)試數(shù)據(jù):所有數(shù)據(jù)全部正確填寫、全部不填寫或部分填寫。測(cè)試結(jié)果:所有數(shù)據(jù)全部正確填寫后單擊“提交”可以成功新增加一新用戶,全部不填寫或部分填寫不能成功增加用戶,并給出相應(yīng)的提示信息,與預(yù)期結(jié)果相符。數(shù)據(jù)均不填寫的測(cè)試界面如圖5—2所示。圖5—2新增員工測(cè)試界面3.用戶登錄測(cè)試測(cè)試數(shù)據(jù):填寫正確用戶名和密碼,錯(cuò)誤用戶名和錯(cuò)誤密碼。測(cè)試結(jié)果:正確時(shí)點(diǎn)擊登錄,進(jìn)入系統(tǒng)主界面。用戶名密碼錯(cuò)誤時(shí),密碼下方提示“登錄失敗”。登錄失敗提示界面如圖5—3所示。圖5—3登錄失敗提示界面本系統(tǒng)對(duì)所有模塊都進(jìn)行了單元測(cè)試,經(jīng)測(cè)試各模塊均可以完成預(yù)期的相應(yīng)功能??偨Y(jié)短暫的畢業(yè)設(shè)計(jì)結(jié)束了,我在這次設(shè)計(jì)過程中實(shí)現(xiàn)了對(duì)過去所學(xué)知識(shí)的回顧、總結(jié)和應(yīng)用。本管理系統(tǒng)能夠?qū)崿F(xiàn)數(shù)據(jù)的輸入、查詢、修改、刪除、統(tǒng)計(jì)等功能,能夠追朔到數(shù)據(jù)的始終,完成了食品進(jìn)銷存管理系統(tǒng)從需求方面的開發(fā)和應(yīng)用,達(dá)到預(yù)期的目的。不可否認(rèn),該系統(tǒng)的功能還不完善,仍存在許多的缺點(diǎn)和不足,例如,在計(jì)算利潤(rùn)時(shí),是以平均價(jià)格來進(jìn)行計(jì)算利潤(rùn),用庫存金額除以庫存數(shù)量,之后用售出單價(jià)減去平均進(jìn)價(jià)來計(jì)算,正規(guī)方法應(yīng)該是在食品進(jìn)貨訂單中加標(biāo)注,賣出的食品到相對(duì)應(yīng)的進(jìn)貨訂單中檢索出進(jìn)貨價(jià)格,進(jìn)行計(jì)算利潤(rùn);還有用戶部門沒有進(jìn)行分配,這個(gè)缺點(diǎn)是在需求分析時(shí)沒有寫進(jìn)去,之后總體設(shè)計(jì)的時(shí)候也沒有考慮到,導(dǎo)致用戶沒有部門的缺陷,但是此缺陷可以在今后升級(jí)中修復(fù);另外在選擇供應(yīng)商時(shí)候,應(yīng)該可以查詢出該供應(yīng)商都能供應(yīng)哪些食品,這個(gè)缺陷是當(dāng)時(shí)調(diào)研時(shí)未考慮到,經(jīng)過老師指點(diǎn)才發(fā)現(xiàn)的,此缺陷也可在升級(jí)程序過程中修復(fù)。參考文獻(xiàn)[1]張俊蘭,王文發(fā),馮伍,軟件工程(第一版)[M],西安:西安交通大學(xué)出版社,(2009):41—44[2]劉竹林,軟件工程案例開發(fā)與實(shí)踐[M],北京:清華大學(xué)出版社,(2009):26—29[3]王立福,數(shù)據(jù)庫系統(tǒng)概論(第三版)[M],北京:北京大學(xué)出版社,(2009):8—9[4]劉曉華,JSP應(yīng)用開發(fā)詳解[M],北京:電子工業(yè)出版社,(2007):6—7[5]趙毅,跨平臺(tái)程序設(shè)計(jì)語言—Java[M],西安:西安電子科技大學(xué)出版社,(2006):一五[6]阮文江,Ajax程序設(shè)計(jì)應(yīng)用[M],北京:人民郵電出版社,(2010):356-359[7]宮云戰(zhàn),軟件測(cè)試教程[M],北京:\o"上??茖W(xué)普及出版社"機(jī)械工業(yè)出版社,(2008):9—11附錄1核心源代碼1.application.xml(Spring配置文件,這個(gè)文件主要是用來配置系統(tǒng)數(shù)據(jù)庫連接等信息)<beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xsi:schemaLocation=" /schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd/schema/aop /schema/aop/spring-aop-3.0.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd"default-autowire="byName"> <!--配置jdbc數(shù)據(jù)源--><beanid="myDataSource"class="org.apachexmons.dbcp.BasicDataSource" destroy-method="close"> <propertyname="driverClassName"value="oracle.jdbc.driver.OracleDriver"/> <propertyname="url"value="jdbc:oracle:thin:x:一五21:liufei"/> <propertyname="username"value="ddgl"/> <propertyname="password"value="ddgl"/> </bean> <!--配置hibernate抽象工廠--> <beanid="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="dataSource"ref="myDataSource"/> <propertyname="mappingLocations"><!--如果你有很多hbm寫起來很累--> <list> <value>classpath:/com/material/hbm/*.hbm.xml</value> </list> </property> <propertyname="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.OracleDialect hibernate.show_sql=true hibernate.cache.use_second_level_cache=true hibernate.cache.use_query_cache=true vider_class=org.hibernate.cache.EhCacheProvider </value> </property> </bean> <!--配置事務(wù)管理器ref應(yīng)該和上面的jdbc數(shù)據(jù)源的id相同--> <beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"ref="myDataSource"/> </bean> <!--配置Aop--> <aop:config> <!--配置切入點(diǎn),即攔截哪些方法,執(zhí)行表達(dá)式改成當(dāng)前的--> <aop:pointcutid="entryPointMethod"expression="execution(*com.material..*Service.*(..))"/> <!--在aop中配置引用通知--> <aop:advisor advice-ref="txAdvice" pointcut-ref="entryPointMethod" order="2"/> <!--配置切面(刪掉around)執(zhí)行表達(dá)式同上--> <aop:aspectid="profilingAspect"ref="profiler"> <aop:pointcutid="serviceMethodWithReturnValue" expression="execution(*com.material..*Service.*(..))"/> </aop:aspect> </aop:config> <!--配置參考通知--> <tx:adviceid="txAdvice"transaction-manager="txManager"> <tx:attributes><!--以get開頭的方法,只讀(即不開啟事務(wù))--> <tx:methodname="get*"read-only="true"/> <tx:methodname="*"/> </tx:attributes> </tx:advice> <!--配置注解--><context:component-scanbase-package="com.material"/><context:annotation-config/></beans>2.Struts.xml(Struts2配置文件,這個(gè)文件主要是用來配置頁面轉(zhuǎn)發(fā))<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.2.dtd"><struts><packagename="default"extends="struts-default"> <actionname='*Action'class='{1}Action'> <resultname='login'>/main/master.jsp</result> <resultname='dist'>/orders/list.jsp</result> <resultname='list'>/{1}/list.jsp</result> <resultname='edit'>/{1}/edit.jsp</result> <resultname='add'>/{1}/add.jsp</result> <resultname='ordersEdit'>/orders/uptable.jsp</result> <resultname='purchEdit'>/purchaseOrder/uptable.jsp</result> <resultname='orderDetails'>/orders/table.jsp</result> <resultname='selectProuduct'>/{1}/selectTable.jsp</result> <resultname='bccg'>/purchaseOrder/bccg.jsp</result> <resultname='spbccg'>/{1}/bccg.jsp</result> <resultname='xiaoshou'>/{1}/profit.jsp</result> <resultname='PurOrd'>/purchaseOrder/table.jsp</result> <resultname='auth'>/modules/auth.jsp</result> <resultname='roleAuth'>/role/roleAuth.jsp</result> <resultname='empRole'>/employee/empRole.jsp</result> <resultname='distRole'>/distributor/distRole.jsp</result> <resultname='czcg'>/operateResult/czcg.jsp</result> <resultname='ddcg'>/operateResult/ddcg.jsp</result> <resultname='jycg'>/operateResult/jycg.jsp</result> <resultname='dlsb'>/login.jsp</result> <resultname='fhcg'>/operateResult/fhcg.jsp</result> <resultname='jywc'>/dispatchOrder/jywcList.jsp</result> <resultname='xiaoshoujlcz'>/dispatchOrder/jinglicaozuo.jsp</result> <resultname='notAlreadyOrder'>/dispatchOrder/notAlreadyList.jsp</result> <resultname='qhlist'>/{1}/qhlist.jsp</result> <resultname='autoOrder'>/product/autoOrder.jsp</result> <resultname='logout'>/login.jsp</result> <resultname='paymoney'>/orders/selectOD.jsp</result> <resultname='mingxi'>/orders/mingxi.jsp</result> <resultname='peizhi'>/purchaseOrder/peizhitable.jsp</result> <resultname='queren'>/purchaseOrder/queren.jsp</result> <resultname='wancheng'>/purchaseOrder/wancheng.jsp</result> <resultname='ruku'>/purchaseOrder/ruku.jsp</result> <resultname='rukucg'>/purchaseOrder/rukucg.jsp</result> <resultname='jhjlcz'>/purchaseOrder/jlcz.jsp</result> <resultname='spjhmx'>/product/jhxq.jsp</result> <resultname='spjhmx2'>/product/jhxq2.jsp</result> </action> <actionname='main'> <result>/login.jsp</result> </action></package></struts>3.LoginAction.java(用戶登錄驗(yàn)證)packagecom.material.action;xScope("prototype")xControllerpublicclassLoginActionextendsActionSupport{ privateLoginServiceloginService; privateServiceservice; publicvoidsetService(Serviceservice){ this.service=service; } publicvoidsetLoginService(LoginServiceloginService){ this.loginService=loginService; } publicStringexecute(){ Stringpath="dlsb"; Map<String,List<String>>authMap=newHashMap<String,List<String>>(); id=loginService.get(loginname,password,type,id,authMap); if(id!=null){ user=(Employee)commonDao.get(Employee.class,Integer.parseInt(id)); path="login"; }else{ err="登錄失敗"; } ActionContext.getContext().getSession().put("user",user); ActionContext.getContext().getSession().put("AUTHS",authMap); ActionContext.getContext().getSession().put("id",id); returnpath; } privateStringid; privateStringtype; privateEmployeeuser; privateStringloginname; privateStringpassword; privateStringsavepasswd; privateStringerr; privateCommonDaocommonDao; /*訂貨商集合*/ privateList<Custom>customList=newArrayList<Custom>(); /*發(fā)貨員集合*/ privateList<Employee>fhyList=newArrayList<Employee>(); publicList<Employee>getFhyList(){ returnfhyList; } publicvoidsetFhyList(List<Employee>fhyList){ this.fhyList=fhyList; } publicList<Custom>getCustomList(){ returncustomList; } publicvoidsetCustomList(List<Custom>customList){ this.customList=customList; } publicCommonDaogetCommonDao(){ returncommonDao; } publicvoidsetCommonDao(CommonDaocommonDao){ thisxmonDao=commonDao; } publicLoginServicegetLoginService(){ returnloginService; } publicServicegetService(){ returnservice; } publicStringgetId(){ returnid; } publicvoidsetId(Stringid){ this.id=id; } publicStringgetType(){ returntype; } publicvoidsetType(Stringtype){ this.type=type; } publicStringgetErr(){ returnerr; } publicvoidsetErr(Stringerr){ this.err=err; } publicStringgetLoginname(){ returnloginname; } publicvoidsetLoginname(Stringloginname){ this.loginname=loginname; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicStringgetSavepasswd(){ returnsavepasswd; } publicvoidsetSavepasswd(Stringsavepasswd){ this.savepasswd=savepasswd; } publicEmployeegetUser(){ returnuser; } publicvoidsetUser(Employeeuser){ this.user=user; }}4.login.jsp(用戶登錄頁面)<%xpagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%xtagliburi="/struts-tags"prefix="s"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>MyJSP'login.jsp'startingpage</title> <metahttp-equiv="pragma"content="no-cache"> <metahttp-equiv="cache-control"content="no-cache"> <metahttp-equiv="expires"content="0"> <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"> <metahttp-equiv="description"content="Thisismypage"> <!-- <linkrel="stylesheet"type="text/css"href="styles.css"> --><linkhref="<s:urlvalue='/order/css/main.css'/>"rel="stylesheet"type="text/css"media="all"/><scriptsrc="<s:urlvalue='/order/js/jquery-1.4.2.min.js'/>"type="text/javascript"></script></head><bodybgcolor="skyblue"><divalign="center"> <h2>食品進(jìn)銷存管理系統(tǒng)</h2><br/><br/><br/><br/><br/><br/><br/><formaction="loginAction.action"method='post'> <tablewidth="50%"border="0"cellpadding="0"cellspacing="2"align="center"> <tr> <td>用戶名</td> <td><inputtype="text"name='loginname'value=''/></td> </tr> <tr> <td>密碼</td> <td><inputtype="password"name='password'value=''/></td> </tr> <tr> <td><h3><fontcolor="red">${err}</font></h3></td> </tr> <tr> <tdcolspan="2"align="center"> <inputtype="checkbox"name='savePasswd'value='a'>記住密碼 <inputtype="submit"value='登錄'/> </td> </tr> </table></form></div></body></html>5.order/list.jsp(銷售訂單及發(fā)貨頁面)<%xpagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%xtagliburi="/struts-tags"prefix="s"%><%xtagliburi="xlfthdd.lft.hdd/tags"prefix="hdd"%><%xpageimport="java.text.*"%><%Stringdatetime=newSimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());//獲取系統(tǒng)時(shí)間Stringdate=newSimpleDateFormat("yyyyMMdd").format(Calendar.getInstance().getTime());%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><metahttp-equiv="X-UA-Compatible"content="IE=7"/><title>庫存管理業(yè)務(wù)系統(tǒng)</title><linkhref="orders/css/main.css"rel="stylesheet"type="text/css"media="all"/><linkrel="stylesheet"type="text/css"href="css/style.css"><scriptsrc="order/js/jquery-1.4.2.min.js"type="text/javascript"></script><scripttype="text/javascript"> functionadd1(){ vardistId=document.getElementById('distId').value; location.href='<s:urlvalue="/ordersAction.action?method=add&distId="/>'+distId; } functionadd(){ location.href='<s:urlvalue="/orderControl.do?method=getlist"/>'; } functionedit(orderid){ if(confirm("確定此訂單要發(fā)貨?")){ location.href='dispatchOrderAction.action?method=edit&orderid='+orderid; returntrue; } } functionchangecolor(tr){ //改變鼠標(biāo)指定行的顏色 tr.style.backgroundColor='#666699'; } functionoutColor(tr,color){ //改變鼠標(biāo)指定行的顏色 tr.style.backgroundColor=color; } </script> <scripttype="text/javascript"> functiontoggle(span){ //找出span的父節(jié)點(diǎn) varul=span.parentNode; //取出所有ul子節(jié)點(diǎn) varlis=ul.childNodes; //判斷是否是li節(jié)點(diǎn) for(vari=0;i<lis.length;i++){ varnode=lis[i]; //這里li必須大寫LI if(node.nodeName=='UL'){ //判斷當(dāng)前狀態(tài)block是顯示 if(node.style.display!='block'){ node.style.display='block'; }else{ node.style.display='none'; } } } } </script></head><bodyclass="contents-body"><divclass="contents-wrap"> <divclass="commonTitle"> <h2>>>訂單管理 >> 訂單列表</h2> <ahref='<s:urlvalue="/logoutAction.action"/>'class="btnLong"title="安全登出">安全登出</a> </div> <s:formid="form-search"name="orderForm"action="dispatchOrderAction.action?method=list"method="post"theme="simple"> <tablewidth="100%"border="0"cellspacing="0"cellpadding="0"class="commonTableSearch"> <tr> <thalign="right">訂單編號(hào):</th> <td><s:textfieldname="ddbh"class="inputTextNormal"id="ddbh"/></td> <th>制單日期:</th> <td><s:textfieldname="dddate"class="inputTextNormal"id="dddata"/></td> <th>發(fā)貨日期:</th> <td><s:textfieldname="fhdate"class="inputTextNormal"id="fhdata"/></td> <tdalign="left"><s:select label="選擇訂貨商" list="customList" name="customId" listKey="customid" listValue="customname" emptyOption="false" value="customId" headerKey=""headerValue="-選擇訂貨商-" id='bid' /></td> <tdalign="left"><s:select label="選擇發(fā)貨商" list="fxyList" name="fxyId" listKey="id" listValue="ename" emptyOption="false" value="fxyId" headerKey=""headerValue="-倉庫員-" id='bid' /></td> </tr> <tr> <tdalign="right">訂單狀態(tài):</td> <td> <s:radioname="activate"list="%{#{'已發(fā)貨':'已發(fā)貨','未發(fā)貨':'未發(fā)貨','2':'全部'}}"theme="simple"></s:radio> </td> <tdalign="right">付款狀態(tài):</td> <td> <s:radioname="pm"list="%{#{'已付款':'已付款','未付款':'未付款','2':'全部'}}"theme="simple"></s:radio> </td> <tdalign="right">交易狀態(tài):</td> <tdalign="left"> <s:radioname="jyzt"list="%{#{'已完成':'已完成','未完成':'未完成','2':'全部'}}"theme="simple"></s:radio> </td> <tdalign="right"colspan=""> <inputtype="submit"value='檢索'class="btnLong"/> </td> </tr> </table></s:form><!--//commonTableSearch--><tablewidth="101%"border="0"cellpadding="0"cellspacing="1"><trclass="commonTable"><thwidth="6%">序號(hào)</th><thwidth="10%">訂單編號(hào)</th><thwidth="8%">制單日期</th><thwidth="8%">制單員</th><thwidth="8%">訂貨商</th><thwidth="8%">訂單狀態(tài)</th><thwidth="8%">是否付款</th><thwidth="8%">訂單金額</th><thwidth="8%">實(shí)際付款</th><thwidth="8%">發(fā)貨時(shí)間</th><thwidth="6%">發(fā)貨員</th><thwidth="8%">交易狀態(tài)</th><thwidth="6%">發(fā)貨</th></tr></table><s:iteratorvalue='orderList'var='ord'status="s"><divid="audi"align="center"> <spanonclick='toggle(this)'> <divid="t${orderid}"style="width:1065px;height:30px;float:left"class='${s.count%2==0?"even":"odd"}'> <divid="1c${orderid}"style="width:6%;height:30px;float:left;vertical-align:middle;line-height:30px;"><s:propertyvalue='#s.count'/></div> <divid="2c${orderid}"style="width:10%;height:30px;float:left;vertical-align:middle;line-height:30px;"><s:propertyvalue='ordernum'/></div> <divid="3c${orderid}"style="width:8%;height:30px;float:left;vertical-align:middle;line-height:30px;"><s:propertyvalue='ordertime'/></div> <divid="4c${orderid}"style="width:8%;height:30px;float:left;vertical-align:middle;line-height:30px;"><s:propertyvalue

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論