文档编号:
1 引言
1.1 编写目的
编写详细设计的目的是:在概要设计的基础上,完成系统划分模块及明确模块之间的关系,同时给出相应的用户界面设计。
1.2 适用对象及范围
本设计说明书适用于参加本项目的所有管理人员、开发人员和维护人员。包括:项目经理、系统分析员、高级程序员、代码程序员、数据库程序员、测试人员、培训人员、实施人员、技术支持人员、项目监理人员、系统管理用户和最终使用用户。
1.3 名词解释
HTML:超文本标记语言,标准通用标记语言下的一个应用。“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
CSS:级联样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。
Javascript:一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
2 总体设计
2.1 需求规定
2.1.1 对功能的规定
2.1.1.1 热词查看功能
热词查看功能系统中包括方面的内容:热词搜索功能、热词分类功能、下载功能。
1. 热词搜索功能
用户通过搜索框进行热词的搜索,显示该热词的含义,并可以通过分类框来对该热词进行分类。
2. 热词分类显示功能
用户通过热词分类点击,查看该热词分类下的内容及链接,还可以通过联系图和词云进行显示查看热词具体含义。
3. 下载功能
用户可以通过点击下载,生成热词下载文档,并通过word打开显示。
2.1.2 输入/输出要求
1. 在数据输入的相关 Web页面,须提供页面数据合法性校验,包括:对数据类型的检查、对日期类型数据的检查、对特定字符转码和字符长度的检查。
2. 使用Web页面输出数据,包括页面显示的数据、可供下载或在线浏览的文档。对这类数据没有特殊要求。
2.1.3 故障处理要求
1. 软件支撑环境运行错误。
2. IIS运行环境错误,此时平台无法正确运行,管理员参考相关产品手册。
3. 数据库运行错误:系统无法使用,平台将提供错误提示页面,并记录日志。
4. 应用系统错误:由本应用系统提供错误提示页面,程序运行错误记录在平台日志中,数据运行错误记录在应用系统日志中。
2.2 基础服务
1. 关系数据库
图1: 数据库应用
在本平台之上的应用不是直接访问数据库,而是通过应用框架服务层提供的数据库访问组件来访问数据库。
2. web服务器
Web服务器(或称HTTP服务器)提供HTTP服务。本来Web服务器只提供“静态”内容,即返回在URL里指定的文件的内容,一般具备将URL名映射到文件名的功能,并能实施某种安全策略。Web服务是建立B/S结构应用的基础。Web服务在系统中的作用
Web服务以Web服务器的形式出现,主要的功能是提供静态的Http服务,即提供静态的Html页面。同时,Web服务还需要有诸如负载均衡、页面缓冲等功能。Web服务器通常需要和应用服务器相配合,提供动态的Http服务,应用服务器可以和数据库相配合提供动态Html页面。
3. 应用服务器
应用服务器为应用的业务逻辑提供了一个运行环境。它可以提供企业级的组件支持环境,支持网络环境下应用软件的快速开发和部署。应用组件在应用服务器的服务上运行,并利用网络基础架构提供的目录和安全服务。这些组件还可以利用数据库、事务处理和群集等设施。
3 系统功能设计
3.1 热词查看功能
序号 |
系统模块 |
功能 |
功能描述 |
操作 |
1 |
热词查看功能 |
热词搜索功能 |
用户通过搜索框进行热词的搜索,显示该热词的含义,并可以通过分类框来对该热词进行分类。 |
输入框搜索,下拉框分类提交 |
2 |
热词分类显示功能 |
用户通过热词分类点击,查看该热词分类下的内容及链接,还可以通过联系图和词云进行显示查看热词具体含义。 |
点击导航栏可以查看热词分类内容,及该分类下解释,点击链接可以查看该分词链接出处。 |
|
3 |
下载功能 |
用户可以通过点击下载,生成热词下载文档,并通过word打开显示。 |
点击导航栏的下载按钮,可以下载文档完成,之后打开文档查看 |
3.1.1 实现设计
通过对业务功能实现时序的分析,所有业务功能的实现处理过程分为4大模块:信息搜索模块,信息查看模块,信息分类模块,信息下载模块。
3.1.2 信息搜索模块
3.1.2.1 功能设计
信息搜索功能为用户通过内容搜索,可以查看该内容的解释。先从数据库进行查询若没有,则从百度百科进行内容爬取。将结果解释。界面设计如图所示:
图2: 信息搜索界面
图3: 信息结果显示界面
3.1.2.2 类设计
类名 |
描述 |
mean |
热词类,包含热词的名字、含义、类型。 |
select |
对数据进行爬取 |
dao |
对热词进行查询、添加。 |
3.1.2.3 代码设计
l 搜索项目导入代码设计
1 <!-- Start Banner Area --> 2 <section class="home-banner-area relative"> 3 <div class="container"> 4 <div 5 class="row fullscreen d-flex align-items-center justify-content-center"> 6 <div class="banner-content col-lg-8 col-md-12"> 7 <h1 class="wow fadeIn" data-wow-duration="4s"> 8 信息领域 <br>热词分析 9 </h1> 10 <div class="input-wrap"> 11 <form action="index.jsp" method="get" 12 class="form-box d-flex justify-content-between"> 13 <input type="text" placeholder="请输入搜索内容" class="form-control" 14 name="wordd"> 15 <button type="submit" class="btn search-btn">Search</button> 16 <% 17 select s = new select(); 18 mean mean1 = s.mean2; 19 mean1.setMeann("该词没有解释"); 20 mean1.setWord(""); 21 %> 22 </form> 23 </div> 24 <h4 class="text-white">热词</h4> 25 26 <div class="courses pt-20"> 27 <% 28 typeIndex = keyDaoI.loadKeyType(); 29 typeIndex.toArray(ti); 30 for (int i = 0; i < ni / 2; i++) { 31 %> 32 <a href="chengXuRenSheng.jsp?word=<%=ti[i]%>" 33 data-wow-duration="1s" data-wow-delay=".9s" 34 class="primary-btn transparent mr-10 mb-10 wow fadeInDown"><%=ti[i]%></a> 35 <% 36 } 37 for (int i = ni / 2; i < ni; i++) { 38 %> 39 <a href="chengXuRenSheng.jsp?word=<%=ti[i]%>" 40 data-wow-duration="1s" data-wow-delay="1.8s" 41 class="primary-btn transparent mr-10 mb-10 wow fadeInDown"><%=ti[i]%></a> 42 <% 43 } 44 %> 45 </div> 46 </div> 47 </div> 48 <div class="rocket-img"> 49 <img src="img/rocket.png" alt=""> 50 </div> 51 </section> 52 <!-- End Banner Area --> 53 54 55 <% 56 if (word!=null&&!word.equals("")) { 57 %> 58 <!-- Start About Area --> 59 <section class="about-area section-gap"> 60 <div class="container"> 61 <div class="row align-items-center justify-content-center"> 62 <div class="col-lg-5 col-md-6 about-left"> 63 <img class="img-fluid" src="img/about.jpg" alt=""> 64 </div> 65 <div class="offset-lg-1 col-lg-6 offset-md-0 col-md-12 about-right"> 66 <h1> 67 <%=word%> 68 </h1> 69 <div class="wow fadeIn" data-wow-duration="1s"> 70 <% 71 if (type.equals("") && mean3.equals("该词没有解释")) {//没有爬取到意思,数据库中也没有分类 72 %> 73 <p> 74 <%=mean3%><br /> <br /> 75 <form action="index.jsp" method="get"> 76 <textarea name="jieshi" rows="7" cols="70" value="" 77 placeholder="请输入热词解释"></textarea> 78 <!-- 输入解释 --> 79 <br /> <br /> <select name="leibie"> 80 <!-- 输入类别 --> 81 <option value="">选择热词类别</option> 82 <% 83 typeIndex.toArray(ti); 84 for (int i = 0; i < ni; i++) { 85 %> 86 <option value="<%=ti[i]%>"><%=ti[i]%></option> 87 88 <% 89 } 90 %> 91 </select> <input type="hidden" name="wordd" value="<%=word%>"> 92 <!-- 点击按钮,依旧查询这个词 --> 93 <input type="submit" value="提交" 94 style="position: absolute; right: 30px; 100px"> 95 <!-- 按钮 --> 96 </form> 97 </p> 98 <% 99 } else if (!type.equals("") && !mean3.equals("该词没有解释")) {//数据库中既有解释也有类别 100 %> 101 <p> 102 <%=mean3%><br /> <br /> 类别:<%=type%> 103 </p> 104 <% 105 } 106 else if(type.equals("") && !mean3.equals("该词没有解释")){//爬取到了词语得意思,但是数据库中没有分类 107 %> 108 <p> 109 <%=mean3%><br /> <br /> 110 <form action="index.jsp" method="get"> 111 <select name="leibie"> 112 <!-- 输入类别 --> 113 <option value="">选择热词类别</option> 114 <% 115 typeIndex.toArray(ti); 116 for (int i = 0; i < ni; i++) { 117 %> 118 <option value="<%=ti[i]%>"><%=ti[i]%></option> 119 120 <% 121 } 122 %> 123 </select> <input type="hidden" name="wordd" value="<%=word%>"> 124 <!-- 点击按钮,依旧查询这个词 --> 125 <input type="submit" value="提交" 126 style="position: absolute; right: 30px; 100px;"> 127 <!-- 按钮 --> 128 </form> 129 </p> 130 <%} %> 131 </div> 132 </div> 133 </div> 134 </div> 135 </section> 136 <!-- End About Area --> 137 <% 138 } 139 %> 140 l mean热词名称、含义、类型 141 public class mean { 142 private String word; 143 private String meann; 144 private String type; 145 public String getWord() { 146 return word; 147 } 148 public void setWord(String word) { 149 this.word = word; 150 } 151 public String getMeann() { 152 return meann; 153 } 154 public void setMeann(String meann) { 155 this.meann = meann; 156 } 157 public String getType() { 158 return type; 159 } 160 public void setType(String type) { 161 this.type = type; 162 } 163 } 164 l dao代码查询 165 public static String find_mean(String word) { 166 Connection connection = DBUtil.getConnection(); 167 String sql = "select DETAIL.CONTENT from DETAIL WHERE KEY='" + word + "'"; 168 PreparedStatement preparedStatement = null; 169 ResultSet resultSet = null; 170 String mean = ""; 171 try { 172 System.out.println("sql:" + sql); 173 preparedStatement = connection.prepareStatement(sql); 174 resultSet = preparedStatement.executeQuery(); 175 while (resultSet.next()) { 176 mean = resultSet.getString("CONTENT"); 177 } 178 } catch (SQLException e) { 179 e.printStackTrace(); 180 } finally { 181 DBUtil.close(resultSet); 182 DBUtil.close(preparedStatement); 183 DBUtil.close(connection); 184 } 185 return mean; 186 } 187 188 public static mean find_mean2(String word) {//查询出词的意思以及类别 189 Connection connection = DBUtil.getConnection(); 190 String sql = "select DETAIL.CONTENT,SORT.TYPE from DETAIL join SORT on DETAIL.KEY=SORT.KEY WHERE DETAIL.KEY='" + word + "'"; 191 PreparedStatement preparedStatement = null; 192 ResultSet resultSet = null; 193 mean mean1=new mean(); 194 mean1.setMeann(""); 195 mean1.setType(""); 196 try { 197 System.out.println("sql:" + sql); 198 preparedStatement = connection.prepareStatement(sql); 199 resultSet = preparedStatement.executeQuery(); 200 while (resultSet.next()) { 201 mean1.setMeann(resultSet.getString("CONTENT")); 202 mean1.setType(resultSet.getString("TYPE")); 203 } 204 } catch (SQLException e) { 205 e.printStackTrace(); 206 } finally { 207 DBUtil.close(resultSet); 208 DBUtil.close(preparedStatement); 209 DBUtil.close(connection); 210 } 211 return mean1; 212 } 213 public static void addMean(String word, String mean) { 214 215 int count = find_countWord(word); 216 System.out.println("count:"+count); 217 if (count > 0) { 218 } else { 219 220 // 获得连接对象 221 Connection connection = DBUtil.getConnection(); 222 // 创建语句传输对象 223 PreparedStatement preparedStatement = null; 224 ResultSet resultSet = null; 225 try { 226 String sql = "INSERT into DETAIL(KEY,CONTENT) VALUES ('" + word + "','" + mean + "')"; 227 preparedStatement = connection.prepareStatement(sql); 228 System.out.println("sql" + sql); 229 preparedStatement.executeUpdate(); 230 231 } catch (SQLException e) { 232 // TODO Auto-generated catch block 233 e.printStackTrace(); 234 } finally { 235 // 关闭资源 236 DBUtil.close(resultSet); 237 DBUtil.close(preparedStatement); 238 DBUtil.close(connection); 239 } 240 } 241 }
3.1.3 信息查看模块
3.1.3.1 功能设计
当按分类检索是所有热词的含义及链接显示到界面上。界面设计如图所示:、
图4: 热词含义及链接模板界面
通过在联系图及词云的显示的内容,通过标签的点击可以查看该热词下的内容。界面设计如图所示:
图5: 热词含义界面
图6:热词链接跳转界面
通过词云显示该热词内容:
图7:热词词云界面
通过联系图显示热词间联系:
图8:热词联系图界面
3.1.3.2 类设计
类名 |
描述 |
dao |
查询该热词下的含义 |
url |
热词链接、名称及文章标题 |
Key |
热词相关信息 |
KeyDao |
查询热词间联系及热词top50 |
3.1.3.3 代码设计
1 l dao 查询热词下的链接及文章标题 2 public static mean find_mean2(String word) {//查询出词的意思以及类别 3 Connection connection = DBUtil.getConnection(); 4 String sql = "select DETAIL.CONTENT,SORT.TYPE from DETAIL join SORT on DETAIL.KEY=SORT.KEY WHERE DETAIL.KEY='" + word + "'"; 5 PreparedStatement preparedStatement = null; 6 ResultSet resultSet = null; 7 mean mean1=new mean(); 8 mean1.setMeann(""); 9 mean1.setType(""); 10 try { 11 System.out.println("sql:" + sql); 12 preparedStatement = connection.prepareStatement(sql); 13 resultSet = preparedStatement.executeQuery(); 14 while (resultSet.next()) { 15 mean1.setMeann(resultSet.getString("CONTENT")); 16 mean1.setType(resultSet.getString("TYPE")); 17 } 18 } catch (SQLException e) { 19 e.printStackTrace(); 20 } finally { 21 DBUtil.close(resultSet); 22 DBUtil.close(preparedStatement); 23 DBUtil.close(connection); 24 } 25 return mean1; 26 } 27 28 public static List<url> find_allUrls2(String word) { 29 Connection connection = DBUtil.getConnection(); 30 String sql = "select DISTINCT URL.KEY,URL.URL,TITLEE.TITLE from URL join TITLEE on URL.URL=TITLEE.URL WHERE URL.KEY ='" 31 + word + "'"; 32 PreparedStatement preparedStatement = null; 33 ResultSet resultSet = null; 34 List<url> means = new ArrayList<url>(); 35 36 try { 37 System.out.println("sql:" + sql); 38 preparedStatement = connection.prepareStatement(sql); 39 resultSet = preparedStatement.executeQuery(); 40 while (resultSet.next()) { 41 url m = new url(); 42 m.setWord(resultSet.getString("KEY")); 43 m.setUrll(resultSet.getString("URL")); 44 m.setTitle(resultSet.getString("TITLE")); 45 means.add(m); 46 } 47 } catch (SQLException e) { 48 e.printStackTrace(); 49 } finally { 50 DBUtil.close(resultSet); 51 DBUtil.close(preparedStatement); 52 DBUtil.close(connection); 53 } 54 return means; 55 } 56 57 public static int find_countWord(String word) {//查询该词是否有解释 58 Connection connection = DBUtil.getConnection(); 59 String sql = "select count(KEY) from DETAIL where KEY ='" + word + "'"; 60 PreparedStatement preparedStatement = null; 61 ResultSet resultSet = null; 62 int count = 0; 63 try { 64 System.out.println("sql:" + sql); 65 preparedStatement = connection.prepareStatement(sql); 66 resultSet = preparedStatement.executeQuery(); 67 while (resultSet.next()) { 68 count = resultSet.getInt("count(KEY)"); 69 70 } 71 } catch (SQLException e) { 72 e.printStackTrace(); 73 } finally { 74 DBUtil.close(resultSet); 75 DBUtil.close(preparedStatement); 76 DBUtil.close(connection); 77 } 78 return count; 79 } 80 81 public static int find_countWord2(String word) {//查询该词是否分类 82 Connection connection = DBUtil.getConnection(); 83 String sql = "select count(KEY) from SORT where KEY ='" + word + "'"; 84 PreparedStatement preparedStatement = null; 85 ResultSet resultSet = null; 86 int count = 0; 87 try { 88 System.out.println("sql:" + sql); 89 preparedStatement = connection.prepareStatement(sql); 90 resultSet = preparedStatement.executeQuery(); 91 while (resultSet.next()) { 92 count = resultSet.getInt("count(KEY)"); 93 94 } 95 } catch (SQLException e) { 96 e.printStackTrace(); 97 } finally { 98 DBUtil.close(resultSet); 99 DBUtil.close(preparedStatement); 100 DBUtil.close(connection); 101 } 102 return count; 103 } 104 l url链接类 105 public class url { 106 private String word; 107 private String urll; 108 private String title; 109 public String getWord() { 110 return word; 111 } 112 public void setWord(String word) { 113 this.word = word; 114 } 115 public String getUrll() { 116 return urll; 117 } 118 public void setUrll(String urll) { 119 this.urll = urll; 120 } 121 public String getTitle() { 122 return title; 123 } 124 public void setTitle(String title) { 125 this.title = title; 126 } 127 } 128 l Key热词相关信息类 129 package com.model; 130 public class Key { 131 private String key;//热词名字 132 private String num;//热词出现次数 133 private String type;//热词种类 134 private String url;//热词链接 135 private String content;//热词内容 136 public Key() {} 137 public Key(String key,String num,String type,String url,String content) 138 { 139 this.key=key; 140 this.num=num; 141 this.key=key; 142 this.url=url; 143 this.content=content; 144 } 145 public String getKey() { 146 return key; 147 } 148 public void setKey(String key) { 149 this.key = key; 150 } 151 public String getNum() { 152 return num; 153 } 154 public void setNum(String num) { 155 this.num = num; 156 } 157 public String getType() { 158 return type; 159 } 160 public void setType(String type) { 161 this.type = type; 162 } 163 public String getUrl() { 164 return url; 165 } 166 public void setUrl(String url) { 167 this.url = url; 168 } 169 public String getContent() { 170 return content; 171 } 172 public void setContent(String content) { 173 this.content = content; 174 } 175 } 176 l KeyDao查询热词间联系及热词top50 177 public List<Key> loadKey(String type) { 178 Connection connection=DBUtil.getConnection(); 179 180 String sql=null; 181 if(!"".equals(type)&&type!=null) 182 { 183 sql="SELECT key from sort where type='"+type+"'"; 184 } 185 PreparedStatement preparedStatement=null; 186 ResultSet resultSet=null; 187 //String[] keys=new []String; 188 List <Key>keys=new ArrayList<Key>(); 189 Key key; 190 try { 191 preparedStatement=connection.prepareStatement(sql); 192 resultSet=preparedStatement.executeQuery(); 193 while(resultSet.next()) 194 { 195 key=new Key(); 196 key.setKey(resultSet.getString("key")); 197 keys.add(key); 198 } 199 } catch (SQLException e) { 200 // TODO Auto-generated catch block 201 e.printStackTrace(); 202 }finally { 203 DBUtil.close(resultSet); 204 DBUtil.close(preparedStatement); 205 DBUtil.close(connection); 206 } 207 return keys; 208 } 209 210 @Override 211 public List<Key> loadKey() { 212 Connection connection=DBUtil.getConnection(); 213 String sql="select * FROM ( SELECT key,num from MOON.sort ORDER BY NUM DESC)WHERE ROWNUM < 50"; 214 PreparedStatement preparedStatement=null; 215 ResultSet resultSet=null; 216 //String[] keys=new []String; 217 List <Key>keys=new ArrayList<Key>(); 218 Key key; 219 try { 220 System.out.println(sql); 221 preparedStatement=connection.prepareStatement(sql); 222 resultSet=preparedStatement.executeQuery(); 223 while(resultSet.next()) 224 { 225 key=new Key(); 226 key.setKey(resultSet.getString("key")); 227 key.setNum(resultSet.getString("num")); 228 keys.add(key); 229 } 230 } catch (SQLException e) { 231 // TODO Auto-generated catch block 232 e.printStackTrace(); 233 }finally { 234 DBUtil.close(resultSet); 235 DBUtil.close(preparedStatement); 236 DBUtil.close(connection); 237 } 238 return keys; 239 }
3.1.4 信息分类模块
3.1.4.1 功能设计
将数据库已存在的信息进行分类,显示在导航栏上。界面设计如图:
图1: 信息分类界面
若数据库中不存在该词语,可将查询到的词语进行手工选择分类提交给客户端存储在数据库。界面设计如下:
图2: 热词分类界面
如果作者已准备好则点击“提交”按钮,即可跳转到当前页面,且显示该分类。
界面设计如下:
图3: 热词查看界面
若该热词在百度百科查取不到,且在数据库也不含有,我们可以自己添加内容及分类。界面如下:
图4: 添加内容及分类界面
3.1.4.2 类设计
类名 |
描述 |
Key |
热词相关信息 |
KeyDao |
热词分类 |
dao |
热词分类及内容添加 |
3.1.4.3 代码设计
l Key显示热词相关信息类。
1 public class Key { 2 private String key;//热词名字 3 private String num;//热词出现次数 4 private String type;//热词种类 5 private String url;//热词链接 6 private String content;//热词内容 7 public Key() {} 8 public Key(String key,String num,String type,String url,String content) 9 { 10 this.key=key; 11 this.num=num; 12 this.key=key; 13 this.url=url; 14 this.content=content; 15 } 16 public String getKey() { 17 return key; 18 } 19 public void setKey(String key) { 20 this.key = key; 21 } 22 public String getNum() { 23 return num; 24 } 25 public void setNum(String num) { 26 this.num = num; 27 } 28 public String getType() { 29 return type; 30 } 31 public void setType(String type) { 32 this.type = type; 33 } 34 public String getUrl() { 35 return url; 36 } 37 public void setUrl(String url) { 38 this.url = url; 39 } 40 public String getContent() { 41 return content; 42 } 43 public void setContent(String content) { 44 this.content = content; 45 } 46 } 47 l KeyDao进行热词种类查询类。 48 public List<String> loadKeyType() { 49 Connection connection=DBUtil.getConnection(); 50 String sql = null; 51 sql="SELECT DISTINCT type from sort "; 52 PreparedStatement preparedStatement=null; 53 ResultSet resultSet=null; 54 List <String>types=new ArrayList<String>(); 55 String type=null; 56 try { 57 preparedStatement=connection.prepareStatement(sql); 58 resultSet=preparedStatement.executeQuery(); 59 while(resultSet.next()) 60 { 61 type=resultSet.getString("type"); 62 types.add(type); 63 } 64 } catch (SQLException e) { 65 // TODO Auto-generated catch block 66 e.printStackTrace(); 67 }finally { 68 DBUtil.close(resultSet); 69 DBUtil.close(preparedStatement); 70 DBUtil.close(connection); 71 } 72 return types; 73 } 74 l dao进行种类添加。 75 public static void addMean(String word, String mean) { 76 int count = find_countWord(word); 77 System.out.println("count:"+count); 78 if (count > 0) { 79 } else { 80 // 获得连接对象 81 Connection connection = DBUtil.getConnection(); 82 // 创建语句传输对象 83 PreparedStatement preparedStatement = null; 84 ResultSet resultSet = null; 85 try { 86 String sql = "INSERT into DETAIL(KEY,CONTENT) VALUES ('" + word + "','" + mean + "')"; 87 preparedStatement = connection.prepareStatement(sql); 88 System.out.println("sql" + sql); 89 preparedStatement.executeUpdate(); 90 91 } catch (SQLException e) { 92 // TODO Auto-generated catch block 93 e.printStackTrace(); 94 } finally { 95 // 关闭资源 96 DBUtil.close(resultSet); 97 DBUtil.close(preparedStatement); 98 DBUtil.close(connection); 99 } 100 } 101 } 102 public static void addleibe(String word, String leibe) { 103 104 int count = find_countWord2(word); 105 System.out.println("count:"+count); 106 if (count > 0) { 107 } else { 108 // 获得连接对象 109 Connection connection = DBUtil.getConnection(); 110 // 创建语句传输对象 111 PreparedStatement preparedStatement = null; 112 ResultSet resultSet = null; 113 try { 114 String sql = "INSERT into SORT(KEY,NUM,TYPE) VALUES ('" +word +"','10','"+leibe+"')"; 115 preparedStatement = connection.prepareStatement(sql); 116 System.out.println("sql" + sql); 117 preparedStatement.executeUpdate(); 118 } catch (SQLException e) { 119 // TODO Auto-generated catch block 120 e.printStackTrace(); 121 } finally { 122 // 关闭资源 123 DBUtil.close(resultSet); 124 DBUtil.close(preparedStatement); 125 DBUtil.close(connection); 126 } 127 } 128 }
3.1.5 信息下载模块
3.1.5.1 功能设计
可以将数据库中所有的热词下载到word文档里。
点击下载进行下载。
图5: 导航栏界面
通过下载可以显示下载成功。
图6: 下载成功界面
打开下载的word文档进行查看。
图7: 下载文档界面
双击进行打开。
图8: 文档界面内容
3.1.5.2 类设计
类名 |
描述 |
File |
文档下载 |
3.1.5.3 代码设计
1 public class File { 2 static int count=1; 3 static int c=0; 4 static String[] q= {"一","二","三","四","五","六","七"}; 5 public static void WriteStringToFile2(List<mean> means,String type,String name) { 6 7 try { 8 9 FileWriter fw = new FileWriter(name, true); 10 BufferedWriter bw = new BufferedWriter(fw); 11 bw.append(q[c]+"."+type);//类别 12 bw.write(" "); 13 for(mean model:means) { 14 String word=model.getWord();//标题 15 bw.write(count+"."+model.getWord()); 16 bw.write(" "); 17 bw.write(" "); 18 bw.write(model.getMeann()); 19 bw.write(" "); 20 count++; 21 } 22 bw.close(); 23 fw.close(); 24 } catch (Exception e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 } 28 } 29 public static void down() { 30 c=0; 31 String[] type= {"程序人生","大数据","运维","编程语言","区块链","架构","人工智能"}; 32 Date day=new Date(); 33 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); 34 String name="C:\Users\lenovo\Desktop\热词解释"+df.format(day)+".docx"; 35 mulu(name); 36 for(int i=0;i<type.length;i++) { 37 count=1; 38 List<mean> words=dao.find_allwords1(type[i]); 39 WriteStringToFile2(words,type[i],name); 40 c++; 41 } 42 } 43 public static void mulu(String name) { 44 try { 45 FileWriter fw = new FileWriter(name, true); 46 BufferedWriter bw = new BufferedWriter(fw); 47 bw.append(" 信息领域热词解释");//类别 48 bw.write(" "); 49 bw.write(" "); 50 bw.write(" "); 51 bw.write("一.程序人生....................................................................1"); 52 bw.write(" "); 53 bw.write("二.大数据......................................................................2"); 54 bw.write(" "); 55 bw.write("三.运维........................................................................2"); 56 bw.write(" "); 57 bw.write("四.编程语言....................................................................3"); 58 bw.write(" "); 59 bw.write("五.区块链......................................................................4"); 60 bw.write(" "); 61 bw.write("六.架构....................................................................... 4"); 62 bw.write(" "); 63 bw.write("六.人工智能....................................................................5"); 64 bw.write(" "); 65 bw.write(" "); 66 bw.write(" "); 67 bw.write(" "); 68 bw.write(" "); 69 bw.write(" "); 70 bw.close(); 71 fw.close(); 72 } catch (Exception e) { 73 // TODO Auto-generated catch block 74 e.printStackTrace(); 75 } 76 } 77 }
4.数据库设计
1. 热词链接表记录热词的名称,热词的链接及热词的来源及作者的名称。如表4-1所示。
表4-1 热词链接表(url)
字段名 |
中文含义 |
数据类型 |
允许空 |
约束条件 |
Key |
热词名称 |
Varchar2(300) |
Y |
无 |
URl |
热词链接 |
Varchar2(500) |
Y |
无 |
Source |
作者名称 |
Varchar2(300) |
Y |
无 |
2.文章表记录从网站爬取的文章的链接、题目及作者。如表4-2所示。
表4-2 文章表(TITLEE)
字段名 |
中文含义 |
数据类型 |
允许空 |
约束条件 |
TITLE |
题目名称 |
Varchar2(255) |
Y |
无 |
URl |
题目链接 |
Varchar2(255) |
Y |
无 |
AUTHOR |
作者名称 |
Varchar2(255) |
Y |
无 |
3. 热词详细表用于该热词名称及具体含义。如表4-3所示。
表4-3 热词详细表(detail)
字段名 |
中文含义 |
数据类型 |
允许空 |
约束条件 |
KEY |
热词名称 |
Varchar2(300) |
Y |
无 |
CONTENT |
热词内容 |
Varchar2(1500) |
Y |
无 |
4.热词排行表用来表示该热词名称、频数、类型。如表4-4所示。
表4-4用户表(login)
字段名 |
中文含义 |
数据类型 |
允许空 |
约束条件 |
KEY |
热词名称 |
Varchar2(300) |
Y |
无 |
NUM |
频数 |
Varchar2(20) |
Y |
无 |
TYPE |
类型 |
Varchar2(300) |
Y |
无 |
全部源代码查看地址:https://github.com/wangli-wangli/BigData