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

📄 saleview.cpp

📁 VC下通过DB-LIBRARYDE的API函数操作SQLSERVER数据库.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SaleView.cpp : implementation file
//

#include "stdafx.h"
#include "PhysicM.h"
#include "SaleView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSaleView

IMPLEMENT_DYNCREATE(CSaleView, CFormView)

CSaleView::CSaleView()
	: CFormView(CSaleView::IDD)
{
	//{{AFX_DATA_INIT(CSaleView)
	m_price = 0.0;
	m_rate = 0.0;
	m_number = 0.0;
	m_edt = _T("");
	m_dt_rate = 0.0;
	//}}AFX_DATA_INIT
	//ImageList=NULL;
	init=false;
}

CSaleView::~CSaleView()
{
//	if (ImageList) delete ImageList;
}

void CSaleView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSaleView)
	DDX_Control(pDX, IDC_SALESMAN_COMB, m_SaleManComb);
	DDX_Control(pDX, IDC_HOSPITAL_COMB, m_HospitalComb);
	DDX_Control(pDX, IDC_PhysicName_COMB, m_PhysicComb);
	DDX_Control(pDX, IDC_PROVIDER_COMB, m_ProviderComb);
	DDX_Text(pDX, IDC_PRICE_EDIT, m_price);
	DDX_Text(pDX, IDC_RATE_EDIT, m_rate);
	DDX_Control(pDX, IDC_MSFLEXGRID1, m_Grid);
	DDX_Text(pDX, IDC_EDT, m_edt);
	DDX_Text(pDX, IDC_DEDIT, m_dt_rate);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSaleView, CFormView)
	//{{AFX_MSG_MAP(CSaleView)
	ON_CBN_SELCHANGE(IDC_PhysicName_COMB, OnSelchange)
	ON_CBN_SELCHANGE(IDC_PROVIDER_COMB, OnSelchangeProviderComb)
	ON_BN_CLICKED(IDC_ADD_BTN, OnAddBtn)
	ON_CBN_SELCHANGE(IDC_HOSPITAL_COMB, OnSelchangeHospitalComb)
	ON_EN_CHANGE(IDC_EDT, OnChangeEdt)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSaleView diagnostics

#ifdef _DEBUG
void CSaleView::AssertValid() const
{
	CFormView::AssertValid();
}

void CSaleView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSaleView message handlers

void CSaleView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	if (init) return;
	/*
	m_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
	char *head[]={"序 号","药品名称","单价","数量","金额","费率(%)","费用","医生","医生费率%","医生费用","供应商名称","医院","销售员","ID","备注"};
	int i;
	
	for (i=0;i<7;i++)
		m_List.InsertColumn(i,head[i],(i>1)?LVCFMT_RIGHT:LVCFMT_LEFT,(i==1) ? 100 : 55,i);
	for (i=7;i<9;i++)
		m_List.InsertColumn(i,head[i],(i>7)?LVCFMT_RIGHT:LVCFMT_LEFT,70,i);
	for (i=9;i<15;i++)
		m_List.InsertColumn(i,head[i],LVCFMT_LEFT,(i>9 && i<12) ? 150 :70);
	ImageList=new CImageList();
	ImageList->Create(16,16,TRUE | ILC_COLOR32,2,0);
	ImageList->Add(AfxGetApp()->LoadIcon(IDI_ICONUSER));
	ImageList->Add(AfxGetApp()->LoadIcon(IDR_MENUVIEW_TMPL));
	m_List.SetImageList(ImageList,LVSIL_SMALL);// LVSIL_NORMAL);
	*/
	Init();
	DefineGrid();

}
void CSaleView::Init()
{
	init=true;
	try{
		DBLibrary DB(GetDB());
		DB.Open("select a.physic_id phid,"
			"b.physic_name phn "
			" from physic_rate a,physic b"
			" where a.physic_id=b.physic_id "
			" order by a.physic_id");
		int id=0;
		char pn[40],tmp[50];
		memset(tmp,0,50);
		memset(pn,0,40);
		while(!DB.isEof())
		{
			id=DB.GetValue("phid");
			DB.GetValue("phn",pn);
			sprintf(tmp,"[%03d]%s",id,pn);
			m_PhysicComb.AddString(tmp);
			DB.Next();
		}
		/*
		DB.Open("select hospital_id hid,rtrim(hospital_name) hn from hospital order by hospital_id");
		memset(tmp,0,50);
		memset(pn,0,40);
		while(!DB.isEof())
		{
			id=DB.GetValue("hid");
			DB.GetValue("hn",pn);
			sprintf(tmp,"[%03d]%s",id,pn);
			m_HospitalComb.AddString(tmp);
			DB.Next();
		}
		*/
		DB.Open("select salesman_id sid,salesman_name sn from salesman order by salesman_id");
		memset(tmp,0,50);
		memset(pn,0,40);
		while(!DB.isEof())
		{
			id=DB.GetValue("sid");
			DB.GetValue("sn",pn);
			sprintf(tmp,"[%03d]%s",id,pn);
			m_SaleManComb.AddString(tmp);
			DB.Next();
		}
		/*
		DB.Open("select doctor_id did,doctor_name dn from doctor order by doctor_id");
		memset(tmp,0,50);
		memset(pn,0,40);
		while(!DB.isEof())
		{
			id=DB.GetValue("did");
			DB.GetValue("dn",pn);
			sprintf(tmp,"[%03d]%s",id,pn);
			m_DoctorComb.AddString(tmp);
			DB.Next();
		}
*/
	}catch (DBErr &err)
	{
		char *str;
		int code;
		err.GetLastErr(code,&str);
		//((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
		ShowErr(str,code);
	}
	catch (...)
	{
		ShowErr("unknow error",-1);
		//((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
	}

	
}

void CSaleView::OnSelchange() 
{

	m_Grid.SetRows(2);
	for(int i=0;i<m_Grid.GetCols() - 1;i++)
		m_Grid.SetTextMatrix(1,i,"");
	GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE);
	m_price=0;m_dt_rate=0;m_rate=0;
	
	UpdateData(FALSE);
	m_HospitalComb.ResetContent();
	m_ProviderComb.ResetContent();

	CString pn;
	m_PhysicComb.GetWindowText(pn);
	if(pn.IsEmpty()) return;
	CString pid=pn.Mid(1,3);
	
	DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
	try{
		DB.Open("select a.provider_id prid,"
			"b.provider_name pn "
			" from physic_rate a,provider b"
			" where a.physic_id=%s and a.provider_id=b.provider_id "
			" order by a.provider_id",pid);
		int id=0;
		char pn[40],tmp[50];
		memset(tmp,0,50);
		memset(pn,0,40);
		while(!DB.isEof())
		{
			id=DB.GetValue("prid");
			DB.GetValue("pn",pn);
			sprintf(tmp,"[%03d]%s",id,pn);
			m_ProviderComb.AddString(tmp);
			DB.Next();
		}
	}catch (DBErr &err)
	{
		char *str;
		int code;
		err.GetLastErr(code,&str);
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
	}
	catch (...)
	{
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
	}
	
}

void CSaleView::OnSelchangeProviderComb() 
{
	m_Grid.SetRows(2);
	for(int i=0;i<m_Grid.GetCols() - 1;i++)
		m_Grid.SetTextMatrix(1,i,"");
	GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE);
	CString pn,pr;
	m_PhysicComb.GetWindowText(pn);
	m_ProviderComb.GetWindowText(pr);
	if(pn.IsEmpty()) return;
	if(pr.IsEmpty()) return;

	CString pid,prid;
	pid=pn.Mid(1,3);
	prid=pr.Mid(1,3);
	
	DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
	try{
		DB.Open("select a.physic_id phid,"
			"b.physic_name phn,"
			" b.price,a.rate,a.doctor_rate"
			" from physic_rate a,physic b "
			" where a.physic_id=%s and a.provider_id=%s "
			" and a.physic_id=b.physic_id "
			" order by a.physic_id",pid,prid);
/*		double price,rate,d_rate;
		pric=0.00;
		rate=0.00;
		d_rate=0.00;
		*/
		DB.GetValue("price",&m_price);
		DB.GetValue("rate",&m_rate);
		DB.GetValue("doctor_rate",&m_dt_rate);
		//m_price=price
		UpdateData(FALSE);
		GetHospital();
	}catch (DBErr &err)
	{
		char *str;
		int code;
		err.GetLastErr(code,&str);
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
	}
	catch (...)
	{
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
	}
}

void CSaleView::OnAddBtn() 
{
	DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
	UpdateData();
	GetDlgItem(IDC_ADD_BTN)->EnableWindow(FALSE);
	CString pt,ht,st,prt,dt;
	CString pid,hid,sid,prid,did;
	CString num,price,sub_fee,real_fee,date,dt_rate;

	//double num=0.00,
	m_PhysicComb.GetWindowText(pt);
	m_HospitalComb.GetWindowText(ht);
	m_SaleManComb.GetWindowText(st);
	m_ProviderComb.GetWindowText(prt);
	
	pt.TrimLeft();
	pt.TrimRight();
	ht.TrimLeft();
	ht.TrimRight();
	st.TrimLeft();
	st.TrimRight();
	prt.TrimLeft();
	prt.TrimRight();
	try
	{
		if(m_dt_rate<=0) 
		{
			int rt=MessageBox("临床费为零或小于零,是否继续?","提示信息",MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2);
			if (rt != IDYES) throw "临床费为零或小于零,取消操作";
		}

		if(pt.IsEmpty())
			throw "药品名称不能为空,请选择";
		
		if(ht.IsEmpty())
			throw "医院名称不能为空,请选择";
		if(st.IsEmpty())
			throw "销售人员名称不能为空,请选择";
			
		if(prt.IsEmpty())
			throw "供应商名称不能为空,请选择";
	}catch(char *estr)
	{
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr);
		GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
		GetDlgItem(IDC_DEDIT)->SetFocus();
		DB.RollbackTrans();
		return;
	}
	
	pid=pt.Mid(1,3);
	hid=ht.Mid(1,3);
	sid=st.Mid(1,3);
	prid=prt.Mid(1,3);
	//did=dt.Mid(1,3);
	
//	DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
	/*
	if (!CheckGrid(&m_Grid)) {
		GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
		return;
	}
	*/
	double max_id=0;
	char errstr[100];
	try{
		DB.Open("SELECT IDENT_CURRENT('SALE_NUMBER') did "
			" FROM INFORMATION_SCHEMA.TABLES "
			" WHERE TABLE_NAME ='SALE_NUMBER' ");
		DB.GetValue("did",&max_id);
		max_id += 1;
		int id=(int)max_id;
		int rt=0,ct=0,rows,count=0;
		rows=m_Grid.GetRows();
		rows -= 1;
		DB.BeginTrans();
		for (rt=1;rt<rows;rt++)
		{
			dt=m_Grid.GetTextMatrix(rt,1);
			did=dt.Mid(1,3);
			did.TrimLeft();
			did.TrimRight();
			num=m_Grid.GetTextMatrix(rt,2);
			dt_rate=m_Grid.GetTextMatrix(rt,3);
			price=m_Grid.GetTextMatrix(rt,4);
			sub_fee=m_Grid.GetTextMatrix(rt,5);
			real_fee=m_Grid.GetTextMatrix(rt,6);
			date=m_Grid.GetTextMatrix(rt,7);
			num.TrimLeft();
			num.TrimRight();			
			if (atof(num) <= 0.00)	continue;
		
			price.TrimLeft();
			price.TrimRight();
			if (price.IsEmpty()) price="0";
			sub_fee.TrimLeft();
			sub_fee.TrimRight();
			if (sub_fee.IsEmpty()) sub_fee="0";
			date.TrimLeft();
			date.TrimRight();
			
			if (date.IsEmpty()) 
			{
				sprintf(errstr,"销售日期不能为空(第%d行),请输入",rt);
				throw errstr;
			}
			if(date.GetLength() != 10)
			{
				sprintf(errstr,"销售日期有误(第%d行),请检查",rt);
				throw errstr;
			}
			int year,month,day;
			year=atoi(date.Mid(0,4));
			month=atoi(date.Mid(5,2));
			day=atoi(date.Mid(8,2));
			COleDateTime dt;
			if (dt.SetDate(year,month,day) != 0) 
			{
				sprintf(errstr,"销售日期%s有误(第%d行),请更正",date,rt);
				throw errstr;
			}
			date=dt.Format("%Y-%m-%d");    
			if (did.IsEmpty()) {
				sprintf(errstr,"第%d行医生编号有误",rt);
				throw errstr;
			}
			
			DB.ExecSQL("INSERT INTO sale_number "
				"(Physic_ID,Hospital_ID,Salesman_ID,Provider_ID,doctor_id,Physic_Num,price,Rate,doctor_rate,sum_fee,Sub_Fee,real_fee,Sale_Date,Op_Date) "
				" VALUES(%s,%s,%s,%s,%s,%s,%.2f,%.2f,%s,%s,%s,%s,'%s',GetDate())",//
				pid,hid,sid,prid,did,num,m_price,m_rate,dt_rate,price,sub_fee,real_fee,date);//
			count++;
		}
		if (count == 0) throw "没有内容需要增加";

		DB.CommitTrans();
		
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddLog("新增销售记录%d条成功",count);
		GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -