JAVA藥品管理系統(tǒng)大學(xué)論文_第1頁
JAVA藥品管理系統(tǒng)大學(xué)論文_第2頁
JAVA藥品管理系統(tǒng)大學(xué)論文_第3頁
JAVA藥品管理系統(tǒng)大學(xué)論文_第4頁
JAVA藥品管理系統(tǒng)大學(xué)論文_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

目錄

TOC\o”1-3"\h\z\uHYPERLINK\l”_Toc317929409”第一章概述 10HYPERLINK\l”_Toc317929410”第一章概述 10HYPERLINK\l”_Toc317929411”盡量采用現(xiàn)有軟硬件環(huán)境,及先進的管理系統(tǒng)開發(fā)方案,提高系統(tǒng)開發(fā)水平和應(yīng)用效果的目的。系統(tǒng)應(yīng)符合企業(yè)管理的規(guī)定,滿足日常管理的需要,并達(dá)到操作過程中的直觀、方便、實用、安全等要求,系統(tǒng)采用模塊化程序設(shè)計方法,這樣既便于系統(tǒng)功能的各種組合,又便于未參與開發(fā)的技術(shù)維護人員補充,維護.系統(tǒng)應(yīng)具備數(shù)據(jù)庫維護功能,及時根據(jù)用戶需求進行數(shù)據(jù)的添加,刪除,修改等操作。 101。2開發(fā)環(huán)境 10HYPERLINK\l”_Toc317929414"第二章需求分析 12HYPERLINK\l”_Toc317929415"2.1任務(wù)概述 12HYPERLINK\l”_Toc317929416”2。2功能需求 12HYPERLINK\l”_Toc317929417”2。3性能需求 13HYPERLINK\l”_Toc317929418"2。4數(shù)據(jù)描述(數(shù)據(jù)流圖+數(shù)據(jù)字典) 13圖2.2管理人員的數(shù)據(jù)流圖 14_Toc317929424"消費者通過選購,選購好合適的藥品,到管理者處登記結(jié)賬,發(fā)生銷售管理。管理者通過藥品編號,錄入系統(tǒng)需要銷售的數(shù)量,系統(tǒng)生成倉庫中是否有足夠的藥品。發(fā)生銷售之后產(chǎn)生銷售單和銷售金額,消費者付款拿貨。銷售管理完成。 15HYPERLINK\l”_Toc317929425"當(dāng)消費者發(fā)現(xiàn)購買的藥品不符合要求,管理者在認(rèn)真核實之后,予以退款,發(fā)生退貨。此時管理者要在系統(tǒng)的壞貨轉(zhuǎn)移中,將不合格藥品轉(zhuǎn)移到不合格倉庫中。 16HYPERLINK\l”_Toc317929426” 16HYPERLINK\l”_Toc317929427"圖2。4系統(tǒng)數(shù)據(jù)流圖 16HYPERLINK\l”_Toc317929428” 16圖2.5詳細(xì)數(shù)據(jù)流圖 16HYPERLINK\l”_Toc317929430"第三章系統(tǒng)總體設(shè)計 20HYPERLINK\l”_Toc317929431”3.1業(yè)務(wù)流程 203。2系統(tǒng)功能模塊圖 20HYPERLINK\l”_Toc317929433”3。3系統(tǒng)流程圖 22HYPERLINK\l”_Toc317929434"第四章詳細(xì)設(shè)計 234.1程序流程圖 234。2程序輸入輸出描述 28HYPERLINK\l”_Toc317929437”4.2.1用戶登陸模塊 28_Toc317929439"4.2。3銷售管理模塊 28HYPERLINK\l”_Toc317929440"4。2.4進貨管理模塊 284。2。5壞貨管理模塊 28HYPERLINK\l”_Toc317929442"4.2。6職工管理模塊 28HYPERLINK\l”_Toc317929443"4。3數(shù)據(jù)庫的設(shè)計 294.3.1數(shù)據(jù)庫的概念結(jié)構(gòu)設(shè)計和ER圖 29HYPERLINK\l”_Toc317929445"4。3。2數(shù)據(jù)庫的邏輯設(shè)計 31HYPERLINK\l”_Toc317929446”4。3。3數(shù)據(jù)庫的物理設(shè)計 32HYPERLINK\l”_Toc317929447”第五章編碼實現(xiàn) 365。1用戶登陸模塊 36HYPERLINK\l”_Toc317929449"5。2用戶管理模塊 385。4進貨管理模塊 45HYPERLINK\l”_Toc317929452” 45HYPERLINK\l”_Toc317929453"圖5。4藥品管理界面 45核心代碼:(添加藥品及加入庫存) 45_Toc317929458"圖5.5藥品修改界面 48HYPERLINK\l”_Toc317929459"核心代碼:(修改職工信息) 485。6壞貨轉(zhuǎn)移模塊 50HYPERLINK\l”_Toc317929461”6.1什么是軟件測試 52HYPERLINK\l”_Toc317929462”6。2軟件測試的目的 52HYPERLINK\l”_Toc317929463"6.3測試計劃和要點 52_Toc317929465”6。3.2銷售管理模塊測試要點 52HYPERLINK\l”_Toc317929466"6。3.3進貨管理模塊測試要點 52_Toc317929468”6.4部分測試圖 52致謝 57附錄:部分程序代碼 58摘要大家只要看了新聞,就可以了解到21世紀(jì)是信息的世紀(jì),信息化正以極快的速度取代傳統(tǒng)的效率低下的人工作業(yè)。隨著小型計算機,微型計算機的成本的不斷下降,性能的不斷提升,使得計算機作為當(dāng)今最重要的信息產(chǎn)品,成為人民大眾必不可缺的工具。計算機技術(shù)已經(jīng)廣泛應(yīng)用于日常辦公,企業(yè)管理,文字處理、電子報表以及進行簡單的人事管理、財務(wù)管理等,大大提高了我們的工作效率,節(jié)省許多資源,使管理更加規(guī)范化,系統(tǒng)化,科學(xué)化。目前隨著計算機技術(shù)的發(fā)展和普及,各行各業(yè)的管理機構(gòu)開始使用計算機處理大量信息.在我國藥品品種繁多,規(guī)模甚大,以往的手工記載、查詢操作容易出錯且工作效率低,已經(jīng)不能適應(yīng)時代發(fā)展的要求,從管理的角度來看,對管理者會造成諸多的不便,還有可能疏忽一些細(xì)節(jié),讓不法商家逃脫罪責(zé)。所以,市場迫切需要一款簡單實用的藥品管理系統(tǒng)。

經(jīng)過前期的調(diào)研,在反復(fù)的修改和綜合考量后,筆者覺定使用JAVASWING技術(shù),ECLIPSEJ2SE開發(fā)平臺,MYSQL5.0數(shù)據(jù)庫開發(fā)藥品管理系統(tǒng)。藥品管理系統(tǒng)的設(shè)計理念是,讓企業(yè)能夠擁有更高效的管理工具,使企業(yè)在21世紀(jì)異常激烈的競爭中脫穎而出。國外的管理系統(tǒng)有許多優(yōu)秀的經(jīng)驗,但是并不完全符合我國的國情,我國的最廣大藥品銷售的企業(yè)是分布在全國各地的中小型銷售企業(yè).所以,此次開發(fā)的藥品管理系統(tǒng)功能乃是汲取了外國優(yōu)秀管理工具的優(yōu)秀功能,同時又創(chuàng)新了更符合我國用戶需求的功能的一個綜合信息管理系統(tǒng)。藥品管理系統(tǒng)分為五大模塊,分別為系統(tǒng)用戶模塊,職工信息管理模塊,進貨管理模塊,銷售管理模塊,庫存轉(zhuǎn)移管理模塊。該五大功能模塊設(shè)計合理,功能全面,同時界面友好,非常符合我國各大小型藥品銷售企業(yè)的管理需求.但由于時間倉促以及筆者找工作實習(xí)的原因,系統(tǒng)還不是很完善,和市場上一些成熟的產(chǎn)品比較仍然有不足之處。今后筆者將利用工作休息時間,學(xué)習(xí)新的技術(shù)和設(shè)計理念,對藥品管理系統(tǒng)進行深入的二次迭代開發(fā),目標(biāo)是在今后三個月使代碼更加規(guī)范,界面更加美觀,程序的可拓展性進一步增強,更加與市場接軌,然后發(fā)布到ChinaJavaWorld上開源供大家免費下載使用和學(xué)習(xí)。

關(guān)鍵詞:JAVASWING、MYSQL5。0、JDBC、藥品管理管理系統(tǒng)、藥品管理

AbstractIfyouseethenews,theycanunderstandthe21stcenturyisthecenturyofinformation,Informationtechnologyiswithgreatspeedinsteadoftraditionalinefficientartificiallyassignments.Withsmallcomputer,microcomputercostofdeclining,performance,makesthecomputerasthemostimportantinformationproduct,becomeindispensableforthemassesoftools.Computertechnologyhasbeenwidelyusedindailyoffice,enterprisemanagement,wordprocessing,spreadsheetsandsimplepersonnelmanagement,financialmanagement,andgreatlyimproveourworkefficiency,savingmanyresources,makemanagementstandardization,systematization,morescientific。Nowwiththedevelopmentofcomputertechnologyandpopularizationofthemanagementinstitution,tencentstartedusingcomputerprocessingofinformation.Inourcountry,thegreatvarietyofscale,pastrecords,queryoperationmanualandlowworkingefficiencyerror-prone,alreadycannotadapttothedevelopmentofTheTimes,frommanagementpointofview,themanagerwillcausemanyinconvenience,theremaybesomedetails,lettheillegalbusinessmentoescape。Therefore,asimpleandpracticaldrugmanagementsystemisverymuchinlinewiththeneedsofthemarket.Throughtheresearchonthemodification,andcomprehensiveconsiderationsrepeatedly,theauthordeterminedafteruseJAVASWINGtechnology,MYSQL5.0ECLIPSEJ2SEJAVAdevelopmentplatform,thedrugadministrationsystemdatabasedevelopment.Drugmanagementsystemisdesigned,makeenterprisecanhavemoreefficientmanagementtools,enterpriseinthe21stcenturythefiercecompetition。Foreignmanagementsystemhasmanyexcellentexperience,butnotcompletelyaccordwiththenationalconditionofourcountry,China’svastdrugsalesenterpriseisdistributedinthesmallandmedium-sizedenterprisesnationwidesales.Therefore,thedevelopmentofmedicinemanagementsystemfunctionisabsorbedforeignoutstandingmanagementtoolsandexcellentfunction,theinnovationofourcustomersdemandmoreaccordwithacomprehensivefunctionsofinformationmanagementsystem。Drugmanagementsystemisdividedintofivemodules,respectively,theworkersystemuserinformationmanagementmodule,stockmanagementmodule,modules,stocktransfersalesmanagementmodulemanagementmodule。Thefivefunctionmoduledesignisreasonable,comprehensivefunctions,andfriendlyinterface,verylargepharmaceuticalsalesinconformitywiththerequirementsoftheenterprisemanagement.Butduetolackoftimeandthepracticeofthejob,systemisnotperfect,andsomematureproductsonthemarketisstillhassomeshortcomings.Futureworkwillusetheresttime,learningnewtechnologyanddesignconceptofdrugadministrationsystem,furtherdevelopmentiteration,thesecondgoalinthenextthreemonthsaremorestandardcode,theinterfaceoftheprogramcanbemorebeautiful,expandingfurtherstrengthens,morewithmarket,andthenreleasedtotheChinaopenforWorldJavaonlearningandusingfreedownload。Keywords:JavaSwing、Mysql5。5、JDBC、MedMgrSystem、Medicinesales&mgr

QQ:306826066優(yōu)秀畢業(yè)設(shè)計網(wǎng)HYPERLINK”"畢業(yè)設(shè)計資料網(wǎng)畢業(yè)設(shè)計論文網(wǎng),“庫存”。

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

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

在找出實體后,我們要根據(jù)分析來定義實體的屬性,就是表的列。比如藥品有ID,名稱,進價,銷價,簡介等等;庫存有ID,名稱,數(shù)量等等。“庫存"可擁有0-MANY的“藥品”,而藥品同樣屬于0-MANY的庫存。所以是多對多的關(guān)系根據(jù)以上的分析給出下面的概念結(jié)構(gòu)設(shè)計得E-R圖如圖4。3所示。用戶表用戶表權(quán)限權(quán)限用戶名用戶名用戶名用戶名圖4.8用戶E-R圖有效期有效期零售商別名零售商別名藥品表零售價藥品表零售價ID批發(fā)價ID批發(fā)價藥品名藥品名備注進價產(chǎn)地備注進價產(chǎn)地規(guī)格類別規(guī)格類別圖4。9藥品E-R圖供應(yīng)商供應(yīng)商備注備注地區(qū)編號地區(qū)編號供應(yīng)商名供應(yīng)商名圖4。10供應(yīng)商E—R圖庫存表庫存表藥品名藥品編號藥品名藥品編號零售價零售價數(shù)量供應(yīng)商編號數(shù)量供應(yīng)商編號圖4。11庫存E—R圖價格銷售單價格銷售單銷售單編號銷售單編號數(shù)量數(shù)量藥品名藥品ID藥品名藥品ID圖4.12供應(yīng)商E-R圖職工表郵編職工表郵編職工號地址職工號地址證件號電話證件號電話性別職工名性別職工名圖4.12職員E-R圖零售商有效期規(guī)格產(chǎn)地別名零售商有效期規(guī)格產(chǎn)地別名ID進價ID進價類別零售價類別零售價批發(fā)價藥品表批發(fā)價藥品表備注藥品名備注藥品名n供貨銷售單編號1供貨銷售單編號備注備注庫存初始化地區(qū)藥品ID m庫存初始化地區(qū)藥品ID銷售單供應(yīng)商藥品名銷售單供應(yīng)商藥品名供應(yīng)商名 m供應(yīng)商名銷售進貨編號價格 n銷售進貨編號價格數(shù)量n數(shù)量庫存表 n庫存表 1藥品編號藥品編號零售價數(shù)量藥品名供應(yīng)商編號零售價數(shù)量藥品名供應(yīng)商編號圖4。13實體聯(lián)系E—R圖4.3.2數(shù)據(jù)庫的邏輯設(shè)計藥品管理管理系統(tǒng)主要涉及到4個表,即:藥品信息表、藥品入庫表、藥品出庫表和庫存表。藥品信息表:這張表是用來存儲藥品信息的。藥品添加以后它的信息就會儲存到這張表中,其中包含:藥品編號藥品名稱化學(xué)名稱、規(guī)格、藥品類別、劑型、批號及廠商。其中藥品編號是主鍵,非空且唯一。其余信息可以為空,并在數(shù)據(jù)表建立的時候給他們相應(yīng)的規(guī)定好數(shù)據(jù)類型。藥品入庫表:這張表是用來存儲入庫表單信息的,所有入庫單信息都包含在這張表中。包括:入庫單號藥品編號批號入庫日期、有效日期、進價、預(yù)售價、數(shù)量、整量單位、散量單位及驗收人。其中入庫單號是主鍵,非空且唯一。藥品出庫表:這張表是用來存儲出庫表單信息的,所有出庫信息都包含在這張表單中。它的字段有:出庫單號、藥品編號、批號、數(shù)量、出庫日期及驗收人。其中出庫單號是主鍵,非空且唯一。藥品庫存表:這張表是用來存儲庫存信息的,所有初始化的庫存信息和出庫入庫信息改變后的信息都會被記錄下來。它字段有:庫存號、藥品編號、批號、藥品名稱、數(shù)量、整量單位、散量單位、入庫日期、有效日期、進價、預(yù)售價、庫存下限及驗收人。4。3.3數(shù)據(jù)庫的物理設(shè)計數(shù)據(jù)庫設(shè)計有幾個范式,一般我們要做到的是第三范式,即數(shù)據(jù)表中沒有冗余字段以及同一個表中的字段沒有函數(shù)依賴關(guān)系,冗余字段即在一個表中已經(jīng)保存過的信息,在另一個表中就不應(yīng)該存在,如果需要的話,可以通過表間的關(guān)聯(lián)來得到,函數(shù)依賴性就是一個表中的字段間不應(yīng)該有計算關(guān)系,如一個表中有單價字段、數(shù)量字段,就不應(yīng)該有一個總金額字段。如果程序運行過程中需要總金額,可以實時計算。不過在一些較常用的表中,我們可以適當(dāng)?shù)乇A羧哂嘧侄?,這樣,在程序運行過程中可以減少由于表間互相關(guān)聯(lián)而使用速度降低等問題.這就是所謂的第四范式。數(shù)據(jù)表設(shè)計時,最好不要使用用戶輸入的信息作為主鍵,每一個數(shù)據(jù)表自己定義一個主鍵,添加信息是由程序自動添加,這樣就可以減少數(shù)據(jù)更新時產(chǎn)生的錯誤。表與表相關(guān)聯(lián)的外鍵最好是由程序自動生成的主鍵,這樣數(shù)據(jù)庫就比較規(guī)范了。另外,數(shù)據(jù)表設(shè)計時一般都應(yīng)該有一些標(biāo)志字段,標(biāo)志字段可以定義成CHAR(1)或BIT型。建議實際應(yīng)用中定義成CHAR(1)字段可以存儲多種可能的狀態(tài),在最初設(shè)計時,可能我們沒有考慮到的一些情況,在程序后來的開發(fā)中,可以通過設(shè)計標(biāo)志字段為不同的值來解決,這樣就避免了修改數(shù)據(jù)庫結(jié)構(gòu)。數(shù)據(jù)庫初期設(shè)計時一定要謹(jǐn)慎,把所有可能的情況都考慮進去,即使當(dāng)時沒有用到,也要將它留在數(shù)據(jù)庫中作為備用字段以便將來擴充。程序一旦開始編碼,就應(yīng)該盡量避免再修改數(shù)據(jù)庫。因為如果數(shù)據(jù)庫結(jié)構(gòu)一旦改變,所有與修改的數(shù)據(jù)表相關(guān)的業(yè)務(wù)都有可能受到影響,而某些影響還很難看到,這樣就容易形成一個惡性循環(huán).錯誤越改越多,越改越亂,最終導(dǎo)致程序的失敗。PB的數(shù)據(jù)窗口與其他語言的數(shù)據(jù)控件不一樣,它的很多東西是預(yù)編譯的。即使你一個模塊已經(jīng)調(diào)試無誤,但只要數(shù)據(jù)庫結(jié)構(gòu)改動。相應(yīng)的模塊就一定要重新修改,否則一定會出問題。藥品管理系統(tǒng)數(shù)據(jù)庫中各個表的設(shè)計結(jié)果如下面幾個表格所示。每個表格表示為數(shù)據(jù)庫中的一個表.表4。14藥品信息表Medicine列名數(shù)據(jù)類型允許空值默認(rèn)值描述mid(PK)Varchar(8)N藥品編號mname Varchar(40)N藥品名稱mshortnameVarchar(10)Y藥品建成mnorsVarchar(4)N規(guī)格mareaVarchar(40)N藥品產(chǎn)地mlotVarchar(10)N批號minprifloatN0進價mwprifloatN0批發(fā)價mprifloatN0零售價MconVarchar(8)N供應(yīng)商McateVarchar(20)N類別Musetimedecimal(10,0)N有效期memoVarchar(40)Y備注表4.15用戶表User列名數(shù)據(jù)類型允許空值默認(rèn)值描述Username(PK)Varchar(20)N用戶名password Varchar(8)N密碼rankintN1權(quán)限表4.16供應(yīng)商表Supplier列名數(shù)據(jù)類型允許空值默認(rèn)值描述spid(PK)Varchar(8)N供應(yīng)商編號spnameVarchar(8)N供應(yīng)商名SpareaVarchar(8)N地區(qū)SpmenoVarchar(40)Y備注表4.17銷售單表SalesOrder列名數(shù)據(jù)類型允許空值默認(rèn)值描述Soid(PK)Varchar(8)N銷售單編號mid Varchar(8)N藥品編號MnameVarchar(40)N藥品名SnumintN0數(shù)量pricedoubleN0單價表4.18職工表Staff列名數(shù)據(jù)類型允許空值默認(rèn)值描述Staffid(PK)Varchar(8)N職工編號staffnameVarchar(20)N職工名稱Staffsexvarchar(2)N性別stafftelvarchar(12)N電話staffaddvarchar(40)Y地址Staffcardvarchar(40)N身份證staffzipvarchar(6)Y備注表4。19貨存表Stock列名數(shù)據(jù)類型允許空值默認(rèn)值描述Mid(PK)Varchar(8)N職工編號mnameVarchar(20)N職工名稱mpricefloatN性別mnumintN電話spidvarchar(8)Y地址timedatetimeN身份證statusintN存貨類別第五章編碼實現(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)鍵代碼如下:(點擊“續(xù)接”時系統(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);//提交用戶添加時執(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)鍵代碼如下:(點擊“銷售”時系統(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進貨管理模塊圖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,"進貨成功",”恭喜”,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); } }}第六章測試分析報告

6。1什么是軟件測試軟件測試就是在受控制的條件下對系統(tǒng)或應(yīng)用程序進行操作并評價操作結(jié)果的過程,所謂控制條件應(yīng)包括正常條件與非正常條件.

軟件測試過程中應(yīng)該故意地去促使錯誤的發(fā)生,也就是事情在不該出現(xiàn)的時候出現(xiàn)或者在應(yīng)該出現(xiàn)的時候沒有出現(xiàn)。從本質(zhì)上說,軟件測試是“探測",在“探測”中發(fā)現(xiàn)軟件的毛病.

軟件測試貫穿于軟件定義與開發(fā)的整個周期,軟件的需求規(guī)格說明書,結(jié)構(gòu)設(shè)計及程序編碼,都屬于軟件測試的對象。

軟件測試包含白盒測試與黑盒測試,白盒測試是針對程序代碼進行正確性檢驗的測試工作,黑盒測試獨立于程序代碼,從用戶的角度,通過一定的測試步驟與測試案例,驗證軟件功能、性能等指標(biāo)能否滿足實際應(yīng)用需求的測試作.

6.2軟件測試的目的軟件測試的目的是為了保證軟件產(chǎn)品的最終質(zhì)量,在軟件開發(fā)的過程中,對軟件產(chǎn)品進行_blank"質(zhì)量控制。一般來說軟件測試應(yīng)由獨立的產(chǎn)品評測中心負(fù)責(zé),嚴(yán)格按照軟件測試流程,制定測試計劃、測試方案、測試規(guī)范,實施測試,對測試記錄進行分析,并根據(jù)回歸測試情況撰寫測試報告。測試是為了證明程序有錯,而不能保證程序沒有錯誤。

6。3測試計劃和要點軟件測試的本質(zhì)是針對要測試的內(nèi)容確定一組測試用例。在討論之前,我先把要測試各個模塊的計劃和要點列出:6.3。1藥品以及藥品管理模塊測試要點用戶的登錄用戶名和密碼的核對,藥品創(chuàng)始信息格式的判斷,防止不規(guī)范的數(shù)據(jù)和錯誤的數(shù)據(jù)插入數(shù)據(jù)庫。例如,已經(jīng)存在的用戶不可被再次注冊,用戶的生日和email格式等.6。3。2銷售管理模塊測試要點發(fā)生銷售時,庫存的變動情況,是否減少,藥品為零則禁止銷售。6.3.3進貨管理模塊測試要點錄入數(shù)據(jù)時對數(shù)據(jù)格式的限制,防止不正確的數(shù)據(jù)進入數(shù)據(jù)庫.6.3。4職工信息測試要點防止臟數(shù)據(jù)進入數(shù)據(jù)庫。6.4部分測試圖1。用戶名或密碼錯誤圖6.1(登陸)用戶名或密碼錯誤提示2。用戶注冊模塊圖6.2(注冊)用戶已存在提示

3。藥品錄入數(shù)據(jù)格式的限制圖6。3藥品錄入數(shù)據(jù)格式的限制6。5測試結(jié)論1.測試目標(biāo)完成;2.測試已經(jīng)通過;3.可以進入下一階段項目目標(biāo);總結(jié)

不知不覺,三個月的設(shè)計結(jié)束了。在這三個月的設(shè)計,讓我受益非淺。自我學(xué)計算機專業(yè)以來,始終認(rèn)為一個完整的程序就相當(dāng)于一個優(yōu)秀的軟件產(chǎn)品,只要程序編得精致、具體、詳細(xì),所開發(fā)的軟件就絕對完美、實用.在這次設(shè)計藥品管理系統(tǒng)中,我積極查閱各種資料,實地調(diào)研,在李老師的幫助下完成了這個系統(tǒng)的全部設(shè)計.剛開始設(shè)計時遇到了一些困難,因為之前自學(xué)過的JavaSwing已經(jīng)忘了差不多了,再加上自己還要參加其他單位的實習(xí),時間的安排上也很緊迫,編程的進度比較緩慢.在設(shè)計中還會遇到一些功能不知該如何實現(xiàn)的困難,在同學(xué)們,同事們的熱情幫助下,我漸漸的復(fù)習(xí)了JavaSwing控件的使用方法、JavaSwing的編程語法,之后的編程過程也相對得心應(yīng)手,基本完成了預(yù)期計劃的要求.但是系統(tǒng)功能還沒有完全完善,有待進一步加強。通過這次畢業(yè)設(shè)計,我進一步加深對基礎(chǔ)理論的理解,擴大專業(yè)知識面,對收集資料、查閱文獻(xiàn)、方案制定等實踐方面得到了很好的鍛練,促進對所學(xué)知識應(yīng)用能力的提高。同時,發(fā)現(xiàn)問題、分析歸納、綜合比較的邏輯分析能力、處理問題等能力也得到了提高。但是在這次畢業(yè)設(shè)計過程中,還是發(fā)現(xiàn)了自己很多不足之處,也遇到了許多問題和困難,而這些困難大多是三年中不注重自己系統(tǒng)學(xué)習(xí),學(xué)有所用造成的,這讓我認(rèn)識到系統(tǒng)的學(xué)習(xí)和鍛煉的重要性,基礎(chǔ)知識掌握不僅要多,而且要會運用它,那樣的話設(shè)計才會更全面、更順利、更完美。

[1]侯維瑞英語語體上海:上海外語教育出版社,1988[2][美]RogersCadenhead。Java編程入門經(jīng)典。梅興文譯。第4版。北京:人民郵電出版社,2007[3]陳軼.姚曉昆編著.Java程序設(shè)計實驗指導(dǎo)。北京:清華大學(xué)出版社,2006[4]吳其慶編著.Java程序設(shè)計實例教程。北京:冶金工業(yè)出版社,2006[5]李春葆,曾慧。SQLServer2000學(xué)習(xí)與上機指導(dǎo)[M].北京:清華大學(xué)出版社,2005.6.[6]施霞萍等編著。Java程序設(shè)計教程第2版。北京:機械工業(yè)出版社,2006[7]宛延闿等編著.實用Java程序設(shè)計教程。北京:機械工業(yè)出版社,2006[8]耿祥義,張躍平。《JSP實用教程》。清華大學(xué)出版社,2003年5月1日:1-354月。[9]陳剛.Eclipse從入門到精通[M].北京:清華大學(xué)出版社,2005:416—417.[10]孫衛(wèi)琴.精通Struts:基于MVC的JavaWeb設(shè)計與開發(fā)[M].北京:電子工業(yè)出版社,2004:1-9.[11](美)格羅夫著,章小莉等譯.SQL完全手冊(第二版)[M].北京:電子工業(yè)出版社,2006:12—14.[12]王虎,張俊。管理信息系統(tǒng)[M]。武漢:武漢理工大學(xué)出版社,2004.7.[13]東方華人.ASP.NET數(shù)據(jù)庫開發(fā)[M].北京:清華大學(xué)出版社,2004.6。

致謝畢業(yè)設(shè)計終于結(jié)束,此為大學(xué)里最后一次考核,我在大家的鼓勵、幫助和支持下,最終順利完成.回首從零到畢業(yè)設(shè)計最終的完成,我的老師們,朋友們,同事們,親人們對我的幫助讓我受益匪淺。首先,我想感謝一下我的指導(dǎo)老師李喬老師,李老師做事認(rèn)真負(fù)責(zé),待人親切和藹,同時對我的論文和程序積極督促,耐心指導(dǎo)和正確引導(dǎo),讓我從茫然不知所錯到如屢平地。此次畢業(yè)設(shè)計同時讓我更加深刻的了解到大學(xué)里教的課程是多么的有用,感謝母校給了我這么多知識儲備,讓我能成為有一個有用的心中有底的人。還要感謝學(xué)院領(lǐng)導(dǎo)這四年來對我的培養(yǎng)和關(guān)心,在這四年當(dāng)中,院里領(lǐng)導(dǎo)為我們做好不少好事,對于我們的困難,院領(lǐng)導(dǎo)總是熱情的幫我們解決,我除了學(xué)會大學(xué)里應(yīng)該學(xué)會的課程外,還學(xué)會了怎樣做人,做一個對社會有貢獻(xiàn)的人。同時,我還要感謝我們們學(xué)校所有的同學(xué)。他們和我共同在安工大學(xué)習(xí)生活了四年,在生活和學(xué)習(xí)上給了我很大的幫助,正是有了你們的支持,我才能順利的完成畢業(yè)設(shè)計。謝謝所有教過我的老師們,你們教了我很多的專業(yè)知識,還給我提供動手實踐的機會,老師辛苦了!最后我還要感謝把我培養(yǎng)長大,含辛茹苦的父母,謝謝你們!附錄:部分程序代碼com。ahut。utils.DB類packagecom。ahut。utils;//連接數(shù)據(jù)庫的公共類publicclassDB{ publicstaticConnectiongetConn(){ Connectionconn=null; try{ Class.forName(”com。mysql。jdbc.Driver"); conn=DriverManager。getConnection(”jdbc:mysql://localhost:3306/medicine2?user=root&password=root"); }catch(ClassNotFoundExceptione){ e。printStackTrace(); }catch(SQLExceptione){ e。printStackTrace(); } returnconn; } publicstaticStatementgetStatement(Connectionconn){ Statementstmt=null; try{ if(conn!=null){ stmt=con

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論