廣東海洋大學(xué) 數(shù)據(jù)庫課程設(shè)計(jì) 藥品信息管理系統(tǒng)
《廣東海洋大學(xué) 數(shù)據(jù)庫課程設(shè)計(jì) 藥品信息管理系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《廣東海洋大學(xué) 數(shù)據(jù)庫課程設(shè)計(jì) 藥品信息管理系統(tǒng)(15頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 藥品信息管理系統(tǒng) 1 系統(tǒng)分析 1.1需求分析: 對藥品信息管理主要需求就是對藥品信息進(jìn)行基本的管理,用戶需要及時準(zhǔn)確地掌握該診所內(nèi)現(xiàn)有的藥品的基本信息(主要包括數(shù)量,單價,是否過期等)。同時,用戶要求操作界面友好,操作簡便,對數(shù)據(jù)庫的操作安全可靠,藥品從數(shù)據(jù)庫中修改了,但還沒結(jié)算時斷電,要求數(shù)據(jù)庫應(yīng)該能恢復(fù)。 1.2功能分析: 系統(tǒng)需要實(shí)現(xiàn)的主要功能包括查詢,刪除,增加,修改四部分,各功能具體如下表所示: 表1-1 系統(tǒng)的主要功能分析 2. 系統(tǒng)設(shè)計(jì) 2.1 繪制用例圖設(shè)計(jì)系統(tǒng)功能 藥品信息管理系統(tǒng)一共包含3
2、鐘用戶角色,分別是醫(yī)生,售藥員,和管理員,權(quán)限依次提高,醫(yī)生權(quán)限是可以查詢庫存藥品信息,提供基本的用戶管理功能(更改密碼,更換用戶),例圖如下 醫(yī)生用例圖 售藥員的權(quán)限在醫(yī)生的基礎(chǔ)上,還具有藥品管理的藥品銷售功能,用例圖如下: 售藥員用例圖 管理員具有所有權(quán)限,包括查詢藥品,增加藥品條目,出售藥品,清理藥庫(包括清除數(shù)量為0的藥品,清除過期藥品等)及所有的用戶管理功能,用例圖如下: 管理員用例圖 2.2 繪制
3、系統(tǒng)流程圖 本系統(tǒng)需要對用戶身份進(jìn)行驗(yàn)證,驗(yàn)證通過后再判斷用戶是屬于醫(yī)生,售藥員或者是管理員中的哪一個角色,根據(jù)角色判斷用戶可以使用系統(tǒng)中的相應(yīng)操作功能這里以管理員的身份為例 ,其流程圖如下: 系統(tǒng)流程圖 3. 數(shù)據(jù)庫分析與設(shè)計(jì) 3.1 數(shù)據(jù)庫概念設(shè)計(jì) 本系統(tǒng)一共設(shè)計(jì)規(guī)劃出三個實(shí)體,分別是用戶信息實(shí)體,藥品信息實(shí)體,藥品銷售實(shí)體。 用戶信息實(shí)體用于記錄系統(tǒng)登錄用戶的信息,包括賬號,密碼,權(quán)限等相關(guān)信息其E-R圖如下: 圖3-1 用戶信息實(shí)體
4、藥品信息實(shí)體是數(shù)據(jù)庫的核心,記錄了所存儲的藥品的基本信息,其E-R圖如下: 藥品信息實(shí)體E-R圖 藥品銷售實(shí)體則記錄了藥品銷售的相關(guān)信息,主要指藥品的出售數(shù)量,出售總價等,其E-R圖如下: 藥品銷售實(shí)體E-R圖 3.2 數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì) 根據(jù)設(shè)計(jì)好的各實(shí)體E-R圖創(chuàng)建數(shù)據(jù)庫的邏輯結(jié)構(gòu),數(shù)據(jù)庫各表的結(jié)構(gòu)如下。 共3張表,分別是tb_medicine 和 tb_user,tb_saleTable. 表3-1 tb_medicine(藥品基本信息表) 表3-2 tb_u
5、ser(用戶信息表) 表3-3 tb_saleTable(藥品銷售表) 3.3 數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計(jì) 3.4 系統(tǒng)類庫設(shè)計(jì) 藥品信息管理系統(tǒng)中的類庫主要設(shè)計(jì)如下: 1. 藥品管理類 CManageMecdic:用于對藥庫進(jìn)行管理,主要包括藥品入庫,藥品的出售,藥庫的清理,以及為實(shí)現(xiàn)這些函數(shù)而加的成員函數(shù)。 2. 藥品查詢類 CMedicSearch:其成員函數(shù)主要包括一般查
6、詢,查詢庫中數(shù)量為0的藥品,查詢過期藥品等。 3. 用戶管理類CUser:主要設(shè)立了為完成以下功能的成員函數(shù),如新增用戶,刪除用戶,查詢用戶信息,修改用戶密碼等。 4. 藥品類CMedic:相當(dāng)于一結(jié)構(gòu)體,只是為了給系統(tǒng)提供一個數(shù)據(jù)類型,以對藥品進(jìn)行必要的管理,該類沒有成員函數(shù),該類一般作為CManageMedic和CMedicSearch類的一個成員變量。 5. 出售單類CSale:主要是給系統(tǒng)提供一個數(shù)據(jù)類型,以對藥品出售進(jìn)行有效的管理,該類也沒有成員函數(shù),該類作為CManageMedic類的一個成員變量。 6. CMedicSet,CUserSer,CSaleSet類:用于與數(shù)據(jù)
7、庫中的表相連,它們從CRecordSer繼承而來。 7. 一些對話框類:該系統(tǒng)許多地方都用到了對話框,這類對話框主要有CLlogInDlg,CChangPasswordDlg,CUserChangDlg,CStoreDlg,CCleanUpDlg,CSaleDlg等 8. 系統(tǒng)本身提供的框架類:如CMainFrm,CMedicAdminDoc,CMedicAdminApp,CMedicAdmicView等。 3.5 公用模塊設(shè)計(jì) 為了節(jié)省系統(tǒng)資源,實(shí)現(xiàn)代碼重用,提高程序運(yùn)行速度,可以將一些公用的數(shù)據(jù)信息放到模塊中。本系統(tǒng)自定義了CManageMdedic,CMedicSearch,CS
8、ale,CUser,和CMedic類模塊,而且從CRecordSet繼承了CMedicSet,CUserSet,CSaleSer類,連接數(shù)據(jù)庫中對應(yīng)的表。 a. 藥品類 CMedic 該類主要用于記錄藥品信息表中的各字段,主要包含一些成員變量,無成員函數(shù)。 class CMedic { public: CMedic(); virtual ~CMedic(); public: CString m_MedicineID; CString m_MedicineName; CString m_MedicineClassification; CTime m_Pr
9、oduceDate; CString m_Produceplace; int m_MedicineNumber; CString m_Description; float m_UnitPrice; int m_QeulityAssurancePeriod; int m_LowestNumber; int m_HighestNumber; CString m_ProduceCompany; }; b. 出售單類CSale 出售單類記錄saleTable數(shù)據(jù)表中的字段值,主要包含一些成員變量,無成員函數(shù) class CSale { publi
10、c: CSale(); virtual ~CSale(); public: CString m_MedicineID; CString m_MedicineName; int m_MedicineNumber; float m_MedicinePrice; }; c.藥品管理類CManageMedic 該類主要實(shí)現(xiàn)藥品的操作功能,包括藥品入庫,藥品出售,和藥品處理等,其成員變量和成員函數(shù)的定義如下: class CManageMedic { public: void DeleteOverdueMedic(); void Delet
11、eAllZeroNumber(); CTime GetExpireTime(); float CheckOut(); BOOL Recover(); BOOL DeleteFromSaleTable(); BOOL ModifyFromSaleTable(); BOOL AddToSaleTable(); void SetSaleSet(CSaleSet* theSaleSet); void SetSale(CSale* theSale); void Import(); void SetMedicSet(CMedicSet* theMedicSet);
12、 void SetMedic(CMedic* theMedic); CManageMedic(); virtual ~CManageMedic(); protected: CMedic* m_theMedic; CMedicSet* m_theMedicSet; CSale* m_theSale; CSaleSet* m_theSaleSet; }; d.藥品查詢類CMedicSearch 該類實(shí)現(xiàn)藥品的各種查詢功能,其成員變量和成員函數(shù)的定義如下。 class CMedicSearch { public: void SearchOver
13、dueMedic(); void SearchZeroNumber(); void SearchAll(); void Search(CString str,int flag); void SetMedicSet(CMedicSet* theMedicSet); void SetListCtrl(CListCtrl* theListCtrl); CMedicSearch(); virtual ~CMedicSearch(); protected: CMedicSet* m_theMedicSet; CListCtrl* m_theListCtrl; };
14、 e.用戶管理類CUser 該類實(shí)現(xiàn)用戶的管理功能,包括用戶登錄,注冊用戶,查詢用戶,更換用戶,修改密碼,其成員變量和才成員函數(shù)的定義如下: class CUser { public: void ModifyPassword(CUserSet* theSet); CString GetPassword(); CString GetAccount(); void SetPassword(CString password); CString GetType(); void SeekUserInfo(int typeRadio,CString str,CUs
15、erSet* theSet); void SetAccount(CString account); void DeleteUser(CUser* user,CUserSet* userSet); BOOL AddNewUser(CUser* newUser,CUserSet* theSet); void SetAllMember(CString account,CString password,CString type,CString name); BOOL LogIn(CUserSet*); CUser(); virtual ~CUser(); protec
16、ted: CString m_userAccount; CString m_userPassword; CString m_userName; CString m_userType; }; f.記錄集類CMedicSet,CUserSet,CSaleSet 這3個類是以CRecordSet類為基類創(chuàng)建的,分別連接數(shù)據(jù)庫中的medicine表,user表,saleTable表,通過Visual C++6.0提供的類創(chuàng)建向?qū)υ捒?,可以?shí)現(xiàn)這3個類的創(chuàng)建。以CMedicSet類為例,創(chuàng)建過程如下: 在Visual C++6.0中,執(zhí)行“Insert”→“New Class“
17、菜單命令,彈出”New Class“對話框,在其中設(shè)置創(chuàng)建的類CMedicSet和基類CRecordSet 如下圖。 同理CUserSet和CSaleSet創(chuàng)建過程也是這樣。 3.6 主界面設(shè)計(jì) 系統(tǒng)采用標(biāo)準(zhǔn)的單文檔程序界面,并采用窗口分隔技術(shù)將客戶窗口試圖分隔為左右兩部分,分別用于顯示用戶信息和藥品信息。 藥品信息視圖類 CMedicListView 以CListView類為基類,創(chuàng)建新的列表視圖類CMedicListView,通過列表的形式顯示藥品信息。在CMedicListView類的OnCreate函數(shù)中,創(chuàng)建列表項(xiàng)和表頭,主要代碼如下。 int C
18、MedicListView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CListView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here theListCtrl=&GetListCtrl(); ModifyStyle(0,LVS_REPORT); ASSERT(GetStyle() & LVS_REPORT); CString medicField[9]={"藥
19、品代碼","藥品名稱","藥品類別","庫存數(shù)量","出產(chǎn)公司","產(chǎn)地","出產(chǎn)時間","保質(zhì)期(月)","單價(元)"}; for(int i=0;i<8;i++) { theListCtrl->InsertColumn(i,medicField[i],LVCFMT_LEFT,70); } theListCtrl->InsertColumn(8,medicField[8],LVCFMT_LEFT,58); return 0; } 用戶信息視圖類CUserTreeView 以CTreeView類為基類,創(chuàng)建新的樹形視圖類CUserTreeview,以樹的形
20、式顯示用戶類別及各類別下注冊的用戶。在CUserTreeView類的PreCreateWindows函數(shù)中,設(shè)置樹形控件的屬性,主要代碼如下: BOOL CUserTreeView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Add your specialized code here and/or call the base class cs.style |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT; return CTreeView::PreCreateWindow(c
21、s); } 在CUserTreeView類的OnInitialUpdate函數(shù)中,設(shè)置醫(yī)生,售藥員,和管理員三個樹的根目錄,并讀取數(shù)據(jù)庫中用戶表中的數(shù)據(jù),將相應(yīng)類別的用戶代碼添加的樹到子目錄中。 void CUserTreeView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class m_theTreeCtrl=&GetTreeCtrl(); m_theImageList.Crea
22、te(IDB_TREE_BITMAP,16,1,RGB(0,255,0)); m_theTreeCtrl->SetImageList(&m_theImageList,TVSIL_NORMAL); CString userTreeHeader[3]={"醫(yī)生","售藥員","管理員"}; HTREEITEM userItem[3]; for(int i=0;i<3;i++) { userItem[i]=m_theTreeCtrl->InsertItem(userTreeHeader[i],0,0,TVI_ROOT); m_theTreeCtrl->SetItemD
23、ata(userItem[i],(DWORD)i); } CMedicAdminDoc* pDoc=(CMedicAdminDoc*)GetDocument(); CUserSet* userSet=&pDoc->theUserSet; if(userSet->IsOpen()) { userSet->Close(); } userSet->Open(); CLogInDlg logInDlg; logInDlg.DoModal(); CUser* theUser=&pDoc->theUser; HTREEITEM thePoint
24、; for(i=0;i<3;i++) { userSet->m_strFilter="UserClassification='"+userTreeHeader[i]+"'"; userSet->Requery(); for(int j=0;;j++) { if(userSet->IsEOF()) { break; } if(userSet->m_UserAccount==theUser->GetAccount()) { HTREEITEM userSpecifics=m_theTreeCtrl->In
25、sertItem(userSet->m_UserAccount+"(當(dāng)前用戶)",2,2,userItem[i]); m_theTreeCtrl->SetItemData(userSpecifics,(DWORD)j); thePoint=userSpecifics; } else { HTREEITEM userSpecifics=m_theTreeCtrl->InsertItem(userSet->m_UserAccount,3,3,userItem[i]); m_theTreeCtrl->SetItemData(userSp
26、ecifics,(DWORD)j); } userSet->MoveNext(); } } m_theTreeCtrl->Select(thePoint,TVGN_CARET); } 實(shí)現(xiàn)視圖窗口的分隔 窗口分隔采用靜態(tài)分隔的方式。在主框架類CMainFrame的OnCreateClient函數(shù)中,通過CSplitterWnd類將客戶窗口分隔為左右兩部分,并分別對應(yīng)前面創(chuàng)建的兩個視圖類,主要代碼如下: BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContex
27、t) { // TODO: Add your specialized code here and/or call the base class m_wndSplitter.CreateStatic(this,1,2);//分割窗口為兩列 m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CUserTreeView),CSize(130,600),pContext); m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMedicListView),CSize(700,600),pContext);
28、return TRUE; //return CFrameWnd::OnCreateClient(lpcs, pContext); } 其中,m_wndSplitter在頭文件中定義的CSplitterWnd類對象如下 Protected: CSplitterWnd m_wndSplitter; 3.7 登錄模塊設(shè)計(jì) 當(dāng)程序啟動時,在主界面窗口出現(xiàn)之前,首先彈出登錄對口框,如下圖,用戶需要輸入賬號,密碼等信息,只有通過驗(yàn)證的用戶才能進(jìn)入系統(tǒng),否則系統(tǒng)自動退出。登錄對口框?qū)?yīng)的對話框類為ClogInDlg,在CUserTreeView類的OnInitialUpdate函數(shù)中創(chuàng)建和調(diào)
29、用,登錄對話框確定按鈕響應(yīng)函數(shù)OnOK的實(shí)現(xiàn)代碼如下: void CLogInDlg::OnOK() { // TODO: Add extra validation here CMedicAdminDoc* pDoc=(CMedicAdminDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveDocument(); UpdateData(TRUE); pDoc->theUser.SetAllMember(m_userAccount,m_userPassword,m_userType,""); CUserSet* theUserS
30、et=&pDoc->theUserSet; BOOL flag=pDoc->theUser.LogIn(theUserSet); if(flag) { CDialog::OnOK(); } else { AfxMessageBox("您無權(quán)進(jìn)入該系統(tǒng)"); ExitProcess(1); //CDialog::OnOK(); } } 上述函數(shù)中的這行代碼BOOL flag=pDoc->theUser.LogIn(theUserSet); 使用了CUser類的LogIn函數(shù)對用戶的登錄信息進(jìn)行驗(yàn)證,實(shí)現(xiàn)代碼如下: BOOL CUser::LogIn(CUserSet* theSet) { theSet->m_strFilter="UserAccount='"+m_userAccount+"' and UserPassword='" +m_userPassword+"' and UserClassification='"+m_userType+"'"; theSet->Requery(); if(theSet->GetRecordCount()) { return TRUE; } return FALSE; }
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級數(shù)學(xué)下冊6整理和復(fù)習(xí)2圖形與幾何第7課時圖形的位置練習(xí)課件新人教版
- 2023年六年級數(shù)學(xué)下冊6整理和復(fù)習(xí)2圖形與幾何第1課時圖形的認(rèn)識與測量1平面圖形的認(rèn)識練習(xí)課件新人教版
- 2023年六年級數(shù)學(xué)下冊6整理和復(fù)習(xí)1數(shù)與代數(shù)第10課時比和比例2作業(yè)課件新人教版
- 2023年六年級數(shù)學(xué)下冊4比例1比例的意義和基本性質(zhì)第3課時解比例練習(xí)課件新人教版
- 2023年六年級數(shù)學(xué)下冊3圓柱與圓錐1圓柱第7課時圓柱的體積3作業(yè)課件新人教版
- 2023年六年級數(shù)學(xué)下冊3圓柱與圓錐1圓柱第1節(jié)圓柱的認(rèn)識作業(yè)課件新人教版
- 2023年六年級數(shù)學(xué)下冊2百分?jǐn)?shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級數(shù)學(xué)下冊1負(fù)數(shù)第1課時負(fù)數(shù)的初步認(rèn)識作業(yè)課件新人教版
- 2023年六年級數(shù)學(xué)上冊期末復(fù)習(xí)考前模擬期末模擬訓(xùn)練二作業(yè)課件蘇教版
- 2023年六年級數(shù)學(xué)上冊期末豐收園作業(yè)課件蘇教版
- 2023年六年級數(shù)學(xué)上冊易錯清單十二課件新人教版
- 標(biāo)準(zhǔn)工時講義
- 2021年一年級語文上冊第六單元知識要點(diǎn)習(xí)題課件新人教版
- 2022春一年級語文下冊課文5識字測評習(xí)題課件新人教版
- 2023年六年級數(shù)學(xué)下冊6整理和復(fù)習(xí)4數(shù)學(xué)思考第1課時數(shù)學(xué)思考1練習(xí)課件新人教版