【VC开源代码栏目提醒】:网学会员鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“CapitalNumDlg.cpp”一文,供大家参考学习
// CapitalNumDlg.cpp : implementation file
//
#include "stdafx.h"
#include "CapitalNum.h"
#include "CapitalNumDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
//定义操作堆栈结果的常数
#define OK 0 //操作成功
#define EOVER 1 //超过堆栈最大值
#define EEMPTY 2 //堆栈为空
#define EUNKNOWN 3 //未知的操作
//堆栈的大小
#define STACKSIZE 1024
int push (int value, int type); //进堆栈
int pop (int *value, int *type); //出堆栈
int cleanstack (); //清空堆栈
int drop ();
int pickup(int *value, int *type); //取堆栈头的数据
int dump(); //将堆栈的数据写入字符串
void str2str (char *s); //转换
void longtostr (long n);
char *unit1[] = {"", "拾","佰","仟"};
char *unit2[] = {"","万","亿"};
char *digital[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
//堆栈数据结构
typedef struct meta {
int value;
int type;
} META;
//堆栈
META stack[STACKSIZE];
//堆栈索引
int sp = -1;
//转换后的结果字符串
CString strNum = "";
//将堆栈的数据写入字符串
int dump ()
{
int i;
int v,t;
CString str;
for (i = sp; i>=0; i--) {
v = stack[i].value;
t = stack[i].type;
if (i==sp && (t >0 || (t ==0 && v ==0)))
continue;
switch (t)
{
case 0://1,2,3,4,5,6,7,8,9
str.Format("%s",digital[v]);
break;
case 1://十,佰,千
str.Format("%s",unit1[v]);
break;
case 2://万,亿
str.Format("%s",unit2[v]);
break;
}
strNum += str;
}
return OK;
}
//进堆栈
int push (int value, int type)
{
int v;
int t;
int ret;
if (value == 0 && type ==0) {
ret = pickup (&v, &t);
if ( (v ==0) || ret || t>1)
return EUNKNOWN;
}
if (type == 2) {
ret = pickup (&v, &t);
if (t == 2 && v < value)
drop ();
}
if (++sp >= STACKSIZE)
return EOVER;
stack[sp].value = value;
stack[sp].type = type;
return OK;
}
//出堆栈
int pop (int *value, int *type)
{
if (sp < 0)
return EEMPTY;
*value = stack[sp].value;
*type = stack[sp].type;
sp --;
return OK;
}
//清空堆栈
int cleanstack ()
{
for (int i = sp; i>=0; i--)
{
stack[i].type = 0;
stack[i].value = 0;
}
strNum = "";
sp = -1;
return OK;
}
int drop ()
{
if (sp < 0)
return EEMPTY;
sp --;
return OK;
}
//获得堆栈头的数据
int pickup(int *value, int *type)
{
if (sp < 0)
return EEMPTY;
*value = stack[sp].value;
*type = stack[sp].type;
return OK;
}
//将数字字符串转换为中文大写字符串
void str2str (char *s)
{
//清空堆栈
cleanstack();
char *h, *t;
int d, c;
int utype1, utype2, dtype;
int slen;
//如果为空,则设为零
if (!s) {
printf ("零\n");
return;
}
//获得数字字符串长度
slen = strlen (s);
h = s;
t = s+slen-1;
//初始化表示数字位置的类型
d = utype1 = utype2 = dtype = 0;
//一个一个数字转换
for (;t>=h;t--) {
c = (*t) - '0';
if (utype2>0 && utype1 ==0)
push (utype2, 2);
if (c)
push (utype1, 1);
push (c, 0);
d++;
utype1 = d % 4;
utype2 = (d / 4) % 3;
if (d > 8 && utype2 ==0)
utype2++;
}
//将堆栈的值转换为一个字符串
dump();
return;
}
//将长整形值转换为中文大写数字
void longtostr (long n)
{
char s[12];
sprintf (s, "%ld", n);
str2str (s);
return;
}
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()
/////////////////////////////////////////////////////////////////////////////
// CCapitalNumDlg dialog
CCapitalNumDlg::CCapitalNumDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCapitalNumDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCapitalNumDlg)
m_strCapitalNum = _T("");
m_strNum = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CCapitalNumDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCapitalNumDlg)
DDX_Text(pDX, IDC_CAPITALNUM, m_strCapitalNum);
DDX_Text(pDX, IDC_NUM, m_strNum);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCapitalNumDlg, CDialog)
//{{AFX_MSG_MAP(CCapitalNumDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_PRV, OnPrv)
ON_BN_CLICKED(IDC_NEXT, OnNext)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCapitalNumDlg message handlers
BOOL CCapitalNumDlg::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
//初始化环境
::CoInitialize(NULL);
//创建并打开数据库连接对象
_variant_t vFieldValue;
CString strFieldValue;
m_pCon.CreateInstance(__uuidof(Connection));
m_pCon->Open("capitalnum","","",NULL);
//创建并打开记录集对象
m_pRs.CreateInstance(__uuidof(Recordset));
m_pRs->Open("select* from table1",m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(VARIANT_FALSE == m_pRs->EndOfFile)
{
//获得第一条记录并显示
long Num;
vFieldValue = m_pRs->GetCollect("Num");
strFieldValue = (char*)_bstr_t(vFieldValue);
Num = atol(strFieldValue.GetBuffer(0));;
vFieldValue.Clear();
m_strNum = strFieldValue;
longtostr(Num);
m_strCapitalNum = strNum;
}
Upda
上一篇:
CapitalNum.cpp
下一篇:
村落共同体的核心架构研究