title: Using arrays in Visual Basic (2010) assignment
body: <p>I'm doing an assignment for my VB class and I'm really having a tough time with it and I'd really appreciate some help, pointers, and/or examples. I don't expect to be just given the exact answer, but similar examples would be very good.</p>
  
  <p>The <code>CSV</code> file has 5 columns each with 25 rows. The main thing is I need to take the last two columns and calculate the markup of the last two rows, both of which are Decimal integers, and put that in the output. In other words, I sort of need to combine the two columns and put the result of the calculation in that column.</p>
  
  <p>Here is the assignment:</p>
  
  <p><strong>Application Title:</strong> Inventory Control</p>
  
  <p><strong>Purpose:</strong></p>
  
  <p>This Windows MDI application allows the user to display the entire inventory and calculate selling prices, or display selected items in inventory with their selling price.</p>
  
  <p><strong>Procedure:</strong></p>
  
  <p>From a main document the user will pick either All or Select from a menu. The appropriate form will display in the MDI window. If the user has chosen all, the inventory items will simply appear, arranged in columns with the selling price in the last column. If the use has chosen Select, a checked list box will appear which will allow the user to select the inventory items she wishes to see. The selected items will then display in columns with the selling price in the last column. The user should then be able to exit the program using the File Exit menu item.</p>
  
  <p><strong>Algorithms, Processing, and Conditions:</strong></p>
  
  <ol>
  <li>The user chooses the how they want to display the inventory from the Display menu</li>
  <li>The appropriate form is loaded into the MDI</li>
  <li>The program reads the data from a file</li>
  <li>The program calculates the selling price by multiplying the cost times 1 plus the markup percentage.</li>
  <li>The program formats the heading and the detail lines and displays the information in columns in a list box.</li>
  </ol>
  
  <p><strong>Program requirements:</strong></p>
  
  <ol>
  <li>Must use a multiple document interface</li>
  <li>Must use a class for the inventory items</li>
  <li>Must use a menu on the Parent MDI form</li>
  <li>Must use at least 1 array OTHER than the strRec array that you use when you read in the records.</li>
  <li>May use an arraylist and lists to process the data.</li>
  </ol>
  
  <p>And here is the code I have so far:</p>
  
  <pre><code>Public Class frmMain
  
  Private Sub mnuFileExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFileExit.Click 
      'Close the program
      Me.Close()
  End Sub
  
  Private Sub mnuHelpAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuHelpAbout.Click
      'Simple help box
      MessageBox.Show("Inventory control program. Version 1.0")
  End Sub
  
  
  Private Sub mnuInvenListAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuInvenListAll.Click
      'Create the child form the form
      Dim mdiChild1 As New frmAll
      'Set form as parent.
      mdiChild1.MdiParent = Me
      'display the form as Show
      mdiChild1.Show()
  End Sub
  
  Private Sub mnuInvenSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuInvenSelect.Click
      'Create the child for the form
      Dim mdiChild2 As New frmSelect
      'Set form as parent.
      mdiChild2.MdiParent = Me
      'display the form as Show
      mdiChild2.Show()
  End Sub
  
  Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Me.LayoutMdi(MdiLayout.TileHorizontal)
  End Sub
  
  End Class
  
  
  =-=-=-=-=
  
  
  Imports System.IO
  Imports System.Convert
  
  Public Class frmAll
  'Declare Streamreader
  Private objReader As StreamReader
  
  
  'Declare arrays to hold the information
  Private strNumber(24) As String
  Private strName(24) As String
  Private strSize(24) As String
  
  
  Private Sub frmAll_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  
      'Set objReader
      objReader = New StreamReader("products.csv")
      Call FillArray()
  End Sub
  
  Private Sub FillArray()
      'Declare variables and arrays
  
      Dim decCost(24, 1) As Decimal
      Dim strFields() As String
      Dim strRec As String
      Dim intCount As Integer = 0
      Dim chrdelim As Char = ToChar(",")
      'Set strRec to read the lines
  
      strRec = objReader.ReadLine
  
      'Do while loop to fill array.
      Do While strRec &lt;&gt; Nothing
          strFields = strRec.Split(chrdelim)
          strNumber(intCount) = strFields(0)
          strName(intCount) = strFields(1)
          strSize(intCount) = strFields(2)
          decCost(intCount, 0) = ToDecimal(strFields(3))
          decCost(intCount, 1) = ToDecimal(strFields(4))
          'Set strRec to read the lines again
          strRec = objReader.ReadLine
          'increment the index
          intCount += 1
      Loop
      Call Calculate(decCost)
  End Sub
  
  Private Sub Calculate(ByVal numIn(,) As Decimal)
      'Define arrays to hold total cost
      Dim decRowTotal(24) As Decimal
  
      'Define variables to hold the counters for rows and columns
      Dim intR As Integer
      Dim intC As Integer
  
      'Calcualte total cost
      For intC = 0 To numIn.Length
          For intR = 0 To decRowTotal.Length
              decRowTotal(intR) += numIn(intR, intC) * 1
          Next
      Next
  
      Call Output(numIn, decRowTotal)
  
  End Sub
  
  Private Sub Output(ByVal NumIn(,) As Decimal, ByVal RowTotalIn() As Decimal)
      Dim strOut As String
  
      Dim intR As Integer = 0
      Dim intC As Integer = 0
  
      strOut = "ID" &amp; vbTab &amp; "Item" &amp; vbTab &amp; "Size" &amp; vbTab &amp; "Total Price" &amp; vbCrLf &amp; vbCrLf
  
      For intR = 0 To 24
          strOut &amp;= strNumber(intC) &amp; vbTab
          strOut &amp;= strName(intC) &amp; vbTab
          strOut &amp;= strSize(intC) &amp; vbTab
  
          For intC = 0 To 1
              strOut &amp;= NumIn(intR, intC).ToString
          Next
  
          strOut &amp;= vbTab &amp; RowTotalIn(intR) &amp; vbCrLf
      Next
  
      rtbAll.Text = strOut
  
  End Sub
  
  End Class
  
  
  -=-=-=-=-=
  
  
  'Imports
  Imports System.IO
  Imports System.Convert
  
  Public Class InventoryItems
  
  'Declare ItemList Array
  Private ItemList As New ArrayList
  'IItem declared as new Object.
  Private IItem As New Object
  
  Public Function Reader() As ArrayList
      'Declare variables for reading the file.
      Dim chrDelim As Char = Convert.ToChar(",")
      Dim strRec As String
      Dim strFields() As String
      Dim objReader As StreamReader
      objReader = New StreamReader("products.csv")
      strRec = objReader.ReadLine
      'Declares a new instance of the InvenItems class
      'and stores each of the items in their own instance
      'of the class
      Do While strRec &lt;&gt; Nothing
          IItem = New InvenItems
          strFields = strRec.Split(chrDelim)
          IItem.Number = strFields(0)
          IItem.Name = strFields(1)
          IItem.Size = strFields(2)
          IItem.Price = ToDecimal(strFields(3))
          IItem.MarkUp = ToDecimal(strFields(4))
          ItemList.Add(IItem)
          strRec = objReader.ReadLine
      Loop
  
      Return ItemList
  End Function
  
  Public Class InvenItems
      'Declare class variables.
      Private strNumber As String
      Private strName As String
      Private strSize As String
      Private decCost As Decimal
      Private decMarkUp As Decimal
      'Create constructor
      Public Sub New()
  
      End Sub
      'Create override function
      Public Overrides Function ToString() As String
          Return strNumber
      End Function
      'Create property for Number.
      Public Property Number As String
          Set(ByVal value As String)
              strNumber = value
          End Set
          Get
              Return strNumber
          End Get
      End Property
      'Create property for Name.
      Public Property Name As String
          Set(ByVal value As String)
              strName = value
          End Set
          Get
              Return strName
          End Get
      End Property
      'Create property for size.
      Public Property Size As String
          Set(ByVal value As String)
              strSize = value
          End Set
          Get
              Return strSize
          End Get
      End Property
      'Create property for cost.
      Public Property Cost As Decimal
          Set(ByVal value As Decimal)
              decCost = value
          End Set
          Get
              Return decCost
          End Get
      End Property
  
      Public Property MarkUp As Decimal
          Set(ByVal value As Decimal)
              decMarkUp = value
          End Set
          Get
              Return decMarkUp
          End Get
      End Property
  
  End Class
  
  End Class
  </code></pre>
  
  <p>Thanks for any pointers, advice, and examples. </p>