Vb.net Visual Basic电影程序
我在课堂上编写的这个VB程序有一个奇怪的问题。老实说,我不完全确定我为什么会遇到这个问题,因为我已经轻松地完成了与此相对类似的其他任务。这个程序的设计目的是让我可以从商店(左边的列表框)向购物车(右边的列表框)添加某些电影。你可以看到我添加了两次蜘蛛侠(因为谁不喜欢蜘蛛侠?),每次它都正确地显示了名称和2美元。但是,每次我将电影添加到框中时,底部的第一个标签框应该是累积的,但它在我选择的第一部电影中保持不变。如果我选择其他任何一部更贵的电影,它仍然会停留在我选择的第一部电影 编辑:我应该补充一下,在我将代码的某些部分移动到各自的函数中之前,我也遇到了同样的问题 公共类主窗体Vb.net Visual Basic电影程序,vb.net,Vb.net,我在课堂上编写的这个VB程序有一个奇怪的问题。老实说,我不完全确定我为什么会遇到这个问题,因为我已经轻松地完成了与此相对类似的其他任务。这个程序的设计目的是让我可以从商店(左边的列表框)向购物车(右边的列表框)添加某些电影。你可以看到我添加了两次蜘蛛侠(因为谁不喜欢蜘蛛侠?),每次它都正确地显示了名称和2美元。但是,每次我将电影添加到框中时,底部的第一个标签框应该是累积的,但它在我选择的第一部电影中保持不变。如果我选择其他任何一部更贵的电影,它仍然会停留在我选择的第一部电影 编辑:我应该补充一下
Public strMovies() As String =
{"Spider-Man", "Daredevil", "Hulk", "The Punisher", "Spider-Man 2",
"Fantastic Four", "Spider-Man 3", "Iron Man", "The Amazing Spider-Man", "The Wolverine"}
Public intMoviePrices() As Integer =
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
Dim X As Integer
Dim Y As Integer
Dim moviecost As Integer
Dim movietax As Double
Dim numberdvds As Integer
Dim shippingcharge As Double
Dim netcost As Double
Dim movieChoice As String
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstCom.SelectedIndexChanged
End Sub
Public Function calculateTotals(movieChoice) As Integer
moviecost = moviecost + intMoviePrices(movieChoice)
movietax = (moviecost * 1.04) - moviecost
If numberdvds >= 5 Then
shippingcharge = 5
Else
shippingcharge = numberdvds
End If
netcost = movietax + moviecost + shippingcharge
lblgrosscost.Text = moviecost
lblsalestax.Text = FormatNumber(movietax, 2)
lblshipping.Text = shippingcharge
lblnetcost.Text = netcost
Return moviecost
Return movietax
End Function
Public Function addMovie() As String
movieChoice = lstCom.SelectedIndex
For X = LBound(strMovies) To UBound(strMovies)
If lstCom.SelectedIndex = X Then
lstCom2.Items.Add(strMovies(X) & " $" + intMoviePrices(movieChoice).ToString)
numberdvds += 1
Call calculateTotals(movieChoice)
End If
Next
End Function
Public Function removeMovie() As String
For X = LBound(strMovies) To UBound(strMovies)
If lstCom2.SelectedIndex = X Then
lstCom2.Items.Remove(lstCom2.SelectedItem)
numberdvds -= 1
Call calculateTotals(movieChoice)
End If
Next
End Function
Private Sub mainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lstCom.Items.Add("Spider-Man")
lstCom.Items.Add("Daredevil")
lstCom.Items.Add("Hulk")
lstCom.Items.Add("The Punisher")
lstCom.Items.Add("Spider-Man 2")
lstCom.Items.Add("Fantastic Four")
lstCom.Items.Add("Spider-Man 3")
lstCom.Items.Add("Iron Man")
lstCom.Items.Add("The Amazing Spider-Man")
lstCom.Items.Add("The Wolverine")
lstCom.SelectedIndex = 0
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Call addMovie()
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
End Sub
Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
Call removeMovie()
End Sub
End Class您每次计算时都会重置电影成本,因为它仅与该函数相关 动议如下:
Dim moviecost As Integer
除了快速修复功能之外,但为了正确地执行,我会将它放在那里,每次都从篮子中计算,我这样做的原因是,如果你从购物车中移除一些东西,你就不会移除价格。每次更改时,最好根据购物车内容进行动态计算
此外,您还可以替换所有这些:
If lstCom.SelectedIndex = 0 Then
lstCom2.Items.Add ("Spider-Man " + "$" + intMoviePrices(movieChoice).ToString)
Call calculateTotals(movieChoice)
ElseIf lstCom.SelectedIndex = 1 Then
lstCom2.Items.Add ("Daredevil " + "$" + intMoviePrices(movieChoice).ToString)
ElseIf lstCom.SelectedIndex = 2 Then
lstCom2.Items.Add ("Hulk " + "$" + intMoviePrices(movieChoice).ToString)
ElseIf lstCom.SelectedIndex = 3 Then
lstCom2.Items.Add ("The Punisher " + "$" + intMoviePrices(movieChoice).ToString)
ElseIf lstCom.SelectedIndex = 4 Then
lstCom2.Items.Add ("Spider-Man 2 " + "$" + intMoviePrices(movieChoice).ToString)
ElseIf lstCom.SelectedIndex = 5 Then
lstCom2.Items.Add ("Fantastic Four " + "$" + intMoviePrices(movieChoice).ToString)
ElseIf lstCom.SelectedIndex = 6 Then
lstCom2.Items.Add ("Spider-Man 3 " + "$" + intMoviePrices(movieChoice).ToString)
ElseIf lstCom.SelectedIndex = 7 Then
lstCom2.Items.Add ("Iron Man " + "$" + intMoviePrices(movieChoice).ToString)
ElseIf lstCom.SelectedIndex = 8 Then
lstCom2.Items.Add ("The Amazing Spider-Man " + "$" + intMoviePrices(movieChoice).ToString)
ElseIf lstCom.SelectedIndex = 9 Then
lstCom2.Items.Add ("The Wolverine " + "$" + intMoviePrices(movieChoice).ToString)
End If
为此:
For X = LBound(strMovies) To UBound(strMovies)
If lstCom.SelectedIndex = X Then
lstCom2.Items.Add (strMovies(X) & " $" + intMoviePrices(movieChoice).ToString)
Call calculateTotals(movieChoice)
End If
Next
然后将其放在该函数的顶部:
Dim X As Integer
添加另一个答案,因为这是第二个问题。我已经修改了你的代码,但无法测试,因为我没有这个项目 请查收并报告。请注意,您需要在removeMovie例程中加入一些智能来计算成本和税费,请参阅我对addMovie函数所做的操作,以了解更多信息 CalculateTotals例程基本上只是格式化和发布数据,实际数字是在添加/删除数据时计算出来的。我已经删除了传递给它的MovieChoice变量,因为它不再相关
Public strMovies() As String =
{"Spider-Man", "Daredevil", "Hulk", "The Punisher", "Spider-Man 2",
"Fantastic Four", "Spider-Man 3", "Iron Man", "The Amazing Spider-Man", "The Wolverine"}
Public intMoviePrices() As Integer =
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
Dim X As Integer
Dim Y As Integer
Dim moviecost As Integer
Dim movietax As Double
Dim numberdvds As Integer
Dim shippingcharge As Double
Dim netcost As Double
Dim movieChoice As String
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstCom.SelectedIndexChanged
End Sub
Public Function calculateTotals() As Integer
If numberdvds > 4 Then
shippingcharge = 5
Else
shippingcharge = numberdvds
End If
netcost = movietax + moviecost + shippingcharge
lblgrosscost.Text = moviecost
lblsalestax.Text = FormatNumber(movietax, 2)
lblshipping.Text = shippingcharge
lblnetcost.Text = netcost
End Function
Public Function addMovie() As String
movieChoice = lstCom.SelectedIndex
moviecost = moviecost + intMoviePrices(movieChoice)
movietax = movietax + (intMoviePrices(movieChoice) * 0.04)
For X = LBound(strMovies) To UBound(strMovies)
If lstCom.SelectedIndex = X Then
lstCom2.Items.Add (strMovies(X) & " $" + intMoviePrices(movieChoice).ToString)
numberdvds = numberdvds + 1
Call calculateTotals()
End If
Next
End Function
Public Function removeMovie() As String
'Need to add code to remove cost and tax here
For X = LBound(strMovies) To UBound(strMovies)
If lstCom2.SelectedIndex = X Then
lstCom2.Items.Remove (lstCom2.SelectedItem)
numberdvds = numberdvds - 1
Call calculateTotals()
End If
Next
End Function
Private Sub mainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For X = LBound(strMovies) To UBound(strMovies)
lstCom.Items.Add (strMovies(X))
Next
End Function
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Call addMovie
End Function
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
End Function
Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
Call removeMovie
End Function
你可能想将你的标签从VBA改为VB.Net或你正在使用的Visual Basic衍生工具,这不是VBA表单:)。@Dan Donoghue它可能只是在类固醇上……谢谢你,Dan,这可能就是为什么我会被否决,或者因为这是一个愚蠢的问题。我很感激你的帮助,我现在正在玩弄你的答案!在
addMovie
中,您需要将调用移动到IF块之外的calculateTotals(movieChoice)
。目前你所有的电影都是免费的,除了蜘蛛-Man@Baby你说那样的话应该受到惩罚!我可以请教一下从篮子里计算的最佳方法吗?你的推理对我来说很有道理。实际上,你可以节省一些时间。1) 使MovieCost成为模块级变量(将其移到任何函数或子函数之外)2)添加电影时执行以下操作:MovieCost=MovieCost+intMoviePrices(movieChoice)3)删除电影时执行以下操作:MovieCost=MovieCost-intMoviePrices(movieChoice)。应该为您解决所有问题。最后,当您更改MovieCostal时,请始终执行此lblgrosscost.Text=moviecost,以便在我的回答中检查我的编辑。我为你砍下了那个巨大的if,太棒了。实际上我已经有了节省时间的想法,但是现在我担心的是,当我用这个来计算税收、运费和净总额时,如果我删除任何东西,它会真的被搞砸。或者在每次删除后调用计算仍然可以?至于你的编辑,非常感谢。不用担心,随时乐意帮忙。有了你的税,你的想法是正确的,每次你更新moviecost时都要计算它,当你从moviecost中添加或删除时,你将能够计算出要从税中添加或删除的内容,记住你还需要模块级别的税变量。你是我的英雄。我不仅理解了你的变化,而且我能够操纵你所做的事情,完成我想要的,并完成项目。我非常感谢你的时间@卡林·麦克格拉斯:你可以问他的银行账户号码,或者是地址来邮寄一打啤酒:D