如何在每次运行程序时存储和更新总计

时间:2013-06-07 16:53:35

标签: c#

我正在编写一个计算燃气费用的程序。

用户输入:

  • 燃气价格
  • 汽车可容纳多少加仑
  • 目前有多少气体进入水箱(估计为0,.25,.5,.75)。

完成计算,然后显示的是:

  • 当前总计(此填充的天然气价格)
  • 每月总数(假设用户每月补充燃气2.5次)
  • 年度总计(每月* 12)

我现在要做的是创建一个询问“创建一辆新车?”的提示。或“使用当前的汽车”:

  • 如果要创建新车,则总计从0开始。
  • 如果使用现有车辆,则应从存储位置拉出总数。

我正在寻找一种方法让输入存储在数据库中(或者文件能更好地工作吗?),这样它就可以在每次启动程序时跟踪总数并关闭它。

例如,如果我加油并且我目前的总额为32.54美元,我希望每月和每年的总数从0.00变为32.54美元。然后下次打开它时,每月和每年应显示32.54美元,直到我再添加一个当前总数。

单击名为“calculate”的按钮时的当前代码:

// Variables
double gasPrice;
double gasInTank;      // How much gas is in the tank
double lessGas = 0.0;  // Essentially, what needs to be filled up.
double currentTotal;
double monthlyExpense;
double annualExpense;
double maxGallons;

gasPrice = double.Parse(txtGasPrice.Text);
maxGallons = double.Parse(txtMaxGas.Text);
gasInTank = double.Parse(txtGasInTank.Text);

if (gasInTank == 0)
{
    lessGas = maxGallons;
}
else if (gasInTank == .25)
{
    lessGas = maxGallons * .75;
}
else if (gasInTank == .5)
{
    lessGas = maxGallons / 2;
}
else if (gasInTank == .75)
{
    lessGas = maxGallons * .25;
}
else
{
    MessageBox.Show("Accepted values are : '0', '.25', '.5', and '.75'");
}

currentTotal = gasPrice * lessGas;
monthlyExpense = currentTotal * 2.5;
annualExpense = monthlyExpense * 12;
lblCurrentShow.Text = currentTotal.ToString("c");
lblMonthShow.Text = monthlyExpense.ToString("c");
lblAnnualShow.Text = annualExpense.ToString("c");

我很抱歉,如果这很难理解,或者对于一个问题的“noob”,但是至少已经有一年了,因为我已经用C#做了一些事情,而我正在努力改变我的思维方式作为一名程序员,我从大学毕业后开始了我的第一份工作。

2 个答案:

答案 0 :(得分:1)

这实际上取决于几个因素,其中最重要的是有多少用户将使用此应用程序以及使用频率。此外,应用程序运行的位置很重要,这是桌面还是Web。 话虽如此,我认为它是一个桌面和一个用户。

存储信息的几个选项:

  1. 将值存储在本地XML文件中 - 使用XmlSerializerXmlSerializer of Simple Object XmlSerializer example
  2. 将值存储在sqlite数据库中 - 使用System.Data.SQLite (适用于SQLite的ADO.NET适配器) (SQLite example
  3. 缓存值 - OutputCacheProvider (System.Runtime.Caching.dll包含非Web应用程序的chaching API) (OutputCacheProvider example

答案 1 :(得分:0)

首先,您需要将要保留的值提升为字段或属性

在这种情况下,我认为只有currentTotal所以,

public class yourClass
{
    public double CurrentTotal {get;set;}

    protected void yourButtonClickCode()
    {
        // use the proeprty ref here instead of the local
    }

}

现在退出时,您希望将其值保存到本地文件:

public class yourClass
{
    public double CurrentTotal {get;set;}

    protected void yourButtonClickCode()
    {
        // use the proeprty ref here instead of the local
    }

    protected void onExit() 
    {
       System.IO.File.WriteAllText(@"your path.txt", this.CurrentTotal.ToString());
    }    

}

现在我们正在保存数据,我们也可以编写代码来加载它:

public class yourClass
{
    public double CurrentTotal {get;set;}

    protected void yourButtonClickCode()
    {
        // use the proeprty ref here instead of the local
    }

    public yourClass()
    {
       if(System.IO.File.Exists(@"your file.txt"))
       {
           this.CurrentTotal = double.Parse( System.IO.File.ReadAllText(@"your file.txt"));
       }
       else
       {
           this.CurrentTotal = 0d;
       }
    }

    protected void onExit()
    {
       System.IO.File.WriteAllText(@"your path.txt", this.CurrentTotal.ToString());
    }    

}

如何让onExit事件发挥作用取决于这是什么类型的项目(wpf / winforms / console等)

这不适用于多辆车等,我会留下您解决这些细节,但这是一般的想法。

如果它是数据库,则用数据库调用替换这些IO调用。