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

📄 saleview.cpp

📁 VC下通过DB-LIBRARYDE的API函数操作SQLSERVER数据库.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		GetDlgItem(IDC_DEDIT)->SetFocus();
		m_edt="";
		UpdateData(FALSE);
		for(int row=1; row<m_Grid.GetRows();row++)
			for(int cols=2;cols<m_Grid.GetCols();cols++)
			{
				if (cols==3) continue;
				m_Grid.SetTextMatrix(row,cols,"");
			}

	}
	catch (DBErr &err)
	{
		char *str;
		int code;
		err.GetLastErr(code,&str);
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
		DB.RollbackTrans();
		GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
	}
	catch (char *estr)
	{
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr);
		DB.RollbackTrans();
		GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
	}
	catch(...)
	{
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
		DB.RollbackTrans();
		GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
	}	

}
void CSaleView::DefineGrid()
{
	int i,rows=8;
	m_Grid.SetCols(rows);
	m_Grid.SetRows(2);
	m_Grid.SetFixedCols(2);
	m_Grid.SetFixedRows(1);
	m_Grid.SetRowHeight(0,400);
	m_Grid.SetRowHeight(1,320);
	for (i=1;i<m_Grid.GetRows() -1;i++)
		m_Grid.SetRowHeight(i,320);
	int row=0;
	char *head[]={"序号","医   生","数  量 ","临床费","应付金额(元)","折扣费用","实付金额","日期"};//,"备   注"};
	
	
	for (i=0;i<rows;i++)
	{
		m_Grid.SetTextMatrix(row,i,head[i]);
		m_Grid.SetColAlignment(i,( i>1 && i<m_Grid.GetCols() - 1 ) ? 7 : 1);
	}
	m_Grid.SetColWidth(0,500);
	m_Grid.SetColWidth(1,1500);
	m_Grid.SetColWidth(2,1100);
	m_Grid.SetColWidth(3,680);
	m_Grid.SetColWidth(4,1300);
	m_Grid.SetColWidth(5,1200);
	m_Grid.SetColWidth(6,1200);
	m_Grid.SetColWidth(7,1200);

}
void CSaleView::SetEdtPos()
{
	 if (m_Grid.GetRow() == m_Grid.GetRows() - 1) return;
	 if (m_Grid.GetCol() == m_Grid.GetCols()-1) 
	 {
		 if (m_Grid.GetRow() > 1)
		 {
			 m_edt=m_Grid.GetTextMatrix(m_Grid.GetRow() - 1,m_Grid.GetCol());
			 UpdateData(FALSE);
			 m_Grid.SetTextMatrix(m_Grid.GetRow(),m_Grid.GetCol(),m_edt);
			 
		 }

	 }	 
	if (m_Grid.GetCol() == 6)
	{
		double real_fee=0.00;
		char tmp[20];
		real_fee = atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),4)) - atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),5));
		sprintf(tmp,"%.2f",real_fee);
		m_edt=tmp;
		UpdateData(FALSE);
		m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp);
		SumCol(6,m_Grid.GetRows() - 1);		
	}
	long x,y,cx,cy; 
	CRect rect;
	m_Grid.GetWindowRect(&rect);
	x= m_Grid.GetCellLeft()  / 15 + 10 ;
	y=m_Grid.GetCellTop();
	y= rect.top + m_Grid.GetCellTop()/15 - 65;
	cx=m_Grid.GetCellWidth() /15 + 1;
	cy=m_Grid.GetCellHeight() /15 + 2;
	GetDlgItem(IDC_EDT)->SetWindowPos(&wndTop,x,y,cx,cy,SWP_SHOWWINDOW);
	GetDlgItem(IDC_EDT)->SetFocus();
	GetDlgItem(IDC_EDT)->SendMessage(EM_SETLIMITTEXT,10,0);
	GetDlgItem(IDC_EDT)->SendMessage(EM_SETSEL,0,-1);
	
	//::SendMessage((HWND)GetDlgItem(IDC_EDT),WM_SETFOCUS,(HWND)GetDlgItem(IDC_EDT),0);
		
}

BEGIN_EVENTSINK_MAP(CSaleView, CFormView)
    //{{AFX_EVENTSINK_MAP(CSaleView)
	ON_EVENT(CSaleView, IDC_MSFLEXGRID1, -600 /* Click */, OnCellClick, VTS_NONE)
	ON_EVENT(CSaleView, IDC_MSFLEXGRID1, 71 /* EnterCell */, OnEnterCellMsflexgrid1, VTS_NONE)
	ON_EVENT(CSaleView, IDC_MSFLEXGRID1, 73 /* Scroll */, OnScrollMsflexgrid1, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CSaleView::OnCellClick() 
{
   if(m_Grid.GetRow()>0 || m_Grid.GetCol()>1 )
	   SetEdtPos();
 
}

void CSaleView::MoveEdt(MSG *pMsg)
{
	switch( pMsg->wParam)
	{
	case VK_LEFT:
		if(m_Grid.GetCol()>2) 
			m_Grid.SetCol(m_Grid.GetCol() - 1);
		else
		if(m_Grid.GetCol()== 2 && m_Grid.GetRow() > 1 )
		{
			m_Grid.SetRow(m_Grid.GetRow() - 1);
			m_Grid.SetCol(m_Grid.GetCols() - 1);
		}
		SetEdtPos();
		break;		
	case VK_RIGHT:
	case VK_RETURN:
	
		if(m_Grid.GetCol()< m_Grid.GetCols() - 1)
			m_Grid.SetCol(m_Grid.GetCol() + 1);
		else
		if (m_Grid.GetCol() == m_Grid.GetCols() - 1  && m_Grid.GetRow() < m_Grid.GetRows() - 2)
		{
			m_Grid.SetRow(m_Grid.GetRow() + 1);
			m_Grid.SetCol(2);
		}
		SetEdtPos();
		break;
	case VK_UP:
		if(m_Grid.GetRow() > 1)
			m_Grid.SetRow(m_Grid.GetRow() - 1);
		SetEdtPos();
		break;
	case VK_DOWN:
		if(m_Grid.GetRow() < m_Grid.GetRows() - 2)
			m_Grid.SetRow(m_Grid.GetRow() + 1 );
		SetEdtPos();
		break;
	}

}

BOOL CSaleView::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(pMsg->message == WM_KEYDOWN )
		MoveEdt(pMsg);
	return CFormView::PreTranslateMessage(pMsg);
}


void CSaleView::OnEnterCellMsflexgrid1() 
{
   m_edt.Empty();
   m_edt=m_Grid.GetText();
   UpdateData(FALSE);
}


void CSaleView::OnSelchangeHospitalComb() 
{
	UpdateData();
	m_Grid.SetRedraw(FALSE);
	m_Grid.SetRows(2);
	int cols=m_Grid.GetCols();
 	DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
	try{
		char tmp[50],pn[40];
		long id;
		CString m_id,p_id;
		m_HospitalComb.GetWindowText(m_id);
		p_id=m_id.Mid(1,3);
		DB.Open("select doctor_id did,doctor_name dn from doctor where hospital_id = %s order by doctor_id",p_id);
		memset(tmp,0,50);
		int i=1;
		while(!DB.isEof())
		{
			m_Grid.SetRows(m_Grid.GetRows()+1);
			m_Grid.SetRow(m_Grid.GetRows()-1);
			m_Grid.SetRowHeight(m_Grid.GetRows() - 1,310);
			sprintf(pn,"%03d",i);
			m_Grid.SetTextMatrix(i,0,pn);
			memset(pn,0,40);
			id=DB.GetValue("did");
			DB.GetValue("dn",pn);
			sprintf(tmp,"[%03d]%s",id,pn);
			m_Grid.SetTextMatrix(i,1,tmp);
			sprintf(tmp,"%.2f",m_dt_rate);
			for (int j=2;j<cols;j++)
				(j==3) ? m_Grid.SetTextMatrix(i,3,tmp) : m_Grid.SetTextMatrix(i,j,"");
			i++;
			DB.Next();
		}
	if (i==1) return;
	m_Grid.SetCellAlignment(4);
	m_Grid.SetTextMatrix(i,0,"合  计");
	m_Grid.SetTextMatrix(i,1,"合  计");
	m_Grid.SetMergeRow(i,TRUE);
	m_Grid.SetRedraw(TRUE);
	m_Grid.SetRow(1);
	SetEdtPos();	 
	}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);
	}

}
bool CSaleView::CheckGrid(CMSFlexGrid *pGrid)
{
	CString dt,did;
	CString num,price,sub_fee,real_fee,date,dt_rate;
	char errstr[100];

	int rt,count=0,rows=pGrid->GetRows()-1;
	try{
		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;
			}
			count++;
		}
		if (count == 0) throw "没有内容需要增加";
		return TRUE;
		
	}
	catch (char *estr)
	{
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr);
		return FALSE;
	}
	catch(...)
	{
		((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
		return FALSE;
	}	

}
void CSaleView::SumCol(int col,int rows)
{
	double sum=0.00;
	for (int i=1;i< rows;i++)
		sum += atof(m_Grid.GetTextMatrix(i,col));
	char str[20];
	sprintf(str,"%.2f",sum);
    m_Grid.SetTextMatrix(rows,col,(LPCTSTR) str);
}

void CSaleView::OnChangeEdt() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateData();
	m_Grid.SetText(m_edt);
	char tmp[20];
	double pay_fee=0.00;
	//输入数量	
	if(m_Grid.GetCol() == 2)
	{				
		pay_fee=atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),3)) * atof(m_edt);
		sprintf(tmp,"%.2f",pay_fee);
		m_Grid.SetTextMatrix(m_Grid.GetRow(),4,(LPCTSTR)tmp);
		m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp);
		SumCol(4,m_Grid.GetRows() - 1);
		SumCol(m_Grid.GetCol(),m_Grid.GetRows() - 1);
		SumCol(6,m_Grid.GetRows() - 1);
		return;
	}
	//临床费
	if(m_Grid.GetCol()==3)
	{
		pay_fee=atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),2)) * atof(m_edt);
		sprintf(tmp,"%.2f",pay_fee);
		m_Grid.SetTextMatrix(m_Grid.GetRow(),4,(LPCTSTR)tmp);
		m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp);
		SumCol(4,m_Grid.GetRows() - 1);
		SumCol(6,m_Grid.GetRows() - 1);
		return;
	}

	if (m_Grid.GetCol() == 4)
	{
		double real_fee=0.00;
		real_fee = atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),4)) - atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),5));
		sprintf(tmp,"%.2f",real_fee);
		m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp);
		SumCol(6,m_Grid.GetRows() - 1);
	}
	if (m_Grid.GetCol() == 7 ) return;
	SumCol(m_Grid.GetCol(),m_Grid.GetRows() - 1);

}
CDBSession CSaleView::GetDB()
{
	return ((CPhysicMApp *)AfxGetApp())->DBSession;
}
void CSaleView::ShowErr(char *str,int code)
{
	if(((CPhysicMApp *)AfxGetApp())->pMainFrm==NULL)
	{
		MessageBox(str,"错误提示",MB_OK | MB_ICONERROR);
		return;
	}
	((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(errcode:%d)",str,code);
}

void CSaleView::GetHospital()
{
	m_HospitalComb.ResetContent();
	try{
		DBLibrary DB(GetDB());
		int id=0;
		char pn[40],tmp[50];
		memset(tmp,0,50);
		memset(pn,0,40);
		DB.Open("select hospital_id hid,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();
		}
	}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::OnScrollMsflexgrid1() 
{
	GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_DEDIT)->SetFocus();
}

⌨️ 快捷键说明

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