📄 operatedlg.cpp
字号:
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 + -