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. proc

    1. /proc 下文件的内容是动态创建的,当文件可写时可用作控制和配置目的. 2. 在某个进程读取 /proc 文件时,内核会分配一个内存页,驱动程序通过这个内存页将数据返回到用户空间 (read( ...

  2. 常用数据库ID格式

    转自:http://www.biotrainee.com/thread-411-1-1.html 常用数据库 ID ID 示例 ID 来源 ENSG00000116717 Ensemble ID GA ...

  3. lua 中的点、冒号与self

    [lua 中的点.冒号与self] lua编程中,经常遇到函数的定义和调用,有时候用点号调用,有时候用冒号调用. girl = {money = 200} function girl.goToMark ...

  4. 使用jQuery可能出现的错误

  5. 51. N-Queens (Array; Back-Track, Bit)

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  6. PS切图导出代码后出现的图片布局散乱的解决方法——table布局

    前言: 一般来说,大部分美工PS切图后导出的都是使用PS默认的table布局的页面,出现最多的异常是上传代码,替换图片后,发现图片布局散乱,完全不是想要的效果.轻微的是浏览器不兼容,只有部分浏览器可以 ...

  7. 兼容谷歌、火狐、IE7.0以上浏览器div+css实现的带有蒙版的半透明弹窗效果[xyytit]

    整个页面变暗的蒙版效果,带有半透明边框的弹窗,用在网站里一定很酷. 最初见与奢饰品购物网站YMALL,后边研究了下,自己做了这个实例. 技术要点:css中几种透明样式的使用.不同的样式在不同的浏览器中 ...

  8. C盘满了如何清理

    一.C:\inetpub\logs\LogFiles\ 中的日志文件可以全部删除二.C盘上右键>属性>磁盘清理 和 系统磁盘清理三.百度下载:魔方清理大师>逐项清理四.卸载较大的不常 ...

  9. Linux xxd命令

    一.简介 xxd 命令用于使用二进制或十六进制格式显示文件内容,可以将指定文件或标准输入以十六进制转储,也可以把十六进制转储转换成原来的二进制形式. 二.选项 http://www.cnblogs.c ...

  10. Spring.NET学习笔记6——依赖注入(应用篇)

    1. 谈到高级语言编程,我们就会联想到设计模式:谈到设计模式,我们就会说道怎么样解耦合.而Spring.NET的IoC容器其中的一种用途就是解耦合,其最经典的应用就是:依赖注入(Dependeny I ...