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

📄 listdhdj.cpp

📁 这是一个信息管理系统的源代码
💻 CPP
字号:
// ListDHDJ.cpp: implementation of the CListDHDJ class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "a1.h"
#include "ListDHDJ.h"
#include "myfunction.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CListDHDJ::CListDHDJ()
{
	m_pstrlistKc=new CStringList[4];

	for(int i=0;i<100;i++)
	{
	m_iTheItemState[i]=0;
	m_iKc1Selected[i]=-1;
	m_iKc2Selected[i]=-1;
	}

	this->InitValuesFromDB();
}

CListDHDJ::~CListDHDJ()
{
	delete [] m_pstrlistKc;
}

void CListDHDJ::OnNewEditChange(const int& item,const int& sub_item)
{
	TRACE("void CListXSDJ::OnNewEditChange()\n");
	if(this->m_bSetValue) return ;
		ASSERT(this->m_poplist!=NULL);
	CString str;
	m_edit.GetWindowText(str);
	CString str_sl=this->GetItemText(item,4);
	switch(sub_item)
	{
	case 0:
		{		
			str.MakeUpper();

			if(!m_poplist->IsWindowVisible())
			m_poplist->ShowListPop();
			this->m_iTheItemState[item]=NOCK;


			int sl=0;
			sl=atoi(str_sl);
			if(sl&&str!=this->m_sSetFocus&&m_iKc1Selected[item]>=0&&m_iKc2Selected[item]>=0)
				this->CancelTheItem(item);

			this->m_poplist->RefreshListCtrlView(0,str);

			this->m_iKc1Selected[item]=-1;
			this->m_iKc2Selected[item]=-1;
			break;
		}
	case 1:
		{
			CString id=this->GetItemText(item,0);

			if(!m_poplist->IsWindowVisible())
			m_poplist->ShowListPop();
			this->m_iTheItemState[item]=NOID;


			int sl=0;
			sl=atoi(str_sl);
			if(sl&&str!=this->m_sSetFocus&&m_iKc1Selected[item]>=0&&m_iKc2Selected[item]>=0)
				this->CancelTheItem(item);

			this->m_poplist->RefreshListCtrlView(1,str,id,0);
			this->m_iKc1Selected[item]=-1;
			this->m_iKc2Selected[item]=-1;

			break;
		}
	case 2:
		{
			str.MakeUpper();
			CString id=this->GetItemText(item,0);
			CString ck_name2=this->GetItemText(item,3);

			if(!m_poplist->IsWindowVisible())
			m_poplist->ShowListPop();
			this->m_iTheItemState[item]=NONAME;


			int sl=0;
			sl=atoi(str_sl);
			if(sl&&str!=this->m_sSetFocus&&m_iKc1Selected[item]>=0&&m_iKc2Selected[item]>=0)
				this->CancelTheItem(item);

			this->m_poplist->RefreshListCtrlView(0,id,2,ck_name2,2,str);
			this->m_iKc1Selected[item]=-1;
			this->m_iKc2Selected[item]=-1;

			break;
		}
	case 3:
		{
			str.MakeUpper();
			CString id=this->GetItemText(item,0);
			CString ck_name1=this->GetItemText(item,2);

			if(!m_poplist->IsWindowVisible())
			m_poplist->ShowListPop();
			this->m_iTheItemState[item]=NONAME;
			int sl=0;
			sl=atoi(str_sl);
			if(sl&&str!=this->m_sSetFocus&&m_iKc1Selected[item]>=0&&m_iKc2Selected[item]>=0)
				this->CancelTheItem(item);

			this->m_poplist->RefreshListCtrlView(0,id,2,ck_name1,2,str);
			this->m_iKc1Selected[item]=-1;
			this->m_iKc2Selected[item]=-1;
			break;
		}
	case 4:
		{
				CString id=this->GetItemText(item,0);
				CString ck_name=this->GetItemText(item,2);
				CString a;
				POSITION pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[item]);
				a.Format("%d",m_lKc1Number-atoi(str)+this->m_edit.m_dSetFocusValue);
				this->m_pstrlistKc[3].SetAt(pos,a);
				pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[item]);
				a.Format("%d",m_lKc2Number+atoi(str)-this->m_edit.m_dSetFocusValue);
				this->m_pstrlistKc[3].SetAt(pos,a);

				this->m_poplist->RefreshListCtrlView(0,id,2,"");
				m_poplist->ShowListPop();
			break;
		}
	}
}
void CListDHDJ::OnEditSetFocus(const int& item, const int& subitem)
{
	CString str;
	m_edit.m_dSetFocusValue=0;
	m_edit.GetWindowText(str);
	this->m_sSetFocus=str;
	m_edit.GetWindowRect(&this->m_rectWindow);
	str.MakeUpper();
	switch(subitem)
	{
	case 0:
		{
//			CString id=this->GetItemText(item,1);
			this->m_poplist->ShowWindow(SW_HIDE);
				ASSERT(this->m_poplist!=NULL);
			this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
			this->m_poplist->RefreshListCtrlView(0,str);
			if(!m_poplist->IsWindowVisible())
			m_poplist->ShowListPop();
			break;
		}
	case 1:
		{
			this->m_poplist->ShowWindow(SW_HIDE);
				ASSERT(this->m_poplist!=NULL);
			this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
			CString id=this->GetItemText(item,0);
			this->m_poplist->RefreshListCtrlView(1,str,id,0);
			if(!m_poplist->IsWindowVisible())
			m_poplist->ShowListPop();
			break;
			
		}
	case 2:
		{
			this->m_poplist->ShowWindow(SW_HIDE);
				ASSERT(this->m_poplist!=NULL);
			this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
			CString id=this->GetItemText(item,0);
			CString ck_name2=this->GetItemText(item,3);
			this->m_poplist->RefreshListCtrlView(0,id,2,ck_name2,2,str);
			if(!m_poplist->IsWindowVisible())
			m_poplist->ShowListPop();
			break;
		}
	case 3:
		{
			this->m_poplist->ShowWindow(SW_HIDE);
				ASSERT(this->m_poplist!=NULL);
			this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
			CString id=this->GetItemText(item,0);
			CString ck_name1=this->GetItemText(item,2);
			this->m_poplist->RefreshListCtrlView(0,id,2,ck_name1,2,str);
			if(!m_poplist->IsWindowVisible())
			m_poplist->ShowListPop();
			break;
		}
	case 4:
		{
			if(this->CheckKc(item))//&&(IsSelected(item)!=-1)
			{
				this->m_poplist->ShowWindow(SW_HIDE);
				CString id=this->GetItemText(item,0);
				CString ck_name1=this->GetItemText(item,2);
				//this->m_edit.kc_number=atoi();
				this->m_lKc1Number=atoi(m_pstrlistKc[3].GetAt(m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[item])));
				this->m_lKc2Number=atoi(m_pstrlistKc[3].GetAt(m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[item])));
				CString ck_name2=this->GetItemText(item,3);
				if(ck_name1==ck_name2)goto wrongcase;
				this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
				this->m_poplist->RefreshListCtrlView(0,id,2,"");
				m_poplist->ShowListPop();
				if(str!="")
				this->m_edit.m_dSetFocusValue=atoi(str);
			}
			else
			{
					this->m_iEditedIndex=-1;
					m_edit.ShowWindow(SW_HIDE);
					this->SetNextItemFocus();
					MessageBox("请确定有此库存信息!!","注意");
			}

			break;
		}
	}
	return;
wrongcase:
					MessageBox("调出库不能等于调入库!","错误");
					this->m_iEditedIndex=1;
					m_edit.ShowWindow(SW_HIDE);
					this->SetNextItemFocus();
}
bool CListDHDJ::OnEditReturn(const int& item, const int& subitem)
{
	CString str;
	m_edit.GetWindowText(str);
	switch(subitem)
	{
	case 0:
	case 1:
		{	
			if(this->m_poplist->IsWindowVisible()&&this->m_poplist->GetSelectedMark()>=0)
			{
				this->SetValueUnChange(m_poplist->GetListCtrlSel(subitem));
				this->SetItemText(m_nItem,0,this->m_poplist->GetListCtrlSel(0));
				this->SetItemText(m_nItem,1,this->m_poplist->GetListCtrlSel(1));
				m_iTheItemState[item]=NOWRONG;
			}
			else
				SetValueUnChange("");

			break;
		}
	case 2:
	case 3:
		{
			if(this->m_poplist->IsWindowVisible()&&this->m_poplist->GetSelectedMark()>=0)
			{
				this->SetValueUnChange(m_poplist->GetListCtrlSel(2));
				this->SetItemText(item,subitem,this->m_poplist->GetListCtrlSel(2));
				m_iTheItemState[item]=NOWRONG;
			}
			else
				SetValueUnChange("");
			break;
		}
	case 4:
		{
				break;
		}
	}
	return CBaseList::OnEditReturn(item,subitem);
}
void CListDHDJ::OnEditKillFocus(const int& item, const int& subitem)
{
	TRACE("void CListXSDJ::OnEditKillFocus()\n");
	CString str;

	m_edit.GetWindowText(str);
	switch(subitem)
	{
	case 2:
	case 3:
		{
			str.MakeUpper();
			
			this->SetValueUnChange(str);
			break;
		}
	}
	CBaseList::OnEditKillFocus(item,subitem);
}

bool CListDHDJ::InitValuesFromDB()
{
	LRunSql m_runsql;
	CString sql;
	_variant_t value;

	m_pstrlistKc[0].AddTail("药品编号");
	m_pstrlistKc[1].AddTail("药品名称");
	m_pstrlistKc[2].AddTail("仓库名称 ");
	m_pstrlistKc[3].AddTail("库存数量");
	m_strlistNo.AddTail("");
	sql.Format("select tabkc.yp_id,tabkc.ck_name,tabkc.kc_number,\
		tabypinfo.yp_name from tabkc,tabypinfo \
		where tabkc.yp_id = tabypinfo.yp_id");

		m_runsql.CheckSQLResult(sql);
		while(!m_runsql.m_recordset->adoEOF)
		{
			value=m_runsql.m_recordset->GetCollect("yp_id");
			if(value.vt!=VT_NULL)
				m_pstrlistKc[0].AddTail((char*)(_bstr_t)value);
			value=m_runsql.m_recordset->GetCollect("yp_name");
			if(value.vt!=VT_NULL)
				m_pstrlistKc[1].AddTail((char*)(_bstr_t)value);
			value=m_runsql.m_recordset->GetCollect("ck_name");
			if(value.vt!=VT_NULL)
				m_pstrlistKc[2].AddTail((char*)(_bstr_t)value);
			value=m_runsql.m_recordset->GetCollect("kc_number");
			if(value.vt!=VT_NULL)
				m_pstrlistKc[3].AddTail((char*)(_bstr_t)value);
				m_strlistNo.AddTail((char*)(_bstr_t)value);
			m_runsql.m_recordset->MoveNext();
		}


	return true;
}

bool CListDHDJ::Create(DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID)
{
	bool b=CBaseList::Create(dwStyle,rect,pParentWnd,nID);
	m_poplist->SelectStringList(4,this->m_pstrlistKc);
	return b;

}

void CListDHDJ::OnEditUDNPMessage(const int& item, const int& subitem, UINT key)
{
	switch(subitem)
	{
	case 0:
	case 1:
	case 2:
	case 3:
		{
			this->m_poplist->SendTheUDNPMessage(key);
			break;
		}

	}
}

int CListDHDJ::CheckKc(const int& item)
{
	if(FindKc(item)>=0&&FindKc2(item)>=0)			
	{
			m_iTheItemState[item]=NOWRONG;
	}
	else 
	{
			TRACE("CKFALSE");
			m_iTheItemState[item]=0;
	}
	return m_iTheItemState[item];

}

int CListDHDJ::FindKc(const int& item)
{	int n=this->GetItemCount();
	if(item<-1||item>=n)return -1;
	CString ck_name=this->GetItemText(item,2);
	CString yp_id=this->GetItemText(item,0);
	CString yp_name=this->GetItemText(item,1);
	
	bool result=false;
	POSITION pos=NULL;int i;
   for( pos = this->m_pstrlistKc[0].GetHeadPosition(),i=0; pos != NULL; i++)
   {
		if(yp_id== m_pstrlistKc[0].GetNext( pos ))
			if(this->m_pstrlistKc[1].GetAt(this->m_pstrlistKc[1].FindIndex(i))==yp_name)
				if(this->m_pstrlistKc[2].GetAt(this->m_pstrlistKc[2].FindIndex(i))==ck_name)
				{
					return this->m_iKc1Selected[item]=i;			
				}
   }
   return this->m_iKc1Selected[item]=-1;
}

void CListDHDJ::OnESC(const int& item, const int& subitem)
{

	CString str;
	m_edit.GetWindowText(str);
	switch(subitem)
	{
	case 4:
				CString a;
				POSITION pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[item]);
				long number=atoi(m_pstrlistKc[3].GetAt(pos));
				a.Format("%d",number+atoi(str)-this->m_edit.m_dSetFocusValue);
				this->m_pstrlistKc[3].SetAt(pos,a);
				pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[item]);
				number=atoi(m_pstrlistKc[3].GetAt(pos));
				a.Format("%d",number-atoi(str)+this->m_edit.m_dSetFocusValue);
				this->m_pstrlistKc[3].SetAt(pos,a);
				break;
	}
	CBaseList::OnESC(item,subitem);

}

int CListDHDJ::IsSelected(const int& item)//if selected return -1, else return index;
{/*
	int index=this->FindKc(item);
	if(index<0)return m_iKcSelected[item]=-1;
	int n=this->GetItemCount();
	for(int i=0;i<n;i++)
	{
		if(i==item) continue;
		if(m_iKcSelected[i]==-1)
			if(!CheckKc(i)) continue;
		if(this->m_iKcSelected[i]==index)
			return m_iKcSelected[item]=-1;
	}
	return m_iKcSelected[item]=index;*/
	return 0;
}

void CListDHDJ::PreOnEditChar(const int& item, const int& subitem, UINT &key)
{

	switch(subitem)
	{

	case 4:
		if((key>=0x30&&key<=0x39)||key==0x08)
		{
			;
		}
		else
		{
		key=VK_CONTROL;
		}
		break;
	}
}

bool CListDHDJ::CheckAll()
{
	int n=GetItemCount();
	for(int i=0;i<n;i++)
	{
		if(GetItemText(i,0)==""&&GetItemText(i,1)=="")
		{
			DeleteItem(i);
			continue;
		}
		long number=0;
		if(!this->CheckTheItem(i))
		{
		return false;
		}
	}
	return true;	
}

bool CListDHDJ::CheckTheItem(const int& item)
{
	if(!this->CheckKc(item))
	{
		this->m_nItem=item;
		this->m_iEditedIndex=-1;
		MessageBox("请输入完整登记信息","注意");
		this->PostMessage(SETNEXTITEMPHFOCUS,0,0);	
		return false;
	}

	CString str=this->GetItemText(item,4);
	if(str==""||str=="0")
	{
		TRACE("SL false");	this->m_nItem=item;
		this->m_iEditedIndex=3;
		MessageBox("不可为空","错误");
		this->PostMessage(SETNEXTITEMPHFOCUS,0,0);
		return false; 
	}
	return true;

}

bool CListDHDJ::DeleteSelected()
{
	if(this->m_poplist->IsWindowVisible())
		this->m_poplist->ShowWindow(SW_HIDE);
	if(this->m_edit.IsWindowVisible())
		m_edit.ShowWindow(SW_HIDE);

	LVITEM* item=new LVITEM;
	int number=this->GetSelectedCount();
	for(int i=this->GetItemCount()-1;i>=0;i--)
	{
			this->m_nItem=i;
			item->iItem=i;
			item->mask=LVIF_STATE ;
			item->stateMask=LVIS_SELECTED ;
			GetItem(item);
		if(item->state==LVIS_SELECTED)
		{
			if(m_iKc1Selected[i]==-1)
			{
				DeleteItem(i);
				continue;
			}
			CString a;
			long sl=atoi(this->GetItemText(i,4));

			POSITION pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[i]);
			long number=atoi(m_pstrlistKc[3].GetAt(pos));
			a.Format("%d",number+sl);
			this->m_pstrlistKc[3].SetAt(pos,a);

			pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[i]);
			number=atoi(m_pstrlistKc[3].GetAt(pos));
			a.Format("%d",number-sl);
			this->m_pstrlistKc[3].SetAt(pos,a);

//			this->m_poplist->SelectStringList(4,this->m_pstrlistKc);

			DeleteItem(i);
			this->m_iKc1Selected[i]=-1;
			this->m_iKc2Selected[i]=-1;

		}
	}
		if(GetItemCount()==0)
			InsertItem(0,"");
		this->m_nItem=0;
		Invalidate();
	return true;
}

int CListDHDJ::FindKc2(const int& item)
{
	int n=this->GetItemCount();
	if(item<-1||item>=n)return -1;
	CString ck_name=this->GetItemText(item,3);
	CString yp_id=this->GetItemText(item,0);
	CString yp_name=this->GetItemText(item,1);
	
	bool result=false;
	POSITION pos=NULL;int i;
   for( pos = this->m_pstrlistKc[0].GetHeadPosition(),i=0; pos != NULL; i++)
   {
		if(yp_id== m_pstrlistKc[0].GetNext( pos ))
			if(this->m_pstrlistKc[1].GetAt(this->m_pstrlistKc[1].FindIndex(i))==yp_name)
				if(this->m_pstrlistKc[2].GetAt(this->m_pstrlistKc[2].FindIndex(i))==ck_name)
				{
					return this->m_iKc2Selected[item]=i;			
				}
   }
   return this->m_iKc2Selected[item]=-1;
}

bool CListDHDJ::CancelTheItem(const int &item)
{
	if(m_iKc1Selected[item]==-1)
	{
		return false;
	}
	CString a;
	long sl=atoi(this->GetItemText(item,4));

	POSITION pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[item]);
	long number=atoi(m_pstrlistKc[3].GetAt(pos));
	a.Format("%d",number+sl);
	this->m_pstrlistKc[3].SetAt(pos,a);

	pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[item]);
	number=atoi(m_pstrlistKc[3].GetAt(pos));
	a.Format("%d",number-sl);
	this->m_pstrlistKc[3].SetAt(pos,a);

//	this->m_poplist->SelectStringList(4,this->m_pstrlistKc);

	this->m_iKc1Selected[item]=-1;
	this->m_iKc2Selected[item]=-1;
	this->SetItemText(item,4,"");
	return true;

}

⌨️ 快捷键说明

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