老哥学习网 - www.lg9.cn 2024年05月12日 09:29 星期日
当前位置 首页 >杂文文章 >

基于循环的随机数列产生并存放研究 将数列反序存放

发布时间:2019-04-26 06:39:36 浏览数:

  摘要:利用循环产生随机数列,并把这些随机数列依次存储在数据库中。研究表明:选用不同的数据库会显示不同的存放效果。  关键词:循环结构;随机数列;Access;Sql Server
  中图分类号:TP391文献标识码:A文章编号:1672-7800(2012)012-0132-02
  0引言
  循环结构是程序设计的3种基本结构之一,它可以在某个条件下反复执行一段算法,从而减少重复书写的工作量。Access和SQL Server均为微软产品。Access为单机版数据库,多应用于小型系统上, 它结合了“Microsoft Jet Database Engine”和“图形用户界面”两项特点,是Microsoft Office的成员之一。SQL Server为网络数据库,安全性高,真正的客户机/服务器体系结构,图形化用户界面,使系统管理和数据库管理更加直观、简单,丰富的编程接口工具为用户进行程序设计提供了更大的选择余地,多为中型企业级的应用。在开发各种管理系统时,常需要本地数据库和网络数据库配合使用,这种情况下,SQL Server和Access往往是首选数据库。但是相同的循环程序,应用不同的后台数据库,却产生了不同的存储结果。
  1随机数列的生成与存放
  在很多时候,需要通过循环产生多个随机数列,并把它们依次存储在数据库中。例如在某网络测评系统中,既要保证有授权的人员进行投票,又要实现匿名投票,所以需要产生多个不同的随机数列作为登陆码,并存放在数据库中。产生随机数列的方法如下:
  public string RandLetter(int n)
  {
  char[] arrChar = new char[]{
  "a","b","c","d","e","f","g","h","i","j","k","l","m","n","p","q","r","s","t","u","v","w", "x", "y" ,"z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N", "P","Q" ,"R", "S","T" ,"U","V","W","X","Y","Z" };
  StringBuilder num = new StringBuilder();
  Random rand = new Random(DateTime.Now.Millisecond);
  for (int i = 0; i < n; i++)
  {
  num.Append(arrChar[rand.Next(0, arrChar.Length)].ToString());
  }
  return num.ToString();
  }
  为了产生多个随机码,则通过循环多次调用上述产生随机数列的程序,如下所示:
  for (int i = 0; i < g_voter.Rows.Count; i++)
  {
  Session["code"]=null;
  int i_groupId = Convert.ToInt32(groupId);
  String s_groupId = i_groupId.ToString();
  if (i_groupId < 10)
  {
  s_groupId = "0" + groupId;
  }
  else
  {
  s_groupId = groupId;
  }
  Session["code"] = cc.RandLetter(6);
  passCode = s_groupId + ((Label)(g_voter.Rows[i].FindControl("Label1"))).Text.ToString() + Session["code"];
  if (Session["voteId"] != null)
  {
  voteId = Session["voteId"].ToString();
  }
  else
  {
  this.ClientScript.RegisterStartupScript(this.GetType(), "", cc.MessageBox("验证码生成失败!"));
  return;
  }
  ……
  }
  上述程序,如果选用Access作为存储随机数列的数据库,则产生如图1中“投票人验证码”字段中的效果,能够按照编码规则产生不同的随机数列,不会出现重复序列。而如采用sql server作为存储随机数列的数据库,则产生如图2所示的效果,会有多条重复记录出现。
  2问题研究及解决方案
  如上程序在不同配置的多台PC机上测试,均是前述效果。但在Sql Server作为存储数据库时,程序分步跟踪执行,则不会产生相同的序列,所以推断随机数的产生、存放与程序的执行速度、数据存取速度相关。
  为了确保通过循环产生的随机序列不重复,并依次将这些随机数列存放在数据库中,在产生随机数的方法中增加一个参数:
  public string RandLetter(int n,int t)
  {
  ……
  Random rand = new Random(DateTime.Now.Millisecond+t);
  ……
  }
  然后在循环中调用该方法时,因为循环变量i的取值不同,保证Random方法每次被调用参数值不同,也保证了随机数列的不同,如下程序所示:
  for (int i = 0; i < g_voter.Rows.Count; i++)
  {
  ……
  Session["code"] = cc.RandLetter(6,i);
  ……
  }
  3结语
  在系统开发过程中,若应用Access作为存储随机序列的数据库,系统运行速度很慢,但随机数列的产生不会出现重复现象;但是将数据库更换为Sql Server后,同样的程序,却会出现多个重复的验证码,如果跟踪测试,则又不会出现重复情况,经过不断的思考、测试,提出了如上的解决方案。系统在后面的软件测试、试运行阶段,均没有出现重复数据序列的现象。
  参考文献:
  [1]张海藩.软件工程导论[M].北京:清华大学出版社,2010.
  (责任编辑:杜能钢)
  Research of Random Number Column Generate
  and Store Based on Cycle
  Abstract:produce some random number sequences by the circulation and store the random number sequences in the database, but the selection of different database shows the different store.
  Key Words: Loop Structure; Random Sequence; Access; Sql Server

推荐访问:数列 存放 随机 循环

相关文章:

Top