admin管理员组文章数量:1582357
2024年6月22日发(作者:)
装备制造与教育第二十八卷
吴鹏基于 抽奖系统设计与实现
工程技术研究与应用主持:李艳
者扫描该编码来准备抽奖数据,必须要考虑多种数
的影响,抽奖现场的机器都是 1一作中随机挑选的机
据来源的信息手机方式及数据格式的整理,在实现
功能的基础还要考虑方便操作。
3)抽检算法必须保证公平公正——抽奖算法是
是抽奖系统的核心,且根据实际有多种算法,比如以
公平公正为原则的抽奖算法,也有以照顾某些特殊
器,操作系统多样,安装的基础软件也千差万别,最
重要的是,你不能要求现场的机器都根据你开发环
境的要求安装所有的基础支撑工具软件,这样将会
使得抽奖软件变成只能专业人士操作,而普通使用
者不会使用的结果,这与抽奖软件的实际应用大相
径庭,故系统的设计之初就要考虑到如何适应各种
复杂的环境同时提供简单明了的操作方式,让会用
号码的抽奖算法,本文基于企业抽奖的实际,采取以
公正公平为原则的抽奖算法,这里就需要要考虑如
圜
下问题:a、抽奖顺序必须是随机的,j亏抽奖信息的登
记顺序无关;b、在同一轮抽奖过程中,不论是否中
奖,每个号码的中奖几率要一致;c、中奖的号码将不
能再次参与抽奖;
4)抽奖软件界面风格多样——抽奖软件的界面
风格涉及到几个方面,首先是根据活动的特征需要
准备不同的界面风格,其次是抽奖现场展示的方案,
最后是中奖信息的展示方案,这里最重要的是前两
者,必须考虑相关的机制来实现界面风格的快速切
换 抽奖现场展示的效果,对于中奖信息的归档查
看不涉及过多参与者,可重点关注正确展示即可。
除卜-述功能性需求外,还有如下几个非功能性
需求:
1)抽检软件开发的时问短,从抽奖软件计划开
发到抽奖现场使用只有4天时间,功能性需求只有
抽奖算法的要求明确,其他的功能性需求及非功能
性要求都没明确,故选型技术方案必须要成熟,开发
效率高,后期修改调整便捷。本文选用 T基于c#技
术的窗体程序来实现抽奖软件的整体方案,c#窗体
程序技术成熟、控件种类丰富且封装性好、开发效率
高、后续维护方便快捷,实现中只需要考虑具体的业
务逻辑处理即可,而相关的技术细节将有微软做统
一
封装并做相关的属性设置既可以达到效果 ;
2)抽奖规则能灵活调整,这里的抽奖规则是指
具体的抽奖方式:是先抽一等奖还是先抽三等奖?是
一
次性全部抽完还是一次只抽取一个奖项?是自动
完成全部抽奖还是人为干预完成特定的抽奖?这些
规则根据不同的抽奖活动,不同的主办单位有不同
的要求,抽奖软件设计及实现中必须要考虑好,允许
使用者灵活设置相关规则,以利于实际的应用;
3)抽奖软件交互流程友好,即从软件打开,到抽
奖过程完成,交互方式要简洁友好,自然方便,从基
本信息设置,抽奖规则设置,正式抽奖及抽奖结果查
看,除了主流程流畅自然外,每一个具体的模块涉及
到的操作,也需要尽量减少人为干预,符合操作者的
习惯,不如涉及到条码扫描信息录入,是每次扫描完
按键盘回车表示录入完成,还是扫描枪扫描完成就
自动保存信息,是需要充分考虑使用者习惯的;
4)兼容抽奖现场多种环境,这个规则尽管从没
有明确提 ,但是对于方案的选型却有着I-分重要
计算机的人都能够快速上手使用。
2 系统设计
针对上述需求,系统首先要满足功能性需求同
时要充分考虑非功能性需求,在系统设计过程中首
先考虑的是整体业务流程,其次考虑的是功能模块,
最后考虑针对特殊非功能性需求做具体方案的选
犁,在上述3步骤完成后,才开始编码、测试及现场
试用。
根据抽奖软件功能性需求,抽奖软件的业务流
程不会特别复杂,属于正向直线型模式,即从抽奖基
本信息设置,抽奖数据录入,现场抽奖及抽奖结果查
看,这几个标准的步骤是固定的且不会更改的也不
会有多种分支或者回退的业务逻辑。具体的主体业
务流程图如下:
图1 抽奖业务主体流程
上述业务流程中,对于抽奖规则设置没有作为
主流程,而是作为其中一个流程节点的重要补允,足
基于如下考虑,抽奖业务主流程中的节点顺序在业
务上是有先后的,抽奖原始数据必须要依赖于抽奖
活动,即此次参与抽奖的原始数据必须关联到某~一
具体的抽奖活动,只有上述流程中1、2步骤完成后
才能现场抽奖,只有抽奖完成才能查看抽奖结果,且
一
旦开始抽奖,1、2步将不允许做任何修改,而对于
抽奖规则相对独立,不同的抽奖活动可以设置不同
的抽奖规则,这里将其放入现场抽奖的预处理环节,
即做现场抽奖的时候,首先必须要设置本次抽奖的
规则,既实现了抽奖规则的灵活可配置又实现lr抽
奖活动与抽奖规则的统一绑定。
抽奖软件的功能模块主要针对抽奖业务流程,
同时考虑了多种非功能性需求,主要包括如下几个
模块:抽奖基本信息设置模块,包括抽奖活动基本信
息、抽奖等级基本信息;抽奖数据录入模块,提供批
量导人、手E输入、条码录入等方式;抽奖规则设施
模块,根据抽奖等级信息动态产生,提供自动全部抽
工程技术研究与应用主持:李艳
取模式及单一手工选择模式,针对每种模式提供顺
序、倒序两种方式;现场抽奖模块,主要提供抽奖数
据滚动显示,抽奖启动、停止的控制,中奖号码产生
及显示;抽奖结果处理模块,主要是抽奖结果的保存
数据并发等功能,对文本存储模式将都是挑战,这里
必须考虑数据存储数据结构来保证数据在单机或者
并发情况下的增删改查功能能够高效快速的实现,
同时要求复杂度较低、实现方便快速。
及显示,主要提供了抽奖数据加密解密、抽奖数据存
档、抽奖数据查询等;界面配置模块,主要支持界面
风格的灵活切换;存储模块,主要考虑到通用扩展,
本文整体的数据存储模型,总结抽奖阶段数据
处理的特点,信息基本存储结构采用两种模式,其中
之一是key—value模式,且一个key—value键值对作
为一个完整的信息单元,作为文本文件的一行进行
存储,其中key为设置信息的类别,value为具体的
采用了文件作为主要数据存储载体。具体的功能模
块图如下:
基 抽
抽 抽
本
奖
奖
现
奖
界
信
数
规
场 结
面
息
据
则 抽 果
配
设
录
设
奖
处
置
置
入
施
模
理
模
模
模
模
块
模
块
块
块
块
块
软件功能模块
图2抽象软件系统功能模块图
各个功能模块涉及到的具体功能点,在图中没
有详细展示,主要由于具体功能点较多,且会根据需
求做适当调整。上文中已经此已做过简要介绍,这里
不再重复。
3系统关键模块
抽奖软件的关键模块包括如下几部分:存储模
型是所有数据存储的载体,是整个系统的基石;核心
算法的执行机制及核心算法模块是抽奖软件的灵
吴鹏基于n 抽奖系统设计与实现
魂;抽奖规则控制模块是抽奖软件重要的辅助功能;
界面模块包括了界面展示及交互两个重要部分是抽
奖软件的“门面”,下边将对此逐一做详细介绍。
3.1 存储模型
存储模型主要涉及到选型及具体实现的数据结
构,本文中数据存储模型的选型重点考虑各分厂的
实际情况,特别是抽奖现场的多样性,采取了文件模
型,同时提供了对于数据库模型的支持,通过配置开
关进行切换,文件存储模型将会兼容各种操作系统
及应用环境,且不用额外安装任何环境软件,不用担
心数据库版本及数据库软件的安装等问题,即实现
了适应多环境的数据存储,文本存储模型,对信息可
以做完整记录,但由于是无结构的不能体现数据间
的逻辑关系,信息的增、删、改、查及信息重复验证、
值;另外一个是流水线存储模式,即每一条业务数据
作为一行,无任何额外的附加信息,尽管损失了业务
语义,却保证了原始数据的干净无污染,后续的业务
逻辑处理不用做数据预处理,提高了数据处理的效
率,两者的图例如图3、图4:
抽奖时间=xxxx年xx月xx日
活动名称=XXxx年xx活动
图3 key—value存储模式
抽奖信息1
抽奖信息2
图4流水线存储模式
3.2核心算法
抽奖的核心算法主要考虑抽奖的公平公正,即
所有抽奖人抽奖机会均等、所有抽奖人中奖机会均
等且中奖的人不允许重复中奖,本文设计了如下的
抽奖算法:首先将将参与抽奖的数据全部加入内存
并随机混序;其次是对加载的数据做清洗——将在
所有将参与抽奖数据集合里清洗掉已经中奖的数据
及已经抽过奖的数据;再次在清洗后的数据集合范
围内产生随机数选取当前抽奖号,且被选中的号码
装备制造与教育第二十八卷
立即归入已抽奖数据集合的同时从待抽奖集合中除
去,直到待抽奖数据集合为空(保证了在一次抽奖过
程中抽奖机会的人人均等);为了保证抽奖构成的连
续性,没有人工干预结束抽奖且带抽奖数据集合已
经为空的同时将已经抽奖数据集合全部导入待抽奖
数据保证抽奖的不中断;最后对于中奖号码直接记
录为中奖数据集合,同时从待抽奖数据集合及已抽
奖数据集合中除去 。
抽奖的核心数据结构是c#中的 个List对
象,其中List<string>al1BeingLuckyer表示所有待抽
奖的数据集合;List<string>hisAllBeingLuckyer表示
当次已经抽过奖的集合;List<string>winLuckyer表
示中奖集合;获取当次抽奖号码算法源代码如下:
private string genLuekyer0
装备制造与教育第二十八卷
吴鹏基于n 抽奖系统设计与实现
工程技术研究与应用主持:李艳
{
每次展示的抽奖信息的多少,一般为5—10个当前
抽奖号码,这样上述举例中要抽取3等奖至少需要
5次操作,就需要在程序中明确区分当前点击的开
始抽奖是抽不同等级的奖项还是同一奖项,相关的
逻辑控制还必须要满足抽奖本身的规则及抽奖规
int initmlm=allBeingLuckyer.Count;//当前抽奖
数据
int hisinitnum=hisAllBeingLuckyer.Count;//当
前抽奖数据
圈
string tempStr=null;//当前选中的抽奖号码,作
为函数返回值
if(initnum==0&&hisinitnum==O)//抽奖数据
不存在的异常处理逻辑
{
return null;
}
if Iifnitnum:=o)//当前抽奖数据为空将涉及到
迁移已抽奖数据的处理逻辑
{
allBeingLuckyer.AddRange IihisAllBeingLuekyer.
Distinct0.ToList0);
hisAllBeingLuckyer.Clear0;
}
Random rd=new Random fnew Guido.GetHash—
CodeO);
int tempNum=rd.Next(0,initnum);/在所有带抽
奖范围内产生随机数
tempStr=a1lBeingLuckyer.ElementAt0empNum);//
获取当前抽奖号码
aJ1BeingLuckyer.RemoveAt litempNum);//从当前
抽奖号码范围内移除该数据
sAllBeingLuckyer.Add I[tempStr);//将当前抽奖
号码加入已抽奖集合;
rd=null;//清空随机数对象
return tempStr;//返回结果
}
3.3抽奖规则控制
抽奖业务规则设置重点解决如何抽取设置的奖
项问题,本抽奖系统中重点考虑两点:1、是否连续抽
奖即一次抽取所有的奖项等级还是一次只抽取一个
中奖等级;2、抽奖顺序如何控制即按照一二 等奖
顺序抽取还是逆序抽取等,这些业务规则的设置本
身并不复杂,通过c#窗体程序很容易就能实现,抽
奖规则控制最复杂的地方是在抽奖过程中应用上述
业务规则——首先是抽奖活动本身的逻辑,比如如
何控制抽奖的开始于抽奖的结束?抽奖人数与中奖
人数设置不合理?其次是抽奖规则的控制逻辑如
文所述,最后还有显示控制逻辑,抽奖界面一次能够
显示的信息是有限制的,比如设置3等奖中奖人数
为50人,如果同时将50个抽奖信息在屏幕上滚动,
那么每个信息将会被缩放到很小,甚至很难看清楚,
实际应用中通常需要根据使用者的屏幕分辨率确定
则,这样几块逻辑的综合将会非常的复杂。本文的业
务处理逻辑伪代码如下:
首先判断当前动作类别(开始抽奖l解说抽奖)
i 连续抽奖&&当前等级抽奖完成)
{
i 逆j- 抽奖)
逆序获取当前最后一次奖项的抽奖基本信息
else
顺序获取当前最后一次奖项的抽奖基本信息
)
抽奖数据、抽奖基本信息异常处理
根据是否连续抽奖来获取抽奖等级及中奖人数
等关键信息
调用本文第 节中的抽奖算法开始抽奖
}else
{
抽奖数据保存
已巾奖数据的处理
抽奖界面控制——是否允许继续抽奖将根据当
前抽奖是否完成以及是否连续抽奖的业务逻辑共同
决定;
}
3.4界面设计
抽奖软件的界面设计重点包含两部分内容:其
一
是抽奖流程的人机交互方式,如何能够更加符合
操作人员的习惯,使得整体的抽奖过程能够便捷简
单,有计算机基础的人不需要任何培训既可以直接
操作使用;另外一个是需要界面风格的灵活替换,包
括图片内容及图片的展示方式,不同的单位、不同的
活动对于界面的要求是不一样的,都需要根据自己
的特点来定制,这就要求抽奖系统需要提供界面风
格的设置机制,不能每次都由专业人员来修改代码
及重新编译 1。
本文针对界面要求从两个方面来进行设计,针
对抽奖流程的人机交互方式,通过与相关操作人员
的多次沟通以及demo的演示及试用,获得了本文
系统设计中的业务主流程的主体交互方式,针对每
一
个部分的操作,还尽量考虑到操作的简单便捷,比
如针对抽奖信息录入这个小功能点中,设计了两种
输入方式——其一是信息输入完成直接敲回车键,
完成信息录入;其二是信息录入完成用鼠标点击确
定按钮,完成信息录入。且在卜述两种操作方式完成
后,信息录入文本框信息将会自动清空,供下一次的
工程技术研究与应用主持:李艳
信息录入。这里的录入方式及满足了操作人员的习 储模型、规则控制原理、人机交互设计等方面对相关
惯又兼顾了扫描输入的特点;针对界面风格设置提
软件设计有一定的借鉴作用。
供了两种模式,其一是不更换资源,其次是更换资
源,前者主要在程序基础设置中预设值了集中风格 【参考文献】
模式,通过选择风格应用,将实现资源的重新加载,
【1】(英)Ian Sommerville.软件工程IM】.北京;机械工业出版社,
展示不同的风格,此种方式不能从根本上修改内容,
2011.
不能满足实际使用情况,故提供了另外一种直接更
【2】(美)内格尔(Nage1.c)等.c≠≠高级编程【M】.北京;清华大学
换资源的方式——按照统一的命名规则,将需要替
出版社.2008.
换的图片资源等放入到指定的位置,重新加载应用
[3】吴鹏,适应多环境抽奖模型的设计与实现U1.中文信息,
程序即可实现资源的替换。
2014(09);289—290.
4 结 语
[4】( ̄)Donald E.Knuth.计算机程序设计艺术【M】.北京;清华
本文设计的抽奖系统,主要依据某国有大型企
大学出版社.2002.
业抽奖软件的需求,针对性的进行了系统设计及编
[5】维基百科.人机交互.http;//zh.wikipedia.org/wiki/A ̄机交
码实现,最终在各大分厂得到了广泛使用,得到了用
互
户的一致好评,其中涉及到的一些设计思路,比如存
(上接40页)
校训是高度凝练的字句,形成或者写出一个好
为此,学校可结合多种方式,提高对校训的宣传 的校训可能不太容易,毕竟现在很多大学没,,f-/E ̄
力度,提升学校的文化氛围。比如在新生的录取通知 的历史底蕴,尤其是高职院校,尚未形成自己独有的
书上印写校训;在新生入学时,组织学生参观校史 精神,学校定位和学科也还没有特色。但这并不重
馆,结合历史事件,讲述校训的溯源,培养学生的爱 要,校训贵在实践。以实际行动落实校训,哪怕只是
校情结;将校训中表现的精神,以读物、漫画、戏剧等 落实校训中的一个字一个词,哪怕只是完成一件很
形式,传递给学生;在校庆日等重要节日,开展校史
小的事,只要认真、坚定地执行,习惯成自然,久而久
校训系列讲座;将学校发展过程中体现校训精神的 之,校训会真正转化成全校师生共同遵守的准则。
趣闻轶事、师生事迹整理出来,以小故事的形式展示 总之,充分发挥校训的作用,使其成为全校师生
给学生;利用学校网站、校园广播电视、校报等宣传
的精神追求,把校训真正写进学生心里,是高校学子
媒介提高校训的知晓度和接受度;在其他的文化课 的一份期许,也是高校管理者的一种责任。若要达到
程中渗透校训文化内容 。 这一目标,唯有行动才是最有效的途经。
3.3 以实际行动落实校训
“求实”“创新”“勤俭”是高校校训中的高频词 【参考文献】
汇。“求实”意在告诫人们为人为学要实事求是、
口天鹏基于 抽奖系统设计与实现
脚踏
【I】罗竹风.汉语大辞典[Z】.北京:汉语大词典出版社.
实地,“创新”旨在引导人们不要被常规局限,要有创
【2]邓晖.校训雷同,缺失的是什么?【N】.光明日报,
装备制造与教育第二十八卷
2013—3—6.
造新事物新思想的意识,“勤俭”意在强调人们办学
[3】教育部思想政治工作司组编.百所高校校训、校徽、校歌汇
要勤勉节俭,但反观高校,科研学术造假屡见不鲜,
编【G】.北京:中国人民大学出版社,2014.
教师文章抄袭常有发生,教学墨守成规、缺乏新意已
[4】廖靖宇.中国大学校训文化的研究[D】.中南大学,2005.
成为课堂顽疾,超大校园、豪华大门、观光电梯,不透
I 5】大学校训该说些什么lowoq.http://opinion.china.com.
明的高校办学成本层出不穷……种种现象,实在与
cn/opinion 19
——
105519.html
“求实”“创新”“勤俭”的初衷相距甚远。如此行动,校
[6】竺柯桢名言名句【OB/OL].http://www.1z1 3.cn/mingren—
训喊得再响亮,也难有说服力。
mingyan/21 173.html
版权声明:本文标题:基于C#抽奖系统设计与实现 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1719002841a747584.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论