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

📄 operatedlg.cpp

📁 用算法来实现一个收费系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:

void COperateDlg::Play_Sound(int nType)
{
	sndPlaySound(NULL,SND_ASYNC);
	CString strWav ;
	strWav.Format("%d",nType) ;
	sndPlaySound(strWav,SND_ASYNC);
}

BOOL COperateDlg::ComparePassword(CString *pPassWord,CString *pManNum)
{
	CString password;
//	Database.OpenEx("DSN=hm;UID=sa;PWD=",CDatabase::useCursorLib|CDatabase::noOdbcDialog);
	
	CNameTable NameTable(&Database);
	NameTable.m_strFilter.Format("manid = " + *pManNum);
	if(!NameTable.Open())
		return false;
	if(NameTable.GetRecordCount() <= 0)
	{
		NameTable.Close();
		return false;
	}
	if(NameTable.m_MANPWD != *pPassWord)
	{
		NameTable.Close();
		return false;
	}
	if(NameTable.m_GRADE != 3)
	{
		NameTable.Close();
		return false;
	}
	m_sManName = NameTable.m_MANNAME;
	g_nManName = m_sManName;
	if(NameTable.m_WORK_CLASS==1)
	{
		g_nGongBan="01";
	}
	else if(NameTable.m_WORK_CLASS==2)
	{
		g_nGongBan="02";
	}
	else if(NameTable.m_WORK_CLASS==3)
	{
		g_nGongBan="03";
	}
	else if(NameTable.m_WORK_CLASS==4)
	{
		g_nGongBan="04";
	}
	else
	{
		g_nGongBan="00";
	}

	m_nWorkClass = NameTable.m_WORK_CLASS;
	NameTable.Close();
	return true;
}

void COperateDlg::FillTheData(int command)
{
		//COleDateTime Time = COleDateTime::GetCurrentTime();
	    CTime Time=CTime::GetCurrentTime();
		m_dDataUse.passtime = Time;
		m_dDataUse.command = command;
		m_dDataUse.property = 0;
		m_dDataUse.lane = m_nCurrenLane;
		m_dDataUse.man_NO = atol(m_sManNum.GetBuffer(4));
		m_dDataUse.vehcile_type = m_nVehicleType;
		memcpy(m_dDataUse.name,m_sManName.GetBuffer(20),20);
		m_dDataUse.year = Time.GetYear();
		m_dDataUse.month = Time.GetMonth();
		m_dDataUse.day = Time.GetDay();
		m_dDataUse.hour = Time.GetHour();
		m_dDataUse.min = Time.GetMinute();
		m_dDataUse.sec = Time.GetSecond();
		m_dDataUse.type=0;
		if((m_nVehicleType <=6 )&&(m_nVehicleType > 0))
		{
			m_dDataUse.fee = m_nFee[m_nVehicleType];
		}
		else
		{
			if (m_nVehicleType == 0x0b)
				m_dDataUse.fee = TZCheFee ;
			else
				m_dDataUse.fee = 0;
		}
		m_dDataUse.ticket_NO = atoi(m_TicketNum.GetBuffer(6));
		m_dDataUse.record_ID = m_nSernum++;
		g_LiuShuiHao.Format("%d",m_nSernum) ;
		theApp.WriteProfileString("信息","流水号",g_LiuShuiHao) ;
		m_dDataUse.work_class = m_nWorkClass;
}

void COperateDlg::TVShowTicketNum(int TicketNum)
{
	int Ticket_Num0 =0 ;
	int Ticket_Num1 =0 ;
	int Ticket_Num2 =0 ;
	int Ticket_Num3 =0 ;
	int Ticket_Num4 =0 ;
	int Ticket_Num5 =0 ;
	Ticket_Num0 = TicketNum ;
	Ticket_Num1 = Ticket_Num0/100000000 ;
	Ticket_Num0 = Ticket_Num0 - Ticket_Num1*100000000 ;
	Ticket_Num2 = Ticket_Num0/1000000 ;
	Ticket_Num0 = Ticket_Num0 - Ticket_Num2*1000000 ;
	Ticket_Num3 = Ticket_Num0/10000 ;
	Ticket_Num0 = Ticket_Num0 - Ticket_Num3*10000 ;
	Ticket_Num4 = Ticket_Num0/100 ;
	Ticket_Num5 = Ticket_Num0 - Ticket_Num4*100 ;
	TVWrite(0x2b,HextoBcd(Ticket_Num1));
	TVWrite2(0x2b,HextoBcd(Ticket_Num1));
	Sleep(10) ;
	TVWrite(0x2c,HextoBcd(Ticket_Num2));
	TVWrite2(0x2c,HextoBcd(Ticket_Num2));
	Sleep(10) ;
	TVWrite(0x2d,HextoBcd(Ticket_Num3));
	TVWrite2(0x2d,HextoBcd(Ticket_Num3));
	Sleep(10) ;
	TVWrite(0x2e,HextoBcd(Ticket_Num4));
	TVWrite2(0x2e,HextoBcd(Ticket_Num4));
	Sleep(10) ;
	TVWrite(0x2f,HextoBcd(Ticket_Num5));
	TVWrite2(0x2f,HextoBcd(Ticket_Num5));
}

void COperateDlg::TVShowTZType(int nType, int nFee)
{
	int nFee_l ;
	int nFee_h ;
	nFee_h = nFee ;
	nFee_h = nFee/100 ;
	nFee_l = nFee - nFee_h*100 ;
	TVWrite(0x40,HextoBcd(nType));
	TVWrite2(0x40,HextoBcd(nType));
	Sleep(10) ;
	TVWrite(0x32,HextoBcd(nFee_h));
	TVWrite2(0x32,HextoBcd(nFee_h));
	Sleep(10) ;
	TVWrite(0x33,HextoBcd(nFee_l));
	TVWrite2(0x33,HextoBcd(nFee_l));

}

void COperateDlg::TVWrite2(int reg, int num)
{
	int i,a;
	_outp(0x36c,(reg&0xff));
	_outp(0x36d,(num&0xff));
	for(i = 0 ; i < 5000 ; i++)
	{
		a = _inp(0x36e);
		a &= 1;
		if(a==0)
			return;
	}

}

BEGIN_EVENTSINK_MAP(COperateDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(COperateDlg)
	ON_EVENT(COperateDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
	ON_EVENT(COperateDlg, IDC_MSCOMM2, 1 /* OnComm */, OnCommSBY, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void COperateDlg::OnComm() 
{
	// TODO: Add your control notification handler code here
	
}

char COperateDlg::HexChar(char c)//检测一个字符是不是十六进制字符,若是返回相应的值,否则返回0x10;
{	if((c>='0')&&(c<='9'))
	return c-0x30;
	else if((c>='A')&&(c<='F'))
	return c-'A'+10;
	else if((c>='a')&&(c<='f'))
	return c-'a'+10;
	else return 0x10;
}

int COperateDlg::Str2Hex(CString str, CByteArray &data)
{//将一个字符串作为十六进制串转化为一个字节数组,字节间可用空格分隔,返回转换后的字节数组长度,同时字节数组长度自动设置。
	int t,t1;
	int rlen=0,len=str.GetLength();
	data.SetSize(len/2);
	for(int i=0;i<len;)
	{char l,h=str[i];
	if(h==' ')
	{i++;
	continue;
	}
	i++;
	if(i>=len)break;
	l=str[i];
	t=HexChar(h);
	t1=HexChar(l);
	if((t==16)||(t1==16))
		break;
	else t=t*16+t1;
	i++;
	data[rlen]=(char)t;
	rlen++;
	}
	data.SetSize(rlen);
	return rlen;

}


void COperateDlg::OnCommSBY() 
{
	// TODO: Add your control notification handler code here
VARIANT m_input1;
COleSafeArray m_input2;
long length,i;
BYTE data[1024];
CString str;
CString tempStr ;
Sleep(500);//释放资源方便语音报价
if(m_pShBYComm.GetCommEvent()==2)//接收缓冲区内有字符
{
	m_input1=m_pShBYComm.GetInput();//读取缓冲区内的数据
	m_input2=m_input1;//将VARIANT型变量转换为ColeSafeArray型变量
	length=m_input2.GetOneDimSize();//确定数据长度
	for(i=0;i<length;i++)
		m_input2.GetElement(&i,data+i);//将数据转换为BYTE型数组
	for(i=0;i<length;i++)//将数组转换为Cstring型变量
	{
		BYTE a=* (char *)(data+i);
		//if(m_hex.GetCheck())
		str.Format("%02X ",a);
		//else str.Format("%c",a);
		//m_ReceiveData+=str;
	}
}
if (str.GetLength() == 3)
{
	m_TxjRead = "Z" ;
	tempStr.Format("%d",g_Lane_No) ;
	if (str == "01 ")
		str = "01" ;
	if (str == "02 ")
		str = "02" ;
	if (str == "03 ")
		str = "03" ;
	if (str == "04 ")
		str = "04" ;
	if (str == "05 ")
		str = "05" ;
	if (str == "06 ")
		str = "06" ;

	tempStr = "0"+tempStr ;
	m_TxjSBYChexing = m_TxjRead + tempStr + str ;
	m_pMainFrame->m_pNetManger->PostThreadMessage(WM_KEYTXJ_USE,0,(LONG)&m_dDataUse) ;			
	//hm 2001.10.12
/*2002.01.15 	FillTheData1(4,atoi(str));
	FillTheData1(3,atoi(str));
	m_pMainFrame->m_pDatawrite->PostThreadMessage(WM_KEY_PRESS1,0,(LONG)&m_dDataUse1);*/
}
}

int COperateDlg::Key_CheckTicket(int nChar)
{
	int value;
 	static int CharNum = 0;
  	CRect rect(140,15,30,190);
 	switch(m_nStep1)
	{
	case 0:
		if(nChar == 0x1b)
		{
			CharNum = 0;
			m_nCurrenBmp = 4;
			m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
			m_bShowManNum = TRUE;
			m_bShowTickNum = TRUE;
			m_bShowFee = FALSE;
			Invalidate();
			m_nStep1 = 0;
			value = 2;
		}
		else if((nChar >= 0x30)&&(nChar <= 0x39))
		{
 			if(CharNum++<11)
 			{
 				if(CharNum == 1)
 					m_code = "";
 				m_code+= (char)nChar;
 				ShowText(&rect,CharNum,char(nChar));
 			}
			value = m_nStatu;
			m_nStep1 = 0;
		}
		else if(nChar == 0x0d)
		{
			if(m_code.GetLength()!=11)//条形码不足11位,返回
			{
				m_nCurrenBmp = 12;
				m_bShowManNum = TRUE;
				m_bShowTickNum = TRUE;
				m_bShowFee = TRUE;
				m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
				Invalidate();
				value=m_nStatu;
				m_nStep1 = 0;
				CharNum=0;
			}
			else //条形码足11位的处理代码
			{
			/*	CharNum = 0;
				m_nCurrenBmp = 13;
				m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
				m_bShowManNum = FALSE;
				m_bShowTickNum = FALSE;
				m_bShowFee = FALSE;
				Invalidate();*/
///////////判断时间是否超时/////////////////
				CString day;
				CString hour;
				CTime Time;
				BOOL TimeFlag;
				int Tyear;
				int Tmonth;
				int Tday;
				int Thour;
				hour=m_code.Mid(9,2);
				day=m_code.Mid(7,2);

				Time=CTime::GetCurrentTime();
				Tyear=Time.GetYear();
				Tmonth=Time.GetMonth();
				Tday=Time.GetDay();
				Thour=Time.GetHour();
				if(Tday==atoi(day))
				{
					TimeFlag=TRUE;
				}
				else if(Tday-atoi(day)==1)
				{
					if(Thour<=atoi(hour))
					{
						TimeFlag=TRUE;
					}
					else
					{
						TimeFlag=FALSE;
					}
				}
				else if(Tday-atoi(day)>1) 
				{
					TimeFlag=FALSE;

				}
				else
				{
					if(Tday==1)
					{
						Tmonth--;
						if(Tmonth==0)
						{
							Tyear--;
							Tmonth=12;
						}
						CTime Time1(Tyear,Tmonth,atoi(day),atoi(hour),59,59);
						CTimeSpan TimeSpan;
						TimeSpan=Time-Time1;
						if(TimeSpan.GetTotalHours()<=24)
						{
							TimeFlag=TRUE;
						}
						else
						{
							TimeFlag=FALSE;
						}
					}
					else
					{
						TimeFlag=FALSE;
					}
				}
				if(TimeFlag==FALSE)
				{
					//处理超时重新购票 
					m_nCurrenBmp = 14;
					m_bShowManNum = FALSE;
					m_bShowTickNum = FALSE;
					m_bShowFee = FALSE;
					m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
					Invalidate();
					m_nStep1 = 1;
					SetTimer(IDT_SHOWMES,1000,NULL);
					value=2;
					CharNum=0;

				}
				else
				{
////////比较本地库中条形码//////////////////
					CBarCode BarCode(&Database);
					BarCode.m_strFilter.Format("CODE ='%s'",m_code.Left(7));
					BarCode.Open();
					if(BarCode.IsEOF() && BarCode.IsBOF())//本地库中不存在该条形码
					{
						//放行入库
						m_nCurrenBmp = 11;
						m_bShowManNum = FALSE;
						m_bShowTickNum = FALSE;
						m_bShowFee = FALSE;
						m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
						Invalidate();
						m_nStep1 = 1;
						value=2;
						CharNum=0;
						g_nCheXing.Format("%d",12) ;
						g_nFeie = '0' ;
						TVShowTZType((m_nVehicleType-6),0) ;
//						AfxBeginThread(Bar_Up,NULL,THREAD_PRIORITY_NORMAL);HM 2001.10.18
						PostMessage(WM_BAR_UP);
						m_pMainView->SendMessage(WM_CHANGE_BAR,0,0);
						m_pMainView->SendMessage(WM_CHANGE_TLAMP,0,0);

						FillTheData(5);
						m_pMainFrame->m_pDatawrite->PostThreadMessage(WM_KEY_PRESS,0,(LONG)&m_dDataUse);
						m_TxjRead = "N" ;

						m_pMainFrame->m_pNetManger->PostThreadMessage(WM_KEYTXJ_USE,0,(LONG)&m_dDataUse) ;			
						m_nVehicleType = 0;
						SetTimer(IDT_SHOWMES,1000,NULL);
						Play_Sound(0);

						BarCode.AddNew();
						BarCode.m_CODE=m_code.Left(7);
						BarCode.Update();

					}
					else//即该票已经验过
					{
						m_nCurrenBmp = 15;
						m_bShowManNum = FALSE;
						m_bShowTickNum = FALSE;
						m_bShowFee = FALSE;
						m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
						Invalidate();
						m_nStep1 = 1;
						SetTimer(IDT_SHOWMES,1000,NULL);
						value=2;
						CharNum=0;
					}
					BarCode.Close();
				}
			}
		case 1:
			if(nChar == 0xff)
			{
				CharNum = 0;
				m_nCurrenBmp = 4;
				m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
				m_bShowManNum = TRUE;
				m_bShowTickNum = TRUE;
				Invalidate();
				m_nStep1 = 0;
				value = 2;
			}
			else
			{
				value = m_nStatu;
			}
			break;

		default:
			value = m_nStatu;
			break;
		}
	}

	return value;
}

void COperateDlg::FillTheData1(int command, int str)
{
	    CTime Time=CTime::GetCurrentTime();
		m_dDataUse1.passtime = Time;
		m_dDataUse1.command = command;
		m_dDataUse1.property = 0;
		m_dDataUse1.lane = m_nCurrenLane;
		m_dDataUse1.man_NO = atol(m_sManNum.GetBuffer(4));
		m_dDataUse1.vehcile_type = m_nVehicleType;
		memcpy(m_dDataUse1.name,m_sManName.GetBuffer(20),20);
		m_dDataUse1.year = Time.GetYear();
		m_dDataUse1.month = Time.GetMonth();
		m_dDataUse1.day = Time.GetDay();
		m_dDataUse1.hour = Time.GetHour();
		m_dDataUse1.min = Time.GetMinute();
		m_dDataUse1.sec = Time.GetSecond();
		m_dDataUse1.type=str;
		if((m_nVehicleType <=6 )&&(m_nVehicleType > 0))
		{
			m_dDataUse1.fee = m_nFee[m_nVehicleType];
		}
		else
		{
			if (m_nVehicleType == 0x0b)
				m_dDataUse1.fee = TZCheFee ;
			else
				m_dDataUse1.fee = 0;
		}
		m_dDataUse1.ticket_NO = atoi(m_TicketNum.GetBuffer(6));
		m_dDataUse1.record_ID = m_nSernum++;
		g_LiuShuiHao.Format("%d",m_nSernum) ;
		theApp.WriteProfileString("信息","流水号",g_LiuShuiHao) ;
		m_dDataUse1.work_class = m_nWorkClass;
}
void COperateDlg::Bar_Up()//LPVOID param
{
	_outp(0x3e2,0x20);
	Sleep(300);
	_outp(0x3e2,0x30);
}
void COperateDlg::Bar_Down()//LPVOID param
{
	_outp(0x3e2,0x11);
	Sleep(300);
	_outp(0x3e2,0x31);
}

void COperateDlg::FillTheDataAuto(WPARAM wP, LPARAM lP)
{
	FillTheData(4);
	m_pMainFrame->m_pDatawrite->PostThreadMessage(WM_KEY_PRESS,0,(LONG)&m_dDataUse);

}

⌨️ 快捷键说明

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