基于循环的随机数列产生并存放研究 将数列反序存放
摘要:利用循环产生随机数列,并把这些随机数列依次存储在数据库中。研究表明:选用不同的数据库会显示不同的存放效果。 关键词:循环结构;随机数列;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
栏目最新:
- 做好“高”和“新”两篇文章2023-03-17
- 2022年度理论不都是灰色,理论文章更应...2023-03-08
- 2022如何写好网评文章【完整版】2023-03-06
- 文章写作十二题2023-03-05
- 2022年度文章写作提纲30例(十二)【优...2023-01-26
- 如何把文章写生动(2022年)2022-12-12
- 你会“抄”文章吗(范文推荐)2022-12-12
- 怎样写好理论性文章?(精选文档)2022-11-24
- 写好文章要实现“四个升华”2022-11-24
- 文章构思要“五定”【优秀范文】2022-11-24
相关文章:
- 乐视手机x600怎么样|乐视1
- 京翰教育(鲁能教学区)怎么样 [京翰教育重庆鲁能教学区小学四年级数学培训班,暑假辅导班|补习机构电话有吗]
- qq空间说说带图片 [空间爱情说说带图片]
- [长沙岳麓区京翰教育高二文综一对一补习提升哪家好?] 岳麓区上门一对一好的机构有哪些?
- 2018年天津塘沽区中考数学试卷及答案(已公布)|2017年天津中考数学试卷及答案
- 新概念英语第二册课后练习题答案 新概念英语册课后练习题及答案81-82
- 【小学一年级作文:小眼镜找朋友】作文向一年级找朋友介绍学校的情况
- 八一建军节的意义【中国八一建军节的意义】
- 万圣节英语优秀作文带翻译:万圣节英语作文带翻译
- 【散文诗:暖冬】 暖冬
- 高一想象作文:我心中的那份期盼700字:我心中的那份期盼