软件工程编程作业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,感觉应该可以用相对路径,把文本复制到目录下面就好
运行结果
心路历程与收获
好久没写代码了,突然要搞这个有点不太习惯,花了很多时间去找回当初敲代码的感觉,这次作业需求虽然看起来不太难,而且题目需求基本已经把思路给表达出来了,但是完成这个项目还是花了很多时间,中间也出现了很多错误,不会的就百度找答案,慢慢的完成这个项目,希望以后多敲一敲代码,慢慢变强。