团队作业第六次—团队Github实战训练

作业格式

队员学号 队员姓名 个人博客地址 备注
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

抽奖算法设计

抽奖时获取符合抽奖资格的用户的发言次数并乘上一个随机数做为权重,这样一来就算发言少也不一定就会中奖率低,保证随机性。然后按顺序将每个用户的权重构成一个数轴(以一维数组保存),生成一个随机数,查找随机数落在哪个区间并判断此人是否已中奖,若未中奖,则将此人加入中奖者列表。

posted @ 2019-04-22 20:48  NSJN  阅读(227)  评论(0编辑  收藏  举报