醫(yī)藥管理系統(tǒng)庫存管理子系統(tǒng)的設(shè)計與實現(xiàn)本科學(xué)位論文_第1頁
醫(yī)藥管理系統(tǒng)庫存管理子系統(tǒng)的設(shè)計與實現(xiàn)本科學(xué)位論文_第2頁
醫(yī)藥管理系統(tǒng)庫存管理子系統(tǒng)的設(shè)計與實現(xiàn)本科學(xué)位論文_第3頁
醫(yī)藥管理系統(tǒng)庫存管理子系統(tǒng)的設(shè)計與實現(xiàn)本科學(xué)位論文_第4頁
醫(yī)藥管理系統(tǒng)庫存管理子系統(tǒng)的設(shè)計與實現(xiàn)本科學(xué)位論文_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

河北大學(xué)2009屆本科生畢業(yè)論文(設(shè)計)PAGEPAGE1醫(yī)藥管理系統(tǒng)--庫存管理子系統(tǒng)的設(shè)計與實現(xiàn)摘要伴隨著信息技術(shù)的發(fā)展,很多產(chǎn)業(yè)的銷售管理已經(jīng)由電腦來控制完成。在醫(yī)藥管理方面,庫存管理工作如果由人工完成,是既費時又費力的。這次我所做的這個系統(tǒng)就是為了使醫(yī)藥銷售部門的醫(yī)藥庫存管理實現(xiàn)電子化。設(shè)計并實現(xiàn)這樣一個軟件,需要使用到VisualC++,MicrosoftAccess,ADO,等設(shè)計平臺。整個系統(tǒng)的設(shè)計由模塊構(gòu)成,主要有主窗體及系統(tǒng)登錄設(shè)計模塊,基礎(chǔ)信息管理設(shè)計模塊,銷售管理模塊,入庫管理模塊,調(diào)貨管理模塊,賬務(wù)管理模塊,系統(tǒng)設(shè)置管理模塊構(gòu)成。各個模塊共同完成整個軟件的所有工作。關(guān)鍵詞:VisualC++MicrosoftAccessADO模塊ABSTRACTAccompanywithaninformationtechnicaldevelopment,alotofsalesofindustriesmanagingisalreadycontroledcompletionbycomputer.Managesaspectinthemedicine,iftheinventorymanagmentworkcompletesto°fromtheartificial,issincetime-consumingandhardtotackle.Thistimethesystemdonebymebeformakingthemedicineinventorymanagmentofmedicinesaledepartmenttherealizationiselectronical.Designandcarryoutsuchasoftware,needtouseVisualC++,MicrosoftAccess,ADO,waitdesignterrace.Thedesignofthewholesystemconstitutestofromthemoldpieceandmainlyhasmainwindowbodyandsystemtoregisterdesignmoldpiece,foundationinformationmanagementdesignmoldpiece,sellmanagementmoldpiece,storeinwarehousemanagementmoldpiece,adjustagoodsmanagementmoldpiece,Zhangworkmanageamoldpiece,thesystemestablishesmanagementmoldpiececomposing.Eachmoldpieceiscommontocompleteallworksofthewholesoftware.Keywords:VisualC++MicrosoftAccessADOmold前言隨著我國市場經(jīng)濟(jì)的蓬勃發(fā)展和人們對醫(yī)藥產(chǎn)品需求的迅速增加,醫(yī)藥行業(yè)正處于一個高速發(fā)展的時期。行業(yè)的快速發(fā)展必然導(dǎo)致競爭的加劇,要想在激烈的市場競爭中謀求發(fā)展,客觀上要求企業(yè)必須加強(qiáng)內(nèi)部管理,提高運營效率。另外,由于醫(yī)藥產(chǎn)品種類繁多、銷售模式特殊、業(yè)務(wù)量大,單憑手工記賬已遠(yuǎn)遠(yuǎn)適應(yīng)不了企業(yè)快速發(fā)展的需求。如何盡快建立和完善現(xiàn)代企業(yè)的信息化管理機(jī)制,己成為醫(yī)藥企業(yè)快速發(fā)展的關(guān)鍵所在。因此,盡快建立和完善現(xiàn)代企業(yè)的信息化管理機(jī)制問題,是醫(yī)藥企業(yè)發(fā)展的關(guān)鍵所在。高效、穩(wěn)定的信息化管理系統(tǒng)是醫(yī)藥企業(yè)的核心競爭力之一。要建立符合醫(yī)藥企業(yè)經(jīng)營、管理、創(chuàng)新等要求的信息化管理系統(tǒng),開發(fā)期間必須遵循以下規(guī)律:一是系統(tǒng)規(guī)劃。醫(yī)藥行業(yè)管理的信息化是一個系統(tǒng)工程,需要有科學(xué)的系統(tǒng)規(guī)劃與設(shè)計。二是不貪大求全,循序漸進(jìn)。貪大求全是很多企業(yè)對信息系統(tǒng)的要求,這容易造成系統(tǒng)功能相對全面但缺乏穩(wěn)定性和應(yīng)用資源的保障,進(jìn)而影響、拖累系統(tǒng)主要功能的運轉(zhuǎn)。三是避免重系統(tǒng)的表象輕其內(nèi)核。管理軟件產(chǎn)品必須以管理流程和業(yè)務(wù)流程為基礎(chǔ),其內(nèi)核應(yīng)蘊(yùn)含先進(jìn)的管理思想,缺乏管理思想支撐的系統(tǒng),很難成為優(yōu)秀的醫(yī)藥管理系統(tǒng)。四是避免重產(chǎn)品初期運轉(zhuǎn),輕維護(hù)與服務(wù)。在信息系統(tǒng)初期應(yīng)用時,多數(shù)企業(yè)都能給予相當(dāng)?shù)闹匾暎?dāng)完成系統(tǒng)驗收后,企業(yè)往往不重視對該系統(tǒng)資源的保障、維護(hù)與服務(wù)的投入,以及對系統(tǒng)適應(yīng)的調(diào)整,使得信息系統(tǒng)生命周期大大縮短。隨著信息時代的發(fā)展,管理者意識到只有采用信息化管理,才能取得市場領(lǐng)域的主導(dǎo)地位。一系統(tǒng)開發(fā)環(huán)境和主要技術(shù)簡介1.1.1VisualC++的介紹VisualC++是Microsoft公司的重要產(chǎn)品之一DeveloperStudio工具集的重要組成部分。它用來在Windows環(huán)境下開發(fā)應(yīng)用程序,是一種功能強(qiáng)大,行之有效的可視化編程工具。VC以可視化技術(shù)為基礎(chǔ),以C++語言為藍(lán)本,以眾多的集成工具為骨架,在計算機(jī)領(lǐng)域的諸多方面都發(fā)揮著重要的作用。VisualC++提供了簡潔實用的開發(fā)環(huán)境,集成的工具集能夠讓用戶高效率的開發(fā)應(yīng)用程序。VisualC++提供了MFC類庫,一般性工作可以全部交給VC來完成,用戶只要在其基礎(chǔ)上做出自己想要實現(xiàn)的功能即可。完成目標(biāo)(尤其對于圖形界面的程序)所花費的時間要少得多。1.1.2MFC和VisualC++VisualC++的核心是Microsoft基礎(chǔ)類庫,即通常所說的MFC(MicrosoftFoundationClassLibrary)。MFC相當(dāng)徹底的封裝了Win32軟件開發(fā)工具包(SoftwareDevelopmentKit,即通常所說的SDK)中的結(jié)構(gòu)、功能,它為編程者提供了一個應(yīng)用程序框架,這個應(yīng)用程序框架為編程者完成了很多Windows編程中的例行性工作,如管理窗口、菜單和對話框,執(zhí)行基本的輸入和輸出、使用集合類來保存數(shù)據(jù)對象等等,并且,MFC使得在程序中使用很多過去很專業(yè)、很復(fù)雜的編程課題,如ActiveX、OLE、本地數(shù)據(jù)庫和開放式數(shù)據(jù)庫互聯(lián)(OpenDatabaseConnectivity,簡寫為ODBC)、Windows套接字和Internet應(yīng)用程序設(shè)計等,以及其它的應(yīng)用程序界面特性,如屬性頁(也叫標(biāo)簽對話框)、打印和打印預(yù)覽、浮動的和可定制的工具條變得更加的容易。1.2MicrosoftAccess概述1.2.1MicrosoftAccess的發(fā)展自從1992年首次發(fā)布以來,MicrosoftAccess已經(jīng)逐步成為桌面數(shù)據(jù)庫領(lǐng)域的領(lǐng)導(dǎo)者,并且擁有廣泛的用戶。在90年代早期,作為用于MicrosoftWindows操作系統(tǒng)的第一個桌面關(guān)系型數(shù)據(jù)庫(RDBMS)而初次登場的是Access1.0給有經(jīng)驗的數(shù)據(jù)庫用戶留下的深刻印象是,使用一個功能強(qiáng)大的桌面數(shù)據(jù)庫竟然如此簡單。Access2.0繼續(xù)改變終端數(shù)據(jù)庫用戶理解和使用數(shù)據(jù)庫的方法。當(dāng)Access第一次加入MicrosoftOffice套件時,Office用戶開始產(chǎn)生對關(guān)系數(shù)據(jù)庫的強(qiáng)烈需要。1995年末,世界上第一個32位RDBMSAccess95發(fā)布,使這種普及趨勢繼續(xù)發(fā)展。1997年1月發(fā)布的Access97是數(shù)據(jù)庫與Web的最佳組合。今天,Access的普及已經(jīng)上了一個新的臺階,其用戶不僅包括有經(jīng)驗的數(shù)據(jù)庫用戶,還包括初次使用數(shù)據(jù)庫的用戶。使用Access2000,新用戶會欣喜的發(fā)現(xiàn)它與Office應(yīng)用程序高度集成,熟悉的界面使迅速啟動和運行更加容易。通過以更緊密的集成將Access2000延伸到企業(yè)級數(shù)據(jù)庫,Access高級用戶和開發(fā)人員將會找到嶄新的方法,來充分利用Access在最終用戶中的普及。不論用戶是創(chuàng)建數(shù)據(jù)庫來管理聯(lián)絡(luò)信息和客戶,還是創(chuàng)建存貨跟蹤系統(tǒng),Access都能找到為各種級別的桌面用戶查找,管理和共享數(shù)據(jù)提供的一種簡單方法。1.2.2MicrosoftAccess的主要功能MicrosoftAccess數(shù)據(jù)庫是對傳統(tǒng)數(shù)據(jù)庫的發(fā)展,是一個數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。在Access中,用戶可以構(gòu)造應(yīng)用程序來歸檔和存儲數(shù)據(jù),并且可以用多種方法進(jìn)行篩選,分類和查詢數(shù)據(jù),同時也可以將不同數(shù)據(jù)類型之間的聯(lián)系存儲起來,供產(chǎn)生綜合性數(shù)據(jù)使用。此時,每條信息僅在一處存放,減少數(shù)據(jù)重復(fù),節(jié)約存儲空間,這樣更新數(shù)據(jù)時速度既快又準(zhǔn)確,修改表結(jié)構(gòu)也非常容易。用戶既可以為每一種類型的信息創(chuàng)建一個表,將自己的數(shù)據(jù)分別保存在自己創(chuàng)建的表中,同時又可以使用聯(lián)機(jī)窗體更加有效的查看,添加和更新表中的數(shù)據(jù);使用查詢來查找并檢索符合指定條件的數(shù)據(jù);使用報表分析數(shù)據(jù),并以特定的版面布局來打印數(shù)據(jù);使用宏完成自己定義的一系列操作,同時又不需要編寫程序。Access的主要功能:(1)定義數(shù)據(jù)創(chuàng)建表,利用表存儲相應(yīng)的信息。(2)定義表之間的關(guān)系,從而很容易地將各個表中相關(guān)的數(shù)據(jù)有機(jī)的結(jié)合在一起。(3)方式多樣的數(shù)據(jù)處理能力??梢詣?chuàng)建查詢來檢索數(shù)據(jù);可以創(chuàng)建聯(lián)機(jī)窗體來直接查看。輸入和更改表中的數(shù)據(jù);可以創(chuàng)建報表來分析數(shù)據(jù)或?qū)?shù)據(jù)以特點的方式打印出來。(4)創(chuàng)建Web頁時,建立對Internet和Intranet的支持。(5)開發(fā)應(yīng)用程序。可以利用宏或VisualC++將各種數(shù)據(jù)庫對象連接在一起,形成一個數(shù)據(jù)庫應(yīng)用系統(tǒng),而且用戶也不需要編寫復(fù)雜的程序。與其他數(shù)據(jù)庫不同的是,Access在實現(xiàn)上述功能時提供了各種向?qū)?,用戶在操作時只需按照向?qū)峁┑牟襟E執(zhí)行就可以了,用起來非常方便。1.2.3MicrosoftAccess的組成Access2000由以下幾個部分組成數(shù)據(jù)庫引擎:它是實際存儲,排序和獲取數(shù)據(jù)的軟件,一般來說,是不可見的。數(shù)據(jù)庫對象:Access2000的數(shù)據(jù)庫窗口非常便于用戶訪問各種對象。所謂對象就是提供一種特定的使用界面,用于查看,輸入和抽取數(shù)據(jù)庫的有關(guān)信息。設(shè)計工具:Access包含一套設(shè)計工具,可用于創(chuàng)建對象。(4)編程工具:Access與MicrosoftOffice中其他的應(yīng)用程序共享編程語言VBA。Access2000加入了VBE,可以直接將自己的代碼管理和開發(fā)技巧轉(zhuǎn)移到Word,Excel或PowerPoint中,從而豐富Access應(yīng)用程序的數(shù)據(jù)訪問功能。

Access2000具有儲存文件單一,支持長文件名,兼容多種數(shù)據(jù)庫格式,具有Web網(wǎng)頁發(fā)布功能,可應(yīng)用于客戶/服務(wù)器方式,操作使用方便等特點。

Access2000所使用的對象包括表,查詢,報表,窗體,宏,模塊和數(shù)據(jù)訪問頁。在一個數(shù)據(jù)庫中,除數(shù)據(jù)訪問頁之外,其他的對象都存放在一個擴(kuò)展名為.mdb的數(shù)據(jù)庫文件中,而不像其他數(shù)據(jù)庫那樣分別存放在不同的文件中,這樣就方便了數(shù)據(jù)庫文件的管理[10]。1.3ADO1.3.1ADO概述ADO是Microsoft為最新和最強(qiáng)大的數(shù)據(jù)訪問范例OLEDB而設(shè)計的,是一個便于使用的應(yīng)用程序?qū)咏涌?。ADO使您能夠編寫應(yīng)用程序以通過OLE.DB提供者訪問和操作數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)。ADO最主要的優(yōu)點是易于使用、速度快、內(nèi)存支出少和磁盤遺跡小。ADO在關(guān)鍵的應(yīng)用方案中使用最少的網(wǎng)絡(luò)流量,并且在前端和數(shù)據(jù)源之間使用最少的層數(shù),所有這些都是為了提供輕量、高性能的接口。之所以稱為ADO,是用了一個比較熟悉的暗喻,OLE自動化接口。OLEDB是一組組件對象模型(COM)接口,是新的數(shù)據(jù)庫低層接口,它封裝了ODBC的功能,并以統(tǒng)一的方式訪問存儲在不同信息源中的數(shù)據(jù)。OLEDB是MicrosoftUDA(UniversalDataAccess)策略的技術(shù)基礎(chǔ)。OLEDB為任何數(shù)據(jù)源提供了高性能的訪問,這些數(shù)據(jù)源包括關(guān)系和非關(guān)系數(shù)據(jù)庫、電子郵件和文件系統(tǒng)、文本和圖形、自定義業(yè)務(wù)對象等等。也就是說,OLEDB并不局限于ISAM、Jet甚至關(guān)系數(shù)據(jù)源,它能夠處理任何類型的數(shù)據(jù),而不考慮它們的格式和存儲方法。在實際應(yīng)用中,這種多樣性意味著可以訪問駐留在Excel電子數(shù)據(jù)表、文本文件、電子郵件/目錄服務(wù)甚至郵件服務(wù)器,諸如MicrosoftExchange中的數(shù)據(jù)。但是,OLEDB應(yīng)用程序編程接口的目的是為各種應(yīng)用程序提供最佳的功能,它并不符合簡單化的要求。您需要的API應(yīng)該是一座連接應(yīng)用程序和OLEDB的橋梁,這就是ActiveXDataObjects(ADO)。1.3.2MFC的ADO類(1)引入ADO庫文件使用ADO前必須在工程的stdafx.h文件里用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下所示:代碼1:用#import引入ADO庫文件#import"c:\programfiles\commonfiles\system\ado\msado15.dll"no_namespacesrename("EOF"adoEOF")這行語句聲明在工程中使用ADO,但不使用ADO的名字空間,并且為了避免常數(shù)沖突,將常數(shù)EOF改名為adoEOF?,F(xiàn)在不需添加另外的頭文件,就可以使用ADO接口了。(2)初始化OLE/COM庫環(huán)境必須注意的是,ADO庫是一組COM動態(tài)庫,這意味應(yīng)用程序在調(diào)用ADO前,必須初始化OLE/COM庫環(huán)境。在MFC應(yīng)用程序里,一個比較好的方法是在應(yīng)用程序主類的InitInstance成員函數(shù)里初始化OLE/COM庫環(huán)境。代碼2:初始化OLE/COM庫環(huán)境BOOLCADOApp::InitInstance(){if(!AfxOleInit()){AfxMessageBox(“OLE初始化出錯!”);returnFALSE;}}函數(shù)AfxOleInit在每次應(yīng)用程序啟動時初始化OLE/COM庫環(huán)境。同DAO和CDatabase一樣,ADO由幾個接口組成:_ConnectionPtr,_CommandPtr和_RecordsetPtr.不同于DAO和Cdatabase的是,ADO基于COM的接口。(3)ADO接口簡介ADO庫包含三個基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。_ConnectionPtr接口返回一個記錄集或一個空指針。通常使用它來創(chuàng)建一個數(shù)據(jù)連接或執(zhí)行一條不返回任何結(jié)果的SQL語句,如一個存儲過程。使用_ConnectionPtr接口返回一個記錄集不是一個好的使用方法。通常同CDatabase一樣,使用它創(chuàng)建一個數(shù)據(jù)連接,然后使用其它對象執(zhí)行數(shù)據(jù)輸入輸出操作。_CommandPtr接口返回一個記錄集。它提供了一種簡單的方法來執(zhí)行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串。如果你只執(zhí)行一次或幾次數(shù)據(jù)訪問操作,后者是比較好的選擇。但如果你要頻繁訪問數(shù)據(jù)庫,并要返回很多記錄集,那么,你應(yīng)該使用全局_ConnectionPtr接口創(chuàng)建一個數(shù)據(jù)連接,然后使用_CommandPtr接口執(zhí)行存儲過程和SQL語句。_RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定,游標(biāo)控制等。同_CommandPtr接口一樣,它不一定要使用一個已經(jīng)創(chuàng)建的數(shù)據(jù)連接,可以用一個連接串代替連接指針賦給_RecordsetPtr的connection成員變量,讓它自己創(chuàng)建數(shù)據(jù)連接。如果你要使用多個記錄集,最好的方法是同Command對象一樣使用已經(jīng)創(chuàng)建了數(shù)據(jù)連接的全局_ConnectionPtr接口,然后使用_RecordsetPtr執(zhí)行存儲過程和SQL語句。(4)使用_ConnectionPtr接口_ConnectionPtr是一個連接接口,它類似于CDatabase和CDaoDatabase。它們的工作原理相似。首先創(chuàng)建一個_ConnectionPtr接口實例,接著指向并打開一個ODBC數(shù)據(jù)源或OLEDB數(shù)據(jù)提供者(Provider)。以下代碼創(chuàng)建一個基于DSN的數(shù)據(jù)連接。代碼3:使用_ConnectionPtr(基于DSN)_ConnectionPtrMyDb;MyDb.CreateInstance(__uuidof(Connection));MyDb->Open("DSN=samp;UID=admin;PWD=admin","","",-1);(5)使用_RecordsetPtr接口_RecordsetPtr接口的使用方法和CDaoDatabase類似,通過以下代碼的比較,你會發(fā)現(xiàn)使用_RecordsetPtr接口非常簡單(以下代碼使用上面已經(jīng)創(chuàng)建的數(shù)據(jù)連接):代碼4:使用_RecordsetPtr執(zhí)行SQL語句_RecordsetPtrMySet;MySet.CreateInstance(__uuidof(Recordset));MySet->Open("SELECT*FROMsome_table",MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);二系統(tǒng)總體設(shè)計2.1需求分析2.1.1系統(tǒng)介紹“醫(yī)藥庫存系統(tǒng)”是專門針對醫(yī)藥公司、藥店的綜合業(yè)務(wù)而開發(fā)的醫(yī)藥管理系統(tǒng)。該軟件集進(jìn)、銷、存、決策于一體,同時還集成了財務(wù)管理、報表打印、查詢統(tǒng)計等多種實用的功能,真正實現(xiàn)了進(jìn)、銷、存一體化。本軟件的前臺采用目前流行的面向?qū)ο蟮木幊陶Z言V1sualC++6.0開發(fā),后臺采用Access數(shù)據(jù)庫。軟件的界面美觀大方,軟件運行穩(wěn)定。該軟件有以下特點:(1)功能強(qiáng)大。該軟件以醫(yī)藥經(jīng)營企業(yè)為應(yīng)用對象,結(jié)合醫(yī)藥企業(yè)當(dāng)前和未來發(fā)展的管理需求提供實用先進(jìn)的應(yīng)用模式,實現(xiàn)對多部門、多規(guī)格、大范圍的復(fù)雜經(jīng)營活動的業(yè)務(wù)監(jiān)控、財務(wù)監(jiān)控、質(zhì)量監(jiān)控,提高業(yè)務(wù)財務(wù)各環(huán)節(jié)工作效率和協(xié)作監(jiān)督能力,真正面向市場提高企業(yè)效益。(2)實用高效。通過建立規(guī)范的業(yè)務(wù)管理模式,使業(yè)務(wù)人員從繁忙的手工開票、統(tǒng)計報表工作中解脫出來,提高工作效率,減少人為差錯。(3)系統(tǒng)結(jié)構(gòu)靈活,適用多種經(jīng)營模式。整個系統(tǒng)由問題域子系統(tǒng)、數(shù)據(jù)訪問子系統(tǒng)、用戶界面子系統(tǒng)組成。各子系統(tǒng)可以從其他相關(guān)的子系統(tǒng)中直接獲取所需的數(shù)據(jù),同時也可以將子系統(tǒng)內(nèi)產(chǎn)生的數(shù)據(jù)自動傳遞給其他相關(guān)子系統(tǒng),減少了重復(fù)錄入,提高了工作效率和準(zhǔn)確率。因此,無論是大型集團(tuán)企業(yè),還是小型公司,無論是連鎖零售企業(yè),還是批發(fā)企業(yè),本系統(tǒng)均可適用。(4)用戶界面操作簡潔。系統(tǒng)的每個功能都經(jīng)過精心設(shè)計,充分考慮到使用人員的計算機(jī)知識較少的特點,全部使用業(yè)務(wù)人員最熟悉的業(yè)務(wù)流程、提示用語和操作方式,即使不懂計算機(jī)的人也能熟練使用本軟件,完成業(yè)務(wù)處理。(5)系統(tǒng)性能穩(wěn)定。嚴(yán)格按照規(guī)范的軟件工程管理,充分利用面向?qū)ο蠹夹g(shù),以Access數(shù)據(jù)庫為平臺,利用Windows系統(tǒng)的內(nèi)存管理和多任務(wù)特性,從技術(shù)上保證了系統(tǒng)的穩(wěn)定性、可靠性和先進(jìn)性。本系統(tǒng)在實施后,集中處理藥品的進(jìn)銷存業(yè)務(wù)及其應(yīng)收應(yīng)付賬目,為企業(yè)的發(fā)展奠定了一個新的臺階。2.1.2數(shù)據(jù)字典重要數(shù)據(jù)及其簡要描述如表2-1、表2-2、表2-3所示。

表2-1數(shù)據(jù)項名稱說明藥品編號惟一標(biāo)識一種藥品,形式如YP00001員工編號惟一標(biāo)識一位員工,形式如YG00001客戶編號惟一標(biāo)識一個客戶,形式如KH00001供應(yīng)商編號惟一標(biāo)識一個供應(yīng)商,形式如GYS00001銷售票號惟一標(biāo)識每次銷售登記,形式如2009-05-01xsd0023入庫票號惟一標(biāo)識每次入庫登記,形式如2009-05-01rkd0001銷售退貨票號惟一標(biāo)識每次銷售退貨登記,形式如2009-05-01THD0001入庫退貨票號惟一標(biāo)識每次入庫退貨登記,形式如2009-05-01rkt0001庫存盤點票號惟一標(biāo)識每次庫存盤點登記,形式如:2009-05-01pdd0001調(diào)貨票號惟一標(biāo)識每次調(diào)貨登記,形式如:2009-05-28DHD0001毛利銷售某種商品時,獲得的利潤操作員管理員,使用系統(tǒng),擁有系統(tǒng)賬號的人經(jīng)手人員工,對某次業(yè)務(wù)或交易實際上直接操作的人備份編號惟一標(biāo)識某次備份記錄,形式如:BACKUP2009-05-20-10-23-00001倉庫名稱惟一標(biāo)識某個倉庫盈虧數(shù)量庫存盤點出現(xiàn)的與實際不符的數(shù)量管理員權(quán)限對權(quán)限分成4個等級,方便不同的用戶有不同的訪問權(quán)限結(jié)算方式進(jìn)行交易時所采用的結(jié)算方式是否結(jié)清判斷某筆交易是否已結(jié)清帳警戒上限藥品數(shù)量的最高限警戒下限藥品數(shù)量的最低限表2-2存儲數(shù)據(jù)名稱說明藥品信息表記錄藥品的基本信息員工信息表記錄員工的基本信息客戶信息表記錄客戶的基本信息供應(yīng)商信息表記錄供應(yīng)商的基本信息倉庫信息表記錄倉庫的基本信息管理員表記錄管理員的用戶名,密碼,權(quán)限名稱說明庫存表記錄庫存信息備份表記錄備份信息銷售登記表記錄銷售時藥品及數(shù)量信息銷售票號表記錄銷售時的客戶,經(jīng)手人,操作員,日期等信息入庫登記表記錄入庫時藥品及數(shù)量信息入庫票號表記錄入庫時的供應(yīng)商,經(jīng)手人,操作員,日期等信息銷售退貨登記表記錄銷售退貨時藥品及數(shù)量信息銷售退貨票號表記錄銷售退貨時的客戶,經(jīng)手人,操作員,日期等信息入庫退貨登記表記錄入庫退貨時藥品及數(shù)量信息入庫退貨票號表記錄入庫退貨時的供應(yīng)商,經(jīng)手人,操作員,日期等信息庫存盤點登記表記錄庫存盤點時的藥品,倉庫及盈虧信息庫存盤點退貨表記錄入庫退貨時的經(jīng)手人,操作員,日期等信息調(diào)貨登記表記錄調(diào)貨時的藥品,數(shù)量及倉庫信息調(diào)貨票號表記錄調(diào)貨時的經(jīng)手人,操作員,日期等信息銷售結(jié)帳表記錄銷售結(jié)帳時的金額,經(jīng)手人,操作員,日期等信息入庫結(jié)帳表記錄入庫結(jié)帳時的金額,經(jīng)手人,操作員,日期等信息銷售退貨結(jié)帳表記錄銷售退貨結(jié)帳時的金額,經(jīng)手人,操作員,日期等信息入庫退貨結(jié)帳表記錄入庫退貨結(jié)帳時的金額,經(jīng)手人,操作員,日期等信息表2-3處理過程名稱說明銷售登記對客戶進(jìn)行銷售交易,即出庫入庫登記對供應(yīng)商進(jìn)行入庫交易,即采購銷售退貨登記對客戶進(jìn)行銷售退貨交易入庫退貨登記對供應(yīng)商進(jìn)行入庫退貨交易庫存盤點登記確保數(shù)據(jù)庫的數(shù)據(jù)符合實際庫存調(diào)貨登記在倉庫之間重新分配庫存數(shù)量銷售結(jié)賬登記銷售結(jié)賬操作入庫結(jié)賬登記入庫結(jié)賬操作,也可以稱為采購結(jié)賬銷售退貨結(jié)賬銷售退貨結(jié)賬操作2.2概要設(shè)計2.2.1設(shè)計目標(biāo)面對醫(yī)藥行業(yè)的高速發(fā)展和醫(yī)藥企業(yè)信息化發(fā)展的過程中出現(xiàn)的各種情況,該系統(tǒng)在實施后,應(yīng)能夠達(dá)到以下目標(biāo):(1)建立規(guī)范的業(yè)務(wù)管理模式,使業(yè)務(wù)人員從繁忙的手工開票、統(tǒng)計報表工作中解脫出來,提高工作效率,減少人為差錯。(2)實現(xiàn)多點操作的信息共享,相互之間的信息傳遞要準(zhǔn)確、快捷和順暢。(3)提供快速、準(zhǔn)確的處理企業(yè)藥品進(jìn)、銷、存、調(diào)、退、盤點等多種業(yè)務(wù)模式。(4)系統(tǒng)界面友好美觀,操作簡單易行,查詢靈活方便,數(shù)據(jù)存儲安全可靠。(5)利用客戶檔案、應(yīng)收應(yīng)付、預(yù)警系統(tǒng)等模塊結(jié)合在一起,可以對往來客戶進(jìn)行業(yè)務(wù)監(jiān)控,防止壞賬的發(fā)生。(6)支持多種結(jié)算方式。(7)使業(yè)務(wù)、財務(wù)、庫房三賬合一,使三種賬務(wù)系統(tǒng)化、集成化和統(tǒng)一化,消除三種賬務(wù)不統(tǒng)一造成的混亂。(8)系統(tǒng)維護(hù)方便可靠,有較高的安全性,滿足實用性、先進(jìn)性的要求。2.2.2編碼設(shè)計編碼設(shè)計是數(shù)據(jù)庫系統(tǒng)開發(fā)的前提條件,是系統(tǒng)不可缺少的重要內(nèi)容。編碼是指與原來名稱對應(yīng)的符號或記號。它是進(jìn)行信息交換、處理、傳輸和實現(xiàn)信息資源共享的關(guān)鍵。編碼也用于指定數(shù)據(jù)的處理方法、區(qū)別數(shù)據(jù)類型,并指定計算機(jī)處理的內(nèi)容等。本系統(tǒng)內(nèi)部信息編碼分4種情況:采用7字符定長編碼,8字符定長編碼,17字符定長編碼,28字符定長編碼。(1)7字符定長編碼,其中前兩位表示信息分類,由各類信息的漢語拼音字母縮寫組成,后5位為具體信息編碼,從00001開始,按順序遞增的方式編碼。如藥品信息編碼為YP00001。(2)8字符定長編碼,其中前3位表示信息分類,由各類信息的漢語拼音字母縮寫組成,后5位為具體信息編碼,從00001開始,按順序遞增的方式編碼。如供應(yīng)商信息編碼為GYS00001。(3)17字符定長編碼,其中前10位是系統(tǒng)日期,中間3位表示分類,由各類信息的漢語拼音字母縮寫組成,后4位為具體信息編碼,從0001開始,順序遞增的方式編碼。如入庫登記票號的編碼為2009-06-23rkd0001。(4)28字符定長編碼,其中前6位表示數(shù)據(jù)備份的英文單詞,中間的16位是系統(tǒng)日期時間,后6位為具體的信息編碼,從00001開始,按順序遞增的方式編碼。如數(shù)據(jù)備份編號為BACKUP2009-06-01-13-46-00001。根據(jù)以上編碼原則,本系統(tǒng)的各類信息編碼設(shè)計如下:(1)基礎(chǔ)信息(采用7位編碼)藥品信息類別編碼采用藥品二字的漢語拼音縮寫YP,例如YP00001??蛻粜畔㈩悇e編碼采用客戶二字的漢語拼音縮寫KH,例如KH00001。員工信息類別編碼采用員工二字的漢語拼音縮寫YG,例如YG00001。(2)基礎(chǔ)信息(采用8位編碼)供應(yīng)商信息類別編碼采用供應(yīng)商三字的漢語拼音縮寫GYS,例如GYS00001。(3)數(shù)據(jù)錄入信息查詢(采用17位編碼)入庫登記票號的編碼采用入庫單三字的漢語拼音縮寫rkd,例如2009-05-23rkdO001。入庫退貨票號的編碼采用入庫退三字的漢語拼音縮寫rkt,例如2009-05-23rkt0001。銷售登記票號的編碼采用銷售單三字的漢語拼音縮寫xsd,例如2009-05-23xsd0001。銷售退貨票號的編碼采用退貨單三字的漢語拼音縮寫thd,例如2009-05-23thd0001。入庫結(jié)賬票號的編碼采用入庫結(jié)三字的漢語拼音縮寫rkj,例如2009-05-23rkj0001。銷售結(jié)賬票號的編碼采用銷售結(jié)三字的漢語拼音縮寫xsj,例如2009-05-23xsj0001。(4)數(shù)據(jù)備份(采用28位編碼)數(shù)據(jù)備份編碼采用數(shù)據(jù)備份的英文單詞BACKUP,BACKUP2009-05-23-13-40-00001。2.2.3輸入設(shè)計本系統(tǒng)輸入接口應(yīng)滿足如下要求:鍵盤:標(biāo)準(zhǔn)鍵盤,具有Windows98功能鍵。鼠標(biāo):兩鍵或三鍵鼠標(biāo)小口或USB鼠標(biāo)。漢字輸入法:五筆輸入法、拼音輸入法等。錄入軟件界面:本系統(tǒng)所有輸入均支持鼠標(biāo)和鍵盤兩種輸入方式。錄入方式有文本式和表單式兩種風(fēng)格。文本方式錄入該企業(yè)的基礎(chǔ)信息,如藥品信息、客戶信息等;表單式主要錄入銷售和入庫相關(guān)的業(yè)務(wù)工作。兩種風(fēng)格都設(shè)置了靈活多樣的錄入方式,在表單式錄入時,可同時錄入多條記錄。輸入方式的簡單、快捷、易學(xué)易用是醫(yī)藥管理系統(tǒng)的基本要求,特別是藥品銷售的輸入直接影響著操作員的開票速度。2.2.4輸出設(shè)計本系統(tǒng)輸出方式采用屏幕顯示和打印機(jī)輸出兩種方式。2.2.5系統(tǒng)安全和可靠性設(shè)計為保證軟件與數(shù)據(jù)庫系統(tǒng)的安全運行,防止不合法的運行或計算機(jī)系統(tǒng)的不穩(wěn)定對系統(tǒng)造成損害,應(yīng)對系統(tǒng)的軟件和硬件進(jìn)行合理的安全設(shè)置和可靠性設(shè)計。安全措施包括用戶標(biāo)識和口令,不同操作員的權(quán)限設(shè)置,數(shù)據(jù)庫文件的加密等。系統(tǒng)安全設(shè)計主要應(yīng)考慮如下幾點:(1)應(yīng)保證計算機(jī)系統(tǒng)的穩(wěn)定性,對相應(yīng)計算機(jī)應(yīng)配UPS進(jìn)行斷電保護(hù)。(2)當(dāng)本地局域網(wǎng)與本地企業(yè)網(wǎng)或Internet連接的時候,網(wǎng)絡(luò)安全應(yīng)當(dāng)是網(wǎng)絡(luò)建設(shè)的首要解決的問題,主要設(shè)計容錯方案、安裝防毒軟件、安裝防火墻等。(3)在不影響系統(tǒng)功能的情況下要盡可能考慮系統(tǒng)的安全性。(4)進(jìn)入系統(tǒng)時必須通過操作員密碼控制,方可進(jìn)入系統(tǒng),用戶輸入錯誤密碼多次,將退出系統(tǒng)。(5)對公司內(nèi)部人員對數(shù)據(jù)的訪問進(jìn)行控制,對用戶、信息及操作分類授權(quán)。(6)為了防止系統(tǒng)錯誤、硬件沖突引起的系統(tǒng)癱瘓而造成數(shù)據(jù)丟失,可以隨時對數(shù)據(jù)進(jìn)行備份。一旦數(shù)據(jù)丟失,可以將備份的數(shù)據(jù)進(jìn)行恢復(fù)。(7)要建立合理的安全制度,防止無關(guān)人員隨意登錄服務(wù)器、客戶端。防止軟件的非法使用。2.2.6主要模塊介紹(1)主程序界面主程序也是程序控制前核心,操作權(quán)限、程序功能調(diào)用等都要通過主程序調(diào)用實現(xiàn)。本程序通過菜單、工具欄兩種方式調(diào)用系統(tǒng)。(2)銷售登記銷售登記是醫(yī)藥管理系統(tǒng)中的重要部分,可以高效地完成醫(yī)藥商品的銷售工作。本模塊支持多種結(jié)算方式;刪除當(dāng)前行顯示的銷售信息;打印、預(yù)覽當(dāng)前顯示的銷售單。(3)銷售查詢銷售查詢是銷售管理模塊的重要組成部分。銷售查詢模塊設(shè)有兩個選項卡,其中【銷售信息管理】選項卡記載銷售商品的基本信息;【銷售信息查詢】選項卡可按不同字段,不同條件對銷售的商品進(jìn)行查詢,支持模糊查詢及在查詢結(jié)果中查詢。(4)入庫登記入庫登記是庫存管理系統(tǒng)的重要組成部分,該模塊主要完成商品的入庫操作。在入庫登記時自動統(tǒng)計入庫金額,并可打印,預(yù)覽當(dāng)前顯示的入庫單;支持多種結(jié)算方式。(5)藥品信息管理藥品信息管理是錄入藥品信息的基礎(chǔ)模塊,是進(jìn)行入庫,銷售,及其他操作的基礎(chǔ)。本模塊設(shè)有兩個選項卡,【藥品信息管理】完成添加,修改,刪除等操作;【藥品信息查詢】可對藥品的基本信息進(jìn)行查詢,支持模糊查詢及在查詢結(jié)果中查詢。(6)客戶往來帳客戶往來帳是庫存管理系統(tǒng)的重要組成部分,該模塊的主要功能是按用戶自定義時間段查詢客戶往來帳信息,并可完成客戶往來帳打印工作[2]。2.2.7系統(tǒng)結(jié)構(gòu)根據(jù)該企業(yè)的業(yè)務(wù)情況及要求,結(jié)合計算機(jī)管理的特點與當(dāng)前醫(yī)藥企業(yè)信息化的方向,設(shè)置醫(yī)藥庫存管理系統(tǒng)結(jié)構(gòu)圖如圖所示。藥品管理系統(tǒng)藥品管理系統(tǒng)帳務(wù)管理庫存管理系統(tǒng)管理銷售管理入庫管理調(diào)貨管理結(jié)帳管理基礎(chǔ)信息銷售退貨結(jié)帳供應(yīng)商往來帳修改用戶銷售查詢?nèi)霂觳樵儌}庫管理供應(yīng)商信息日結(jié)庫存盤點修改密碼銷售入庫據(jù)庫入庫登記調(diào)貨登記銷售結(jié)帳藥品信息月結(jié)庫存查詢修改權(quán)限銷售退貨入庫退貨調(diào)貨查詢?nèi)霂旖Y(jié)帳員工信息客戶往來帳數(shù)據(jù)備份銷售退貨查詢?nèi)霂焱素洸樵內(nèi)霂焱素浗Y(jié)帳客戶信息圖2-1醫(yī)藥庫存管理系統(tǒng)結(jié)構(gòu)圖2.3數(shù)據(jù)庫設(shè)計本系統(tǒng)數(shù)據(jù)庫名為yaopin。數(shù)據(jù)庫yaopin中共包含46個表,其中作為臨時表的有20個,作為數(shù)據(jù)存儲表的有26個。臨時表:lsdhinfo0、lsdhinfo1、lsgys0、lsgys1、lskcquery0、lskcquery1、1sM10、lsM11、lsrkquery0、lsrkquery1、1srkthinfo0、1srkthinfol、lsxsquery0、lsxsquery1、lsxsthinfo0、lsxsthinfo1、lsyg0、lsyg1、lsypinfo0、lsypinfol.數(shù)據(jù)存儲表:tabbf、tabck、tabdhdj、tabdhph、tabgys、tabjsfs、tabkc、tabkcpddj、tabkcpdph、tabhk、tabpurview、tabpurviewctrl、tabrkdj、tabrkjz、tabrkph、tabrkthdj、tabrkthjz、tabrkthph、tabxsdj、tabxsjz、tabxsph、tabxsthdj、tabxsthjz、tabxsthph、tabyginfo、tabypinfo.由于篇幅原因,下面主要介紹8個關(guān)鍵表的結(jié)構(gòu)。(臨時表是為了實現(xiàn)在查詢結(jié)果中進(jìn)行查詢,在這里不做具體介紹)。tabgys表用于保存供應(yīng)商的基礎(chǔ)信息。表2-4tabgys表字段名類型寬度是否可為空注釋gys_idChar20NotNull供應(yīng)商編碼(主)gys_nameChar30Null供應(yīng)商名稱JcChar10Null簡稱AddressChar50Null地址AreaChar50Null地區(qū)mailChar20Null郵編phoneChar20Null電話faxChar20Null傳真linkmanChar20Null聯(lián)系人lm_phoneChar20Null聯(lián)系人電話bankChar20Null開戶銀行accountsChar20Null銀行帳號taxpayerChar20Null納稅人登記emailChar20Null郵箱tabkc表用于保存庫存信息。表2-5tabkc表字段名類型寬度是否可為空注釋yp_idChar10NotNull藥品編號(主)ck_nameChar30NotNull倉庫名稱(外)kc_numberIntNull庫存數(shù)量alert_leverupIntNull警戒上限alert_leverdownIntNull警戒下限tabhk表用于保存客戶信息。表2-6tabhk表字段名類型寬度是否可為空注釋kh_idChar10NotNull客戶編碼(主)kh_nameChar30NotNull客戶名稱jcChar10Null簡稱addressChar50Null地址areaChar50Null地區(qū)mailChar20Null郵編phoneChar20Null電話faxChar20Null傳真linkmanChar20Null聯(lián)系人lm_phoneChar20Null聯(lián)系人電話bankChar20Null開戶銀行accountsChar20Null銀行帳號taxpayerChar20Null納稅人名稱emailChar20Null郵箱tabpurview表用于保存權(quán)限信息。表2-7tabpurview表字段名 類型寬度是否可為空注釋admi_nameChar20NotNull用戶名(主)admi_passwordChar255Null密碼admi_purviewIntNotNull權(quán)限(外)tabxsdj表用于保存商品的銷售信息。表2-8tabxsdj表字段名類型寬度是否可為空注釋xs_phChar20NotNull銷售票號(外)yp_idChar10Null藥品編號(外)ck_nameChar30Null倉庫名稱(外)slIntNull數(shù)量djfloatNull單價jefloatNull金額profitfloatNull毛利tabxsph表用于保存銷售票號信息。表2-9tabxsph表字段名類型寬度是否可為空注釋xs_phChar20NotNull銷售票號(主)pzsfloatNull品種數(shù)ysfloatNull應(yīng)收ssfloatNull實收wsfloatNull未收kh_idChar10NotNull客戶編號(外)rqtimeNotNull日期jsfsChar10NotNull結(jié)算方式(外)is_jqboolNull是否結(jié)清czyChar20NotNull操作員(外)jsrChar20NotNull經(jīng)手人tabyginfo表用于保存員工的基礎(chǔ)信息。表2-10tabyginfo表字段名類型寬度是否可為空注釋yg_idChar10NotNull員工編號(主)yg_nameChar20Null員工姓名sexChar5Null員工性別sortChar10Null員工類別positionChar10Null職務(wù)rqtimeNull聘用日期salaryfloatNull薪金memoChar100Null備注tabrkdj表用于保存入庫登記的相關(guān)信息。表2-11tabrkdj表字段名類型寬度是否可為空注釋rk_phChar20NotNull入庫票號(主)yp_idChar10Null藥品編號(外)ck_nameChar30Null倉庫名稱(外)slfloatNull數(shù)量djfloatNull單價jefloatNull金額三系統(tǒng)詳細(xì)設(shè)計3.1主窗體及系統(tǒng)登錄設(shè)計本章主要介紹程序框架的生成,系統(tǒng)登陸程序設(shè)計等內(nèi)容,包括主窗體程序和系統(tǒng)登陸程序兩個部分。3.1.1主窗體設(shè)計登錄后的主窗體程序是本軟件的交互控制中心,具體實現(xiàn)與功能模塊相對應(yīng)的菜單及工具欄設(shè)計,通過菜單及工具欄調(diào)用相應(yīng)的子程序。狀態(tài)欄顯示當(dāng)前系統(tǒng)時間、當(dāng)前操作員。根據(jù)操作員操作權(quán)限,設(shè)置響相應(yīng)的菜單欄、工具欄是否有效。3.1.2數(shù)據(jù)庫連接設(shè)計為了方便數(shù)據(jù)庫連接的統(tǒng)一控制和方便對異常的捕捉,需要將ADO封裝到類中。頭文件聲明如下:classLRunSql{public: LRunSql(); ~LRunSql(); boolRunSQL(CStringsql); boolCheckSQLResult(CStringsql);public: static_ConnectionPtrm_database; staticboolRollbackTrans(); staticboolCommitTrans(); staticboolBeginTrans(); staticboolClose(); staticboolInitConnectPtr(); staticboolConnectDataBase(); _RecordsetPtrm_recordset;};3.1.3系統(tǒng)登錄程序設(shè)計為了保證應(yīng)用程序的安全,通常要設(shè)計系統(tǒng)登錄程序來驗證用戶是否合法。3.2基礎(chǔ)信息管理設(shè)計基礎(chǔ)信息管理主要完成企業(yè)基礎(chǔ)信息的管理,包括藥品信息管理,供應(yīng)商信息管理,客戶信息管理,員工信息管理4個子模塊。關(guān)鍵技術(shù):在查詢結(jié)果中查詢。在查詢結(jié)果中查詢可以縮小查詢范圍,更好的進(jìn)行操作。3.2.1抽象出查詢的基類實現(xiàn)目標(biāo):完成所有查詢系統(tǒng)的基本功能和統(tǒng)一接口,查詢系統(tǒng)主要包括藥品查詢,員工查詢,供應(yīng)商查詢,客戶查詢,銷售查詢,銷售退貨查詢,入庫查詢,入庫退貨查詢,調(diào)貨查詢,庫存查詢10個子模塊。這些查詢功能有許多相同的地方,可以抽象出查詢模塊的基類以節(jié)省代碼。由于存在數(shù)據(jù)處理的功能,所以決定將信息顯示與數(shù)據(jù)處理分開各建一個基類:對于信息顯示,采用從CTabCtrl派生出來的類CBaseTabCtrl做基類;對于數(shù)據(jù)處理,自定義一個CDataTable做基類。(1)創(chuàng)建數(shù)據(jù)訪問基類CDataTable每個數(shù)據(jù)訪問基類對應(yīng)數(shù)據(jù)庫的表或視圖,可以對數(shù)據(jù)庫進(jìn)行增加,修改,刪除,查詢操作。數(shù)據(jù)顯示在ClistCtrl控件上。 (2)創(chuàng)建信息顯示基類CBaseTabCtrl查詢界面分為兩個視圖顯示查詢數(shù)據(jù),一個視圖用列表控件顯示所有查詢數(shù)據(jù),另一個視圖用來顯示某條記錄的詳細(xì)信息。圖3-1信息查詢界面3.2.2基礎(chǔ)信息管理類的具體設(shè)計實現(xiàn)目標(biāo):具體實現(xiàn)用戶的交互,完成數(shù)據(jù)的基本操作。主要功能有:處理查詢增加操作修改操作保存操作刪除操作3.3銷售管理銷售管理主要完成藥品銷售信息的管理,包括銷售登記,銷售退貨,銷售查詢,銷售退貨查詢4個子模塊。3.3.1銷售登記模塊設(shè)計圖3-2銷售登記界面整個界面由4個部分組成。標(biāo)題部分包括用戶錄入客戶編號,客戶名稱,結(jié)算方式,經(jīng)手人,銷售日期。自動生成票號部分根據(jù)銷售票號表自動生成新的銷售票號。列表控件部分以列表形式錄入銷售數(shù)據(jù)。功能按紐提供實現(xiàn)確定,打印,刪除,退出功能的按紐。創(chuàng)建左上角的標(biāo)題信息。創(chuàng)建白色背景,其他控件做他的子窗體。對于經(jīng)手人和結(jié)算方式兩個下拉框,需要從數(shù)據(jù)庫中取得相應(yīng)的數(shù)據(jù)來初始化兩個窗口。系統(tǒng)自動產(chǎn)生銷售編號,系統(tǒng)4個按紐,其中打印按紐將在第十五章詳細(xì)介紹。3.3.2銷售退貨模塊設(shè)計圖3-3銷售退貨界面整個界面由4個部分組成。1.標(biāo)題部分包括用戶輸入結(jié)算方式,經(jīng)手人,日期。2.自動生成退貨票號部分根據(jù)銷售退貨票號表自動生成新的銷售退貨票號。3.列表控件部分以列表形式錄入銷售退貨數(shù)據(jù)。4.功能按紐提供實現(xiàn)確定,打印,刪除,退出功能的按紐。銷售退貨模塊與銷售模塊相似,不做累敘。其他管理模塊也與之相似,只做簡單介紹。3.3.3銷售查詢模塊設(shè)計該模塊設(shè)計思路與基礎(chǔ)信息查詢模塊相似,主要區(qū)別在與查詢字段名不同。3.3.4銷售退貨查詢模塊設(shè)計該模塊設(shè)計思路與基礎(chǔ)信息查詢模塊相似,主要區(qū)別在與查詢字段名不同。3.4入庫管理入庫管理主要完成藥品入庫等信息的管理,包括入庫登記和入庫退貨登記兩個數(shù)據(jù)錄入子模塊及入庫登記查詢和入庫退貨查詢兩個信息查詢子模塊。3.4.1入庫登記模塊設(shè)計圖3-4入庫登記界面整個界面由4個部分組成。1.標(biāo)題部分包括用戶錄入供應(yīng)商編號,供應(yīng)商名稱,結(jié)算方式,經(jīng)手人,日期。2.自動生成票號部分根據(jù)入庫票號表自動生成新的入庫票號。3.列表控件部分以列表形式錄入入庫數(shù)據(jù)。4.功能按紐提供實現(xiàn)確定,打印,刪除,退出功能的按紐。3.4.2入庫退貨登記模塊設(shè)計圖3-5入庫退貨登記界面整個界面由4個部分組成。1.標(biāo)題部分包括用戶錄入結(jié)算方式,經(jīng)手人,日期。2.自動生成票號部分根據(jù)入庫退貨票號表自動生成新的入庫退貨票號。3.列表控件部分以列表形式錄入入庫退貨數(shù)據(jù)。4.功能按紐提供實現(xiàn)確定,打印,刪除,退出功能的按紐。3.4.3入庫登記查詢模塊設(shè)計該模塊設(shè)計思路與基礎(chǔ)信息查詢模塊相似,主要區(qū)別在與查詢字段名不同。3.4.4入庫退貨查詢模塊設(shè)計該模塊設(shè)計思路與基礎(chǔ)信息查詢模塊相似,主要區(qū)別在與查詢字段名不同。3.5調(diào)貨管理調(diào)貨管理主要對藥品調(diào)貨信息進(jìn)行管理,包括調(diào)貨登記和調(diào)貨查詢兩個子模塊。3.5.1調(diào)貨登記模塊設(shè)計圖3-6調(diào)貨登記界面整個界面由4個部分組成。1.標(biāo)題部分包括用戶錄入經(jīng)手人,日期,備注。2.自動生成票號部分根據(jù)調(diào)貨票號表自動生成新的調(diào)貨票號。3.列表控件部分以列表形式錄入調(diào)貨數(shù)據(jù)。4.功能按紐提供實現(xiàn)確定,打印,刪除,退出功能的按紐。3.5.2調(diào)貨查詢模塊設(shè)計該模塊設(shè)計思路與基礎(chǔ)信息查詢模塊相似,主要區(qū)別在與查詢字段名不同。3.6庫存管理庫存管理主要對藥品庫存信息進(jìn)行管理,主要包括庫存盤點,庫存查詢和倉庫管理3個子模塊。3.6.1庫存盤點模塊設(shè)計圖3-7庫存盤點界面整個界面由4個部分組成。1.標(biāo)題部分包括用戶錄入經(jīng)手人,日期。2.自動生成票號部分根據(jù)盤點票號表自動生成新的盤點票號。3.列表控件部分以列表形式錄入盤點數(shù)據(jù)。4.功能按紐提供實現(xiàn)確定,打印,刪除,退出功能的按紐。3.6.2庫存查詢模塊設(shè)計圖3-8庫存查詢界面該模塊設(shè)計思路與基礎(chǔ)信息查詢模塊相似,主要區(qū)別在與查詢字段名不同。3.6.3倉庫管理模塊設(shè)計倉庫管理模塊主要實現(xiàn)增加,修改,刪除倉庫信息等功能。圖3-9倉庫管理界面3.7帳務(wù)管理帳務(wù)管理按功能分為結(jié)帳管理和帳務(wù)管理兩大模塊。其中結(jié)帳管理由銷售結(jié)帳,銷售退貨結(jié)帳,入庫結(jié)帳和入庫退貨結(jié)帳4個子模塊組成;帳務(wù)管理由日結(jié)算,月結(jié)算,供應(yīng)商往來帳,客戶往來帳4個子模塊組成。3.8打印及打印預(yù)覽概述MFC準(zhǔn)備了用于打印預(yù)覽的設(shè)備環(huán)境類CPreviewDC和預(yù)覽視圖類CPreviewView,并且在Document/View模式下提供了方便的打印方式,而且還有已經(jīng)做好的打印預(yù)覽,當(dāng)使用向?qū)梢粋€單文檔的應(yīng)用程序,就可以使用現(xiàn)成的打印預(yù)覽和打印功能。圖3-10視圖繪圖界面圖3-11打印預(yù)覽界面四系統(tǒng)實現(xiàn)4.1主窗體及系統(tǒng)登錄設(shè)計4.1.1主窗體程序設(shè)計(1)創(chuàng)建主窗體選擇應(yīng)用程序類型為“基于對話框”,其他采用缺省設(shè)置。(2)創(chuàng)建程序菜單欄在menu選項中添加菜單欄,并編輯相應(yīng)的菜單資源。(3)創(chuàng)建工具欄應(yīng)用程序中經(jīng)常要使用工具欄,工具欄也是最常用的界面元素,對應(yīng)著應(yīng)用程序最常用的功能。登錄后的主窗體共有9個工具欄按紐,分別是銷售登記,銷售退貨,銷售結(jié)帳,入庫登記,入庫退貨,入庫結(jié)帳,調(diào)貨登記,庫存登記,退出。創(chuàng)建工具欄可使用mfc類庫中的CtoolBarCtrl類,該類用來生成工具條。本系統(tǒng)主窗體的工具欄將引用MSDN提供的類CstandardBar,該類派生自CtoolBarCtrl類。 SetBitmapSize(CSize(32,32));//設(shè)置單個位圖大小 VERIFY(AddBitmap(m_nButtonCount,IDR_STANDARDBAR)!=-1);//添加位圖(4)創(chuàng)建狀態(tài)欄為了使應(yīng)用程序操作界面更加友好,可以使用狀態(tài)欄顯示程序當(dāng)前的狀態(tài)信息或提示信息。VC中提供了CstatuBarCtrl類顯示狀態(tài)欄。狀態(tài)欄顯示作者信息,當(dāng)前操作員及時間。在CA1Dlg的初始化函數(shù)中初始化狀態(tài)欄對象。 CA1App*app=(CA1App*)::AfxGetApp();MessageBox(app->m_sUserName);//顯示操作員信息CTimet=CTime::GetCurrentTime(); CStrings=t.Format("%H:%M:%S"); s="當(dāng)前系統(tǒng)時間:"+s;//將訪問時間轉(zhuǎn)化為字符串 CStringstr; str.LoadString(IDS_COMPANY);//顯示作者信息 this->SetTimer(12,1000,NULL);//設(shè)置時間響應(yīng)頻率(5)設(shè)置窗體背景設(shè)置窗體背景加入一個Bitmap資源,增加界面友好度。(6)設(shè)置權(quán)限根據(jù)不同的用戶,對用戶權(quán)限加以區(qū)分。根據(jù)用戶名取得用戶的權(quán)限值,再根據(jù)權(quán)限值來確定模塊是否可用(8個模塊)。4.1.2數(shù)據(jù)庫連接設(shè)計該階段的具體設(shè)計詳見本文3.1.2部分。4.1.3系統(tǒng)登錄程序設(shè)計圖4-1登錄界面確定按鈕進(jìn)行密碼判斷,代碼如下:voidCDlgLogin::OnOK(){ BOOLbLogOn=FALSE; CStringsUserPassWord,sPurview,sUserName,sInputPassWord; LRunSqlm_runsql; CStringsql; _variant_tvalue; CStringsError; this->m_editPassWord.GetWindowText(sInputPassWord); this->m_editUserName.GetWindowText(sUserName); CA1App*App=(CA1App*)AfxGetApp(); sql.Format("selectadmi_password,admi_purviewfromtabpurviewwhereadmi_name='%s'", sUserName); if(m_runsql.CheckSQLResult(sql)) { value=m_runsql.m_recordset->GetCollect("admi_password"); if(value.vt!=VT_NULL) sUserPassWord=(char*)(_bstr_t)value; value=m_runsql.m_recordset->GetCollect("admi_purview"); if(value.vt!=VT_NULL) sPurview=(char*)(_bstr_t)value; if(sUserPassWord==CCrypt::Encrypt(sInputPassWord)) { App->m_sUserName=sUserName; App->m_sPurview=sPurview; bLogOn=TRUE; } else { sError="請重新輸入密碼。\n注意大小寫!","密碼錯誤"; this->m_editPassWord.SetFocus(); } } else { sError="請確認(rèn)用戶名大小寫是否正確!","無此用戶"; this->m_editUserName.SetFocus(); } if(bLogOn)EndDialog(IDOK); else { m_iLogOnCount++; if(m_iLogOnCount>=3) this->EndDialog(0); else MessageBox(sError); }}4.2基礎(chǔ)信息管理設(shè)計本系統(tǒng)后臺數(shù)據(jù)庫為access數(shù)據(jù)庫,在數(shù)據(jù)庫中建兩個表充當(dāng)臨時表,分別進(jìn)行0,1編號。CStringm_sTable;CStringm_sTempTables[2];Intm_iCurTable;如果用戶不選擇在查詢結(jié)果中查詢,就從查詢視圖中進(jìn)行查詢,并將結(jié)果送到當(dāng)前臨時表中;如果擁護(hù)在查詢結(jié)果中查詢,就在當(dāng)前臨時表中進(jìn)行查詢,并將結(jié)果送到另一個臨時表中。CStringoutput;CStringinput;Intsel=m_check.GetCheck();if(sel){output=m_sTempTables[m_iCurTable];input=m_sTempTables[!m_iCurTable];m_iCurTable=!m_iCurTable;}else{output=m_sTable;input=m_sTempTables[m_iCurTable];}基礎(chǔ)信息管理類在前面提到過分為:(1)增加操作(2)修改操作(3)保存操作(4)刪除操作在查詢的組合框中選擇要查詢的字段,在查詢的文本框中輸入查詢條件,單擊確定按紐進(jìn)行查詢,系統(tǒng)刷新列表控件。查詢時使用的比較運算符直接用>、<、<=、>=、LIKE來表示。處理查詢時,因涉及到字符串查詢、數(shù)值查詢、日期查詢,所以需要在代碼中對查詢內(nèi)容加以區(qū)分。根據(jù)不同的查詢內(nèi)容,生成不同的查詢語句。查詢結(jié)果中查需要建立兩個臨時表,在這里需要控制。代碼入下:voidCTabYG::OnChaXun(){this->m_dataYg.RefreshListView(this->PrepareSQL());}CStringCTabYG::PrepareSQL(){ CStringfield_name,field,fuhao,value,inputtable,outputtable,sql; this->PrepareTables(outputtable,inputtable); m_combofields.GetWindowText(field_name); field=this->m_dataYg.GetFieldFromName(field_name); m_combofuhao.GetWindowText(fuhao); if(this->state==STRINGQUERY) { m_editvalue.GetWindowText(value); if(fuhao=="LIKE")value="%"+value+"%"; sql.Format("INSERTINTO%sSELECT*FROM%sWHERE%s%s'%s'",inputtable,outputtable,field,fuhao,value); m_dataYg.m_runsql.RunSQL(sql); sql.Format("select*from%s",inputtable); } else { m_tcvalue.GetWindowText(value); value="#"+value+"#"; sql.Format("INSERTINTO%sSELECT*FROM%sWHERE%s%s%s",inputtable,outputtable,field,fuhao,value); m_dataYg.m_runsql.RunSQL(sql); sql.Format("select*from%s",inputtable); } returnsql;}(2)增加操作編號字段由系統(tǒng)自動生成,其他信息由用戶輸入,單擊保存按紐,將信息保存到數(shù)據(jù)庫中。代碼入下:voidCTabYG::OnZengJiaClick(){ CBaseTabCtrl::OnZengJiaClick(); CTimet=CTime::GetCurrentTime(); m_rq.SetTime(&t); m_edits[0].SetWindowText(this->ChanShengID()); m_edits[0].SetReadOnly(); m_edits[1].SetFocus();}(3)修改操作用戶選定一條記錄,單擊修改按紐,用戶可以輸入修改信息,修改完成,按保存按紐保存修改信息。代碼如下:voidCTabYG::OnXiuGaiClick(){ CStringstr; m_edits[0].GetWindowText(str); if(str=="") { MessageBox("請選擇某條紀(jì)錄"); return; } CBaseTabCtrl::OnXiuGaiClick(); m_edits[0].SetReadOnly(); m_edits[1].SetFocus(); m_edits[1].SetSel(0,-1);}(4)保存操作增加、修改記錄的操作在保存按紐的消息相應(yīng)函數(shù)中。代碼如下:voidCTabYG::OnBaoCunClick(){ CStringvalue; this->GetValuesFromEdits(); if(this->baseinfo_state==ZENGJIA) { if(!this->m_dataYg.InsertCurValue()) { MessageBox("增加數(shù)據(jù)錯誤","錯誤"); return; } } elseif(this->baseinfo_state==XIUGAI) { this->GetValuesFromEdits(); if(!this->m_dataYg.UpdateCurValue()) { MessageBox("修改數(shù)據(jù)錯誤","錯誤"); return; } } else return; CBaseTabCtrl::OnBaoCunClick(); baseinfo_state=NORMAL;}(5)刪除操作選定一條記錄,單擊刪除按紐,系統(tǒng)提示用戶是否確定刪除,然后刪除數(shù)據(jù)庫相關(guān)內(nèi)容。代碼如下:voidCTabYG::OnShanChuClick(){ CStringstr; m_edits[0].GetWindowText(str); if(str=="") { MessageBox("請選擇某條紀(jì)錄"); } if(MessageBox("確定要刪除嗎?刪除后不可恢復(fù),并且相關(guān)的庫存信息也將被刪除!","注意!", MB_YESNO)!=IDYES) return; this->GetValuesFromEdits(); if(!this->m_dataYg.DeleteCurValue()) return; CBaseTabCtrl::OnShanChuClick(); this->m_dataYg.data=CDataYG::data_yg();}4.3庫存管理4.3.1倉庫管理模塊設(shè)計(1)實現(xiàn)增加按紐:圖4-2增加倉庫界面voidCDlgCK::OnButtonAdd(){CDlgTheCKdlg;dlg.m_bAdd=true;if(dlg.DoModal()==IDOK){ inti=m_list.GetItemCount();this->m_list.InsertItem(i,dlg.m_strCkName);this->m_list.SetItemText(i,1,dlg.m_strCkAdmi);}}(2)實現(xiàn)刪除按紐:voidCDlgCK::OnButtonDel(){ if(MessageBox("確定刪除倉庫及其相關(guān)的庫存信息嗎?","注意",MB_YESNO)!=IDYES) return; intmark=this->m_list.GetSelectionMark(); if(mark<0)return; m_sSelectedUser=this->m_list.GetItemText(mark,0); CStringsql; bool m_bNULL=true; _variant_tvalue; sql.Format("selectkc_numberfromtabkcwhereck_name='%s'",m_sSelectedUser); m_runsql.CheckSQLResult(sql); while(!m_runsql.m_recordset->adoEOF) { value=m_runsql.m_recordset->GetCollect("kc_number"); if(value.vt!=VT_NULL) { if(value.lVal!=0) { m_bNULL=false; break; } } m_runsql.m_recordset->MoveNext(); } if(!m_bNULL){ MessageBox("請將數(shù)據(jù)庫清0后,再刪除該倉庫!","注意"); return; } sql.Format("delete*fromtabckwhereck_name='%s'",m_sSelectedUser); m_runsql.RunSQL(sql); sql.Format("delete*fromtabkcwhereck_name='%s'",m_sSelectedUser); m_runsql.RunSQL(sql); m_list.DeleteItem(mark);}(3)實現(xiàn)修改按紐:圖4-3修改倉庫界面voidCDlgCK::OnButtonXiugai(){ intmark=this->m_list.GetSelectionMark(); if(mark<0)return; CDlgTheCKdlg; dlg.m_bAdd=false; dlg.m_strCkName=this->m_list.GetItemText(mark,0); dlg.m_strCkAdmi=this->m_list.GetItemText(mark,1); dlg.DoModal(); this->m_list.SetItemText(mark,0,dlg.m_strCkName); this->m_list.SetItemText(mark,1,dlg.m_strCkAdmi);}4.4帳務(wù)管理4.4.1供應(yīng)商往來帳,客戶往來帳管理模塊設(shè)計圖4-4供應(yīng)商往來帳界面圖4-5客戶往來帳界面以時間和編號為查詢條件進(jìn)行查詢。代碼入下:voidCDlgWLZ::OnButtonQuery(){ this->m_tcRqDown.GetWindowText(this->m_strRqDown); this->m_tcRqUp.GetWindowText(this->m_strRqUp); this->m_editId.GetWindowText(m_strId); if(this->m_strlist->Find(m_strId)==NULL) { MessageBox("請輸入正確的編號","錯誤"); m_editId.SetFocus(); return; } if(m_strRqUp==this->m_strOldRqUp&&m_strRqDown==this->m_strOldRqDown&&this->m_strOldId==this->m_strId) return; else { this->m_strOldRqUp=m_strRqUp; this->m_strOldRqDown=m_strRqDown; this->m_strOldId=this->m_strId; } this->RefreshListView(); this->m_list.SetFocus(); }4.4.2結(jié)帳管理模塊設(shè)計圖4-6銷售結(jié)帳界面單擊確定按紐時,確定所選信息,刷新數(shù)據(jù)庫。voidCDlgXSJZ::OnButton1(){ if(!this->CheckAll())return; is_jq=0; if(m_dLeft<=0.00001)is_jq=-1; CStringph,fs,rq,czy,jsr,bz,sql; this->m_editPh.GetWindowText(ph); this->m_comboJsr.GetWindowText(jsr); this->m_comboSkfs.GetWindowText(fs); this->m_editBz.GetWindowText(bz); this->m_tcRq.GetWindowText(rq); CA1App*app=(CA1App*)AfxGetApp(); czy=app->m_sUserName;sql.Format("update%ssets%s=%f,w%s=%f,is_jq=%dwhere%s='%s'" ,this->m_strTablePh, this->m_strsf,this->m_dYsfk-m_dLeft, this->m_strsf,m_dLeft,is_jq, this->m_strPhKeyField,this->m_strdataPh); this->m_runsql.RunSQL(sql); sql.Format("INSERTINTO%s(%s,%s,je,fs,rq,czy,jsr,bz)VALUES('%s','%s',%f,'%s',#%s#,'%s','%s','%s')" ,this->m_strTableJz, this->m_strJzKeyField,this->m_strPhKeyField, ph,m_strdataPh,this->m_dSFk_BC,fs,rq,czy,jsr,bz); this->m_runsql.RunSQL(sql); MessageBox("OK","醫(yī)藥管理系統(tǒng)"); this->EndDialog(0);}4.4.3日結(jié)算,月結(jié)算管理模塊設(shè)計日結(jié)算模塊完成日結(jié)帳操作,完成信息匯總操作,并支持打印功能。圖4-7日結(jié)算界面月結(jié)算模塊完成月結(jié)帳操作,完成信息匯總操作,并支持打印功能。圖4-8月結(jié)算界面日結(jié)算,月結(jié)算的查詢方式與客戶往來帳,供應(yīng)上往來帳相似,在這里不做累敘。4.5系統(tǒng)設(shè)置管理系統(tǒng)設(shè)置管理主要管理與系統(tǒng)設(shè)置有關(guān)的內(nèi)容。主要包括密碼設(shè)置,權(quán)限設(shè)置,擁護(hù)設(shè)置,數(shù)據(jù)備份,數(shù)據(jù)恢復(fù)5個子模塊。4.5.1密碼設(shè)置模塊設(shè)計圖4-9主要設(shè)置當(dāng)前用戶的密碼設(shè)置當(dāng)前用戶密碼,密碼效驗通過,完成密碼設(shè)置工作。只準(zhǔn)許設(shè)置當(dāng)前操作員密碼,不能設(shè)置其他用戶密碼。用戶單擊確定按紐時,檢查新密碼與確認(rèn)密碼是否相等,若不相等則返回,若相等則修改數(shù)據(jù)庫信息。實現(xiàn)確定按紐代碼如下:voidCDlgChangePassWord::OnOK(){ CStringsMM1; CStringsMM2; m_editMM1.GetWindowText(sMM1); m_editMM2.GetWindowText(sMM2); if(sMM1!=sMM2) { MessageBox("請確認(rèn)密碼相同","醫(yī)藥管理系統(tǒng)"); m_editMM2.SetFocus(); } else { try{ CStringsql; CA1App*app=(CA1App*)AfxGetApp(); sMM2=CCrypt::Encrypt(sMM2); sql.Format("updatetabpurviewsetadmi_password='%s'whereadmi_name='%s'", sMM2,app->m_sUserName); m_runsql.RunSQL(sql); } catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; } MessageBox("成功修改密碼!","醫(yī)藥管理系統(tǒng)"); } CDialog::OnOK();}4.5.2權(quán)限設(shè)置模塊設(shè)計圖4-10權(quán)限設(shè)置界面權(quán)限設(shè)置分超級用戶,管理員,標(biāo)準(zhǔn)用戶,一般用戶4個用戶組。超級用戶的權(quán)限不限,可以使用全部功能。并且可以修改其他用戶的權(quán)限。設(shè)計對話框及相關(guān)資源代碼入下:voidCDlgPurview::OnRadio1(){ this->UpdateData(); this->GetDataFromDatabase(m_iPurview); this->RefreshData(t

溫馨提示

  • 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

提交評論