📄 regeditdlg.cpp
字号:
// RegEditDlg.cpp : implementation file
//
#include "stdafx.h"
#include "HosptialMan.h"
#include "RegEditDlg.h"
#include "PatEditDlg.h"
#include "Registration.h"
#include "PatientSelectionDlg.h"
#include "PayItemsDlg.h"
#include "PayItems.h"
#include "columns.h"
#include "column.h"
#include "COMDEF.H"
#include "_recordset.h"
extern CUsers curUser;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRegEditDlg dialog
CRegEditDlg::CRegEditDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRegEditDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRegEditDlg)
m_PAge = _T("");
m_Change = _T("");
m_PIDNum = _T("");
m_PMarry = _T("");
m_RegId = _T("");
m_PSex = _T("");
m_Sum = _T("");
m_PName = _T("");
m_Pay = 0.0f;
m_Radio = -1;
//}}AFX_DATA_INIT
}
void CRegEditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRegEditDlg)
DDX_Text(pDX, IDC_AGE_STATIC, m_PAge);
DDX_Text(pDX, IDC_CHANGE_STATIC, m_Change);
DDX_Control(pDX, IDC_DEPTS_ADODC, m_AdoDept);
DDX_Control(pDX, IDC_DEPTS_DATACOMBO, m_DCmbDept);
DDX_Control(pDX, IDC_DOCTORS_ADODC, m_AdoDoctor);
DDX_Control(pDX, IDC_DOCTORS_DATACOMBO, m_DCmbDoctor);
DDX_Text(pDX, IDC_IDNUM_STATIC, m_PIDNum);
DDX_Text(pDX, IDC_MARRY_STATIC, m_PMarry);
DDX_Control(pDX, IDC_PAYITEMS_ADODC, m_AdoItem);
DDX_Text(pDX, IDC_REGID_STATIC, m_RegId);
DDX_Text(pDX, IDC_SEX_STATIC, m_PSex);
DDX_Text(pDX, IDC_SUM_STATIC, m_Sum);
DDX_Text(pDX, IDC_NAME_STATIC, m_PName);
DDX_Control(pDX, IDC_PAYITEMS_DATAGRID, m_DataGrid);
DDX_Text(pDX, IDC_PAY_EDIT, m_Pay);
DDX_Radio(pDX, IDC_RADIO1, m_Radio);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRegEditDlg, CDialog)
//{{AFX_MSG_MAP(CRegEditDlg)
ON_BN_CLICKED(IDC_PATIENTADD_BUTTON, OnPatientaddButton)
ON_BN_CLICKED(IDC_PATIENTSELECTION_BUTTON, OnPatientselectionButton)
ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
ON_BN_CLICKED(IDC_EDIT_BUTTON, OnEditButton)
ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
ON_EN_CHANGE(IDC_PAY_EDIT, OnChangePayEdit)
ON_BN_CLICKED(IDC_DELETE_BUTTON, OnDeleteButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRegEditDlg message handlers
// 添加新患者
void CRegEditDlg::OnPatientaddButton()
{
// TODO: Add your control notification handler code here
CPatEditDlg dlg;
if(dlg.DoModal() == IDOK) //打开患者信息编辑对话框
{ //如果用户单击“确定”按钮,则显示患者信息
cPatientId = PatientId; //患者编号
m_PName = PatientName; //姓名
m_PIDNum = PatientIDNum; //身份证号
m_PSex = PatientSex; //性别
m_PAge = PatientAge; //年龄
m_PMarry = PatientMarry; //婚姻状况
UpdateData(FALSE); //更新显示
}
}
void CRegEditDlg::OnPatientselectionButton()
{
// TODO: Add your control notification handler code here
CPatientSelectionDlg dlg;
if(dlg.DoModal() == IDOK) //打开选择患者对话框
{
cPatientId = PatientId; //患者编号
m_PName = PatientName; //姓名
m_PIDNum = PatientIDNum; //身份证号
m_PSex = PatientSex; //性别
m_PAge = PatientAge; //年龄
m_PMarry = PatientMarry; //婚姻状况
UpdateData(FALSE); //更新显示
}
}
BEGIN_EVENTSINK_MAP(CRegEditDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CRegEditDlg)
ON_EVENT(CRegEditDlg, IDC_DEPTS_DATACOMBO, 1 /* Change */, OnChangeDeptsDatacombo, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CRegEditDlg::OnChangeDeptsDatacombo()
{
// TODO: Add your control notification handler code here
// 当选择科室信息时,刷新医生信息
CString csDeptId,cSql;
csDeptId = m_DCmbDept.GetBoundText();
if(csDeptId!="")
{
cSql = "SELECT * FROM Doctor WHERE DeptId="+csDeptId;
m_AdoDoctor.SetRecordSource(cSql);
m_AdoDoctor.Refresh();
m_DCmbDoctor.SetText("");
}
}
void CRegEditDlg::OnAddButton()
{
// TODO: Add your control notification handler code here
CPayItemsDlg dlg;
UpdateData(true); //读取控件值到成员变量
dlg.cPayId = ""; //表示插入新记录
dlg.m_Radio = m_Radio;
if(dlg.DoModal() == IDOK) //打开编辑门诊登记单收费项目对话框
{
RefreshData(); //刷新显示
UpdateData(TRUE); //读取控件值到成员变量
// 计算应收金额
CPayItems cPI;
m_Sum.Format("%f",cPI.GetSum(RegistrationID));
float dd;
dd = m_Pay - atof(m_Sum); //应找金额
m_Change.Format("%f",dd);
UpdateData(FALSE); //更新显示
}
}
// 刷新收费信息
void CRegEditDlg::RefreshData()
{
CString cSql;
UpdateData(TRUE);
// 此语句分为2部分,药品和项目的组合
if (m_Radio == 0)
{
cSql = "SELECT p.PayId AS 编号,p.ItemId AS 项目编号,p.PType,'药品' AS 分类,";
cSql += "m.MedName AS 名称,p.PNum AS 销售数量,p.Price AS 销售价格,p.PNum*p.Price AS 金额,";
cSql += "m.TypeName AS 单位,m.Total AS sTotal FROM PayItems p,";
cSql += "(SELECT md.MedId,md.MedName,md.UnitId,md.Total,b.Id,b.TypeName ";
cSql += "FROM Medicine md,BaseType b WHERE b.TypeId=3 AND md.UnitId=b.Id) m ";
cSql += "WHERE p.ItemId=m.MedId AND p.PType=1 AND p.RegId="+RegistrationID;
}
else
{
cSql = "SELECT p.PayId AS 编号,p.ItemId AS 项目编号,p.PType,'其它项目' AS 分类,";
cSql += "i.ItemName AS 名称,p.PNum AS 销售数量,p.Price AS 销售价格,p.PNum*p.Price AS 金额,";
cSql += "i.TypeName AS 单位,i.Total AS sTotal FROM PayItems p,";
cSql += "(SELECT it.*,b.* FROM Items it,BaseType b WHERE b.TypeId=3 AND it.UnitId=b.Id) i ";
cSql += "WHERE p.ItemId=i.ItemId AND p.PType=2 AND p.RegId="+RegistrationID;
}
// MessageBox(cSql);
m_AdoItem.SetRecordSource(cSql);
m_AdoItem.Refresh();
// 设置列宽度
_variant_t vIndex;
vIndex = long(0);
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(0);
vIndex = long(1); // 项目编号
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(60);
vIndex = long(2); // 分类-隐藏
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(0);
vIndex = long(3); // 分类
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(50);
vIndex = long(4); // 名称
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(80);
vIndex = long(5); // 销售数量
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(50);
vIndex = long(6); // 销售价格
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(60);
vIndex = long(7); // 金额
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(60);
vIndex = long(8); // 单位
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(40);
vIndex = long(9); // 库存数量
m_DataGrid.GetColumns().GetItem(vIndex).SetWidth(0);
}
BOOL CRegEditDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Radio=0; //选择默认的收费类型
UpdateData(FALSE);
RefreshData(); //刷新收费项目
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CRegEditDlg::OnEditButton()
{
if(m_AdoItem.GetRecordset().GetEof())
{
MessageBox("请选择要修改的记录!");
return;
}
CPayItemsDlg dlg;
dlg.cPayId = m_DataGrid.GetItem(0); //记录编号
dlg.cItemID = m_DataGrid.GetItem(1); //项目编号
dlg.m_Radio = atoi(m_DataGrid.GetItem(2)) - 1; //收费类别
dlg.m_Name = m_DataGrid.GetItem(4); //项目名称
dlg.m_SalePrice = m_DataGrid.GetItem(6); //销售价格
dlg.m_SaleTotal = atof(m_DataGrid.GetItem(5)); //数量
dlg.m_SaleSum = m_DataGrid.GetItem(7); //总金额
dlg.m_Unit = m_DataGrid.GetItem(8); //计量单位
dlg.m_Total = m_DataGrid.GetItem(9); //库存数量
if(dlg.DoModal()==IDOK)
{
RefreshData();
// 计算应收金额,应找余额
UpdateData(TRUE);
CPayItems cPI;
m_Sum.Format("%f",cPI.GetSum(RegistrationID));
float dd;
dd = m_Pay - atof(m_Sum);
m_Change.Format("%f",dd);
UpdateData(FALSE);
}
}
void CRegEditDlg::OnCancel()
{
// TODO: Add extra cleanup here
// 删除数据库中记录,以及对应的收费信息
if (MessageBox("此项操作将删除此患者的门诊信息以及收费记录,是否继续?","请确认", MB_YESNO) == IDYES)
{
CRegistration cReg;
cReg.sql_Delete(RegistrationID);
CDialog::OnCancel();
}
}
void CRegEditDlg::OnRadio1()
{
// TODO: Add your control notification handler code here
// 当选择药品清单时,刷新DataGrid列表
RefreshData();
}
void CRegEditDlg::OnRadio2()
{
// TODO: Add your control notification handler code here
// 当选择项目清单时,刷新DataGrid列表
RefreshData();
}
void CRegEditDlg::OnChangePayEdit()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
// 更改实付金额时,应找余额金额同时变化
UpdateData(TRUE);
float dd;
dd = m_Pay - atof(m_Sum);
m_Change.Format("%f",dd);
UpdateData(FALSE);
}
void CRegEditDlg::OnDeleteButton()
{
// TODO: Add your control notification handler code here
if(m_AdoItem.GetRecordset().GetEof())
{
MessageBox("请选择要删除的记录!");
return;
}
CPayItems cPI;
cPI.sql_Delete(m_DataGrid.GetItem(0)); //删除数据
RefreshData(); //刷新显示
// 计算应收金额,应找余额
UpdateData(TRUE);
m_Sum.Format("%f",cPI.GetSum(RegistrationID));
float dd;
dd = m_Pay - atof(m_Sum);
m_Change.Format("%f",dd);
UpdateData(FALSE);
}
void CRegEditDlg::OnOK()
{
UpdateData(TRUE); //读取用户输入数据到成员变量
if(m_Pay<atof(m_Sum)) //判断实际金额是否准确
{
MessageBox("实际金额不能小于应付金额!");
return;
}
CRegistration cReg;
cReg.SetPatId(atoi(PatientId)); //患者编号
cReg.SetDocId(atoi(m_DCmbDoctor.GetBoundText())); //医生编号
cReg.SetUserName(curUser.GetUserName()); //操作用户
cReg.sql_Update(RegistrationID); //更新门诊登记单
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -