?? 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 + -