软件工程项目基于java的wc实现

WC软件工程项目JAVA实现博客

github地址:https://github.com/liudaohu/myrepository.git

项目相关要求

·         【编程语言】不限

·         【项目设计】分析并理解题目要求,独立完成整个项目,并将最新项目发布在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.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

原文地址:https://www.cnblogs.com/h309456108/p/9649140.html

时间: 2024-08-28 05:31:34

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

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

这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.thanks. 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化的方式进行配置,所以维护起来相当困难. Gradle:Gradle采用增量构建.Gra

结合自己的项目作业说说做软件工程项目应该如何选择程序设计语言

我们小组的软件工程项目是开发一个简单的即时通讯软件,我们最终选择用Java来开发这个软件.为什么要选择Java呢?首先,Java是一种采用面向对象方法编码的高级语言,相比我们学过的另一种语言——C语言,具有很大的优势.C语言是一种结构化的语言,是面向过程的.下面引用一段文字来说明面向对象相比面向过程的优点: 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而

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

Atitit.提升软件稳定性---基于数据库实现的持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1. 用一个游标last 来指示 (指针表字段last ),麻烦的,不推荐 1 1.2. (简单,推荐)使用循环次数来指示,每循环加1   (字段cirTimes),order by cirtimes 1 4. 表格设计id, cirTimes,createtime,handlerID,recID,d

CSDN Android客户端开发(二):详解如何基于Java用Jsoup爬虫HTML数据

本文参考链接详细介绍如何使用Jsoup包抓取HTML数据,是一个纯java工程,并将其打包成jar包.希望了解如何用java语言爬虫网页的可以看下. 杂家前文就又介绍用HTTP访问百度主页得到html的string字符串,但html的文本数据如果不经过处理就是个文本字符串没有任何效果的.所谓的浏览器就是负责将文本的html"翻译"成看到的界面.在前文有介绍,这个csdn的客户端app分首页.业界.移动.研发.程序员.云计算五大类.以业界为例,http://news.csdn.net/ 

项目日志之基于Java socket的网络通讯

Java API网络类包中的Socket类是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递.我们打算通过Java中基于Socket的网络编程实现一个简单的网络通信程序.这就是我们团队项目(开发一款简单的通讯软件,其基本功能是实现一对一的网络信息通讯,并努力向一对多和多对多靠近)的主要内容. 一.Java socket通信开发原理(查阅资料): 服务器使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端

基于JAVA的简易在线聊天系统,觉得挺自豪的一个项目

项目做的比较多,最近,做的一个项目:基于JAVA的简易在线聊天系统,感觉挺自豪的. 这个项目应用JAVA编程语言实现基于网络的文本交互软件的设计和实现,达到多客户端收发文本消息的交互操作.通过服务器端多线程地监控客户端的登陆和退出,实时接收客户端发出的消息并定向发送到指定客户端,以实现在线实时文本消息传输功能:当服务器端运行时,客户端可以随时登陆和退出:客户端登陆时可以设置个人信息,包括用户名和密码:保持一定的系统稳定性,客户端与服务器端的连接稳定. 这个“基于JAVA的简易在线聊天系统”是我在

带领技术小白入门——基于java的微信公众号开发(包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证)

微信公众号对于每个人来说都不陌生,但是许多人都不清楚是怎么开发的.身为技术小白的我,在闲暇之余研究了一下基于java的微信公众号开发.下面就是我的实现步骤,写的略显粗糙,希望大家多多提议! 一.申请服务器 1.我购买的是阿里云服务器,购买后要设置一下服务器密码,默认用户名是administrator,购买好后如下: 2.申请好后,copy一下此服务器的IP地址(公有),在本地ping一下看看是否可用,j键盘Win+R,输入cmd,输入ping+IP回车,如下即为成功: 二.配置服务器 1.下载远

基于java web+mysql的登录注册系统

 结对编程二人项目 组员:王刚029   齐凤霞007 项目名称:基于java web+mysql的登录注册系统 软件需求: 1,任何基于B/S或者C/S的软件都离不开基本的登录注册,我们决定采用B/S结构+MySQL数据库来完成基本的登录注册功能2,采用简单的JSP+Servlet+MySQL完成登录,注册功能3,登录,注册界面信息的回显,数据格式的校验功能 说明: 1,采用MVC模式,降低了代码的耦合性整体架构:>jsp显示页面和回显数据>Servlet负责处理jsp提交的数据>Se

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

基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作量日益变大,而传统的人工管理方式已经远远不能满足现在旅游的服务方式.传统的旅游方式经分析其有诸多的缺陷,存在数据维护效率低下,不易保管,容易丢失和出错.同时查询也不方便,劳动力成本过高导致的旅游资源信息不方便,也在一定程度上导致了对各种信息反应缓慢,容易丧失商机.为了弥补上述缺陷,便于开展旅游预订工