我修复了标签,认为 VBA 意味着视觉基础,但我在这个领域很天真。
我不确定我在这里做错了什么..
我想我忘记了附近的输入验证,readfile()
但我不知道如何编码它..当我运行程序时,我得到一个错误,currentrecord(4).
请帮助.. .-。
Module Module1
' IMPUT VARIABLES:
Private ProductNumberInteger As Integer
Private ProductDescriptionString As String
Private WholeSalePriceDecimal As Decimal
Private MarkupCodeInteger As Integer
Private QuantitySoldInteger As Integer
' CALCULATED VARIABLES AFTER PROCESSING:
Private CalculatedMarkupAmountDecimal As Decimal '
Private CalculatedRetailPriceDecimal As Decimal
Private CalculatedDiscountAmountDecimal As Decimal
Private CalculatedDiscountedPriceDecimal As Decimal
Private CalculatedTotalEarnedDecimal As Decimal
Private CalculatedTotalProfitDecimal As Decimal
' ASSIGNED FIELDS:
Private MarkupRateDecimal
Private DiscountPercentRateDecimal
' CONSTANT VARIABLES:
Private MARKUP_CODE_1_DECIMAL As Decimal = 1.05
Private MARKUP_CODE_2_DECIMAL As Decimal = 1.07
Private MARKUP_CODE_3_DECIMAL As Decimal = 1.1
Private MARKUP_CODE_4_DECIMAL As Decimal = 1.2
Private MARKUP_CODE_5_DECIMAL As Decimal = 1.25
Private CurrentRecord() As String
Private TURKEYSALESFILE As New Microsoft.VisualBasic.FileIO.TextFieldParser("THANKSWk44.txt")
' ACCUMULATORS
Private AccumFinalTotalWholesalePriceDecimal As Decimal
Private AccumFinalTotalMarkupAmountDecimal As Decimal
Private AccumFinalTotalProfitDecimal As Decimal
Private AccumFinalTotalNumberOfItemsSoldThisWeekInteger As Integer
' FINAL CALCULATIONS AT EOF:
Private FinalProfitRatioDecimnal As Decimal
Private FinalAverageMarkupDecimal As Decimal
' PAGINATION CODE:
Private PageSizeInteger As Integer = 15
Private LineCounterInteger As Integer = 99
Private PageNumberInteger As Integer = 1
Private RecordSelectedBoolean As Boolean
'--------------------------------------------------------------------------------------------------------------
Sub Main() ' PROGRAM STARTS HERE
Housekeeping()
Do While Not TURKEYSALESFILE.EndOfData
Call ProcessRecords()
Loop
Call EndOfJob() ' PROGRAM ENDS HERE AFTER LOOP. EOJ CHECKS FOR EOF STATUS. 1/1 = EOF
End Sub
'--------------------------------------------------------------------------------------------------------------
' LEVEL TWO PROCESSES
Private Sub Housekeeping()
SetFileDelimiter() ' SETS FILE TYPE AS DELIMITED AND ADDS A COMMA
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub ProcessRecords()
ReadFile()
RecordSelection()
If RecordSelectedBoolean = True Then
DetailCalculations()
AccumulateTotals()
WriteDetailLine()
End If
'--------------------------------------------------------------------------------------------------------------
End Sub
Private Sub EndOfJob() ' PROGRAM END
FinalCalculations()
FinalOutput()
CloseFile()
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub SetFileDelimiter()
TURKEYSALESFILE.TextFieldType = FileIO.FieldType.Delimited
TURKEYSALESFILE.SetDelimiters(",") ' ADDS A COMMA
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub ReadFile() ' READS EACH RECORD IN ORDER
'Try
' TURKEYSALESFILE 'Do something dangerous
'Catch ex As System.Exception 'catch any error
' 'Handle the error here
'End Try
'Try
'Catch
' Console.WriteLine("ERROR")
'End Try
CurrentRecord = TURKEYSALESFILE.ReadFields()
ProductNumberInteger = CurrentRecord(0)
ProductDescriptionString = CurrentRecord(1)
WholeSalePriceDecimal = CurrentRecord(2)
MarkupCodeInteger = CurrentRecord(3)
QuantitySoldInteger = CurrentRecord(4)
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub RecordSelection()
If ProductNumberInteger = 100 - 300 Or ProductNumberInteger = 400 - 500 Or ProductNumberInteger = 600 - 700 Then
RecordSelectedBoolean = True
End If
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub DetailCalculations() ' GENERATES CALCULATIONS THAT IS TO BE APPLIED TO THE DATA SPECIFIED
CalculatedMarkupAmountDecimal = WholeSalePriceDecimal * MarkupRateDecimal
CalculatedRetailPriceDecimal = WholeSalePriceDecimal + CalculatedMarkupAmountDecimal
CalculatedDiscountAmountDecimal = CalculatedRetailPriceDecimal * DiscountPercentRateDecimal
CalculatedDiscountedPriceDecimal = CalculatedRetailPriceDecimal - CalculatedDiscountAmountDecimal
CalculatedTotalEarnedDecimal = CalculatedDiscountedPriceDecimal * QuantitySoldInteger
CalculatedTotalProfitDecimal = CalculatedTotalEarnedDecimal - (QuantitySoldInteger * WholeSalePriceDecimal)
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub DetermineMarkupCode()
Select Case MarkupCodeInteger
Case Is = 1
MarkupCodeInteger = MARKUP_CODE_1_DECIMAL
Case = 2
MarkupCodeInteger = MARKUP_CODE_2_DECIMAL
Case = 3
MarkupCodeInteger = MARKUP_CODE_3_DECIMAL
Case = 4
MarkupCodeInteger = MARKUP_CODE_4_DECIMAL
Case Else
MarkupCodeInteger = MARKUP_CODE_5_DECIMAL
End Select
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub DetermineDiscountAmount()
If QuantitySoldInteger = 0 - 10 Then
DiscountPercentRateDecimal = 1.0
Else
If QuantitySoldInteger = 11 - 25 Then
DiscountPercentRateDecimal = 10.0
Else
If QuantitySoldInteger = 26 - 40 Then
DiscountPercentRateDecimal = 12.5
Else
If QuantitySoldInteger = 41 - 50 Then
DiscountPercentRateDecimal = 20.0
Else
DiscountPercentRateDecimal = 25.5
End If
End If
End If
End If
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub AccumulateTotals()
AccumFinalTotalWholesalePriceDecimal += WholeSalePriceDecimal
AccumFinalTotalMArkupAmountDecimal += CalculatedMarkupAmountDecimal
AccumFinalTotalProfitDecimal += CalculatedTotalProfitDecimal
AccumFinalTotalNumberOfItemsSoldThisWeekInteger += 1
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub WriteDetailLine()
If LineCounterInteger > PageSizeInteger Then
WriteHeaders()
End If
' DETAIL LINE OUTPUT
Console.WriteLine(ProductNumberInteger.ToString().PadRight(3) &
Space(1) & ProductDescriptionString.PadLeft(12) &
Space(1) & WholeSalePriceDecimal.ToString("N").PadLeft(5) &
Space(2) & MarkupCodeInteger.ToString() &
Space(1) & CalculatedMarkupAmountDecimal.ToString("N").PadLeft(5) &
Space(2) & CalculatedRetailPriceDecimal.ToString("N").PadLeft(6) &
Space(1) & DiscountPercentRateDecimal.ToString("n0") &
Space(1) & CalculatedDiscountAmountDecimal.ToString("N").PadLeft(5) &
Space(2) & QuantitySoldInteger.ToString().PadLeft(2) &
Space(2) & CalculatedDiscountedPriceDecimal.ToString("N").PadLeft(6) &
Space(1) & CalculatedTotalEarnedDecimal.ToString("N").PadLeft(8) &
Space(2) & CalculatedTotalProfitDecimal.ToString("N").PadLeft(6))
LineCounterInteger += 1
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub WriteHeaders()
Console.WriteLine("Page" & PageNumberInteger.ToString("n0").PadLeft(3) &
Space(18) & "Sales and Profit Report for")
Console.WriteLine(Space(25) & "Thanks for Thanksgiving, Inc.,")
Console.WriteLine(Space(32) & "by Nathaniel Kulinski")
Console.WriteLine()
Console.WriteLine("Item Desc" &
Space(6) & "WhlSale" &
Space(1) & "-Markup-" &
Space(2) & "Retail" &
Space(1) & "-Discount-" &
Space(1) & "Qty" &
Space(2) & "Discnt" &
Space(4) & "Total")
Console.WriteLine("Num" &
Space(14) & "Price" &
Space(1) & "Code" &
Space(1) & "Amt" &
Space(2) & "Price" &
Space(5) & "%" &
Space(3) & "Amt" &
Space(1) & "Sld" &
Space(3) & "Price" &
Space(3) & "Earned" &
Space(2) & "Profit")
Console.WriteLine()
LineCounterInteger = 1
PageNumberInteger += 1
End Sub
'--------------------------------------------------------------------------------------------------------------
Private Sub FinalCalculations()
FinalProfitRatioDecimnal = AccumFinalTotalProfitDecimal / AccumFinalTotalWholesalePriceDecimal
FinalAverageMarkupDecimal = AccumFinalTotalMarkupAmountDecimal / AccumFinalTotalNumberOfItemsSoldThisWeekInteger
End Sub
Private Sub FinalOutput()
Console.WriteLine()
Console.WriteLine(Space(1) & "FINAL TOTALS:")
Console.WriteLine(Space(5) & "Wholesale Price" &
Space(6) & AccumFinalTotalWholesalePriceDecimal.ToString("C").PadLeft(9))
Console.WriteLine(Space(5) & "Markup Amount" &
Space(8) & AccumFinalTotalMarkupAmountDecimal.ToString("C").PadLeft(9))
Console.WriteLine(Space(5) & "Profit" &
Space(15) & AccumFinalTotalProfitDecimal.ToString("C").PadLeft(9))
Console.WriteLine(Space(5) & "Items Sold" &
Space(12) & AccumFinalTotalNumberOfItemsSoldThisWeekInteger.ToString("N").PadLeft(5))
Console.WriteLine()
Console.WriteLine(Space(5) & "Profit Ratio" &
Space(11) & FinalProfitRatioDecimnal.ToString("C").PadLeft(7))
Console.WriteLine(Space(5) & "Avg Markup Per Item" &
Space(5) & FinalAverageMarkupDecimal.ToString("C").PadLeft(6))
End Sub
Private Sub CloseFile() ' END OF PROGRAM
Console.WriteLine()
Console.WriteLine()
Console.WriteLine()
Console.WriteLine("Press Enter To Close Window") ' PROMPT FOR THE USER TO CLOSE THE PROGRAM
Console.ReadLine()
TURKEYSALESFILE.Close()
End Sub
End Module
我能够让代码输出一些东西,但它不完整。我认为输入文件存在问题(这是一个作业),但我不确定如何解决它。