Vb.net期刊计划问题

时间:2012-07-10 20:12:31

标签: vb.net arrays data-structures streamreader streamwriter

好的,对于一个实习项目,我正在制作一个包含汇流和流媒体的期刊。

我必须在哪里创建一个名称,用户名和密码的帐户。我也有它在创建帐户时在该人员名称中创建txt文件的位置。现在,他们登录并将它们带到日志页面。期刊页面大部分都有日记帐分录日期,期刊标题和日记帐分录文本本身。

我遇到的问题是,当您单击按钮创建/编辑日记帐分录时,它会通过一个子例程来检查该日记是否存在(意味着该日期已经存在)。如果它不存在,那么它应该在文本文件的底部创建一个新的。如果它确实存在,那么它应该编辑该日志驻留在文本文件中的行。

代码:

Private Sub CreateBtn_Click(sender As System.Object, e As System.EventArgs) Handles CreateBtn.Click

    Errors = ""

    Dim TempCounter As Integer = 0

    If TitleTxt.Text = "" Then

        Errors = "You must enter a title." & vbCrLf

    End If


    If JournalTextRtxt.Text = "" Then

        Errors &= "You must enter an entry for the journal."

    End If

    If Errors <> "" Then

        MessageBox.Show("There's an error in creating/editing your journal." & vbCrLf & "Error(s):" & vbCrLf & Errors, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

    Else

        JournalDate = DateTimePicker1.Value
        JournalTitle = TitleTxt.Text
        JournalText = JournalTextRtxt.Text

        arrJournalEntries(TempCounter).TheDate = JournalDate
        arrJournalEntries(TempCounter).Title = JournalTitle
        arrJournalEntries(TempCounter).JournalEntry = JournalText



        CheckAndWrite()

    End If

End Sub

Private Sub CheckAndWrite()

    Dim Reader As New StreamReader(MyName & ".txt", False)
    Dim Sline As String = Reader.ReadLine

    Counter = 0

    Do Until (Sline Is Nothing) 'Perform the code until the line in the text file is blank

        If Not Sline Is Nothing Then 'If the line in the text file is NOT blank then

            For i As Integer = 1 To 3

                Select Case i

                    Case 1

                        arrJournalEntries(Counter).TheDate = Sline
                        Sline = Reader.ReadLine


                    Case 2

                        arrJournalEntries(Counter).Title = Sline
                        Sline = Reader.ReadLine

                    Case 3

                        arrJournalEntries(Counter).JournalEntry = Sline
                        Sline = Reader.ReadLine

                End Select

            Next
        End If

        JournalDate = arrJournalEntries(Counter).TheDate

        Time = DateTimePicker1.Value

        MsgBox("Journal Date = " & JournalDate & vbCrLf & "Today's Date = " & Time)


        If Time = JournalDate Then

            JournalFound = True

        Else

            Counter += 1

            JournalFound = False

        End If

    Loop


    Reader.Close()

    Try

        If Sline Is Nothing Or JournalFound = False Then

            MsgBox("Your journal is now going to be created.")

            JournalDate = DateTimePicker1.Value
            JournalTitle = TitleTxt.Text
            JournalText = JournalTextRtxt.Text

            arrJournalEntries(Counter).TheDate = JournalDate
            arrJournalEntries(Counter).Title = JournalTitle
            arrJournalEntries(Counter).JournalEntry = JournalText

            Dim Writer As New StreamWriter(MyName & ".txt", True)

            Do Until (arrJournalEntries(Counter).TheDate = Nothing)

                Writer.WriteLine(arrJournalEntries(Counter).TheDate)
                Writer.WriteLine(arrJournalEntries(Counter).Title)
                Writer.WriteLine(arrJournalEntries(Counter).JournalEntry)


                Counter += 1

            Loop

            Writer.Close()


        End If

        If JournalFound = True Then

            MsgBox("Your journal is now going to be edited.")

            JournalDate = DateTimePicker1.Value
            JournalTitle = TitleTxt.Text
            JournalText = JournalTextRtxt.Text


            arrJournalEntries(Counter).TheDate = JournalDate
            arrJournalEntries(Counter).Title = JournalTitle
            arrJournalEntries(Counter).JournalEntry = JournalText


            Dim Writer As New StreamWriter(MyName & ".txt", True)

            Do Until (arrJournalEntries(Counter).TheDate = Nothing)

                Writer.WriteLine(arrJournalEntries(Counter).TheDate)
                Writer.WriteLine(arrJournalEntries(Counter).Title)
                Writer.WriteLine(arrJournalEntries(Counter).JournalEntry)


                Counter += 1

            Loop

            Writer.Close()


        End If

    Catch ex As Exception

        MessageBox.Show("An error has occured" & vbCrLf & vbCrLf & "Original Error:" & vbCrLf & ex.ToString)

    End Try



End Sub`

发生的问题是它不仅在第一次写错了。当它应该说它将要编辑时,它不会,它只是说创建。但它只是增加了文件。用当前日期按下按钮3次后。标题为“测试标题”,日记帐分录文本为“测试文本”。这就是发生的事情。

Journal Entry Incorrect

应该只是

7/10/2012 3:52:08 PM

测试题目

测试文字

7/10/2012 3:52:08 PM

测试题目

测试文字

整个过程。但是当然如果它是相同的日期那么它只是覆盖它。那么有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您只是按日期过滤数组,因此看起来您有一个日期但没有标题或文字的对象:

Do Until (arrJournalEntries(Counter).TheDate = Nothing)

“快速”修复:

Do Until (arrJournalEntries(Counter).TheDate = Nothing)
  If arrJournalEntries(Counter).Title <> String.Empty Then
    Writer.WriteLine(arrJournalEntries(Counter).TheDate)
    Writer.WriteLine(arrJournalEntries(Counter).Title)
    Writer.WriteLine(arrJournalEntries(Counter).JournalEntry)
  End If
  Counter += 1
Loop

请考虑删除数组并使用List(of JournalEntry)代替。您的代码在当前状态下看起来很难维护。