文檔編號:
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; width: 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; width: 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("\n"); 13 for(mean model:means) { 14 String word=model.getWord();//標題 15 bw.write(count+"."+model.getWord()); 16 bw.write("\n"); 17 bw.write(" "); 18 bw.write(model.getMeann()); 19 bw.write("\r\n"); 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("\n"); 49 bw.write("\n"); 50 bw.write("\n"); 51 bw.write("一.程序人生....................................................................1"); 52 bw.write("\n"); 53 bw.write("二.大數據......................................................................2"); 54 bw.write("\n"); 55 bw.write("三.運維........................................................................2"); 56 bw.write("\n"); 57 bw.write("四.編程語言....................................................................3"); 58 bw.write("\n"); 59 bw.write("五.區塊鏈......................................................................4"); 60 bw.write("\n"); 61 bw.write("六.架構....................................................................... 4"); 62 bw.write("\n"); 63 bw.write("六.人工智能....................................................................5"); 64 bw.write("\n"); 65 bw.write("\n"); 66 bw.write("\n"); 67 bw.write("\n"); 68 bw.write("\n"); 69 bw.write("\n"); 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