实现抽奖需求

来源:互联网 发布:网页编程网 编辑:程序博客网 时间:2024/06/06 20:08

      前言

        刚才看了一下上次写博客的时间,是

                 用户进入页面,登录,登录后显示抽奖按钮,点击抽奖后随机发给玩家奖品,每个玩家每天限制抽奖3次,奖品需要在页面里显示文字提示               

                 给用户随机发放的奖品有5个,ABCDE,用户能获得的概率分别是,10%,25%,5%,45%,15%  

                 对于这个活动,需要一个统计页面,可以指定时间段统计总共发出多少个奖品,有多少个帐号参加这次活动

 

                 主要的逻辑代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using IDAL;using Model;namespace BLL{    public class AwardOfDayBLL    {        private IAwardOfDay IAwardOfDay;        public AwardOfDayBLL()        {            IAwardOfDay = DBFactory.DBFactory.CreateAwardOfDayDAL();        }        /// <summary>        /// 抽奖的方法,前台进行调用。        /// </summary>        /// <param name="UserInfo"></param>        /// <returns></returns>        public string Award(UserInfo UserInfo)        {            int count = GetCount(UserInfo);            if (count>=3)            {                throw new Exception("已经超过三次!欢迎明天再来抽奖。");            }            else            {                string strAwardInfo = GetAward();                int times = GetCount(UserInfo) + 1;                //实例化一个抽奖记录实体,写入数据库。                AwardOfDayInfo AwardOfDayInfo = new AwardOfDayInfo();                AwardOfDayInfo.userId = UserInfo.username;                AwardOfDayInfo.awardInfo = strAwardInfo;                if (IAwardOfDay.InsertAwardOfDay(AwardOfDayInfo)==1)                {                    return AwardOfDayInfo.awardInfo;                }                else                {                    throw new Exception("出错,请联系管理员!");                }            }        }        /// <summary>        /// 返回当前用户当天的抽奖次数。        /// </summary>        /// <param name="UserInfo"></param>        /// <returns></returns>        private int GetCount(UserInfo UserInfo)        {            string userName = UserInfo.username;            return IAwardOfDay.GetAwardCount(UserInfo);        }        /// <summary>        /// 获取奖品。回头看可不可以再优化一下,用状态模式可不可以解决????????        /// </summary>        /// <returns></returns>        private string GetAward()        {            int temp = (int)new Random().Next(1, 100);                        if (temp>=1 && temp<=10)            {                return "A";            }            else if (temp>=11 && temp<=35)            {                return "B";            }            else if (temp>=36 && temp<=40)            {                return "C";            }            else if(temp>=41 && temp<=85)            {                return "D";            }            else            {                return "E";            }        }    }}


                     对于获得抽奖的私有方法,可能是使用状态模式让它更加灵活,从而去掉复杂的判断。(因为这里是经常要变化的,比如下次抽奖活动,我增加了一个产品等等。)

 

 

                  其实我在这里还想说一下MD5的问题,我记得前段时间,同学找我看毕业设计的时候,就是因为数据库里密码存得是MD5,然后她的密码找不到了。现在来看看,这个问题真是太好解决了。(1、先生成一个MD5码,增加一条记录。2、试试MD5解密,只在百度一下MD5解密,正确率还是挺高的。)

               给自己的一个总结吧,把生成MD5的方法贴出来,大牛不要笑话啊。

/// <summary>        /// MD5        /// </summary>        /// <param name="ConvertString"></param>        /// <returns></returns>        private string GetStrMd5(string ConvertString)        {            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();            string str =                 BitConverter.ToString(md5.ComputeHash(                 UTF8Encoding.Default.GetBytes(ConvertString)));            str = str.Replace("-", "");            return str;        }


              这里我还想说一下.net动软生成器。

              因我开始的时候,我想直接用.net动软生成器,这样来减少工作量,不过,发现这个生成工具生成好多的废码。

              我想,asp.net一定可以做到快速开发的。

             不知道大家是否知道一些好的代码生成工具,有没有好的意见!!!!!