📄 saleoperview.cpp
字号:
// SaleOperView.cpp : implementation file
//
#include "stdafx.h"
#include "Remedy.h"
#include "SaleOperView.h"
#include "MainFrm.h"
#include "msword8.h"
#include "SetPrintDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// 静态变量的定义
const int CSaleOperView::m_nFieldCount1 = 8;
const CString CSaleOperView::m_strFields1[m_nFieldCount1] =
{"品名", "规格", "剂型", "产地", "数量","单位", "零售价","备注"};
const int CSaleOperView::m_nFieldCount2 = 9;
const CString CSaleOperView::m_strFields2[m_nFieldCount2] =
{"品名", "规格", "剂型", "产地", "数量", "单位", "零售价", "售价", "金额"};
// 声明全局变量
extern CRemedyApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CSaleOperView
IMPLEMENT_DYNCREATE(CSaleOperView, CFormView)
CSaleOperView::CSaleOperView()
: CFormView(CSaleOperView::IDD)
{
//{{AFX_DATA_INIT(CSaleOperView)
m_strCustomer = _T("");
m_strMedName = _T("");
m_strQuantity = _T("");
m_strPrice = _T("");
m_strTotal = _T("");
m_strPerson = _T("");
//}}AFX_DATA_INIT
}
CSaleOperView::~CSaleOperView()
{
}
void CSaleOperView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSaleOperView)
DDX_Control(pDX, IDC_LIST2, m_ctlList2);
DDX_Control(pDX, IDC_LIST1, m_ctlList1);
DDX_Text(pDX, IDC_BUYER, m_strCustomer);
DDX_Text(pDX, IDC_NAME, m_strMedName);
DDX_Text(pDX, IDC_QUANTITY, m_strQuantity);
DDX_Text(pDX, IDC_PRICE, m_strPrice);
DDX_Text(pDX, IDC_TOTAL, m_strTotal);
DDX_Text(pDX, IDC_PERSON, m_strPerson);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSaleOperView, CFormView)
//{{AFX_MSG_MAP(CSaleOperView)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_QUERY, OnQuery)
ON_BN_CLICKED(IDC_SALE, OnSale)
ON_BN_CLICKED(IDC_UNDO, OnUndo)
ON_BN_CLICKED(IDC_PRINTDATA, OnPrintdata)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSaleOperView diagnostics
#ifdef _DEBUG
void CSaleOperView::AssertValid() const
{
CFormView::AssertValid();
}
void CSaleOperView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSaleOperView message handlers
void CSaleOperView::OnDestroy()
{
CFormView::OnDestroy();
((CMainFrame*)AfxGetMainWnd())->m_pSaleOper = NULL; // 清空窗口指针
}
void CSaleOperView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->SetWindowText("药品销售操作");
AddListHeader();
GetDlgItem(IDC_UNDO)->EnableWindow(FALSE);
// 实例化纪录集组件对象
HRESULT hr = m_pRecordset.CreateInstance("ADODB.Recordset");
if (!SUCCEEDED(hr))
{
MessageBox("创建Recordset对象失败!");
}
}
//-----------------------------------------------------------------------------
// 功能: 为List1和List2控件增加表头
// 作者: 刘文澜
// 日期: 2004/5/1
//-----------------------------------------------------------------------------
void CSaleOperView::AddListHeader()
{
int width1[m_nFieldCount1] = {145, 140, 80, 140, 90, 90, 90, 153};
m_ctlList1.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FLATSB|LVS_EX_FULLROWSELECT);
for (int i = 0; i < m_nFieldCount1; i++)
m_ctlList1.InsertColumn(i, m_strFields1[i], LVCFMT_CENTER, width1[i]);
int width2[m_nFieldCount2] = {145, 140, 80, 140, 70, 60, 80, 100, 113};
m_ctlList2.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FLATSB|LVS_EX_FULLROWSELECT);
for (i = 0; i < m_nFieldCount2; i++)
m_ctlList2.InsertColumn(i, m_strFields2[i], LVCFMT_CENTER, width2[i]);
}
//-----------------------------------------------------------------------------
// 功能: 把当前用户输入名字的全部药品显示到List1控件中,以便选择
// 备注: 因为品名不是主键,所以对应一个名字有多条记录
// 作者: 刘文澜
// 日期: 2004/5/1
//-----------------------------------------------------------------------------
void CSaleOperView::OnQuery()
{
UpdateData();
// 药品名称为空时提示用户
if (m_strMedName.IsEmpty())
{
MessageBox("请输入要查询的品名!", "提示", MB_ICONINFORMATION);
GetDlgItem(IDC_NAME)->SetFocus();
return;
}
// 记下用户输入的名称,保存至下一次查询前
m_strUserInput = m_strMedName;
m_ctlList1.DeleteAllItems();
m_ListInPrice.RemoveAll(); // 清空进价链表
// 打开纪录集
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);
if (m_pRecordset->adoEOF) // 说明纪录集为空
{
m_pRecordset->Close();
return;
}
// 把查询的结果显示到List1中
int index = 0;
while(!m_pRecordset->adoEOF)
{
CString strValues[m_nFieldCount1];
_variant_t field, values[m_nFieldCount1];
for (int i = 0; i < m_nFieldCount1; i++) // 依次读取每个字段的值
{
field.SetString(LPCTSTR(m_strFields1[i]));
values[i] = m_pRecordset->GetCollect(field);
field.Clear();
strValues[i] = GetString(values[i]);
}
m_ctlList1.InsertItem(index,strValues[0]);
for (int j = 1; j < m_nFieldCount1; j++)
m_ctlList1.SetItemText(index, j, strValues[j]);
CString strPrice = ::GetString(m_pRecordset->GetCollect("进价"));
m_ListInPrice.AddTail(strPrice);
index++; // 行号增加一个
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
}
//-----------------------------------------------------------------------------
// 功能: 进行一次销售操作
// 备注: 修改库存表,然后添加到销售表中
// 作者: 刘文澜
// 日期: 2004/5/1
//-----------------------------------------------------------------------------
void CSaleOperView::OnSale()
{
UpdateData();
// 判断用户是否选择了一个品种
POSITION pos = m_ctlList1.GetFirstSelectedItemPosition();
if (pos == NULL)
{
MessageBox("请选择一个品种!","提示",MB_ICONINFORMATION);
return;
}
m_nCurQuantity = atoi(LPCTSTR(m_strQuantity)); // 用户输入的数量
double fltPrice = atof(LPCTSTR(m_strPrice)); // 用户输入的售价
if (fltPrice == 0.0f)
{
MessageBox("请输入售价!", "提示", MB_ICONINFORMATION);
GetDlgItem(IDC_PRICE)->SetFocus();
return;
}
// 得到当前选中的纪录,局部变量不行,必须是类成员变量
m_nItem = m_ctlList1.GetNextSelectedItem(pos);
// 字符串数组,把List1中选中的一条记录复制下来(除备注之外)
CString strValues[m_nFieldCount1 - 1];
for (int i = 0; i < m_nFieldCount1 - 1; i++)
strValues[i] = m_ctlList1.GetItemText(m_nItem, i);
CString strMoney; // 金额
strMoney.Format("%.2f", fltPrice * m_nCurQuantity); // 金额 = 售价 * 数量
CTime t = CTime::GetCurrentTime();
CString strDate; // 日期
strDate.Format("%d-%d-%d", t.GetYear(), t.GetMonth(), t.GetDay());// 日期
m_nOldQuantity = atoi(LPCTSTR(strValues[4])); // 该品种原有数量,便于撤销用
int nRemainQuantity = m_nOldQuantity - m_nCurQuantity; // 减去销售数量后为剩余数量
if (nRemainQuantity < 0)
{
MessageBox("当前库中数量不足!", "提示", MB_ICONINFORMATION);
return;
}
// 首先要修改List1中药品的数量
CString strRemainQuantity;
strRemainQuantity.Format("%d", nRemainQuantity);
m_ctlList1.SetItemText(m_nItem, 4, strRemainQuantity);
// 在List2中显示当前销售的商品, 总是显示到最后一行
int nIndex = m_ctlList2.GetItemCount();
m_ctlList2.InsertItem(nIndex, strValues[0]);
for (i = 1; i < m_nFieldCount2; i++)
{
switch (i)
{
case 4: // 数量要显示销售掉的数量
m_ctlList2.SetItemText(nIndex, i, m_strQuantity);
break;
case 7: // 售价
m_ctlList2.SetItemText(nIndex, i, m_strPrice);
break;
case 8: // 金额
m_ctlList2.SetItemText(nIndex, i, strMoney);
break;
default:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -