广东海洋大学 数据库课程设计 药品信息管理系统

药品信息管理系统

1 系统分析

1.1需求分析:

对药品信息管理主要需求就是对药品信息进行基本的管理,用户需要及时准确地掌握该诊所内现有的药品的基本信息(主要包括数量,单价,是否过期等)。同时,用户要求操作界面友好,操作简便,对数据库的操作安全可靠,药品从数据库中修改了,但还没结算时断电,要求数据库应该能恢复。

1.2功能分析:

系统需要实现的主要功能包括查询,删除,增加,修改四部分,各功能具体如下表所示

表1-1 系统的主要功能分析

2. 系统设计

2.1 绘制用例图设计系统功能

药品信息管理系统一共包含3钟用户角色,分别是医生,售药员,和管理员,权限依次提高,医生权限是可以查询库存药品信息,提供基本的用户管理功能(更改密码,更换用户), 例图如下

医生用例图

售药员的权限在医生的基础上,还具有药品管理的药品销售功能,用例图如下:

售药员用例图

管理员具有所有权限,包括查询药品,增加药品条目,出售药品,清理药库(包括清除数量为0的药品,清除过期药品等)及所有的用户管理功能,用例图如下:

管理员用例图

2.2 绘制系统流程图

本系统需要对用户身份进行验证,验证通过后再判断用户是属于医生,售药员或者是管理员中的哪一个角色,根据角色判断用户可以使用系统中的相应操作功能这里以管理员的身份为例 ,其流程图如下:

系统流程图

3. 数据库分析与设计

3.1 数据库概念设计

本系统一共设计规划出三个实体,分别是用户信息实体,药品信息实体,药品销售实体。

用户信息实体用于记录系统登录用户的信息,包括账号,密码,权限等相关信息其E-R 图如下:

图3-1 用户信息实体

药品信息实体是数据库的核心,记录了所存储的药品的基本信息,其E-R 图如下:

药品信息实体E-R 图

药品销售实体则记录了药品销售的相关信息,主要指药品的出售数量,出售总价等,其E-R 图如下:

药品销售实体E-R 图

3.2 数据库逻辑结构设计

根据设计好的各实体E-R 图创建数据库的逻辑结构,数据库各表的结构如下。 共3张表,分别是tb_medicine 和 tb_user,tb_saleTable. 表3-1 tb_medicine(药品基本信息表)

表3-2 tb_user(用户信息表

)

表3-3 tb_saleTable(药品销售表

)

3.3 数据库物理结构设计

3.4 系统类库设计

药品信息管理系统中的类库主要设计如下:

1. 药品管理类 CManageMecdic :用于对药库进行管理,主要包括药品入库,药品的出售,药库的清理,以及为实现这些函数而加的成员函数。

2. 药品查询类 CMedicSearch :其成员函数主要包括一般查询,查询库中数量为0的药品,查询过期药品等。

3. 用户管理类CUser :主要设立了为完成以下功能的成员函数,如新增用户,删除用户,查询用户信息,修改用户密码等。

4. 药品类CMedic :相当于一结构体,只是为了给系统提供一个数据类型,以对药品进行必要的管理,该类没有成员函数,该类一般作为CManageMedic 和CMedicSearch 类的一个成员变量。

5. 出售单类CSale :主要是给系统提供一个数据类型,以对药品出售进行有效的管理,该类也没有成员函数,该类作为CManageMedic 类的一个成员变量。 6. CMedicSet ,CUserSer ,CSaleSet 类:用于与数据库中的表相连,它们从CRecordSer 继承而来。

7. 一些对话框类:该系统许多地方都用到了对话框,这类对话框主要有CLlogInDlg ,CChangPasswordDlg ,CUserChangDlg,CStoreDlg ,CCleanUpDlg ,CSaleDlg 等

8. 系统本身提供的框架类:如CMainFrm ,CMedicAdminDoc ,CMedicAdminApp ,CMedicAdmicView 等。

3.5 公用模块设计

为了节省系统资源,实现代码重用,提高程序运行速度,可以将一些公用的数据信息放到模块中。本系统自定义了CManageMdedic ,CMedicSearch ,CSale ,CUser ,和CMedic 类模块,而且从CRecordSet 继承了CMedicSet ,CUserSet ,CSaleSer 类,连接数据库中对应的表。 a . 药品类 CMedic

该类主要用于记录药品信息表中的各字段,主要包含一些成员变量,无成员函数。 class CMedic {

public:

CMedic();

virtual ~CMedic(); public:

CString m_MedicineID; CString m_MedicineName;

CString m_MedicineClassification; CTime m_ProduceDate; 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 数据表中的字段值,主要包含一些成员变量,无成员函数

class CSale {

public:

CSale();

virtual ~CSale();

public:

CString m_MedicineID; CString m_MedicineName; int m_MedicineNumber; float m_MedicinePrice; };

c .药品管理类CManageMedic

该类主要实现药品的操作功能,包括药品入库,药品出售,和药品处理等,其成员变量和成员函数的定义如下:

class CManageMedic {

public:

void DeleteOverdueMedic(); void DeleteAllZeroNumber(); 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); void SetMedic(CMedic* theMedic); CManageMedic();

virtual ~CManageMedic();

protected:

CMedic* m_theMedic;

CMedicSet* m_theMedicSet; CSale* m_theSale;

CSaleSet* m_theSaleSet; };

d .药品查询类CMedicSearch

该类实现药品的各种查询功能,其成员变量和成员函数的定义如下。

class CMedicSearch

{

public:

void SearchOverdueMedic(); 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; };

e .用户管理类CUser

该类实现用户的管理功能,包括用户登录,注册用户,查询用户,更换用户,修改密码,其成员变量和才成员函数的定义如下:

class CUser {

public:

void ModifyPassword(CUserSet* theSet); CString GetPassword(); CString GetAccount();

void SetPassword(CString password); CString GetType();

void SeekUserInfo(int typeRadio,CString str,CUserSet* 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();

protected:

CString m_userAccount; CString m_userPassword; CString m_userName; CString m_userType; };

f .记录集类CMedicSet ,CUserSet ,CSaleSet

这3个类是以CRecordSet 类为基类创建的,分别连接数据库中的medicine 表,

user 表,saleTable 表,通过Visual C++6.0提供的类创建向导对话框,可以实现这3个类的创建。以CMedicSet 类为例,创建过程如下:

在Visual C++6.0中,执行“Insert ”→“New Class“菜单命令,弹出”New Class“对话框,在其中设置创建的类CMedicSet 和基类CRecordSet 如下图。

同理CUserSet 和CSaleSet 创建过程也是这样。

3.6 主界面设计

系统采用标准的单文档程序界面,并采用窗口分隔技术将客户窗口试图分隔为左右两部分,分别用于显示用户信息和药品信息。

药品信息视图类 CMedicListView

以CListView 类为基类,创建新的列表视图类CMedicListView ,通过列表的形式显示药品信息。在CMedicListView 类的OnCreate 函数中,创建列表项和表头,主要代码如下。

int CMedicListView::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]={"药品代码"," 药品名称"," 药品类别"," 库存数量"," 出产公司"," 产地"," 出产时间"," 保质期(月)"," 单价(元)"};

for(int i=0;i

{

theListCtrl->InsertColumn(i,medicField[i],LVCFMT_LEFT,70);

}

theListCtrl->InsertColumn(8,medicField[8],LVCFMT_LEFT,58);

return 0;

}

用户信息视图类CUserTreeView

以CTreeView 类为基类,创建新的树形视图类CUserTreeview ,以树的形式显示用户类别及各类别下注册的用户。在CUserTreeView 类的PreCreateWindows 函数中,设置树形控件的属性,主要代码如下:

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(cs);

}

在CUserTreeView 类的OnInitialUpdate 函数中,设置医生,售药员,和管理员三个树的根目录,并读取数据库中用户表中的数据,将相应类别的用户代码添加的树到子目录中。

void CUserTreeView::OnInitialUpdate()

{

CTreeView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class

m_theTreeCtrl=&GetTreeCtrl();

m_theImageList.Create(IDB_TREE_BITMAP,16,1,RGB(0,255,0));

m_theTreeCtrl->SetImageList(&m_theImageList,TVSIL_NORMAL); CString userTreeHeader[3]={"医生"," 售药员"," 管理员"};

HTREEITEM userItem[3];

for(int i=0;i

{

userItem[i]=m_theTreeCtrl->InsertItem(userTreeHeader[i],0,0,TVI_ROOT); m_theTreeCtrl->SetItemData(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;

for(i=0;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->InsertItem(userSet->m_UserAccount+"(当前用户)",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(userSpecifics,(DWORD)j); }

userSet->MoveNext();

}

}

m_theTreeCtrl->Select(thePoint,TVGN_CARET);

}

实现视图窗口的分隔

窗口分隔采用静态分隔的方式。在主框架类CMainFrame 的OnCreateClient 函数中,通过CSplitterWnd 类将客户窗口分隔为左右两部分,并分别对应前面创建的两个视图类,主要代码如下:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)

{

// 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);

return TRUE;

//return CFrameWnd::OnCreateClient(lpcs, pContext);

}

其中,m_wndSplitter在头文件中定义的CSplitterWnd 类对象如下

Protected :

CSplitterWnd m_wndSplitter;

3.7 登录模块设计

当程序启动时,在主界面窗口出现之前,首先弹出登录对口框,如下图,用户需要输入账号,密码等信息,只有通过验证的用户才能进入系统,否则系统自动退出。登录对口框对应的对话框类为ClogInDlg ,在CUserTreeView 类的OnInitialUpdate 函数中创建和调用,登录对话框确定按钮响应函数OnOK 的实现代码如下:

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* theUserSet=&pDoc->theUserSet;

BOOL flag=pDoc->theUser.LogIn(theUserSet);

if(flag)

{

CDialog::OnOK();

}

else

{

AfxMessageBox("您无权进入该系统");

ExitProcess(1);

//CDialog::OnOK();

}

}

上述函数中的这行代码BOOL flag=pDoc->theUser.LogIn(theUserSet); 使用了CUser 类的LogIn 函数对用户的登录信息进行验证,实现代码如下:

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 系统分析

1.1需求分析:

对药品信息管理主要需求就是对药品信息进行基本的管理,用户需要及时准确地掌握该诊所内现有的药品的基本信息(主要包括数量,单价,是否过期等)。同时,用户要求操作界面友好,操作简便,对数据库的操作安全可靠,药品从数据库中修改了,但还没结算时断电,要求数据库应该能恢复。

1.2功能分析:

系统需要实现的主要功能包括查询,删除,增加,修改四部分,各功能具体如下表所示

表1-1 系统的主要功能分析

2. 系统设计

2.1 绘制用例图设计系统功能

药品信息管理系统一共包含3钟用户角色,分别是医生,售药员,和管理员,权限依次提高,医生权限是可以查询库存药品信息,提供基本的用户管理功能(更改密码,更换用户), 例图如下

医生用例图

售药员的权限在医生的基础上,还具有药品管理的药品销售功能,用例图如下:

售药员用例图

管理员具有所有权限,包括查询药品,增加药品条目,出售药品,清理药库(包括清除数量为0的药品,清除过期药品等)及所有的用户管理功能,用例图如下:

管理员用例图

2.2 绘制系统流程图

本系统需要对用户身份进行验证,验证通过后再判断用户是属于医生,售药员或者是管理员中的哪一个角色,根据角色判断用户可以使用系统中的相应操作功能这里以管理员的身份为例 ,其流程图如下:

系统流程图

3. 数据库分析与设计

3.1 数据库概念设计

本系统一共设计规划出三个实体,分别是用户信息实体,药品信息实体,药品销售实体。

用户信息实体用于记录系统登录用户的信息,包括账号,密码,权限等相关信息其E-R 图如下:

图3-1 用户信息实体

药品信息实体是数据库的核心,记录了所存储的药品的基本信息,其E-R 图如下:

药品信息实体E-R 图

药品销售实体则记录了药品销售的相关信息,主要指药品的出售数量,出售总价等,其E-R 图如下:

药品销售实体E-R 图

3.2 数据库逻辑结构设计

根据设计好的各实体E-R 图创建数据库的逻辑结构,数据库各表的结构如下。 共3张表,分别是tb_medicine 和 tb_user,tb_saleTable. 表3-1 tb_medicine(药品基本信息表)

表3-2 tb_user(用户信息表

)

表3-3 tb_saleTable(药品销售表

)

3.3 数据库物理结构设计

3.4 系统类库设计

药品信息管理系统中的类库主要设计如下:

1. 药品管理类 CManageMecdic :用于对药库进行管理,主要包括药品入库,药品的出售,药库的清理,以及为实现这些函数而加的成员函数。

2. 药品查询类 CMedicSearch :其成员函数主要包括一般查询,查询库中数量为0的药品,查询过期药品等。

3. 用户管理类CUser :主要设立了为完成以下功能的成员函数,如新增用户,删除用户,查询用户信息,修改用户密码等。

4. 药品类CMedic :相当于一结构体,只是为了给系统提供一个数据类型,以对药品进行必要的管理,该类没有成员函数,该类一般作为CManageMedic 和CMedicSearch 类的一个成员变量。

5. 出售单类CSale :主要是给系统提供一个数据类型,以对药品出售进行有效的管理,该类也没有成员函数,该类作为CManageMedic 类的一个成员变量。 6. CMedicSet ,CUserSer ,CSaleSet 类:用于与数据库中的表相连,它们从CRecordSer 继承而来。

7. 一些对话框类:该系统许多地方都用到了对话框,这类对话框主要有CLlogInDlg ,CChangPasswordDlg ,CUserChangDlg,CStoreDlg ,CCleanUpDlg ,CSaleDlg 等

8. 系统本身提供的框架类:如CMainFrm ,CMedicAdminDoc ,CMedicAdminApp ,CMedicAdmicView 等。

3.5 公用模块设计

为了节省系统资源,实现代码重用,提高程序运行速度,可以将一些公用的数据信息放到模块中。本系统自定义了CManageMdedic ,CMedicSearch ,CSale ,CUser ,和CMedic 类模块,而且从CRecordSet 继承了CMedicSet ,CUserSet ,CSaleSer 类,连接数据库中对应的表。 a . 药品类 CMedic

该类主要用于记录药品信息表中的各字段,主要包含一些成员变量,无成员函数。 class CMedic {

public:

CMedic();

virtual ~CMedic(); public:

CString m_MedicineID; CString m_MedicineName;

CString m_MedicineClassification; CTime m_ProduceDate; 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 数据表中的字段值,主要包含一些成员变量,无成员函数

class CSale {

public:

CSale();

virtual ~CSale();

public:

CString m_MedicineID; CString m_MedicineName; int m_MedicineNumber; float m_MedicinePrice; };

c .药品管理类CManageMedic

该类主要实现药品的操作功能,包括药品入库,药品出售,和药品处理等,其成员变量和成员函数的定义如下:

class CManageMedic {

public:

void DeleteOverdueMedic(); void DeleteAllZeroNumber(); 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); void SetMedic(CMedic* theMedic); CManageMedic();

virtual ~CManageMedic();

protected:

CMedic* m_theMedic;

CMedicSet* m_theMedicSet; CSale* m_theSale;

CSaleSet* m_theSaleSet; };

d .药品查询类CMedicSearch

该类实现药品的各种查询功能,其成员变量和成员函数的定义如下。

class CMedicSearch

{

public:

void SearchOverdueMedic(); 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; };

e .用户管理类CUser

该类实现用户的管理功能,包括用户登录,注册用户,查询用户,更换用户,修改密码,其成员变量和才成员函数的定义如下:

class CUser {

public:

void ModifyPassword(CUserSet* theSet); CString GetPassword(); CString GetAccount();

void SetPassword(CString password); CString GetType();

void SeekUserInfo(int typeRadio,CString str,CUserSet* 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();

protected:

CString m_userAccount; CString m_userPassword; CString m_userName; CString m_userType; };

f .记录集类CMedicSet ,CUserSet ,CSaleSet

这3个类是以CRecordSet 类为基类创建的,分别连接数据库中的medicine 表,

user 表,saleTable 表,通过Visual C++6.0提供的类创建向导对话框,可以实现这3个类的创建。以CMedicSet 类为例,创建过程如下:

在Visual C++6.0中,执行“Insert ”→“New Class“菜单命令,弹出”New Class“对话框,在其中设置创建的类CMedicSet 和基类CRecordSet 如下图。

同理CUserSet 和CSaleSet 创建过程也是这样。

3.6 主界面设计

系统采用标准的单文档程序界面,并采用窗口分隔技术将客户窗口试图分隔为左右两部分,分别用于显示用户信息和药品信息。

药品信息视图类 CMedicListView

以CListView 类为基类,创建新的列表视图类CMedicListView ,通过列表的形式显示药品信息。在CMedicListView 类的OnCreate 函数中,创建列表项和表头,主要代码如下。

int CMedicListView::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]={"药品代码"," 药品名称"," 药品类别"," 库存数量"," 出产公司"," 产地"," 出产时间"," 保质期(月)"," 单价(元)"};

for(int i=0;i

{

theListCtrl->InsertColumn(i,medicField[i],LVCFMT_LEFT,70);

}

theListCtrl->InsertColumn(8,medicField[8],LVCFMT_LEFT,58);

return 0;

}

用户信息视图类CUserTreeView

以CTreeView 类为基类,创建新的树形视图类CUserTreeview ,以树的形式显示用户类别及各类别下注册的用户。在CUserTreeView 类的PreCreateWindows 函数中,设置树形控件的属性,主要代码如下:

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(cs);

}

在CUserTreeView 类的OnInitialUpdate 函数中,设置医生,售药员,和管理员三个树的根目录,并读取数据库中用户表中的数据,将相应类别的用户代码添加的树到子目录中。

void CUserTreeView::OnInitialUpdate()

{

CTreeView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class

m_theTreeCtrl=&GetTreeCtrl();

m_theImageList.Create(IDB_TREE_BITMAP,16,1,RGB(0,255,0));

m_theTreeCtrl->SetImageList(&m_theImageList,TVSIL_NORMAL); CString userTreeHeader[3]={"医生"," 售药员"," 管理员"};

HTREEITEM userItem[3];

for(int i=0;i

{

userItem[i]=m_theTreeCtrl->InsertItem(userTreeHeader[i],0,0,TVI_ROOT); m_theTreeCtrl->SetItemData(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;

for(i=0;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->InsertItem(userSet->m_UserAccount+"(当前用户)",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(userSpecifics,(DWORD)j); }

userSet->MoveNext();

}

}

m_theTreeCtrl->Select(thePoint,TVGN_CARET);

}

实现视图窗口的分隔

窗口分隔采用静态分隔的方式。在主框架类CMainFrame 的OnCreateClient 函数中,通过CSplitterWnd 类将客户窗口分隔为左右两部分,并分别对应前面创建的两个视图类,主要代码如下:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)

{

// 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);

return TRUE;

//return CFrameWnd::OnCreateClient(lpcs, pContext);

}

其中,m_wndSplitter在头文件中定义的CSplitterWnd 类对象如下

Protected :

CSplitterWnd m_wndSplitter;

3.7 登录模块设计

当程序启动时,在主界面窗口出现之前,首先弹出登录对口框,如下图,用户需要输入账号,密码等信息,只有通过验证的用户才能进入系统,否则系统自动退出。登录对口框对应的对话框类为ClogInDlg ,在CUserTreeView 类的OnInitialUpdate 函数中创建和调用,登录对话框确定按钮响应函数OnOK 的实现代码如下:

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* theUserSet=&pDoc->theUserSet;

BOOL flag=pDoc->theUser.LogIn(theUserSet);

if(flag)

{

CDialog::OnOK();

}

else

{

AfxMessageBox("您无权进入该系统");

ExitProcess(1);

//CDialog::OnOK();

}

}

上述函数中的这行代码BOOL flag=pDoc->theUser.LogIn(theUserSet); 使用了CUser 类的LogIn 函数对用户的登录信息进行验证,实现代码如下:

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;

}


相关文章

  • 广东海洋大学本科生毕业论文(设计)一览表
  • 广东海洋大学本科生毕业论文(设计)一览表 学院 :信息学院 专业:电子信息工程专业 班级:1031-1036 本班第 页共9页 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 学 ...查看


  • 中国学术期刊评价的做法及结果
  • 第2期 2008年6月评 价 与 管 理Evaluation&ManagementVol.6No.2Jun.2008 #中国学术期刊排行榜# 中国学术期刊评价的做法及结果 中国学术期刊评价委员会1,2 (1.中国科学评价研究中心,武 ...查看


  • 科技文献检索课程实习报告
  • 科技文献检索课程实习报告 学生姓名: 学号: 成 绩_____________ 院(系): 专业: 检索课题: 分子靶向抗肿瘤药物 一.课题分析 抗肿瘤靶向药物主要是单克隆抗体药物.小分子药物和细胞凋亡诱导药物.尽管抗肿瘤靶向药物与普通抗肿 ...查看


  • 2014年全国科研机构研究生招生计划
  • 2014年全国科研机构研究生招生计划 教育部.国家发展改革委日前印发了<关于下达2014年全国研究生招生计划的通知>,并公布了2014年全国研究生招生计划,其中2014年科研机构(不含教育部直属高校) 研究生招生计划如下: 20 ...查看


  • 上海交大专业介绍
  • 船舶海洋与建筑工程学院 点击进入该院系主页 船舶海洋与建筑工程学院下设船舶与海洋工程.工程力学.土木工程.交通运输工程.港口航道与海岸工程和建筑学6个系.学院现有船舶与海洋工程.工程力学.土木工程.交通运输工程.港口航道与海岸工程和建筑学6 ...查看


  • 食检专业建设总结报告
  • 食品营养与检查专业及专业群 建设项目总结报告 二0-0年十二月 目 录 一.项目概况 ............................................................................. ...查看


  • 广东海洋大学软件工程历年考题_答案
  • 01a 填空题(每空1分,共20分) 1.面向过程方法学强调_自顶向下__顺序地完成软件开发的各阶段任务:面向对象方法学的出发 点和基本原则是__模拟人类习惯的思维方式__,使开发软件的方法与过程尽可能接近人类认识世 界解决问题的方法与过程 ...查看


  • 广东高校名录
  • 肇庆医学高等专科学校 私立华联学院 民办南华工商学院 广东食品药品职业学院 广东轻工职业技术学院 广东水利电力职业技术学院佛山职业技术学院 广东农工商职业技术学院 广东新安职业技术学院 顺德职业技术学院 潮汕职业技术学院 深圳职业技术学院 ...查看


  • 大学专业介绍 1
  • 浙江工业大学专业介绍 健行学院 我校从1998年开始,每年从录取的新生中选拔一批成绩优异的学生组成提高班,2004年在提高班的基础上成立了健行学院.健行学院中的"健行",意为"厚德健行"." ...查看


热门内容