软件工程编程作业1

这个作业属于哪个课程 软工-2018级计算机2班
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-science-class2-2018/homework/11878
这个作业的目标 学习使用github或者码云
学号 20188423
参考文献 eclipse中使用GIT或者码云
参考文献 文件输入流与输出流

目录

Gitee项目地址
PSP表格
解题思路描述
流程图
代码规范制定链接
计算模块接口的设计与实现过程
单元测试
异常处理说明
运行结果
心路历程与收获

Gitee项目地址

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 8 10
• Estimate • 估计这个任务需要多少时间 360 420
Development 开发 100 140
• Analysis • 需求分析 (包括学习新技术) 90 120
• Design Spec • 生成设计文档 20 20
• Design Review • 设计复审 15 20
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 10 10
• Design • 具体设计 20 20
• Coding • 具体编码 60 70
• Code Review • 代码复审 20 15
• Test • 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 60 45
• Test Repor • 测试报告 30 45
• Size Measurement • 计算工作量 20 20
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 15 20
合计 488 585

解题思路

1.根据题需求,可以通过readline接收每行字符串,累加统计出字符数和行数,但使用while(!readline())读入会致使第一个字符读入而产生每行首字符缺失,故我通过设置字符串“str”来专门完整接收.
2.在统计字符数、单词后,有了这些信息,加之在外层设置包含属性{string temp;int flag}的类数组来记录以.split()分隔字符后的各个字符串,再通过小写化各数组中的字符串达到统一小写的目的,然后用正则表达式过滤非字母字符。
3.根据要求所示,中文不算字符,故而对于中文输入,我用创建类isChinese用以判断及统计中文次数,控制正确的单词、字符数。
4.结构体数组按词频、两两间字符串用.用WortSort排序到Output。
5 .输出即可。

流程图

代码规范制定链接

计算模块接口的设计与实现过程

这是主函数,实现主要流程。

        //文本读入
        File file = new File(args[0]);
        FileRead fileRead = new FileRead();
        String data = fileRead.Input(file);

        //处理文本
        Tools tools = new Tools();
        int length = data.length();
        int wordAmount = tools.WordCount(data);
        int lines = data.split("\n").length;
        List<HashMap.Entry<String, Integer>> wordList = tools.WordSort();

        //文本输出
        fileRead.Output(length,wordAmount,lines,wordList);

将输入的大写字母转换成小写,然后用正则表达式过滤非字母数字字符,
清洗文本,然后将这个文本分割成单词,再统计文本

String data_l = data.toLowerCase(); // 全部字母转小写.
        String regex = "[^0-9a-zA-Z]"; //正则表达式,过滤非字母数字字符。
        data_l = data_l.replaceAll(regex, " "); //清洗文本。
        StringTokenizer words = new StringTokenizer(data_l); //分割文本成单词。

调用HashMap接口

  
        wordList.add(entry); //将map中的元素放入list中
        Comparator<Map.Entry<String, Integer>> cmp = new Comparator<Map.Entry<String, Integer>>(){
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                if(o1.getValue().equals(o2.getValue()))
                    return o1.getKey().compareTo(o2.getKey());     //值相同 按键返回字典序.
                return o2.getValue()-o1.getValue();
            }
            //逆序(从大到小)排列,正序为“return o1.getValue()-o2.getValue”
        };

单元测试

单元测试现在还不会,因为最近比较忙,又要开党会,还要一边复习考研的公共课,慢慢学吧,希望尽早学会。

异常处理说明

1.有基本的容错性:
2.根据输入的文件名找不到文件。

只能把文件改成input.txt,感觉应该可以用相对路径,把文本复制到目录下面就好

运行结果

心路历程与收获

好久没写代码了,突然要搞这个有点不太习惯,花了很多时间去找回当初敲代码的感觉,这次作业需求虽然看起来不太难,而且题目需求基本已经把思路给表达出来了,但是完成这个项目还是花了很多时间,中间也出现了很多错误,不会的就百度找答案,慢慢的完成这个项目,希望以后多敲一敲代码,慢慢变强。

posted @ 2021-04-02 14:23  青衫拓落  阅读(83)  评论(0编辑  收藏  举报