zoukankan      html  css  js  c++  java
  • 软件工程作业2

    1、Fork 码云项目

    2.码云项目地址

    https://gitee.com/hellolv/PersonalProject-Java

    3.PSP表格

    PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟)
    Planning 计划 30 30
    · Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 30 50
    Development 开发 650 950
    · Analysis 需求分析 (包括学习新技术) 50 60
    · Design Spec 生成设计文档 20 30
    · Design Review 设计复审 40 50
    · Coding Standard 代码规范 10 15
    · Design 具体设计 45 85
    · Coding 具体编码 120 170
    · Code Review 代码复审 30 25
    · Test 测试(自我测试,修改代码,提交修改) 60 240
    Reporting 报告 60 80
    · 测试报告 15 10
    · 计算工作量 5 5
    · 并提出过程改进计划 10 15

    4.解题思路

    1.确定相关编程语言:Java
    2.基本思路:

    根据题目的要求,首先需要在对已经建好或导入的文档进行读取,这里就需要有文件读取类,对文件中的所有进行读取。

    文件读取之后,将相应的字符、单词、行数等进行计数,根据题目中要求进行计算。

    对统计出来的数据输出。

    5.设计实现过程。

    代码组织:

    1.WordC类:对字符数、单词数、行数等进行统计。

    • countChar();统计字符数
    • countWords();统计单词数
    • countLine();统计行数
    • WordFre();实现单词词频统计并出现次数从高到低排列

    2.FileRead类:导入需要WordCount的文件,进行文件读取等操作

    • FileOutput();文件读取
    • FileInput();文件写入

    3.Main类:实现数据的输出和文件路径的输入,并将WordC类和FileInput类调用,实现功能。

    6.代码说明

    1、主要函数

    • countChar() : 统计字符数量
    public static int countChar(String str) { //统计字符数量
    		char s;
    		int CharSum=0;
    		for (int i = 0; i < str.length(); i++) {
    			s=str.charAt(i);
    			if (s>=32 && s<=126 || s=='
    ' || s=='
    ' || s=='	') {
    				CharSum++;
    				
    			}
    		}
    		return CharSum;
    	}
    
    • countWords():统计单词数量
    	public  int countWords(String[] str) { //统计单词数量
    		String str1=text;
    		int WordsSum=0;
    		String[] words=str1.split("\s*[^0-9a-zA-Z]"); //调用正则表达式中spilt()方法来切分字段,将字符串中的单词提取出来
    		for(String s:words) {
    			if(s.matches("[a-zA-Z{4,}[z-zA-Z0-0]*")) { //调用matchs方法来判断这个字符串是否在给定的正则表达式匹配
    				WordsSum++;
    				
    		}
    		}
    		return WordsSum;
    		
    		
    	}
    	
    
    • countLine :统计行数
    	public  static int countLine(String[] str) { //统计行数
    		int LineSum=0;
    		for (int i = 0; i < str.length; i++) {
    			while(str[i]!=null) {
    				if(str[i].trim().length()==0 || str[i].trim().equals("")) {
    					continue;   //调用trim()方法将头尾空格去掉,来判断行数
    				}
    				LineSum++;
    		return LineSum;
    	}
    
    • WordFre :计算全文的单词词频:
    	public List<Entry<String, Integer>> WordFre()
    	{
    		WordFre= new HashMap<String, Integer>();
    		String t = text;
    	
    		String[] words = t.split("\s"); // 将字符串进行分割
    		
    		for (int i = 0; i < words.length; i++) {
    				if (isWord(words[i])) { // 判断是否为单词,调用isWord函数
    					
    					words[i] = words[i].trim().toLowerCase();//将大写字母变成小写字母
    					
    					
    					if (WordFre.get(words[i]) == null) { // 判断之前Map中是否出现过该字符串
    						
    						
    						WordFre.put(words[i], 1);// 如果为新单词,放入map中作为key值,value设为1
    						
    					} else
    						
    						WordFre.put(words[i], WordFre.get(words[i]) + 1);//如果出现过的单词则将value值+1
    				}
    		}
    
    • 将词频排序用list储存:
    List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(WordFre.entrySet());//用list列表储存键值
    		
    		list.sort(new Comparator<Map.Entry<String, Integer>>() {//对list排序
    			
    			@Override
    			
    			public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {	
    				
    				if (o1.getValue() == o2.getValue()) {//判断词频是否相等
    					
    					return o1.getKey().compareTo(o2.getKey());//字典序排列
    				}
    				return o2.getValue() - o1.getValue();//降序排列
    			}
    
    		});
    		
    		return list;
    

    7、单元测试

    8、效能分析

    效能分析我是用JProfiler进行对代码的分析主要查看的对象、线程、CPU等方面。



    9、结合在构建之法中学习到的相关内容与个人项目的实践经历,撰写解决项目的心路历程与收获。

    在这次项目的实战中,有着很大的收获同样的也遇到了许许多多的困难,在实践初期,没有好好制定相应的计划,导致在后面的时间过程中耗费了大量的实践和精力,后面通过查找资料和同学帮助下慢慢的一个一个解决困难,但在单元测试以及词频的统计上还有很大的学习空间,在后面的学习中我会慢慢修改并补充上。这次是第一词进行项目的实战,很多地方没有考虑到,发现自己需要学习的东西还有很多,遇到一些测试和效能分析有些吃力,但我会慢慢提高自己的能力,为后面的项目打好基础,提高自己的各方面实力。

  • 相关阅读:
    ContentProvider与ContentResolver使用
    ASP.NET Web API 控制器创建过程(二)
    Yii PHP Framework有用新手教程
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    使用CXF+spring创建一个web的接口项目
    使用spring @Scheduled注解运行定时任务、
    Oracle11g新特性之动态变量窥视
    yum命令常见方法
    Linux负载均衡软件LVS之一(概念篇)
    Linux查看CPU和内存使用情况
  • 原文地址:https://www.cnblogs.com/helloLV/p/9665172.html
Copyright © 2011-2022 走看看