实现抽奖需求

      前言

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

                 用户进入页面,登录,登录后显示抽奖按钮,点击抽奖后随机发给玩家奖品,每个玩家每天限制抽奖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一定可以做到快速开发的。

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值