简易抽奖软件逻辑实现
来源:互联网 发布:世界地缘政治格局知乎 编辑:程序博客网 时间: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的附件,程序挂不上去,如有需要请单独联系本人吧
阅读全文
0 0
- 简易抽奖软件逻辑实现
- 幸运大转盘抽奖 抽奖算法 程序实现逻辑
- C# 简易图片抽奖器的实现
- Js实现简易大转盘抽奖代码
- 抽奖软件
- 简易抽奖网页
- 年会抽奖 抽奖软件 抽奖系统
- js简易抽奖与时钟
- Qt之简易转盘抽奖
- Android 本软件锁逻辑实现 软件自带锁屏逻辑 屏幕锁逻辑实现
- 微博抽奖软件
- 随机抽奖软件
- java 抽奖软件
- 抽奖软件webapi开发
- 滚动照片抽奖软件
- 简易购物车业务逻辑类的实现
- 软件加壳的简易实现方式
- js简易抽奖器和时钟
- 指针进化------指针数组的引用
- 深入理解JAVA虚拟机---虚拟机类加载机制
- 程序员修炼之道(通俗版)——第二章
- System.Web.Caching.Cache的简单介绍
- IT行业风投那些事
- 简易抽奖软件逻辑实现
- void 0 和 undefined
- mysql5.7密码过期ERROR 1862 (HY000): Your password has expired. To log in you must change
- AD17 PCB板框无法设置
- 线程堆栈溢出引起的问题
- nginx为什么比Apache支持高并发???
- SpringMVC的学习总结(一)
- Tensorboard使用学习笔记
- 4.数据结构单链表之链表成员的插入与删除