鉴于大作业中其他两项任务——无符号计算器、职工管理系统,都能直接搜索到。这里单独整理一下外币兑换系统作业。
本次作业只针对完成大作业的基本要求,没有过多的模块优化。只有基本的输入输出防莽夫代码。
首先看一下要求。
整体来讲难度不高,明眼问题主要突出在如何自己写一个上网查找汇率的模块。这个模块单独放在inquire.cpp文件中。下面是函数逻辑的程序框图。
1、有“菜单”标注的,只是提供界面的函数,提供基本的界面输出;
2、“choice”字样的为为用户提供输入输出环境、货币兑换方式,货币种类的函数;
3、“exchange”字样的函数为汇率结算所使用到的函数模块;
4、“InqurieMoney”提供网上查询功能,查询结果会存储到.txt文件中,代码本身也有存放2021年的汇率。断网情况下或者不选择查询现在汇率的情况下,会按照该存储汇率进行结算。
下面直接提供文件名称以及文件中的代码,有需要的同学自行copy更改即可。由于各人原因,界面设置有一定的指向性,记得替换成自己的内容信息。本次使用的是visual studio 2017,bug较多,祝君顺利。
以下是choice.cpp文件内容
#include "currency_exchange.h"
int url_choice; //币种指向变量
//主界面选择函数 menu_main
int main_choice()
{
//由于种种原因有的时候,int才能跑通,虽然这里就应该是char
char choice;
do
{
//system("cls"); //清屏
//fflush(stdout); //清空缓冲流,否则一闪一闪亮晶晶
menu_main();
cin >> choice;
switch (choice)
{
case '1':
cout << "" << endl;
cout << "******** 您选择的是外币兑换人民币 ********" << endl;
cout << "" << endl;
system("pause");
sys_choice1();
return 1;
case '2':
cout << "" << endl;
cout << "******** 您选择的是人民币兑换外币 ********" << endl;
cout << "" << endl;
system("pause");
sys_choice2();
return 2;
case '3':
return 0;
default:
cout << "" << endl;
cout << "*** 请重新输入您的选择,请勿发飙,气急伤肝,三秒后重新输入。三秒后如果你还能看见这句话,把VS砸了吧。 ***" << endl;
cout << "" << endl;
Sleep(2 * 1000); //简单的延时函数,延时时间3秒
break;
}
} while (choice != '1' && choice != '2' );
return 0;
}
//货币汇率选择函数
//第二个界面下
int sys_choice1()
{
char choice = 0; //输入接收变量
double exchange=0;
exchange = menu_choice1(choice, exchange);
exchange_cny(exchange);
return 0;
}
// sys_choice1 和 sys_choice2 基本雷同,别看了
int sys_choice2()
{
char choice = 0; //输入接收变量
double exchange = 0;
exchange = menu_choice2(choice, exchange);
exchange_fore(exchange);
return 0;
}
//选择界面输出函数1
double menu_choice1(char choice, double exchange)
{
do {
FOREIGN_CNY(); //显示外币兑换人民币系统界面
cin >> choice; //接收输入
switch (choice) //币种汇率选择
{
case'a': case 'A':
url_choice = 0;
exchange = USD;
cout << "您选择的是美元USD" << endl;
break;
case'b': case 'B':
url_choice = 1;
exchange = GBP;
cout << "您选择的是英镑GBP" << endl;
break;
case'C': case 'c':
url_choice = 2;
exchange = EUR;
cout << "您选择的是欧元EUR" << endl;
break;
case'd': case 'D':
url_choice = 3;
exchange = HKD;
cout << "您选择的是港币HKD" << endl;
break;
case'E': case 'e':
url_choice = 4;
exchange = MOP;
cout << "您选择的是澳元MOP" << endl;
break;
case'f': case 'F':
url_choice = 5;
exchange = JPY;
cout << "您选择的是日元JPY" << endl;
break;
case'G': case 'g':
url_choice = 6;
exchange = CAD;
cout << "您选择的是加拿大元CAD" << endl;
break;
case'h': case 'H':
url_choice = 7;
exchange = AUD;
cout << "您选择的是澳大利亚元AUD" << endl;
break;
case'i': case 'I':
url_choice = 8;
exchange = SGD;
cout << "您选择的是新加坡元SGD" << endl;
break;
case'j': case 'J':
url_choice = 9;
exchange = KRW;
cout << "您选择的是韩元KRW" << endl;
break;
case'k': case 'K':
url_choice = 10;
exchange = PHP;
cout << "您选择的是菲律宾比索PHP" << endl;
break;
case'l': case 'L':
url_choice = 11;
exchange = THB;
cout << "您选择的是泰国铢THB" << endl;
break;
case'm': case 'M':
url_choice = 12;
exchange = CHF;
cout << "您选择的是瑞士法郎CHF" << endl;
break;
case'n': case 'N':
url_choice = 13;
exchange = NZD;
cout << "您选择的是新西兰元NZD" << endl;
break;
case'o': case 'O':
url_choice = 14;
exchange = DKK;
cout << "您选择的是丹麦克朗DKK" << endl;
break;
case'p': case 'P':
url_choice = 15;
exchange = NOK;
cout << "您选择的是挪威克朗NOK" << endl;
break;
case'q': case 'Q':
url_choice = 16;
exchange = SEK;
cout << "您选择的是瑞典克朗SEK" << endl;
break;
case'r': case 'R':
url_choice = 17;
exchange = RUB;
cout << "您选择的是卢布RUB" << endl;
break;
case's': case 'S':
url_choice = 18;
exchange = MYR;
cout << "您选择的是林吉特MYR" << endl;
break;
case't': case 'T':
url_choice = 19;
exchange = ZAR;
cout << "您选择的是南非兰特ZAR" << endl;
break;
case'z': case 'Z':
url_choice = 20;
main_choice();
break;
default:
cout << "*** 请重新输入!!! ***" << endl;
Sleep(3 * 1000); //短暂延时
break;
}
} while ((choice < 'a' || choice >'t') && (choice <'A' || choice >'T') && choice != 'Z' && choice != 'z');
return exchange;
}
//选择界面输出函数2
double menu_choice2(char choice, double exchange)
{
do {
CNY_FOREIGN(); //显示人民币兑换外币系统界面
cin >> choice; //接收输入
switch (choice) //币种汇率选择
{
case'a': case 'A':
url_choice = 0;
exchange = USD;
cout << "您选择的是美元USD" << endl;
break;
case'b': case 'B':
url_choice = 1;
exchange = GBP;
cout << "您选择的是英镑GBP" << endl;
break;
case'C': case 'c':
url_choice = 2;
exchange = EUR;
cout << "您选择的是欧元EUR" << endl;
break;
case'd': case 'D':
url_choice = 3;
exchange = HKD;
cout << "您选择的是港币HKD" << endl;
break;
case'E': case 'e':
url_choice = 4;
exchange = MOP;
cout << "您选择的是澳元MOP" << endl;
break;
case'f': case 'F':
url_choice = 5;
exchange = JPY;
cout << "您选择的是日元JPY" << endl;
break;
case'G': case 'g':
url_choice = 6;
exchange = CAD;
cout << "您选择的是加拿大元CAD" << endl;
break;
case'h': case 'H':
url_choice = 7;
exchange = AUD;
cout << "您选择的是澳大利亚元AUD" << endl;
break;
case'i': case 'I':
url_choice = 8;
exchange = SGD;
cout << "您选择的是新加坡元SGD" << endl;
break;
case'j': case 'J':
url_choice = 9;
exchange = KRW;
cout << "您选择的是韩元KRW" << endl;
break;
case'k': case 'K':
url_choice = 10;
exchange = PHP;
cout << "您选择的是菲律宾比索PHP" << endl;
break;
case'l': case 'L':
url_choice = 11;
exchange = THB;
cout << "您选择的是泰国铢THB" << endl;
break;
case'm': case 'M':
url_choice = 12;
exchange = CHF;
cout << "您选择的是瑞士法郎CHF" << endl;
break;
case'n': case 'N':
url_choice = 13;
exchange = NZD;
cout << "您选择的是新西兰元NZD" << endl;
break;
case'o': case 'O':
url_choice = 14;
exchange = DKK;
cout << "您选择的是丹麦克朗DKK" << endl;
break;
case'p': case 'P':
url_choice = 15;
exchange = NOK;
cout << "您选择的是挪威克朗NOK" << endl;
break;
case'q': case 'Q':
url_choice = 16;
exchange = SEK;
cout << "您选择的是瑞典克朗SEK" << endl;
break;
case'r': case 'R':
url_choice = 17;
exchange = RUB;
cout << "您选择的是卢布RUB" << endl;
break;
case's': case 'S':
url_choice = 18;
exchange = MYR;
cout << "您选择的是林吉特MYR" << endl;
break;
case't': case 'T':
url_choice = 19;
exchange = ZAR;
cout << "您选择的是南非兰特ZAR" << endl;
break;
case'z': case 'Z':
url_choice = 20;
main_choice();
break;
default:
cout << "*** 请重新输入!!! ***" << endl;
Sleep(3 * 1000); //短暂延时
break;
}
} while ((choice < 'a' || choice >'t') && (choice <'A' || choice >'T') && choice != 'Z' && choice != 'z');
return exchange;
}
//兑换人民币函数
//系统选择1时调用
int exchange_cny(double exchange)
{
int cny_fore = 0; //外币金额
double cny; //兑换后的人民币数值
double exchan;
//string *purl;
//*purl = url;
int judg=1;
cout << "当前汇率值为:" << exchange << endl;
cout << endl;
cout << "是否进行查询( 是(Y/y) 否(N/n) )" << endl;
cout << url_choice << endl;
char yes_no;
do {
cin.clear();
fflush(stdout); //清空缓冲流,否则一闪一闪亮晶晶
cin >> yes_no;
if (yes_no == 'y' || yes_no == 'Y')
{
// url_choice = 1;
judg=InqurieMoney(url_choice, exchan);
if (judg == 0)
{
exchange = exchan;
}
cout << "查询后当前汇率值为:" << exchange << endl;
}
else if (yes_no == 'n' || yes_no == 'N')
{
cout << "OK" << endl;
break;
}
else
cout << "请重新输入!!!" << endl;
} while (yes_no != 'y' && yes_no != 'Y' && yes_no != 'n' && yes_no != 'N');
cout << "" << endl;
cout << "请输入要兑换的外币金额:" << endl; //货币换算初始位置
cin >> cny_fore;
cout << "" << endl;
cny = exchange * cny_fore; //计算人民币的金额
cout << "可兑换的人民币数值为:" << cny << endl;
cout << endl;
cout << "是否继续( 是(y/Y),否(n/N)):" << endl;
char yes_no2;
do {
cin >> yes_no2;
if (yes_no2 == 'y' || yes_no2 == 'Y')
{
cout << "兑换成功" << endl;
cout << "" << endl;
system("pause");
main_choice();
}
else if (yes_no2 == 'n' || yes_no2 == 'N')
{
cout << "兑换已取消" << endl;
cout << "" << endl;
system("pause");
main_choice();
}
else
{
cout << "请重新输入!!!" << endl;
exchange_cny(exchange);
}
} while (yes_no2 != 'y' && yes_no2 != 'Y' && yes_no2 != 'n' && yes_no2 != 'N');
return 0;
}
//兑换外币数额函
//系统选择2使用
int exchange_fore(double exchange)
{
fflush(stdout);
int cny_fore = 0; //外币金额
double fore = 0; //兑换后的人民币数值
int judg=1;
double exch = 1 / exchange;
cout << "当前汇率值为:" << exch << endl;
cout << endl;
cout << endl;
cout << "是否进行查询( 是(Y/y) 否(N/n) )" << endl;
char yes_no;
do {
cin.clear();
fflush(stdout); //清空缓冲流,否则一闪一闪亮晶晶
cin >> yes_no;
if (yes_no == 'y' || yes_no == 'Y')
{
judg=InqurieMoney(url_choice, exch);
if (judg == 0)
{
exchange = exch;
exch = 1 / exchange;
}
cout << "查询后当前汇率值为:" << exch << endl;
}
else if (yes_no == 'n' || yes_no == 'N')
{
cout << "OK" << endl;
break;
}
else
cout << "请重新输入!!!" << endl;
} while ((yes_no != 'y' && yes_no != 'Y') && (yes_no != 'n' && yes_no != 'N'));
cout << "" << endl;
cout << "请输入要兑换的人民币金额:" << endl;
cin >> cny_fore;
cout << "" << endl;
fore = exch * cny_fore; //计算人民币的金额
cout << "可兑换的外币数值为:" << fore << endl;
cout << endl;
cout << "是否继续( 是(y/Y),否(n/N)):" << endl;
char yes_no2;
do {
cin >> yes_no2;
if (yes_no2 == 'y' || yes_no2 == 'Y')
{
cout << "兑换成功" << endl;
cout << "" << endl;
system("pause");
main_choice();
}
else if (yes_no2 == 'n' || yes_no2 == 'N')
{
cout << "兑换已取消" << endl;
cout << "" << endl;
system("pause");
main_choice();
}
else
{
cout << "请重新输入!!!" << endl;
exchange_fore(exchange);
}
} while (yes_no2 != 'y' && yes_no2 != 'Y' && yes_no2 != 'n' && yes_no2 != 'N');
return 0;
}
以下是inquire.cpp文件内容
#include<windows.h>
#include<Wininet.h>
#include<iostream>
#include<fstream>
#include<string>
#include<cstring>
#include "tchar.h"
#include "currency_exchange.h"
#pragma comment(lib,"WinInet.lib")
using namespace std;
int InqurieMoney(int UrlChoice , double &exch)
{
HINTERNET hINet, hHttpFile;
char szSizeBuffer[32];
DWORD dwLengthSizeBuffer = sizeof(szSizeBuffer);
//如果显示“msedge”报错,点击 调试->ExchangeMoney属性->常规->字符集
//修改为“使用多字节字符集”
hINet = InternetOpen("msedge", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); //InternetOpen初始化WININET.DLL
//hINet = InternetOpen("IE6.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); //InternetOpen初始化WININET.DLL
string url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=MYR" };
int url_choice;
char choice = '0';
/*string ucrl[]= {
//美元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=USD"
// 英镑
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=GBP"
// 欧元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=EUR"
// 港币
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=HKD"
// 澳门元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=MOP"
// 日元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=JPY"
// 加拿大元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=CAD"
// 澳大利亚元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=AUD"
// 新加坡元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=SGD"
// 韩元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=KRW"
// 菲律宾比索
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=PHP"
// 泰国铢
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=THB"
// 瑞士法郎
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=CHF"
// 新西兰元
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=NZD"
// 丹麦克朗
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=DKK"
// 挪威克朗
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=NOK"
// 瑞典克朗
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=SEK"
// 卢布
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=RUB"
// 林吉特
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=MYR"
// 南非兰特
"https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=ZAR"
};*/
choice=UrlChoice+65;
switch (choice) //币种汇率选择
{
case'a': case 'A':
//<< "您选择的是美元USD" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=USD" };
break;
case'b': case 'B':
url_choice = 1;
// << "您选择的是英镑GBP" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=GBP" };
break;
case'C': case 'c':
//<< "您选择的是欧元EUR" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=EUR" };
break;
case'd': case 'D':
// << "您选择的是港币HKD" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=HKD" };
break;
case'E': case 'e':
// << "您选择的是澳元MOP" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=MOP" };
break;
case'f': case 'F':
// << "您选择的是日元JPY" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=JPY" };
break;
case'G': case 'g':
// << "您选择的是加拿大元CAD" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=CAD" };
break;
case'h': case 'H':
// << "您选择的是澳大利亚元AUD" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=AUD" };
break;
case'i': case 'I':
// << "您选择的是新加坡元SGD" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=SGD" };
break;
case'j': case 'J':
// << "您选择的是韩元KRW" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=KRW" };
break;
case'k': case 'K':
// << "您选择的是菲律宾比索PHP" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=PHP" };
break;
case'l': case 'L':
// << "您选择的是泰国铢THB" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=THB" };
break;
case'm': case 'M':
// << "您选择的是瑞士法郎CHF" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=CHF" };
break;
case'n': case 'N':
// << "您选择的是新西兰元NZD" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=NZD" };
break;
case'o': case 'O':
// << "您选择的是丹麦克朗DKK" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=DKK" };
break;
case'p': case 'P':
// << "您选择的是挪威克朗NOK" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=NOK" };
break;
case'q': case 'Q':
// << "您选择的是瑞典克朗SEK" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=SEK" };
break;
case'r': case 'R':
// << "您选择的是卢布RUB" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=RUB" };
break;
case's': case 'S':
// << "您选择的是林吉特MYR" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=MYR" };
break;
case't': case 'T':
// << "您选择的是南非兰特ZAR" << endl;
url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=ZAR" };
break;
}
//string url =cstring( ucrl[4]);
//cout << url << endl;
if (!hINet)
{
cout << "InternetOpen fail" << endl;
return 1;
}
//string url = { "https://api.it120.cc/gooking/forex/rate?fromCode=CNY&toCode=MYR" };
hHttpFile = InternetOpenUrl(hINet, url.c_str(), NULL, 0, 0, 0); //这个函数连接到一个网络服务器上并且最被从服务器上读取数据
if (!hHttpFile)
{
cout << "error open url" << endl;
cout << "目前暂时无法查询,请请您关闭防火墙或者连接网络后重试,谢谢。" << endl;
return 1;
}
BOOL bQuery = HttpQueryInfo(hHttpFile,
HTTP_QUERY_CONTENT_LENGTH,
szSizeBuffer,
&dwLengthSizeBuffer, NULL); //得到关于文件的信息
if (bQuery == false)
{
InternetCloseHandle(hINet);
cout << "error query info" << endl;
return 3;
}
int FileSize = atol(szSizeBuffer); //atol函数把字符串转换成长整型数
string revData;
revData.resize(FileSize);
DWORD dwBytesRead;
BOOL bRead = InternetReadFile(hHttpFile, &revData[0], FileSize, &dwBytesRead); //web浏览器将在InternetReadFile上循环 ,不停地从Internet上读入数据块。
if (!bRead)
{
cout << "error to read file" << endl;
return 4;
}
ofstream out_file("duhui.txt");
out_file << revData; //输出到文件
out_file.close();
InternetCloseHandle(hHttpFile); //关闭句柄
InternetCloseHandle(hINet);
out_file.close();
ifstream myfile("duhui.txt");
string strs;
myfile >> strs;
int i = 0, begin = 0, point = 0, ending = 0, judge = 0; //提取 ***汇率值double型*** 临时变量
char temp = 'a'; //字符串元素转换temp
//cout << "ccc" << endl;
//cout << strs << endl;
for (i = 20; i < 40; i++) { //汇率值第一个有效数字
temp = strs[i];
//cout << temp << endl;
if (temp >= '0' && temp <= '9')
{
begin = i;
break;
}
}
for (i = begin; i < 40; i++)
{
temp = strs[i];
if (temp == '.')
{
judge = 1; //寻找到小数点
point = 1 + i; //寻找汇率值小数点位置
//cout << "piont==" << point << endl;
break;
}
}
for (i = point; i < 40; i++)
{
if ((strs[i] < '0' || strs[i] > '9') && judge == 1)
{
{
ending = i; //寻找汇率值最后的有效数字
//cout << "ending" << ending << endl;
break;
}
}
}
int j = 0;
char curr[10]; // 存储中行汇率的字符串
for (i = begin; i < ending; i++)
{
temp = strs[i];
//cout << "temp=" << temp;
curr[j] = temp;
j++;
}
myfile.close();
exch = atof(curr);
//cout << "curr" << curr << endl;
//cout << "exch"<<exch << endl;
//system("pause");
return 0;
}
以下是menu.cpp文件内容
#include "currency_exchange.h"
void menu_main()
{
system("cls"); /
fflush(stdout);
cout << "**********************************************************" << endl;
cout << "******** 东大出品 ********" << endl;
cout << "**** ****" << endl;
cout << "** 外币兑换系统 **" << endl;
cout << "**** ****" << endl;
cout << "******** 东大出品 ********" << endl;
cout << "**********************************************************" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "***外币兑换人民币请按1" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "***人民币兑换外币请按2" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "***退出系统请按3" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "***请输入您的选择" << endl;
}
void CNY_FOREIGN()
{
system("cls");
fflush(stdout);
cout << "**********************************************************" << endl;
cout << "******** 东大出品 ********" << endl;
cout << "**** ****" << endl;
cout << "** 外币兑换系统 **" << endl;
cout << "**** ****" << endl;
cout << "******** 东大出品 ********" << endl;
cout << "**********************************************************" << endl;
cout << "" << endl;
cout << "******** 您选择的是人民币兑换外币 ********" << endl;
cout << "" << endl;
cout << "***美元 USD 请按a(A) ***菲律宾比索 PHP 请按k(K)" << endl;
cout << "***英镑 GBP 请按b(B) ***泰国铢 THB 请按l(L)" << endl;
cout << "***欧元 EUR 请按c(C) ***瑞士法郎 CHF 请按m(M)" << endl;
cout << "***港币 HKD 请按d(D) ***新西兰元 NZD 请按n(N)" << endl;
cout << "***澳门元 MOP 请按e(E) ***丹麦克朗 DKK 请按o(O)" << endl;
cout << "***日元 JPY 请按f(F) ***挪威克朗 NOK 请按p(P)" << endl;
cout << "***加拿大元 CAD 请按g(G) ***瑞典克朗 SEK 请按q(Q)" << endl;
cout << "***澳大利亚元 AUD 请按h(H) ***卢布 RUB 请按r(R)" << endl;
cout << "***新加坡元 SGD 请按i(I) ***林吉特 MYR 请按s(S)" << endl;
cout << "***韩元 KRW 请按j(J) ***南非兰特 ZAR 请按t(T)" << endl;
cout << "" << endl;
cout << "****** 返回请按“z(Z)” ******" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "请输入您的选择" << endl;
}
void FOREIGN_CNY()
{
system("cls"); //????
fflush(stdout); //??????????????????????????
cout << "**********************************************************" << endl;
cout << "******** 东大出品 ********" << endl;
cout << "**** ****" << endl;
cout << "** 外币兑换系统 **" << endl;
cout << "**** ****" << endl;
cout << "******** 东大出品 ********" << endl;
cout << "**********************************************************" << endl;
cout << "" << endl;
cout << "******** 您选择的是外币兑换人民币 ********" << endl;
cout << "" << endl;
cout << "***美元 USD 请按a(A) ***菲律宾比索 PHP 请按k(K)" << endl;
cout << "***英镑 GBP 请按b(B) ***泰国铢 THB 请按l(L)" << endl;
cout << "***欧元 EUR 请按c(C) ***瑞士法郎 CHF 请按m(M)" << endl;
cout << "***港币 HKD 请按d(D) ***新西兰元 NZD 请按n(N)" << endl;
cout << "***澳门元 MOP 请按e(E) ***丹麦克朗 DKK 请按o(O)" << endl;
cout << "***日元 JPY 请按f(F) ***挪威克朗 NOK 请按p(P)" << endl;
cout << "***加拿大元 CAD 请按g(G) ***瑞典克朗 SEK 请按q(Q)" << endl;
cout << "***澳大利亚元 AUD 请按h(H) ***卢布 RUB 请按r(R)" << endl;
cout << "***新加坡元 SGD 请按i(I) ***林吉特 MYR 请按s(S)" << endl;
cout << "***韩元 KRW 请按j(J) ***南非兰特 ZAR 请按t(T)" << endl;
cout << "" << endl;
cout << "****** 返回请按“z(Z)” ******" << endl;
cout << "" << endl;
cout << "" << endl;
cout << "请输入您的选择" << endl;
}
以下是ExchangeMoney.cpp文件内容
/*
#include<Windows.h>
#include<shellapi.h>
#include <stdio.h>
#include <stdlib.h>
//#include "tchar.h"
int main()
{
//使用IE浏览器打开https://ultravires.github.io
//ShellExecuteW(NULL, L"open", L"msedge.exe", L"https://srh.bankofchina.com/search/whpj/search_cn.jsp", NULL, SW_MAXIMIZE);
//system("explorer https://srh.bankofchina.com/search/whpj/search_cn.jsp ");
//ShellExecute(NULL, L"open", L"http://www.xspace.idv.tw/", NULL,NULL, SW_SHOWNORMAL);
system("explorer https://srh.bankofchina.com/search/whpj/search_cn.jsp");
//WinExec("msedge.exe", SW_SHOW);
return 0;
}
*/
#include "currency_exchange.h"
using namespace std;
//extern int url_choice; //币种指向变量
int main()
{
main_choice();
return 0;
}
以下是currency_exchange.h文件内容
#pragma once
#ifndef CURRENCY_EXCHANGE_H
#define CURRENCY_EXCHANGE_H
#include<windows.h>
#include<Wininet.h>
#include<iostream>
#include<fstream>
#include<string>
#include<cstring>
#pragma comment(lib,"WinInet.lib")
#pragma once
//extern int url_choice; //币种指向变量
//初始汇率值查询表
//更新时间2021年11月30日
//比值关系1软妹币:XXX外币
const double
USD = 6.3794, // 美元
CNY = 1.0000, // 人民币
GBP = 8.4941, // 英镑
EUR = 7.2063, // 欧元
HKD = 0.8179, // 港币
MOP = 0.7950, // 澳门元
JPY = 0.0560, // 日元
CAD = 5.0080, // 加拿大元
AUD = 4.5578, // 澳大利亚元
SGD = 4.6625, // 新加坡元
KRW = 0.0054, // 韩元
PHP = 0.1267, // 菲律宾比索
THB = 0.1894, // 泰国铢
CHF = 6.9129, // 瑞士法郎
NZD = 4.3544, // 新西兰元
DKK = 0.9690, // 丹麦克朗
NOK = 0.7079, // 挪威克朗
SEK = 0.7041, // 瑞典克朗
RUB = 0.0857, // 卢布
MYR = 1.5053, // 林吉特
ZAR = 0.3954; // 南非兰特
///
using namespace std;
void menu_main();
int InqurieMoney(int choice, double &exch);
void CNY_FOREIGN();
void FOREIGN_CNY();
int main_choice();
int sys_choice1(); //外币兑换人民币
int sys_choice2(); //人民币兑换外币
double menu_choice1(char choice, double exchange); //选择函数界面函数
double menu_choice2(char choice, double exchange); //选择函数界面函数
int exchange_cny(double exchange); //兑换人民币数额函数
int exchange_fore(double exchange); //兑换外币数额函数
#endif // !CURRENCY_EXCHANGE_H
运行的视频结果已经按照某同学需求发布…
外币兑换
注意事项:
1、该程序多次编译后会在memcpy.asm文件下报错,是一个异常中断(含有“req”等汇编语言字眼),需要重新开启新的项目或者删除系统自建Debug文件夹重新编译才可以运行。
2、字符串在C++里面是利用模板动态存储的,无需初始定义长度。但是strcpy_s等函数无法正常使用。同样的string不知为何不能作为实参传值或者传地址。
3、网页抓取函数,使用了部分Windows自定义的窗口函数,需要标明命名空间,#pragma comment(lib,“WinInet.lib”),并对字符集的设置进行更改。
4、由于抓取字符串和网页开启函数的特殊性质,需要在文件保存字符串并关闭后,重新打开方可用string类型字符串获取数据,同时网页函数不可使用const定义的字符串数组。
5、关于.h文件重复编译的问题,系统自带在.H文件中的“#pragma once”不要删除。