刚才看了一下上次写博客的时间,是 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一定可以做到快速开发的。
不知道大家是否知道一些好的代码生成工具,有没有好的意见!!!!!