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

📄 demodlg.cpp

📁 一个码制转换的程序 BCD码转ASC码,功能虽少,但还算好用
💻 CPP
字号:
// DemoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Demo.h"
#include "DemoDlg.h"
#include "DirDialog.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <memory.h>

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

/////////////////////////////////////////////////////////////////////////////
// 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()

/////////////////////////////////////////////////////////////////////////////
// CDemoDlg dialog

CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDemoDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDemoDlg)
	m_strOpen = _T("");
	m_strSave = _T("");
	m_strCreate = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDemoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDemoDlg)
	DDX_Control(pDX, IDC_STATIC_INFO, m_Info);
	DDX_Text(pDX, IDC_EDIT_OPEN, m_strOpen);
	DDX_Text(pDX, IDC_EDIT_SAVE, m_strSave);
	DDX_Text(pDX, IDC_EDIT_CREATE, m_strCreate);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
	//{{AFX_MSG_MAP(CDemoDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_OPEN, OnButtonOpen)
	ON_BN_CLICKED(IDC_BUTTON_SAVE, OnButtonSave)
	ON_BN_CLICKED(IDC_BUTTON_CREATE, OnButtonCreate)
	ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemoDlg message handlers

BOOL CDemoDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 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);		// Set small icon
	
	// TODO: Add extra initialization here

	m_Info.SetWindowText("BCD转化ASC示例程序(2004年12月11日)\n\n第一步:open\n第二步:save\n第三步:create\n第四步:start:");
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CDemoDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CDemoDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CDemoDlg::OnButtonOpen() 
{
	CFileDialog	dlg(TRUE, NULL, m_strOpen, OFN_HIDEREADONLY|OFN_EXPLORER, "*.bs2|*.bs2", NULL); 

	if (dlg.DoModal() == IDOK) 
    {
		m_strOpen = dlg.GetPathName();
		UpdateData(FALSE);
	}
	
}

void CDemoDlg::OnButtonSave() 
{
	CDirDialog dlg;
	dlg.m_strSelDir = m_strSave;

	if (dlg.DoBrowse()) 
	{
		m_strSave = dlg.m_strPath;
		if (m_strSave.Right(1) == '\\')
		{
			m_strSave.Delete(2,1);
			UpdateData(FALSE);
		}

		UpdateData(FALSE);
	}

}
//根据bs3文件生成新的文件名
void CDemoDlg::OnButtonCreate() 
{
	CString strTemp;
	char szTemp[100];
	FILE *pf;

	m_strCreate = "";

	strTemp = m_strOpen.Left(m_strOpen.GetLength() - 3);
	strTemp += "bs3";

	if((pf = fopen(strTemp, "r")) == NULL)
	{
		m_Info.SetWindowText("缺少BS3文件");
		Beep(900, 100);
		return;
	}

	fgets(szTemp, 100, pf);
	fclose(pf);
	strTemp = szTemp;
	m_nBlockSize = atoi(strTemp.Mid(54, 6));
	m_strYear = strTemp.Mid(42, 2);
	m_strDestFile +=
		(m_strDestFile.Right(1) == "\\" ? "" : "\\") 
		+ (CString)"S1240" + m_strYear + 
		strTemp.Mid(23, 4) + ".asc";

	m_strCreate = m_strSave + m_strDestFile;
	UpdateData(FALSE);
	
	
}

void CDemoDlg::OnButtonStart() 
{
	FILE *fp;
	struct _stat buff;
	int nCounter;
	char *Content;//做内存文件使用
	char *UseContent;//用来存放全部话单,去掉了文件头和文件尾
	int Block;
	int i;//用来控制循环的变量
	char OneContent[31];//一条话单的BCD码

	fp=fopen(m_strOpen,"r");
	if (fp == NULL)
	{
		printf ("File Not");
		return;
	}

	//计算话单的条数=块数*68*30
	_stat(m_strOpen,&buff);
	nCounter=buff.st_size/2048 * 68 ;//多少条话单记录
	printf ("话单条数是%d\n",nCounter);
	Content=(char*)malloc(buff.st_size);
	Block = buff.st_size/2048 ;
	printf("共有%d块.\n",Block);
	UseContent=(char*)malloc(buff.st_size-Block*8);
	
	fread(Content,2048,(buff.st_size/2048),fp);
	for (i=0;i<Block;i++)
	memcpy(&UseContent[0+i*2040],(Content+4+2048*i),2040);

	for (i=0;i<nCounter;i++)
	{
		memcpy(&OneContent[0],(UseContent+30*i),30);
		OneContent[30]='\0';
		Bcd2Asc (OneContent);

		//调用处理一条话单的函数,函数直接把一条话单写完并处理写入文件
		//
	}

	free(UseContent);
	free(Content);
	fclose(fp);	
	m_Info.SetWindowText("文件处理完毕。");

}

void CDemoDlg::Bcd2Asc (char *buff)
{

	FILE *fp;
	char Abuff[62];
	char Temp;
	int i;//用来控制buff[]数组的下标
	char output1[3];
	char output2[11];
	char output3[2];
	char output4[17];
	char output5[9];
	char output6[9];
	char output7[11];
	char output8[7];
	char output9[5];
	char output10[5];
	char *year="1996";




	for (i=0;i<30;i++)
	{
		//High
		Temp = ( buff[i] >> 4) & 0X0F;
		if (Temp < 10)
			Abuff[2*i] = Temp + 48 ;
		else
			Abuff[2*i] =' ';
		//Low
		Temp = buff[i] & 0X0F;
		if (Temp < 10)
			Abuff[2*i+1] = Temp + 48 ;
		else
			Abuff[2*i+1] =' ';
	}
	Abuff[60]='\0';
	fp=fopen(m_strCreate,"a");
	if (fp == NULL)
	{
		return;
	}
	memcpy(output1,&Abuff[0],2);
	output1[2]='\0';
	memcpy(output2,&Abuff[2],10);
	output2[10]='\0';
	memcpy(output3,&Abuff[12],2);
	output3[2]='\0';
	memcpy(output4,&Abuff[14],16);
	output4[16]='\0';
	
	//begin time
	memcpy(output5,&Abuff[30],2);
	output5[2]=':';
	memcpy(&output5[3],&Abuff[32],2);
	output5[5]=':';
	memcpy(&output5[6],&Abuff[34],2);
	output5[8]='\0';
	
	//end time
	memcpy(&output6[0],&Abuff[36],2);
	output6[2]=':';
	memcpy(&output6[3],&Abuff[38],2);
	output6[5]=':';
	memcpy(&output6[6],&Abuff[40],2);
	output6[8]='\0';

	//year
	memcpy(&output7[0],year,4);
	output7[4] = '/';
	memcpy(&output7[5],&Abuff[42],2);
	output7[7]='/';
	memcpy(&output7[8],&Abuff[44],2);
	output7[10]='\0';

	memcpy(output8,&Abuff[46],6);
	output8[6]='\0';
	memcpy(output9,&Abuff[52],4);
	output9[4]='\0';
	memcpy(output10,&Abuff[56],4);
	output10[4]='\0';

	//write one tell
	if(output1[0] != ' ')
	fprintf(fp,"%-2s %-10s %-2s %-16s %-8s %-8s %-10s %6s %-4s %-5s\n",
		output1,output2,output3,output4,output5,output6,output7,output8,output9,output10);
	
	fclose(fp);
}


⌨️ 快捷键说明

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