MFC实现药物管理系统(一):视图界面的设计与实现

实现效果如下所示

在这里插入图片描述

1. 定义两个类,一个类作为视图左半部分,另一个类作为视图的右半部分

在这里插入图片描述
这两个类分别继承CTreeView和CListView

2. 添加一个数据库源,连接药品的数据库

在这里插入图片描述

3.在文档类中,第一个该数据库集的变量,并通过公有函数提供外部访问接口



private:
	CmedicineSet pMedicSet;

public:
	CmedicineSet *GetMedicSet();
	
CmedicineSet* CMedicAdmin_1Doc::GetMedicSet(){
	return &pMedicSet;
}

4. 拆分窗口

在框架类中定义拆分窗口变量

private:
	CSplitterWnd m_sWnd;

在框架类中重写onCreateClient函数

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO:  在此添加专用代码和/或调用基类
	m_sWnd.CreateStatic(this, 1, 2);
	//创建视图
	/*第一个参数和第二个参数:视图放的位置
	第三个参数:窗口中放置的类
	第四个参数:视图的大小*/
	m_sWnd.CreateView(0, 0, RUNTIME_CLASS(CUserTreeView), CSize(230, 600), pContext);
	m_sWnd.CreateView(0, 1, RUNTIME_CLASS(CMedicListView), CSize(720, 600), pContext);

	return TRUE;

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

5. 实现视图右半部分的展示药品功能

重写CMedicListView中的OnInitialUpdate()函数

void CMedicListView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

	// TODO:  在此添加专用代码和/或调用基类
	CMedicAdmin_1Doc *pDoc = (CMedicAdmin_1Doc *)GetDocument();
	CmedicineSet *pMedicSet = pDoc->GetMedicSet();
	if (pMedicSet->IsOpen() == false){
		pMedicSet->Open();
	}
	pMedicSet->Requery();

	//获取列表视图的列表视图控件
	CListCtrl &listCtrl = this->GetListCtrl();

	//设置列表视图控件的风格
	listCtrl.SetExtendedStyle(listCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
	//设置模式
	listCtrl.ModifyStyle(0, LVS_REPORT);

	//设置表头
	CString head[] = {
		TEXT("药品代号"), TEXT("药品名称"), TEXT("药品类别"),
		TEXT("库存数目"), TEXT("出厂公司"), TEXT("产地"),
		TEXT("出厂时间"), TEXT("保质期(月)"), TEXT("单价(元)")
	};
	int headsize = sizeof(head) / sizeof(head[0]);
	for (int i = 0; i < headsize; i++){
		//设置表头
		listCtrl.InsertColumn(i, head[i], LVCFMT_LEFT, 100);
	}
	int count = pMedicSet->GetRecordCount();
	for (int i = 0; i < headsize; i++){
		//设置行数据
		//药品代号
		listCtrl.InsertItem(i, pMedicSet->m_id);

		//设置列数据
		int j = 1;
		//药品名称
		listCtrl.SetItemText(i, j++, pMedicSet->m_name);
		//药品类别
		listCtrl.SetItemText(i, j++, pMedicSet->m_classification);

		//库存数目
		CString str;
		str.Format(TEXT("%d"), pMedicSet->m_number);
		listCtrl.SetItemText(i, j++, str);

		//出厂公司
		listCtrl.SetItemText(i, j++, pMedicSet->m_produceCompany);
		//产地
		listCtrl.SetItemText(i, j++, pMedicSet->m_producePlace);

		//出厂时间
		str = pMedicSet->m_produceDate.Format(TEXT("%Y-%m-%d"));
		listCtrl.SetItemText(i, j++, str);

		//保质期(月)
		str.Format(TEXT("%d"), pMedicSet->m_quelityAssurance);
		listCtrl.SetItemText(i, j++, str);

		//单价(元)
		str.Format(TEXT("%d"), pMedicSet->m_unitPrice);
		listCtrl.SetItemText(i, j, str);

		pMedicSet->MoveNext();

	}



}


6. 实现视图左半部分用户的展示

在这里插入图片描述加载图片
在这里插入图片描述
在CUerTreeView中定义一个CImageList变量

CImageList imageList;

重写CUerTreeView的OnlnitialUpdate()函数


void CUerTreeView::OnInitialUpdate()
{
	CTreeView::OnInitialUpdate();


	// TODO:  在此添加专用代码和/或调用基类

	// TODO:  在此添加专用代码和/或调用基类
	CMedicAdmin_1Doc *pDoc = (CMedicAdmin_1Doc *)GetDocument();
	//获取数据集指针
	CuserSet *pUserSet = pDoc->GetUserSet();
	if (pUserSet->IsOpen() == false){
		pUserSet->Open();
	}

	//获取视图关联的树控件
	CTreeCtrl &treeCtrl = this->GetTreeCtrl();
	//设置树控件的风格
	treeCtrl.ModifyStyle(NULL, WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP);

	HICON icon[3];
	icon[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
	icon[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
	icon[2] = AfxGetApp()->LoadIconW(IDI_ICON3);

	//加载图片
	m_imageList.Create(30, 30, ILC_COLOR32, 3, 3);
	for (int i = 0; i < 3; i++){
		m_imageList.Add(icon[i]);
	}

	//给树控件设置图像列表
	treeCtrl.SetImageList(&m_imageList, TVSIL_NORMAL);
	
	CString type[3] = { TEXT("管理员"), TEXT("医生"), TEXT("售药员") };
	for (int i = 0; i < 3; i++){
		//创建节点
		HTREEITEM Root = treeCtrl.InsertItem(type[i], 0, 0, NULL);
		//创建管理员的子节点
		CString sql;
		sql.Format(TEXT("classification = '%s'"), type[i]);
		pUserSet->m_strFilter = sql;
		pUserSet->Requery();

		while (pUserSet->IsEOF() == false){
			CString str;
			str.Format(TEXT("%s(%s)"), pUserSet->m_name, pUserSet->m_account);
			treeCtrl.InsertItem(str, 1, 1, Root);

			
			pUserSet->MoveNext();

		}
		
	}


}
	


猜你喜欢

转载自blog.csdn.net/xiuxiu__deng/article/details/88849941