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设计说明

贴出你认为的关键代码或者设计图,并进行解释

 public static int countl(File file) throws IOException {//数行数
BufferedReader br = new BufferedReader(new FileReader(file));
int ln=0;
while((br.readLine())!=null) {
ln++;
}
br.close();
return ln;
}
public static int countc(File file) throws IOException {//数字符数
BufferedReader br = new BufferedReader(new FileReader(file));
int cn=0;
while((br.read())!=-1) {
cn++;
}
br.close();
return cn;
}
public static int countw(File file) throws IOException {//数单词数第一种方法
BufferedReader br = new BufferedReader(new FileReader(file));
String c;
int wn=0;
while((c=br.readLine())!=null) {
String[] s = c.split("\\W");//按行正则匹配按非词字符拆分成数组
wn+=s.length;//数组元素数即为单词数
}
br.close();
return wn;
}
public static int countw2(File file) throws IOException {//第二种
BufferedReader br = new BufferedReader(new FileReader(file));
String c;
int cc;
int s=0;//这个sign是关键,表示上一个是否为空
int wn=1;
while((cc=br.read())!=-1) {//正则只能匹配字符串
c=(char)cc+"";//所以把读到的int强行转为char
//System.out.println(c);
if(c.matches("\\S")&s==0) {s=1;wn++;}
if(c.matches("\\s")&s==1) {s=0;};
}
br.close();
return wn;
}
public static int counta(File file) throws IOException {//数空白行
BufferedReader br = new BufferedReader(new FileReader(file));
String c;
int ccca = 0;
while((c=br.readLine())!=null) {
c+=" ";//这个原理我也不懂,反正实测不加空格的话会数错
String[] s = c.split("\\S"); //就算两个相邻字符也分开,中间为空集
if(s.length<=2) {ccca++;}//按需求,一行内只有单一字符算空行
}
br.close();
return ccca;
}
public static void scan(File file) throws IOException{
if(file!=null){
if(file.isDirectory()){
File[] fileArray=file.listFiles();//列出里面的文件目录
if(fileArray!=null){
for (int i = 0; i < fileArray.length; i++) {
//递归调用
scan(fileArray[i]);
}
}
}
else{
all(file);//这个方法没贴上来,内容很简单的,就是分别调用前面的wcl方法
}
}
}
void run(File file) throws IOException {//这个是窗口界面里面的执行实现
int ww=Method.countw2(file);
int wc=Method.countc(file);
int wl=Method.countl(file);
int wa=Method.counta(file);
wordArea.setText("代码文件路径:"+path+"\n单词数目为:"+ww+"\n字符数目为:"+wc+"\n总行数为:"+wl+
"\n空白行数为:"+wa);
}

【注意】不得贴项目无关代码,一经发现,算抄袭。

例:

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 通过练习xxx,掌握了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

软件工程项目基于java的wc实现的更多相关文章

  1. 小学生四则运算出题软件-基于java控制台的实现

    .题目描述: 1. 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n 10 -o Exercise.txt 将生成10个题目. 2. 使用 -r 参数控制题目中数值(自然数.真分数和 ...

  2. 软件设计之基于Java的连连看小游戏(二)——游戏基础界面的制作及事件的添加

    上次完成到游戏首页的制作,今天完成了游戏基础界面的制作以及事件的简单添加.由于功能尚未完全实现,因此游戏界面的菜单列表只是简单地添加了一下,其余菜单列表以及倒计时等在后续的制作中逐一完善. 1.首先在 ...

  3. 软件设计之基于Java的连连看小游戏(三)——所有功能的实现

    新年快乐!期末接二连三的考试实在太忙了忘记连连看没有更新完,今天想要学习生信时才发现.所以这次直接把连连看所有功能全部放上. 在传统的连连看的基础上,我增加了上传头像的功能,即可以自行上传图片作为游戏 ...

  4. 基于java平台的常用资源整理

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  5. 基于Java的打包jar、war、ear包的作用与区别详解

      本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下   以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...

  6. 这里整理了基于java平台的常用资源

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  7. 基于java的设计模式入门(1)——为什么要学习设计模式

    大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康. 过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了.提高自己,无非就有两种方式,一是看书学习,二是 ...

  8. Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列

    Atitit.提升软件稳定性---基于数据库实现的持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

  9. 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

    基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...

随机推荐

  1. Python实现的常用排序方法

    1.冒泡排序,相邻位置比较大小,将比较大的(或小的)交换位置 def maopao(a):     for i in range(0,len(a)):         for j in range(0 ...

  2. django通过url传递参数(编辑操作页面)

    在做到编辑部分时,想到的办法是在编辑上跳转到页面时给他一个包含唯一标识id的url,然后通过这个url中的id去查询出该条数据,将数据内容显示在编辑页面.   1.编辑按钮 <button on ...

  3. Python frozenset() 函数

    Python frozenset() 函数  Python 内置函数 描述 frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素. 语法 frozenset() 函数语法: ...

  4. 91. Decode Ways (Array; DP)

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  5. 【校招面试 之 C/C++】第5题 C++各种构造函数的写法

    构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数 ...

  6. python作业之修改用户配置文件

    用户的配置文件如下 backend oldboy school school1 age 21 weight 210 qq 550176565 iphone 139987676backend oldgi ...

  7. 交叉字符串 · Interleaving String

    [抄题]: 给出三个字符串:s1.s2.s3,判断s3是否由s1和s2交叉构成.(洗牌) 比如 s1 = "aabcc" s2 = "dbbca" - 当 s3 ...

  8. 创建HTML元素的方法

    第一种:使用 parent.appendchild()方法 HTML页面 <div id="div1"></div> JS文件 //第一步创建标签元素节点 ...

  9. 仿微信客户端 帧布局中加入fragment

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  10. php单点登陆简单实现 (iframe方式)

    有四个网站分别为: www.a.com www.b.com www.c.com www.sso.com 需求是如果我们在sso登陆后,其他网站也会显示登陆中,不需要重复登陆,退出时,其他网站也会失效. ...