




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
頁(yè)第1章課題簡(jiǎn)介1.1開(kāi)發(fā)背景在我國(guó)數(shù)量眾多的食品批發(fā)公司中,中小食品批發(fā)公司占了絕大多數(shù),這些食品批發(fā)公司也不可避免地要加入國(guó)際化食品批發(fā)公司的競(jìng)爭(zhēng)行列,而實(shí)現(xiàn)食品批發(fā)公司信息化是參與競(jìng)爭(zhēng)的必要條件,但是中小食品公司的多樣性及其靈活多變的經(jīng)營(yíng)方式,加上其資金投入量的限制,使得很多中小食品批發(fā)公司沒(méi)能進(jìn)行信息化建設(shè)。實(shí)際上大部分中小食品批發(fā)公司需要的只是能解決食品進(jìn)、銷(xiāo)、存管理和財(cái)務(wù)管理等的基礎(chǔ)軟件。因此,開(kāi)發(fā)基于中小食品批發(fā)公司應(yīng)用的進(jìn)銷(xiāo)存管理系統(tǒng)尤為重要。而隨著社會(huì)的不斷發(fā)展,計(jì)算機(jī)被廣泛應(yīng)用于各行各業(yè)之中。用計(jì)算機(jī)管理軟件對(duì)公司業(yè)務(wù)進(jìn)行管理更是一種行業(yè)發(fā)展趨勢(shì),也是衡量一個(gè)國(guó)家技術(shù)發(fā)展水平的標(biāo)志。利用計(jì)算機(jī)管理不但可以提升工作效率,還可以節(jié)省人力物力,增強(qiáng)數(shù)據(jù)準(zhǔn)確性、實(shí)時(shí)性和有效性。因此在食品批發(fā)公司使用計(jì)算機(jī)管理軟件進(jìn)行進(jìn)貨、銷(xiāo)售、庫(kù)存等管理是非常必要的。當(dāng)前,隨著經(jīng)濟(jì)的全球化以及中國(guó)經(jīng)濟(jì)改革的逐漸深入,食品批發(fā)業(yè)面臨著越來(lái)越激烈的競(jìng)爭(zhēng),改善公司內(nèi)部以及整個(gè)供應(yīng)鏈各個(gè)環(huán)節(jié)的管理、調(diào)度及資源配置,具備迅速適應(yīng)客戶(hù)的新需求和市場(chǎng)新機(jī)遇的能力,是中國(guó)公司贏得競(jìng)爭(zhēng)勝利的決定性因素。為了適應(yīng)發(fā)展需要設(shè)計(jì)本系統(tǒng)。1.2研究?jī)?nèi)容高科技的發(fā)展,軟件管理系統(tǒng)成為工作的得力助手。今天,計(jì)算機(jī)價(jià)格越來(lái)越大眾化,管理軟件性能越來(lái)越優(yōu)秀,逐漸被應(yīng)用于眾多領(lǐng)域。管理軟件廣泛普及應(yīng)用的原因主要有以下幾個(gè)方面:第一,計(jì)算機(jī)行業(yè)本身發(fā)展迅速;第二,計(jì)算機(jī)可以代替人工進(jìn)行繁雜和重復(fù)性的工作;第三,管理軟件可以節(jié)省許多資源;第四,管理軟件可以提高人們的工作效率;第五,管理軟件便于管理人員的管理。本食品進(jìn)銷(xiāo)存管理系統(tǒng)是基于先進(jìn)的軟件和高速、大容量的硬件基礎(chǔ)上的新的進(jìn)銷(xiāo)存管理模式,做到通過(guò)集中式的信息數(shù)據(jù)庫(kù),將公司的進(jìn)貨、銷(xiāo)售、存儲(chǔ)等經(jīng)營(yíng)業(yè)務(wù)有機(jī)的結(jié)合起來(lái),大大減少公司管理部門(mén)的勞動(dòng)量,改善公司內(nèi)部以及整個(gè)供應(yīng)鏈各個(gè)環(huán)節(jié)的管理、調(diào)度及資源配置,使得管理合理規(guī)范。系統(tǒng)盡量合理的控制物流,尤其是食品庫(kù)存的控制,將食品數(shù)量控制到只在需要的時(shí)候向需要的部門(mén)按需要的數(shù)量提供所需要的食品,也就是說(shuō),它既防止食品供應(yīng)滯后于對(duì)他們的需求,也防止食品過(guò)早地進(jìn)貨,以免增加庫(kù)存,造成物資和資金的積壓,實(shí)現(xiàn)食品銷(xiāo)售的全方面管理。通過(guò)系統(tǒng)實(shí)現(xiàn)從基礎(chǔ)數(shù)據(jù)維護(hù)、進(jìn)貨直到銷(xiāo)售后利潤(rùn)統(tǒng)計(jì)的一系列功能。簡(jiǎn)化手工勞動(dòng)的繁雜性、降低人工勞動(dòng)強(qiáng)度、提高數(shù)據(jù)的時(shí)效性、提高工作效率、降低經(jīng)營(yíng)成本,為管理層決策提供強(qiáng)有力的支持。本系統(tǒng)還要考慮到經(jīng)濟(jì)、技術(shù)和運(yùn)行環(huán)境等方面的條件,來(lái)確定系統(tǒng)的總體結(jié)構(gòu)和系統(tǒng)各組成部分的技術(shù)方案,把系統(tǒng)用戶(hù)與訂單、食品的關(guān)系確定好。將系統(tǒng)用戶(hù)的權(quán)限限制為單一獨(dú)立的,這樣可以讓權(quán)限在分配的時(shí)候互不干擾。第2章需求分析根據(jù)對(duì)一般中小食品批發(fā)公司的調(diào)查研究,其對(duì)系統(tǒng)的日常經(jīng)營(yíng)管理需求分析為:批發(fā)公司準(zhǔn)備進(jìn)貨時(shí)由進(jìn)貨員制作進(jìn)貨訂單,制單時(shí)先選擇食品,輸入食品數(shù)量,之后選擇食品供應(yīng)商,最后確認(rèn)制單。進(jìn)貨的食品到貨后倉(cāng)庫(kù)員再入庫(kù),并對(duì)食品數(shù)量進(jìn)行調(diào)整,然后財(cái)務(wù)員付款完成交易。食品訂貨商予訂購(gòu)食品時(shí),通過(guò)電話(huà)與批發(fā)公司的銷(xiāo)售員聯(lián)系,由銷(xiāo)售員制作銷(xiāo)售訂單,制單時(shí)先選擇食品、輸入數(shù)量,之后選擇訂貨商確認(rèn)制單。制單完成后倉(cāng)庫(kù)員發(fā)貨,發(fā)貨后對(duì)食品數(shù)量進(jìn)行調(diào)整,之后銷(xiāo)售員送貨并收款,最后財(cái)務(wù)員確認(rèn)收款完成交易。倉(cāng)庫(kù)管理中,對(duì)食品庫(kù)存、食品庫(kù)存金額進(jìn)行記錄。記錄供應(yīng)商及訂貨商中消費(fèi)金額或積分。1.具體任務(wù)根據(jù)調(diào)查分析,該系統(tǒng)完成如下具體任務(wù):(1)系統(tǒng)用戶(hù)管理:系統(tǒng)用戶(hù)信息管理、分配系統(tǒng)用戶(hù)角色。(2)進(jìn)貨訂單流程:進(jìn)貨員選擇食品,選擇供應(yīng)商,倉(cāng)庫(kù)管理員入庫(kù),制單員確認(rèn)完成交易。(3)銷(xiāo)售訂單流程:銷(xiāo)售員選擇訂貨商,選擇食品、倉(cāng)庫(kù)管理員發(fā)貨、分銷(xiāo)員確認(rèn)付款、收款員確認(rèn)收款、交易完成。(4)食品管理:管理食品類(lèi)別信息、食品品牌信息、食品名稱(chēng)、食品數(shù)量和食品單價(jià)信息、食品庫(kù)存(5)訂貨商管理:用于維護(hù)訂貨商的編號(hào)、名稱(chēng)、聯(lián)系人、地址、電話(huà)、積分額度等基本信息。(6)供應(yīng)商管理:用于維護(hù)供應(yīng)商的編號(hào)、名稱(chēng)、地址、電話(huà)、消費(fèi)金額等的基本信息。2.系統(tǒng)用例模型用例模型是面向?qū)ο蠓治雠c設(shè)計(jì)的概念模型,一般用于前期的需求研究以及項(xiàng)目范圍的控制、功能的分析,主要描述系統(tǒng)用戶(hù)可以對(duì)哪些模塊或者子模塊進(jìn)行操作[1]。根據(jù)上面的任務(wù)分析,繪制本系統(tǒng)用例模型,本系統(tǒng)的用例模型如圖2—1所示。圖2—1食品進(jìn)銷(xiāo)存管理系統(tǒng)用例模型第3章總體設(shè)計(jì)經(jīng)過(guò)需求分析之后,進(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)貨訂單管理、銷(xiāo)售訂單管理、客戶(hù)管理、倉(cāng)庫(kù)管理5大模塊。以上各模塊按層次劃分子模塊,每個(gè)子模塊完成相應(yīng)功能,且每個(gè)子模塊具有單獨(dú)入口單獨(dú)出口。3.1系統(tǒng)模塊設(shè)計(jì)1.RBAC管理菜單模塊包括用戶(hù)管理一個(gè)子模塊。實(shí)現(xiàn)對(duì)系統(tǒng)用戶(hù)登錄賬號(hào)、密碼、用戶(hù)姓名、性別、激活狀態(tài)信息進(jìn)行增加、修改、刪除、查詢(xún)、設(shè)置用戶(hù)角色功能。此模塊中封裝角色權(quán)限。RBAC管理菜單模塊功能結(jié)構(gòu)圖如圖3—1所示。RBACRBAC管理菜單用戶(hù)管理圖3—1RBAC管理菜單模塊功能結(jié)構(gòu)圖進(jìn)貨訂單管理經(jīng)理操作入庫(kù)管理進(jìn)貨訂單2.進(jìn)貨訂單管理經(jīng)理操作入庫(kù)管理進(jìn)貨訂單圖3—2進(jìn)貨訂單模塊功能結(jié)構(gòu)圖3.銷(xiāo)售訂單管理模塊包括訂單管理、訂單發(fā)貨管理、確認(rèn)訂單交易、經(jīng)理操作四個(gè)子模塊。訂單管理實(shí)現(xiàn)創(chuàng)建銷(xiāo)售訂單、修改訂單、查詢(xún)個(gè)人訂單、確認(rèn)付款功能。創(chuàng)建銷(xiāo)售訂單時(shí)需要操作員選擇食品、輸入食品數(shù)量,之后選擇分銷(xiāo)商完成訂單創(chuàng)建。訂單發(fā)貨管理實(shí)現(xiàn)銷(xiāo)售訂單查詢(xún)、發(fā)貨確認(rèn)。確認(rèn)訂單交易實(shí)現(xiàn)訂單檢索、確認(rèn)此訂單交易完成。經(jīng)理操作實(shí)現(xiàn)所有銷(xiāo)售訂單查詢(xún)、確認(rèn)訂單交易完成。銷(xiāo)售訂單管理模塊功能結(jié)構(gòu)圖如圖3—3所示。銷(xiāo)售訂單管理銷(xiāo)售訂單管理經(jīng)理操作訂單發(fā)貨管理訂單管理確認(rèn)訂單交易圖3—3銷(xiāo)售訂單管理模塊功能結(jié)構(gòu)圖客戶(hù)管理訂貨商管理供應(yīng)商管理4.客戶(hù)管理模塊包括供應(yīng)商管理和訂貨商管理兩個(gè)子模塊。其中供應(yīng)商管理實(shí)現(xiàn)查詢(xún)供應(yīng)商、修改供應(yīng)商信息、新增供應(yīng)商、刪除供應(yīng)商。訂貨商管理實(shí)現(xiàn)查詢(xún)訂貨商、修改訂貨商信息、新增訂貨商、刪除訂貨商。客戶(hù)管理模塊功能結(jié)構(gòu)圖如圖客戶(hù)管理訂貨商管理供應(yīng)商管理圖3—4客戶(hù)管理模塊功能結(jié)構(gòu)圖5.倉(cāng)庫(kù)管理模塊包括食品管理、食品銷(xiāo)售記錄、食品類(lèi)別、食品品牌四個(gè)子模塊。食品管理實(shí)現(xiàn)對(duì)食品的查詢(xún)、新增、刪除、編輯、食品明細(xì),食品明細(xì)實(shí)現(xiàn)查詢(xún)顯示該食品的進(jìn)貨訂單信息。食品銷(xiāo)售記錄實(shí)現(xiàn)對(duì)該食品的銷(xiāo)售訂單查詢(xún)。食品類(lèi)別實(shí)現(xiàn)食品類(lèi)別的查詢(xún)、新增、修改、刪除功能。食品品牌實(shí)現(xiàn)食品品牌的查詢(xún)、新增、修改、刪除功能。倉(cāng)庫(kù)管理模塊功能結(jié)構(gòu)圖如圖3—5所示。倉(cāng)庫(kù)管理倉(cāng)庫(kù)管理食品品牌食品銷(xiāo)售記錄食品管理食品類(lèi)別圖3—5倉(cāng)庫(kù)管理模塊功能結(jié)構(gòu)圖3.2數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)系統(tǒng)的使用過(guò)程是將現(xiàn)實(shí)世界的數(shù)據(jù)經(jīng)過(guò)人為加工和計(jì)算機(jī)處理之后,又為現(xiàn)實(shí)世界提供信息的過(guò)程[3]。根據(jù)前面的分析,對(duì)本系統(tǒng)進(jìn)行如下數(shù)據(jù)庫(kù)設(shè)計(jì)。1.PURCHASEORDERDETAILSID(進(jìn)貨訂單詳細(xì)信息表):用于存儲(chǔ)進(jìn)貨訂單詳細(xì)信息,表結(jié)構(gòu)如表3—1所示。表3—1PURCHASEORDERDETAILSID字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明PURDETAILSIDNUMBER38—否詳細(xì)進(jìn)貨訂單idPURCHASERIDNUMBER38—否進(jìn)貨商PRODUCTNUMBER38—否食品PRODUCTQUERYNUMBER38—否訂貨數(shù)量PRODUCTPRICENUMBER72否食品單價(jià)PRODUCTMONEYNUMBER72否訂單總價(jià)SFRKVARCHAR26—否是否入庫(kù)PURCHASEORDERIDNUMBER38—否進(jìn)貨訂單編號(hào)QRRKYNUMBER38—是入庫(kù)員JHYNUMBER38—否進(jìn)貨員JYZTNUMBER38—否訂單狀態(tài)2.PRODUCT(食品信息表):用于存儲(chǔ)食品基本信息,表結(jié)構(gòu)如表3—2所示。表3—2PRODUCT字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明PRODUCTIDNUMBER38—否食品idPRODUCTNUMVARCHAR220—否食品編號(hào)PRODUCTSELLPRICENUMBER72否銷(xiāo)售單價(jià)PRODUCTSURPLUSNUMBER38—是庫(kù)存量CATEGORYNUMBER38—否類(lèi)別PRODUCTNAMEVARCHAR250—否食品名稱(chēng)3.ORDER(銷(xiāo)售訂單信息表):用于存儲(chǔ)銷(xiāo)售訂單信息,表結(jié)構(gòu)如表3—3所示。表3—3ORDER字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明ORDERIDNUMBER38—否訂單idORDERNUMVARCHAR216—否訂單編號(hào)ORDERTIMEDATE——否制單時(shí)間ORDERMONEYNUMBER92否訂單總價(jià)CUSTOMNAMENUMBER38—否訂貨商O(píng)RDERACTIVATEVARCHAR26—否訂單狀態(tài)ORDERCONSIGNORNUMBER38—否發(fā)貨員PAYMONEYVARCHAR26—否是否付款EMPLOYEENUMBER38—否制單員ORDERTIMEDELIVERYDATE——否發(fā)貨時(shí)間ORDERACTUALCOSTMONEYNUMBER92否實(shí)際付款金額PAYMONETEMPNUMBER38—否確認(rèn)收款員JYZTVARCHAR26—否交易狀態(tài)4.ORDERDETAILSID(銷(xiāo)售訂單詳細(xì)信息表):用于存儲(chǔ)銷(xiāo)售訂單詳細(xì)信息,表結(jié)構(gòu)如表3—4所示。表3—4ORDERDETAILSID字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明ORDERDETNUMBER38—否詳細(xì)訂單idORDERNUMNUMBER38—否訂單編號(hào)PRODUCTNAMENUMBER38—否食品PRODUCTQUERYNUMBER38—否訂貨數(shù)量PRODUCTPRICENUMBER72否食品單價(jià)PRODUCTMONEYNUMBER72否訂單總價(jià)CATEGORYNUMBER38—否食品類(lèi)型BRANDNUMBER38—否食品品牌PRODUCTBRANDNUMBER38—否食品品牌5.PURCHASEORDER(進(jìn)貨訂單信息表):用于存儲(chǔ)進(jìn)貨訂單信息,表結(jié)構(gòu)如表3—5所示。表3—5PURCHASEORDER字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明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)用戶(hù)表):用于存儲(chǔ)系統(tǒng)用戶(hù)信息,表結(jié)構(gòu)如表3—6所示。表3—6EMPLOYEE字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明IDNUMBER38—否用戶(hù)idEIDVARCHAR217—否用戶(hù)登錄名ENAMEVARCHAR216—-否用戶(hù)名PASSWORDVARCHAR212—-否密碼BIRTHDAYDATE—否出生日期GENDERVARCHAR2—否性別ACTIVATENUMBER1—否用戶(hù)狀態(tài)VISITDATE6—否上次登錄時(shí)間WORKBIRTHDAYDATE6—否入職時(shí)間YJNUMBER82是業(yè)績(jī)DEPTVARCHAR230—否部門(mén)ROLEVARCHAR230—否角色AUTHVARCHAR230—否權(quán)限7.PURCHASER(供應(yīng)商信息表):用于存儲(chǔ)供應(yīng)商的基本信息,表結(jié)構(gòu)如表3—7所示。表3—7PURCHASER字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明PIDNUMBER38—否供應(yīng)商idPURNAMEVARCHAR250—否供應(yīng)商名稱(chēng)PURUSERVARCHAR210—是聯(lián)系人PURTELVARCHAR250—是電話(huà)PURADDVARCHAR2200—是地址8.CUSTOMER(訂貨商信息表):用于存儲(chǔ)訂貨商的信息,表結(jié)構(gòu)如表3—8所示。表3—8CUSTOMER字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明CUSTOMIDNUMBER38—否訂貨商idCUSTOMNAMEVARCHAR250—否姓名CUSTOMTELVARCHAR250—是電話(huà)CUSTOMADDVARCHAR250—是地址JFNUMBER38—是積分XYNUMBER3—是信用評(píng)價(jià)9.BRAND(食品品牌信息表):用于存儲(chǔ)食品品牌信息,表結(jié)構(gòu)如表3—9所示。表3—9BRAND字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明BIDNUMBER38—否食品品牌idBRANDNAMEVARCHAR250—否食品品牌名稱(chēng)10.GATEGORY(食品類(lèi)別表):用于存儲(chǔ)食品的類(lèi)別,表結(jié)構(gòu)如表3—10所示。表3—10GATEGORY字段名字段類(lèi)型長(zhǎng)度小數(shù)位數(shù)是否允許空字段說(shuō)明CATEGORYIDNUMBER38—否食品類(lèi)別idCATEGORYNAMEVARCHAR250—否食品類(lèi)別名稱(chēng)第4章詳細(xì)設(shè)計(jì)4.1系統(tǒng)登錄界面設(shè)計(jì)系統(tǒng)設(shè)計(jì)過(guò)程中采用了jsp技術(shù),jsp技術(shù)是目前企業(yè)級(jí)應(yīng)用網(wǎng)絡(luò)管理系統(tǒng)最流行的技術(shù)之一[4]。登錄界面的設(shè)計(jì)過(guò)程是先創(chuàng)建一個(gè)名為login.jsp的頁(yè)面,然后在頁(yè)面中添加一個(gè)表格,在表格中添加兩個(gè)文本框用于輸入用戶(hù)名和密碼,將文本框的id和name屬性分別設(shè)置為loginname和password,并提供一個(gè)登錄按鈕用于讓用戶(hù)提交表單。在后臺(tái),創(chuàng)建個(gè)LoginAction的Struts2控制器類(lèi),用于處理用戶(hù)登錄,通過(guò)struts2功能,取出loginname和password的值,之后把值添加到hql語(yǔ)句中去數(shù)據(jù)庫(kù)查詢(xún),在LoginAction中設(shè)置一個(gè)名為error的域成員,用于登錄失敗時(shí)提示用戶(hù),如果登錄,將用戶(hù)的id,及用戶(hù)擁有的權(quán)限全部存入到session中,用于權(quán)限分配。系統(tǒng)登錄界面如圖4—1所示。圖4—1系統(tǒng)登錄界面4.2系統(tǒng)主界面設(shè)計(jì)系統(tǒng)主界面是系統(tǒng)用戶(hù)登錄后進(jìn)入的界面,設(shè)計(jì)過(guò)程是先新建一個(gè)名為main.jsp的頁(yè)面,通過(guò)框架對(duì)界面進(jìn)行設(shè)計(jì)。左面引用的界面為menu.jsp,用于顯示當(dāng)前登錄用戶(hù)名稱(chēng)的標(biāo)簽,及本系統(tǒng)的各個(gè)功能模塊的入口鏈接。當(dāng)用戶(hù)單擊左側(cè)各個(gè)功能模塊時(shí),架框右則會(huì)通過(guò)超鏈接跳轉(zhuǎn)到各自相應(yīng)的操作界面。系統(tǒng)主界面如圖4—2所示。圖4—2系統(tǒng)主界面4.3功能模塊設(shè)計(jì)系統(tǒng)后臺(tái)設(shè)計(jì)過(guò)程中采用了java語(yǔ)言設(shè)計(jì),java語(yǔ)言的優(yōu)點(diǎn)是一次編譯到處運(yùn)行,可移植能力非常強(qiáng),只需開(kāi)發(fā)人員在自己的計(jì)算機(jī)上編譯后,在其它計(jì)算機(jī)上就可以運(yùn)行[5]。1.進(jìn)貨訂單管理界面進(jìn)貨訂單管理界面為purorder/list.jsp。在頁(yè)面中插入一個(gè)表格,用于顯示進(jìn)貨訂單相應(yīng)信息,每一行提供“修改”、“完成”和“配置”的超鏈接按鈕以進(jìn)行相對(duì)應(yīng)操作。后臺(tái)創(chuàng)建PurchaseOrderAction的Struts2控制器類(lèi),該類(lèi)定義了檢索、修改、創(chuàng)建訂單、配置訂單的供應(yīng)商功能。條件檢索功能由PurchaseOrderAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)ddbh(訂單編號(hào))、dddate(制單日期)、wcdate(完成日期)通過(guò)struts2進(jìn)行賦值,之后把值添加到hql語(yǔ)句中去數(shù)據(jù)庫(kù)檢索,可進(jìn)行單一條件或多條件檢索。系統(tǒng)中進(jìn)貨訂單編號(hào)是由后臺(tái)PurOrderAction類(lèi)完成的,前兩位“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。在頁(yè)面中插入一個(gè)表格,用于顯示所有進(jìn)貨訂單相應(yīng)信息,每行提供“修改”、“完成”和“配置”的超鏈接按鈕以進(jìn)行相對(duì)應(yīng)操作。后臺(tái)創(chuàng)建PurchaseOrderAction的Struts2控制器類(lèi),該類(lèi)定義了檢索、修改、創(chuàng)建訂單,配置訂單的供應(yīng)商等。條件檢索功能由PurchaseOrderAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)ddbh(訂單編號(hào))、dddate(制單日期)、wcdate(完成日期)通過(guò)struts2進(jìn)行賦值,之后把值添加到hql語(yǔ)句中去數(shù)據(jù)庫(kù)檢索,可進(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)選擇食品,每行提供“刪除”按鈕,通過(guò)ajax技術(shù)實(shí)現(xiàn)異步刷新,單擊“刪除”后該行直接刪除。單擊“保存”按鈕,執(zhí)行PurchaseOrderAction中的save方法,來(lái)確認(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。在頁(yè)面中插入一個(gè)表格,表格顯示食品的相應(yīng)信息,通過(guò)ajax來(lái)傳遞到進(jìn)貨訂單創(chuàng)建界面,并且用PurchaseOrderAction中的productIds域成員來(lái)保存食品id,將選過(guò)的食品框變?yōu)椴豢蛇x,防止用戶(hù)重復(fù)選擇食品。之后通過(guò)PurchaseOrderDetailsAction中save方法保存訂單。進(jìn)貨食品選擇界面如圖4—6所示。圖4—6進(jìn)貨食品選擇界面5.銷(xiāo)售訂單管理界面銷(xiāo)售訂單管理界面為order/list.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示銷(xiāo)售訂單相應(yīng)信息。條件檢索功能由OrderAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)ddbh(訂單編號(hào))、dddate(制單日期)、wcdate(發(fā)貨日期)、customId(訂貨商)、employeeId(發(fā)貨員)通過(guò)struts2進(jìn)行賦值,之后把值添加到hql語(yǔ)句中去數(shù)據(jù)庫(kù)查詢(xún),可單一條件伙伴多條件檢索。銷(xiāo)售訂單編號(hào)是由后臺(tái)OrderAction的類(lèi)完成的,“dd”表示銷(xiāo)售訂單,之后八位是當(dāng)天日期,最后四位是當(dāng)日銷(xiāo)售訂單個(gè)數(shù),在查詢(xún)時(shí),OrderAction中獲取session中的登錄id,只查詢(xún)?cè)搃d創(chuàng)建的訂單。銷(xiāo)售訂單管理界面如圖4—7所示。圖4—7銷(xiāo)售訂單管理界面6.銷(xiāo)售訂單編輯界面系統(tǒng)設(shè)計(jì)過(guò)程中采用了Ajax技術(shù),其作用是提供網(wǎng)頁(yè)瀏覽者與網(wǎng)頁(yè)內(nèi)容的交互,并可以進(jìn)行信息驗(yàn)證,可實(shí)現(xiàn)異步刷新頁(yè)面[6]。單擊銷(xiāo)售訂單管理界面中的“編輯”進(jìn)入銷(xiāo)售訂單編輯界面,銷(xiāo)售訂單編輯界面為order/table.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示銷(xiāo)售訂單明細(xì)信息。當(dāng)輸入購(gòu)買(mǎi)數(shù)量時(shí)使用ajax技術(shù)自動(dòng)取出食品單價(jià)與食品數(shù)量的值并算出所需金額。單擊“保存”時(shí)通過(guò)OrderDetailsAction中的save方法來(lái)保存該訂單,保存訂單時(shí)從session中取出該用戶(hù)id。銷(xiāo)售訂單編輯界面如圖4—8所示。圖4—8銷(xiāo)售訂單編輯界面7.訂單發(fā)貨管理界面訂單發(fā)貨管理界面為dispathorder/list.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示銷(xiāo)售訂單相關(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))條件通過(guò)struts2功能自動(dòng)對(duì)其賦值。單擊每行訂單時(shí),DispathOrderAction的類(lèi)中的orderList域成員的信息可在其下面顯示,再次單擊則隱藏。訂單發(fā)貨管理界面如圖4—9所示。圖4—9訂單發(fā)貨管理界面8.銷(xiāo)售訂單經(jīng)理操作界面銷(xiāo)售訂單經(jīng)理操作界面為dispathorder/jlcz.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示所有銷(xiāo)售訂單相應(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(分銷(xiāo)員)、skyId(收款員)條件通過(guò)struts2功能自動(dòng)對(duì)其賦值??砂磫我换蚨鄺l件進(jìn)行檢索。單擊每行訂單時(shí),檢索其明細(xì)在下面顯示,再次單擊則隱藏。銷(xiāo)售訂單經(jīng)理操作界面如圖4—10所示。圖4—10銷(xiāo)售訂單經(jīng)理操作界面9.供應(yīng)商管理界面供應(yīng)商管理界面為purchaser/list.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示供應(yīng)商信息。后臺(tái)使用PurchaserAction類(lèi)中的add、edit、list、delete等方法來(lái)實(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。在頁(yè)面中插入一個(gè)表格插入三個(gè)文本框,設(shè)置其id和name屬性,單擊“保存”按鈕時(shí)purchasername(供應(yīng)商名稱(chēng))、purchasertel(供應(yīng)商電話(huà))、purchaseradd(供應(yīng)商地址)通過(guò)struts2的功能賦值,將值傳到后臺(tái)PurchaserAction類(lèi)中的相對(duì)應(yīng)域成員中,之后用save方法保存供應(yīng)商。新增供應(yīng)商界面如圖4—12所示。圖4—12新增供應(yīng)商界面11.訂貨商管理界面訂貨商管理界面為custom/list.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示供應(yīng)商信息。后臺(tái)使用CustomAction類(lèi)中的add、edit、delete、list方法來(lái)實(shí)現(xiàn)對(duì)訂貨商的新增、修改、刪除、檢索。訂貨商管理界面如圖4—一三所示。圖4—一三訂貨商管理界面12.新增訂貨商界面單擊訂貨商管理界面中的“新增訂貨商”進(jìn)入新增訂貨商界面,新增訂貨商界面為custom/edit.jsp。在頁(yè)面中插入一個(gè)表格插入三個(gè)文本框,設(shè)置其id和name屬性,單擊“保存”按鈕時(shí)customname(訂貨商名稱(chēng))、customtel(訂貨商電話(huà))、customadd(訂貨商地址)通過(guò)struts2的功能賦值,將值傳到后臺(tái)CustomAction類(lèi)中的相對(duì)應(yīng)域成員中,之后用save方法保存訂貨商信息。新增訂貨商界面如圖4—14所示。圖4—14新增訂貨商界面一三.食品管理界面食品管理界面為product/list.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示食品信息。在后臺(tái)建立ProductAction的類(lèi),使用里面的list、add、edit、mingxi、delete方法來(lái)實(shí)現(xiàn)對(duì)食品信息的檢索、新增、編輯、明細(xì)查詢(xún)、刪除操作。上方檢索功能由后臺(tái)ProductAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)productname(商品名稱(chēng))、category(食品類(lèi)型)、brand(食品品牌)、productquery(商品數(shù)量)條件通過(guò)struts2功能自動(dòng)對(duì)其賦值??砂磫我换蚨鄺l件進(jìn)行食品檢索。食品管理界面如圖4—一五所示。圖4—一五食品管理界面14.食品銷(xiāo)售記錄界面食品銷(xiāo)售記錄界面為product/profit.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示食品銷(xiāo)售信息。單擊每行時(shí),在后臺(tái)使用ProductAction類(lèi)中的spxiaoshou的方法在該行下方顯示該食品的銷(xiāo)售訂單,再單擊則隱藏。上方檢索功能由后臺(tái)ProductAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)productname(商品名稱(chēng))、category(食品類(lèi)型)、brand(食品品牌)、pxff(排序方法)條件通過(guò)struts2功能自動(dòng)對(duì)其賦值??砂磫我换蚨鄺l件進(jìn)行食品檢索。食品銷(xiāo)售記錄界面如圖4—16所示。圖4—16食品銷(xiāo)售記錄界面一五.員工管理界面員工管理界面為employee/list.jsp。在頁(yè)面中插入一個(gè)表格,表格顯示員工信息。在后臺(tái)使用EmployeeAction類(lèi)中的list、edit、save、delete、saverole方法來(lái)實(shí)現(xiàn)對(duì)員工的檢索、編輯、保存、刪除、設(shè)置角色操作。上方檢索功能由后臺(tái)EmployeeAction中的域成員對(duì)應(yīng)檢索條件,單擊“檢索”時(shí)empname(員工名)條件通過(guò)struts2功能自動(dòng)對(duì)其賦值。最后訪(fǎng)問(wèn)時(shí)間是在退出登錄的時(shí)候通過(guò)后臺(tái)的logoutAction類(lèi)來(lái)修改的。員工管理界面如圖4—17所示。圖4—17員工管理界面16.員工新增界面單擊員工管理界面中的“增加員工”進(jìn)入員工新增界面,員工新增界面為employee/edit.jsp。單擊“新增員工”按鈕時(shí)通過(guò)Employee類(lèi)中的edit方法彈出該界面。在頁(yè)面中插入一個(gè)表格三個(gè)文本框、一個(gè)單選按鈕和一個(gè)select下拉列表,并且分別設(shè)置其id和name屬性。手動(dòng)輸入用戶(hù)信息單擊“保存”時(shí),通過(guò)struts2功能將值傳入后臺(tái)EmployeeAction類(lèi)中的loginname、password、empname、gender、activate域成員,再調(diào)用save方法來(lái)保存員工信息。員工新增界面如圖4—一八所示。圖4—一八員工新增界面第5章測(cè)試系統(tǒng)測(cè)試的重要性體現(xiàn)在它是保證系統(tǒng)質(zhì)量與可靠性的最后關(guān)口,是對(duì)整個(gè)系統(tǒng)開(kāi)發(fā)過(guò)程包括系統(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ì)各階段的開(kāi)發(fā)文檔,都作為測(cè)試的對(duì)象。軟件測(cè)試不等于程序測(cè)試,它是根據(jù)軟件開(kāi)發(fā)各個(gè)階段的規(guī)格說(shuō)明和程序的內(nèi)容結(jié)構(gòu)而精心設(shè)計(jì)的一批測(cè)試用例,并利用這些用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤的過(guò)程[7]。單元測(cè)試是指程序中的一個(gè)模塊或一個(gè)子程序,是程序運(yùn)行的最小單元,或是程序最小的獨(dú)立編譯單位。單元測(cè)試是軟件開(kāi)發(fā)過(guò)程中進(jìn)行的最低級(jí)別的測(cè)試活動(dòng),其目的是要檢測(cè)程序模塊中有無(wú)故障。1.創(chuàng)建銷(xiāo)售訂單測(cè)試測(cè)試數(shù)據(jù):可口可樂(lè)的購(gòu)買(mǎi)數(shù)量5,統(tǒng)一綠茶的購(gòu)買(mǎi)數(shù)量不填。測(cè)試界面如圖5—1所示。圖5—1創(chuàng)建銷(xiāo)售訂單測(cè)試界面測(cè)試結(jié)果:可口可樂(lè)購(gòu)買(mǎi)數(shù)量下方提示“此貨物購(gòu)買(mǎi)數(shù)量不能大于庫(kù)存量”,統(tǒng)一綠茶購(gòu)買(mǎi)數(shù)量下方提示“食品個(gè)數(shù)必須填寫(xiě)”,測(cè)試結(jié)果與預(yù)期結(jié)果相符。2.新增用戶(hù)測(cè)試測(cè)試數(shù)據(jù):所有數(shù)據(jù)全部正確填寫(xiě)、全部不填寫(xiě)或部分填寫(xiě)。測(cè)試結(jié)果:所有數(shù)據(jù)全部正確填寫(xiě)后單擊“提交”可以成功新增加一新用戶(hù),全部不填寫(xiě)或部分填寫(xiě)不能成功增加用戶(hù),并給出相應(yīng)的提示信息,與預(yù)期結(jié)果相符。數(shù)據(jù)均不填寫(xiě)的測(cè)試界面如圖5—2所示。圖5—2新增員工測(cè)試界面3.用戶(hù)登錄測(cè)試測(cè)試數(shù)據(jù):填寫(xiě)正確用戶(hù)名和密碼,錯(cuò)誤用戶(hù)名和錯(cuò)誤密碼。測(cè)試結(jié)果:正確時(shí)點(diǎn)擊登錄,進(jìn)入系統(tǒng)主界面。用戶(hù)名密碼錯(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ì)過(guò)程中實(shí)現(xiàn)了對(duì)過(guò)去所學(xué)知識(shí)的回顧、總結(jié)和應(yīng)用。本管理系統(tǒng)能夠?qū)崿F(xiàn)數(shù)據(jù)的輸入、查詢(xún)、修改、刪除、統(tǒng)計(jì)等功能,能夠追朔到數(shù)據(jù)的始終,完成了食品進(jìn)銷(xiāo)存管理系統(tǒng)從需求方面的開(kāi)發(fā)和應(yīng)用,達(dá)到預(yù)期的目的。不可否認(rèn),該系統(tǒng)的功能還不完善,仍存在許多的缺點(diǎn)和不足,例如,在計(jì)算利潤(rùn)時(shí),是以平均價(jià)格來(lái)進(jìn)行計(jì)算利潤(rùn),用庫(kù)存金額除以庫(kù)存數(shù)量,之后用售出單價(jià)減去平均進(jìn)價(jià)來(lái)計(jì)算,正規(guī)方法應(yīng)該是在食品進(jìn)貨訂單中加標(biāo)注,賣(mài)出的食品到相對(duì)應(yīng)的進(jìn)貨訂單中檢索出進(jìn)貨價(jià)格,進(jìn)行計(jì)算利潤(rùn);還有用戶(hù)部門(mén)沒(méi)有進(jìn)行分配,這個(gè)缺點(diǎn)是在需求分析時(shí)沒(méi)有寫(xiě)進(jìn)去,之后總體設(shè)計(jì)的時(shí)候也沒(méi)有考慮到,導(dǎo)致用戶(hù)沒(méi)有部門(mén)的缺陷,但是此缺陷可以在今后升級(jí)中修復(fù);另外在選擇供應(yīng)商時(shí)候,應(yīng)該可以查詢(xún)出該供應(yīng)商都能供應(yīng)哪些食品,這個(gè)缺陷是當(dāng)時(shí)調(diào)研時(shí)未考慮到,經(jīng)過(guò)老師指點(diǎn)才發(fā)現(xiàn)的,此缺陷也可在升級(jí)程序過(guò)程中修復(fù)。參考文獻(xiàn)[1]張俊蘭,王文發(fā),馮伍,軟件工程(第一版)[M],西安:西安交通大學(xué)出版社,(2009):41—44[2]劉竹林,軟件工程案例開(kāi)發(fā)與實(shí)踐[M],北京:清華大學(xué)出版社,(2009):26—29[3]王立福,數(shù)據(jù)庫(kù)系統(tǒng)概論(第三版)[M],北京:北京大學(xué)出版社,(2009):8—9[4]劉曉華,JSP應(yīng)用開(kāi)發(fā)詳解[M],北京:電子工業(yè)出版社,(2007):6—7[5]趙毅,跨平臺(tái)程序設(shè)計(jì)語(yǔ)言—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è)文件主要是用來(lái)配置系統(tǒng)數(shù)據(jù)庫(kù)連接等信息)<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抽象工廠(chǎng)--> <beanid="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="dataSource"ref="myDataSource"/> <propertyname="mappingLocations"><!--如果你有很多hbm寫(xiě)起來(lái)很累--> <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開(kāi)頭的方法,只讀(即不開(kāi)啟事務(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è)文件主要是用來(lái)配置頁(yè)面轉(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(用戶(hù)登錄驗(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(用戶(hù)登錄頁(yè)面)<%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)銷(xiāo)存管理系統(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>用戶(hù)名</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(銷(xiāo)售訂單及發(fā)貨頁(yè)面)<%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>庫(kù)存管理業(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必須大寫(xiě)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="-倉(cāng)庫(kù)員-" 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年石家莊貨運(yùn)從業(yè)資格考試模擬考試題目及答案
- 茉莉花茶代理合同7篇
- 古箏采購(gòu)合同范本
- 廠(chǎng)區(qū)道路修路合同范本
- 企業(yè)經(jīng)營(yíng)貸款服務(wù)合同范本
- 上半年工作總結(jié)開(kāi)頭
- 儒學(xué)大師邀請(qǐng)合同范本
- 動(dòng)物防疫練習(xí)題庫(kù)與答案
- 病理學(xué)與病理生理學(xué)習(xí)題庫(kù)與參考答案
- 一年級(jí)法制教育教案
- 小學(xué)數(shù)學(xué)西南師大三年級(jí)上冊(cè)三辨認(rèn)方向指南針PPT
- 工作室成員成長(zhǎng)檔案模板(內(nèi)部版)課件
- 項(xiàng)目滯后趕工措施
- 預(yù)防接種人員崗位培訓(xùn)習(xí)題(Ⅰ類(lèi)培訓(xùn)練習(xí)題庫(kù)共385題)
- 現(xiàn)場(chǎng)經(jīng)濟(jì)簽證單范本
- 固定義齒工藝流程圖
- 《網(wǎng)店運(yùn)營(yíng)與管理》課件(完整版)
- (高職)員工培訓(xùn)與開(kāi)發(fā)(第四版)完整版教學(xué)課件全套電子教案
- 相親相愛(ài) 簡(jiǎn)譜
- 第四章工具鋼
- 2022年春新冀人版科學(xué)五年級(jí)下冊(cè)全冊(cè)課件
評(píng)論
0/150
提交評(píng)論