团队作业第六次—团队Github实战训练
作业格式
- 课程名称:软件工程1916|W(福州大学)
- 作业要求:团队作业第六次—团队Github实战训练
- 团队名称:男上加男,强人所男
- 作业目标:搭建一个相对公平公正的抽奖系统
- Github地址:Live-Project
- 团队成员:
队员学号 | 队员姓名 | 个人博客地址 | 备注 |
---|---|---|---|
221600427 | Alicesft | https://www.cnblogs.com/LinkF/ | |
221600429 | 哈噻 | https://www.cnblogs.com/liujianhao21/ | |
221600436 | Xu~ | https://www.cnblogs.com/xzh0517/ | |
221600437 | AWX | https://www.cnblogs.com/hawx/ | 队长 |
221600438 | ZHC | https://www.cnblogs.com/mzhc/ | |
221600440 | 小冰 | https://www.cnblogs.com/xiaobing666/ | |
221600441 | 拉哇吉 | https://home.cnblogs.com/u/banglc/ |
组员分工
-
221600436 && 221600441
- 抽奖算法设计与开发
- 抽奖算法的测试
- 随笔编写
-
221600437
- 项目规划,图表制作
- 项目GUI设计,读取实例Condition类
- 项目整合
-
221600438
- 过滤算法设计与开发
- 过滤算法的测试
- 过滤GroupMemberList,剔除不符合抽奖规则者
-
221600440
- 文件的读取块的代码编写
- 文件数据的处理
-
221600429
- 将读取的文件数据整合并创建待筛选的GroupMemberList
- GroupMember类 和 Channel类编写
-
221600427
- 项目前期规划
- 项目样例文件分析,寻找
- 对待测试文件的人工分析整理
- 对项目函数的测试
- 整合项目的测试
类图
我们在此次实训作业发布那会儿便开始进行讨论,基本确立了设计的类图
设计数据结构说明
在抽奖流程中设计到的数据结构,我们也经过了比较激烈的讨论,得到以下结果(可能与具体实现稍有出入)
设计流程
我们讨论所得的设计流程图如下,为了让每个人都切实参与到实训当中,我们对流程做了详细的设计划分,在实际的设计当中也不断改进,不断完善(与最后的设计可能稍有出入)
Github提交日志截图
程序运行截图
Windows7 SP1
WIN10 1809
程序运行环境
Windows 7 以上 具有 .Net 4.6.1 运行环境
GUI界面
我们主要采用C#的WPF进行界面设计,(马后炮版的)进阶海报也通过了学习了C#的Graphics进行绘制
抽奖选项
抽奖结果
- 基础需求在限定时间内实现了
- 马后炮版的海报生成稍晚了一步o(╥﹏╥)o(也已经发布在release v1.1版本中了)
关于
(马后炮)进阶海报实现
鼓励有想法且有用的功能
作为一个人均脸黑的团队,我们认为非洲人关怀机制很重要。这种关怀大概就是在聊天记录中的内容(话题外)关于自己对抽奖系统的吐槽之类的内容可能被系统所识别,“系统”(后称“阿奖”)认为你太可怜了,偶尔给你点甜头;或者阿奖觉得你怎么一直说它怎么怎么不公平,太差劲了,那就继续脸黑下去吧。让抽奖系统稍微的具有自我判断。
遇到的困难及解决方法
-
221600427
- 困难:测试数据匮乏
- 解决方法 :自己设置少量测试数据,从网络上获取可用测试数据
-
221600429
- 困难:成员类与信息类的双向链接较为困难,特别是如果采用指针时,逻辑较为会混乱
- 解决方法:采用C#的Dictionary类,类似与Java的Map类,可以直接将一个成员和他的多条信息互相链接
-
221600436
- 困难:抽奖算法设计与实现
- 解决方法 :网上参考他人的抽奖算法,加入与组员讨论的idea
-
221600437
- 困难:团队成员分工及接口设计
- 解决方法 :网上参考他人的做法以及采用UML等方法,先做出类图等,让大家依据实现约定好的规则来实现各自功能
-
221600438
- 困难:设计筛选条件与接口问题冲突
- 解决方法:撰写需求用例文档,尽可能准确地描述应该存在的问题以及解决方案。
-
221600440
- 困难:聊天记录文件中纷繁复杂的字段的读取和预处理
- 解决方法 :学习C#正则表达式的用法,将字段读取统一处理,先用群昵称对应身份,对于在同一账号有不同身份和名字的情况,跟队友商量在后续对结构化数据再加工,如此更方便
-
221600441
- 困难:如何确定足够好的随机数
- 解决方法 :在网上参考了LCG算法,对于抽奖的人数,设计相对较好的参数,初始种子是用RNGCryptoServiceProvider类随机生成的。
组员贡献比例
队员学号 | 队员姓名 | 个人博客地址 | 贡献比例 |
---|---|---|---|
221600437 | AWX | https://www.cnblogs.com/hawx/ | 16 |
221600429 | 哈噻 | https://www.cnblogs.com/liujianhao21/ | 15 |
221600440 | 小冰 | https://www.cnblogs.com/xiaobing666/ | 15 |
221600436 | Xu~ | https://www.cnblogs.com/xzh0517/ | 14 |
221600441 | 拉哇吉 | https://home.cnblogs.com/u/banglc/ | 14 |
221600438 | ZHC | https://www.cnblogs.com/mzhc/ | 14 |
221600427 | Alicesft | https://www.cnblogs.com/LinkF/ | 12 |
PSP表格
- 221600427
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
- Estimate | 估计这个任务需要多少时间 | 310 | 205 |
Development | 开发 | 40 | 30 |
- Analysis | 需求分析 (包括学习新技术) | 15 | 20 |
- Design Spec | 生成设计文档 | 15 | 10 |
- Design Review | 设计复审 | 40 | 20 |
- Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 35 | 25 |
- Design | 具体设计 | 20 | 15 |
- Coding | 具体编码 | 20 | 25 |
- Code Review | 代码复审 | 30 | 15 |
- Test | 测试(自我测试,修改代码,提交修改) | 30 | 10 |
Reporting | 报告 | ||
- Test Report | 测试报告 | 30 | 15 |
- Size Measurement | 计算工作量 | 15 | 10 |
- Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 15 | 10 |
合计 | 305 | 205 |
- 221600429
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
- Estimate | 估计这个任务需要多少时间 | 300 | 330 |
Development | 开发 | ||
- Analysis | 需求分析 (包括学习新技术) | 30 | 25 |
- Design Spec | 生成设计文档 | 15 | 10 |
- Design Review | 设计复审 | 20 | 20 |
- Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
- Design | 具体设计 | 15 | 10 |
- Coding | 具体编码 | 90 | 110 |
- Code Review | 代码复审 | 30 | 20 |
- Test | 测试(自我测试,修改代码,提交修改) | 60 | 45 |
Reporting | 报告 | ||
- Test Report | 测试报告 | 15 | 15 |
- Size Measurement | 计算工作量 | 10 | 5 |
- Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 300 | 330 |
- 221600436
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
- Estimate | 估计这个任务需要多少时间 | 295 | 245 |
Development | 开发 | ||
- Analysis | 需求分析 (包括学习新技术) | 30 | 25 |
- Design Spec | 生成设计文档 | 15 | 10 |
- Design Review | 设计复审 | 20 | 20 |
- Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
- Design | 具体设计 | 15 | 10 |
- Coding | 具体编码 | 90 | 65 |
- Code Review | 代码复审 | 30 | 15 |
- Test | 测试(自我测试,修改代码,提交修改) | 60 | 45 |
Reporting | 报告 | ||
- Test Report | 测试报告 | 15 | 15 |
- Size Measurement | 计算工作量 | 10 | 5 |
- Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 295 | 245 |
- 221600437
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
- Estimate | 估计这个任务需要多少时间 | 360 | 340 |
Development | 开发 | ||
- Analysis | 需求分析 (包括学习新技术) | 30 | 30 |
- Design Spec | 生成设计文档 | 60 | 60 |
- Design Review | 设计复审 | 20 | 15 |
- Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
- Design | 具体设计 | 15 | 5 |
- Coding | 具体编码 | 90 | 120 |
- Code Review | 代码复审 | 30 | 15 |
- Test | 测试(自我测试,修改代码,提交修改) | 60 | 30 |
Reporting | 报告 | ||
- Test Report | 测试报告 | 15 | 15 |
- Size Measurement | 计算工作量 | 10 | 5 |
- Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 360 | 340 |
- 221600438
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
- Estimate | 估计这个任务需要多少时间 | 310 | 315 |
Development | 开发 | ||
- Analysis | 需求分析 (包括学习新技术) | 30 | 20 |
- Design Spec | 生成设计文档 | 60 | 30 |
- Design Review | 设计复审 | 10 | 30 |
- Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 15 | 10 |
- Design | 具体设计 | 20 | 40 |
- Coding | 具体编码 | 80 | 60 |
- Code Review | 代码复审 | 30 | 60 |
- Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | ||
- Test Report | 测试报告 | 15 | 15 |
- Size Measurement | 计算工作量 | 10 | 5 |
- Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 310 | 315 |
- 221600440
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
- Estimate | 估计这个任务需要多少时间 | 325 | 370 |
Development | 开发 | ||
- Analysis | 需求分析 (包括学习新技术) | 60 | 60 |
- Design Spec | 生成设计文档 | 30 | 30 |
- Design Review | 设计复审 | 20 | 30 |
- Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
- Design | 具体设计 | 10 | 10 |
- Coding | 具体编码 | 100 | 120 |
- Code Review | 代码复审 | 20 | 30 |
- Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | ||
- Test Report | 测试报告 | 15 | 15 |
- Size Measurement | 计算工作量 | 10 | 5 |
- Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 20 |
合计 | 325 | 370 |
- 221600441
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
- Estimate | 估计这个任务需要多少时间 | 180 | 245 |
Development | 开发 | ||
- Analysis | 需求分析 (包括学习新技术) | 30 | 35 |
- Design Spec | 生成设计文档 | 15 | 10 |
- Design Review | 设计复审 | 30 | 30 |
- Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
- Design | 具体设计 | 15 | 10 |
- Coding | 具体编码 | 90 | 65 |
- Code Review | 代码复审 | 30 | 15 |
- Test | 测试(自我测试,修改代码,提交修改) | 60 | 45 |
Reporting | 报告 | ||
- Test Report | 测试报告 | 15 | 15 |
- Size Measurement | 计算工作量 | 10 | 5 |
- Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 325 | 265 |
抽奖算法设计
抽奖时获取符合抽奖资格的用户的发言次数并乘上一个随机数做为权重,这样一来就算发言少也不一定就会中奖率低,保证随机性。然后按顺序将每个用户的权重构成一个数轴(以一维数组保存),生成一个随机数,查找随机数落在哪个区间并判断此人是否已中奖,若未中奖,则将此人加入中奖者列表。