【问题标题】:Create a random customer number and display it in a textbox创建一个随机客户编号并将其显示在文本框中
【发布时间】:2013-01-16 18:24:23
【问题描述】:

我完全停留在创建随机数上。理想情况下,不是客户编号的两倍。

然后我需要在我的 tb_id(文本框)中显示它并将该行写入客户文件中。

这里的任何帮助都会很棒。

private void button1_Click(object sender, EventArgs e)
{    
    **var rng = new Random();**
    // Here I need to write the random number (it's a customer number) to the tb_id text box. so I'm able to write it to their customer file afterwards.

    try
    {
        string fileName = string.Format(tb_surname.Text);

        if (tb_firstname.Text == "" || fileName == "" || tb_postcode.Text == "")
        {
            MessageBox.Show("Missing values from textboxes!");
        }
        else if (File.Exists(fileName + "Text"))
        {
            if (MessageBox.Show("Warning: There is already a file with the surname you enter already on the system. Contents will be replaced - do you want to continue?", "File Demo", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
                 MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly) == DialogResult.Yes)
            {
                //write lines of text to file
                StreamWriter outputStream = File.CreateText(fileName + ".Txt");
                outputStream.WriteLine(tb_firstname.Text);
                outputStream.WriteLine(tb_surname.Text);
                outputStream.WriteLine(tb_surname.Text);
                **outputStream.WriteLine(tb_id.Text);**
                outputStream.Close();
                MessageBox.Show("Text saved to file successfully!");
                this.Close();
            }
        }
    }
    // ...
}

第 2 部分

       // creating a random number here for the customer id
        Guid g = Guid.NewGuid();
        tb_id.Text = g.ToString();

将 Guid 号写入文本文件。

        outputStream.WriteLine(tb_id.Text);

【问题讨论】:

  • 你为什么不用数据库?
  • 由于任务要求设置。在理想的世界里,我猜数据库会更好。
  • 如果随机数的使用不是那么错误的话,如何不使用new Random 将会有很多问题。随机数永远不能保证是唯一的,因此您可能正在寻找其他东西......
  • 为什么数字必须是随机的而不是顺序的?
  • 嗯,它没有,我猜只是独一无二的。

标签: c# random


【解决方案1】:

如果您想让它对用户唯一,我不建议您使用随机数,因为很有可能让不同的用户使用相同的数字。

guid 可能是更好的主意

  Guid g = Guid.NewGuid();

【讨论】:

  • 谢谢!有什么办法可以限制我产生的数字数量,因为它很大。指导 g = Guid.NewGuid(); tb_id.Text = g.ToString();
  • 我猜应该是 Guid g = Guid.NewGuid(1,1000); tb_id.Text = g.ToString();例如给出一个介于 1 和 1000 之间的数字
  • @JamesWozencroft 不,Guid 始终是 32 个十六进制数字。无论如何,您不必担心大小。
  • guid 必须很大,以减少获得重复的统计机会。
  • @ebyrob 取决于他有多少客户。一旦超过 77000 个客户,您就有 50% 的机会发生碰撞。 9300 之后有 1% 的机会。不要将哈希码用于任何东西,除非它们的设计目的是:平衡哈希表。必读:blogs.msdn.com/b/ericlippert/archive/2010/03/22/…
【解决方案2】:

您可以使用Guid 结构。 GUID 是全局唯一标识符,在 .NET 框架中提供

 this.iD = Guid.NewGuid().ToString();

【讨论】:

  • 你可以做“outputStream.WriteLine(id.Text);”正如您在代码中所做的那样。
  • outputStream.WriteLine(tb_id.Text);我刚刚测试过,当我检查我的文件时似乎没有工作。
【解决方案3】:

首先,如果您只是使用随机数来识别用户,那么使用 COLD TOLD 所说的 GUID。

独特随机是完全不同的东西


但是为了理解如何使用随机数...

rng 声明为Random 类型

要实际创建随机数,请键入类似

int randI =  ng.Next(0, 1000);

这会给你一个 0 到 1000 之间的随机数。

您可以使用 Intellisence 来查看您在随机数方面还有哪些其他选项。

把那个数字放在你的文本框中,而不是这样做

textBox1.Text = randI.ToString();

【讨论】:

  • 感谢您的理解,效果很好。现在只需要它写入我的文本文件 outputStream.WriteLine(tb_id.Text);因为这似乎不起作用。
  • 当我检查时,数字不会出现在我的文本文件中。我使用了 Guid 方法。
  • @JamesWozencroft 您能否在问题中发布您如何设置tb_it.text 的代码。您还可以发布您如何生成Guid 的代码吗?
  • @JamesWozencroft 我看不出你所拥有的具体问题。您可能应该使用调试器来查看发生了什么
  • 好的,谢谢。它根本没有抛出任何错误。并且应用程序正在正常运行。只是它没有写数字。我会四处看看。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多