正在更新我的货币转换器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方法,在项目开始时获得费率太模糊了,我只是一个学习简单编程的学生。但当我再次按下相同的转换时,我仍然需要知道如何使用更新的速率。如果没有足够的信息,我可以帮助您获得更多的编码

正在更新我的货币转换器c#中的汇率

您可以使用共享货币对象来保存有关货币汇率的信息

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. 以一种货币作为基础货币。通常是美元,价值1
  2. 以美元存储集合[Key,Value]中所有货币的所有汇率。这里的密钥是您的货币代码,例如SGD,价值是美元汇率
  3. 现在,您可以将选定的下拉值作为Key来检索值,例如Currencies[toCountry.Code]
  4. 现在来获取费率。你可以这样划分,以获得FromCountry在ToCountry 方面的价值

    var FromCountryRate = Currencies[FromCountry.Value]/Currencies[ToCountry.Value];