📄 querystockview.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 + -