前言
刚才看了一下上次写博客的时间,是 2013-01-02 22:36。现在想想还记得很清楚呢,是在学校宿舍的的床上。时间过得好快,好像什么东西都是一眨眼的时间,画面从一个画面切换到了另一个画面,可是两个画面之间是宝贵的时间啊。在此也提醒一下自己要珍惜时间,努力奋斗吧。
实现一个抽奖的需求
入职第一天,可能和所有的从事IT行业的人士都一样不是领取自己的电脑,然后安装应用软件。自已早就想到了这些,所以当天我就带了硬盘过来,里面有我要用的所有东西。在这里要提醒一下,做什么事情之前,先想一下,需求什么东西,不要打没有准备的战争。
第二天,经理给了我一个小需求,让我来实现,主要是对我的编程水平、习惯的一了解。
需求如下:
用户进入页面,登录,登录后显示抽奖按钮,点击抽奖后随机发给玩家奖品,每个玩家每天限制抽奖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一定可以做到快速开发的。
不知道大家是否知道一些好的代码生成工具,有没有好的意见!!!!!