醫(yī)藥銷售管理系統(tǒng)軟件說明書_第1頁
醫(yī)藥銷售管理系統(tǒng)軟件說明書_第2頁
醫(yī)藥銷售管理系統(tǒng)軟件說明書_第3頁
醫(yī)藥銷售管理系統(tǒng)軟件說明書_第4頁
醫(yī)藥銷售管理系統(tǒng)軟件說明書_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、【最新卓越管理方案您可自由編輯】(醫(yī)療營銷)醫(yī)藥銷售管理系統(tǒng)軟件說明書2020年5月多年的企業(yè)咨洵顧問屋儂,經(jīng)過實戰(zhàn)驗證可以落地執(zhí)i亍的卓越管理方窠,值得您下我擁有醫(yī)藥銷售管理系統(tǒng)1 系統(tǒng)分析31.1 開發(fā)背景31.2 需求分析32系統(tǒng)設(shè)計32.1 系統(tǒng)目標(biāo)32.2 系統(tǒng)功能結(jié)構(gòu)42.3 系統(tǒng)流程圖43軟件架構(gòu)63.1 邏輯分層結(jié)構(gòu)設(shè)計63.2 系統(tǒng)文件夾組織結(jié)構(gòu)73.3 實體對象設(shè)計73.4 定義ActionForm83.5 持久層結(jié)構(gòu)設(shè)計83.6 業(yè)務(wù)層結(jié)構(gòu)設(shè)計103.7 頁面結(jié)構(gòu)設(shè)計114配置文件114.1 酉己置web.xml114.2 酉己置struts-config.xml124.

2、3 酉己置hibernate.cfg.xml125實體及映射125.1藥品實體映射125.2 藥品類別實體映射135.3 銷售明細(xì)實體映射135.4 用戶實體映射146公共類設(shè)計146.1 Hibernate過濾器146.2 SupperDao類166.3 BaseAction類176.4 DeleteAction類186.5 字符串工具類187國際化187.1 國際化資源文件187.2 國際化實現(xiàn)198系統(tǒng)登陸模塊198.1 查詢用戶198.2 登陸請求198.3 登錄頁面199藥品類別信息管理209.1 藥品類別持久層設(shè)計209.2 藥品類別的添加219.2.1類別添加、修改請求處理 21

3、9.2.2類別添加頁面219.3 分頁查看類別信息219.3.1 查詢與刪除請求處理229.3.2 類別信息列表頁面229.4 類別的修改與刪除229.5 藥品類別統(tǒng)計229.5.1 JFreeChat工具類239.5.2 Action請求239.5.3 顯示報表2310藥品信息管理2310.1 藥品對象持久層設(shè)計2410.2 藥品信息的添加與修改2410.2.1 藥品添加的請求處理2410.2.2 藥品添加頁面2510.3 分頁查看所有藥品2510.4 查看藥品詳細(xì)信息2510.5 模糊查詢藥品2610.5.1 藥品模糊查詢請求處理2610.5.2 藥品模糊查詢頁面2610.6 高級查詢27

4、10.8 藥品批量刪除2710.8.1 批量刪除請求處理2810.8.2 映射JSP頁面中的按鈕2811購買藥品2811.1 選購藥品2811.2 結(jié)賬2912銷售管理2912.1 明細(xì)信息查詢2912.2 銷售排行統(tǒng)計3013進(jìn)貨/需求管理3014系統(tǒng)管理3114.1 添加管理員3114.2 修改密碼3214.3 系統(tǒng)初始化3215運(yùn)行項目321系統(tǒng)分析隨著計計算機(jī)技術(shù)的不斷發(fā)展,應(yīng)用軟件迅速普及,大到廠礦校企,小到圖書、餐飲、醫(yī)藥管理等,隨處都可看到它的身影。在以往依靠人工為主的醫(yī)藥銷售管理方面,計算機(jī)和計算機(jī)系統(tǒng)逐步唱起了主角,憑借省時、省力、低誤差等優(yōu)點(diǎn),從根本上改變了醫(yī)藥管理的傳統(tǒng)模

5、式,節(jié)省了物理資源,提高了工作效率。1.1 開發(fā)背景XX醫(yī)藥抄手坐落于XX小區(qū)內(nèi),多年來本著經(jīng)濟(jì)、實惠、高質(zhì)量服務(wù)的宗旨,贏得了小區(qū)百姓的信賴,藥品供應(yīng)量非常大。面對龐大的信息量,經(jīng)常出現(xiàn)統(tǒng)計失誤、藥量供應(yīng)不足的情況,醫(yī)藥超市經(jīng)理決定使用一套合理、有效、使用的管理系統(tǒng),對醫(yī)藥超市進(jìn)行統(tǒng)一的管理。筆者受醫(yī)藥超市經(jīng)理委托,開發(fā)一個醫(yī)藥銷售管理系統(tǒng),其宗旨是實現(xiàn)醫(yī)藥超市管理的系統(tǒng)化、規(guī)范化、實用化,對藥品進(jìn)行統(tǒng)一管理。1.2 需求分析在日常醫(yī)藥管理中,面對眾多的藥品和眾多不同需求的顧客,每天都會產(chǎn)生大量的數(shù)據(jù)信息。以傳統(tǒng)的手工方式來處理這些信息,操作比較繁瑣,且效率低下。此時,一套合理、有效、實用的

6、醫(yī)藥銷售管理系統(tǒng)就顯得十分必要。利用其提供的藥品查詢、統(tǒng)計功能,可以進(jìn)行高效的管理,更好地為顧客服務(wù)。筆者通過對醫(yī)藥超市的實地考察,從經(jīng)營者和消費(fèi)者的角度出發(fā),以高效管理、快速滿足消費(fèi)者為原則,要求本系統(tǒng)具有以下特點(diǎn)。具有良好的系統(tǒng)性能、友好的用戶界面。較高的處理效率,便于用戶使用。采用成熟的技術(shù)開發(fā),全系統(tǒng)具有較高的技術(shù)水平和較長的生命周期。對銷售信息進(jìn)行統(tǒng)計排行盡可能地簡化藥品管理員的重復(fù)工作,提高工作效率。2系統(tǒng)設(shè)計2.1 系統(tǒng)目標(biāo)根據(jù)醫(yī)藥超市的管理要求,指定醫(yī)藥銷售管理系統(tǒng)目標(biāo)如下。 靈活的人機(jī)交互界面,操作簡單方便、界面簡潔美觀。 系統(tǒng)提供中、英文語言,實現(xiàn)國際化 藥品分類管理,并提

7、供類別統(tǒng)計功能。 實現(xiàn)各種查詢,如多條件查詢、模糊查詢等。 提供創(chuàng)建管理員賬戶及修改口令功能。 可對系統(tǒng)銷售信息進(jìn)行統(tǒng)計分析。 系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。2.2 系統(tǒng)功能結(jié)構(gòu)醫(yī)藥銷售管理系統(tǒng)提供了四大功能,分別為“基本信息管理”、“進(jìn)貨/需求管理”、“藥品管理”、“系統(tǒng)管理”,具體結(jié)構(gòu)如圖1.1所示圖1.肖系統(tǒng)庫 存 信 息圖 看當(dāng) 藥 醫(yī)藥品信息簿理程如藥品需求管理月1.藥品進(jìn)貨管理銷售排行鄉(xiāng)計本銷售明細(xì)管理銷售時間統(tǒng)計管理員帳號管理系統(tǒng)初始化3軟件架構(gòu)在開發(fā)項目前,首先要對軟件的結(jié)構(gòu)進(jìn)行設(shè)計,也稱之為軟件架構(gòu)。此過程是對軟件整體結(jié)構(gòu)的設(shè)計,如軟件的邏輯分層結(jié)構(gòu)、結(jié)構(gòu)的實現(xiàn)、數(shù)據(jù)庫等,特別是在

8、Java的大型項目中,還需要設(shè)計出程序中的包結(jié)構(gòu)及接口等,非常復(fù)雜,需要程序員進(jìn)行全面的考慮。對于醫(yī)藥銷售管理系統(tǒng)的整體涉及如下:3.1 邏輯分層結(jié)構(gòu)設(shè)計醫(yī)藥銷售管理系統(tǒng)由4層結(jié)構(gòu)組成,并遵循MVC結(jié)構(gòu)進(jìn)行設(shè)計。4層結(jié)構(gòu)分別為表示層、業(yè)務(wù)邏輯層、持久層與數(shù)據(jù)庫層,如圖1.3所示。圖1.3邏輯分層其中,表示層與業(yè)務(wù)邏輯層均由Struts框架組成,表示層用于提供程序與用戶交互的界面,項目中主要通過JSP、ActionForm及Struts標(biāo)簽庫進(jìn)行展現(xiàn);業(yè)務(wù)邏輯層用于處理程序中的各種業(yè)務(wù)邏輯,項目中通過Struts框架的中央控制器及Action對象對業(yè)務(wù)請求進(jìn)行處理;持久層由Hibernate框架

9、組成,負(fù)責(zé)應(yīng)用程序與關(guān)系型數(shù)據(jù)庫之間的操作;數(shù)據(jù)庫層為應(yīng)用程序所使用的數(shù)據(jù)庫,本實例中為MySQL數(shù)據(jù)庫。對于4層結(jié)構(gòu)的具體實現(xiàn)如圖1.4所示。圖1.4邏輯分層實現(xiàn)3.2 系統(tǒng)文件夾組織結(jié)構(gòu)規(guī)范系統(tǒng)的整體架構(gòu)是一個項目開發(fā)的標(biāo)準(zhǔn),特別是在團(tuán)隊開發(fā)項目中,在編寫代碼之前,必須定制好項目的系統(tǒng)文件夾組織結(jié)構(gòu),以使程序條理清晰,利于后期的項目整合。在Java項目中可以將不同作用、功能相類似的文件放置于這樣既可以保證團(tuán)隊開發(fā)的一致性,又可以將系統(tǒng)的整體結(jié)構(gòu)規(guī)范化。創(chuàng)建完系統(tǒng)中可能用到的文件夾或Java包之后,在開發(fā)時只需將所創(chuàng)建的類文件或資源文件保存到相應(yīng)的文件夾即可。醫(yī)藥銷售管理系統(tǒng)的文件夾組織結(jié)構(gòu)

10、如圖1.5所示。圖1.5醫(yī)藥銷售管理系統(tǒng)的文件夾組織結(jié)構(gòu)3.3 實體對象設(shè)計在應(yīng)用Hibernate框架的項目中,實體對象的確立是其中的關(guān)鍵。實體對象與數(shù)據(jù)庫中的數(shù)據(jù)表相對應(yīng),并通過O/R映射建立實體與數(shù)據(jù)庫的聯(lián)系,Hibernate完全通過操作實體來操作數(shù)據(jù)庫,所以首先要確定項目中的實體對象。在醫(yī)藥銷售管理系統(tǒng)中,實體對象及關(guān)系如圖1.6所示。圖1.6醫(yī)藥銷售管理系統(tǒng)中的實體對象及其關(guān)系從圖1.6中可以看到,藥品實體對象為Medicine類,藥品類別實體對象為Category類,銷售明細(xì)實體為SellDetail類,操作用戶實體為User類,這4個實體對象為醫(yī)藥銷售管理系統(tǒng)的核心實體對象,它

11、們所對應(yīng)的映射文件均為“類名+hbm.xml”文件。其中,藥品信息與藥品類別為多對一關(guān)聯(lián)關(guān)系,一個類別中包含多個藥品對象;藥品信息與銷售明細(xì)為一對多關(guān)聯(lián)關(guān)系,多個銷售明細(xì)對應(yīng)一個藥品對象;銷售明細(xì)與用戶之間為多對多的關(guān)聯(lián)關(guān)系,多個銷售明細(xì)信息對應(yīng)多個操作用戶。3.4 定義ActionFormActionForm是簡單的JavaBean,主要用來保存用戶所輸入的表單數(shù)據(jù),Action要獲取這些數(shù)據(jù)需要通過ActionForm對象進(jìn)行傳遞。ActionForm對表單的數(shù)據(jù)進(jìn)行了封裝,在 JSP頁面與Action對象中提供了交互訪問的方法。在使用過程中,可通過繼承org.apache.struts.

12、action.ActionForm對象來創(chuàng)建需要的ActionForm對象,項目中所涉及到的ActionForm對象如圖1.7所示。圖1.7項目中所涉及到的ActionForm對象3.5 持久層結(jié)構(gòu)設(shè)計持久層結(jié)構(gòu)通過Hibernate框架進(jìn)行設(shè)計。由于Hibernate對不同對象的增、刪、改、查等操作具有一定的共性,如添加數(shù)據(jù)使用save()方法、刪除數(shù)據(jù)使用delete()方法等,項目中將這些具有共性的操作抽取出來,封裝成一個類,其他數(shù)據(jù)庫操作對象可繼承此類來擁有這些方法,從而減少程序中的多余代碼,如圖1.8所示。圖1.8持久層結(jié)構(gòu)SupperDao類為所有數(shù)據(jù)庫操作對象的父類,在此類中定義

13、了對數(shù)據(jù)庫進(jìn)行操作的常用方法,具體方法及說明如表1.1所示。表1.1SupperDao方法及說明方法說明save()用于保存一個對象saveOrUpdate()用于保存或更新一個對象delete(Objectobj)用于刪除一個對象,入口參數(shù)為Object類型findByHQL()通過HQL語句查詢數(shù)據(jù),入口委數(shù)為String類型的HQL語句deleteByHQL()通過HQL語句刪除數(shù)據(jù),入口參數(shù)為String類型的HQL語句uniqueResult()單值檢索數(shù)據(jù),入口參數(shù)hql為HQL查詢語句、where為查詢條件findPaging()分頁查詢數(shù)據(jù),入口參數(shù)hql為HQL查詢語句、of

14、fset為結(jié)果集的起始位置、length為返回結(jié)果集的條目數(shù)、where為查詢條件這些方法均為數(shù)據(jù)庫操作的常用方法,所以將其封裝在單獨(dú)的一個類中,對于各個對象的數(shù)據(jù)庫相關(guān)操作,可通過繼承此類來獲取這些常用方法。其子類對象有CategoryDao類、MedicineDao類、SellDao類、UserDao類,其功能分別介紹如下。CategoryDao類:藥品類別數(shù)據(jù)庫操作對象,用于封裝與藥品類別相關(guān)的數(shù)據(jù)庫操作方法。MedicineDao類:藥品信息數(shù)據(jù)庫操作對象,用于封裝與藥品信息相關(guān)的數(shù)據(jù)庫操作方法。SellDao類:藥品銷售數(shù)據(jù)庫操作對象,用于封裝與藥品銷售相關(guān)的數(shù)據(jù)庫操作方法。User

15、Dao類:用戶數(shù)據(jù)庫操作對象,用于封裝與管理員及系統(tǒng)相關(guān)的數(shù)據(jù)庫操作方法。3.6 業(yè)務(wù)層結(jié)構(gòu)設(shè)計業(yè)務(wù)層結(jié)構(gòu)主要通過Struts框架進(jìn)行設(shè)計,由Struts的中央控制器對各種操作請求進(jìn)行控制,并通過相應(yīng)的Action對其進(jìn)行業(yè)務(wù)處理,項目中所用到的Action對象及關(guān)系如圖1.9所示。圖1.9Action對象及關(guān)系A(chǔ)ction、DispatchAction與LookUpDispatchAction為Struts封裝的Action對象,具有不同的特點(diǎn)及作用,項目中通過繼承這幾個對象實現(xiàn)對不同業(yè)務(wù)請求的處理。除這3個對象外,圖1.9中其余的Action對象均為自定義的Action對象。在這些自定義的

16、Action對象中,LanguageAction與LoginAction用于處理國際化語言及用戶登錄操作。由于二者不涉及過多的業(yè)務(wù)邏輯,它們都直接繼承于Action對象。BaseAction對象與DeleteAction對象為重要的Action對象,二者都繼承了DispatchAction對象。項目中封裝這兩個對象的目的在于簡化程序中的業(yè)務(wù)邏輯、提高程序的安全性。在這兩個對象中均對用戶登錄身份做出了嚴(yán)格的驗證,其子類對象通過繼承不必再考慮用戶登錄的安全問題,而更專注于業(yè)務(wù)邏輯,同時通過繼承還可以減少程序的代碼量。其中BaseAction對象的子類及作用如表1.2所示。表1.2BaseActio

17、n對象的子類及其作用子類作用SellAction封裝藥品銷售的相關(guān)操作,處理封裝藥品銷售請求SystemAction封裝系統(tǒng)相關(guān)操作,處理系統(tǒng)級的請求CategoryAction封裝藥品類別相關(guān)操作,處理藥品類別相關(guān)操作MedicineAction封裝藥品信息相關(guān)操作,處理封裝藥品信息的相關(guān)請求RequireAction封裝藥品需求及庫存相關(guān)操作,處理藥品需求相關(guān)請求DeleteAction對象繼承了LookUpDispatchAction對象,此類通過重寫getKeyMethodMap()方法對數(shù)據(jù)進(jìn)行批量刪除操作,其子類對象及其作用如表1.3所示。表1.3DeleteAction對象的子類

18、及其作用子類作用DeleteMedicineAction封裝藥品信息刪除操作,用于批量刪除藥品信息DeleteReqMedAction封裝藥品需求信息刪除操作,用于批量刪除藥品需求信息3.7頁面結(jié)構(gòu)設(shè)計醫(yī)藥銷售管理系統(tǒng)的頁面結(jié)構(gòu)采用框架進(jìn)行設(shè)計,通過HTML語言中的frameset標(biāo)簽及frame標(biāo)簽將頁面分成3個部分,分別為頁面頭部、頁面導(dǎo)航及內(nèi)容頁面,如圖1.10所示。圖1.10頁面布局此種布局方式將每一個頁面單獨(dú)置于一個框架之中,其中“頁面頭部”和“貢面導(dǎo)航”在登錄之后是固定不變的,對于用戶的操作將在“內(nèi)容頁面”顯示結(jié)果。使用這種方式的有點(diǎn)在于:(1)避免了JSP頁面中大量引用inclu

19、de動作標(biāo)簽。(2)避免瀏覽器反復(fù)加載“頁面頭部”及“頁面導(dǎo)航”等同樣的內(nèi)容,加快瀏覽器速度。4配置文件在編寫代碼之前,需要做一些準(zhǔn)備工作,如項目環(huán)境的搭建、項目所涉及到的第三方類庫的支持、web.xml的配置等。在醫(yī)藥銷售管理系統(tǒng)中,主要涉及到Struts框架、Hibernate框架及JFreeChart組件的應(yīng)用,因此在項目開發(fā)之前,需要添加其類庫支持。4.1 配置web.xmlweb.xml文件是Web項目的配置文件,在醫(yī)藥銷售管理系統(tǒng)中,此文件需要配置Struts框架、JFreeChart組件和過濾器等信息。4.2 配置struts-config.xmlStruts框架實現(xiàn)了MVC模式

20、,web.xml和struts-config.xml文件是其兩個重要的配置文件,其中web.xml文件實現(xiàn)了Struts的初始化加載,而struts-config.xml是它的核心配置文件。Struts-config.xml所做的工作比較多,包括ActionForm對象的定義、用戶請求和Action之間的映射、異常處理等重要的配置。其中<form-beans>標(biāo)簽用于注冊實例中所涉及到的ActionForm對象,<global-forwards>標(biāo)簽用于設(shè)置全局跳轉(zhuǎn),<action-mappings>標(biāo)簽配置用戶請求Action對象的映射。4.3 配置hib

21、ernate.cfg.xmlHibernate.cfg.xml文件是Hibernate的配置文件,在項目中,此文件配置了數(shù)據(jù)庫的方言、數(shù)據(jù)庫鏈接信息、自動建表屬性和打印SQL語句等屬性。5實體及映射Hibernate是一個ORM產(chǎn)品,它完全可以操作對象的方式進(jìn)行數(shù)據(jù)庫操作,其實體對象與數(shù)據(jù)表之間通過映射文件建立映射關(guān)系。因此,在醫(yī)藥銷售管理系統(tǒng)中需要建立實體對象與數(shù)據(jù)表之間的映射。5.1 藥品實體映射藥品實體對象的持久化類為Medicine類,此類封裝了藥品相關(guān)屬性提供相應(yīng)的getXX()和setXXX()方法。藥品對象與藥品類別對象為多對一關(guān)聯(lián)關(guān)系,所以在Medicine類中加入了藥品類別屬

22、性category,其關(guān)聯(lián)關(guān)系通過映射文件Medicine.hbm.xml進(jìn)行映射。映射文件Medicine.hbm.xml將實體對象Medicine映射為tb_medicine表,主鍵的生成策略采用自動生成方式。此映射文件中,對于數(shù)據(jù)表的部分字段還通過not-null、length、unique等屬性映射字段的屬性,其中not-null用于映射字段的非空屬性、length用于映射字段的長度、unique用于映射字段是否唯一。映射后的數(shù)據(jù)表如圖1.11所示。圖1.11tb_medicine表5.2 藥品類別實體映射藥品類別實體用于封裝藥品類別屬性信息,其持久化類為Category類,與藥品對象

23、存在一對多關(guān)聯(lián)關(guān)系。藥品對象與藥品類別對象為多對一關(guān)聯(lián)關(guān)系,但從藥品類別一端來看,藥品類別對象與藥品對象又是一對多的關(guān)系,所以程序中采用了多對一雙向關(guān)聯(lián)進(jìn)行映射。藥品類別實體對象的映射文件為Category.hbm.xml。Category類所映射的數(shù)據(jù)表為tb_category,其中<ser>標(biāo)簽用于映射藥品類別實體與藥品實體間的一對多關(guān)聯(lián)關(guān)系,此種映射方式將在藥品數(shù)據(jù)表中添加categoryId字段。映射后的數(shù)據(jù)表tb_category如圖1.12所示。圖1.12tb_categoy表5.3 銷售明細(xì)實體映射銷售明細(xì)用于描述藥品銷售時的具體情況,如銷售時間、銷售人員、銷售數(shù)量等

24、。這些信息十分重要,需要記錄到數(shù)據(jù)庫中,實例中將其封裝為SellDetail類。為了方便查看銷售明細(xì)的總額信息,在SellDetail類中加入了sellTotal()屬性,此屬性并不進(jìn)行數(shù)據(jù)表的映射,它只有一個與之對應(yīng)的get()方法,在此方法中通過單價與數(shù)量的運(yùn)算對sellTotal進(jìn)行賦值,并將其返回。銷售明細(xì)實體的映射文件為SellDetail.hbm.xml,此映射文件中映射了兩個多對一關(guān)聯(lián)關(guān)系,分別為與藥品對象的多對一關(guān)系及操作用戶間的多對一關(guān)系。銷售明細(xì)實體映射的數(shù)據(jù)表為tb_selldetail。在映射文件SellDetail.hbm.xml中,通過兩個<many-to-o

25、ne>標(biāo)簽分別映射與藥品對象及操作用戶的多對一關(guān)聯(lián)關(guān)系,并配置了級聯(lián)操作類型為save-update。映射后的數(shù)據(jù)表結(jié)構(gòu)如圖1.13所示。圖1.13tb_selldetail表5.4 用戶實體映射在醫(yī)藥銷售管理系統(tǒng)中,用戶實體用于封裝管理員的基本信息,如登錄的用戶名、密碼等屬性,其類名為User。User類中屬性相對較少,其映射過程也相對簡單。其映射文件為User.hbm.xml。用戶實體所映射的數(shù)據(jù)表為tb_user,其結(jié)構(gòu)如圖1.14所示。圖1.14tb_user表6公共類設(shè)計在Java程序開發(fā)中,如果一個功能反復(fù)被調(diào)用,則可將該功能抽取出來封裝為一個類作為公共類,在需要此功能的地方

26、通過此類進(jìn)行實現(xiàn)。公共類實質(zhì)是代碼的重用的一種方式,在面向?qū)ο蟮拈_發(fā)模式中經(jīng)常使用它來簡化程序中的代碼,提高程序的可讀性。下面是醫(yī)藥銷售管理系統(tǒng)找那個的公共類設(shè)計。6.1Hibernate過濾器在沒有使用Spring管理Hibernate的情況下,對Hibernate的管理仍然存在一定的難度,特別是在J2EE開發(fā)中,線程安全、SessionFactory對象、Session對象、Hibernate緩存及延遲加載等是程序設(shè)計中的難題,管理不當(dāng)將會對程序造成極為嚴(yán)重的影響。在醫(yī)藥銷售管理系統(tǒng)中,將SessionFactory對象、Session對象置于過濾器中,由過濾器對其進(jìn)行管理,從而解決了這些

27、問題。在Web項目中,以普通方式使用Hibernate將無法解決Hibernate延遲加載,如圖1.15所示。當(dāng)有一個業(yè)務(wù)請求查詢數(shù)據(jù)時,首先要開啟Session對象,然后Hibernate對數(shù)據(jù)進(jìn)行查詢。在關(guān)閉Session對象,最后通過JSP頁面來顯示數(shù)據(jù)。在這一過程中,如果查詢數(shù)據(jù)時使用了延遲加載,當(dāng)JSP頁面顯示數(shù)據(jù)信息時,Hibernate將拋出異常信息,因為此時Session對象已經(jīng)關(guān)閉,Hibernate不能再對數(shù)據(jù)進(jìn)行操作。圖1.16Hibernate過濾器在Web容器啟動時,過濾器被初始化,它將執(zhí)行init()方法,在后續(xù)的操作中不會再次被執(zhí)行;而當(dāng)容器關(guān)閉時,過濾器將執(zhí)行d

28、estroy()方法。這兩個方法恰好符合SessionFactory對象的生命周期,在運(yùn)行期間只執(zhí)行一次操作,可用于實例化及銷毀SessionFactory對象。對于Session對象的關(guān)閉操作,可以在業(yè)務(wù)邏輯處理結(jié)束后、response請求轉(zhuǎn)發(fā)大View層之前進(jìn)行。實例將其封裝在HibernateFilter類中,此類繼承了Filter類,它是一個過濾器。為了保證線程的安全性,實例中將Session對象存放與ThreadLocal對象中,當(dāng)用到一個Session對象時,首先從ThreadLocal中獲取,在無法獲取的情況下才會開啟一個新的Session對象。同時,為了保證Session對象能

29、在resopnse請求轉(zhuǎn)發(fā)到View層之前被關(guān)閉,實例采取了tryfinally語句對Session對象進(jìn)行關(guān)閉。6.2SupperDao類SupperDao類為項目中所有數(shù)據(jù)庫操作類的父類,此類封裝了數(shù)據(jù)庫操作的常用方法。在此類中,由于Hibernate對數(shù)據(jù)的操作都需要用到Session接口,類中定義了一個protected類型的Session對象,為其子類提供了方便。save()方法及savaOrUpdate()方法都用于保存一個對象,其入口參數(shù)均為Object類型。其中saveOrUpdate()方法比save()方法更智能一些,可以根據(jù)實體對象中的標(biāo)識值來判斷保存還是更新操作。Sup

30、perDao類中使用這兩個方法對實體對象進(jìn)行保存及更新操作。刪除操作的方法為delete(),入口參數(shù)為Object類型,此方法通過Session接口的delete()方法進(jìn)行實現(xiàn)。SupperDao類為項目中所有數(shù)據(jù)庫操作類的父類,在設(shè)計時應(yīng)當(dāng)考慮全面。Hibernate的HQL查詢語言提供了更為靈活的查詢方式,在這個超類之中應(yīng)該加入HQL的操作方法,其中findByHQL()方法用于根據(jù)指定的HQL查詢語句查詢結(jié)果集,deleteByHQL()方法用于根據(jù)指定的HQL查詢語句進(jìn)行刪除操作。Hibernate單值檢索在查詢后返回單個對象,當(dāng)返回的結(jié)果包含多條數(shù)據(jù)時,Hibernate將拋出異

31、常。此種操作可用于查詢單條數(shù)據(jù),如聚合函數(shù)count()等。在SupperDao類中,單值檢索的方法為uniqueResult()。此方法的入口參數(shù)為HQL查詢語句及查詢條件,其中查詢條件為Object數(shù)組類型,用于裝載查詢語句中的參數(shù)。例如HQL語句“fromMedicinemwherem.id=?”,此時即可通過參數(shù)where對其進(jìn)行動態(tài)賦值。分頁查詢在程序開發(fā)中經(jīng)常用到,不但方便查看,還可以減少結(jié)果集的返回數(shù)量,提高數(shù)據(jù)訪問效率。使用Hibernate的分頁查詢方法極為簡單,只需要傳入幾個參數(shù)即可,但在SupperDao類中對其進(jìn)行了擴(kuò)展,加入了HQL語句的動態(tài)賦值,其方法名為findP

32、aging()。此方法入口參數(shù)有4個,其中參數(shù)hql為HQL查詢語句,它允許傳入?yún)?shù)中帶有占位符“?”的HQL語句;參數(shù)offset為查詢結(jié)果集對象的起始位置;參數(shù)length為查詢結(jié)果的偏移量,也是返回數(shù)據(jù)的條目數(shù);參數(shù)where為查詢條件,屬于Object數(shù)組類型,用于裝載HQL語句中的參數(shù)。通過上述這幾個參數(shù)基本可以滿足項目中所有的分頁查詢,當(dāng)然遇到特殊情況時,可以通過子類對象重寫此方法。6.3BaseAction類BaseAction類是業(yè)務(wù)層,有一個超類對象,它繼承了Struts的DispatchAction類,同時還為子類對象提供公用方法。此類首先定義了3個protected類型的

33、變量,分別用于設(shè)置每頁的記錄數(shù)、本地語言信息及國際化消息資源。Struts的DispatchAction類繼承了Action類,此類處理請求時首先要執(zhí)行execute。方法,然后通過控制器再轉(zhuǎn)發(fā)到相應(yīng)的方法進(jìn)行業(yè)務(wù)處理。根據(jù)這一分析,可以在execute。方法中對用戶的身份作出驗證,其實現(xiàn)過程如圖1.17所示。通過getPage()方法進(jìn)行實現(xiàn),子類對象可以通過繼承來獲取此方法。getPage()方法返回一個Map集合對象,該集合用于裝載結(jié)果集及分頁條。其中,結(jié)果集對象為一頁中的所有數(shù)據(jù)集合,它是一個List對象;分頁條為分頁查詢后在JSP頁面所顯示的分頁信息,如記錄數(shù)、頁碼、上一頁、下一頁的

34、超鏈接等,它是一個String類型的字符串。getPage()方法的入口參數(shù)有四個,其中參數(shù)hql為分頁查詢的HQL語句,此語句不可以包括select子句,它從from子句開始,可以傳入帶有占位符的HQL,但需要通過查詢條件參數(shù)where傳遞占位符的值,當(dāng)HQL語句沒有參數(shù)時,where參數(shù)可以設(shè)置為null;參數(shù)recPerPage為每一頁的記錄數(shù);currPage為當(dāng)前的頁碼;action為分頁所請求的Action地址。getPage()方法提供這些參數(shù)的目的在于提高程序代碼的重用性,因為在醫(yī)藥銷售管理系統(tǒng)中,通過這些參數(shù),getPage()方法已滿足所有的分頁查詢,用到分頁查詢的地方都調(diào)

35、用了此方法。此外,在其他項目中此方法的重用價值也是非常高的。分頁查詢在業(yè)務(wù)層的實現(xiàn)比較繁瑣,因為在分頁條中要考慮到國際化的實現(xiàn),所以在分頁條中所有文字信息均通過MessageResources對象讀取國際化資源文件來獲取。MessageResources對象是Struts中的對象,此對象根據(jù)Locale信息讀取相應(yīng)的國際化消息資源文件。1.4 DeleteAction類公共類DeleteAction主要用于對項目中LookupDispatchAction的請求進(jìn)行處理。它繼承了LookupDispatchAction類,重寫了execute()方法對用戶的身份作出驗證,當(dāng)用戶身份驗證失敗時將進(jìn)

36、行錯誤處理;同時,此類還重寫了LookupDispatchAction類中的getKeyMethodMap()方法,添加了兩個按鈕對象的key。1.5 字符串工具類在一個Web項目中,字符串是經(jīng)常被操作的對象。為了簡化程序的代碼及提高程序的可讀性,對于經(jīng)常用到的字符串處理方法,可以封裝一個字符串工具類對其進(jìn)行操作。例如JSP頁面的多選框,它提交的參數(shù)值為數(shù)組類型,在數(shù)據(jù)庫的操作過程中需要將其轉(zhuǎn)換為字符串類型;在超鏈接中,如果加入中文參數(shù)將不能被瀏覽器解析,需要對其進(jìn)行一定的處理才可以使用。類似于這種操作在程序中使用的非常頻繁,將其封裝為一個公共類無疑是一種較好的解決方案。在醫(yī)藥銷售管理系統(tǒng)中,

37、封裝了一個名為StringUtil的字符串工具類,用于對字符的特殊處理。此類中均為靜態(tài)方法。在HQL語句中,如果刪除多個對象可以使用whereidin(1,2,3)的方式進(jìn)行刪除。arr2Str()方法用于將數(shù)組轉(zhuǎn)換為字符串,可以將JSP表單傳遞id值轉(zhuǎn)換為此種方式;encodeURL()方法可對字符串進(jìn)行URL編碼,主要用于對含有中文的超鏈接進(jìn)行處理;encodeZh()方法用于對字符串中的中文亂碼進(jìn)行處理。7 國際化國際化是Struts的一項強(qiáng)大功能,它以不同國家的語言構(gòu)建本地化的頁面,方便不同國家、不同語言的用戶瀏覽訪問。在醫(yī)藥銷售管理系統(tǒng)中,分別構(gòu)建了中文和英文兩種語言環(huán)境,根據(jù)使用者

38、瀏覽器的默認(rèn)語言環(huán)境呈現(xiàn)不同的語言顯示方式。7.1 國際化資源文件醫(yī)藥銷售管理系統(tǒng)對所有涉及到語言信息的地方均進(jìn)行了國際化設(shè)置,包括JSP頁面文字信息及JS腳本提示信息等。主要包含3個國際化資源文件,其中屬性文件為MessageRperties為默認(rèn)的資源文件,實例中將其設(shè)置為中文;屬性文件MessageResources_en_US.properties為英文國際化資源文件;MessageResources_zh_CN.properties為中文國際化資源文件。在編寫屬性文件時應(yīng)該注意,屬性文件以Unicode編碼,在處理中文時應(yīng)該對其進(jìn)行轉(zhuǎn)碼。Java提供了將中文轉(zhuǎn)

39、換為Unicode編碼格式的工具,在命令窗口中直接輸入“native2ascii”,再輸入中文,然后按回車鍵,將輸出中文對應(yīng)的Unicode碼。7.2 國際化實現(xiàn)實例中除了對用戶瀏覽器語言的自動匹配外,還為使用者提供了中文和英文的語言鏈接,用戶在使用過程中可對語言進(jìn)行自動切換。此請求由LanguageAction類進(jìn)行處理。本地語言信息存放在Session會話中的Globals.LOCALE_KEY值中,它是Struts的默認(rèn)配置,可以通過Strtus的API幫助文檔和源碼得到。對于中、英文兩種請求,實例中分別創(chuàng)建了中、英文所對應(yīng)的Locale對象,并將其設(shè)置到Globals.LOCALE_K

40、EY值中,實現(xiàn)了語言的自動切換。8 系統(tǒng)登陸模塊系統(tǒng)登錄是一個用戶身份驗證的過程,只有登錄成功的用戶才可以對系統(tǒng)進(jìn)行操作,否則不能對系統(tǒng)進(jìn)行管理維護(hù)。形象地說,它就是系統(tǒng)的一道安全門。8.1 查詢用戶創(chuàng)建名為UserDao的類,封裝對用戶及系統(tǒng)級的數(shù)據(jù)操作。在此類中編寫login()方法,用于根據(jù)用戶名及密碼查詢用戶對象。在用戶登錄的過程中,需要判斷數(shù)據(jù)庫用戶對象是否存在,當(dāng)用戶提交登錄信息時,調(diào)用此方法可返回查詢后的用戶對象,如果查詢不到將返回null值。8.2 登陸請求用戶登錄請求由LoginAction類進(jìn)行處理,此類繼承了Action對象,它重寫execute()方法對用戶登錄請求進(jìn)行

41、驗證。UserForm對象為用戶ActionForm對象,Struts自動將JSP頁面表單信息封裝在此對象中,所以可以直接獲取ActionForm對象中的屬性信息。LoginAction類通過UserForm中的用戶名和密碼屬性,調(diào)用UserDao對象中的login()方法對用戶信息進(jìn)行查詢,當(dāng)數(shù)據(jù)庫中存在與之匹配的數(shù)據(jù),則登錄成功,否則登錄失敗。8.3 登錄頁面在Web文件夾的根目錄中創(chuàng)建login.jsp文件,即系統(tǒng)中的用戶登錄頁面,在其中放置用戶登錄的表單。在此頁面中,首先通過<logic:notEmpty>標(biāo)簽判斷是否存在error值,如果存在即表示用戶登錄發(fā)生錯誤,將在登

42、錄頁面顯示錯誤信息。Login.jsp頁面運(yùn)行結(jié)果如圖1.21所示。圖1.21系統(tǒng)登錄頁面9 藥品類別信息管理藥品超市經(jīng)營的藥品眾多,為方便產(chǎn)看、統(tǒng)計,需要對其進(jìn)行分類。藥品類別信息管理模塊主要是對藥品類別信息進(jìn)行統(tǒng)一管理,其中包括對藥品類別的添加、查看、統(tǒng)計等操作。9.1 藥品類別持久層設(shè)計CategoryDao類是藥品類別的數(shù)據(jù)庫操作類,它繼承了SupperDao類,提供對藥品類別的數(shù)據(jù)庫操作方法。其中l(wèi)oadCategory()方法用于查詢指定id的藥品類別信息,其入口參數(shù)為int型藥品id。在添加藥品信息時,需要添加與之對應(yīng)的類別信息,所以還需要提供一個查詢所有藥品類別信息的方法fin

43、dAllCategory()。為方便藥品類別數(shù)據(jù)的統(tǒng)計,實例中對藥品類別中藥品的數(shù)量進(jìn)行統(tǒng)計的操作被定義在findCategoryAndCount(),由HQL語句的內(nèi)連接查詢進(jìn)行實現(xiàn)。findCategoryAndCount()方法中的hql屬性為內(nèi)連接查詢語句,可對藥品數(shù)量按藥品類別進(jìn)行分組統(tǒng)計,查詢后返回其結(jié)果集對象。9.2 藥品類別的添加藥品類別的添加是指將藥品類別信息寫入數(shù)據(jù)庫,實現(xiàn)過程如下。9.2.1 類別添加、修改請求處理實例中將藥品類別的相關(guān)請求封裝在CategoryAction類中,此類繼承了BaseAction對象,所以在對類別信息進(jìn)行處理時,不必考慮用戶是否登錄的安全問題

44、。此類中處理添加類別信息請求的方法為add(),由于CategoryAction類是一個DispatchAction對象,所以當(dāng)請求的參數(shù)為add時,將由此方法進(jìn)行處理。此方法調(diào)用了CategoryDao對象的saveOrUpdate()方法,所以藥品類別信息的添加與修改操作均可通過此方法進(jìn)行實現(xiàn);當(dāng)傳遞的CategoryForm對象含有id值時,則進(jìn)行修改操作。9.2.2 類別添加頁面類別添加頁面即category_add.jsp文件,此頁面中主要放置了類別添加的表單。此頁面中使用Struts的<html:hidden>標(biāo)簽設(shè)置藥品類別的id屬性值,如果此屬性不為空,則意味著操作

45、為修改操作。類別添加頁面運(yùn)行結(jié)果如圖1.22所示。圖1.22類別添加頁面9.3 分頁查看類別信息在添加藥品信息后,系統(tǒng)將跳轉(zhuǎn)到類別信息列表頁面。在此頁面中將對類別信息進(jìn)行分頁顯示,此外還提供了藥品類別修改與刪除的超鏈接,如圖1.23所示。圖1.23類別信息列表頁面9.3.1 查詢與刪除請求處理在CategoryAction類中,藥品類別信息的分頁查詢方法為paging(),由于此類繼承于BaseAction類,所以調(diào)用其父類中的getPage()方法就可以實現(xiàn)。它將返回結(jié)果集與分頁條對象。在此方法中,currPage屬性為請求的頁碼;action對象為JSP頁面請求的action地址;hql為

46、查詢語句,由于它不含有占位符參數(shù),所以getPage()方法的條件參數(shù)設(shè)置為null.9.3.2 類別信息列表頁面category_list.jsp是類別信息列表頁面,在此頁面中使用Struts的標(biāo)簽對藥品類別信息進(jìn)行迭代輸出。在程序開發(fā)過程中,應(yīng)盡量減少程序中bug。例如,category_list.jsp頁面中,在輸出request對象中的屬性時,首先使用<logic:present>標(biāo)簽判斷其屬性是否存在。Category_list.jsp頁面中的“修改”與“刪除”超鏈接使用Struts的<html:link>標(biāo)簽進(jìn)行設(shè)置,此標(biāo)簽的功能十分強(qiáng)大,它可以設(shè)置超鏈接中

47、的參數(shù)。實例中使用的paramName屬性用于設(shè)置所迭代的對象,paramId屬性用于設(shè)置參數(shù)的名稱,paramProperty屬性用于設(shè)置參數(shù)值,href屬性用于指定鏈接地址。9.4 類別的修改與刪除在CategoryAction類中,類別的修改與刪除相對簡單一些,其中處理刪除類別請求的方法為delete(),可根據(jù)指定的藥品類別id刪除藥品類別對象。處理修改類別信息請求的方法為edit(),此方法通過類別id加載藥品類別對象將類別信息保存到CategoryForm對象中,最后轉(zhuǎn)發(fā)到編輯頁面。此方法在加載類別信息后,會將頁面轉(zhuǎn)到類別添加頁面,因為類別添加請求處理的方法調(diào)用了Hibernate

48、的saveOrUpdate()方法,所以會對其進(jìn)行自動更新。9.5 藥品類別統(tǒng)計為了方便查看、管理藥品統(tǒng)計信息,實例中使用了報表組件JFreeChat對藥品分類進(jìn)行統(tǒng)計。其實現(xiàn)過程如下:9.5.1 JFreeChat工具類創(chuàng)建名為ChartUtil的類,用于生成制圖對象JFreeChat。其中categoryChart()方法用于生成藥品類別統(tǒng)計的餅形圖對象,其入口參數(shù)為裝載結(jié)果集的List集合對象。此方法中,通過傳遞的List集合對象生成DefaultPieDataset數(shù)據(jù)集合,然后使用制圖工廠ChartFactory創(chuàng)建餅形圖JFreeChart對象,并將其返回。9.5.2 Action

49、請求藥品類別統(tǒng)計請求由CategoryAction類的findCategoryAndCound()方法進(jìn)行處理,此方法首先通過CategoryDao對象統(tǒng)計藥品類別信息,獲取結(jié)果集對象后,通過ChartUtil類的categoryChart()方法生成制圖對象,最后將生成的圖片路徑放置到request中。9.5.3 顯示報表藥品類別統(tǒng)計信息通過category_graph.jsp頁面進(jìn)行顯示,此頁面通過<bean:write>標(biāo)簽獲取所生成圖片的路徑。為避免空指針錯誤,category_graph.jsp頁面使用<logic:notEmpty>標(biāo)簽判斷生成的圖片路徑是否

50、存在,其運(yùn)行結(jié)果如圖1.24所示。圖1.24category_graph.jsp頁面10 藥品信息管理藥品信息管理主要是對藥品基本信息的維護(hù),其中包括對藥品信息的添加、刪除、修改、查詢等操作。10.1 藥品對象持久層設(shè)計MedicineDao類是藥品對象的數(shù)據(jù)庫操作類,它繼承了SupperDao類,此類主要包含3個方法,分別為loadMedicine()、loadMedicineCategory()、findMedicineByMedNo()。其中,loadMedicine()方法與findMedicineByMedNo()方法用于根據(jù)藥品id及藥品編碼查詢藥品信息;loadMedicineA

51、ndCategory()方法用于查詢藥品信息與藥品類別信息。loadMedicineAndCategory()方法使用內(nèi)連接對藥品信息表與藥品類別表進(jìn)行聯(lián)合查詢,可以減少SQL語句的數(shù)量。藥品實體與藥品類別實體存在多對一的關(guān)聯(lián)關(guān)系,當(dāng)同時查看藥品信息與藥品類別信息時,Hibernate將發(fā)出兩條SQL語句,分別為查詢藥品信息的SQL語句與查詢藥品類別的SQL語句,所以實例中采用內(nèi)連接將藥品信息與藥品類別信息一次加載出來,減少了SQL語句,提高了數(shù)據(jù)庫的性能。10.2 藥品信息的添加與修改藥品編碼是藥品對象的一個標(biāo)識,當(dāng)添加一個藥品信息時,需要判斷此藥品是否已經(jīng)在數(shù)據(jù)庫中存在,如果存在則只需更新

52、藥品的數(shù)量即可,其添加流程如圖1.25所示添加藥品圖1.25藥品添加流程建品管理的Action類為MedicinpAction,它即承于BaseAction類,是保存到數(shù)據(jù)庫更新藥品數(shù)量L個DispatchAUion對象。此類的findMedlcineByMedNoO方法用于根據(jù)藥品編碼查詢藥品信息是否存在,當(dāng)所添加的藥品編碼存在時,將跳轉(zhuǎn)到藥品更新頁面,否則跳轉(zhuǎn)到藥品添加頁面。MedicineAction類的add()方法用于添加或修改藥品信息。此方法所做的工作比較多,包含了判斷藥品信息是否存在、圖片上傳、保存藥品以及更新藥品等操作。此方法調(diào)用了MedicineDao類中的saveOrUpd

53、ate()方法,因此適用于藥品對象的添加與修改操作。其中上傳文件的命名采用日期時間格式,為防止重復(fù)實例中加入時間毫秒;上傳文件保存在Web目錄的upload文件夾中。10.2.2藥品添加頁面藥品添加有3個頁面,其中med_add.jsp頁面提供輸入藥品編號的表單;當(dāng)添加的藥品信息在數(shù)據(jù)庫中不存在時,將通過med_save.jsp錄入藥品的詳細(xì)信息;當(dāng)所添加的藥品信息存在與數(shù)據(jù)庫中時,經(jīng)通過med_update.jsp頁面更新藥品數(shù)量,如圖1.26所示。圖1.26更新藥品數(shù)量10.3 分頁查看所有藥品在添加藥品信息后,請求轉(zhuǎn)發(fā)到查看所有藥品信息,對所有藥品信息進(jìn)行分頁顯示。此操作通過Medici

54、neAction類的paging()方法進(jìn)行處理。此方法通過調(diào)用MedicineAction類繼承的getPage()方法進(jìn)行分頁查詢,在查詢后分別將結(jié)果集與分頁條放置到request中,并轉(zhuǎn)發(fā)到med_list.jsp頁面進(jìn)行顯示,如圖1.27所示。圖1.27med_list.jsp頁面10.4 查看藥品詳細(xì)信息在藥品列表中提供了查看藥品詳細(xì)的超鏈接,此鏈接作用于藥品名稱上,單擊此鏈接將進(jìn)入藥品查看請求中,該請求由MedicineAction類view()方法進(jìn)行處理。在view()方法中,首先通過傳遞的藥品id值查詢藥品對象,然后將查詢到藥品信息放置于request對象中,轉(zhuǎn)發(fā)到med_v

55、iew.jsp頁面進(jìn)行顯示,如圖1.28所示。圖1.28med_view.jsp頁面在med_view.jsp頁面中,通過<logic:empty>標(biāo)簽及<logic:notEmpty>標(biāo)簽對藥品圖片是否存在進(jìn)行邏輯判斷,當(dāng)藥品圖片存在時,通過<bean:write>標(biāo)簽輸出圖片路徑,否則輸出提示信息。10.5 模糊查詢藥品為方便用戶查詢藥品,藥品信息管理模塊還提供了藥品的模糊查詢功能,即根據(jù)用戶所輸入的關(guān)鍵字信息,對藥品名稱、藥品描述等多個藥品屬性進(jìn)行模糊匹配,并分頁顯示模糊查詢后的結(jié)果集。10.5.1 藥品模糊查詢請求處理藥品模糊查詢通過Medicine

56、Action類的blurQuery()方法進(jìn)行處理。此方法根據(jù)提交的關(guān)鍵詞keyWord組合HQL語句,調(diào)用getPage()方法獲取查詢后的結(jié)果信息對象與分頁條對象。HQL的模糊查詢使用like作為關(guān)鍵字,此方法中分別對藥品名稱、藥品編碼、出廠地址及藥品描述進(jìn)行了模糊匹配。10.5.2 藥品模糊查詢頁面藥品模糊查詢頁面為med_list.jsp,此頁面包含輸入藥品信息的表單。為簡化程序中的代碼,此表單并沒有使用Struts標(biāo)簽中的form表單,而采用了普通<form>標(biāo)簽進(jìn)行定義。此段代碼在項目中是一段可以重用的代碼,涉及到模糊查詢時可通過更改表單中的action來實現(xiàn)。當(dāng)在此表單中輸入模糊關(guān)鍵詞時,單擊“查詢”按鈕,系統(tǒng)將進(jìn)行模糊查詢。例如,查詢的關(guān)鍵詞為“感冒”,其查詢結(jié)果如圖1.29所示。圖1.29模糊查詢

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論