C# 更新我的货币转换器c中的汇率#
我只是想知道如何在整个程序中使用更新的速率。这是我到目前为止的代码供参考C# 更新我的货币转换器c中的汇率#,c#,C#,我只是想知道如何在整个程序中使用更新的速率。这是我到目前为止的代码供参考 //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",
//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;
}
}
}
如果您使用的不是实际货币数据,而只是静态数据,那么以下是改进的步骤:
var FromCountryRate = Currencies[FromCountry.Value]/Currencies[ToCountry.Value];
有许多不同的方法来实现这一点,如果不为您做出设计决策,就不可能完全回答。spring想到的方法是使用配置文件、数据库或某些外部源 正如您所指出的,您需要在应用程序外部存储这些值,这样,如果转换率发生变化,您可以在软件中更新它,而无需重写代码 你需要决定怎么做 数据库 数据库可能是最灵活的,但是它需要您对其进行维护。有无数的机制可以从、通过或访问数据库 外部源 我确信有各种各样的在线来源可以让你从中获取货币数据,无论是网络服务还是RSS订阅源,你都可以访问——这些都值得一读吗 配置 就我个人而言,这是我建议的方法。由于您显然不是很有经验,我建议您使用更简单的配置解决方案,提高您的数据库技能-在将来,这对您来说将是一个不需要动脑筋的问题 我将使用配置文件的AppSettings部分,类似于 您可以将App.Config文件添加到您的应用程序中,这将存储转换率,以便您无需重写工具即可更新转换率。通过右键单击项目并添加新项,然后添加配置文件,可以创建一个新文件 您还需要在System.Configuration中添加一个引用,因为默认情况下它不会被引用 配置文件中有一个名为AppSettings的部分,这是键/值类型属性的简单部分。我们将创建一组应用程序设置,每个转换率一个。例如: 然后,您可以使用您所在的国家/地区生成此密钥。例如:
string settingKey = string.Concat(fromcountry.Text, "_", tocountry.Text);
您可以使用ConfigurationManager访问此配置值:
decimal rate = decimal.Parse(ConfigurationManager.AppSettings[settingKey]);
一旦你得到了这个速率,你就可以执行乘法运算来计算正确的值
请记住这里没有错误处理-如果不知道国家或配置不包含汇率会发生什么情况 提示:使用数据库存储更改率,因为它可以是.sdf文件@wudzik我真的不知道如何使用这个代码。。还有其他方法吗?同意@wudzik,我还建议您将类稍微解耦,并将
exchange
方法移到另一个类中。@user2610573了解“更简单”的方法,您可以使用Viacheslav Smityukh的代码(回答如下),但它不是持久性的。很抱歉,如果太枯燥。。。这个类是关于什么的?我应该如何链接它?我的第一段代码是Currency类。这是一个简单的货币对象实现,有两个字段名称和汇率。用作货币存储的同一个对象,存储所有已使用的货币,并通过RateCanged Event通知所有接收者更改,因此名称和汇率等于我选择的国家和我输入的汇率?货币类绝对是个好主意,这是我在回答时忽略的一点,因为我试图保持它的简单性,但它确实值得考虑!如何返回onratechanged?System.Configuration我相信-默认情况下不会引用dll,因此您需要添加它。我对使用配置方法非常迷茫。我应该如何使用它?你能详细说明一下吗?很抱歉打扰您,您以前使用过应用程序设置吗?我将对我的答案进行一点扩展,但您可能需要阅读一些关于如何使用ConfigurationManager的内容。我已经添加了一些详细信息,我的评论中关于的链接也应该对您有所帮助。
decimal rate = decimal.Parse(ConfigurationManager.AppSettings[settingKey]);