在我正在为我的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
另外,这是一个我可以使用数据集的实例吗?我以前从未使用它们,所以不知道它是如何工作的,但是如果它可以使这更简单,那么我就是哈哈。
答案 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对象。因此,更改一种成分的数量很简单,只需将选定项目转换为成分类型并更改数量即可。