简易抽奖软件逻辑实现

来源:互联网 发布:世界地缘政治格局知乎 编辑:程序博客网 时间:2024/04/28 14:27

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

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

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的附件,程序挂不上去,如有需要请单独联系本人吧







原创粉丝点击