软件工程项目基于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) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...
随机推荐
- Python实现的常用排序方法
1.冒泡排序,相邻位置比较大小,将比较大的(或小的)交换位置 def maopao(a): for i in range(0,len(a)): for j in range(0 ...
- django通过url传递参数(编辑操作页面)
在做到编辑部分时,想到的办法是在编辑上跳转到页面时给他一个包含唯一标识id的url,然后通过这个url中的id去查询出该条数据,将数据内容显示在编辑页面. 1.编辑按钮 <button on ...
- Python frozenset() 函数
Python frozenset() 函数 Python 内置函数 描述 frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素. 语法 frozenset() 函数语法: ...
- 91. Decode Ways (Array; DP)
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- 【校招面试 之 C/C++】第5题 C++各种构造函数的写法
构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数 ...
- python作业之修改用户配置文件
用户的配置文件如下 backend oldboy school school1 age 21 weight 210 qq 550176565 iphone 139987676backend oldgi ...
- 交叉字符串 · Interleaving String
[抄题]: 给出三个字符串:s1.s2.s3,判断s3是否由s1和s2交叉构成.(洗牌) 比如 s1 = "aabcc" s2 = "dbbca" - 当 s3 ...
- 创建HTML元素的方法
第一种:使用 parent.appendchild()方法 HTML页面 <div id="div1"></div> JS文件 //第一步创建标签元素节点 ...
- 仿微信客户端 帧布局中加入fragment
学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...
- php单点登陆简单实现 (iframe方式)
有四个网站分别为: www.a.com www.b.com www.c.com www.sso.com 需求是如果我们在sso登陆后,其他网站也会显示登陆中,不需要重复登陆,退出时,其他网站也会失效. ...