Module Module1
'input vars declarations
Private DescriptionString As String
Private StockNumberString As String
Private WholesalePriceDecimal As Decimal
Private QuantityOHDecimal As Decimal
'CONSTANT VAR
Private Const PROFIT_PERCENT_DECIMAL As Decimal = 0.25
'calculated vars declarations
Private InvValueDecimal As Decimal 'this is WholesalePrice * QOH
Private PotentialProfit As Decimal 'this is InvValue * PROFIT_PERCENT
Private PotentialIncome As Decimal 'this is InvValue + PotentialProfit
'declares the record variable and associates file name
Private CurrentRecord()
Private FurnitureInventoryFile As New FileIO.TextFieldParser("FURNFILE.TXT")
'Main module is Level 1
Sub Main()
'L1 calls L2
Call Housekeeping()
Do While Not FurnitureInventoryFile.EndOfData
Call ProcessRecords()
Loop
Call EndOfJob()
End Sub
'L2 Housekeeping() calls L3 SetFileDelimiter() and L3 WriteHeadings()
Private Sub Housekeeping()
Call SetFileDelimiter()
Call WriteHeadings()
End Sub
'L2 ProcessRecords() calls L3 ReadFile(), L3 DetailCalculations() and L3 WriteDetailLine()
Private Sub ProcessRecords()
Call ReadFile()
Call DetailCalculations()
Call WriteDetailLine()
End Sub
'L2 EndOfJob() calls L3 SummaryOutput() and L3 CloseFile()
Private Sub EndOfJob()
Call SummaryOutput()
Call CloseFile()
End Sub
'L3, Called by Housekeeping(), Assigns filetype as delimited and assigns the delimiter as a comma
Private Sub SetFileDelimiter()
FurnitureInventoryFile.TextFieldType = FileIO.FieldType.Delimited
FurnitureInventoryFile.SetDelimiters(",")
End Sub
'L3, Called by Housekeeping(), Writes the report heading and column heading lines
Private Sub WriteHeadings()
'Report Headings
Console.WriteLine(Space(17) & "Inventory Report for Quality Furniture Store")
Console.WriteLine(Space(28) & "Christian VanderHorst")
'2 Blank lines
Console.WriteLine()
Console.WriteLine()
'Column Headings
Console.WriteLine(Space(22) & "Stock" & Space(8) & "Wholesale" & Space(2) & "Inventory" & Space(2) & "Potential" & Space(3) & "Potential")
Console.WriteLine(Space(1) & "Description" & Space(10) & "Number" & Space(2) & "QOH" & Space(6) & "Price" & Space(6) & "Value" & Space(5) & "Profit" & Space(6) & "Income")
End Sub
'L3, Called by ProcessRecords(), Reads the file and parses the current record into its vars
Private Sub ReadFile()
CurrentRecord = FurnitureInventoryFile.ReadFields() 'reads the record
StockNumberString = CurrentRecord(0)
DescriptionString = CurrentRecord(1)
WholesalePriceDecimal = CurrentRecord(2)
QuantityOHDecimal = CurrentRecord(3)
End Sub
'L3, Calculates InvValueDecimal, PotentialProfitDecimal and PotentialIncomeDecimal
Private Sub DetailCalculations()
InvValueDecimal = WholesalePriceDecimal * QuantityOHDecimal
PotentialProfit = InvValueDecimal * PROFIT_PERCENT_DECIMAL
PotentialIncome = InvValueDecimal + PotentialProfit
End Sub
'L3, Writes the detail lines
Private Sub WriteDetailLine()
Console.WriteLine(Space(1) & DescriptionString.PadRight(19) &
Space(2) & StockNumberString &
Space(4) & QuantityOHDecimal.ToString("N0").PadLeft(2) &
Space(3) & WholesalePriceDecimal.ToString("N").PadLeft(8) &
Space(2) & InvValueDecimal.ToString("N").PadLeft(9) &
Space(5) & PotentialProfit.ToString("N").PadLeft(5) &
Space(2) & PotentialIncome.ToString("C").PadLeft(10))
End Sub
'L3, Writes the summary line and pauses program to wait for enter keystroke
Private Sub SummaryOutput()
'Blank space to move the summary line down
Console.WriteLine()
Console.WriteLine()
'the summary line
Console.WriteLine(Space(24) & "End of Furniture Profit Report")
'prompt to tell the user how to close the report
Console.WriteLine()
Console.WriteLine()
Console.WriteLine("Press ENTER to close the report")
Console.ReadLine()
End Sub
'L3, Closes the input file
Private Sub CloseFile()
FurnitureInventoryFile.Close()
End Sub
エンドモジュール未処理の例外 "System.IndexOutOfRangeException"
これは、作成した完全なコードアイブです。それはすべて正常に動作します、しかし、3つの詳細行を出力した後、それは型「System.IndexOutOfRangeException」の未処理の例外がMy_Name.InvReportFurniture.exe
で発生しました追加情報
を思い付く:インデックス外でした配列の境界。
とステートメントソース
として
QuantityOHDecimal = CurrentRecord(3)
を指定し、私はそれの原因が何であるかを把握するように見える傾けます。すべての細部行の書込みの間に休止を置くと、それは3番目の細部行の後にその例外を投げるのと同じように起こります。
ここにデータファイルがあります。
ET010,3引き出しエンドテーブル、169.00、10
ET020,4引き出しエンドテーブル、299.95、05
ET030,8引き出しエンドテーブル、148.99、12
ST010、スタッキング表325.50、20
BC020,4シェルフブックケース、130.99、24
BC030,5シェルフブックケース、199.95、08
BC040,6シェルフブックケース、270.99、15
LC010、ラウンジチェア、198.89、20
VC010、ウィングバック議長、320.55,05
LC011、Pleatherリクライニングチェア、1050.00、02
FC010、ファブリックリクライニングチェア、755.00、04
VC015、革リクライニングチェア、500.01、10
BS010、ブックスタンド、235.80、05
LS010、ランプは135.23、スタンド、15
PS010、電話スタンド、99.95、19
TS010、テレビ台、270.90、08
SS010、ステレオ台、675.00、15
TS015、ティファニー1115.35、スタンド、02
'Option Strict On'を設定する必要があります。また、クラスとコレクションはコードを大幅に簡略化します – Plutonix