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;
    } 
  }
}

如果您使用的不是实际货币数据,而只是静态数据,那么以下是改进的步骤:

  • 以一种货币作为基础货币。通常是美元,价值1
  • 将所有货币的所有汇率以美元存储在集合[Key,Value]中。 这里的关键是您的货币代码,如新加坡元,其价值是美元汇率
  • 现在,您可以将选定的下拉列表值作为键传递,以检索值,例如货币[toCountry.Code]
  • 现在来看看价格。你们可以这样划分,得到从国家到国家的价值

    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]);