资源简介

将数字转为中文金额的大写方式(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.embed.manifest

    .CA....       468  2008-11-13 15:35  Trans2RMB\Trans2RMB\Debug\Trans2RMB.exe.embed.manifest.res

    .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个文件信息

评论

共有 条评论