【问题标题】:How to generate a receipt number如何生成收据编号
【发布时间】:2012-03-21 05:17:15
【问题描述】:

在 StackOverflow 上,我发现了问题Generate a receipt number in this range。

在答案中(来自 Adam Maras)我发现这段代码(对我来说很有趣):

Private Const FirstReceiptNumber As String = "GA00000"

Public Function GenerateReceiptNumber(ByVal lastNumber As String) As String

    If lastNumber.Length <> 7 Then
        Throw New ArgumentException("Incorrect length", "lastNumber")
    End If

    If lastNumber.StartsWith("G") = False Then
        Throw New ArgumentException("Incorrect start character", "lastNumber")
    End If

    Dim letterPortion As Char = lastNumber.Chars(1)

    If letterPortion < "A"c Or letterPortion > "Z"c Then
        Throw New ArgumentException("Non-letter second character", "lastNumber")
    End If

    If letterPortion = "I"c Or letterPortion = "O"c Then
        Throw New ArgumentException("Invalid second character", "lastNumber")
    End If

    Dim numericPortionString As String = lastNumber.Substring(2)
    Dim numericPortion As Integer

    If Integer.TryParse(numericPortionString, numericPortion) = False Then
        Throw New ArgumentException("Invalid numeric portion", "lastNumber")
    End If

    If numericPortion = 99999 Then
        If letterPortion = "Z"c Then
            Throw New ArgumentException("No more receipt numbers possible", "lastNumber")
        End If

        numericPortion = 0
        letterPortion = letterPortion + Chr(1)

        If letterPortion = "I"c Or letterPortion = "O"c Then
            letterPortion = letterPortion + Chr(1)
        End If
    Else
        numericPortion = numericPortion + 1
    End If

    Return String.Format("G{0}{1:00000}", letterPortion, numericPortion)
End Function

我将其粘贴到 Visual Studio 2010 表单中,并尝试查看 Form_Load 上发生的情况。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    TextBox1.Text = GenerateReceiptNumber() '<--HERE IS THE ERROR
End Sub

但在GenerateReceiptNumber() 中显示错误。

当我打开此表单时,如何使用该代码在TextBox1 中为我提供收据编号?

下次使用Form_Load,收据号必须是+1。

【问题讨论】:

  • 它(收据编号)应遵循哪些要求?
  • 能否提供完整的错误信息?
  • 请阅读第二行代码(函数声明),然后查看调用它的代码。 “错误”(顺便说一句,您没有提供)的原因应该非常清楚。 (如果不是,请研究它直到它是 - 这真的很明显。)
  • 您为什么要创建多个帐户? stackoverflow.com/users/891578/pakkis 和 stackoverflow.com/users/888649/pakkis 我有 showed you 生成唯一收据编号的正确方法。你还有问题吗?
  • 我做错了。对不起。删除其中之一。 (很多问题。我向用户和管理员道歉)

标签: vb.net visual-studio-2010


【解决方案1】:

很高兴你找到了我对上一个问题的答案!

现在,使用我在另一个问题中提供的 mr_dunski 解决方案,他要求算法根据之前的编号创建一个收据编号。所以你需要从一个初始数字开始序列:

GenerateReceiptNumber(FirstReceiptNumber)

或

GenerateReceiptNumber("GA00000")

【讨论】:

  • 谢谢亚当。有用。!!!现在我尝试将这个号码保存到文件中,下次在 Form_Load 上检查谁是最后一个保存在那里的号码。或者,如果您有任何好主意如何保存最后一个号码并下次检查以获取下一个号码。(我是 VS2010 的新手)。
  • 为此,您需要考虑使用数据库或某种文件。互联网上有大量此类资源。
【解决方案2】:

你可以用这种模式写:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    TextBox1.Text = GenerateReceiptNumber("GA00000")
End Sub

或

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    TextBox1.Text = GenerateReceiptNumber(FirstReceiptNumber)
End Sub

【讨论】:

  • 不客气。最好的问候。
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多