藥品倉庫管理系統(tǒng)的設(shè)計(jì)與研發(fā)_第1頁
藥品倉庫管理系統(tǒng)的設(shè)計(jì)與研發(fā)_第2頁
藥品倉庫管理系統(tǒng)的設(shè)計(jì)與研發(fā)_第3頁
藥品倉庫管理系統(tǒng)的設(shè)計(jì)與研發(fā)_第4頁
藥品倉庫管理系統(tǒng)的設(shè)計(jì)與研發(fā)_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

年4月19日藥品倉庫管理系統(tǒng)的設(shè)計(jì)與研發(fā)文檔僅供參考畢業(yè)綜合訓(xùn)練(畢業(yè)論文/設(shè)計(jì)形式用)課題名稱藥品倉庫管理系統(tǒng)的設(shè)計(jì)與研發(fā)學(xué)院信息工程學(xué)院專業(yè)班級(jí)姓名學(xué)號(hào)指導(dǎo)老師畢業(yè)綜合訓(xùn)練任務(wù)書學(xué)院信息工程學(xué)院專業(yè)計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)年級(jí)級(jí)班級(jí)姓名起止日期題目藥品倉庫管理系統(tǒng)的設(shè)計(jì)與研發(fā)1.畢業(yè)綜合訓(xùn)練任務(wù)及要求(根據(jù)題目性質(zhì)對學(xué)生提出具體要求)能更有效的分類藥品的種類與詳細(xì)信息,便于今后藥品的管理存放。2.畢業(yè)綜合訓(xùn)練的原始資料及依據(jù)(包括做調(diào)研的背景,研究條件、應(yīng)用環(huán)境等)該程序主要適用于藥品倉庫的管理應(yīng)用,經(jīng)過設(shè)計(jì)這個(gè)軟件能夠有利于減少資源的浪費(fèi)和藥品種類存放的安全性,將管理方面的漏洞降至最低。3.主要參考資料、文獻(xiàn)[1]侯維瑞英語語體上海:上海外語教育出版社,1988[2][美]RogersCadenhead.Java編程入門經(jīng)典.梅興文譯.第4版.北京:人民郵電出版社,[3]陳軼.姚曉昆編著.Java程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo).北京:清華大學(xué)出版社,[4]吳其慶編著.Java程序設(shè)計(jì)實(shí)例教程.北京:冶金工業(yè)出版社,[5]李春葆,曾慧.SQLServer學(xué)習(xí)與上機(jī)指導(dǎo)[M].北京:清華大學(xué)出版社,.6.[6]施霞萍等編著.Java程序設(shè)計(jì)教程第2版.北京:機(jī)械工業(yè)出版社,[7]宛延闿等編著.實(shí)用Java程序設(shè)計(jì)教程.北京:機(jī)械工業(yè)出版社,[8]耿祥義,張躍平.<JSP實(shí)用教程>.清華大學(xué)出版社,5月1日:1-354月.[9]陳剛.Eclipse從入門到精通[M].北京:清華大學(xué)出版社,:416-417.[10]孫衛(wèi)琴.精通Struts:基于MVC的JavaWeb設(shè)計(jì)與開發(fā)[M].北京:電子工業(yè)出版社,:1-9.[11](美)格羅夫著,章小莉等譯.SQL完全手冊(第二版)[M].北京:電子工業(yè)出版社,:12-14.[12]王虎,張俊.管理信息系統(tǒng)[M].武漢:武漢理工大學(xué)出版社,.7.13]東方華人.ASP.NET數(shù)據(jù)庫開發(fā)[M].北京:清華大學(xué)出版社,.6.指導(dǎo)教師評語建議成績:優(yōu)良中及格不及格指導(dǎo)教師簽字年月日目錄TOC\o"1-2"\h\z\u第一章緒論5HYPERLINK1.1系統(tǒng)開發(fā)背景51.2問題定義61.3解決方法61.4技術(shù)可行性研究61.5經(jīng)濟(jì)可行性研究71.6操作可行性研究7第二章需求分析82.1功能性需求分析8系統(tǒng)用戶管理8藥品進(jìn)貨管理8藥品銷售管理8庫存轉(zhuǎn)移管理8職工管理8查詢與報(bào)表分析82.2業(yè)務(wù)流程92.3系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)圖92.4非功能性需求分析9系統(tǒng)處理的準(zhǔn)確性和及時(shí)性9系統(tǒng)的開放性和系統(tǒng)的可擴(kuò)充性9系統(tǒng)的易用性和易維護(hù)性10系統(tǒng)的標(biāo)準(zhǔn)性10系統(tǒng)的先進(jìn)性10系統(tǒng)的響應(yīng)速度10第三章詳細(xì)設(shè)計(jì)103.1程序流程圖103.2系統(tǒng)體系結(jié)構(gòu)15第四章數(shù)據(jù)庫設(shè)計(jì)16HYPERLINK4.1數(shù)據(jù)庫邏輯設(shè)計(jì) 164.1.1數(shù)據(jù)庫的概念結(jié)構(gòu)設(shè)計(jì)和ER圖16第五章編碼實(shí)現(xiàn)195.1用戶登陸模塊195.2用戶管理模塊225.3進(jìn)貨銷售模塊295.4進(jìn)貨管理模塊315.5職員管理模塊345.6壞貨轉(zhuǎn)移模塊36第六章系統(tǒng)測試以及軟件安裝386.1軟件測試基礎(chǔ)理論386.2軟件測試目的386.3測試計(jì)劃和要點(diǎn)386.4部分測試圖396.5測試結(jié)論40總結(jié) 41 致謝42參考文獻(xiàn)43第一章緒論1.1系統(tǒng)開發(fā)背景隨著現(xiàn)代科學(xué)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)技術(shù)已滲透到各個(gè)領(lǐng)域,成為各行業(yè)必不可少的工具,特別是Internet技術(shù)的推廣和信息高速公路的建立,使IT產(chǎn)業(yè)在市場競爭中越發(fā)顯示出其獨(dú)特的優(yōu)勢,步入數(shù)字化時(shí)代,有巨大的數(shù)據(jù)信息等待著加工處理和傳輸,這使得對數(shù)據(jù)庫的進(jìn)一步開發(fā)和利用顯得尤為迫切。實(shí)習(xí)期間,我們經(jīng)過對市場的調(diào)查,針對現(xiàn)在各中小藥品公司對銷售業(yè)務(wù)的實(shí)際需要,開發(fā)了這套藥品銷售系統(tǒng)。在開發(fā)過程中,我們針對當(dāng)前各藥品公司管理特點(diǎn)和技術(shù)人員的實(shí)際水平,采用Window基于圖形界面這一易學(xué)易用的操作系統(tǒng)環(huán)境,在系統(tǒng)設(shè)計(jì)過程中,我們盡量采用一些易懂易讀的接口界面,使用戶能夠在短期內(nèi)完全掌握。在功能方面,我們借鑒現(xiàn)在市場上流行的財(cái)務(wù)軟件的特點(diǎn),拋去泛泛不實(shí)用的缺點(diǎn),使我們設(shè)計(jì)的系統(tǒng)在功能上極貼近中小藥品公司的使用要求。在設(shè)計(jì)過程中,我們始終把系統(tǒng)的正確性放在首位,力求數(shù)據(jù)的完整,處理的正確性。在此基礎(chǔ)上優(yōu)化程序代碼,加速系統(tǒng)運(yùn)行和減少對系統(tǒng)資源的占用。作為一家中小型藥品公司,她們的主要業(yè)務(wù)是銷售產(chǎn)品,當(dāng)前系統(tǒng)運(yùn)做中存在很多題,所有的進(jìn)貨單,出貨單都是人工填寫,耗時(shí)而且易出現(xiàn)錯(cuò)誤;庫存也是人工記帳,無法隨時(shí)掌握最準(zhǔn)確的存貨情況;對于銷售數(shù)據(jù),往往要花好多時(shí)間和精力去計(jì)算每個(gè)業(yè)務(wù)員的銷售業(yè)績,每項(xiàng)藥品的銷售狀況,為了解決上述問題,提高經(jīng)濟(jì)效益,準(zhǔn)備導(dǎo)入進(jìn)銷存系統(tǒng)進(jìn)行銷售,采購,庫存等的計(jì)算機(jī)化管理。經(jīng)過三個(gè)月的設(shè)計(jì)開發(fā),現(xiàn)在已完全達(dá)到預(yù)期效果,實(shí)現(xiàn)了最初設(shè)定的目標(biāo)。

1.2問題定義藥品庫房管理系統(tǒng)用計(jì)算機(jī)管理醫(yī)院藥方藥品管理的一種計(jì)算機(jī)應(yīng)用技術(shù)的創(chuàng)新,在計(jì)算機(jī)還未普及之前醫(yī)院藥房藥品管理都是由工作人員手工書寫的方式來操作的.現(xiàn)在一般的醫(yī)院藥方都采用計(jì)算機(jī)智能化管理,采用計(jì)算機(jī)作為工具的實(shí)用的計(jì)算機(jī)藥方庫存管理程序來幫助管理員進(jìn)行更有效的藥品管理工作。藥方管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開發(fā)主要包括后臺(tái)數(shù)據(jù)庫的建立和維護(hù)以及前端應(yīng)用程序的開發(fā)兩個(gè)方面。對于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的庫。而對于后者則要求應(yīng)用程序功能完備,易使用等特點(diǎn)。

1.3解決方法藥品按類管理:因此需要有一藥品類型信息藥品必須屬于一個(gè)藥品類型,如果一個(gè)藥品類品存在藥品或存在下級(jí)藥品類型則該類型不該刪除,需要記錄供應(yīng)商信息,在涉及藥品數(shù)量的地方,要給出相應(yīng)的單位,在進(jìn)貨信息中要包含供應(yīng)商等信息。藥品銷售信息單中要包含登記藥品,銷售數(shù)量單價(jià)等信息,藥品報(bào)損要有報(bào)損原因。進(jìn)貨,銷售,報(bào)損操作要有相應(yīng)操作員信息。只有管理員登陸之后才能夠使用系統(tǒng),默認(rèn)的管理員不能夠刪除進(jìn)貨,銷售,庫存,報(bào)損信息都要能夠添加,修改,刪除,分類,查找。1.4技術(shù)可行性研究在IT行業(yè)中從業(yè)的工作人員一般都要求懂計(jì)算機(jī),具有一定軟硬件基礎(chǔ),會(huì)使用各種管理軟件,熟悉IT產(chǎn)品。因?yàn)?藥品公司中的對員工素質(zhì)要求比較高,從管理層到下面的營銷人員,都要求具有一定的IT背景,因此在新系統(tǒng)投入使用時(shí),只要對員工進(jìn)行少量的培訓(xùn),系統(tǒng)的功能和使用方法就基本上能夠使系統(tǒng)順利的運(yùn)行了。1.5經(jīng)濟(jì)可行性研究因?yàn)榻?jīng)過網(wǎng)絡(luò)傳遞銷售信息,能夠不受距離的限制,因此能夠節(jié)約許多的人力和物力,方便管理,由此能夠減少不必要的開支,同時(shí)該系統(tǒng)能夠提高企業(yè)的銷售效率,即提高了企業(yè)的經(jīng)濟(jì)效益,因此從經(jīng)濟(jì)上是完全可行的。

⑴企業(yè)有能力承擔(dān)研發(fā)開支

開發(fā)新系統(tǒng)的工作是一項(xiàng)艱巨復(fù)雜的工作,它的投資主要是人力和物力的投資。對于本系統(tǒng)的開發(fā)來說,其主要投資還是在人力和物力兩個(gè)方面。如果是企業(yè)自己安排人手開發(fā)系統(tǒng)的話,其主要的投資還是在人力資源上,從系統(tǒng)的業(yè)務(wù)需求調(diào)查到系統(tǒng)的分析編碼制作都是需要巨大的人力投入的。藥品公司作為一個(gè)尖端的高科技產(chǎn)業(yè),其員工要求都比一般企業(yè)的要求要高,而且對系統(tǒng)開發(fā)及軟件產(chǎn)業(yè)了解比較多,因此在自我開發(fā)管理系統(tǒng)的過程中,企業(yè)自己比較容易安排人手,這樣就能夠?yàn)槠髽I(yè)節(jié)約大部分的額外開支。同時(shí)藥品公司就其它產(chǎn)品還說,屬于高端行業(yè),無論是產(chǎn)品的價(jià)格還是質(zhì)量都比較高,而經(jīng)營產(chǎn)品的經(jīng)銷商或者是商家都要求有雄厚的資金的作支持。因此,在系統(tǒng)的開發(fā)過程中,企業(yè)完全有能力承擔(dān)開發(fā)費(fèi)用。

⑵新系統(tǒng)將為企業(yè)帶來經(jīng)濟(jì)效益

管理系統(tǒng)是一個(gè)信息化、智能化和先進(jìn)管理理念的集合體。而管理是一個(gè)動(dòng)態(tài)過程,在其運(yùn)行過程中要采取多項(xiàng)措施。因此在管理中獲得經(jīng)濟(jì)效益是一個(gè)綜合效益,要對她進(jìn)行直接定量的分析是比較困難的。一般新系統(tǒng)帶來的經(jīng)濟(jì)效益是間接的,其最主要的表現(xiàn)就是減少了企業(yè)的管理費(fèi)用和人力開支。而其它一些煩瑣的事物都經(jīng)過新系統(tǒng)來加以分析解決,不但節(jié)省了大量的時(shí)間,還為企業(yè)的各項(xiàng)決策提供了寶貴的資料,為企業(yè)帶來巨大的經(jīng)濟(jì)效益。1.6操作可行性研究本系統(tǒng)采用Windows圖形界面,是大家熟悉的操作系統(tǒng),對于用戶只需要具有一般的計(jì)算機(jī)知識(shí)的人員都能夠輕松上手。而且整個(gè)銷售系統(tǒng)采用最友好的交互界面,簡潔明了,不需要對數(shù)據(jù)庫非常了解。由此,該系統(tǒng)的操作是可行的,有必要推廣該系統(tǒng)!

綜合以上三方面,該系統(tǒng)具有很高的開發(fā)可行性,無論是從技術(shù)上經(jīng)濟(jì)上還是操作上。故此,能夠設(shè)計(jì)該系統(tǒng)流程圖,建立數(shù)據(jù)字典。

第二章需求分析2.1功能性需求分析藥品管理系統(tǒng)是為了加強(qiáng)藥品管理,以便更好地對藥品進(jìn)行監(jiān)督和管理,對售藥機(jī)構(gòu)人員的工作,起到了高效性、準(zhǔn)確性管理而開發(fā)。本系統(tǒng)主要包含系統(tǒng)用戶管理模塊、藥品管理模塊、銷售管理模塊、進(jìn)貨管理模塊、存貨轉(zhuǎn)移管理模塊。藥品管理系統(tǒng)是以合理、全面、準(zhǔn)確的藥品編碼體系為基礎(chǔ),提供了對藥品數(shù)量、金額、有效期的全面管理,統(tǒng)一的藥價(jià)管理機(jī)制規(guī)范了藥品的價(jià)格。系統(tǒng)能隨時(shí)提供藥庫的庫存、藥品流向和消耗,還能根據(jù)現(xiàn)有庫存,藥品有效期提供采購計(jì)劃或應(yīng)暫停采購的藥品清單,以提高資金的利用率,避免不必要的損失,方便快捷的途徑對藥基本信息進(jìn)行定期的更新和刪除等管理(1)系統(tǒng)用戶管理:允許添加刪除用戶(只有管理員才能夠修改),任意權(quán)限的用戶允許更改自己的密碼,添加或刪除職工,修改職工,對藥品進(jìn)行銷售和庫存的控制的資料。(2)藥品進(jìn)貨管理:當(dāng)企業(yè)需要增加新的銷售藥品時(shí),利用此模塊能夠添加新的藥品信息,刪除舊的藥品信息,修改已存在的藥品信息,提供所有與藥品相關(guān)的各類信息,初始化庫存,初始化供應(yīng)商相關(guān)信息。(3)藥品銷售管理:藥品統(tǒng)一的價(jià)格銷售,對已查詢銷售單,能夠?qū)λ幤返膬r(jià)格進(jìn)行控制。(4)庫存轉(zhuǎn)移管理:實(shí)際生活中容易發(fā)生藥品過期和損毀,此時(shí)利用此模塊對過期的藥品和損毀的藥品進(jìn)行清理。(5)職工管理:對藥品企業(yè)進(jìn)行職工的管理,對職工進(jìn)行增加,修改,刪除,查詢等操作。(6)查詢與報(bào)表分析:此功能并未單獨(dú)作為一個(gè)模塊,而是分布在各個(gè)模塊中,各個(gè)模塊產(chǎn)生業(yè)務(wù)時(shí),能夠在各模塊的相應(yīng)功能按鈕上選擇查詢2.2業(yè)務(wù)流程本統(tǒng)開發(fā)目標(biāo)是服務(wù)于藥品庫房管理人員,方便工作人員,對過往藥品存放,發(fā)放收費(fèi)票據(jù)記錄,對信息的分類管理等,同時(shí)力求做到界面人性化,功能齊全,數(shù)據(jù)存儲(chǔ)安全。功能劃分:藥品管理系統(tǒng)分為系統(tǒng)用戶管理、藥品銷售管理、藥品庫存管理、進(jìn)貨管理、職工管理、查詢與報(bào)表分析。2.3系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)圖:系統(tǒng)程序登陸系統(tǒng)程序登陸主界面出庫入庫數(shù)據(jù)維護(hù)窗口幫助2.4非功能性需求分析:為了保證系統(tǒng)能夠長期、安全、穩(wěn)定、可靠、高效的運(yùn)行,藥品管理系統(tǒng)應(yīng)該滿足以下的性能需求:(1)、系統(tǒng)處理的準(zhǔn)確性和及時(shí)性系統(tǒng)處理的準(zhǔn)確性和及時(shí)性是系統(tǒng)的必要性能。在系統(tǒng)設(shè)計(jì)和開發(fā)過程中,要充分考慮系統(tǒng)當(dāng)前和將來可能承受的工作量,使系統(tǒng)的處理能力和響應(yīng)時(shí)間能夠滿足學(xué)校對信息處理的需求。(2)、系統(tǒng)的開放性和系統(tǒng)的可擴(kuò)充性藥品管理系統(tǒng)在開發(fā)過程中,應(yīng)該充分考慮以后的可擴(kuò)充性。例如用戶查詢的需求也會(huì)不斷的更新和完善。所有這些,都要求系統(tǒng)提供足夠的手段進(jìn)行功能的調(diào)整和擴(kuò)充。而要實(shí)現(xiàn)這一點(diǎn),應(yīng)經(jīng)過系統(tǒng)的開放性來完成,既系統(tǒng)應(yīng)是一個(gè)開放系統(tǒng),只要符合一定的規(guī)范,能夠簡單的加入和減少系統(tǒng)的模塊,配置系統(tǒng)的硬件。經(jīng)過軟件的修補(bǔ)、替換完成系統(tǒng)的升級(jí)和更新?lián)Q代。(3)、系統(tǒng)的易用性和易維護(hù)性圖書管理系統(tǒng)是直接面對使用人員的,而使用人員往往對計(jì)算機(jī)并不時(shí)非常熟悉。這就要求系統(tǒng)能夠提供良好的用戶接口,易用的人機(jī)交互界面。要實(shí)現(xiàn)這一點(diǎn),就要求系統(tǒng)應(yīng)該盡量使用用戶熟悉的術(shù)語和中文信息的界面;針對用戶可能出現(xiàn)的使用問題,要提供足夠的在線幫助,縮短用戶對系統(tǒng)熟悉的過程。(4)、系統(tǒng)的標(biāo)準(zhǔn)性系統(tǒng)在設(shè)計(jì)開發(fā)使用過程中都要涉及到很多計(jì)算機(jī)硬件、軟件。所有這些都要符合主流國際、國家和行業(yè)標(biāo)準(zhǔn)。(5)、系統(tǒng)的先進(jìn)性當(dāng)前計(jì)算系統(tǒng)的技術(shù)發(fā)展相當(dāng)快,作為藥品管理系統(tǒng)工程,在系統(tǒng)的生命周期盡量做到系統(tǒng)的先進(jìn),充分完成企業(yè)信息處理的要求而不至于落后。這一方面經(jīng)過系統(tǒng)的開放性和可擴(kuò)充性,不斷改進(jìn)系統(tǒng)的功能完成。另一方面,在系統(tǒng)設(shè)計(jì)和開發(fā)的過程中,應(yīng)在考慮成本的基礎(chǔ)上盡量采用當(dāng)前主流并先進(jìn)且有良好發(fā)展前途的產(chǎn)品。(6)、系統(tǒng)的響應(yīng)速度藥品管理系統(tǒng)系統(tǒng)在日常處理中的響應(yīng)速度為秒級(jí),達(dá)到實(shí)時(shí)要求,以及時(shí)反饋信息。在進(jìn)行統(tǒng)計(jì)分析時(shí),根據(jù)所需數(shù)據(jù)量的不同而從秒級(jí)到分鐘級(jí),原則是保證操作人員不會(huì)因?yàn)樗俣葐栴}而影響工作效率。第三章詳細(xì)設(shè)計(jì)

3.1程序流程圖依據(jù)軟件工程的基本原理,詳細(xì)設(shè)計(jì)階段的根本任務(wù)是確定應(yīng)該怎樣具體實(shí)現(xiàn)所要求的系統(tǒng),也就是說,經(jīng)過這個(gè)階段的設(shè)計(jì)工作,應(yīng)該得出對目標(biāo)系統(tǒng)的精確描述,從而在系統(tǒng)實(shí)現(xiàn)階段能夠把這個(gè)描述直接翻譯成用某種程序設(shè)計(jì)語言書寫的程序。具體來說就是把經(jīng)過總體設(shè)計(jì)得到的各個(gè)模塊詳細(xì)的加以描述。本系統(tǒng)采用支持面向?qū)ο蟮腅clipse作為開發(fā)工具,運(yùn)用了J2SE的SWing的技術(shù),更加的方便了程序員的工作。程序?qū)ο到y(tǒng)配置要求較高。在此給出軟件系統(tǒng)的主要模塊 職工管理壞貨轉(zhuǎn)移進(jìn)貨管理用戶管理銷售管理 職工管理壞貨轉(zhuǎn)移進(jìn)貨管理用戶管理銷售管理 主程序模塊圖根據(jù)以上主程序的模塊圖,我們能夠得出下面的關(guān)于各個(gè)模塊的程序流程圖結(jié)束退出系統(tǒng)職工管理壞貨轉(zhuǎn)移進(jìn)貨管理銷售管理用戶管理管理員系統(tǒng)管理員用戶類型開始結(jié)束退出系統(tǒng)職工管理壞貨轉(zhuǎn)移進(jìn)貨管理銷售管理用戶管理管理員系統(tǒng)管理員用戶類型開始說明:用戶登陸系統(tǒng)時(shí),系統(tǒng)判斷用戶的級(jí)別,如果為系統(tǒng)管理員,則能夠進(jìn)行用戶的用戶管理,如果是管理員,則能夠進(jìn)行相應(yīng)的銷售管理,進(jìn)貨管理,壞貨轉(zhuǎn)移,職工管理,管理員點(diǎn)擊退出按鈕時(shí),退出系統(tǒng)用戶管理用戶核對用戶登陸用戶管理用戶核對用戶登陸用戶管理操作用戶管理操作 用戶登陸流程圖說明:用戶根據(jù)已知的用戶名和密碼登錄系統(tǒng),只有登錄成功才能進(jìn)行系列的用戶管理、庫存管理、銷售管理,職工管理的操作。用戶用戶核對藥品信息核對藥品信息藥品添加 藥品添加藥品表藥品表 藥品創(chuàng)始流程圖庫存表庫存創(chuàng)始庫存管理用戶 庫存表庫存創(chuàng)始庫存管理用戶 操作失敗 操作成功 存貨創(chuàng)始流程圖核對信息銷售管理用戶 核對信息銷售管理用戶 操作失敗 操作成功庫存表庫存表銷售流程圖用戶庫存表核對信息壞貨轉(zhuǎn)移 用戶庫存表核對信息壞貨轉(zhuǎn)移 錄入壞貨信息 操作失敗 操作成功 成功壞貨轉(zhuǎn)移流程圖說明:用戶登陸后進(jìn)行藥品的相關(guān)管理,經(jīng)過藥品創(chuàng)始,為系統(tǒng)初始化一些藥品及添加新的代售藥品。經(jīng)過存貨創(chuàng)始將具體進(jìn)貨的藥品錄入庫存中,銷售成功則對庫存做相應(yīng)的修改。當(dāng)藥品損壞或者過期時(shí),應(yīng)當(dāng)對庫存做相應(yīng)的調(diào)整核對信息職員管理用戶 核對信息職員管理用戶 錄入職員信息 操作成功 失敗 成功職員列表職員列表 圖4.7職員管理圖說明:管理員經(jīng)過職工管理模塊進(jìn)行職工的管理,添加職工后,錄入到職員列表中。3.2系統(tǒng)體系結(jié)構(gòu)3.2.1用戶登陸模塊1.輸入項(xiàng)目:輸入用戶名及密碼。2.輸出項(xiàng)目:打開系統(tǒng)。3.2.2用戶管理模塊1.輸入項(xiàng)目:與用戶相關(guān)的所有信息。2.輸出項(xiàng)目:操作結(jié)果的顯示,出錯(cuò)彈出對話框。3.2.3銷售管理模塊1.輸入項(xiàng)目:選擇藥品編號(hào),藥品的進(jìn)銷價(jià)格。2.輸出項(xiàng)目:操作結(jié)果的顯示,出錯(cuò)彈出對話框。3.2.4進(jìn)貨管理模塊1.進(jìn)貨項(xiàng)目:供應(yīng)商的詳細(xì)信息,倉庫的詳細(xì)信息,藥品的數(shù)量。2.輸出項(xiàng)目:藥品的有關(guān)資料的顯示,進(jìn)貨單列表3.2.5壞貨管理模塊1.輸入項(xiàng)目:發(fā)生意外無法使用的藥品編號(hào)。2.輸出項(xiàng)目:操作結(jié)果的顯示。3.2.6職工管理模塊1.輸入項(xiàng)目:職工的詳細(xì)信息。2.輸出項(xiàng)目:根據(jù)用戶的輸入顯示相應(yīng)的結(jié)果。第四章數(shù)據(jù)庫設(shè)計(jì)4.1數(shù)據(jù)庫邏輯設(shè)計(jì)4.1.1數(shù)據(jù)庫的概念結(jié)構(gòu)設(shè)計(jì)和ER圖在需求分析階段已完成該系統(tǒng)所有的數(shù)據(jù)分析。根據(jù)該階段所建立的概念模型,已經(jīng)得出滿足系統(tǒng)設(shè)計(jì)要求的幾個(gè)關(guān)系描述,該階段的主要工作就是把前一階段的成果轉(zhuǎn)化為具體的數(shù)據(jù)庫。概念結(jié)構(gòu)設(shè)計(jì)就是要找出實(shí)體和她們之間的聯(lián)系,去除非本質(zhì)的東西。實(shí)體是名詞,在ER圖中設(shè)計(jì)中就是所說的表。比如”藥品”,”庫存”。

行為是動(dòng)詞,在ER圖中設(shè)計(jì)時(shí)一般不考慮行為,它是業(yè)務(wù)邏輯,在詳細(xì)設(shè)計(jì)才有設(shè)計(jì),是方法。比如”銷售”,”進(jìn)貨”等等。

在設(shè)計(jì)ER圖時(shí)時(shí)強(qiáng)調(diào)的是不同實(shí)體之間關(guān)系,不是行為。比如:藥品"銷售"庫存,”轉(zhuǎn)移”是一種關(guān)系,不是行為。在某種情況下,”銷售”是一個(gè)關(guān)系表,將”藥品”和”庫存”聯(lián)系起來。

在找出實(shí)體后,我們要根據(jù)分析來定義實(shí)體的屬性,就是表的列。比如藥品有ID,名稱,進(jìn)價(jià),銷價(jià),簡介等等;庫存有ID,名稱,數(shù)量等等?!睅齑妗笨蓳碛?-MANY的”藥品”,而藥品同樣屬于0-MANY的庫存。因此是多對多的關(guān)系根據(jù)以上的分析給出下面的概念結(jié)構(gòu)設(shè)計(jì)得E-R圖如圖4.3所示。 第五章編碼實(shí)現(xiàn)5.1用戶登錄模塊用戶登陸界面如圖5.1所示: 圖5.1藥品登陸界面關(guān)鍵代碼如下://顯示出圖形界面,Login.javapublicLogin(Stringmsg){ super(msg); setLayout(newBorderLayout()); login_message=newJTextField("用戶登陸"); login_message.setEditable(false); login=newJButton("登陸"); regeist=newJButton("注冊"); setVisible(true); add(login_message,"North"); JPanelbtn=newJPanel(); btn.setLayout(newGridLayout(1,2)); btn.add(login); btn.add(regeist); add(btn,"South"); JPanelinput=newJPanel(); JLabelunameLabel=newJLabel("用戶名:"); uname=newJTextField("",20); JLabelpwdLabel=newJLabel("密碼:"); pwd=newJPasswordField("",20); input.setLayout(newGridLayout(2,2)); input.add(unameLabel); input.add(uname); input.add(pwdLabel); input.add(pwd); add(input,"Center"); login.addActionListener(newloginListener()); regeist.addActionListener(newregeistListener()); } classloginListenerimplementsActionListener{ publicvoidactionPerformed(ActionEventevent){ UserDaoud=newUserDao(); if(ud.login(uname.getText().trim(),pwd.getText().trim())){ newMainGui().start(); setVisible(false); }else{ JOptionPane.showMessageDialog(null,"您的輸入不正確,請重輸","警告",1); } } loginListener(){ } }//數(shù)據(jù)庫中檢查是使用UserDao.javapublicbooleanlogin(Stringusername,Stringpassword){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="select*fromuserwhereusername='"+username+"'"; ResultSetrs=DB.getResultSet(stmt,sql); try{ while(rs.next()){ Stringdbpassword=rs.getString("password"); if(dbpassword!=null&&dbpassword.equals(password)) returntrue; } }catch(SQLExceptione){ System.out.println("用戶登陸連接數(shù)據(jù)庫異常,系統(tǒng)退出"); System.exit(-1); } returnfalse; }5.2用戶管理模塊用戶管理界面5.2所示:圖5.2用戶管理界面關(guān)鍵代碼如下:(點(diǎn)擊”續(xù)接”時(shí)系統(tǒng)執(zhí)行的操作)//UserDao.java//用戶注冊publicbooleanregeist(Useruser){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="insertintouser(username,password,rank)values('"+user.getUsername()+"','"+user.getPassword()+"',"+user.getRank()+")"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"添加失敗,您輸入的用戶已存在","警告",1); returnfalse; } JOptionPane.showMessageDialog(null,"恭喜您,添加成功","恭喜",1); returntrue;} //查詢用戶publicString[]findUser(){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="select*fromuser"; String[]userlist=newString[128]; System.out.println(sql); try{ ResultSetrs=stmt.executeQuery(sql); inti=0; while(rs.next()){ userlist[i]=rs.getString("username"); i++; } }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"查找用戶失敗","警告",1); returnnull; } returnuserlist;}//刪除用戶publicbooleandelUser(Stringusername){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="deletefromuserwhereusername='"+username+"'andrank=0"; String[]userlist=newString[]{}; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"刪除用戶失敗","警告",1); returnfalse; } returntrue;} //修改用戶publicbooleanmodify(Useruser){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="updateusersetusername='"+ user.getUsername()+"',password='"+ user.getPassword()+"',rank="+user.getRank()+" whereusername='"+user.getUsername()+"'"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"修改失敗","警告",1); returnfalse; } JOptionPane.showMessageDialog(null,"恭喜您,修改成功","恭喜",1); returntrue;}//顯示模塊com.ahut.frame.usermgr用戶添加核心代碼://顯示用戶添加界面JPaneleditPanel=newJPanel();editPanel.setBorder(BorderFactory.createTitledBorder("添加用戶"));editPanel.setLayout(newGridLayout(2,1));JPanelupPanel=newJPanel();upPanel.setBorder(BorderFactory.createTitledBorder("用戶信息"));upPanel.setLayout(newGridLayout(3,1));JPaneljp1=newJPanel();JPaneljp2=newJPanel();JPaneljp3=newJPanel(); jp1.add(newJLabel("用戶名"));username=newJTextField("",8);password=newJPasswordField("",8);password2=newJPasswordField("",8);jp1.add(username);upPanel.add(jp1);jp2.add(newJLabel("密碼"));jp2.add(password);jp3.add(newJLabel("再次密碼"));jp3.add(password2);upPanel.add(jp2);upPanel.add(jp3);editPanel.add(upPanel); JPaneladdUserSubmitPanel=newJPanel();JButtonaddUserSubmitBtn=newJButton("提交");JButtonaddUserCancelBtn=newJButton("取消");addUserSubmitPanel.add(addUserSubmitBtn);addUserSubmitPanel.add(addUserCancelBtn);editPanel.add(addUserSubmitPanel);addUserSubmitBtn.addActionListener(newaddUserSubmitListener());addUserCancelBtn.addActionListener(newaddUserCancelListener());add(editPanel,BorderLayout.CENTER);//提交用戶添加時(shí)執(zhí)行的操作publicclassaddUserSubmitListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ System.out.println("==="+password.getText().trim()+"===="); if(password.getText().trim().equals("")||!password.getText().trim().equals(password2.getText().trim())){ JOptionPane.showMessageDialog(null,"輸入不正確","警告",1); }else{ Useruser=newUser(); user.setUsername(username.getText().trim()); user.setPassword(password.getText().trim()); user.setRank(0); UserDaoud=newUserDao(); ud.regeist(user); } }//用戶修改的核心代碼://核心代碼:JPaneleditPanel=newJPanel(); editPanel.setLayout(newGridLayout(0,2)); editPanel.setBorder(BorderFactory.createTitledBorder("修改用戶")); JPanelleftPanel=newJPanel(); leftPanel.setLayout(newGridLayout(0,1)); leftPanel.setBorder(BorderFactory.createTitledBorder("用戶列表")); UserDaoud=newUserDao(); userlist=newJList(ud.findUser()); leftPanel.add(newJScrollPane(userlist,22,31)); userlist.addListSelectionListener(newuserlistListener()); editPanel.add(leftPanel); JPanelrightPanel=newJPanel(); rightPanel=newJPanel(newBorderLayout()); rightPanel.setBorder(BorderFactory.createTitledBorder("用戶信息")); rightPanel.setLayout(newFlowLayout()); unfld=newJTextField("",8); pwdfld=newJTextField("",8); rankfld=newJTextField("",8); JPaneljPanel1=newJPanel(newGridLayout(0,1)); jPanel1.add(newJLabel("用戶名:")); jPanel1.add(newJLabel("密碼:")); jPanel1.add(newJLabel("權(quán)限:")); JPaneljPanel2=newJPanel(newGridLayout(0,1)); jPanel2.add(unfld); jPanel2.add(pwdfld); jPanel2.add(rankfld); rightPanel.add(jPanel1,"West"); rightPanel.add(jPanel2,"East"); editPanel.add(rightPanel); add(editPanel,BorderLayout.CENTER); JPanelmodifyUserSubmitPanel=newJPanel(); JButtonmodifyUserSubmitBtn=newJButton("修改用戶"); modifyUserSubmitPanel.add(modifyUserSubmitBtn); add(modifyUserSubmitPanel,BorderLayout.SOUTH);//監(jiān)聽器publicclassmodifyUserSubmitListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ if(username==null||username.equals("")){ JOptionPane.showMessageDialog(null,"未選中用戶","警告",1); }else{ inti=JOptionPane.showConfirmDialog(null,"是否修改該用戶?修改將無法恢復(fù)!","警告",0); if(i==1)return; UserDaoud=newUserDao(); Useruser=newUser(); user.setUsername(unfld.getText().trim()); user.setPassword(pwdfld.getText().trim()); if(rankfld.getText().trim().equals("系統(tǒng)管理員")){ user.setRank(1); }else{ user.setRank(0); } ud.modify(user); } }5.3銷售管理模塊銷售管理界面如圖5.3所示 圖5.3銷售界面關(guān)鍵代碼如下:(點(diǎn)擊”銷售”時(shí)系統(tǒng)執(zhí)行的操作)//DAO中的處理publicbooleansales(SalesOrderso){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="insertintosalesordervalues('"+so.getSoid()+"','" +so.getMid()+"','"+so.getMname()+"','" +so.getNum()+"',"+so.getPrice()+")"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); returnfalse; } returntrue;}//com.ahut.frame.salesMgr包中執(zhí)行的操作publicclassbuyListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ for(intn=0;n<order.length;n++){ if(order[n]!=null&&!order[n].equals("")){ Stringmsg=order[n]; StringTokenizerstnizer=newStringTokenizer(msg,","); inti1=Integer.parseInt(stnizer.nextToken()); Stringname1=stnizer.nextToken(); Stringpricestr=stnizer.nextToken(); StringTokenizerstnizerprice=new StringTokenizer(pricestr,"元"); floatprice1= Float.parseFloat(stnizerprice.nextToken()); SalesOrdersod=newSalesOrder(); sod.setSoid(name1); sod.setMid(name1); sod.setMname(name1); sod.setNum(1); sod.setPrice(price1); SalesOrderDaosodao=newSalesOrderDao(); sodao.regeist(sod); StockDaostockdao=newStockDao(); stockdao.modifyNum(name1); stocklist.setListData(stockdao.findStock()); } } JOptionPane.showMessageDialog(null,"銷售成功了","警告",1); }}5.4進(jìn)貨管理模塊 圖5.4藥品管理界面核心代碼:(添加藥品及加入庫存)//添加藥品Dao中publicbooleanregeist(Medicinemedicine){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="insertintomedicinevalues('"+medicine.getMid()+"','" +medicine.getMname()+"','"+medicine.getMshortname()+"','" +medicine.getMnors()+"','"+medicine.getMarea()+"','" +medicine.getMlot()+"',"+medicine.getMinpri()+"," +medicine.getMwpri()+","+medicine.getMrpri()+",'" +medicine.getMcon()+"','"+medicine.getMcate()+"'," +medicine.getMusetime()+",'"+medicine.getMemo()+"')"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"您的輸入不正確","警告",1) returnfalse; } returntrue;}//添加藥品frame中publicclassAddMedButtonListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ try{ Medicinemedicine=newMedicine(); medicine.setMarea(marea.getText().trim()); medicine.setMcate(mcate.getText().trim()); medicine.setMcon(mcon.getText().trim()); medicine.setMemo(memo.getText().trim()); medicine.setMid(mid.getText().trim()); medicine.setMinpri(Float.parseFloat(minpri.getText()); medicine.setMlot(mlot.getText().trim()); medicine.setMname(mname.getText().trim()); medicine.setMnors(mnors.getText().trim()); medicine.setMrpri(Float.parseFloat(mrpri.getText()); medicine.setMshortname(mshortname.getText()); medicine.setMusetime(Integer.parseInt(musetime.getText()); medicine.setMwpri(Float.parseFloat(mwpri.getText()); MedDaomd=newMedDao(); if(md.regeist(medicine)){ JOptionPane.showMessageDialog(null,"藥品添加成功","恭喜",1); } }catch(Exceptione2){ e2.printStackTrace(); JOptionPane.showMessageDialog(null,"您的輸入不正確","警告",1); } }}//加入庫存frame中publicclassbuyButtonListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ try{ Stockstock=newStock(); stock.setMid(mid.getText().trim()); stock.setMname(mname.getText().trim()); stock.setMnum(Integer.parseInt(num.getText().trim())); stock.setMprice(Float.parseFloat(price.getText().trim())); stock.setSpid(spid.getText().trim()); Calendarc=Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMillis()); java.util.Dated=c.getTime(); stock.setTime(d); StockDaosd=newStockDao(); if(sd.regeist(stock)){ JOptionPane.showMessageDialog(null,"進(jìn)貨成功","恭喜",1); } }catch(Exceptione2){ e2.printStackTrace(); JOptionPane.showMessageDialog(null,"您的輸入不正確","警告",1); } }}//加入庫存DAO中publicbooleanadd(Stockstock){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="insertintostockvalues('"+stock.getMid()+"','"+stock.getMname()+"',"+stock.getMprice()+","+stock.getMnum()+",'"+stock.getSpid()+"',curdate()"+",0)"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"操作失敗","警告",1); returnfalse; } returntrue;}5.5職工管理模塊 圖5.5藥品修改界面核心代碼:(修改職工信息)//DAO中修改職工信息publicbooleanmodify(Staffstaff){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="updatestaffsetstaffid='"+staff.getStaffid()+"',staffname='"+staff.getStaffname()+"',staffsex='"+taff.getStaffsex()+"',stafftel='" +staff.getStafftel()+"',staffadd='"+staff.getStaffadd()+"',staffcard='"+staff.getStaffcard()+"',staffzip='"+staff.getStaffzip()+"'wherestaffid='"+staff.getStaffid()+"'"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"修改失敗","警告",1); returnfalse; } JOptionPane.showMessageDialog(null,"恭喜您,修改成功","恭喜",1); returntrue;}//FRAME中監(jiān)聽修改用戶按鈕的處理流程publicclassmodifyStfListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ if(staffname==null||staffname.equals("")){ JOptionPane.showMessageDialog(null,"未選中用戶","警告",1); }else{ inti=JOptionPane.showConfirmDialog(null,"是否修改該職員?修改將無法恢復(fù)!","警告",0); if(i==1) return; StaffDaosd=newStaffDao(); Staffstaff=newStaff(); staff.setStaffid(staffid.getText().trim()); staff.setStaffname(stfname.getText().trim()); staff.setStaffsex(staffsex.getText().trim()); staff.setStafftel(stafftel.getText().trim()); staff.setStaffadd(staffadd.getText().trim()); staff.setStaffcard(staffcard.getText().trim()); staff.setStaffzip(staffzip.getText().trim()); sd.modify(staff); } }}5.6壞貨轉(zhuǎn)移模塊 圖5.6壞貨轉(zhuǎn)移界面核心代碼:(對發(fā)生以外的和過期的藥品的處理)//按鈕的事件響應(yīng)publicclassoutOfDateListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ StockDaosd=newStockDao(); String[]mnamelist=sd.findOFDStock(); sd.OFDTranStock(mnamelist); JOptionPane.showMessageDialog(null,"成功","恭喜",1); stocklist.setListData(newString[]{}); }}//數(shù)據(jù)庫DAO中的操作publicvoidOFDTranStock(String[]mnamelist){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); for(inti=0;i<mnamelist.length;i++){ if(mnamelist[i]!=null&&!mnamelist[i].equals("")){ Stringsql="updatestocksetstatus=1wheremname='"+mnamelist[i]+"'"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"失敗","警告",1); } }}第六章系統(tǒng)測試以及軟件安裝6.1軟件測試基礎(chǔ)理論軟件測試就是在受控制的條件下對系統(tǒng)或應(yīng)用程序進(jìn)行操作并評價(jià)操作結(jié)果的過程,所謂控制條件應(yīng)包括正常條件與非正常條件。

軟件測試過程中應(yīng)該故意地去促使錯(cuò)誤的發(fā)生,也就是事情在不該出現(xiàn)的時(shí)候出現(xiàn)或者在應(yīng)該出現(xiàn)的時(shí)候沒有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論