团队做业第六次-团队Github实战训练

2021年11月25日 阅读数:3
这篇文章主要向大家介绍团队做业第六次-团队Github实战训练,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

格式描述git


团队分工github

学号 姓名 负责工做 贡献比例
221600123 林信康 文件初步处理,消息类建立 19%
221600124 林梓铭 文件初步过滤,代码初步整合 19%
221600125 刘杰 辅助文件过滤,口令设置 18%
221600127 卢成钢 抽奖算法的设计,辅助代码整合 26%
221600128 王华峰 GUI设计、代码汇总、博客 18%

github提交日志截图 正则表达式


程序运行截图 算法


程序运行环境数据库

本次实训的环境为windows系统下 Visual Studio 2017,c#


GUI界面 windows


基础功能实现数组

消息类Message具备4个成员变量用户名name,帐号num,时间time,消息message。 文件处理类FileProcessing负责文件读取。构造函数传入文件路径path。read函数用正则表达式执行读取操做,并存入list中。浏览器

Ifnoassistant过滤助教和系统信息和教师:经过正则表达式筛选出符合条件人 InsertQnum向哈希表中插入数据:符合抽奖条件的人才能插进去 GetArray给予客户端调用得到参与获奖的名单:返回符合条件的人的数组 Getnum给予抽奖算法调用的可参与的人数:返回符合抽奖的人数,用于抽奖算法 filter筛选算法:整合以上加另外一个同窗的算法得出符合条件的人网络

抽奖发言时段 if (Qtime.CompareTo(Begingtime) >= 0&& Qtime.CompareTo(Endtime)<=0) return true; 用文件处理提取出当前时间来判断是否符合抽奖时间段只需比较字符串既可

设置参与抽奖关键词,全部发某个关键词的用户可参与,好比:#我要参与换组活动#、#我要红包#、#我爱软工实践#、#我要当学习委员# Regex regex = new Regex(@"#+\w+#");//构造方法里面的参数就是匹配规则 简单的正则表达匹配出字符串和从UI界面读取的口令进行比较


附加功能实现

抽奖过程能够描述为从0~N-1(N为奖券总数)的整数中抽取一个或多个随机整数的过程。除了抽奖算法和抽奖过程须要公开透明外,一个公平的抽奖过程所使用的随机数应具备以下的性质:

\1. 随机数的生成过程不须要依赖用户对本网站或者任何第三方平台的信任

\2. 事先没法预测

\3. 过后公开可查

\4. 几率上知足均匀分布

为了保证性质1~3,咱们选择使用比特币区块的哈希值来做为咱们的随机数种子;性质4只要选取经常使用的哈希函数便可保证。

假设奖券编号是连续发放的整数。咱们的的抽奖算法以下:

选取距离指定时刻(即抽奖时间)最近的被挖出的比特币区块的哈希值做为随机数种子,记做 S。

用 SHA-256 算法计算 S 的的哈希值 H,而后把 截取H的后三位看成十六进制数转换为十进制数L。

W = L % N 为中奖的奖券编号,其中 N 为总奖券数量,%为求余数。

如需抽出 M 个中奖者,则设新种子为 S = H 而且重复 二、3 两步,直到抽出 M 个不重复的中奖者为止。

上述抽奖步骤其实是用彻底公开可验证的方法生成了一个或多个不可控的随机数,其中最重要的随机数种子由比特币区块的性质来保证它知足咱们全部的要求。只要知道了咱们公布的抽奖时间和发放的奖券总数,任何人均可以在奖券中止发放后计算出同样的伪随机数,从而实现了可验证的公平抽奖结果。

此函数的输入参数分别是:min_n 为奖券编号中最小的(一般咱们会把它设成0);max_n 为奖券编号中最大的(取决于参与抽奖的用户数);num_win 为指定的中奖人数;key 为指定的抽奖时间后被挖出的第一个比特币区块的哈希值。

其中的 key 值咱们会在开奖后公式,咱们是根据比特币区块浏览器肯定(https://btc.com)或者你们也能够本身去任何比特币信息查询网站查到相应的区块哈希值。

咱们的抽奖结果能保证彻底公平吗?

在使用了以上方法生成中奖号码后,暗箱操做的可能性已经大大下降了,可是咱们仍然没法彻底证实咱们的抽奖结果是公平的,缘由在于咱们没法证实发放的奖券总数的正确性。出于保护用户隐私的目的,咱们不能公开每一位参与抽奖的用户的信息,因此理论上来讲,咱们能够经过增发不存在的奖券来下降用户的中奖几率。为此咱们过滤掉了一些教师和助教、不常发言的僵尸用户等。而若是使用聊天记录做为抽奖的依据,那么你们能够经过查询相关的聊天记录来查看奖券状况。若是奖券的发放有什么异常,你们随时均可以发现。

还有一种改变中奖几率的方式,就是本身参与比特币挖矿,若是挖出了区块而且算出本身没有中奖,能够抛弃这个区块不上报,以期待在没有被其余人抢先的状况下下次挖出的区块可让本身中奖。然而,挖出一个有效比特币区块的奖励是 12.5 BTC,价值约为 50k USD 以上,矿工间竞争激烈也没有人能保证不被其余矿工抢先,因此有点理智的人都不会干这么奇葩的事情。


遇到的困难和解决方法

lxk:在文件读取时上下文不匹配出现错位,改bug花了很多精力。最后多引入了几个标志变量来解决这方面有待改进。

lj:学习c#的正则表达式花费了大量的时间,虽然最总结果能运行,不过省下这时间能够为团队作出更多贡献。

lzm:代码整合时,出现接口不匹配问题,最后匹配一致花了很多时间,下次写代码必定要先商量号接口

lcg:c#爬虫爬取比特币哈希值时,因为手机端热点网络传输与宽带网络传输有差别,致使爬取的哈希值出现了乱码的状况,搞清问题所在却很难具体解决方案,网络上的资料也很是少

whf:第一次进行分开代码训练在整合的时候手忙脚乱不知所措,最后几我的齐心合力花了大量时间才勉强满意。


一句话吐槽

lxk吐槽:若是再多给我10个小时,那么我超级强

lzm吐槽:若是再多给我一次机会,那么我必定好好学github

lj吐槽:若是再来一次,那么我要换老师

lcg吐槽:若是网页不乱码,那么我早就下班了

whf吐槽:若是当初好好学c#,那么我界面画的超好


组员的贡献比例

学号 姓名 贡献度
221600123 林信康 18
221600124 林梓铭 18
221600125 刘杰 18
221600127 卢成钢 24
221600128 王华峰 22

我的PSP表格

221600123_林信康

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
•Estimate • 估计这个任务须要多少时间 450 520
Development 开发
• Analysis • 需求分析 (包括学习新技术) 60 60
• Design Spec • 生成设计文档 60 50
• Design Review • 设计复审 30 40
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 40
• Design • 具体设计 50 60
• Coding • 具体编码 50 60
• Code Review • 代码复审 40 50
• Test • 测试(自我测试,修改代码,提交修改) 30 50
Reporting 报告
• Test Report • 测试报告 60 60
• Size Measurement • 计算工做量 10 10
• Postmortem & Process Improvement Plan • 过后总结, 并提出过程改进计划 30 40
合计 610 720

221600124_林梓铭

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
•Estimate • 估计这个任务须要多少时间 450 520
Development 开发
• Analysis • 需求分析 (包括学习新技术) 60 60
• Design Spec • 生成设计文档 60 50
• Design Review • 设计复审 30 40
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 40
• Design • 具体设计 50 60
• Coding • 具体编码 50 60
• Code Review • 代码复审 40 50
• Test • 测试(自我测试,修改代码,提交修改) 30 50
Reporting 报告
• Test Report • 测试报告 60 60
• Size Measurement • 计算工做量 10 10
• Postmortem & Process Improvement Plan • 过后总结, 并提出过程改进计划 30 40
合计 460 530

221600125_刘杰

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
•Estimate • 估计这个任务须要多少时间 450 520
Development 开发
• Analysis • 需求分析 (包括学习新技术) 60 60
• Design Spec • 生成设计文档 60 50
• Design Review • 设计复审 30 40
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 40
• Design • 具体设计 50 60
• Coding • 具体编码 50 60
• Code Review • 代码复审 40 50
• Test • 测试(自我测试,修改代码,提交修改) 30 50
Reporting 报告
• Test Report • 测试报告 60 60
• Size Measurement • 计算工做量 10 10
• Postmortem & Process Improvement Plan • 过后总结, 并提出过程改进计划 30 40
合计 645 710

221600127_卢成钢

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
•Estimate • 估计这个任务须要多少时间 450 520
Development 开发
• Analysis • 需求分析 (包括学习新技术) 60 60
• Design Spec • 生成设计文档 60 50
• Design Review • 设计复审 30 40
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 40
• Design • 具体设计 50 60
• Coding • 具体编码 50 60
• Code Review • 代码复审 40 50
• Test • 测试(自我测试,修改代码,提交修改) 30 50
Reporting 报告
• Test Report • 测试报告 60 60
• Size Measurement • 计算工做量 10 10
• Postmortem & Process Improvement Plan • 过后总结, 并提出过程改进计划 30 40
合计 500 650

221600128_王华峰

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
•Estimate • 估计这个任务须要多少时间 450 520
Development 开发
• Analysis • 需求分析 (包括学习新技术) 60 60
• Design Spec • 生成设计文档 60 50
• Design Review • 设计复审 30 40
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 40
• Design • 具体设计 50 60
• Coding • 具体编码 50 60
• Code Review • 代码复审 40 50
• Test • 测试(自我测试,修改代码,提交修改) 30 50
Reporting 报告
• Test Report • 测试报告 60 60
• Size Measurement • 计算工做量 10 10
• Postmortem & Process Improvement Plan • 过后总结, 并提出过程改进计划 30 40
合计 450 520