资源简介
将数字转为中文金额的大写方式(C++版)的一个小程序,附带了.bat文件和.exe文件
代码片段和文件信息
/**
* 程序目的:
* 从命令行接收一个数,并将其转化为中文金额的大写方式(C++版)
* 例如 123.45 --> 壹佰贰拾叁元肆角伍分
* @author LovinChan
*
* 前一段时间做了个 Java 版的。突然有天心血来潮做个 C++ 版本的,实现的功能
* 跟 Java 版本的没什么区别,不过由于我对 C++ 的了解还不是很多,写出来的东西
* 还有很多问题和不合规范的地方,希望各位踊跃指出来。
*
* 程序的注释我尽量写得详细一点,如果觉得这个程序哪里有问题或者是哪里有改进的
* 地方欢迎随时跟我交流。
*
* 我附上了编译以后的 .exe 文件跟 .bat 文件,还有项目源码,供大家测评。
*
* 工具:Microsoft Visual Studio 2005
* 编译环境:Microsoft Visual Studio 2005
*
* 我的msn:egg.chenlw@gmail.com
* QQ:372133556(注上为什么加我就可以了)
* 我的blog:http://hi.baidu.com/egg_chen
* 欢迎交流
*/
#include
#include
using namespace std;
// 表示整数部分的标志
const int INT_ONLY = 1;
// 表示小数部分的标志
const int SMALL_ONLY = 2;
/**
* 从命令行接收一个数,在其中调用 checkNum() 方法对其进行
* 验证,并返回相应的值
* @return 如果输入合法,返回输入的这个数
*/
string getNum() {
string s;
cout << “请输入一个数字(精确到小数点后两位):“ << endl;
// 从命令行输入这个浮点数
cin >> s;
// 清除输入流状态标志
cin.clear();
return s;
}
/**
* 判断用户输入的数据是否合法,用户只能输入大于零的数字,不能输入其它字符
* @param s string
* @return 如果用户输入数据合法,返回 true,否则返回 false
*/
bool checkNum(string s) {
// atof(s.c_str()) 方法的功能是将字符串 s 转换成一个双精度数值并返回结果
double d = atof(s.c_str());
// 只有当用户输入一个大于0的数时,才会返回true
if(d > 0) {
return true;
}
return false;
}
/**
* 对传入的数进行四舍五入操作
* @param s string,从命令行输入的那个数
* @return 四舍五入后的新值
*/
string roundString(string s) {
// 将这个数转换成 double 类型,并对其进行四舍五入操作
// 先转换这个数的整数部分
// atof(s.c_str()) 方法的功能是将字符串 s 转换成一个双精度数值并返回结果
// c_str()函数返回一个指向正规C字符串的指针 内容与本字符串相同
double d = atof(s.c_str());
// 将这个数进行四舍五入,保留到小数点后两位
// 再将这个数转换成字符串,等待转换
int dec sign;
// 注意:当这个数转换成字符串以后不会显示小数点,并且会以四舍五入的形式只保留小数点后两位
s = fcvt(d 2 &dec &sign);
// 规定数值的最大长度只能是15位(到万亿位)
if(s.length() > 15) {
cout << “输入数据过大!(整数部分最多13位!)“ << endl;
return ““;
}
return s;
}
/**
* 把传入的数转换为中文金额大写形式
* @param flag int 标志位,1 表示转换整数部分,0 表示转换小数部分
* @param s string 要转换的字符串
* @return 转换好的带单位的中文金额大写形式
*/
string formatChinese(int flag string s) {
int sLength = s.length();
// 货币大写形式
string bigLetter[] = {“零“ “壹“ “贰“ “叁“ “肆“ “伍“ “陆“ “柒“ “捌“ “玖“};
// 货币单位
string unit[] = {“元“ “拾“ “佰“ “仟“ “万“
// 拾万位到仟万位
“拾“ “佰“ “仟“
// 亿位到万亿位
“亿“ “拾“ “佰“ “仟“ “万“};
string small[] = {“分“ “角“};
// 用来存放转换后的新字符串
string newS = ““;
// 逐位替换为中文大写形式
for(int i = 0; i < sLength; i ++) {
if(flag == INT_ONLY) {
// 转换整数部分为中文大写形式(带单位)
newS = newS + bigLetter[s.at(i) - 48] + unit[sLength - i - 1];
} else if(flag == SMALL_ONLY) {
// 转换小数部分(带单位)
newS = newS + bigLetter[s.at(i) - 48] + small[sLength - i - 1];
}
}
return newS;
}
/**
* 把用户输入的数以小数点为界分割开来,并调用 numFormat() 方法
* 进行相应的中文金额大写形式的转换
* 注:传入的这个数应该是经过 roundString() 方法进行了四舍五入操作的
* @param s string
* @return 转换好的中文金额大写形式的字符串
*/
string splitNum(string s) {
// 如果传入的是空串则继续返回空串
if(““ == s) {
return ““;
}
// 截取输入数字的整数部分
string intOnly = s.substr(0 s.size() - 2);
string intPart = formatChinese(1 intOnly);
// 截取这个数的小数部分
st
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
.CA.... 16 2008-11-04 16:14 Trans2RMB\debug\Trans2RMB.bat
.CA.... 69632 2008-11-13 15:35 Trans2RMB\debug\Trans2RMB.exe
.CA.... 436820 2008-11-13 15:35 Trans2RMB\debug\Trans2RMB.ilk
.CA.... 510976 2008-11-13 15:35 Trans2RMB\debug\Trans2RMB.pdb
.CA.... 15360 2008-11-12 19:25 Trans2RMB\release\Trans2RMB.exe
.CA.... 297984 2008-11-12 19:25 Trans2RMB\release\Trans2RMB.pdb
.CA.... 11216 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug\BuildLog.htm
.CA.... 67 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug\mt.dep
.CA.... 107109 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug\Tran2RMB.obj
.CA.... 403 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug\Trans2RMB.exe.em
.CA.... 468 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug\Trans2RMB.exe.em
.CA.... 385 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug\Trans2RMB.exe.intermediate.manifest
.CA.... 158720 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug\vc80.idb
.CA.... 184320 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug\vc80.pdb
.CA.... 7398 2008-11-12 19:25 Trans2RMB\Trans2RMB\Release\BuildLog.htm
.CA.... 67 2008-11-12 19:25 Trans2RMB\Trans2RMB\Release\mt.dep
.CA.... 552411 2008-11-12 19:25 Trans2RMB\Trans2RMB\Release\Tran2RMB.obj
.CA.... 380 2008-11-12 19:25 Trans2RMB\Trans2RMB\Release\Trans2RMB.exe.intermediate.manifest
.CA.... 93184 2008-11-12 19:25 Trans2RMB\Trans2RMB\Release\vc80.idb
.CA.... 184320 2008-11-12 19:25 Trans2RMB\Trans2RMB\Release\vc80.pdb
.CA.... 6546 2008-11-13 15:32 Trans2RMB\Trans2RMB\Tran2RMB.cpp
.CA.... 3976 2008-11-03 21:29 Trans2RMB\Trans2RMB\Trans2RMB.vcproj
.CA.... 1427 2008-11-13 15:35 Trans2RMB\Trans2RMB\Trans2RMB.vcproj.27000B9D0EF54D5.LovinChan.user
.CA.... 1846272 2008-11-13 15:35 Trans2RMB\Trans2RMB.ncb
.CA.... 892 2008-11-03 21:27 Trans2RMB\Trans2RMB.sln
.CA..H. 22528 2008-11-13 15:35 Trans2RMB\Trans2RMB.suo
.C.D... 0 2008-11-13 15:35 Trans2RMB\Trans2RMB\Debug
.C.D... 0 2008-11-12 19:25 Trans2RMB\Trans2RMB\Release
.C.D... 0 2008-11-13 15:35 Trans2RMB\debug
.C.D... 0 2008-11-12 19:25 Trans2RMB\release
............此处省略6个文件信息
- 上一篇:《xm
l编程原理与实例教程》电子教案 - 下一篇:机械制造工艺学 ppt
相关资源
- 基于51单片机的模数转换与数模转换
- 康萍 swjtu数字电路
- bmp2c
- 进制转换小程序
- EXCEL文件转换成固定的格式的文本格式
- 地固系惯性系坐标转换程序
- txt测井曲线转换las2.0(新编)
- 球面坐标与平面坐标的转换
- “猜数字”游戏 算法破解
- 公历(阳历)和农历(阴历)相互转
- TI大学计划数据转换原理与设计总结手
- 基于数字摄影测量的结构面、关键块
- 基于FPGA多协议转换网关设计
- 矿用多功能WiFi信号转换器的设计
- 易语言文本加密成数字源码
- 基于MO实现CAD数据转换为Shape数据后的
- 轴突暗物质-光子转换的稳定性
- 驾驶证数字、字母字体.ttf
- fpga数字钟
- 数字钟
- plc模拟量输入输出转换
- 虚拟数字键盘,自动跳转输入框,输
- kT因式分解中B→ρ转换的次先校正
- 具有可编程环路补偿功能高密度电源
- 基于BuckBoost拓扑的数字DCDC变换器设计
- 降压型转换器电路图
- 数字正交上变频器AD9857在高频雷达系
- EPUB格式转换为MOBI亲测可用
- 基于GTP修正的R3DGM建模与可视化方法
- 易语言版迅雷视频转换器源码
评论
共有 条评论