⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 querystockview.cpp

📁 一个小型的医药零售管理系统
💻 CPP
字号:
// QueryStockView.cpp : implementation file
//

#include "stdafx.h"
#include "Remedy.h"
#include "QueryStockView.h"
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// 定义静态成员变量								
const int CQueryStockView::m_nFieldCount = 9;	
const CString CQueryStockView::m_strFields[m_nFieldCount] =
	{"品名", "规格", "剂型", "产地", "数量", "单位", "进价", "零售价","备注"};

// 声明全局对象theApp
extern CRemedyApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CQueryStockView

IMPLEMENT_DYNCREATE(CQueryStockView, CFormView)

CQueryStockView::CQueryStockView()
	: CFormView(CQueryStockView::IDD)
{
	//{{AFX_DATA_INIT(CQueryStockView)
	m_strMedName = _T("");
	m_strOutPrice = _T("");
	m_strQuantity = _T("");
	m_strInPrice = _T("");
	//}}AFX_DATA_INIT
}

CQueryStockView::~CQueryStockView()
{
}

void CQueryStockView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQueryStockView)
	DDX_Control(pDX, IDC_LIST, m_ctlList);
	DDX_Text(pDX, IDC_MEDNAME, m_strMedName);
	DDX_Text(pDX, IDC_OUTPRICE, m_strOutPrice);
	DDX_Text(pDX, IDC_QUANTITY, m_strQuantity);
	DDX_Text(pDX, IDC_INPRICE, m_strInPrice);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQueryStockView, CFormView)
	//{{AFX_MSG_MAP(CQueryStockView)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_QUERY, OnQuery)
	ON_BN_CLICKED(IDC_MODIFY, OnModify)
	ON_NOTIFY(NM_CLICK, IDC_LIST, OnClickList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQueryStockView diagnostics

#ifdef _DEBUG
void CQueryStockView::AssertValid() const
{
	CFormView::AssertValid();
}

void CQueryStockView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CQueryStockView message handlers

void CQueryStockView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	
	GetParentFrame()->SetWindowText("查询药品库存");
	
	AddListHeader();

	HRESULT hr = m_pRecordset.CreateInstance("ADODB.Recordset");
	if (!SUCCEEDED(hr))
	{
		MessageBox("创建Recordset对象失败!");
		return;
	}

	m_nItem = -1;
}

void CQueryStockView::OnDestroy() 
{
	CFormView::OnDestroy();
	
	((CMainFrame*)AfxGetMainWnd())->m_pQueryStock = NULL;	// 清空窗口指针	
}

//-----------------------------------------------------------------------------
// 功能: 为List控件增加表头
// 作者: 刘文澜
// 日期: 2004/5/2
//-----------------------------------------------------------------------------
void CQueryStockView::AddListHeader()
{
	int width[m_nFieldCount] = {160, 120, 80, 140, 73, 73, 80, 80, 122};
	m_ctlList.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);

	for (int i = 0; i < m_nFieldCount; i++)
		m_ctlList.InsertColumn(i, m_strFields[i], LVCFMT_CENTER, width[i]);
}

void CQueryStockView::OnQuery() 
{
	m_nItem = -1;	// 选择项先复位

	UpdateData();

	m_strUserInput = m_strMedName;

	m_ctlList.DeleteAllItems();		// 清空List1的所有内容

	char szSQL[100];				// 查询的SQL语句
	sprintf(szSQL, "select * from 库存 where 品名 like \'%s\'", m_strUserInput + "%");
	m_pRecordset->Open( _variant_t(szSQL),
					    _variant_t((IDispatch*)theApp.m_pConnection,true),
						adOpenStatic, adLockOptimistic, adCmdText);	
	if (m_pRecordset->adoEOF)		// 说明查找的结果为空,则只能进行添加操作
	{
		m_pRecordset->Close();
		return;
	}

	int index = 0;
	_variant_t values[m_nFieldCount];
	_variant_t fieldName;
	while (!m_pRecordset->adoEOF)	// 依次显示每条记录
	{
		for (int i = 0; i < m_nFieldCount; i++)
		{
			fieldName.SetString(LPCTSTR(m_strFields[i]));
			values[i] = m_pRecordset->GetCollect(fieldName);
			fieldName.Clear();
			if (i == 0)
				m_ctlList.InsertItem(index,(LPCTSTR)::GetString(values[i]));
			else
				m_ctlList.SetItemText(index, i, (LPCTSTR)::GetString(values[i]));
		}
		m_pRecordset->MoveNext();
		index++;		
	}
	m_pRecordset->Close();	

	GetTotalMoney();	
}

//-----------------------------------------------------------------------------
// 功能: 修改库存表中的记录,主要是常用的三个值:数量,进价,零售价
// 作者: 刘文澜
// 日期: 2004/5/2
//-----------------------------------------------------------------------------
void CQueryStockView::OnModify() 
{
	UpdateData();

	if (m_nItem == -1) 
	{
		MessageBox("请选择一个品种!","提示",MB_ICONINFORMATION);
		return;
	}

	if (AfxMessageBox("确认修改?",MB_YESNO|MB_ICONQUESTION ) == IDNO)
		return;

	char buf[100];
	sprintf(buf,"select * from 库存 where 品名 like \'%s\'",m_strUserInput + "%");
	m_pRecordset->Open(_variant_t(buf),
					    _variant_t((IDispatch*)theApp.m_pConnection,true),
						adOpenStatic,adLockOptimistic,adCmdText);

	for (int i = 0; i < m_nItem; i++)
		m_pRecordset->MoveNext(); // 指针指向当前纪录

	_variant_t vt1,vt2;
	vt1.SetString("数量");
	vt2.SetString((LPCTSTR)m_strQuantity);
	m_pRecordset->PutCollect(vt1,vt2);
	vt1.Clear();
	vt2.Clear();

	vt1.SetString("进价");
	vt2.SetString((LPCTSTR)m_strInPrice);
	m_pRecordset->PutCollect(vt1,vt2);
	vt1.Clear();
	vt2.Clear();

	vt1.SetString("零售价");
	vt2.SetString((LPCTSTR)m_strOutPrice);
	m_pRecordset->PutCollect(vt1,vt2);
	vt1.Clear();
	vt2.Clear();

	m_pRecordset->Update();
	m_pRecordset->Close();

	// 显示更新后的数据
	m_ctlList.SetItemText(m_nItem, 4, m_strQuantity);
	m_ctlList.SetItemText(m_nItem, 6, m_strInPrice);
	m_ctlList.SetItemText(m_nItem, 7, m_strOutPrice);

	GetTotalMoney();		// 重新显示总额		
}

//-----------------------------------------------------------------------------
// 功能: 当用户在List上用鼠标点击时的消息处理函数,获得当前的选择项,并把当前记
//       的值显示到编辑框中以便修改
// 作者: 刘文澜
// 日期: 2004/5/2
//-----------------------------------------------------------------------------
void CQueryStockView::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	POSITION pos = m_ctlList.GetFirstSelectedItemPosition();	
	if (pos == NULL)
	{
		m_nItem = -1;
		return;
	}
	m_nItem = m_ctlList.GetNextSelectedItem(pos);

	CString str1,str2,str3;
	m_strQuantity = m_ctlList.GetItemText(m_nItem,4);
	m_strInPrice  = m_ctlList.GetItemText(m_nItem,6);
	m_strOutPrice = m_ctlList.GetItemText(m_nItem,7);
	UpdateData(FALSE);

	*pResult = 0;
}

//-----------------------------------------------------------------------------
// 功能: 计算本次进货的总额,按照List中显示的内容来计算
// 作者: 刘文澜
// 日期: 2004/5/2
//-----------------------------------------------------------------------------
void CQueryStockView::GetTotalMoney()
{
	double fTotal = 0.0;
	for (int i = 0; i < m_ctlList.GetItemCount(); i++)
	{
		CString strQuantity = m_ctlList.GetItemText(i,4);
		CString strInPrice  = m_ctlList.GetItemText(i,6);

		fTotal += atoi(LPCTSTR(strQuantity)) * atof(LPCTSTR(strInPrice));
	}

	CString str1;
	str1.Format("%.2f",fTotal);
	SetDlgItemText(IDC_TVALUE,str1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -