现在,在我开始之前,我知道这不是执行此计划的最有效方式,它适用于学校。
该项目应该通过输入商品的数量和每件商品的价格来计算客户的欠款。所以说有 2 个项目,每个项目 2.50。到期总数现在是 5,接下来是 3.00 的一项,现在到期总数是 8。
这通常只需声明变量就很容易,可能使用函数、结构或类。
我遇到的问题是该项目需要使用结构数组(因此涵盖使用数组和结构)以及类。
当我与我的导师交谈时,他给了我一个示例,说明如何在另一个场景中使用数组,基本上是在没有任何内容的情况下启动数组,并允许程序在循环中检查 UPC。我使用了这个想法并为产品名称添加了一个文本框,所以如果它匹配(假设添加了第三个项目并且与第一个项目相同),那么它只是将数量添加到数组中的现有条目中。理论上,应付总额同样简单,因为它可以计算数量和价格并将其添加到总额中。
我没有编写按钮来清除所有变量“新顺序”,因为这很容易。
我自己也彻底糊涂了,我觉得由于完成如此简单的任务的程序不必要的复杂性,但这是我的主程序:
Public Class FrmMain
Dim order(-1) As product
Public totalDue As Decimal
Structure product
Public Quantity As Long
Public Price As Decimal
Public productName As String
End Structure
Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
Me.Close()
End Sub
Private Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdd.Click
' adds the total price to the amount the customer owes
Dim book As New BookSale
Dim Quantity As Long
Dim Price As Decimal
Long.TryParse(txtQuantity.Text, Quantity)
Decimal.TryParse(txtPrice.Text, Price)
'when a user adds an item by id (could be UPC)...... This could be a click event
'boolean to declare if item was found
Dim bolFound As Boolean = False
'upc number of product
Dim strProduct As String = txtProduct.Text
'loop through array to see if product has already been added, if so, just update quantity
For i As Integer = 0 To order.Length - 1
If order(i).productName = strProduct Then
Quantity += numQuantity.value
bolFound = True
Exit For
End If
Next i
'if product was not found, add it to the array
If bolFound = False Then
'never found, add the new item
ReDim Preserve order(order.Length)
With order(order.Length - 1)
ProductName = txtProduct.Text
Price = numPrice.value
Quantity = numQuantity.value
End With
End If
totalDue = book.TotalDueTotal
lblTotalDue.Text = totalDue.ToString("N0")
End Sub
End Class
然后这里是“bookSale”类
Public Class BookSale
Private _Quantity As Integer
Private _Price As Decimal
Public Property TotalDue As Integer
Get
Return _Quantity
End Get
Set(ByVal value As Integer)
If value > 0 Then
_Quantity = value
Else
_Quantity = 0
End If
End Set
End Property
Public Property Price As Decimal
Get
Return _Price
End Get
Set(ByVal value As Decimal)
If value > 0 Then
_Price = value
Else
_Price = 0
End If
End Set
End Property
Public Sub New()
' default constructor
_Quantity = 0
_Price = 0
End Sub
Public Function TotalDueCalc() As Decimal
Return _Price * _Quantity
End Function
Public Function TotalDueTotal() As Decimal
Dim FinalTotal As Decimal
Return FinalTotal + TotalDueCalc()
End Function
End Class
到目前为止收到的错误是错误 3 'numPrice' 未声明。由于其保护级别,它可能无法访问。错误 1 'numQuantity' 未声明。由于其保护级别,它可能无法访问。错误 4 'numQuantity' 未声明。由于其保护级别,它可能无法访问。错误 2 属性“产品名称”是“只读”。
任何帮助将不胜感激。
PS 我知道有些东西可能会丢失,比如将变量传递给班级,但我已经玩了大约 3 个小时,试图让它做我想做的事情,我只是让自己太困惑了。另外,是的,我处于编程的相对初学者水平,这是我的第一个真正的编程课程,讲师说我们应该在课程的第二部分学习如何更好地做到这一点,处理 VB 的更高级方面。
再次感谢!