软件工程项目基于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.1Personal 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
posted @ 2018-09-14 21:42  六道鹘  阅读(316)  评论(0编辑  收藏  举报