基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn)計算機專業(yè)畢業(yè)論文
《基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn)計算機專業(yè)畢業(yè)論文》由會員分享,可在線閱讀,更多相關《基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn)計算機專業(yè)畢業(yè)論文(47頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、XXXX大學畢業(yè)論文基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn)專業(yè)名稱: 計算機科學與技術 班 級: 200804 學生姓名: XXX 指導教師: XXX 完成時間: 2012年4月 42 摘要隨著科學技術的發(fā)展和人們生活水平的提高,人們對于醫(yī)藥產(chǎn)品的需求迅速增加,管理藥品信息成為制藥行業(yè)的各項工作中不可缺少的一部分。本醫(yī)藥管理系統(tǒng)是為了管理藥品信息而設計的。以前的數(shù)據(jù)處理要用手工操作,工作量大,出錯率高,出錯后也不易更改。而本醫(yī)藥管理系統(tǒng)使用起來,效率高,速度快,也方便使用和修改。根據(jù)實際需求,本醫(yī)藥管理系統(tǒng)是在Windows XP操作系統(tǒng)環(huán)境下,以MyEclipse 8.6為前臺開發(fā)工具,采用JS
2、P技術,用MySQL Server 5.0為后臺數(shù)據(jù)庫開發(fā)工具來實現(xiàn)的。主要實現(xiàn)醫(yī)藥管理、類別管理、購買藥品、銷售管理、進貨/需求管理和系統(tǒng)管理等功能。本醫(yī)藥管理系統(tǒng)首先輸入和存儲一些基本的數(shù)據(jù)資料,例如本系統(tǒng)中的藥品信息和銷售信息、進貨/需求信息,對于這些信息和數(shù)據(jù)能方便的進行添加、修改、查詢和刪除。其次,為了方便管理者管理數(shù)據(jù),對各種數(shù)據(jù)進行統(tǒng)計,如統(tǒng)計庫存信息,銷售信息和進貨/需求信息等。關鍵詞 醫(yī)藥管理系統(tǒng);藥品信息管理;JSP技術ABSTRACTWith the development of science and technology and peoples living stan
3、dards improve, the demand for pharmaceutical products increased rapidly, the management of drug information has become an indispensable part of the work of the pharmaceutical industry.The management system of the medicine is designed to manage drug information. The previous data processing to use ma
4、nual operation, a heavy workload, error rate, error is not easy to change. The use of the pharmaceutical management system, high efficiency, fast, easy to use and modify.According to the actual needs of the pharmaceutical management system is in the Windows XP operating system environment, the MyEcl
5、ipse 8.6 development tools for the front, using JSP technology, MySQL Server 5.0 back-end database development tools. Medical management, category management, buying drugs, sales management, purchase / demand management and system management functions.Management system of the medicine first enter an
6、d store some of the basic data, such as drug information and sales information in this system, purchase / demand for such information and data can easily add, modify, query and delete. Secondly, in order to facilitate management of data managers, a variety of data statistics, such as statistical inv
7、entory information, sales information, and purchase / demand information.Keywords Pharmaceutical management system; information management; JSP technology目 錄1 緒論11.1 系統(tǒng)開發(fā)背景11.2 系統(tǒng)開發(fā)意義11.3 文章內(nèi)容安排12 系統(tǒng)開發(fā)環(huán)境和開發(fā)工具簡介32.1 系統(tǒng)開發(fā)環(huán)境32.2 系統(tǒng)開發(fā)工具簡介32.2.1 MySQL數(shù)據(jù)庫介紹32.2.2 JSP技術概述33 系統(tǒng)需求分析53.1 可行性分析53.1.1 技術可行性53.1
8、.2 經(jīng)濟可行性53.2 系統(tǒng)功能需求53.3 數(shù)據(jù)流圖64 系統(tǒng)總體設計84.1 系統(tǒng)結構設計84.1.1 邏輯分層結構設計94.1.2 定義ActionForm94.1.3 持久層結構設計104.1.4 業(yè)務層結構設計114.1.5 頁面結構設計114.2 數(shù)據(jù)庫設計124.2.1 實體對象設計124.2.2 數(shù)據(jù)庫表結構124.2.3 數(shù)據(jù)庫E-R圖145 系統(tǒng)詳細設計175.1 公共類設計185.1.1 Hibernate過濾器185.1.2 SuperDao類195.1.3 BaseAction類205.1.4 DeleteAction類215.1.5 字符串工具類225.2 系統(tǒng)登
9、陸模塊設計235.3 醫(yī)藥管理模塊設計245.3.1 藥品對象持久層設計265.3.2 藥品信息的添加與修改265.3.3 分頁查看所有藥品275.3.4 查看藥品詳細信息275.3.5 查詢藥品285.3.6 高級查詢285.3.7 查看庫存295.4 類別管理模塊設計305.4.1 藥品類別持久層設計305.4.2 藥品類別的添加305.4.3 分頁查看類別信息315.4.4 類別的修改與刪除315.4.5 藥品類別統(tǒng)計315.5 購買藥品模塊設計325.5.1 購買藥品335.5.2 查看選購335.6 銷售管理模塊設計345.6.1 查看明細和今日明細355.6.2 日期查詢355.6
10、.3 銷售排行355.7 進貨/需求管理模塊設計365.8 系統(tǒng)管理模塊設計37結 論40致 謝41參考文獻42基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn)1 緒論1.1 系統(tǒng)開發(fā)背景當今時代是飛速發(fā)展的信息時代。在各行各業(yè)中都離不開信息的處理,這正是計算機被廣泛用于信息管理系統(tǒng)的原因。計算機的最大好處在于利用它能夠進行信息管理。使用計算機進行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。尤其對于復雜的信息管理,計算機能夠充分的發(fā)揮它的優(yōu)越性。計算機進行信息管理與信息管理系統(tǒng)的開發(fā)密切相關,系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。隨著我國市場經(jīng)濟的蓬勃發(fā)展和人們對醫(yī)藥產(chǎn)品需求的迅速增加,醫(yī)藥行業(yè)正處于一個
11、高速發(fā)展的時期。行業(yè)的快速發(fā)展必然導致競爭的加劇,想要在激烈的市場競爭中謀求發(fā)展,客觀上要求企業(yè)必須加強內(nèi)部管理,提高運營效率。另外,由于醫(yī)藥產(chǎn)品種類繁多,銷售模式特殊,業(yè)務量大,單憑手工管理已很難適應工作的需要。醫(yī)藥作為一個關系人們健康的特殊行業(yè),國家對醫(yī)藥行業(yè)又有一些不同于其他行業(yè)的管理政策,這些都加大了管理的難度。如何盡快建立和完善現(xiàn)代企業(yè)的信息管理機制問題,已成為醫(yī)藥企業(yè)發(fā)展的關鍵所在。1.2 系統(tǒng)開發(fā)意義根據(jù)實際情況和系統(tǒng)的開發(fā)背景來看,開發(fā)本醫(yī)藥管理系統(tǒng)的意義在于:能夠集中處理藥品的進銷存業(yè)務,提供快速的藥品查詢功能、快速的統(tǒng)計藥品信息、銷量信息,對藥品進行高效的管理以滿足管理者和
12、消費者的需求。1.3 文章內(nèi)容安排本文主要闡述了本醫(yī)藥管理系統(tǒng)的整體開發(fā)過程。介紹了系統(tǒng)的開發(fā)環(huán)境以及開發(fā)工具,對于設計思想和設計流程也做出了全面的敘述,在數(shù)據(jù)庫各個數(shù)據(jù)表之間的具體關聯(lián)方面也做出了詳細說明,并且具體剖析了系統(tǒng)各個功能的實現(xiàn)過程以及詳細設計過程。具體內(nèi)容安排如下:第一章:介紹系統(tǒng)的開發(fā)背景和開發(fā)意義,以及文章的內(nèi)容安排;第二章:介紹系統(tǒng)開發(fā)的硬件環(huán)境和軟件環(huán)境,以及開發(fā)工具和核心技術;第三章:對系統(tǒng)進行需求分析,主要對系統(tǒng)進行可行性分析,明確系統(tǒng)要實現(xiàn)的目標和所完成的功能;第四章:完成系統(tǒng)的詳細設計,包括系統(tǒng)功能結構圖,業(yè)務流程圖以及數(shù)據(jù)庫的E-R圖;第五章:完成系統(tǒng)的詳細實現(xiàn)
13、,包括公共類的設計和各個模塊的設計。2 系統(tǒng)開發(fā)環(huán)境和開發(fā)工具簡介2.1 系統(tǒng)開發(fā)環(huán)境硬件平臺:CPU:2.00GHz內(nèi)存:2G軟件平臺:操作系統(tǒng):Windows XP數(shù)據(jù)庫:MySQL Server 5.0開發(fā)工具:MyEclipse 8.6開發(fā)工具包:JDK 1.6JSP服務器:Tomcat 7.0瀏覽器:IE 82.2 系統(tǒng)開發(fā)工具簡介2.2.1 MySQL數(shù)據(jù)庫介紹MySQL是一個小型關系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司。在2008年1月16號被Sun公司收購。而2009年,SUN又被Oracle收購。MySQL是一種關聯(lián)數(shù)據(jù)庫管理系統(tǒng),關聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表
14、中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi)。這樣就增加了速度并提高了靈活性。SQL是用于訪問數(shù)據(jù)庫的最常用標準化語言。MySQL軟件采用了GPL(GNU通用公共許可證)。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫。2.2.2 JSP技術概述JSP技術使用Java編程語言編寫XML的tags和scriptlets,來封裝產(chǎn)生動態(tài)網(wǎng)頁的處理邏輯。網(wǎng)頁還通過tags和scriptlets訪問存在于服務端的資源的應用邏輯。JSP將網(wǎng)頁邏輯與網(wǎng)頁設計和顯示分離,支持可重用的基于組件的設計,使基于Web的應用程序的開發(fā)變得
15、迅速和容易。Web服務器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序段,然后將執(zhí)行結果連同JSP文件中的HTML代碼一起返回給客戶。插入的Java程序段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁等,以實現(xiàn)建立動態(tài)網(wǎng)頁所需要的功能。JSP與JavaServlet一樣,是在服務器端執(zhí)行的,通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務器在頁面被客戶端請求以后對這些Java代碼進行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。Java Servlet是JSP的技術基礎,而且大型的Web應用程序的開發(fā)需要Java Ser
16、vlet和JSP配合才能完成。JSP具備了Java技術的簡單易用,完全的面向對象,具有平臺無關性且安全可靠,主要面向因特網(wǎng)的所有特點。自JSP推出后,眾多大公司都支持JSP技術的服務器,如IBM、Oracle、Bea公司等,所以JSP迅速成為商業(yè)應用的服務器端語言。3 系統(tǒng)需求分析3.1 可行性分析可行性分析是在進行初步調查后所進行的對系統(tǒng)開發(fā)的必要性和可能性的研究,所以也稱為可行性研究。所謂可行性應該包括必要性和可能性兩個方面。沒有必要性的項目是不應該進行的。一般地,軟件領域的可行性分析主要考慮兩個因素:技術可行性和經(jīng)濟可行性。3.1.1 技術可行性根據(jù)系統(tǒng)目標來衡量所需的技術是否具備,本醫(yī)
17、藥管理系統(tǒng)是一個數(shù)據(jù)庫管理和查詢的系統(tǒng),軟件技術方面采用的是 Microsoft Windows XP Professional版的操作系統(tǒng),MySQL Server 5.0為后臺數(shù)據(jù)庫開發(fā)工具, MyEclipse 8.6集成開發(fā)工具。JDK 1.6開發(fā)工具包,Tomcat 7.0服務器,IE 8瀏覽器以及JSP技術,能夠實現(xiàn)本醫(yī)藥管理系統(tǒng),以滿足用戶需求。3.1.2 經(jīng)濟可行性醫(yī)藥進銷存管理已成為醫(yī)藥管理工作中不可缺少的部分,開發(fā)一個醫(yī)藥管理系統(tǒng)具有很強的經(jīng)濟價值。本醫(yī)藥管理系統(tǒng)提供快速的藥品查詢功能、快速的統(tǒng)計藥品信息、銷售信息等,對藥品進行高效的管理以滿足管理者的需求。所以,本醫(yī)藥管理
18、系統(tǒng)在經(jīng)濟型上有很強的實際價值。3.2 系統(tǒng)功能需求根據(jù)實際情況分析,本醫(yī)藥管理系統(tǒng)的應具有主要功能包括:(1) 醫(yī)藥管理:添加藥品、查看藥品、高級查詢、查看庫存;(2) 類別管理:添加類別、查看類別、類別統(tǒng)計;(3) 購買藥品:選購藥品、查看選購;(4) 銷售管理:查看明細、今日明細、日期查詢、銷售排行;(5) 進貨/需求管理:添加進貨、查看進貨;(6) 系統(tǒng)管理:添加管理員、查看所有管理員、修改密碼、系統(tǒng)初始化、退出系統(tǒng)。3.3 數(shù)據(jù)流圖數(shù)據(jù)流程圖(Data Flow Diagram,簡稱DFD)是數(shù)據(jù)流程分析所使用的主要工具之一,是組織中信息運動的抽象,是管理信息系統(tǒng)邏輯模型的主要形式。
19、這個模型不涉及硬件、軟件、數(shù)據(jù)結構與文件組織,它與對系統(tǒng)的物理描述無關,只是用一種圖形及與此相關的注釋來表示系統(tǒng)的邏輯模型,即所開發(fā)的系統(tǒng)在管理信息處理方面要做什么。醫(yī)藥管理系統(tǒng)零層數(shù)據(jù)流圖如圖3-1所示。P醫(yī)藥管理系統(tǒng)F1藥品信息F2藥品類別信息F3藥品銷售信息F4用戶信息D1 藥品信息表D2 藥品類別信息表D3 銷售明細信息表D4 用戶信息表圖3-1 醫(yī)藥管理系統(tǒng)零層數(shù)據(jù)流圖F1.1藥品信息添加F1.2藥品信息刪除 F1.3藥品信息修改 醫(yī)藥管理P1F1.4藥品信息查詢 D1 藥品信息表醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖如圖3-2、圖3-3、圖3-4、圖3-5所示。圖3-2 醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖
20、F2.1藥品類別信息添加F2.2藥品類別信息刪除 F2.3藥品類別信息修改 類別管理P2F2.4藥品類別信息統(tǒng)計 D2 藥品類別信息表2 藥品類別信息表D1 P醫(yī)藥管理系統(tǒng)信息F3.1購買藥品信息添加F3.2購買藥品信息刪除 F3.3藥品銷售信息查詢 銷售管理P3F3.4藥品銷售信息統(tǒng)計 D3 銷售明細信息表2 藥品類別信息表D1 P醫(yī)藥管理系統(tǒng)信息圖3-3 醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖F4.1用戶信息添加F4.2用戶信息刪除 F4.3用戶信息修改 系統(tǒng)管理P4D4 用戶信息表2 藥品類別信息表D1 P醫(yī)藥管理系統(tǒng)信息圖3-4 醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖圖3-5 醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖4 系統(tǒng)總體
21、設計4.1 系統(tǒng)結構設計在開發(fā)項目之前,首先要對軟件的結構進行設計,也稱之為軟件架構,此過程是對軟件的整體結構的設計。如軟件的邏輯分層結構、結構的實現(xiàn)、數(shù)據(jù)庫等等,特別是在Java的大型項目中,還需要設計出程序中包結構及接口等,非常復雜,需要程序員進行全面的考慮。對于醫(yī)藥管理系統(tǒng)的整體設計:邏輯分層結構設計、定義ActionForm、持久層結構設計、業(yè)務層結構設計、頁面結構設計以及數(shù)據(jù)庫設計。系統(tǒng)功能結構圖如圖4-1所示。醫(yī)藥管理系統(tǒng)醫(yī)藥管理類別管理購買藥品銷售管理進貨/需求管理系統(tǒng)管理添加藥品查看藥品高級查詢查看庫存添加類別查看類別類別統(tǒng)計選購藥品查看選購查看明細今日明細日期查詢銷售排行添加
22、進貨查看進貨添加管理員查看管理員修改密碼系統(tǒng)初始化退出系統(tǒng)圖4-1 系統(tǒng)功能結構圖4.1.1 邏輯分層結構設計遵循MVC結構進行分析,醫(yī)藥管理系統(tǒng)可分為四層結構,分別為表示層、業(yè)務邏輯層、持久層與數(shù)據(jù)庫層,四層結構圖如圖4-2所示。醫(yī)藥管理系統(tǒng)表示層(Struts框架)業(yè)務邏輯層(Struts框架)持久層(Hibernate框架)數(shù)據(jù)庫層(MySQL數(shù)據(jù)庫)圖4-2 四層結構圖對于四層結構的具體實現(xiàn)如圖4-3所示。視圖JSP/ActionFormStruts標簽控制器Actionstruts-config.xml持久化Hibernate APIhibernate.cfg.xml醫(yī)藥管理系統(tǒng)My
23、SQL數(shù)據(jù)庫圖4-3 四層結構實現(xiàn)圖4.1.2 定義ActionFormActionForm是簡單的JavaBean,它主要用來保存用戶所輸入的表單數(shù)據(jù),ActionForm要獲取這些數(shù)據(jù)需要通過ActionForm對象進行傳遞。AcitonFomr對表單數(shù)據(jù)進行了封裝,在Jsp頁面與Action對象中提供了交互訪問的方法。在使用過程中,可通過繼承org.apache.struts.ActionForm對象來創(chuàng)建需要的ActionForm對象,項目中所涉及到的ActionForm對象如圖4-4所示。ActionFormcom.lyq.struts.formUserFormSellDetailF
24、ormCategoryFormMedicienForm用戶銷售明細類別藥品圖4-4 ActionForm對象圖4.1.3 持久層結構設計持久層結構通過Hibernate框架進行設計,由于Hibernate對不同對象的增、刪、改、查操作都具有一定的共性,如添加數(shù)據(jù)使用sava()方法、刪除數(shù)據(jù)使用delete()方法等,項目中將這些具有共性的操作抽取出來,封裝成一個類,其他數(shù)據(jù)庫操作對象可繼承此類來擁有這些方法,從而減少程序中的多余代碼,持久層結構設計圖如圖4-5所示。com.lyq.daoSupperDaosave(in obj:Object):voidsaveOrUpdate(in obj:
25、Object):voiddelete(in obj:Object):voidfindByHQL(in hql:String):ListdeleteByHQL(in hql:String):voiduniqueResult(in hql:String,in where:Object):ObjectfindPaging(in hql:String,in offset:int,in length:int,in where:Object):ListCategoryDaoMedicineDaoSellDaoUserDao圖4-5 持久層結構設計圖4.1.4 業(yè)務層結構設計業(yè)務層結構主要通過Stuts框架
26、進行設計,由Struts的中央控制器對各種請求操作進行控制,并通過相應的Action對其進行業(yè)務處理,項目中所用到的Action對象及關系如圖4-6所示。ActionDispatchActioncom.lyq.struts.actionLoginActionRequireActionSellActionBaseActionLookupDispatchActionCategoryActionSystemActionMedicineActionDeleteActionDeleteReqMedActionDeleteMedicineAction圖4-6 Action對象關系圖4.1.5 頁面結構設計
27、醫(yī)藥管理系統(tǒng)的頁面結構采用框架進行設計,通過HTML語言中的呃標簽及標簽將頁面分成三個部分,分別為頁面頭部、頁面導航及內(nèi)容頁面,頁面結構圖如圖4-7所示。頁面頭部頁面導航頁面內(nèi)容圖4-7 頁面結構圖4.2 數(shù)據(jù)庫設計數(shù)據(jù)庫設計的內(nèi)容是:對于一個確定的環(huán)境,進行符合應用語義的邏輯設計,以及提供一個確定存貯結構和物理設計,建立實現(xiàn)系統(tǒng)目標,并能有效存取數(shù)據(jù)和數(shù)據(jù)模型。其主要任務是設計出能滿足各種應用要求的數(shù)據(jù)模型。4.2.1 實體對象設計在使用Hibernate框架的項目中,實體對象的確立是項目中的關鍵,實體對象與數(shù)據(jù)庫中的數(shù)據(jù)表相對應,并通過O/R映射建立實體與數(shù)據(jù)庫的聯(lián)系,Hibernate完
28、全通過操作實體來操作數(shù)據(jù)庫,所以首先要確定項目中的實體對象。在醫(yī)藥管理系統(tǒng)中,實體對象及其關系如圖4-8所示。com.lyq.persistence銷售明細藥品信息藥品類別用戶CategoryMedicineSellDetail多對一一對多多對一UserSellDetail.hbm.xmlUser.hbm.xmlMedicine.hbm.xmlCategory.hbm.xml圖4-8 實體對象關系圖4.2.2 數(shù)據(jù)庫表結構本系統(tǒng)的數(shù)據(jù)庫表設計主要包括:用戶信息表、藥品信息表、藥品類別信息表、銷售明細信息表。(1) 用戶信息表(tb_user),如表4.1所示。表4.1 用戶信息表字段名數(shù)據(jù)類型
29、長度是否主鍵允許空描述idinteger是否自動編號usernamevarchar50否否用戶名passwordvarchar50否否密碼createTimedatetime否是創(chuàng)建時間(2) 藥品信息表(tb_medicine),如表4.2所示。表4.2 藥品信息表字段名數(shù)據(jù)類型長度是否主鍵允許空描述idinteger是否自動編號medNovarchar100否否藥品編碼Namevarchar200否否藥品名稱factoryAddvarchar200否是出廠地址descriptionmediumtext否是藥品描述pricedouble否否藥品單價medCountinteger否是藥品數(shù)量r
30、eqCountinteger否是需求數(shù)量photoPathvarchar255否是藥品圖片categoryIddatetime否是類別編號(3) 藥品類別信息表(tb_category),如表4.3所示。表4.3 藥品類別信息表字段名數(shù)據(jù)類型長度是否主鍵允許空描述idinteger是否自動編號namevarchar100否否類別名稱descriptiontext否是類別描述createTimedatetime否是創(chuàng)建時間(4) 銷售明細信息表(tb_selldetail),如表4.4所示。表4.4 藥品銷售信息表字段名數(shù)據(jù)類型長度是否主鍵允許空描述idinteger是否自動編號sellName
31、varchar200否否藥品名稱sellPricedouble否否藥品單價sellCountinteger否否銷售數(shù)量sellTimedatetime否否銷售時間medidinteger否是藥品編號useridinteger否是用戶編號4.2.3 數(shù)據(jù)庫E-R圖(1) 根據(jù)實際需求和設計規(guī)劃得出的實體有:用戶實體、藥品實體、類別實體、銷售明細實體,各實體的屬性圖如圖4-9、圖4-10、圖4-11、圖4-12所示。用戶用戶名密碼創(chuàng)建時間圖4-9 用戶實體屬性圖藥品藥品編碼藥品名稱藥品數(shù)量藥品單價出廠地址藥品描述藥品類別藥品圖片需求數(shù)量圖4-10 藥品實體屬性圖類別類別名創(chuàng)建時間類別描述圖4-11
32、 類別實體屬性圖銷售明細藥品編碼藥品名稱藥品單價銷售數(shù)量銷售時間操作員銷售金額圖4-12 銷售明細實體屬性圖(2) 各實體之間的關系E-R圖如圖4-13所示。N藥品類別用戶銷售明細管理MNM1NN添加銷售管理管理MMN圖4-13 各實體關系E-R圖5 系統(tǒng)詳細設計在編寫代碼之前,需要對項目做出一些準備工作,如項目環(huán)境的搭建、項目所涉及到的第三方類庫的支持、web.xml的配置等。在醫(yī)藥進銷存管理系統(tǒng)中,主要涉及到Struts框架Hibernate框架及JFreeChart組件的應用,因此在開發(fā)項目之前,需要添加他們的類庫支持。(1) 配置web.xml,主要代碼如下:actionorg.apa
33、che.struts.action.ActionServletaction*.do(2) 配置struts-config.xml,主要代碼如下:(3) 配置hibernate.cfg.xml,主要代碼如下:org.hibernate.dialect.MySQLDialectjdbc:mysql:/localhost:3306/db_database25rootrootcom.mysql.jdbc.Driverupdatetrue5.1 公共類設計在Java程序開發(fā)中,如果一個功能反復被調用,可以將這個功能抽取出來封裝為一個類做為公共類,在需要此功能的地方通過繼承此類進行實現(xiàn)。公共類實質是代碼的
34、重用的一種方式,在面向對象的開發(fā)模式中,經(jīng)常被使用,它可以簡化程序中的代碼提高程序的可讀性,醫(yī)藥管理系統(tǒng)中的公共類設計如下。5.1.1 Hibernate過濾器在Web項目中,以普通方式使用Hibernate將無法解決Hibernate延遲加載,如下圖所示。當有一個業(yè)務請求查詢數(shù)據(jù)時,首先要開啟Session對象,然后Hibernate對數(shù)據(jù)進行查詢,再關閉Session對象,然后通過Jsp頁面來顯示數(shù)據(jù)。在這一過程中,如果查詢數(shù)據(jù)時使用了延遲加載,當Jsp頁面顯示數(shù)據(jù)信息時,Hibernate將拋出異常信息,因此此時Session已經(jīng)關閉,Hibernate不再對數(shù)據(jù)進行操作。通過過濾器管理
35、Hibernate的Session對象則可以避免此問題。主要代碼如下:public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException try chain.doFilter(request, response); finallySession session = (Session)threadLocal.get();if(session != null)if(session.isOpen()session.cl
36、ose();threadLocal.remove();public static Session getSession() Session session = (Session)threadLocal.get();if (session = null) session = factory.openSession();threadLocal.set(session);return session;5.1.2 SuperDao類SuperDao類為項目中所有數(shù)據(jù)庫操作的父類,此類中封裝了數(shù)據(jù)庫操作的常用方法。在此類中,由于Hibernate對數(shù)據(jù)的操作都需要用到Session接口,此類中定義了一個
37、protected類型的Session對象,為其子類提供方便。主要代碼如下:public class SupperDao protected Session session = null;public void save(Object obj)try session = HibernateFilter.getSession();session.beginTransaction();session.save(obj);session.getTransaction().commit(); catch (Exception e) e.printStackTrace();session.getTran
38、saction().rollback();public void delete(Object obj)try session = HibernateFilter.getSession();session.beginTransaction();session.delete(obj);session.getTransaction().commit(); catch (Exception e) e.printStackTrace();session.getTransaction().rollback();5.1.3 BaseAction類BaseAction類是業(yè)務層有一個超類對象,它繼承了Stru
39、ts的DispatchAction類,同時還為子類對象提供公用方法。Struts的DispatchAction類繼承Action類,此類在處理請求時首先要執(zhí)行execute()方法,然后通過控制器再轉發(fā)到相應的方法進行業(yè)務處理,如果對系統(tǒng) 中涉及到的Action都編寫一個驗證方法,程序代碼的重負性太高,則不能體現(xiàn)出面向對象的設計模式,所以將其單獨封裝BaseAction類中,此類通過重寫Action類的execute()方法對用戶身份進行驗證。主要代碼如下:public class BaseAction extends DispatchAction protected int recPerPa
40、ge = 3;protected Locale locale = null; protected MessageResources message = null; public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception this.locale = this.getLocale(request);this.message = this.getResources(reque
41、st);if (request.getSession().getAttribute(user) = null) return mapping.findForward(login);return super.execute(mapping, form, request, response);5.1.4 DeleteAction類公共類DeleteAction主要用于項目中LookupDispatchAction的請求進行處理,它繼承LookupDispatchAction類,此類中同樣重寫了execute()方法對用戶身份做出驗證,當用戶身份不失敗時,將進行錯誤處理。同時,此類還重寫了Looku
42、pDispatchAction類中的getKeyMethodMap()方法,添加了兩個按鈕對象的Key。主要代碼如下:public class DeleteAction extends LookupDispatchActionpublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception if(request.getSession().getAttribute(user) =
43、null)return mapping.findForward(login);return super.execute(mapping, form, request, response);protected Map getKeyMethodMap() Map map = new HashMap();map.put(button.delete.selected, selected);map.put(button.delete.all, all);return map;5.1.5 字符串工具類在一個Web項目中,字符串是經(jīng)常被操作的對象,為簡化程序的代碼及提高程序的可讀性,對經(jīng)常用到的字符串處理方
44、法,可以封裝一個字符串工具類對其進行操作。比如Jsp頁面的多選框,它提交的參數(shù)值為數(shù)組類型,在數(shù)據(jù)庫的操作過程中需要將其轉換為字符串類型;在超鏈接中,如果加入中文參數(shù)將不能被瀏覽器解析,需要對其進行一定的處理才可以使用。類似于這種操作,在程序中使用的非常頻繁,將其封裝為一個公共類中,是一種良好的決解方案。在醫(yī)藥管理系統(tǒng)中,封裝了一個名稱為StringUtil的字符串工具類,用于對字符的特殊處理,此類中均為靜態(tài)方法。主要代碼如下:public class StringUtil public static String encodeURL(String s)try s = URLEncoder.e
45、ncode(s,GBK); catch (Exception e) e.printStackTrace();return s;public static String encodeZh(String s)try s = new String(s.getBytes(iso-8859-1),GBK); catch (Exception e) e.printStackTrace();return s;5.2 系統(tǒng)登陸模塊設計系統(tǒng)登錄是一個對用戶身份驗證的過程,只有登錄成功的用戶才可以對系統(tǒng)進行操作,否則不能對系統(tǒng)進行管理維護,它是系統(tǒng)的一道安全門。(1) 用戶登錄頁面如圖5-1所示。圖5-1 登錄頁
46、面圖(2) 用戶登錄時查詢用戶登錄信息,主要代碼如下:public User login(String userName,String password)User user = null;try session = HibernateFilter.getSession();session.beginTransaction();String hql = from User u where u.username=? and u.password=?;Query query =session.createQuery(hql).setParameter(0,userName).setParameter
47、(1, password);user = (User)query.uniqueResult();session.getTransaction().commit(); catch (Exception e) e.printStackTrace();session.getTransaction().rollback();return user;(3) 處理用戶登錄請求的主要代碼如下:public class LoginAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form,H
48、ttpServletRequest request, HttpServletResponse response)throws Exception UserForm uf = (UserForm) form;String userName = uf.getUsername();String password = uf.getPassword();User user = null;if (userName != null & password != null) UserDao userDao = new UserDao();user = userDao.login(userName, passwo
49、rd);if (user != null) request.getSession().setAttribute(user, user);return mapping.findForward(manage); else request.setAttribute(error, error);return mapping.findForward(loginFail);5.3 醫(yī)藥管理模塊設計藥品信息管理主要對藥品基本信息的維護,此模塊包含藥品信息的添加、刪除、查詢等操作。主要代碼如下:public ActionForward add(ActionMapping mapping, ActionForm
50、 form,HttpServletRequest request, HttpServletResponse response)throws Exception Medicine med = null;MedicineForm df = (MedicineForm) form;MedicineDao dao = new MedicineDao();if (df.getMedCount() = 0) df.setMedCount(1);med = new Medicine();BeanUtils.copyProperties(med, df);CategoryDao cd = new Catego
51、ryDao();Category category = cd.loadCategory(df.getCategoryId();med.setCategory(category);FormFile photo = df.getPhoto();try String fname = photo.getFileName(); if (fname.indexOf(.) != -1) String endWith =fname.substring(fname.lastIndexOf(.),fname.length();SimpleDateFormat sdf = new SimpleDateFormat(
52、yyyyMMddHHmmssSSS);fname = sdf.format(new Date() + endWith;OutputStream out = new FileOutputStream(realPath + / + fname); out.write(photo.getFileData();out.flush();out.close();med.setPhotoPath(fname); catch (Exception e) e.printStackTrace();dao.saveOrUpdate(med);return mapping.findForward(addSuccess
53、);5.3.1 藥品對象持久層設計MedicineDao類是藥品對象的數(shù)據(jù)庫操作類,它繼承SuperDao類。此類主要包含三個方法,分別為loadMedicine()、loadMedicineCategory()、findMedicineByMedNo()、其中l(wèi)oadMedicine()方法與findMedicineByMedNo()、用于根據(jù)藥品id及藥品編碼查詢藥品信息,loadMedicineAndCategory()用于查詢藥品信息與藥品類別信息,此方法使用內(nèi)聯(lián)接對藥品信息表與藥品類別表進行聯(lián)合查詢,它可以減少SQL語句的數(shù)量。5.3.2 藥品信息的添加與修改藥品編碼是藥品對象的一個標識,當添加一個藥品信息時需要判斷藥品是否已經(jīng)在數(shù)據(jù)庫中存在,如果存在則只需要更新藥品的數(shù)量即可。修改藥品與添加藥品的處理過程相同。添加藥品頁面如圖5-2、圖5-3、圖5-4所示。圖5-
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。