软件工程项目基于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设计说明
贴出你认为的关键代码或者设计图,并进行解释
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实现的更多相关文章
- 小学生四则运算出题软件-基于java控制台的实现
.题目描述: 1. 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n 10 -o Exercise.txt 将生成10个题目. 2. 使用 -r 参数控制题目中数值(自然数.真分数和 ...
- 软件设计之基于Java的连连看小游戏(二)——游戏基础界面的制作及事件的添加
上次完成到游戏首页的制作,今天完成了游戏基础界面的制作以及事件的简单添加.由于功能尚未完全实现,因此游戏界面的菜单列表只是简单地添加了一下,其余菜单列表以及倒计时等在后续的制作中逐一完善. 1.首先在 ...
- 软件设计之基于Java的连连看小游戏(三)——所有功能的实现
新年快乐!期末接二连三的考试实在太忙了忘记连连看没有更新完,今天想要学习生信时才发现.所以这次直接把连连看所有功能全部放上. 在传统的连连看的基础上,我增加了上传头像的功能,即可以自行上传图片作为游戏 ...
- 基于java平台的常用资源整理
这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...
- 基于Java的打包jar、war、ear包的作用与区别详解
本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下 以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...
- 这里整理了基于java平台的常用资源
这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...
- 基于java的设计模式入门(1)——为什么要学习设计模式
大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康. 过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了.提高自己,无非就有两种方式,一是看书学习,二是 ...
- Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
- 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写
基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...
随机推荐
- proc
1. /proc 下文件的内容是动态创建的,当文件可写时可用作控制和配置目的. 2. 在某个进程读取 /proc 文件时,内核会分配一个内存页,驱动程序通过这个内存页将数据返回到用户空间 (read( ...
- 常用数据库ID格式
转自:http://www.biotrainee.com/thread-411-1-1.html 常用数据库 ID ID 示例 ID 来源 ENSG00000116717 Ensemble ID GA ...
- lua 中的点、冒号与self
[lua 中的点.冒号与self] lua编程中,经常遇到函数的定义和调用,有时候用点号调用,有时候用冒号调用. girl = {money = 200} function girl.goToMark ...
- 使用jQuery可能出现的错误
- 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 ...
- PS切图导出代码后出现的图片布局散乱的解决方法——table布局
前言: 一般来说,大部分美工PS切图后导出的都是使用PS默认的table布局的页面,出现最多的异常是上传代码,替换图片后,发现图片布局散乱,完全不是想要的效果.轻微的是浏览器不兼容,只有部分浏览器可以 ...
- 兼容谷歌、火狐、IE7.0以上浏览器div+css实现的带有蒙版的半透明弹窗效果[xyytit]
整个页面变暗的蒙版效果,带有半透明边框的弹窗,用在网站里一定很酷. 最初见与奢饰品购物网站YMALL,后边研究了下,自己做了这个实例. 技术要点:css中几种透明样式的使用.不同的样式在不同的浏览器中 ...
- C盘满了如何清理
一.C:\inetpub\logs\LogFiles\ 中的日志文件可以全部删除二.C盘上右键>属性>磁盘清理 和 系统磁盘清理三.百度下载:魔方清理大师>逐项清理四.卸载较大的不常 ...
- Linux xxd命令
一.简介 xxd 命令用于使用二进制或十六进制格式显示文件内容,可以将指定文件或标准输入以十六进制转储,也可以把十六进制转储转换成原来的二进制形式. 二.选项 http://www.cnblogs.c ...
- Spring.NET学习笔记6——依赖注入(应用篇)
1. 谈到高级语言编程,我们就会联想到设计模式:谈到设计模式,我们就会说道怎么样解耦合.而Spring.NET的IoC容器其中的一种用途就是解耦合,其最经典的应用就是:依赖注入(Dependeny I ...