基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn)計算機專業(yè)畢業(yè)論文
《基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn)計算機專業(yè)畢業(yè)論文》由會員分享,可在線閱讀,更多相關(guān)《基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn)計算機專業(yè)畢業(yè)論文(47頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 XXXX大學畢業(yè)論文 基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn) 專業(yè)名稱: 計算機科學與技術(shù) 班 級: 200804 學生姓名: XXX 指導教師: XXX 完成時間: 2012年4月 42 摘要 隨著科學技術(shù)的發(fā)展和人們生活水平的提高,人們對于醫(yī)藥產(chǎn)品的需求迅速增加,管理藥品信息成為制藥行業(yè)的各項工作中不可缺少的一部分。本醫(yī)藥管理系統(tǒng)是為了管理藥品信息而設計的。以前的數(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ī)藥管理、類別管理、購買藥品、銷售管理、進貨/需求管理和系統(tǒng)管理等功能。 本醫(yī)藥管理系統(tǒng)首先輸入和存儲一些基本的數(shù)據(jù)資料,例如本系統(tǒng)中的藥品信息和銷售信息、進貨/需求信息,對于這些信息和數(shù)據(jù)能方便的進行添加、修改、查詢和刪除。其次,為了方便管理者管理數(shù)據(jù),對各種數(shù)據(jù)進行統(tǒng)計,如統(tǒng)計庫存信息,銷售信息和進貨/需求信息等。
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)濟可行性 5 3.2 系統(tǒng)功能需求 5 3.3 數(shù)據(jù)流圖 6 4 系統(tǒng)總體設計 8 4.1 系統(tǒng)結(jié)構(gòu)設計 8 4.1.1 邏輯分層結(jié)構(gòu)設計 9
9、4.1.2 定義ActionForm 9 4.1.3 持久層結(jié)構(gòu)設計 10 4.1.4 業(yè)務層結(jié)構(gòu)設計 11 4.1.5 頁面結(jié)構(gòu)設計 11 4.2 數(shù)據(jù)庫設計 12 4.2.1 實體對象設計 12 4.2.2 數(shù)據(jù)庫表結(jié)構(gòu) 12 4.2.3 數(shù)據(jù)庫E-R圖 14 5 系統(tǒng)詳細設計 17 5.1 公共類設計 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、設計 23 5.3 醫(yī)藥管理模塊設計 24 5.3.1 藥品對象持久層設計 26 5.3.2 藥品信息的添加與修改 26 5.3.3 分頁查看所有藥品 27 5.3.4 查看藥品詳細信息 27 5.3.5 查詢藥品 28 5.3.6 高級查詢 28 5.3.7 查看庫存 29 5.4 類別管理模塊設計 30 5.4.1 藥品類別持久層設計 30 5.4.2 藥品類別的添加 30 5.4.3 分頁查看類別信息 31 5.4.4 類別的修改與刪除 31 5.4.5 藥品類別統(tǒng)計 31 5.5 購買藥品模塊設計 32 5.5.1 購買藥
11、品 33 5.5.2 查看選購 33 5.6 銷售管理模塊設計 34 5.6.1 查看明細和今日明細 35 5.6.2 日期查詢 35 5.6.3 銷售排行 35 5.7 進貨/需求管理模塊設計 36 5.8 系統(tǒng)管理模塊設計 37 結(jié) 論 40 致 謝 41 參考文獻 42 基于JSP的醫(yī)藥管理系統(tǒng)設計與實現(xiàn) 1 緒論 1.1 系統(tǒng)開發(fā)背景 當今時代是飛速發(fā)展的信息時代。在各行各業(yè)中都離不開信息的處理,這正是計算機被廣泛用于信息管理系統(tǒng)的原因。計算機的最大好處在于利用它能夠進行信息管理。使用計算機進行信息控制,不僅提高了工
12、作效率,而且大大的提高了其安全性。尤其對于復雜的信息管理,計算機能夠充分的發(fā)揮它的優(yōu)越性。計算機進行信息管理與信息管理系統(tǒng)的開發(fā)密切相關(guān),系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。 隨著我國市場經(jīng)濟的蓬勃發(fā)展和人們對醫(yī)藥產(chǎn)品需求的迅速增加,醫(yī)藥行業(yè)正處于一個高速發(fā)展的時期。行業(yè)的快速發(fā)展必然導致競爭的加劇,想要在激烈的市場競爭中謀求發(fā)展,客觀上要求企業(yè)必須加強內(nèi)部管理,提高運營效率。另外,由于醫(yī)藥產(chǎn)品種類繁多,銷售模式特殊,業(yè)務量大,單憑手工管理已很難適應工作的需要。醫(yī)藥作為一個關(guān)系人們健康的特殊行業(yè),國家對醫(yī)藥行業(yè)又有一些不同于其他行業(yè)的管理政策,這些都加大了管理的難度。如何盡快建立和完善現(xiàn)代企業(yè)的信息
13、管理機制問題,已成為醫(yī)藥企業(yè)發(fā)展的關(guān)鍵所在。 1.2 系統(tǒng)開發(fā)意義 根據(jù)實際情況和系統(tǒng)的開發(fā)背景來看,開發(fā)本醫(yī)藥管理系統(tǒng)的意義在于:能夠集中處理藥品的進銷存業(yè)務,提供快速的藥品查詢功能、快速的統(tǒng)計藥品信息、銷量信息,對藥品進行高效的管理以滿足管理者和消費者的需求。 1.3 文章內(nèi)容安排 本文主要闡述了本醫(yī)藥管理系統(tǒng)的整體開發(fā)過程。介紹了系統(tǒng)的開發(fā)環(huán)境以及開發(fā)工具,對于設計思想和設計流程也做出了全面的敘述,在數(shù)據(jù)庫各個數(shù)據(jù)表之間的具體關(guān)聯(lián)方面也做出了詳細說明,并且具體剖析了系統(tǒng)各個功能的實現(xiàn)過程以及詳細設計過程。具體內(nèi)容安排如下: 第一章:介紹系統(tǒng)的開發(fā)背景和開發(fā)意
14、義,以及文章的內(nèi)容安排; 第二章:介紹系統(tǒng)開發(fā)的硬件環(huán)境和軟件環(huán)境,以及開發(fā)工具和核心技術(shù); 第三章:對系統(tǒng)進行需求分析,主要對系統(tǒng)進行可行性分析,明確系統(tǒng)要實現(xiàn)的目標和所完成的功能; 第四章:完成系統(tǒng)的詳細設計,包括系統(tǒng)功能結(jié)構(gòu)圖,業(yè)務流程圖以及數(shù)據(jù)庫的E-R圖; 第五章:完成系統(tǒng)的詳細實現(xiàn),包括公共類的設計和各個模塊的設計。 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服務器: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ù)庫的最常用標準化語言。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訪問存在于服務端的資源的應用邏輯。JSP將網(wǎng)頁邏輯與網(wǎng)頁設計和顯示分離,支持可重用的基于組件的設計,使基于Web的應用程序的開發(fā)變得迅速和容易。 Web服務器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序段,然后將執(zhí)行結(jié)果連同JSP文件中的HTML代碼一起返回給客戶。插入的Java程序段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁等
17、,以實現(xiàn)建立動態(tài)網(wǎng)頁所需要的功能。 JSP與JavaServlet一樣,是在服務器端執(zhí)行的,通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。 JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務器在頁面被客戶端請求以后對這些Java代碼進行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。Java Servlet是JSP的技術(shù)基礎,而且大型的Web應用程序的開發(fā)需要Java Servlet和JSP配合才能完成。JSP具備了Java技術(shù)的簡單易用,完全的面向?qū)ο?,具有平臺無關(guān)性且安全可靠,主要面向因特網(wǎng)的所有特點。 自JSP推出后,眾多大公司都支持JSP技
18、術(shù)的服務器,如IBM、Oracle、Bea公司等,所以JSP迅速成為商業(yè)應用的服務器端語言。 3 系統(tǒng)需求分析 3.1 可行性分析 可行性分析是在進行初步調(diào)查后所進行的對系統(tǒng)開發(fā)的必要性和可能性的研究,所以也稱為可行性研究。所謂可行性應該包括必要性和可能性兩個方面。沒有必要性的項目是不應該進行的。一般地,軟件領(lǐng)域的可行性分析主要考慮兩個因素:技術(shù)可行性和經(jīng)濟可行性。 3.1.1 技術(shù)可行性 根據(jù)系統(tǒng)目標來衡量所需的技術(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服務器,IE 8瀏覽器以及JSP技術(shù),能夠?qū)崿F(xiàn)本醫(yī)藥管理系統(tǒng),以滿足用戶需求。 3.1.2 經(jīng)濟可行性 醫(yī)藥進銷存管理已成為醫(yī)藥管理工作中不可缺少的部分,開發(fā)一個醫(yī)藥管理系統(tǒng)具有很強的經(jīng)濟價值。本醫(yī)藥管理系統(tǒng)提供快速的藥品查詢功能、快速的統(tǒng)計藥品信息、銷售信息等,對藥品進行高效的管理以滿足管理者的需求。所以,本醫(yī)藥管理系統(tǒng)在經(jīng)濟型上有很強的實際價值。 3.2 系統(tǒng)功能需求 根據(jù)實際情況分析,本醫(yī)藥管理系統(tǒng)的應具有主要功能包括:
20、 (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)邏輯模型的主要形式。這個模型不涉及硬件、軟件、數(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 銷售明細信息表 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 銷售明細信息表 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)總體設計 4.1 系統(tǒng)結(jié)構(gòu)設
24、計 在開發(fā)項目之前,首先要對軟件的結(jié)構(gòu)進行設計,也稱之為軟件架構(gòu),此過程是對軟件的整體結(jié)構(gòu)的設計。如軟件的邏輯分層結(jié)構(gòu)、結(jié)構(gòu)的實現(xiàn)、數(shù)據(jù)庫等等,特別是在Java的大型項目中,還需要設計出程序中包結(jié)構(gòu)及接口等,非常復雜,需要程序員進行全面的考慮。對于醫(yī)藥管理系統(tǒng)的整體設計:邏輯分層結(jié)構(gòu)設計、定義ActionForm、持久層結(jié)構(gòu)設計、業(yè)務層結(jié)構(gòu)設計、頁面結(jié)構(gòu)設計以及數(shù)據(jù)庫設計。系統(tǒng)功能結(jié)構(gòu)圖如圖4-1所示。 醫(yī)藥管理系統(tǒng) 醫(yī)藥管理 類別管理 購買藥品 銷售管理 進貨/需求管理 系統(tǒng)管理 添加藥品 查看藥品 高級查詢 查看庫存 添加類別 查看類別 類別統(tǒng)計 選購藥
25、品 查看選購 查看明細 今日明細 日期查詢 銷售排行 添加進貨 查看進貨 添加管理員 查看管理員 修改密碼 系統(tǒng)初始化 退出系統(tǒng) 圖4-1 系統(tǒng)功能結(jié)構(gòu)圖 4.1.1 邏輯分層結(jié)構(gòu)設計 遵循MVC結(jié)構(gòu)進行分析,醫(yī)藥管理系統(tǒng)可分為四層結(jié)構(gòu),分別為表示層、業(yè)務邏輯層、持久層與數(shù)據(jù)庫層,四層結(jié)構(gòu)圖如圖4-2所示。 醫(yī)藥管理系統(tǒng) 表示層 (Struts框架) 業(yè)務邏輯層 (Struts框架) 持久層 (Hibernate框架) 數(shù)據(jù)庫層 (MySQL數(shù)據(jù)庫) 圖4-2 四層結(jié)構(gòu)圖 對于四層結(jié)構(gòu)的具體實現(xiàn)如圖4-3所示。 視圖JSP/Act
26、ionForm Struts標簽 控制器 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對象進行傳遞。AcitonFomr對表單數(shù)據(jù)進行了封裝,在Jsp頁面與Action對象中提供了交互訪問的方法。在使用過程中,可
27、通過繼承org.apache.struts.ActionForm對象來創(chuàng)建需要的ActionForm對象,項目中所涉及到的ActionForm對象如圖4-4所示。 ActionForm com.lyq.struts.form UserForm SellDetailForm CategoryForm MedicienForm 用戶 銷售明細 類別 藥品 圖4-4 ActionForm對象圖 4.1.3 持久層結(jié)構(gòu)設計 持久層結(jié)構(gòu)通過Hibernate框架進行設計,由于Hibernate對不同對象的增、刪、
28、改、查操作都具有一定的共性,如添加數(shù)據(jù)使用sava()方法、刪除數(shù)據(jù)使用delete()方法等,項目中將這些具有共性的操作抽取出來,封裝成一個類,其他數(shù)據(jù)庫操作對象可繼承此類來擁有這些方法,從而減少程序中的多余代碼,持久層結(jié)構(gòu)設計圖如圖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)設計圖 4.1.4 業(yè)務層結(jié)構(gòu)設計 業(yè)務層結(jié)構(gòu)主要通過Stuts框架進行設計,由Struts的中央控制器對各種請求操作進行控制,并通過相應的Action對其進行業(yè)務處
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)設計
醫(yī)藥管理系統(tǒng)的頁面結(jié)構(gòu)采用框架進行設計,通過HTML語言中的呃
32、bernate框架的項目中,實體對象的確立是項目中的關(guān)鍵,實體對象與數(shù)據(jù)庫中的數(shù)據(jù)表相對應,并通過O/R映射建立實體與數(shù)據(jù)庫的聯(lián)系,Hibernate完全通過操作實體來操作數(shù)據(jù)庫,所以首先要確定項目中的實體對象。在醫(yī)藥管理系統(tǒng)中,實體對象及其關(guān)系如圖4-8所示。 com.lyq.persistence 銷售明細 藥品信息 藥品類別 用戶 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ù)庫表設計主要包括:用戶信息表、藥品信息表、藥品類別信息表、銷售明細信息表。 (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) 銷售明細信息表(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ù)實際需求和設計規(guī)劃得出的實體有:用戶實體、藥品實體、類別實體、銷售明細實體,各實體的屬性圖如圖4-9、圖4-10、圖4-11、圖4-12所示。 用戶 用戶名 密碼 創(chuàng)建時間 圖4-9 用戶實體屬性圖 藥品 藥品編碼 藥品名稱 藥品數(shù)量 藥品單價 出廠地址 藥品描述 藥品類別 藥品圖片 需求數(shù)量 圖4-10 藥品實體屬性圖 類別 類別名 創(chuàng)建時間 類別描述 圖4
38、-11 類別實體屬性圖 銷售明細 藥品編碼 藥品名稱 藥品單價 銷售數(shù)量 銷售時間 操作員 銷售金額 圖4-12 銷售明細實體屬性圖 (2) 各實體之間的關(guān)系E-R圖如圖4-13所示。 N 藥品 類別 用戶 銷售明細 管理 M N M 1 N N 添加 銷售 管理 管理 M M N 圖4-13 各實體關(guān)系E-R圖 5 系統(tǒng)詳細設計 在編寫代碼之前,需要對項目做出一些準備工作,如項目環(huán)境的搭建、項目所涉及到的第三方類庫的支持、web.xml的配置等。在醫(yī)藥進銷存管理系統(tǒng)中,主要涉及到Struts框
39、架Hibernate框架及JFreeChart組件的應用,因此在開發(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 公共類設計
在Java程序開發(fā)中,如果一個功能反復被調(diào)用,可以將這個功能抽取出來封裝為一個類做為公共類,在需要此功能的地方通過繼承此類進行實現(xiàn)。公共類實質(zhì)是代碼的重用的一種方式,在面向?qū)ο蟮拈_發(fā)模式中,經(jīng)常被使用,它可以簡化程序中的代碼提高程序的可讀性,醫(yī)藥管理系統(tǒng)中的公共類設計如下。
5.1.1 Hibernate過濾器
在Web項目中,以普通方式使用Hibernate將無法解決Hibernate延遲加載,如下圖所示。當有一個業(yè)務請求查詢數(shù)據(jù)時,首先要開啟Session對象,然后Hibernate對數(shù)據(jù)進行查詢,再關(guān)閉Session對象,然后通過Jsp頁面來 45、顯示數(shù)據(jù)。在這一過程中,如果查詢數(shù)據(jù)時使用了延遲加載,當Jsp頁面顯示數(shù)據(jù)信息時,Hibernate將拋出異常信息,因此此時Session已經(jīng)關(guān)閉,Hibernate不再對數(shù)據(jù)進行操作。通過過濾器管理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è)務層有一個超類對象,它繼承了Struts的DispatchAction類,同時還為子類對象提供公用方法。
Struts的DispatchAction類繼承Action類,此類在處理請求時首先要執(zhí)行execute()方法,然后通過控制器再轉(zhuǎn)發(fā)到相應的方法進行業(yè)務處理,如果對系統(tǒng) 中涉及到的Action都編寫一個驗證方法,程序代碼的重負性太高,則不能體現(xiàn)出面向?qū)ο蟮脑O計模式,所以將其單獨封裝BaseAction類中,此類通過重寫Action類的execute()方法對用戶身份進行驗證。主要代碼如 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的請求進行處理,它繼承LookupDispatchAction類,此類中同樣重寫了execute()方法對用戶身份做出驗證,當用戶身份不失敗時,將進行錯誤處理。同時,此類還重寫了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)常用到的字符串處理方法,可以封裝一個字符串工具類對其進行操作。比如Jsp頁面的多選框,它提交的參數(shù)值為數(shù)組類型,在數(shù)據(jù)庫的操作過程中需要將其轉(zhuǎn)換為字符串類型;在超鏈接 56、中,如果加入中文參數(shù)將不能被瀏覽器解析,需要對其進行一定的處理才可以使用。類似于這種操作,在程序中使用的非常頻繁,將其封裝為一個公共類中,是一種良好的決解方案。
在醫(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)登陸模塊設計
系統(tǒng)登錄是一個對用戶身份驗證的過程,只有登錄成功的用戶才可以對系統(tǒng)進行操作,否則不能對系統(tǒng)進行管理維護,它是系統(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ī)藥管理模塊設計
藥品信息管理主要對藥品基本信息的維護,此模塊包含藥品信息的添加、刪除、查詢等操作。主要代碼如下:
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 藥品對象持久層設計
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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生物對照實驗專題復習課件
- 初中物理資源九年級第十五單元課件串并聯(lián)識別
- 咯血與嘔血課件
- What's_your_number_課件
- 外研版七下Module3Unit1(教育精品)
- 浙美版三年級上冊美術(shù)第15課-剪雪花教學ppt課件
- 蘇教版六年級下冊數(shù)學正比例和反比例的意義課件
- 蘇教版五下《單式折線統(tǒng)計圖》教研課件
- 固態(tài)相變概論
- 三角形全等的判定復習-課件2
- 太陽能發(fā)展趨勢課件
- 道路工程監(jiān)理最新規(guī)劃范本課件
- SPC及CPK教程(理論篇)課件
- Travel-Plan旅行計劃-PPT
- 新冠肺炎疫情期間醫(yī)務人員防護技術(shù)指南