0

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

用户输入:

  • 天然气的价格
  • 汽车能装多少加仑
  • 当前有多少气体进入油箱(估计为 0、.25、.5、.75)。

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

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

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

  • 如果是创建一辆新车,总数从 0 开始。
  • 如果使用当前汽车,则应从存储位置提取总数。

我正在寻找一种将输入存储在数据库中的方法(或者文件会更好地工作吗?),以便每次启动程序时它都可以跟踪总数,然后关闭它。

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

单击名为“计算”的按钮时,我当前的代码:

// 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");

很抱歉,如果这很难理解,或者是一个问题的“菜鸟”,但自从我在 C# 中做任何事情以来已经至少一年了,我正在尝试在开始之前刷新我的思维方式大学毕业后的第一份工作是程序员。

4

2 回答 2

1

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

存储信息的几个选项:

  1. 将值存储在本地 XML 文件中 - 使用XmlSerializer简单对象 XmlSerializer 示例的 XmlSerializer )
  2. 将值存储在 sqlite 数据库中 - 使用System.Data.SQLite (SQLite 的 ADO.NET 适配器)(SQLite 示例
  3. 缓存值 - OutputCacheProvider ( System.Runtime.Caching.dll 包含非 Web 应用程序的 chaching API)(OutputCacheProvider 示例
于 2013-06-07T17:10:54.320 回答
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 调用。

于 2013-06-07T17:08:33.497 回答