简易抽奖软件逻辑实现

     又到年终了,各种抽奖软件需求纷至沓来,现分享一个简易抽奖软件逻辑,希望对大家抽奖类的需求有所帮助;

  直奔主题吧,测试程序很稳定,可以直接将界面修改为其他形式

1、奖池枚举类

    public enum AwardGrade
    {
        SpecialAward=0,
        FirstAward=1,
        SencdAward=2,
        ThirdAward=3,
        FourAward=4
    }
2、乱序从文本文件中加载参与抽奖的人员

        /// <summary>
        /// 加载用户乱序加载
        /// </summary>
        private static void loadUser()
        {
            try
            {
                
                Random random = new Random();
                StreamReader sr = new StreamReader("staff.txt", System.Text.Encoding.Default);
                while (!sr.EndOfStream)
                {
                    string name = sr.ReadLine();
                    if (!string.IsNullOrEmpty(name.Trim()) && !AwardPoolUsersList.Contains(name.Trim()))
                    {
                        AwardPoolUsersList.Insert(random.Next(AwardPoolUsersList.Count), name.Trim());
                    }
                }
                sr.Close();
                logger.InfoFormat("[用户加载]用户加载完成,共加载{0}个用户", AwardPoolUsersList.Count);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("加载用户异常,异常描述:{0},异常详情:{1}", ex.Message, ex.StackTrace);
            }
        }
3、获取一个中奖人(私有函数)

   static object obj = new object();        
        /// <summary>
        /// 获取一个中奖人
        /// </summary>
        /// <returns></returns>
        private static string getCurrentAwardUser()
        {
            lock (obj)
            {
                try
                {
                    List<string> currentUser = new List<string>();
                    currentUser = AwardPoolUsersList;
                    if (AwardedUserList == null)
                    {
                        AwardedUserList = new HashSet<string>();
                    }
                    int count = currentUser.Count;
                    string name;
                    do
                    {
                        int data = getNext(count);
                        name = currentUser[data];
                    } while (AwardedUserList.Contains(name));
                    return name;
                }
                catch (Exception ex)
                {
                    logger.ErrorFormat("随机生成用户时异常,异常描述{0},异常详情:{1}", ex.Message, ex.StackTrace);
                    return "";
                }
            }
        }
4、外部调用获取中奖者函数(公共的)

        /// <summary>
        /// 请求一个中奖者
        /// </summary>
        /// <returns></returns>
        public string GetUser()
        {
            lock (obj)
            {
                string result = getCurrentAwardUser();
                while (1 == 1)
                {
                    if (!AwardedUserList.Contains(result) && !string.IsNullOrEmpty(result))
                    {
                        if (msg.Contains(result))
                        {
                            result = getCurrentAwardUser();
                        }
                        break;
                    }
                    result = getCurrentAwardUser();
                }
                AwardedUserList.Add(result);
                return result;
            }
        }
5、加载的随机函数

        /// <summary>
        /// 请求一个中奖者
        /// </summary>
        /// <returns></returns>
        public string GetUser()
        {
            lock (obj)
            {
                string result = getCurrentAwardUser();
                while (1 == 1)
                {
                    if (!AwardedUserList.Contains(result) && !string.IsNullOrEmpty(result))
                    {
                        if (msg.Contains(result))
                        {
                            result = getCurrentAwardUser();
                        }
                        break;
                    }
                    result = getCurrentAwardUser();
                }
                AwardedUserList.Add(result);
                return result;
            }
        }
6、过滤中奖人员,避免重复中奖

        /// <summary>
        /// 过滤移除已中奖用户
        /// </summary>
        private void removeAwardUser()
        {
            try
            {
                StreamReader sr = new StreamReader("Result.txt", System.Text.Encoding.Default);
                int i = 0;
                while (!sr.EndOfStream)
                {

                    string name = sr.ReadLine();
                    if (!string.IsNullOrEmpty(name.Trim()))
                    {
                        i++;
                        AwardPoolUsersList.Remove(name.Trim());
                    }

                }
                sr.Close();
                logger.InfoFormat("移除用户数:{0}", i);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("移除已中奖用户时异常,异常详情:{0}-1", ex.Message, ex.StackTrace);
               
            }
        }
7、保存中奖信息

 /// <summary>
        /// 保存中奖信息
        /// </summary>
        /// <param name="name"></param>
        public  void saveAwardUserToTxt(string name)
        {
            try
            {
                FileStream stream = new FileStream("Result.txt", FileMode.Append, FileAccess.Write);
                StreamWriter sw = new StreamWriter(stream);
                sw.WriteLine(name);
                sw.Close();
                stream.Close();
                logger.InfoFormat("中奖人:{0}", name);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("将中奖者:{2}写入文件时发生户异常,异常描述:{0},异常详情:{1}", ex.Message, ex.StackTrace, name);
            }
        }
8、测试程序( winform+ log4net+donetbar   


不好意思,不知道怎么挂rar的附件,程序挂不上去,如有需要请单独联系本人吧







  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值