更新我的货币转换器中的费率c#

时间:2013-07-26 09:45:40

标签: 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", 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方法,它太模糊了,无法在程序开始时获得费率,我只是一个学习简单编程的学生。但是,当我再次按相同的转换时,我仍然需要知道如何使用更新的速率。如果信息不足,我可以帮助您获得更多编码

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

有许多不同的方法可以实现这一目标,如果不为您做出设计决定,将无法完全回答。想到的方法是使用配置文件,数据库或某些外部源。

正如您所指出的,您需要有一些方法将这些值存储在应用程序之外,因此如果转换率发生变化,您可以在软件中更新它,而无需重写代码。

你需要决定如何做到这一点。

<强>数据库 数据库可能是最灵活的,但它需要您维护它。有无数机制可以从ADO.NETLinq2SQLNHibernate访问数据库。

外部来源 我相信你可以从各种在线资源获得货币数据,无论是网络服务还是你可以访问的RSS提要 - 这些都值得阅读吗?

<强>配置 就个人而言,这是我建议的方法。由于你显然不是很有经验,我建议使用更简单的配置解决方案,处理你的数据库技能 - 将来它对你来说将毫不费力。

我会使用配置文件的AppSettings部分,类似于here

您可以将App.Config文件添加到您的应用程序,这将存储转换率,以便您可以更新它们而无需重写您的工具。您可以通过右键单击项目并添加New Item,然后添加Configuration File来创建新文件。

您还需要在System.Configuration上添加一个引用,因为默认情况下它没有被引用。

配置文件中有一个名为AppSettings的部分,这是键/值类型属性的简单部分。我们将创建一组应用设置,每个转化率一个。例如:

               

然后,您可以使用您所在的国家/地区生成此密钥。例如:

string settingKey = string.Concat(fromcountry.Text, "_", tocountry.Text);

您可以使用ConfigurationManager访问此配置值:

decimal rate = decimal.Parse(ConfigurationManager.AppSettings[settingKey]);

获得费率后,您就可以执行乘法运算来计算正确的值。

请注意,这里没有错误处理 - 如果国家未知或配置不包含汇率会怎样?

答案 2 :(得分:0)

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

  1. 将一种货币作为基础货币。通常是价值为1的美元
  2. 以美元存储[Key,Value]集合中所有货币的所有汇率。 这里的密钥是您的货币代码,例如,新元和价值是以美元计算的汇率。
  3. 现在您可以将选定的下拉值作为Key传递以检索值,例如,货币[toCountry.Code]
  4. 现在获得费率。您可以这样划分以获取FromCountry的ToCountry值

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