正在更新我的货币转换器c#中的汇率
本文关键字:汇率 转换器 货币 更新 我的 | 更新日期: 2023-09-27 18:25:12
我只想知道如何在整个程序中使用更新的速率。这是我迄今为止的代码供参考。。。
//Form 1
private void update_Click(object sender, EventArgs e)
{
if (fromcountry.Text == tocountry.Text)
{
MessageBox.Show(" Please Choose Two Different Currencies To Use This Function", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
btnconvert.Enabled = true;
Exchange_Rate frm = new Exchange_Rate();
frm.Show(this);
}
}
//Form 1 one of the comboboxes for selecting 2nd country
private void tocountry_SelectedIndexChanged(object sender, EventArgs e)
{
btnupdate.Enabled = true;
btnconvert.Enabled = true;
txtvalue.Enabled = true;
exchange();
}
private void exchange()
{
if (fromcountry.Text == tocountry.Text)
{
lblexchange.Text = "1";
}
else if (fromcountry.Text == "SGD - Singapore Dollar" && tocountry.Text == "USD - US Dollar")
{
lblexchange.Text = "1.26";
}
else if (fromcountry.Text == "SGD - Singapore Dollar" && tocountry.Text == "MYR - Malaysian Ringgit")
{
lblexchange.Text = "2.35";
}
else if (fromcountry.Text == "SGD - Singapore Dollar" && tocountry.Text == "EUR - Euro")
{
lblexchange.Text = "0.60";
}
//Form 2
private void btnok_Click(object sender, EventArgs e)
{
try
{
double exchange;
exchange = Double.Parse(txtcurrent.Text);
var frm = (currencyconverter)this.Owner;
frm.PassValue(txtcurrent.Text);
this.Close();
}
catch
{
MessageBox.Show("Please Enter Numbers", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
txtcurrent.Text = "";
}
}
我知道,通过使用if-else方法,在项目开始时获得费率太模糊了,我只是一个学习简单编程的学生。但当我再次按下相同的转换时,我仍然需要知道如何使用更新的速率。如果没有足够的信息,我可以帮助您获得更多的编码
您可以使用共享货币对象来保存有关货币汇率的信息
public class Currency
{
private Currency(string name)
{
Name = name;
}
public string Name {get; private set;}
public decimal Rate {get; private set;}
private void SetRate(decimal rate)
{
Rate = rate;
OnRateChanged(this);
}
public static event EventHandler RateCanged;
private static OnRateChanged(Currency currency)
{
var handler = RateChanged;
if(handler != null)
{
handler(currency, EventArgs.Empty);
}
}
private Dictionary<string, Currency> currencies = new Dictionary<string, Currency>();
public static Currency GetCurrency(string name)
{
Currency currency;
if(!currencies.TryGetValue(name, out currency))
{
currency = new Currency(name);
currencies[name] = currency;
}
}
}
所以你有一个简单的共享速率存储,你可以在上使用它
class Form1
{
public Form1()
{
...
Currency.RateChanged += RateChanged;
}
private void RateChanged(object source, EventArgs e)
{
labelRate.Text = Currency.GetCurrency("USD").Rate;
}
}
class Form2
{
public Form2()
{
...
rateTextBox.Text = Currency.GetCurrency("USD").Rate.ToString();
}
void updateButtin_Click()
{
Currency.GetCurrency("USD").SetRate(decimal.Parse(rateTextBox.Rate));
}
}
有很多不同的方法可以实现这一点,如果不为您做出设计决策,就不可能完整回答。脑海中浮现的方法是使用配置文件、数据库或一些外部源。
正如您所指出的,您需要有某种方法将这些值存储在应用程序之外,这样,如果转换率发生变化,您就可以在软件中更新它,而无需重写代码。
你需要决定如何做到这一点。
数据库数据库可能是最灵活的,但它需要你维护它。有无数的机制可以通过Linq2SQL或NHibernate从ADO.NET访问数据库。
外部来源我相信你可以从各种在线来源获得货币数据,无论是网络服务还是RSS订阅源,你都可以访问——值得一读吗?
配置就我个人而言,这是我建议的方法。由于你显然不是很有经验,我建议更简单的配置解决方案,提高你的数据库技能——在未来,这对你来说将是一件轻而易举的事。
我会使用与这里类似的配置文件的AppSettings部分。
你可以在你的应用程序中添加一个App.Config文件,这将存储转换率,这样你就可以在不需要重写工具的情况下更新它们。您可以通过右键单击项目并添加"新建项",然后添加"配置文件"来创建新文件。
您还需要在System.Configuration中添加一个引用,因为默认情况下它没有被引用。
配置文件中有一个名为AppSettings的部分,这是一个用于键/值类型属性的简单部分。我们将创建一组应用程序设置,每个转换率一个。例如:
然后,您可以使用您所在的国家/地区来生成此密钥。例如:
string settingKey = string.Concat(fromcountry.Text, "_", tocountry.Text);
您可以使用ConfigurationManager:访问此配置值
decimal rate = decimal.Parse(ConfigurationManager.AppSettings[settingKey]);
一旦你得到了速率,你就可以进行乘法运算来计算正确的值。
请记住,这里没有错误处理-如果不知道国家或配置中不包含汇率,会发生什么!
如果您没有使用实际的货币数据,而只是使用静态数据,那么以下是改进的步骤:
- 以一种货币作为基础货币。通常是美元,价值1
- 以美元存储集合[Key,Value]中所有货币的所有汇率。这里的密钥是您的货币代码,例如SGD,价值是美元汇率
- 现在,您可以将选定的下拉值作为Key来检索值,例如Currencies[toCountry.Code]
-
现在来获取费率。你可以这样划分,以获得FromCountry在ToCountry 方面的价值
var FromCountryRate = Currencies[FromCountry.Value]/Currencies[ToCountry.Value];