Division of Labor:
柯奇豪 : 文本导入、切割文本、数据库处理、活跃度统计
黄毓明 : 切割文本、文本匹配
杨礼亮、丁水源:实现三种不同程度的筛选投票算法
蒋熊、黄志铭:前端界面编写
林翔宇:接口定义、前后端交互
Github:
Program:(unfinish)
程序运行环境:eclipse+mysql
GUI Interface:
- 主界面截图,有设置抽奖和查看抽奖结果两个选项
- 设置抽奖弹窗
- 抽奖有三个选项:普通抽奖,过滤抽奖和深度抽奖。 下面是深度抽奖的运行结果。
Code:
- 文本处理(文本导入,文本切割,文本匹配)
public static void setFileContext(String path) throws Exception {
FileReader fileReader =new FileReader(path);
@SuppressWarnings("resource")
BufferedReader bufferedReader =new BufferedReader(fileReader);
list =new ArrayList<String>();
String str=null;
String term="";
Pattern pattern = Pattern.compile("[0-9]{4}[-][0-9]{1,2}[-][0-9]{1,2}[ ][0-9]{1,2}[:][0-9]{1,2}[:][0-9]{1,2}");
while((str=bufferedReader.readLine())!=null) {
if(str.trim().length()>=0) {
term+=str+" ";
Matcher matcher = pattern.matcher(str);
if(!matcher.find()) {
list.add(term + "\n");
term="";
}
}
for(String item:Inputtext.list.toArray(new String[Inputtext.list.size()])) {
Mysql.matchSort(item);
}
}
// System.out.println(list);
}
-
三种不同程度的筛选投票算法
普通抽奖
private Set<String> namelist=new TreeSet<>();
private int repeat=1;
private String list[];
public void getlist() {}
public void put_Qname()
{
while(repeat!=0)
{
repeat--;
int l=0;
Iterator<String> iter = namelist.iterator();
while (iter.hasNext()) {
list[l]= iter.next();
l++;
}
Random rand = new Random();
int cur=(int)(Math.random()*500);
cur=cur%l;
String QName=list[cur];
System.out.print(QName);
namelist.remove(QName);
}
}
过滤抽奖
public void put_Qname()
{
while(repeat!=0)
{
repeat--;
int l=0;
int f=0;
Iterator<String> iter = namelist.iterator();
while (iter.hasNext()) {
String s=iter.next();
for(int i=0;i<frequent[f];i++) {
list[l]= s;
l++;
}
f++;
}
Random rand = new Random();
int cur=(int)(Math.random()*500);
cur=cur%l;
String QName=list[cur];
System.out.print(QName);
namelist.remove(QName);
}
}
深度抽奖
public void put_Qname()
{
while(repeat!=0)
{
repeat--;
int l=0;
int f=0;
Iterator<String> iter = namelist.iterator();
while (iter.hasNext()) {
String s=iter.next();
for(int i=0;i<frequent[f];i++) {
list[l]= s;
l++;
}
f++;
}
Random rand = new Random();
int cur=(int)(Math.random()*500);
cur=cur%l;
for(int i=0;i<l;i++)
{
if(i==0 && list[i]==list[i+1])
{
list[i]=list[cur];
}
else if(list[i]==list[i+1] && list[i]!=list[i-1])
{
list[i]=list[cur];
}
}
rand = new Random();
cur=(int)(Math.random()*500);
cur=cur%l;
String QName=list[cur];
System.out.print(QName);
namelist.remove(QName);
}
}
Experiences:
-
组员1 黄毓明
困难:
1.前后端数据交互,如何将前端需要计算的数据送到后端,如何将后端计算好的数据送到前端
2.一些写代码时的异常情况处理
解决办法:
1.前后端数据交互正在学习
2.异常情况的话主要还是靠平时的积累,还是要多敲代码啊!
-
组员2 杨礼亮
1.对Java语言不熟,和c语言上的语法虽然相似,但是在一天内写出程序不太现实。
2不知道怎么从数据库中返回数据到代码,所以一直无法得到能参与抽奖人的名单以及相关出现次数。
3没有与负责上一层编码的同学对接好,对于队友设计的相关的结构体内部变量不清晰。
4在讨论中花费了很多时间,一开始对代码无从下手,浪费大量时间
1对Java不熟只能上网搜相关的函数使用
2数据返回目前还没弄好,因为完全不懂怎么调用
3将得到数据的代码先设成一个函数,先编写抽奖算法
- 组员3 林翔宇
- java语言掌握不够,写代码的时候磕磕碰碰
-
不知道怎么进行前后端的数据交互
现在在继续学习java,了解前后端数据交互
-
组员4 丁水源
1.java不熟悉,因此遇到了一些语法上的困难。
2.一开始组长分配给我的任务不熟悉,沟通上出现了一定的偏差。
3.对项目的框架理解不透彻,发生框架理解上的偏差。
4.由于是第一次团体的现场编程,可能在全局和局部以及时间等的把握上出现了些许的mistakes。
1.通过之前学习的知识,再结合上互联网,以及小伙伴的帮助,还是比较顺利地熟悉了java语言。
2.通过和组长的多次交流以及和其他组员的交流,比较顺利地明白了自己的任务。
3.通过互联网以及和组员们交流,能够收获一些对此项目框架的感悟和理解。
4.吸取这次的教训,希望在接下来的实践里,乃至今后的工作、生活里能够更进一步,减少发生这次的错误,力争避免。加油鸭~~
-
组员5 柯奇豪
虽然有一个明确的思路,但是没考虑到每个人的个人情况,导致项目后期没办法进展,自己的能力不够
本次的作业没能够做好,但是接下来希望在有限的时间里尽可能的去学习,带领团队有所成果
-
组员6 蒋雄
做前端过程中首先遇到的是页面图片格式不对,叠加图片过程中出现错误,
通过查了一些开源代码解决了。后来主要的是前后端交互问题,现在还在学习
-
组员7 黄志铭
困难:
1.用html写网页界面,在写到跳转窗口的时候,由于不太熟悉Notepad,所以耗费比较多的时间找跳转小窗口
2.最后的前端与后端的交互最终未能实现,没有提前考虑到这个数据处理问题
3.用Notepad与后端调用存在问题,下次使用得考虑其他编译器,VS之类的。
解决:
1.前端与后端的交互看了很多篇博客,现在可以大致理解操作
2.前端的编译器没有选好,得改用VS或者微信小程序的编译器
Feelings:
如果能够提前打好基础,比如java以及框架的话,那么这次的实践就不会做得这么狼狈和紧张啦。
Evaluation:
以下部分计入个人得分:
PSP Table:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 5 | 30 |
· Estimate | · 估计这个任务需要多少时间 | ||
Development | 开发 | 200 | 305 |
· Analysis | · 需求分析 (包括学习新技术) | 60 | |
· Design Spec | · 生成设计文档 | ||
· Design Review | · 设计复审 | 10 | |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | ||
· Design | · 具体设计 | 15 | |
· Coding | · 具体编码 | 120 | 220 |
· Code Review | · 代码复审 | ||
· Test | · 测试(自我测试,修改代码,提交修改) | ||
Reporting | 报告 | 80 | 135 |
· Test Repor | · 测试报告 | 90 | |
· Size Measurement | · 计算工作量 | ||
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 35 | |
合计 | 470 |
Schedule:
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 500 | 学习VS2017,GitHub使用,复习C++相关知识 | |||
2 | 500 | 1000 | 20 | 阅读《构建之法》,从零开始学Java语言 | |
3 | 2000 | 15 | 50 | 阅读《构建之法》,学习Java,学习墨刀等工具使用 | |
4 | 700 | 2700 | 85 | 复习C++知识,学习STL的使用。 | |
300 | 3000 | 105 | 学习STL相关知识,以及使用VS,Process On 等工具 | ||
6 | 140 | 学会如何设计软件的相关细节。 | |||
7 | 170 | 学会如何写一份完整的“需求分析报告”。 | |||
8 | 190 | 入门java,学会分析任务 | |||
9 | 205 | 熟悉了本软件的框架,为接下来的代码做好准备。 | |||
50 | 3050 | 12 | 217 | 熟悉了ssm框架、Java语言 | |
11 | 250 | 3300 | 熟悉了软件开发过程、java语言 |