基于JSP的醫(yī)藥管理系統(tǒng)設(shè)計與實現(xiàn)計算機(jī)專業(yè)畢業(yè)論文
《基于JSP的醫(yī)藥管理系統(tǒng)設(shè)計與實現(xiàn)計算機(jī)專業(yè)畢業(yè)論文》由會員分享,可在線閱讀,更多相關(guān)《基于JSP的醫(yī)藥管理系統(tǒng)設(shè)計與實現(xiàn)計算機(jī)專業(yè)畢業(yè)論文(47頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 XXXX大學(xué)畢業(yè)論文 基于JSP的醫(yī)藥管理系統(tǒng)設(shè)計與實現(xiàn) 專業(yè)名稱: 計算機(jī)科學(xué)與技術(shù) 班 級: 200804 學(xué)生姓名: XXX 指導(dǎo)教師: XXX 完成時間: 2012年4月 42 摘要 隨著科學(xué)技術(shù)的發(fā)展和人們生活水平的提高,人們對于醫(yī)藥產(chǎn)品的需求迅速增加,管理藥品信息成為制藥行業(yè)的各項工作中不可缺少的一部分。本醫(yī)藥管理系統(tǒng)是為了管理藥品信息而設(shè)計的。以前的數(shù)據(jù)處理要用手工操作,工作量大,出錯率高,出錯后也
2、不易更改。而本醫(yī)藥管理系統(tǒng)使用起來,效率高,速度快,也方便使用和修改。 根據(jù)實際需求,本醫(yī)藥管理系統(tǒng)是在Windows XP操作系統(tǒng)環(huán)境下,以MyEclipse 8.6為前臺開發(fā)工具,采用JSP技術(shù),用MySQL Server 5.0為后臺數(shù)據(jù)庫開發(fā)工具來實現(xiàn)的。主要實現(xiàn)醫(yī)藥管理、類別管理、購買藥品、銷售管理、進(jìn)貨/需求管理和系統(tǒng)管理等功能。 本醫(yī)藥管理系統(tǒng)首先輸入和存儲一些基本的數(shù)據(jù)資料,例如本系統(tǒng)中的藥品信息和銷售信息、進(jìn)貨/需求信息,對于這些信息和數(shù)據(jù)能方便的進(jìn)行添加、修改、查詢和刪除。其次,為了方便管理者管理數(shù)據(jù),對各種數(shù)據(jù)進(jìn)行統(tǒng)計,如統(tǒng)計庫存信息,銷售信息和進(jìn)貨/需求信息等。
3、 關(guān)鍵詞 醫(yī)藥管理系統(tǒng);藥品信息管理;JSP技術(shù) ABSTRACT With the development of science and technology and peoples living standards improve, the demand for pharmaceutical products increased rapidly, the management of drug information has become an indispensable part of the work of the pharmaceut
4、ical industry.The management system of the medicine is designed to manage drug information. The previous data processing to use manual 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.
5、 According to the actual needs of the pharmaceutical management system is in the Windows XP operating system environment, the MyEclipse 8.6 development tools for the front, using JSP technology, MySQL Server 5.0 back-end database development tools. Medical management, category management, buying dr
6、ugs, sales management, purchase / demand management and system management functions. Management system of the medicine first enter and 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,
7、 query and delete. Secondly, in order to facilitate management of data managers, a variety of data statistics, such as statistical inventory information, sales information, and purchase / demand information. Keywords Pharmaceutical management system; information management; JSP tec
8、hnology 目 錄 1 緒論 1 1.1 系統(tǒng)開發(fā)背景 1 1.2 系統(tǒng)開發(fā)意義 1 1.3 文章內(nèi)容安排 1 2 系統(tǒng)開發(fā)環(huán)境和開發(fā)工具簡介 3 2.1 系統(tǒng)開發(fā)環(huán)境 3 2.2 系統(tǒng)開發(fā)工具簡介 3 2.2.1 MySQL數(shù)據(jù)庫介紹 3 2.2.2 JSP技術(shù)概述 3 3 系統(tǒng)需求分析 5 3.1 可行性分析 5 3.1.1 技術(shù)可行性 5 3.1.2 經(jīng)濟(jì)可行性 5 3.2 系統(tǒng)功能需求 5 3.3 數(shù)據(jù)流圖 6 4 系統(tǒng)總體設(shè)計 8 4.1 系統(tǒng)結(jié)構(gòu)設(shè)計 8 4.1.1 邏輯分層結(jié)構(gòu)設(shè)計 9
9、4.1.2 定義ActionForm 9 4.1.3 持久層結(jié)構(gòu)設(shè)計 10 4.1.4 業(yè)務(wù)層結(jié)構(gòu)設(shè)計 11 4.1.5 頁面結(jié)構(gòu)設(shè)計 11 4.2 數(shù)據(jù)庫設(shè)計 12 4.2.1 實體對象設(shè)計 12 4.2.2 數(shù)據(jù)庫表結(jié)構(gòu) 12 4.2.3 數(shù)據(jù)庫E-R圖 14 5 系統(tǒng)詳細(xì)設(shè)計 17 5.1 公共類設(shè)計 18 5.1.1 Hibernate過濾器 18 5.1.2 SuperDao類 19 5.1.3 BaseAction類 20 5.1.4 DeleteAction類 21 5.1.5 字符串工具類 22 5.2 系統(tǒng)登陸模塊
10、設(shè)計 23 5.3 醫(yī)藥管理模塊設(shè)計 24 5.3.1 藥品對象持久層設(shè)計 26 5.3.2 藥品信息的添加與修改 26 5.3.3 分頁查看所有藥品 27 5.3.4 查看藥品詳細(xì)信息 27 5.3.5 查詢藥品 28 5.3.6 高級查詢 28 5.3.7 查看庫存 29 5.4 類別管理模塊設(shè)計 30 5.4.1 藥品類別持久層設(shè)計 30 5.4.2 藥品類別的添加 30 5.4.3 分頁查看類別信息 31 5.4.4 類別的修改與刪除 31 5.4.5 藥品類別統(tǒng)計 31 5.5 購買藥品模塊設(shè)計 32 5.5.1 購買藥
11、品 33 5.5.2 查看選購 33 5.6 銷售管理模塊設(shè)計 34 5.6.1 查看明細(xì)和今日明細(xì) 35 5.6.2 日期查詢 35 5.6.3 銷售排行 35 5.7 進(jìn)貨/需求管理模塊設(shè)計 36 5.8 系統(tǒng)管理模塊設(shè)計 37 結(jié) 論 40 致 謝 41 參考文獻(xiàn) 42 基于JSP的醫(yī)藥管理系統(tǒng)設(shè)計與實現(xiàn) 1 緒論 1.1 系統(tǒng)開發(fā)背景 當(dāng)今時代是飛速發(fā)展的信息時代。在各行各業(yè)中都離不開信息的處理,這正是計算機(jī)被廣泛用于信息管理系統(tǒng)的原因。計算機(jī)的最大好處在于利用它能夠進(jìn)行信息管理。使用計算機(jī)進(jìn)行信息控制,不僅提高了工
12、作效率,而且大大的提高了其安全性。尤其對于復(fù)雜的信息管理,計算機(jī)能夠充分的發(fā)揮它的優(yōu)越性。計算機(jī)進(jìn)行信息管理與信息管理系統(tǒng)的開發(fā)密切相關(guān),系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。 隨著我國市場經(jīng)濟(jì)的蓬勃發(fā)展和人們對醫(yī)藥產(chǎn)品需求的迅速增加,醫(yī)藥行業(yè)正處于一個高速發(fā)展的時期。行業(yè)的快速發(fā)展必然導(dǎo)致競爭的加劇,想要在激烈的市場競爭中謀求發(fā)展,客觀上要求企業(yè)必須加強(qiáng)內(nèi)部管理,提高運營效率。另外,由于醫(yī)藥產(chǎn)品種類繁多,銷售模式特殊,業(yè)務(wù)量大,單憑手工管理已很難適應(yīng)工作的需要。醫(yī)藥作為一個關(guān)系人們健康的特殊行業(yè),國家對醫(yī)藥行業(yè)又有一些不同于其他行業(yè)的管理政策,這些都加大了管理的難度。如何盡快建立和完善現(xiàn)代企業(yè)的信息
13、管理機(jī)制問題,已成為醫(yī)藥企業(yè)發(fā)展的關(guān)鍵所在。 1.2 系統(tǒng)開發(fā)意義 根據(jù)實際情況和系統(tǒng)的開發(fā)背景來看,開發(fā)本醫(yī)藥管理系統(tǒng)的意義在于:能夠集中處理藥品的進(jìn)銷存業(yè)務(wù),提供快速的藥品查詢功能、快速的統(tǒng)計藥品信息、銷量信息,對藥品進(jìn)行高效的管理以滿足管理者和消費者的需求。 1.3 文章內(nèi)容安排 本文主要闡述了本醫(yī)藥管理系統(tǒng)的整體開發(fā)過程。介紹了系統(tǒng)的開發(fā)環(huán)境以及開發(fā)工具,對于設(shè)計思想和設(shè)計流程也做出了全面的敘述,在數(shù)據(jù)庫各個數(shù)據(jù)表之間的具體關(guān)聯(lián)方面也做出了詳細(xì)說明,并且具體剖析了系統(tǒng)各個功能的實現(xiàn)過程以及詳細(xì)設(shè)計過程。具體內(nèi)容安排如下: 第一章:介紹系統(tǒng)的開發(fā)背景和開發(fā)意
14、義,以及文章的內(nèi)容安排; 第二章:介紹系統(tǒng)開發(fā)的硬件環(huán)境和軟件環(huán)境,以及開發(fā)工具和核心技術(shù); 第三章:對系統(tǒng)進(jìn)行需求分析,主要對系統(tǒng)進(jìn)行可行性分析,明確系統(tǒng)要實現(xiàn)的目標(biāo)和所完成的功能; 第四章:完成系統(tǒng)的詳細(xì)設(shè)計,包括系統(tǒng)功能結(jié)構(gòu)圖,業(yè)務(wù)流程圖以及數(shù)據(jù)庫的E-R圖; 第五章:完成系統(tǒng)的詳細(xì)實現(xiàn),包括公共類的設(shè)計和各個模塊的設(shè)計。 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
15、 8.6 開發(fā)工具包:JDK 1.6 JSP服務(wù)器:Tomcat 7.0 瀏覽器:IE 8 2.2 系統(tǒng)開發(fā)工具簡介 2.2.1 MySQL數(shù)據(jù)庫介紹 MySQL是一個小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司。在2008年1月16號被Sun公司收購。而2009年,SUN又被Oracle收購。MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi)。這樣就增加了速度并提高了靈活性。SQL是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL軟件采用了GPL(GNU通用公共許可證)。由于其體積小、速度快、總體擁有成本低
16、,尤其是開放源碼這一特點,許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫。 2.2.2 JSP技術(shù)概述 JSP技術(shù)使用Java編程語言編寫XML的tags和scriptlets,來封裝產(chǎn)生動態(tài)網(wǎng)頁的處理邏輯。網(wǎng)頁還通過tags和scriptlets訪問存在于服務(wù)端的資源的應(yīng)用邏輯。JSP將網(wǎng)頁邏輯與網(wǎng)頁設(shè)計和顯示分離,支持可重用的基于組件的設(shè)計,使基于Web的應(yīng)用程序的開發(fā)變得迅速和容易。 Web服務(wù)器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序段,然后將執(zhí)行結(jié)果連同JSP文件中的HTML代碼一起返回給客戶。插入的Java程序段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁等
17、,以實現(xiàn)建立動態(tài)網(wǎng)頁所需要的功能。 JSP與JavaServlet一樣,是在服務(wù)器端執(zhí)行的,通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。 JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務(wù)器在頁面被客戶端請求以后對這些Java代碼進(jìn)行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。Java Servlet是JSP的技術(shù)基礎(chǔ),而且大型的Web應(yīng)用程序的開發(fā)需要Java Servlet和JSP配合才能完成。JSP具備了Java技術(shù)的簡單易用,完全的面向?qū)ο?,具有平臺無關(guān)性且安全可靠,主要面向因特網(wǎng)的所有特點。 自JSP推出后,眾多大公司都支持JSP技
18、術(shù)的服務(wù)器,如IBM、Oracle、Bea公司等,所以JSP迅速成為商業(yè)應(yīng)用的服務(wù)器端語言。 3 系統(tǒng)需求分析 3.1 可行性分析 可行性分析是在進(jìn)行初步調(diào)查后所進(jìn)行的對系統(tǒng)開發(fā)的必要性和可能性的研究,所以也稱為可行性研究。所謂可行性應(yīng)該包括必要性和可能性兩個方面。沒有必要性的項目是不應(yīng)該進(jìn)行的。一般地,軟件領(lǐng)域的可行性分析主要考慮兩個因素:技術(shù)可行性和經(jīng)濟(jì)可行性。 3.1.1 技術(shù)可行性 根據(jù)系統(tǒng)目標(biāo)來衡量所需的技術(shù)是否具備,本醫(yī)藥管理系統(tǒng)是一個數(shù)據(jù)庫管理和查詢的系統(tǒng),軟件技術(shù)方面采用的是 Microsoft Windows XP Professional版的操
19、作系統(tǒng),MySQL Server 5.0為后臺數(shù)據(jù)庫開發(fā)工具, MyEclipse 8.6集成開發(fā)工具。JDK 1.6開發(fā)工具包,Tomcat 7.0服務(wù)器,IE 8瀏覽器以及JSP技術(shù),能夠?qū)崿F(xiàn)本醫(yī)藥管理系統(tǒng),以滿足用戶需求。 3.1.2 經(jīng)濟(jì)可行性 醫(yī)藥進(jìn)銷存管理已成為醫(yī)藥管理工作中不可缺少的部分,開發(fā)一個醫(yī)藥管理系統(tǒng)具有很強(qiáng)的經(jīng)濟(jì)價值。本醫(yī)藥管理系統(tǒng)提供快速的藥品查詢功能、快速的統(tǒng)計藥品信息、銷售信息等,對藥品進(jìn)行高效的管理以滿足管理者的需求。所以,本醫(yī)藥管理系統(tǒng)在經(jīng)濟(jì)型上有很強(qiáng)的實際價值。 3.2 系統(tǒng)功能需求 根據(jù)實際情況分析,本醫(yī)藥管理系統(tǒng)的應(yīng)具有主要功能包括:
20、 (1) 醫(yī)藥管理:添加藥品、查看藥品、高級查詢、查看庫存; (2) 類別管理:添加類別、查看類別、類別統(tǒng)計; (3) 購買藥品:選購藥品、查看選購; (4) 銷售管理:查看明細(xì)、今日明細(xì)、日期查詢、銷售排行; (5) 進(jìn)貨/需求管理:添加進(jìn)貨、查看進(jìn)貨; (6) 系統(tǒng)管理:添加管理員、查看所有管理員、修改密碼、系統(tǒng)初始化、退出系統(tǒng)。 3.3 數(shù)據(jù)流圖 數(shù)據(jù)流程圖(Data Flow Diagram,簡稱DFD)是數(shù)據(jù)流程分析所使用的主要工具之一,是組織中信息運動的抽象,是管理信息系統(tǒng)邏輯模型的主要形式。這個模型不涉及硬件、軟件、數(shù)據(jù)結(jié)構(gòu)與文件組織,它與對系統(tǒng)的物
21、理描述無關(guān),只是用一種圖形及與此相關(guān)的注釋來表示系統(tǒng)的邏輯模型,即所開發(fā)的系統(tǒng)在管理信息處理方面要做什么。醫(yī)藥管理系統(tǒng)零層數(shù)據(jù)流圖如圖3-1所示。 P 醫(yī)藥管理系統(tǒng) F1藥品信息 F2藥品類別信息 F3藥品銷售信息 F4用戶信息 D1 藥品信息表 D2 藥品類別信息表 D3 銷售明細(xì)信息表 D4 用戶信息表 圖3-1 醫(yī)藥管理系統(tǒng)零層數(shù)據(jù)流圖 F1.1藥品信息添加 F1.2藥品信息刪除 F1.3藥品信息修改 醫(yī)藥管理 P1 F1.4藥品信息查詢 D1 藥品信息表 醫(yī)
22、藥管理系統(tǒng)一層數(shù)據(jù)流圖如圖3-2、圖3-3、圖3-4、圖3-5所示。 圖3-2 醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖 F2.1藥品類別信息添加 F2.2藥品類別信息刪除 F2.3藥品類別信息修改 類別管理 P2 F2.4藥品類別信息統(tǒng)計 D2 藥品類別信息表 2 藥品類別信息表 D1 P 醫(yī)藥管理系統(tǒng) 信息 F3.1購買藥品信息添加 F3.2購買藥品信息刪除 F3.3藥品銷售信息查詢 銷售管理 P3 F3.4藥品銷售信息統(tǒng)
23、計 D3 銷售明細(xì)信息表 2 藥品類別信息表 D1 P 醫(yī)藥管理系統(tǒng) 信息 圖3-3 醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖 F4.1用戶信息添加 F4.2用戶信息刪除 F4.3用戶信息修改 系統(tǒng)管理 P4 D4 用戶信息表 2 藥品類別信息表 D1 P 醫(yī)藥管理系統(tǒng) 信息 圖3-4 醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖 圖3-5 醫(yī)藥管理系統(tǒng)一層數(shù)據(jù)流圖 4 系統(tǒng)總體設(shè)計 4.1 系統(tǒng)結(jié)構(gòu)設(shè)
24、計 在開發(fā)項目之前,首先要對軟件的結(jié)構(gòu)進(jìn)行設(shè)計,也稱之為軟件架構(gòu),此過程是對軟件的整體結(jié)構(gòu)的設(shè)計。如軟件的邏輯分層結(jié)構(gòu)、結(jié)構(gòu)的實現(xiàn)、數(shù)據(jù)庫等等,特別是在Java的大型項目中,還需要設(shè)計出程序中包結(jié)構(gòu)及接口等,非常復(fù)雜,需要程序員進(jìn)行全面的考慮。對于醫(yī)藥管理系統(tǒng)的整體設(shè)計:邏輯分層結(jié)構(gòu)設(shè)計、定義ActionForm、持久層結(jié)構(gòu)設(shè)計、業(yè)務(wù)層結(jié)構(gòu)設(shè)計、頁面結(jié)構(gòu)設(shè)計以及數(shù)據(jù)庫設(shè)計。系統(tǒng)功能結(jié)構(gòu)圖如圖4-1所示。 醫(yī)藥管理系統(tǒng) 醫(yī)藥管理 類別管理 購買藥品 銷售管理 進(jìn)貨/需求管理 系統(tǒng)管理 添加藥品 查看藥品 高級查詢 查看庫存 添加類別 查看類別 類別統(tǒng)計 選購藥
25、品 查看選購 查看明細(xì) 今日明細(xì) 日期查詢 銷售排行 添加進(jìn)貨 查看進(jìn)貨 添加管理員 查看管理員 修改密碼 系統(tǒng)初始化 退出系統(tǒng) 圖4-1 系統(tǒng)功能結(jié)構(gòu)圖 4.1.1 邏輯分層結(jié)構(gòu)設(shè)計 遵循MVC結(jié)構(gòu)進(jìn)行分析,醫(yī)藥管理系統(tǒng)可分為四層結(jié)構(gòu),分別為表示層、業(yè)務(wù)邏輯層、持久層與數(shù)據(jù)庫層,四層結(jié)構(gòu)圖如圖4-2所示。 醫(yī)藥管理系統(tǒng) 表示層 (Struts框架) 業(yè)務(wù)邏輯層 (Struts框架) 持久層 (Hibernate框架) 數(shù)據(jù)庫層 (MySQL數(shù)據(jù)庫) 圖4-2 四層結(jié)構(gòu)圖 對于四層結(jié)構(gòu)的具體實現(xiàn)如圖4-3所示。 視圖JSP/Act
26、ionForm Struts標(biāo)簽 控制器 Action struts-config.xml 持久化 Hibernate API hibernate.cfg.xml 醫(yī)藥管理系統(tǒng) MySQL數(shù)據(jù)庫 圖4-3 四層結(jié)構(gòu)實現(xiàn)圖 4.1.2 定義ActionForm ActionForm是簡單的JavaBean,它主要用來保存用戶所輸入的表單數(shù)據(jù),ActionForm要獲取這些數(shù)據(jù)需要通過ActionForm對象進(jìn)行傳遞。AcitonFomr對表單數(shù)據(jù)進(jìn)行了封裝,在Jsp頁面與Action對象中提供了交互訪問的方法。在使用過程中,可
27、通過繼承org.apache.struts.ActionForm對象來創(chuàng)建需要的ActionForm對象,項目中所涉及到的ActionForm對象如圖4-4所示。 ActionForm com.lyq.struts.form UserForm SellDetailForm CategoryForm MedicienForm 用戶 銷售明細(xì) 類別 藥品 圖4-4 ActionForm對象圖 4.1.3 持久層結(jié)構(gòu)設(shè)計 持久層結(jié)構(gòu)通過Hibernate框架進(jìn)行設(shè)計,由于Hibernate對不同對象的增、刪、
28、改、查操作都具有一定的共性,如添加數(shù)據(jù)使用sava()方法、刪除數(shù)據(jù)使用delete()方法等,項目中將這些具有共性的操作抽取出來,封裝成一個類,其他數(shù)據(jù)庫操作對象可繼承此類來擁有這些方法,從而減少程序中的多余代碼,持久層結(jié)構(gòu)設(shè)計圖如圖4-5所示。 com.lyq.dao SupperDao save(in obj:Object):void saveOrUpdate(in obj:Object):void delete(in obj:Object):void findByHQL(in hql:String):List deleteByHQL(in hql:String
29、):void uniqueResult(in hql:String,in where:Object[]):Object findPaging(in hql:String,in offset:int,in length:int,in where:Object[]):List CategoryDao MedicineDao SellDao UserDao 圖4-5 持久層結(jié)構(gòu)設(shè)計圖 4.1.4 業(yè)務(wù)層結(jié)構(gòu)設(shè)計 業(yè)務(wù)層結(jié)構(gòu)主要通過Stuts框架進(jìn)行設(shè)計,由Struts的中央控制器對各種請求操作進(jìn)行控制,并通過相應(yīng)的Action對其進(jìn)行業(yè)務(wù)處
30、理,項目中所用到的Action對象及關(guān)系如圖4-6所示。 Action DispatchAction com.lyq.struts.action LoginAction RequireAction SellAction BaseAction LookupDispatchAction CategoryAction SystemAction MedicineAction DeleteAction DeleteReqMedAction DeleteMedicineAction 圖4-6 Action對象關(guān)系圖
31、
4.1.5 頁面結(jié)構(gòu)設(shè)計
醫(yī)藥管理系統(tǒng)的頁面結(jié)構(gòu)采用框架進(jìn)行設(shè)計,通過HTML語言中的呃
32、bernate框架的項目中,實體對象的確立是項目中的關(guān)鍵,實體對象與數(shù)據(jù)庫中的數(shù)據(jù)表相對應(yīng),并通過O/R映射建立實體與數(shù)據(jù)庫的聯(lián)系,Hibernate完全通過操作實體來操作數(shù)據(jù)庫,所以首先要確定項目中的實體對象。在醫(yī)藥管理系統(tǒng)中,實體對象及其關(guān)系如圖4-8所示。 com.lyq.persistence 銷售明細(xì) 藥品信息 藥品類別 用戶 Category Medicine SellDetail 多對一 一對多 多對一 User SellDetail.hbm.xml User.hbm.xml Medicine.hb
33、m.xml Category.hbm.xml 圖4-8 實體對象關(guān)系圖 4.2.2 數(shù)據(jù)庫表結(jié)構(gòu) 本系統(tǒng)的數(shù)據(jù)庫表設(shè)計主要包括:用戶信息表、藥品信息表、藥品類別信息表、銷售明細(xì)信息表。 (1) 用戶信息表(tb_user),如表4.1所示。 表4.1 用戶信息表 字段名 數(shù)據(jù)類型 長度 是否主鍵 允許空 描述 id integer — 是 否 自動編號 username varchar 50 否 否 用戶名 password varchar 50 否 否 密碼 createTime datetime —
34、 否 是 創(chuàng)建時間 (2) 藥品信息表(tb_medicine),如表4.2所示。 表4.2 藥品信息表 字段名 數(shù)據(jù)類型 長度 是否主鍵 允許空 描述 id integer — 是 否 自動編號 medNo varchar 100 否 否 藥品編碼 Name varchar 200 否 否 藥品名稱 factoryAdd varchar 200 否 是 出廠地址 description mediumtext — 否 是 藥品描述 price double — 否 否 藥品單價 medCount
35、integer — 否 是 藥品數(shù)量 reqCount integer — 否 是 需求數(shù)量 photoPath varchar 255 否 是 藥品圖片 categoryId datetime — 否 是 類別編號 (3) 藥品類別信息表(tb_category),如表4.3所示。 表4.3 藥品類別信息表 字段名 數(shù)據(jù)類型 長度 是否主鍵 允許空 描述 id integer — 是 否 自動編號 name varchar 100 否 否 類別名稱 description text — 否
36、 是 類別描述 createTime datetime — 否 是 創(chuàng)建時間 (4) 銷售明細(xì)信息表(tb_selldetail),如表4.4所示。 表4.4 藥品銷售信息表 字段名 數(shù)據(jù)類型 長度 是否主鍵 允許空 描述 id integer — 是 否 自動編號 sellName varchar 200 否 否 藥品名稱 sellPrice double — 否 否 藥品單價 sellCount integer — 否 否 銷售數(shù)量 sellTime datetime — 否 否 銷售時間 med
37、id integer — 否 是 藥品編號 userid integer — 否 是 用戶編號 4.2.3 數(shù)據(jù)庫E-R圖 (1) 根據(jù)實際需求和設(shè)計規(guī)劃得出的實體有:用戶實體、藥品實體、類別實體、銷售明細(xì)實體,各實體的屬性圖如圖4-9、圖4-10、圖4-11、圖4-12所示。 用戶 用戶名 密碼 創(chuàng)建時間 圖4-9 用戶實體屬性圖 藥品 藥品編碼 藥品名稱 藥品數(shù)量 藥品單價 出廠地址 藥品描述 藥品類別 藥品圖片 需求數(shù)量 圖4-10 藥品實體屬性圖 類別 類別名 創(chuàng)建時間 類別描述 圖4
38、-11 類別實體屬性圖 銷售明細(xì) 藥品編碼 藥品名稱 藥品單價 銷售數(shù)量 銷售時間 操作員 銷售金額 圖4-12 銷售明細(xì)實體屬性圖 (2) 各實體之間的關(guān)系E-R圖如圖4-13所示。 N 藥品 類別 用戶 銷售明細(xì) 管理 M N M 1 N N 添加 銷售 管理 管理 M M N 圖4-13 各實體關(guān)系E-R圖 5 系統(tǒng)詳細(xì)設(shè)計 在編寫代碼之前,需要對項目做出一些準(zhǔn)備工作,如項目環(huán)境的搭建、項目所涉及到的第三方類庫的支持、web.xml的配置等。在醫(yī)藥進(jìn)銷存管理系統(tǒng)中,主要涉及到Struts框
39、架Hibernate框架及JFreeChart組件的應(yīng)用,因此在開發(fā)項目之前,需要添加他們的類庫支持。
(1) 配置web.xml,主要代碼如下:
40、rvlet-mapping>
(2) 配置struts-config.xml,主要代碼如下:
41、ean
name="sellDetailForm"type="com.lyq.struts.form.SellDetailForm"/>
42、/db_database25
43、e
44、n>
5.1 公共類設(shè)計
在Java程序開發(fā)中,如果一個功能反復(fù)被調(diào)用,可以將這個功能抽取出來封裝為一個類做為公共類,在需要此功能的地方通過繼承此類進(jìn)行實現(xiàn)。公共類實質(zhì)是代碼的重用的一種方式,在面向?qū)ο蟮拈_發(fā)模式中,經(jīng)常被使用,它可以簡化程序中的代碼提高程序的可讀性,醫(yī)藥管理系統(tǒng)中的公共類設(shè)計如下。
5.1.1 Hibernate過濾器
在Web項目中,以普通方式使用Hibernate將無法解決Hibernate延遲加載,如下圖所示。當(dāng)有一個業(yè)務(wù)請求查詢數(shù)據(jù)時,首先要開啟Session對象,然后Hibernate對數(shù)據(jù)進(jìn)行查詢,再關(guān)閉Session對象,然后通過Jsp頁面來 45、顯示數(shù)據(jù)。在這一過程中,如果查詢數(shù)據(jù)時使用了延遲加載,當(dāng)Jsp頁面顯示數(shù)據(jù)信息時,Hibernate將拋出異常信息,因此此時Session已經(jīng)關(guān)閉,Hibernate不再對數(shù)據(jù)進(jìn)行操作。通過過濾器管理Hibernate的Session對象則可以避免此問題。主要代碼如下:
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { try {
chain.doFilter(request, res 46、ponse);
} finally{
Session session = (Session)threadLocal.get();
if(session != null){
if(session.isOpen()){
session.close();
}
threadLocal.remove();
}
}
}
public static Session getSession() {
Session session = (Session)threadLocal.get();
if (session == null) {
s 47、ession = factory.openSession();
threadLocal.set(session);
}
return session;
}
}
5.1.2 SuperDao類
SuperDao類為項目中所有數(shù)據(jù)庫操作的父類,此類中封裝了數(shù)據(jù)庫操作的常用方法。在此類中,由于Hibernate對數(shù)據(jù)的操作都需要用到Session接口,此類中定義了一個protected類型的Session對象,為其子類提供方便。主要代碼如下:
public class SupperDao {
protected Session session = null;
48、 public void save(Object obj){
try {
session = HibernateFilter.getSession();
session.beginTransaction();
session.save(obj);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} 49、
}
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( 50、);
}
}
}
5.1.3 BaseAction類
BaseAction類是業(yè)務(wù)層有一個超類對象,它繼承了Struts的DispatchAction類,同時還為子類對象提供公用方法。
Struts的DispatchAction類繼承Action類,此類在處理請求時首先要執(zhí)行execute()方法,然后通過控制器再轉(zhuǎn)發(fā)到相應(yīng)的方法進(jìn)行業(yè)務(wù)處理,如果對系統(tǒng) 中涉及到的Action都編寫一個驗證方法,程序代碼的重負(fù)性太高,則不能體現(xiàn)出面向?qū)ο蟮脑O(shè)計模式,所以將其單獨封裝BaseAction類中,此類通過重寫Action類的execute()方法對用戶身份進(jìn)行驗證。主要代碼如 51、下:
public class BaseAction extends DispatchAction {
protected int recPerPage = 3;
protected Locale locale = null;
protected MessageResources message = null;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
52、 throws Exception {
this.locale = this.getLocale(request);
this.message = this.getResources(request);
if (request.getSession().getAttribute("user") == null) {
return mapping.findForward("login");
}
return super.execute(mapping, form, request, response);
}
}
5.1.4 Delete 53、Action類
公共類DeleteAction主要用于項目中LookupDispatchAction的請求進(jìn)行處理,它繼承LookupDispatchAction類,此類中同樣重寫了execute()方法對用戶身份做出驗證,當(dāng)用戶身份不失敗時,將進(jìn)行錯誤處理。同時,此類還重寫了LookupDispatchAction類中的getKeyMethodMap()方法,添加了兩個按鈕對象的Key。主要代碼如下:
public class DeleteAction extends LookupDispatchAction{
public ActionForward execute(ActionM 54、apping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
throws Exception {
if(request.getSession().getAttribute("user") == null){
return mapping.findForward("login");
}
return super.execute(mapping, form, request, response);
}
protected Map ge 55、tKeyMethodMap() {
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)常用到的字符串處理方法,可以封裝一個字符串工具類對其進(jìn)行操作。比如Jsp頁面的多選框,它提交的參數(shù)值為數(shù)組類型,在數(shù)據(jù)庫的操作過程中需要將其轉(zhuǎn)換為字符串類型;在超鏈接 56、中,如果加入中文參數(shù)將不能被瀏覽器解析,需要對其進(jìn)行一定的處理才可以使用。類似于這種操作,在程序中使用的非常頻繁,將其封裝為一個公共類中,是一種良好的決解方案。
在醫(yī)藥管理系統(tǒng)中,封裝了一個名稱為StringUtil的字符串工具類,用于對字符的特殊處理,此類中均為靜態(tài)方法。主要代碼如下:
public class StringUtil {
public static String encodeURL(String s){
try {
s = URLEncoder.encode(s,"GBK");
} catch (Exception e) {
e.prin 57、tStackTrace();
}
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)登陸模塊設(shè)計
系統(tǒng)登錄是一個對用戶身份驗證的過程,只有登錄成功的用戶才可以對系統(tǒng)進(jìn)行操作,否則不能對系統(tǒng)進(jìn)行管理維護(hù),它是系統(tǒng)的一道 58、安全門。
(1) 用戶登錄頁面如圖5-1所示。
圖5-1 登錄頁面圖
(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 q 59、uery =session.createQuery(hql).setParameter(0,userName).
setParameter(1, password);
user = (User)query.uniqueResult();
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}
return user;
}
(3) 處理用戶登錄請求的主 60、要代碼如下:
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
throws Exception {
UserForm uf = (UserForm) form;
String userName = uf.getUsername();
String password = uf.g 61、etPassword();
User user = null;
if (userName != null && password != null) {
UserDao userDao = new UserDao();
user = userDao.login(userName, password);
}
if (user != null) {
request.getSession().setAttribute("user", user);
return mapping.findForward("manage");
} else {
re 62、quest.setAttribute("error", "error");
return mapping.findForward("loginFail");
}
}
}
5.3 醫(yī)藥管理模塊設(shè)計
藥品信息管理主要對藥品基本信息的維護(hù),此模塊包含藥品信息的添加、刪除、查詢等操作。主要代碼如下:
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws E 63、xception {
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 CategoryDao();
Category category 64、= 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 Sim 65、pleDateFormat
("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.printStack 66、Trace();
}
}
dao.saveOrUpdate(med);
return mapping.findForward("addSuccess");
}
5.3.1 藥品對象持久層設(shè)計
MedicineDao類是藥品對象的數(shù)據(jù)庫操作類,它繼承SuperDao類。此類主要包含三個方法,分別為loadMedicine()、loadMedicineCategory()、findMedicineByMedNo()、其中l(wèi)oadMedicine()方法與findMedicineByMedNo()、用于根據(jù)藥品id及藥品編碼查詢藥品信息,loadMedicineAndCategory()用于查詢藥品信息與藥品類別信息,此方法使用內(nèi)聯(lián)接對藥品信息表與藥品類別表進(jìn)行聯(lián)合查詢,它可以減少SQL語句的數(shù)量。
5.3.2 藥品信息的添加與修改
藥品編碼是藥品對象的一個標(biāo)識,當(dāng)添加一個藥品信息時需要判斷藥品是否已經(jīng)在數(shù)據(jù)庫中存在,如果存在則只需要更新藥品的數(shù)量即可。修改藥品與添加藥品的處理過程相同。添加藥品頁面如圖5-2、圖5-3、圖5-4所示。
圖5-
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 雅馬哈ts-x_ts-s使用說明課件
- 多元函數(shù)的微積分
- 商業(yè)保險與社會保險的區(qū)別
- HL-X6280終端培訓(xùn)手冊
- 汽車電路原理
- 通信網(wǎng)絡(luò)演進(jìn)及LTE關(guān)鍵技術(shù)教材
- 借助展業(yè)夾提升平安福簽單率廣東葉華東終稿[1]課件
- (精品)珠江國際城代管人員2
- 零售-7-11經(jīng)營模式分析
- 電子病歷簡介及門診醫(yī)生工作站[1]課件
- 食管癌術(shù)后早期營養(yǎng)支持相關(guān)研究
- LHQ電纜層保護(hù)器相關(guān)型號列表參數(shù)
- 大腦前動脈動脈瘤用
- 甲真菌病各藥物特點教學(xué)課件
- 滑輪組機(jī)械效率