Vb.net Visual Basic电影程序

Vb.net Visual Basic电影程序,vb.net,Vb.net,我在课堂上编写的这个VB程序有一个奇怪的问题。老实说,我不完全确定我为什么会遇到这个问题,因为我已经轻松地完成了与此相对类似的其他任务。这个程序的设计目的是让我可以从商店(左边的列表框)向购物车(右边的列表框)添加某些电影。你可以看到我添加了两次蜘蛛侠(因为谁不喜欢蜘蛛侠?),每次它都正确地显示了名称和2美元。但是,每次我将电影添加到框中时,底部的第一个标签框应该是累积的,但它在我选择的第一部电影中保持不变。如果我选择其他任何一部更贵的电影,它仍然会停留在我选择的第一部电影 编辑:我应该补充一下

我在课堂上编写的这个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