项目 | 内容 |
---|---|
这个做业属于哪一个课程 | http://www.cnblogs.com/nwnu-daizh/ |
这个做业的要求在哪里 | https://www.cnblogs.com/nwnu-daizh/p/10569690.html |
课程学习目标 | 熟悉软件开发总体流程,提高自身能力 |
本次做业在哪一个具体方面帮助咱们实现目标 | 第一次体验一个完整的工程 |
a.需求分析.css
(1)程序可读入任意英文文本文件,该文件中英文词数大于等于1个。 (2)程序须要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。 (3)指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。 (4)高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。 (5)统计该文本全部单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。 (6)统计该文本行数及字符数; (7)各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms); (8)可处理任意用户导入的任意英文文本; (9)人机交互界面要求GUI界面(WEB页面、APP页面均可);
b.核心功能代码展现:展现核心功能代码.html
public void SortWords() throws IOException{ System.out.println("已输出到result2.txt中"); BufferedReader bufferedReader=new BufferedReader(new FileReader("src/Harrypotter.txt")); BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("src/result2.txt")); String s; while((s=bufferedReader.readLine())!=null){ Map<String, Integer> map=new TreeMap<String,Integer>(); String[] words=s.split("[【】、.。,\"!--;:?\'\\] ]"); for(int i=0;i<words.length;i++){ String key=words[i].toLowerCase(); if(key.length()>0){ if(!map.containsKey(key)){ map.put(key, 1); }else{ int value=map.get(key); value++; map.put(key, value); } } } Set<Map.Entry<String, Integer>> entrySet=map.entrySet(); for(Map.Entry<String, Integer> entery:entrySet){ bufferedWriter.write(entery.getKey()+"---"+entery.getValue()+"\r\n"); } bufferedWriter.newLine(); } bufferedReader.close(); bufferedWriter.close(); }
public Find(String[] word, Map<String, Integer> wordsCount) { super(); this.word = word; this.wordsCount = wordsCount; setTitle("绘制柱形图"); setBounds(word.length, 200, 450, 450); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public Find() { } @Override public void paint(Graphics g) { int Width = getWidth(); int Height = getHeight(); int leftMargin = 50;// 柱形图左边界 int topMargin = 50;// 柱形图上边界 Graphics2D g2 = (Graphics2D) g; int ruler = Height - topMargin; int rulerStep = ruler / 20;// 将当前的高度评分为20个单位 g2.setColor(Color.WHITE);// 绘制白色背景 g2.fillRect(0, 0, Width, Height);// 绘制矩形图 g2.setColor(Color.LIGHT_GRAY); for (int i = 0; i < rulerStep; i++) { g2.drawString((400 - 20 * i) + "个", 8, topMargin + rulerStep * i);// 绘制Y轴上的数据 } g2.setColor(Color.BLUE); int m = 0; for (int i = 0; i < word.length; i++) { int value = wordsCount.get(word[i]); int step = (m + 1) * 40;// 设置每隔柱形图的水平间隔为40 g2.fillRoundRect(leftMargin + step * 2, Height - value, 40, value, 0, 0);// 绘制每一个柱状条 g2.drawString(word[i], leftMargin + step * 2, Height - value - 5); // 标识每一个柱状条 m++; } }
// Initializing counters int countWord = 0; int sentenceCount = 0; int characterCount = 0; int paragraphCount = 1; int whitespaceCount = 0; try { if (file.exists()) { FileReader fr = new FileReader(file); LineNumberReader lnr = new LineNumberReader(fr); int lineNum = 0; while (lnr.readLine() != null) { lineNum++; } System.out.println("该文本文档的总行数为 : " + lineNum); lnr.close(); } else { System.out.println("File does not exists!"); } } catch (IOException e) { e.printStackTrace(); } // Reading line by line from the // file until a null is returned while ((line = reader.readLine()) != null) { if (line.equals("")) { paragraphCount++; } if (!(line.equals(""))) { characterCount += line.length(); // \s+ is the space delimiter in java String[] wordList = line.split("/s+"); countWord += wordList.length; whitespaceCount += countWord - 1; // [!?.:]+ is the sentence delimiter in java String[] sentenceList = line.split("[!?.:]+"); sentenceCount += sentenceList.length; } }
c.程序运行:程序运行时每一个功能界面截图.前端
人机交互界面首页.
java
细节功能.
git
细节功能.
github
实现的功能.
eclipse
功能实现结果.
ide
d. 描述结对的过程.
函数
咱们两在一块儿行动四年,很是有默契。因为平时的课业比较多,因此咱们尽可能在上课的时间多作一些,包括平时没课的时候也一块儿在机房自习作这个实验。
e. 提供这次结对做业的PSP。.布局
PSP2.1 | 任务内容 | 计划共完成须要的时间(min) | 实际完成须要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 9 |
Estimate | 估计这个任务须要多少时间,并规划大体工做步骤 | 三天 | 四天 |
Development | 开发 | 110 | 120 |
Analysis | 需求分析(包括学习新技术) | 40 | 100 |
Design Spec | 生成设计文档 | 10 | 15 |
Design Review | 设计复审(和同窗审核设计文档) | 5 | 10 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 10 | 15 |
Design | 具体设计 | 10 | 10 |
Coding | 具体编码 | 150 | 240 |
Test | 测试(自我修改,修改代码,提交修改) | 30 | 50 |
Reporting | 报告 | 20 | 180 |
Rostmortem & Process Improvement Plan | 过后总结,提出过程改进计划 | 3 | 5 |
f. 小结感觉.
这个项目有不少功能都和上一个词频软件功能相似,因此咱们首先对比了咱们两我的的实验二项目,取比较好的部分进行整合再开始这个项目。新增了四个功且补全了实验二没有实现柱状图的遗憾。咱们首先在eclipse中实现了柱形图的功能,并完成了统计每行的每一个单词的数量和统计该文本文档的行数,前端页面用sublime软件写的html页面,采用了css和js布局。因为好久不接触gui等人机交互页面设计,因此很生疏,这个实验室一点点从新捡起来的过程。在此次结对过程当中,咱们俩一块儿合做,尤为是做业截止的前一天,在机房呆了十个小时,终于将项目大概的样子有了个形,我相信在从此的学习中咱们都会成为对方的好搭档。对于咱们来讲,1+1必须是>2的,就算卡bug,也能互相鼓励。
GitHub地址点击☞此处