软件工程项目基于java的wc实现
WC软件工程项目JAVA实现博客
github地址:https://github.com/liudaohu/myrepository.git
功能实现
· -w 统计单词数
-c 统计字符数
-l 统计行数
-a 统计复杂数据
-s 递归处理
-v 可视化窗口
项目相关要求
· 【编程语言】不限
· 【项目设计】分析并理解题目要求,独立完成整个项目,并将最新项目发布在Github上。
· 【项目测试】使用单元测试对项目进行测试,并使用插件查看测试分支覆盖率等指标。
· 【源代码管理】在项目实践过程中需要使用Github管理源代码,代码有进展即签入Github。签入记录不合理的项目会被助教抽查询问项目细节。
- 【博客发布】按照要求发布博客,利用在构建之法中学习到的相关内容,结合个人项目的实践经历,撰写解决项目的心路历程与收获。博客与Github项目明显不符的作业将取消作业成绩。
遇到的困难及解决方法
- 对于项目要求的不理解,例如在命令行的实现等问题
- 向经验丰富的同学请教
- 已解决
- 大体明白需求
-
- 实现-w功能时,原想使用read()方法,但返回参数是int,不方便判断
- 改用readline()方法,并使用正则表达式实现
- 已解决
- 对正则表达式的使用更加熟悉
-
- 仍希望挑战用read()方法实现-w功能
- 强行把read()方法返回的int值转成char,再加到string里面
- 已解决
- 能用多种方法解决问题
-
- 递归实现时发现前面搭建的框架不合理
- 重新构思框架
- 已解决
- 刚开始搭建框架时考虑不周,下次注意
-
- 报错时找不到错误源
- 对不同报错区别处理
- 已解决
- 下次注意对不同报错区别处理
-
- 计算注释行时,无法处理同行多个块注释的特殊情况
- 尝试构思各种方法,包括设sign,包括数块注释起始和块注释结束的个数等
- 未解决,目前认为堆栈方法可行,但最后没执行
- 挫败感
-
- 计算代码行
- 没有
- 未解决
- 注释行都没计算,代码行就算了
-
- 计算空白行统计结果错误
- 用了多种方法最后定位bug原因在于字符串后是否有空格
- 已解决
- 无法理解,但懂得了妥协的办法,反正字符串后面加个空格就行了
-
- 想把文本框设为只读
- 百度
- 未解决
- 百度不是万能的
-
- 递归执行时覆盖了原结果
- 延时
- 未解决
- 尚未搞懂延时的效果,不过传参部分本来有问题,延时解决不了
-
- 重启电脑后,窗口类无法打开
- 各种尝试,就剩把电脑砸了
- 新建一个项目,把原来代码一个不差地剪过去,已解决
- eclipse文件关联的问题,并非我代码内问题,至今未搞懂
-
关键代码or设计说明
贴出你认为的关键代码或者设计图,并进行解释
1 public static int countl(File file) throws IOException {//数行数 2 BufferedReader br = new BufferedReader(new FileReader(file)); 3 int ln=0; 4 while((br.readLine())!=null) { 5 ln++; 6 } 7 br.close(); 8 return ln; 9 } 10 public static int countc(File file) throws IOException {//数字符数 11 BufferedReader br = new BufferedReader(new FileReader(file)); 12 int cn=0; 13 while((br.read())!=-1) { 14 cn++; 15 } 16 br.close(); 17 return cn; 18 } 19 public static int countw(File file) throws IOException {//数单词数第一种方法 20 BufferedReader br = new BufferedReader(new FileReader(file)); 21 String c; 22 int wn=0; 23 while((c=br.readLine())!=null) { 24 String[] s = c.split("\\W");//按行正则匹配按非词字符拆分成数组 25 wn+=s.length;//数组元素数即为单词数 26 } 27 br.close(); 28 return wn; 29 } 30 public static int countw2(File file) throws IOException {//第二种 31 BufferedReader br = new BufferedReader(new FileReader(file)); 32 String c; 33 int cc; 34 int s=0;//这个sign是关键,表示上一个是否为空 35 int wn=1; 36 while((cc=br.read())!=-1) {//正则只能匹配字符串 37 c=(char)cc+"";//所以把读到的int强行转为char 38 //System.out.println(c); 39 if(c.matches("\\S")&s==0) {s=1;wn++;} 40 if(c.matches("\\s")&s==1) {s=0;}; 41 } 42 br.close(); 43 return wn; 44 } 45 public static int counta(File file) throws IOException {//数空白行 46 BufferedReader br = new BufferedReader(new FileReader(file)); 47 String c; 48 int ccca = 0; 49 while((c=br.readLine())!=null) { 50 c+=" ";//这个原理我也不懂,反正实测不加空格的话会数错 51 String[] s = c.split("\\S"); //就算两个相邻字符也分开,中间为空集 52 if(s.length<=2) {ccca++;}//按需求,一行内只有单一字符算空行 53 } 54 br.close(); 55 return ccca; 56 } 57 public static void scan(File file) throws IOException{ 58 if(file!=null){ 59 if(file.isDirectory()){ 60 File[] fileArray=file.listFiles();//列出里面的文件目录 61 if(fileArray!=null){ 62 for (int i = 0; i < fileArray.length; i++) { 63 //递归调用 64 scan(fileArray[i]); 65 } 66 } 67 } 68 else{ 69 all(file);//这个方法没贴上来,内容很简单的,就是分别调用前面的wcl方法 70 } 71 } 72 } 73 void run(File file) throws IOException {//这个是窗口界面里面的执行实现 74 int ww=Method.countw2(file); 75 int wc=Method.countc(file); 76 int wl=Method.countl(file); 77 int wa=Method.counta(file); 78 wordArea.setText("代码文件路径:"+path+"\n单词数目为:"+ww+"\n字符数目为:"+wc+"\n总行数为:"+wl+ 79 "\n空白行数为:"+wa); 80 }
【注意】不得贴项目无关代码,一经发现,算抄袭。
例:
void selection_sort(int* array, int n) {
for (int i = 0; i < n; ++i) {
int min_idx = n - 1;
for (int j = n - 2; j >= i; --j) {
if (array[j] < array[min_idx])
min_idx = j;
}
if (min_idx != i)
swap(array, min_idx, i);
}
}
PSP
- 实现之前先在PSP中预估时间
- 实施后各个环节实际花费多少时间也请做记录
- 表中有一项: Estimate 指的“预估”这个活动,“预估时间”也是一项任务。
- 例如:我估计自己需要花30分钟来估算出整个项目需要多少时间完成,结果我花了20分钟估算出整个项目需要6个小时完成。Estimate这一项应该在“预估耗时”填写30分钟,实际耗时填写“20”分钟。
- 一级和二级活动的包含关系:
- Planning 这个一级活动包含了1个二级活动(Estimate)
- Development 这个一级活动包含了8个二级活动
- Reporting 这个一级活动包含了3个二级活动
- 大家在记录时间的时候, 只用记录二级活动, 然后把总数加了, 就是相应的一级活动的时间
- 这个时间的长短并不会对分数有直接影响,这是为了大家自己总结。
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 5 | 2 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 120 | 240 |
· Design Spec | · 生成设计文档 | 60 | 0 |
· Design Review | · 设计复审 (和同事审核设计文档) | 60 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 0 |
· Design | · 具体设计 | 60 | 120 |
· Coding | · 具体编码 | 180 | 720 |
· Code Review | · 代码复审 | 60 | 120 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 60 | 120 |
· Size Measurement | · 计算工作量 | 60 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 60 |
合计 | 865 | 1452 |
PSP2.1 Markdown Source
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|-----------------------------------------|-----------------------------------------|------------------|------------------|
| Planning | 计划 | | |
| · Estimate | · 估计这个任务需要多少时间 | | |
| Development | 开发 | | |
| · Analysis | · 需求分析 (包括学习新技术) | | |
| · Design Spec | · 生成设计文档 | | |
| · Design Review | · 设计复审 (和同事审核设计文档) | | |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | | |
| · Design | · 具体设计 | | |
| · Coding | · 具体编码 | | |
| · Code Review | · 代码复审 | | |
| · Test | · 测试(自我测试,修改代码,提交修改) | | |
| Reporting | 报告 | | |
| · Test Report | · 测试报告 | | |
| · Size Measurement | · 计算工作量 | | |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | | |
| 合计 | | | |
记录自己的学习进度条(每周追加)
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 500 | 500 | 5 | 5 | 熟悉x语言1、2、3特性 |
2 | 1000 | 1500 | 12 | 17 | 通过练***x,掌握了xxx用法 |
… |
参考
- 项目博客模板:http://www.cnblogs.com/vertextao/p/7469789.html
- 别人的博文工
- http://www.cnblogs.com/pramy/p/9607743.html
- https://www.jb51.net/article/102424.htm
- https://www.cnblogs.com/LFBlog/p/6240906.html
- https://blog.csdn.net/lxasmall_white/article/details/78649747
- https://blog.csdn.net/Rookie_Or_Veteran/article/details/78151513