62,047
社区成员
发帖
与我相关
我的任务
分享
Create function getResult(@ID int,@honghao varchar(50),@lanhao varchar(5))
Returns nvarchar(50)
As
Begin
declare @res varchar(20)
declare @H int
declare @L int
declare @jifen int
declare @UserName varchar(20)
select @UserName=UserName,
@H=
case when charindex(Hong1,@honghao)>0 then 1 else 0 end +
case when charindex(Hong2,@honghao)>0 then 1 else 0 end +
case when charindex(Hong3,@honghao)>0 then 1 else 0 end +
case when charindex(Hong4,@honghao)>0 then 1 else 0 end +
case when charindex(Hong5,@honghao)>0 then 1 else 0 end,
@L=case when Lanqiu=@lanhao then 1 else 0 end from TableName
where ID=@ID
set @res=Convert(nvarchar(2),@H)+' +'+Convert(nvarchar(2),@L)
if(@res='0+1' or @res='1+1' or @res='2+1')
set @jifen=5;
if(@res='4+0' or @res='3+1')
set @jifen=20
if(@res='4+1' or @res='5+0')
set @jifen=100
if(@res='5+1')
set @jifen=300
if(@res='6+0')
set @jifen=500
if(@res='6+1')
set @jifen=1000
Return @res+' 积分:'+isNull(convert(varchar(5),@jifen),0)
End
select *,dbo.getResult(ID,'02,11,20,22,24,30','05') as res from tableName
原理:
首先定义一个包含33个元素的一维数组,代表33个红球,然后为每一个数组赋以介于0到1之间的随机双精度数值,因为双精度重复的概率很小,所以不必担心33个红球会出现相同的值。然后取其中值最大的7个元素,进行排序(排序使用的是Array.Sort()方法),得到7个红球。而每个元素的下标,正好作为红球的号码。兰球则截取前16个元素进行上述操作,取值是最大的即可。
技术关键:
1、用随机数为数组赋值
起初这段是这样写的
for (int i = 0; i < 33; i++)
{
Random RandNum = new Random(unchecked((int)DateTime.Now.Ticks));//产生随机数
ball[i] = RandNum.NextDouble();//产生随机数,给红球数组赋值
}
本来为防止CPU运算太快产生相同的结果,已经引用了时间种子到随机函数,谁料这样一来33个数组元素的值仍然一摸一样!好一番研究,才知道原来这个“种子”必需放在循环外部才可以,按我原来的思想放在循环里面似乎效果应该更好,因为每一次都使用不同的种子啊?!呵呵,谁想到CPU的运算速度如此之快,这点循环时间根本来不及考虑随机时间的差别啊!这下基本可以理解为:在瞬间种下的33颗种子在瞬间产生的结果是一样的,而某一时间种下的同一颗种子在瞬间就可以产生不同的结果了?于是正确的写法应该是:
Random RandNum = new Random(unchecked((int)DateTime.Now.Ticks));//产生随机数种子
for (int i = 0; i < 33; i++)
{
ball[i] = RandNum.NextDouble();//产生随机数,给红球数组赋值
}
2、显示问题
这里使用了憋足但是比较简单的richtextbox控件。为了美观,需要在显示界面出现如上图所示的双色球图标,但始终没有找到richtextbox中添加图片的方法,后来总算勉强解决了这个问题:图片首先加入程序资源管理器,并设置为“可嵌入的资源”,然后再使用剪切板,对其进行拷贝粘贴。代码如下:
Bitmap redbmp = Bitmap.FromStream(GetType().Assembly.GetManifestResourceStream(GetType(),
"redball.bmp")) as Bitmap;
Bitmap bluebmp = Bitmap.FromStream(GetType().Assembly.GetManifestResourceStream(GetType(),
"blueball.bmp")) as Bitmap;
Clipboard.SetDataObject(redbmp);
richTextBox1.Paste();
其实是将图片粘贴在了richtextbox里。
解决了这个问题,绝对不能够急着使用richtextbox.text+="!@#!@#" 或者 richtextbox.rtf+="!@#!@#"的方法向里面添加文字,因为这样会使你之前添加的图片无法显示!richtextbox提供的AppendText方法就允许你随意追加文字了,用了这个方法,你就想怎么贴图,就怎么贴;想怎么追加文本,就怎么追加了。
最后,你还不得不在button开始时添加下面的代码,以避免连续追加的内容会因为使用者的误操作随意插入文本框内的任意位置了:
richTextBox1.SelectionStart = (richTextBox1.Text).Length;
richTextBox1.ScrollToCaret();