資源簡介
將數(shù)字轉(zhuǎn)為中文金額的大寫方式(C++版)的一個小程序,附帶了.bat文件和.exe文件
代碼片段和文件信息
/**
?*?程序目的:
?*???從命令行接收一個數(shù),并將其轉(zhuǎn)化為中文金額的大寫方式(C++版)
?*?例如?123.45?-->?壹佰貳拾叁元肆角伍分
?*?@author?LovinChan
?*
?*???前一段時間做了個?Java?版的。突然有天心血來潮做個?C++?版本的,實現(xiàn)的功能
?*?跟?Java?版本的沒什么區(qū)別,不過由于我對?C++?的了解還不是很多,寫出來的東西
?*?還有很多問題和不合規(guī)范的地方,希望各位踴躍指出來。
?*?
?*???程序的注釋我盡量寫得詳細一點,如果覺得這個程序哪里有問題或者是哪里有改進的
?*?地方歡迎隨時跟我交流。
?*?
?*???我附上了編譯以后的?.exe?文件跟?.bat?文件,還有項目源碼,供大家測評。
?*
?*?工具:Microsoft?Visual?Studio?2005
?*?編譯環(huán)境:Microsoft?Visual?Studio?2005
?*
?*?我的msn:egg.chenlw@gmail.com
?*????QQ:372133556(注上為什么加我就可以了)
?*?我的blog:http://hi.baidu.com/egg_chen
?*?歡迎交流
?*/
#include?
#include?
using?namespace?std;
//?表示整數(shù)部分的標志
const?int?INT_ONLY?=?1;
//?表示小數(shù)部分的標志
const?int?SMALL_ONLY?=?2;
/**
?*?從命令行接收一個數(shù),在其中調(diào)用?checkNum()?方法對其進行
?*?驗證,并返回相應的值
?*?@return?如果輸入合法,返回輸入的這個數(shù)
?*/
string?getNum()?{
string?s;
cout?<“請輸入一個數(shù)字(精確到小數(shù)點后兩位):“?< //?從命令行輸入這個浮點數(shù)
cin?>>?s;
//?清除輸入流狀態(tài)標志
cin.clear();
return?s;
}
/**
*?判斷用戶輸入的數(shù)據(jù)是否合法,用戶只能輸入大于零的數(shù)字,不能輸入其它字符
*?@param?s?string
*?@return?如果用戶輸入數(shù)據(jù)合法,返回?true,否則返回?false
*/
bool?checkNum(string?s)?{
//?atof(s.c_str())?方法的功能是將字符串?s?轉(zhuǎn)換成一個雙精度數(shù)值并返回結果
double?d?=?atof(s.c_str());
//?只有當用戶輸入一個大于0的數(shù)時,才會返回true
if(d?>?0)?{
return?true;
}
return?false;
}
/**
?*?對傳入的數(shù)進行四舍五入操作
?*?@param?s?string,從命令行輸入的那個數(shù)
?*?@return?四舍五入后的新值
?*/
string?roundString(string?s)?{
//?將這個數(shù)轉(zhuǎn)換成?double?類型,并對其進行四舍五入操作
//?先轉(zhuǎn)換這個數(shù)的整數(shù)部分
//?atof(s.c_str())?方法的功能是將字符串?s?轉(zhuǎn)換成一個雙精度數(shù)值并返回結果
//?c_str()函數(shù)返回一個指向正規(guī)C字符串的指針?內(nèi)容與本字符串相同
double?d?=?atof(s.c_str());
//?將這個數(shù)進行四舍五入,保留到小數(shù)點后兩位
//?再將這個數(shù)轉(zhuǎn)換成字符串,等待轉(zhuǎn)換
int?dec?sign;?
//?注意:當這個數(shù)轉(zhuǎn)換成字符串以后不會顯示小數(shù)點,并且會以四舍五入的形式只保留小數(shù)點后兩位
s?=?fcvt(d?2?&dec?&sign);
//?規(guī)定數(shù)值的最大長度只能是15位(到萬億位)
if(s.length()?>?15)?{
cout?<“輸入數(shù)據(jù)過大!(整數(shù)部分最多13位!)“?< return?““;
}
return?s;
}
/**
?*?把傳入的數(shù)轉(zhuǎn)換為中文金額大寫形式
?*?@param?flag?int?標志位,1?表示轉(zhuǎn)換整數(shù)部分,0?表示轉(zhuǎn)換小數(shù)部分
?*?@param?s?string?要轉(zhuǎn)換的字符串
?*?@return?轉(zhuǎn)換好的帶單位的中文金額大寫形式
?*/
string?formatChinese(int?flag?string?s)?{
int?sLength?=?s.length();
//?貨幣大寫形式
string?bigLetter[]?=?{“零“?“壹“?“貳“?“叁“?“肆“?“伍“?“陸“?“柒“?“捌“?“玖“};
//?貨幣單位
string?unit[]?=?{“元“?“拾“?“佰“?“仟“?“萬“?
//?拾萬位到仟萬位
“拾“?“佰“?“仟“
//?億位到萬億位
“億“?“拾“?“佰“?“仟“?“萬“};
string?small[]?=?{“分“?“角“};
//?用來存放轉(zhuǎn)換后的新字符串
string?newS?=?““;
//?逐位替換為中文大寫形式
for(int?i?=?0;?i? if(flag?==?INT_ONLY)?{
//?轉(zhuǎn)換整數(shù)部分為中文大寫形式(帶單位)
newS?=?newS?+?bigLetter[s.at(i)?-?48]?+?unit[sLength?-?i?-?1];
}?else?if(flag?==?SMALL_ONLY)?{
//?轉(zhuǎn)換小數(shù)部分(帶單位)
newS?=?newS?+?bigLetter[s.at(i)?-?48]?+?small[sLength?-?i?-?1];
}
}
return?newS;
}
/**
?*?把用戶輸入的數(shù)以小數(shù)點為界分割開來,并調(diào)用?numFormat()?方法
?*?進行相應的中文金額大寫形式的轉(zhuǎn)換
?*?注:傳入的這個數(shù)應該是經(jīng)過?roundString()?方法進行了四舍五入操作的
?*?@param?s?string
?*?@return?轉(zhuǎn)換好的中文金額大寫形式的字符串
?*/
string?splitNum(string?s)?{
//?如果傳入的是空串則繼續(xù)返回空串
if(““?==?s)?{
return?““;
}
//?截取輸入數(shù)字的整數(shù)部分
string?intOnly?=?s.substr(0?s.size()?-?2);
string?intPart?=?formatChinese(1?intOnly);
//?截取這個數(shù)的小數(shù)部分
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
評論
共有 條評論