Visual Basic中的计算

时间:2014-02-19 02:10:49

标签: vb.net

在我正在为我的Visual Basic类工作的程序中,我要编写一个程序来计算配方中有多少卡路里。

我的表单有2个列表框(lstIngredients和lstRecipe)和一个数量的文本框(txtQuantity),以及一个计算卡路里的按钮(btnCalculate)。还有其他的东西,但我列出的这些是唯一与这个问题相关的东西。

我已经编写了代码,将选定的项目及其适当的数量添加到“食谱”列表框中,但我对如何计算卡路里感到困惑。

在成分列表框中有以下项目:鸡蛋(每个),面粉(杯子),牛奶(杯子),糖(杯子)和黄油(汤匙)。根据说明,我们给出了每种食物的卡路里:1个鸡蛋= 72卡路里,1杯面粉= 455卡路里,1杯牛奶= 86卡路里,1杯糖= 774卡路里,1汤匙黄油= 102卡路里。使用这些值,添加到配方列表中的项目及其数量,程序应该在用户单击“计算卡路里”按钮时计算该配方中的卡路里总数。

我理解将要完成的数学计算,如果食谱需要2个鸡蛋,3杯面粉和2杯牛奶,我必须将每种成分的卡路里乘以数量,然后添加所有这些值一起来获得食谱的总卡路里。但我不知道如何将卡路里值连接到各个项目。

这是我到目前为止编写的代码。

Public Class Form1

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        Dim i As Integer = lstIngredients.SelectedIndex
        Dim Quantity As Integer

        If Trim(txtQuantity.Text = "") Then
            Quantity = 1
        Else
            Quantity = Me.txtQuantity.Text
        End If

        Dim intCount As Integer = 0
        While intCount < Quantity
            lstRecipe.Items.Add(lstIngredients.Text)
            intCount += 1
        End While
    End Sub

    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
        lstRecipe.Items.Clear()
        txtQuantity.Clear()
        txtAnswer.Clear()
    End Sub

    Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles  btnCalculate.Click
        Dim dblCalories As Double

        If txtQuantity.Text = "" Then
            txtAnswer.Text = "0 Calories"
        End If

    End Sub
End Class

另外,这是一个我可以使用数据集的实例吗?我以前从未使用它们,所以不知道它是如何工作的,但是如果它可以使这更简单,那么我就是哈哈。

2 个答案:

答案 0 :(得分:2)

你可以创建一个

Dictionary<string,int> 

(抱歉c#)然后将每种成分添加到字典中,使用成分的名称作为关键字,将卡路里作为值。然后,您可以通过查找密钥轻松匹配。

修改(感谢davidsbro的评论):

类似的东西:

Dictionary<string,int> dIngredients = new Dictionary<string, int>();

// Add the code here to add the ingredients

foreach(string s in lstIngredients)
{
    dblCalories += dIngredients[s];
}

答案 1 :(得分:2)

  

但我不知道如何将卡路里值与个人联系起来   项目

由于卡路里的含量取决于每种成分的含量,因此代表成分的类别会有所帮助:

Class Ingredient
    Public Property Name As String = ""
    Public Property Amount As Double = 0
    Public Property Measure As Measurements = Measurements.Tsp
    Private Property Calories As Double = 0
    Private Property CalMeas As Measurements = Measurements.Tsp
    Public Sub New(_name As String, _calories As Double, _caloriemeasure As Measurements, Optional _amount As Double = 0, Optional _measure As Measurements = Measurements.Tsp)
        Name = _name
        Calories = _calories
        CalMeas = _caloriemeasure
        Amount = _amount
        Measure = _measure
    End Sub
    Public Function GetCalories() As Double
        Return (Amount * Measure) * (Calories / CalMeas)
    End Function
    Public Overrides Function ToString() As String
        Return Join({Name.PadRight(10, " "c), (Amount.ToString().PadRight(4, " "c) + [Enum].GetName(GetType(Measurements), Measure)).PadRight(10, " "c), GetCalories.ToString.PadLeft(5, " "c)}, vbTab)
    End Function
End Class
Enum Measurments
    Unit = 1
    Tsp = 1
    Tbsp = 3
    Cup = 48
End Enum

现在,如果您有一个名为List(Of Ingredient)的{​​{1}},则Sum方法中的简单lambda将为您提供卡路里总数Ingredients

Ingredients.Sum(Function(x) x.GetCalories)

设置构造函数,以便传递成分的名称,每个度量的卡路里数量以及可选的量和度量。

通过将列表设置为列表框的数据源,列表框将使用ToString覆盖来显示数据,然后显示卡路里总数就很简单了。

这种方法的优点是列表框项实际上是Ingredient对象。因此,更改一种成分的数量很简单,只需将选定项目转换为成分类型并更改数量即可。