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

📄 operatedlg.cpp

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

#include "stdafx.h"
#include "LaneSoft.h"
#include "LaneSoftDoc.h"
#include "LaneSoftView.h"
#include "OperateDlg.h"
#include "IniData.h"
#include "NetComThread.h"
#include "ComWin.h"
#include "conio.h"
#include "NameTable.h"
#include "Datawritetread.h"
#include "FeeTable.h"
#include "BarCode.h"

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


/////////////////////////////////////////////////////////////////////////////
// COperateDlg dialog
HWND hwnd; 
extern CLaneSoftApp theApp;
extern CIniData theIniData;
extern CMainFrame * m_pMainFrame;
extern CLaneSoftView * m_pMainView;
extern int g_Lane_No ;
extern CString g_LiuShuiHao ;
extern CString g_Station_Name ;
extern CString m_TxjRead ;
extern CString m_TxjSBYChexing ;
extern CString strText ;
extern int g_Print;
extern int g_code;
extern int g_check;
CDatabase Database;

int	m_nInput;
int m_nHard;
int m_nBase_Statu;
CString g_nManNum ;
CString g_nTicketNum ;
CString g_nCheXing ;
CString g_nFeie ;
CString g_nBfh ;
CString g_nGongBan ;
CString g_nXuLieHao ;
int g_nLane ;
CString g_nManName ;
int g_nCommand ;
BOOL g_BTopRed;//顶棚红灯
BOOL g_BTopGreen;//顶棚绿灯
BOOL g_BLaneRed;//车道红灯
BOOL g_BLaneGreen;//车道绿灯
BOOL g_BBarUp;//栏杆起
BOOL g_BBarDown;//栏杆落
BOOL g_BLoop;//线圈
BOOL g_BBAK1;//
BOOL g_BBAK2;
BOOL g_BBAK3;
int TZCheFee = 0 ;
CString tempFeeShowStr1 ;
CString m_TicketNum;


/*UINT Bar_Up(LPVOID param)
{
	_outp(0x3e2,0x20);
	Sleep(300);
	_outp(0x3e2,0x30);
	return 0;
}
UINT Bar_Down(LPVOID param)
{
	_outp(0x3e2,0x11);
	Sleep(300);
	_outp(0x3e2,0x31);
	return 0;
}*/

UINT Hard_Check(LPVOID param)
{

	int a;
	static old = 06;
	Sleep(5000);
	while(TRUE)
	{
		a = _inp(0x3e1);
		m_nInput = a;
		a &= 0x06;
		if(a != old)
		{
			old = a;
			switch(a)
			{
			case 0:
				PostMessage(hwnd,WM_USER_AUTO,0,0);
				break;
			case 2:
				m_pMainView->SendMessage(WM_CHANGE_BAR,1,0);
				m_pMainView->SendMessage(WM_CHANGE_TLAMP,1,0);
				break;
			case 4:
				PostMessage(hwnd,WM_USER_AUTO,0,0);
				//自动车型纪录
				break;
			case 6:
				_outp(0x3e2,0x30);//hyh 2002.01.15 手动抬杆亮绿灯
				m_pMainView->SendMessage(WM_CHANGE_TLAMP,0,0);
				break;
			}
		}
		Sleep(300);
	}

  return 0;

}

UINT Hard_Check1(LPVOID param)
{

	int a,b;
	Sleep(5000);
	while(TRUE)
	{
		a = _inp(0x3e0);
		m_nInput = a;

		b = a ;
		b &= 0x04;
		if (b == 4)
		{
			g_BLoop= TRUE ;
		}
		else
		{
			g_BLoop= FALSE ;
		}

		b = a ;
		b &= 0x10;
		if (b == 0x10)
		{
//			g_BLaneRed= TRUE ;
		}
		else
		{
//			g_BLaneRed= FALSE ;
		}
		b = a ;
		b &= 0x20;
		if (b == 0x20)
		{
//			g_BLaneGreen= TRUE ;
//			m_pMainView->SendMessage(WM_CHANGE_TLAMP,1,0);
		}
		else
		{
//			g_BLaneGreen= FALSE ;

//			m_pMainView->SendMessage(WM_CHANGE_TLAMP,0,0);

		}
		b = a ;
		b &= 0x40;
		if (b == 0x40)
		{
			g_BTopRed= TRUE ;
//			m_pMainView->SendMessage(WM_CHANGE_TLAMP,0,0);
		}
		else
		{
			g_BTopRed= FALSE ;
//			m_pMainView->SendMessage(WM_CHANGE_TLAMP,1,0);
		}
		b = a ;
		b &= 0x80;
		if (a == 0x80)
		{
			g_BTopGreen= TRUE ;
		}
		else
		{
			g_BTopGreen= FALSE ;
		}


		Sleep(300);
	}

	return 0;

}

COperateDlg::COperateDlg(CWnd* pParent /*=NULL*/)
	: CDialog(COperateDlg::IDD, pParent)
{
	m_nSernum = atoi(g_LiuShuiHao.GetBuffer(20));
	m_nHard = 0x00;
	m_nBase_Statu = 0;
	m_HelpFilename[0] = ".\\res\\help1.bmp";
	m_HelpFilename[1] = ".\\res\\help2er.bmp";
	m_HelpFilename[2] = ".\\res\\help3er.bmp";
	m_HelpFilename[3] = ".\\res\\help4er.bmp";
	m_HelpFilename[4] = ".\\res\\help5.bmp";
	m_HelpFilename[5] = ".\\res\\help6.bmp";
	m_HelpFilename[6] = ".\\res\\help7.bmp";
	m_HelpFilename[7] = ".\\res\\help8.bmp";
	m_HelpFilename[8] = ".\\res\\help9.bmp";
	m_HelpFilename[9] = ".\\res\\help10.bmp";
	m_HelpFilename[10] = ".\\res\\help11.bmp";
	m_HelpFilename[11] = ".\\res\\help12.bmp";
	m_HelpFilename[12] = ".\\res\\help13.bmp";
	m_HelpFilename[13] = ".\\res\\help14.bmp";
	m_HelpFilename[14] = ".\\res\\help15.bmp";
	m_HelpFilename[15] = ".\\res\\help16.bmp";
	
	m_nFee[0] = 2; m_nFee[1] = 5; m_nFee[2] = 10; m_nFee[3] =15;
	m_nFee[4] = 20 ; m_nFee[5] = 25 ;      m_nFee[6] = 30;
	strcpy(m_sType[0],"闯道"); 	strcpy(m_sType[1],"免费"); 
	strcpy(m_sType[2],"军用"); 	strcpy(m_sType[3],"月票"); 
//	strcpy(m_sType[0],"军用"); 	strcpy(m_sType[1],"月票"); 
//	strcpy(m_sType[2],"闯道"); 	strcpy(m_sType[3],"免费"); 
//	Database.OpenEx("DSN=TempData1;UID=sa;PWD=",CDatabase::useCursorLib|CDatabase::noOdbcDialog);
    Database.Open(_T("hm"),FALSE,FALSE,"ODBC;UID=sa;PWD=;",CDatabase::useCursorLib|CDatabase::noOdbcDialog);

	CFeeTable FeeTable(&Database);
	FeeTable.Open();

//	int a = FeeTable.GetRecordCount();
	while(true)
	{
		if(FeeTable.m_TYPEID == 0)
			m_nFee[FeeTable.m_ID] = FeeTable.m_FEE;
		if(FeeTable.m_ID == 0)
		{
			FeeTable.m_KIND.TrimRight();
			strcpy(m_sType[FeeTable.m_TYPEID - 1],FeeTable.m_KIND.GetBuffer(FeeTable.m_KIND.GetLength()));
		}
		if(!FeeTable.IsEOF())
			FeeTable.MoveNext();
		else
			break;

	}

	FeeTable.Close();

	m_bShowManNum = FALSE;
	m_bShowTickNum = FALSE;
	m_bShowFee = FALSE;
	m_nVehicleType = 0;
	m_nCurrenBmp = 0;
	m_nCurrenLane = 1;
	m_nStatu = 0;
	m_nStep1 = 0;

	DCB dcb;
	dcb.BaudRate = 9600;
	dcb.ByteSize = 8;
	dcb.Parity = NOPARITY;
	dcb.StopBits = ONESTOPBIT;
	m_bRunning = TRUE;
	AfxBeginThread(Hard_Check,NULL,THREAD_PRIORITY_NORMAL);
	AfxBeginThread(Hard_Check1,NULL,THREAD_PRIORITY_NORMAL);

	m_pPrinter = new CComWin(2,&dcb);
	TVShowAll();
	TVShowClass(0) ;
	TVShowTicketNum(0);								
//	Setup_TLamp(0);

	
	//{{AFX_DATA_INIT(COperateDlg)
	//}}AFX_DATA_INIT
}

COperateDlg::~COperateDlg()
{
	delete m_pPrinter;
}

void COperateDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COperateDlg)
	DDX_Control(pDX, IDC_MSCOMM1, m_pComm1);
	DDX_Control(pDX, IDC_MSCOMM2, m_pShBYComm);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COperateDlg, CDialog)
	//{{AFX_MSG_MAP(COperateDlg)
	ON_WM_CREATE()
	ON_WM_PAINT()
	ON_WM_TIMER()
	ON_MESSAGE(WM_USER_KEY,On_Operate_Key)
	ON_WM_DESTROY()
	ON_MESSAGE(WM_BAR_UP,Bar_Up)
	ON_MESSAGE(WM_USER_AUTO,FillTheDataAuto)
	ON_MESSAGE(WM_BAR_DOWN,Bar_Down)

	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COperateDlg message handlers

int COperateDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	m_rect.left = 799-513;
	m_rect.top = 599-181;
	m_rect.right = 799-133;
	m_rect.bottom = 599;

	m_wndpl.length = sizeof(WINDOWPLACEMENT);
	m_wndpl.flags = 0;
	m_wndpl.showCmd = SW_SHOW;
	m_wndpl.rcNormalPosition = m_rect;
	SetWindowPlacement(&m_wndpl);
	m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);


	return 0;
}

void COperateDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	// TODO: Add your message handler code here
	if(m_DIB.m_pBMI ==NULL || m_DIB.m_pDIBData == NULL)
		return;
	CRect rect,rect1;
	CDC *pDC = GetDC();

	GetClientRect(rect);
	m_DIB.ShowDIB(pDC,0,0,rect.Width(),rect.Height());

	if(m_bShowManNum)
	{
		CString str = "工号:";
		str += m_sManNum;
		rect1.left = 50; rect1.top = 130;
		DWORD old_textcolor,old_textmode;
		CFont * pOldFont;
		old_textcolor = pDC->SetTextColor(theIniData.m_dColor_Text7);
		old_textmode = pDC->SetBkMode(TRANSPARENT);
		pOldFont = pDC->SelectObject(&theIniData.m_fFont4);
		pDC->TextOut(rect1.left,rect1.top,str);
		pDC->SelectObject(pOldFont);
		pDC->SetTextColor(old_textcolor);
		pDC->SetBkMode(old_textmode);
	}
	if(m_bShowFee && ( m_nVehicleType != -1 ) )
	{
		CString str;
		int Fee = 0;
		if(m_nVehicleType <= 6)
		{
			str.Format(" %d 型车收费 %d 元",m_nVehicleType,m_nFee[m_nVehicleType]);
		}
		else if (m_nVehicleType == 0x0c)
		{
			if(g_code==0)
			{
				str.Format("%s 车","验票");
			}
			else
			{
			//	str.Format("请输入条码");
			}
		}
		else
		{
			str.Format("%s 车",m_sType[m_nVehicleType - 7]);
		}
		rect1.left = 50; rect1.top = 13;
		DWORD old_textcolor,old_textmode;
		CFont * pOldFont;
		old_textcolor = pDC->SetTextColor(theIniData.m_dColor_Text8);
		old_textmode = pDC->SetBkMode(TRANSPARENT);
		pOldFont = pDC->SelectObject(&theIniData.m_fFont5);

		pDC->TextOut(rect1.left,rect1.top,str);

		if(m_nVehicleType <= 6)
		{
			str.Format("%d",m_nVehicleType);
			rect1.left = 85 , rect1.top = 70;
		}
		else if(m_nVehicleType == 0x0c)
		{
			str.Format("%s","验票");
			rect1.left = 70, rect1.top = 70;
		}
		else
		{
			str.Format("%s",m_sType[m_nVehicleType - 7]);
			rect1.left = 70, rect1.top = 70;
		}
		pDC->SetTextColor(theIniData.m_dColor_Text4);
		pDC->SelectObject(&theIniData.m_fFont6);
		pDC->TextOut(rect1.left,rect1.top,str);

		pDC->SelectObject(pOldFont);
		pDC->SetTextColor(old_textcolor);
		pDC->SetBkMode(old_textmode);
	}
	if(m_bShowTickNum)
	{
		CString str = "票号:";
		str += m_TicketNum;
		rect1.left = 180; rect1.top = 130;
		DWORD old_textcolor,old_textmode;
		CFont * pOldFont;
		old_textcolor = pDC->SetTextColor(theIniData.m_dColor_Text7);
		old_textmode = pDC->SetBkMode(TRANSPARENT);
		pOldFont = pDC->SelectObject(&theIniData.m_fFont4);
		pDC->TextOut(rect1.left,rect1.top,str);
		pDC->SelectObject(pOldFont);
		pDC->SetTextColor(old_textcolor);
		pDC->SetBkMode(old_textmode);
	}

	ReleaseDC(pDC);

	// Do not call CDialog::OnPaint() for painting messages
}
LONG COperateDlg::On_Operate_Key(UINT wParam , LONG lParam)
{
	UINT nChar = wParam;
	if(m_bKey_Free == TRUE)
	{
		return 0;
	}
	if(nChar == 0x72) //F3
	{
		m_pMainView->SendMessage(WM_CHANGE_LLAMP,0,0);
		return 0;
	}
	else if(nChar == 0x73)//F4
	{
		m_pMainView->SendMessage(WM_CHANGE_LLAMP,1,0);
		return 0;
	}

	switch(m_nStatu)
	{
	case 0://
		m_nStatu = Statu_Init(nChar);
		break;
	case 1://上班
		m_nStatu = Key_Shangban(nChar);
		break;
	case 2://车型
		m_nStatu = Key_CheXing(nChar);
		break;
	case 3://下班
		m_nStatu = Key_XiaBan(nChar);
		break;
	case 4://车队
		m_nStatu = Key_CheDui(nChar);
		break;
	case 5://车
		m_nStatu = Key_Che(nChar);
		break;
	case 6://验票车
		m_nStatu = Key_CheckTicket(nChar);
	    break;
	default:
		m_nStatu = 0;
		break;

	}
	return 0;
}

int COperateDlg::Key_Shangban(int nChar)
{
	int value;
	static int CharNum = 0;

//	CRect rect(180,8,30,190);
	CRect rect(140,8,30,190);//2002.4.10 hm add
	switch(m_nStep1)
	{
	///键入工号
	case 0:

        if((nChar >= 0x30)&&(nChar <= 0x39))//30--0,39--9
		{
			if(CharNum++<4)
			{
				if(CharNum == 1)
					m_sManNum = "";
				m_sManNum += (char)nChar;
				ShowText(&rect,CharNum,char(nChar));
			}
			else
			{
				CharNum = 6;
			}
			value = m_nStatu;
		}
		else if(nChar == 0x0d)//回车
		{
			CharNum = 0;
			m_nCurrenBmp = 2;
			m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
			Invalidate();
			m_nStep1 = 1;
			value = m_nStatu;
		}
		else if(nChar == 0x1b)//ESC键
		{
			CharNum = 0;
			m_nCurrenBmp = 0;
			m_DIB.LoadFromFile(m_HelpFilename[m_nCurrenBmp]);
			Invalidate();
			m_nStep1 = 0;
			value = 0;
		}
		else
		{
			value = m_nStatu;
			m_nStep1 = 0;
		}
		break;

⌨️ 快捷键说明

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