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

📄 regeditdlg.cpp

📁 该程序医院信息管理系统
💻 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 + -