Застрял в реализации объектов класса, циклов и рекурсии - PullRequest
0 голосов
/ 07 ноября 2018

Я выполнял некоторые оценочные нормы для моей проектной работы. У меня есть Нормы и их детали, а также детали норм содержат поднормы и детали их норм.

Ниже приводится Норма Класса, которая содержит детали Нормы..

Public Class Norm
  Public mNorm_id As String
  Public mGroup_id As String
  Public mActivity_id As String
  Public mShortDesc As String
  Public mFullDesc As String
  Public mAnalysisUnit As String
  Public mSpecs As String
  Public mNormDetails As List(Of NormDetail)
End Class

Примечание: mNormDetails инициализируются и вставляются при первой инициализации класса Norm.

Public Class NormDetail
  Public mNorms_id As String
  Public mActivity_id As String
  Public mInputQuantity As Double
  Public mInputCode As String
  Public mInputAppliesTo As String
End Class

Класс Norm содержит описание нормы и список подробностей нормы.(Это было бы ясно с приложенным листом Excel).Детали самой нормы тоже могут содержать норму.Мне нужно обрабатывать детали нормы и нормы одновременно, и если детали нормы содержат нормы, то мне снова нужно обработать норму и детали нормы, которые она содержит.

Вот класс BoqInfo, где у меня возникли проблемы.

Public Class clsBoqInfo
Public mActivityid As String
Public mNormid As String

Public mnormQuantity As String
Public mBoqQuantity As Double

Public mainnorm As Norm 'MainNorm
Public mnormdesc As String
Public normQty As Double = 1.0

Public  mBoqDetails As New List(Of BoqDetail)

Public Sub New(ByVal NormId As String, ByVal ActivityId As String, ByVal boqQuantity As Double)
    mNormid = NormId
    mActivityid = ActivityId
    mainnorm = New Norm(NormId, ActivityId)
    mnormdesc = mainnorm.ShortDesc
    mnormQuantity = mainnorm.AnalysisQuantity 'Main norm Analysis Quantity
    mBoqQuantity = boqQuantity
End Sub

Public Sub Analyze()
    TryAddBoqDetail()
End Sub

Private Sub TryAddBoqDetail(Optional normx As Norm = Nothing)
    normQty = mainnorm.NormDetails(0).InputQuantity
    If normx IsNot Nothing Then
        mainnorm = normx
    End If

    Dim normDetails As New List(Of NormDetail)
    normDetails = mainnorm.NormDetails

    For Each normd As NormDetail In normDetails
        Dim objboqdetail As BoqDetail = Nothing

        Dim inputcode As String = normd.InputCode.Trim
        Dim Identifier As String = Mid(inputcode, 1, 1)

        inQuantity = normd.InputQuantity
        Select Case Identifier
            Case "L", "M", "F", "E" 'Labour,Material,Fitting,Equipment
                objboqdetail = New BoqDetail With {
                    .activityid = mainnorm.Activity_id,
                    .normid = mainnorm.Norm_id,
                    .normdesc = mainnorm.ShortDesc,
                    .itemcode = inputcode,
                    .quantity = mBoqQuantity * normQty * inQuantity / Me.Quantity,
                    .rate = Project.getRate(inputcode)
                }
            Case "N" 'Norms Item
                Dim childnormidentifier As String = Mid(inputcode, 2)
                Dim newnorm As Norm = New Norm("N-102", childnormidentifier)
                TryAddBoqDetail(newnorm)
        End Select
        If objboqdetail IsNot Nothing Then
            mBoqDetails.Add(objboqdetail)
        End If
    Next
End Sub

в методе TryAddBoqDetail, мне нужно получить норму ввода норм для детали и обработать ее детали.Как решить эту проблему, пожалуйста, помогите. Лист Excel, объясняющий проблему

Решено с помощью.'Private Sub AddBoqDetail (Необязательный normx As clsBoqInfo = Nothing) Если normx IsNot Nothing, то mainnorm = normx.mainnorm mnormAnalysisQuantity = mainnorm.Dim objboqdetail As BoqDetail = Nothing Dim inputcode As String = normd.InputCode.Trim Dim Identifier As String = Mid (inputcode, 1, 1) inQuantity = normd.InputQuantity Выбрать регистр идентификатора Case "L", "M", "F","E" 'Труд, Материал, Подгонка, Оборудование objboqdetail = Новый BoqDetail С {.activityid = mainnorm.Activity_id, .normid = mainnorm.Norm_id, .normdesc = mainnorm.ShortDesc, .itemcode = inputcode, .quantity = mBoqQuantity * norminQuantity / Me.Quantity, .rate = Project.getRate (inputcode)} Регистр "N" 'Элемент Dim Элемент Dim childnormidentifier As String = Mid (inputcode, 2) normQty = normd.InputQuantity Dim newnorm As clsBoqInfo = Новый clsBoqInfo ("N-102 ", childnormidentifier, mBoqQuantity) AddBoqDetail (newnorm) End Select, если objboqdetail IsNot Nothing, затем mBoqDetails.Add (objboqdetail) End If Next End Sub '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...