📄 ipcountdlg.cpp
字号:
/****************************************************************************
编写日期: 2002-07-28
代码编写: by xiaolz
代码功能: 主程序,打开串口,提取DTMF信号,数据库的读写
****************************************************************************/
//v1.0版 增加hotline 以控制线路
//v1.10版 修改全开按钮bug,修改数字发往错误线路的BUGS
//12.08 2002-09-13 修改费率初始代码
//v12.10 修改计费的一些代码
//v12.11修改打印部分功能,修改附加费率
//v12.12增加优惠时段代码,修改计费算法,完成自动配置ODBC代码
//v12.03.01 等同于v12.12b
//12.03.02 为程序添加桌面快捷方式修改代码
//v12.03.03 修改用户管理,不能删除最后一个超级用户,修改写注册表DriverId代码,从字符串值变为DWORD值,修改原来所有float 型为double
//v12.03.04 将PERSON_INFO的值由20变为30
//v12.03.05 修改计费的时候从控件中读费率为直接读保存的结果strGFeeRate[i],修改因为锁定无效导致的bugs
//v12.03.05 修改收到错号时,将该号由0变为7,以使不出现国内变国际的情况.
//v12.03.06 修改统计时总个数改为总基本话费
//v12.03.07 修改写数据库时立即写入为PostMessage WM_ADD_DB消息
//v12.03.08 修改结算时有时数据库不正确的BUG
//v12.03.09 每次通话增加一定的时长
//v12.03.10 计费从01开始
//v12.04.10 修改1分钟时间可调
#include "stdafx.h"
#include "IPCount.h"
#include "IPCountDlg.h"
#include "RegConf.h"
#include "myscrollview.h"
#include "splash.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define PERSON_INFO 30
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIPCountDlg dialog
CIPCountDlg::CIPCountDlg(CWnd* pParent /*=NULL*/)
: CDialog(CIPCountDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CIPCountDlg)
m_strShow = _T("");
m_strName = _T("");
m_strPswd = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
AfxMessageBox("初始化构造函数");
sdlg=new CSaleMang();
mdlg=new CSysSetUp();
cdlg=new CChgPswd();
// fdlg=new CFeeRate();
ComMsg=new CComReceive;
bFoundChar=FALSE;
strSaveInfo="";
for(int k=0;k<16;k++)
nFlagLine[k]=7;//锁定
for(int d=0;d<16;d++)
{
bClosedLine[d]=TRUE;
bTalking[d]=FALSE;
bClosed[d]=FALSE;
strTempNum[d]="";
strStreamNum[d]="";
strAreaName[d]="";
m_CalledTempNum[d]="";
m_szStartTime[d]="";
m_CalledNum[d]=-1;
////////////////////////////////////////优惠时段变量
strCutRate[d]="";
strLowCutRate[d]="";
strLowestCutRate[d]="";
nCutLevelFlag[d]=0;
strStartCutYear[d]="";
strEndCutYear[d]="";
strStartCutMon[d]="";
strEndCutMon[d]="";
strStartCutDay[d]="";
strEndCutDay[d]="";
strStartCutHour[d]="";
strEndCutHour[d]="";
strStartCutWeek[d]="";
strEndCutWeek[d]="";
/////////////////////////////////////////////////////
m_RecodeInfo[d].m_Line = "";
m_RecodeInfo[d].m_CalledNum = "";
m_RecodeInfo[d].m_RTLen = "";
m_RecodeInfo[d].m_Rate = "";
m_RecodeInfo[d].m_CDay = "";
m_RecodeInfo[d].m_RCount = "";
m_RecodeInfo[d].m_StreamNum = "";
m_RecodeInfo[d].m_RAreaName = "";
m_RecodeInfo[d].m_COper = "";
m_RecodeInfo[d].m_ORate = "";
m_RecodeInfo[d].m_PrePay = "";
m_RecodeInfo[d].m_Remain = "";
}
nLine=0;
strFlag="";
bReboot=FALSE;
nBCount=0;
nDCount=0;
bStatics=FALSE;
bRate=FALSE;
bSystem=FALSE;
bOpenSale=FALSE;
strLevel="";
nFlagLevel=0;
bChgAndCount=FALSE;
m_TelIndex="";
nPrintAtOnce=0;//不是立即打印
nOperateLines = 0;
for(int nFeeInit=0;nFeeInit<100;nFeeInit++)
{
strFeeType[nFeeInit]="";
strFeeMoney[nFeeInit]="";
strOFeeMoney[nFeeInit]="";
strOFeeTimeLen[nFeeInit]="";
strStartTLen[nFeeInit]="";
}
nFeeNum=0;
bOpenStatics=FALSE;//判断话费统计对话框是否打开
nGetSaleCutFlag=0;//判断是否启用优惠时段计费
nPrintMode=0;//打印方式
strUpSpace="";
#ifdef IPCOUNT_FOR_FS
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON5);
#else
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON13);
#endif
for (int nInitCom=0;nInitCom <nMaxPort;nInitCom++)
{
bOpenCom[nInitCom] = FALSE;
m_strRXData[nInitCom] = "";
}
hThread = NULL;
OneSecondOfMin = 60;
AfxMessageBox("初始化构造函数结束");
}
void CIPCountDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIPCountDlg)
DDX_Control(pDX, IDC_BUTTON_TITLE, m_BTitle);
DDX_Control(pDX, IDC_BUTTON_VER, m_BVer);
DDX_Control(pDX, IDCANCEL, m_BExit);
DDX_Control(pDX, IDC_BUTTON_STATICS, m_BStatics);
DDX_Control(pDX, IDC_BUTTON_MODPSWD, m_BModPswd);
DDX_Control(pDX, IDC_BUTTON_LOGIN, m_BLogin);
DDX_Control(pDX, IDC_BUTTON_MANG, m_BMang);
DDX_Control(pDX, IDC_BUTTON_RATE, m_BRate);
DDX_Control(pDX, IDC_BUTTON_SETUP, m_BSetUp);
DDX_Control(pDX, IDC_EDIT_SHOW, m_eShow);
DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
DDX_Text(pDX, IDC_EDIT_SHOW, m_strShow);
DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
DDX_Text(pDX, IDC_EDIT_PSWD, m_strPswd);
DDX_Control(pDX, IDC_MSCOMM2, m_ctrlComm2);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIPCountDlg, CDialog)
//{{AFX_MSG_MAP(CIPCountDlg)
ON_WM_SYSCOMMAND()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_SETUP, OnSysSetup)
ON_BN_CLICKED(IDC_BUTTON_MANG, OnSaleMang)
ON_BN_CLICKED(IDC_BUTTON_STATICS, OnStatics)
ON_BN_CLICKED(IDC_BUTTON_RATE, OnRate)
ON_BN_CLICKED(IDC_BUTTON_MODPSWD, OnModpswd)
ON_BN_CLICKED(IDC_BUTTON_VER, OnVer)
ON_BN_CLICKED(IDC_BUTTON_LOGIN, OnLogin)
ON_WM_TIMER()
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_BUTTON_TITLE, OnTitle)
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIPCountDlg message handlers
BOOL CIPCountDlg::OnInitDialog()
{
AfxMessageBox("oninitdialogStart1");
CDialog::OnInitDialog();
AfxMessageBox("oninitdialogStart2");
CRect rect;
GetWindowRect(&rect);
CRuntimeClass *pViewClass=RUNTIME_CLASS(CMyScrollView);
CCreateContext *pContext;
pContext=new CCreateContext;
pContext->m_pCurrentDoc=NULL;
pContext->m_pCurrentFrame=NULL;
pContext->m_pLastView=NULL;
pContext->m_pNewDocTemplate=NULL;
pContext->m_pNewViewClass=pViewClass;
CWnd *pWnd=NULL;
pWnd=DYNAMIC_DOWNCAST(CWnd,pViewClass->CreateObject());
pWnd->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(200,200,200,200),this,0,pContext);
delete pContext;
CMyScrollView *pScrollView=DYNAMIC_DOWNCAST(CMyScrollView,pWnd);
pScrollView->SetScrollSizes(MM_TEXT,CSize(rect.right-rect.left-20,rect.bottom-rect.top-100));
pScrollView->MoveWindow(rect.left,rect.top,rect.right-rect.left-20,rect.bottom-rect.top-100,TRUE);
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE);
AfxMessageBox("oninitdialog");
// Set small icon
/*if(!bIsValid())//检测用户是否合法
{
EndDialog(0);
}*/
//dlg.DoModal();
//////////////////////////////////////////////////////////////////////
OSVERSIONINFO osvi;
memset(&osvi, 0, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
GetVersionEx (&osvi);
// CString s;
// s.Format("你 的 Windows版 本 为 : %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
//获得文件的当前路径
TCHAR pFileName[MAX_PATH];
GetModuleFileName(NULL,pFileName,MAX_PATH);
if(strchr(pFileName,'\\'))
*strrchr(pFileName,'\\')='\0';
strcat(pFileName,"\\IPCount.mdb");
//////////////////////////////////////////////////////////////////////
if(mdlg->GetODBCFlag()==0)
{
//增加自动配置ODBC代码
CString strSpecChar='\\';
CString strMajVer,strMinVer;
strMajVer.Format("%d",osvi.dwMajorVersion);
strMinVer.Format("%d",osvi.dwMinorVersion);
if(atoi(strMajVer)==4)//windows me and 98
{
mdlg->SetODBCDataSources("Microsoft Access Driver (*.mdb)");
mdlg->SetODBCDriver("C:"+strSpecChar+"windows"+strSpecChar+"System"+strSpecChar+"odbcjt32.dll");
}
else
{
mdlg->SetODBCDataSources("Driver do Microsoft Access (*.mdb)");
mdlg->SetODBCDriver("C:"+strSpecChar+"WINNT"+strSpecChar+"System32"+strSpecChar+"odbcjt32.dll");
}
mdlg->SetODBCDBQ(pFileName);
mdlg->SetODBCDriverId(25);//设置DWORD值
mdlg->SetODBCJet("Yes");
mdlg->SetODBCFlag(1);
//初始设置代码
mdlg->SetRadio(2);
mdlg->SetPrintOneFlag(1);
mdlg->SetUpSpace("57");
}
//互斥代码
/************************************************************/
CWnd *hWndIP;
HANDLE hMutex;
hWndIP=CWnd::FindWindow("#32770","LCT IPCount V12.03.11");
//是该程序只能运行一次
hMutex = CreateMutex(NULL, FALSE,"IPCount");
DWORD dw=GetLastError();//获得错误,退出程序
/*if(dw==ERROR_ALREADY_EXISTS)
{
//加入处理代码,显示窗口
hWndIP->ShowWindow(SW_SHOW);
hWndIP->SetForegroundWindow();
::ExitProcess(dw);
}
*/
this->SetWindowText("LCT IPCount V12.03.11");
/*************************************************************/
char InBuf[80];
CString sCommon = "";
GetPrivateProfileString("IPCount::Common", "Lines", "8", InBuf, 80, GetCurrentPath("IPCount.ini"));
sCommon = InBuf;
nOperateLines = atoi(sCommon);
GetPrivateProfileString("IPCount::Common", "GW1", "100", InBuf, 80, GetCurrentPath("IPCount.ini"));
sCommon = InBuf;
nGwCom[0] = atoi(sCommon);
if (nOperateLines > 8)
{
GetPrivateProfileString("IPCount::Common", "GW2", "100", InBuf, 80, GetCurrentPath("IPCount.ini"));
sCommon = InBuf;
nGwCom[1] = atoi(sCommon);
}
else
nGwCom[1] = 100;
for (int i=0; i<nMaxPort; i++)
{
if (nGwCom[i]<100)
{
bOpenCom[i] = InitCom(i+1, nGwCom[i]);
if (bOpenCom[i])
SendData("0d", nGwCom[i]);
}
}
GetPrivateProfileString("IPCount::Common", "SOM", "60", InBuf, 80, GetCurrentPath("IPCount.ini"));
sCommon = InBuf;
OneSecondOfMin = atoi(sCommon);
//确保可调的时间在45秒至60秒之间
if (OneSecondOfMin < 45)
OneSecondOfMin = 45;
if (OneSecondOfMin > 60)
OneSecondOfMin = 60;
// TODO: Add extra initialization here
CFont *m_font=new CFont;
m_font->CreateFont(46,0,0,0,FW_HEAVY,FALSE,FALSE,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_ROMAN,"Arial");
m_eShow.SetFont(m_font,TRUE);
/////////////////////////////给按钮加图标////////////////////////////////////
//登陆按钮图标
m_BLogin.ShowWindow(SW_SHOW);
m_BLogin.SetIcon(IDI_ICON_LOGIN,22,22);
m_BLogin.SetImageOffset(12);
m_BLogin.SetTextOffset(-10);
//退出按钮图标
m_BExit.SetIcon(IDI_ICON_EXIT,38,38);
m_BExit.SetImageOffset(5);
m_BExit.SetTextOffset(-18);
//修改密码按钮图标
m_BModPswd.SetIcon(IDI_ICON_MOD,20,20);
m_BModPswd.SetImageOffset(5);
m_BModPswd.SetTextOffset(-3);
//版本信息按钮图标
m_BVer.SetIcon(IDI_ICON_VER,34,34);
m_BVer.SetImageOffset(0);
m_BVer.SetTextOffset(-10);
//系统设置按钮图标
m_BSetUp.SetIcon(IDI_ICON_SETUP,25,25);
m_BSetUp.SetImageOffset(5);
m_BSetUp.SetTextOffset(-10);
//费率管理按钮图标
m_BRate.SetIcon(IDI_ICON_RATE,18,25);
m_BRate.SetImageOffset(8);
m_BRate.SetTextOffset(2);
//话费统计按钮图标
m_BStatics.SetIcon(IDI_ICON_STATICS,18,18);
m_BStatics.SetImageOffset(8);
m_BStatics.SetTextOffset(5);
//营业管理按钮图标
m_BMang.SetIcon(IDI_ICON_MANG,20,20);
m_BMang.SetImageOffset(8);
m_BMang.SetTextOffset(0);
////////////////////////////////////////////////////////////////////////////
// m_bkbrush.CreateSolidBrush(RGB(20,110,165));
char szGetInfo[50];
memset(szGetInfo,0,50);
CFile pFile;
//获得文件的当前路径
TCHAR pTitleFileName[MAX_PATH];
GetModuleFileName(NULL,pTitleFileName,MAX_PATH);
if(strchr(pTitleFileName,'\\'))
*strrchr(pTitleFileName,'\\')='\0';
strcat(pTitleFileName,"\\Title.DAT");
if (pFile.Open(pTitleFileName, CFile::modeRead))
{
pFile.Read(szGetInfo,50);
pFile.Close();
}
m_strShow=szGetInfo;//(" 世纪网通营业厅计费系统");
m_strShow=" "+m_strShow;
UpdateData(FALSE);
AfxMessageBox("oninitdialogEnd");
return TRUE; // return TRUE unless you set the focus to a control
}
void CIPCountDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -