java課程設(shè)計(jì)報(bào)告—網(wǎng)絡(luò)爬蟲搜索引擎_第1頁(yè)
java課程設(shè)計(jì)報(bào)告—網(wǎng)絡(luò)爬蟲搜索引擎_第2頁(yè)
java課程設(shè)計(jì)報(bào)告—網(wǎng)絡(luò)爬蟲搜索引擎_第3頁(yè)
java課程設(shè)計(jì)報(bào)告—網(wǎng)絡(luò)爬蟲搜索引擎_第4頁(yè)
java課程設(shè)計(jì)報(bào)告—網(wǎng)絡(luò)爬蟲搜索引擎_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、-PAGE . z.- - - z - 學(xué) 號(hào):課 程 設(shè) 計(jì)題 目網(wǎng)絡(luò)爬蟲搜索引擎學(xué) 院管理學(xué)院專 業(yè)信息管理與信息系統(tǒng)班 級(jí)姓 名指導(dǎo)教師王新201年7月4日課程設(shè)計(jì)任務(wù)書學(xué)生:指導(dǎo)教師: 王新 工作單位:信息管理與信息系統(tǒng)系 題 目: 網(wǎng)絡(luò)爬蟲搜索引擎初始條件:合理應(yīng)用Java相關(guān)知識(shí)與編程技能,結(jié)合UML面向?qū)ο笤O(shè)計(jì),解決信息管理領(lǐng)域的實(shí)際問(wèn)題,如學(xué)生成績(jī)管理、學(xué)籍管理、圖書借閱管理、自動(dòng)存取款機(jī)、通信錄管理、商品銷售管理、醫(yī)院門診管理、火車訂票管理、影院自動(dòng)售票、世界杯足球比賽管理、人力資源管理、酒店前臺(tái)管理、房產(chǎn)中介管理、停車收費(fèi)管理等。要求完成的主要任務(wù): 包括課程設(shè)計(jì)工作量及其

2、技術(shù)要求,以及說(shuō)明書撰寫等具體要求1進(jìn)展需求分析,撰寫需求文檔,繪制用例圖。2識(shí)別需求文檔中的類,建模類,初步繪制類圖之后逐漸完善。3確定、建模類的實(shí)例變量。4確定、建模類的方法。5假設(shè)有需要,在系統(tǒng)中參加繼承與多態(tài)。6將UML圖轉(zhuǎn)換成Java代碼框架。7設(shè)計(jì)算法,假設(shè)有復(fù)雜的數(shù)據(jù)構(gòu)造需求,使用相應(yīng)集合框架。8設(shè)計(jì)數(shù)據(jù)訪問(wèn)層,假設(shè)有數(shù)據(jù)持久化需求,使用數(shù)據(jù)庫(kù)/文件。9添加表示層,假設(shè)程序運(yùn)行在桌面,使用圖形用戶界面。10實(shí)現(xiàn)完整的系統(tǒng),最終Java源代碼至少在300行以上。11進(jìn)展測(cè)試,并給出相應(yīng)結(jié)果。課程設(shè)計(jì)報(bào)告中要求詳細(xì)描述思路、步驟、方法、實(shí)現(xiàn)、問(wèn)題及解決過(guò)程、操作說(shuō)明、測(cè)試及結(jié)果。時(shí)間

3、安排:12014年6月23日 課程設(shè)計(jì)選題、查閱資料22014年6月24日25日UML面向?qū)ο笤O(shè)計(jì)32014年6月26日7月1日 Java程序設(shè)計(jì)與代碼調(diào)試42014年7月2日 改良、完善、測(cè)試系統(tǒng)52014年7月3日7月4日上午 撰寫、提交課程設(shè)計(jì)報(bào)告62014年7月4日下午 課程設(shè)計(jì)辯論指導(dǎo)教師簽名: 年 月 日系主任或責(zé)任教師簽名: 年 月 日網(wǎng)絡(luò)爬蟲搜索引擎1工程介紹1.1開(kāi)發(fā)背景該工程軟件開(kāi)發(fā)的意圖是開(kāi)發(fā)出一款網(wǎng)絡(luò)爬蟲軟件。應(yīng)用目標(biāo)為搜集網(wǎng)絡(luò)信息,便于查詢使用。在如今的BIG DATA時(shí)代,網(wǎng)絡(luò)信息龐大而又復(fù)雜,用戶很難直接從中獲得需要的信息。網(wǎng)絡(luò)爬蟲軟件就是將這些信息收集并整理,當(dāng)

4、用戶發(fā)起搜索請(qǐng)求時(shí),該系統(tǒng)可將用戶最需要的信息反應(yīng)給用戶。1.2用戶的特點(diǎn)本軟件為免費(fèi)軟件,可供所有可使用互聯(lián)網(wǎng)的用戶使用。最終用戶只需掌握根本的上網(wǎng)技術(shù)即可,操作人員的主要工作是啟動(dòng)和關(guān)閉效勞器,只需掌握根本的電腦使用方法即可。維護(hù)人員需要專業(yè)的程序員,懂得Java的網(wǎng)絡(luò)編程以及計(jì)算機(jī)網(wǎng)絡(luò)根底,教育水平在??埔陨?。軟件的預(yù)期工作時(shí)間為24h/日。組織構(gòu)造圖及用戶角色如圖表1-1所示:1.3需求分析各子模塊功能的描述本系統(tǒng)共分為三大模塊:爬蟲模塊、數(shù)據(jù)庫(kù)模塊和搜索模塊,也就是后臺(tái)、前臺(tái)和數(shù)據(jù)庫(kù)。每一個(gè)模塊有各自的分工,最后三大模塊集合在一起構(gòu)成一個(gè)完整的網(wǎng)絡(luò)爬蟲系統(tǒng)。各個(gè)子模塊的詳細(xì)功能如下:

5、爬蟲模塊第一個(gè)模塊為爬蟲模塊。爬蟲模塊的主要任務(wù)是負(fù)責(zé)尋找網(wǎng)頁(yè),并將網(wǎng)頁(yè)的URL和關(guān)鍵字提取出來(lái)。此模塊又詳細(xì)分為兩大模塊:效勞器模塊和正則引擎模塊,這兩個(gè)模塊分別負(fù)責(zé)上述的兩個(gè)功能。效勞器模塊向*個(gè)種子URL發(fā)送請(qǐng)求,或得其頁(yè)面容;正則引擎模塊將效勞器獲取的頁(yè)面用正則表達(dá)式對(duì)其進(jìn)展分析,截取其中的URL和關(guān)鍵字,然后再將URL傳遞給效勞器模塊。系統(tǒng)按照這樣的方式不斷的抓取網(wǎng)頁(yè)并進(jìn)展分析,最后將結(jié)果存進(jìn)數(shù)據(jù)庫(kù)。搜索模塊第二個(gè)模塊是搜索模塊,用戶在搜索界面輸入關(guān)鍵字,然后系統(tǒng)在數(shù)據(jù)庫(kù)中搜索對(duì)應(yīng)的關(guān)鍵字,最后將結(jié)果返回給用戶。此模塊又分為搜索界面和結(jié)果界面。搜索界面是首頁(yè),用戶在此界面中輸入想要搜

6、索的關(guān)鍵詞,這些關(guān)鍵詞將被此頁(yè)面記錄下來(lái)傳遞到數(shù)據(jù)中進(jìn)展搜素。結(jié)果頁(yè)面是數(shù)據(jù)庫(kù)結(jié)果的承受者,當(dāng)數(shù)據(jù)庫(kù)完成搜素后會(huì)將結(jié)果傳遞給次頁(yè)面,然后結(jié)果頁(yè)面會(huì)將結(jié)果呈現(xiàn)給用戶。數(shù)據(jù)庫(kù)模塊數(shù)據(jù)庫(kù)模塊在整個(gè)系統(tǒng)中起到存儲(chǔ)和橋梁作用。爬蟲模塊將搜索的結(jié)果整理完成后存入數(shù)據(jù)庫(kù),搜索模塊從數(shù)據(jù)庫(kù)中獲取需要的信息并呈現(xiàn)給用戶。1.4對(duì)非功能性的需求精度 該系統(tǒng)的輸入為一個(gè)字符串,里面包含了一個(gè)或多個(gè)關(guān)鍵字,長(zhǎng)度在38個(gè)漢字以,超過(guò)的局部將被直接舍棄。輸出的數(shù)據(jù)要求包括的URL和頁(yè)面簡(jiǎn)介,按照頁(yè)面容與搜索容的匹配程度來(lái)排序。時(shí)間特性要求 響應(yīng)時(shí)間0.01s更新處理時(shí)間0.1數(shù)據(jù)的轉(zhuǎn)換和傳送時(shí)間0.1s靈活性該系統(tǒng)運(yùn)用的

7、主要語(yǔ)言是Java,由于Java是一門跨平臺(tái)的語(yǔ)言,所以本系統(tǒng)的兼容性比擬強(qiáng),只要配置了Java環(huán)境就可以運(yùn)行。當(dāng)該系統(tǒng)與數(shù)據(jù)庫(kù)MySQL的接口發(fā)生變化時(shí),系統(tǒng)在重新加載了新的驅(qū)動(dòng)后要能夠正常運(yùn)行。輸人輸出要求輸入:由用戶輸入搜索關(guān)鍵字,關(guān)鍵字類型為合法字符。輸出:顯示結(jié)果列表或提示信息,包含頁(yè)面地址、頁(yè)面標(biāo)題、頁(yè)面描述的條目列表或字符串提示信息。故障處理要求出錯(cuò)輸出信息:根據(jù)不同的錯(cuò)誤提供不同的錯(cuò)誤提示信息。例如無(wú)網(wǎng)絡(luò)連接、無(wú)法檢索到結(jié)果。出錯(cuò)處理對(duì)策:1一般錯(cuò)誤:顯示錯(cuò)誤信息,提示用戶重新操作 2嚴(yán)重錯(cuò)誤:重新啟動(dòng),必要時(shí)啟用備份恢復(fù)數(shù)據(jù)其他專門要求如用戶單位對(duì)平安的要求,對(duì)使用方便的要求

8、,對(duì)可維護(hù)性、可補(bǔ)充性、易讀性、可靠性、運(yùn)行環(huán)境可轉(zhuǎn)換性的特殊要求等。 1)強(qiáng)健性:如果用戶在發(fā)送搜索請(qǐng)求后與效勞器連接中斷,在用戶重新連接后并重新請(qǐng)求時(shí),系統(tǒng)應(yīng)快速將信息反應(yīng)給用戶。2)可維護(hù)性:新的管理員應(yīng)該可以在10分鐘以掌握關(guān)閉和開(kāi)啟效勞器等根本操作。3運(yùn)行環(huán)境可轉(zhuǎn)換行:任何裝有瀏覽器的系統(tǒng)都應(yīng)該可以訪問(wèn)效勞器。當(dāng)效勞器更換操作系統(tǒng)時(shí),在部署好Java環(huán)境后應(yīng)可以馬上運(yùn)行。2程序設(shè)計(jì)2.1總體設(shè)計(jì)思想本軟件通過(guò)客戶端瀏覽器,用戶設(shè)置自己的愛(ài)好,并通過(guò) 傳給效勞器,效勞器接收信息執(zhí)行響應(yīng)操作。2.3程序設(shè)計(jì)總體框圖系統(tǒng)功能層次模塊圖如圖1-2所示圖表1-SEQ 圖表 * ARABIC2

9、系統(tǒng)層次模塊圖2.4程序詳細(xì)設(shè)計(jì)1RecordDAOPro*y類UML設(shè)計(jì)2IRecordDAO類設(shè)計(jì)說(shuō)明3DatabaseConnection類設(shè)計(jì)說(shuō)明(4)RecordDAOImpl類設(shè)計(jì)說(shuō)明5Record類設(shè)計(jì)說(shuō)明6HtmlHelper類設(shè)計(jì)說(shuō)明7SpiderThread類設(shè)計(jì)說(shuō)明8DAOFactory類設(shè)計(jì)說(shuō)明9Page類UML設(shè)計(jì)10測(cè)試類UML設(shè)計(jì)7主體程序UML類圖源代碼局部:RecordDAOPro*y.java代碼import java.util.ArrayList;import .engine.dao.impl.RecordDAOPro*y;import .engine.p

10、o.Record;import .engine.util.HtmlHelper;/* author */public class ResultController private ResultController ()private static ResultController resultController;/* return ResultController */Public static synchronized ResultController getResultController()if(resultController = null)resultController = ne

11、w ResultController();return resultController;/* * param keyWord * return Record * throws E*ception*/public ArrayList queryResult(String keyWord) throws E*ception String keyWords = keyWord.split(s);ArrayList list = new ArrayList();RecordDAOPro*y recordDao =null;for(int i=0; ikeyWords.length;+i)keyWor

12、d = keyWordsi;recordDao = new RecordDAOPro*y();list.addAll(recordDao.getRecord(WHERE recordTitle LIKE % + keyWord + %);recordDao = new RecordDAOPro*y();list.addAll(recordDao.getRecord(WHERE recordContent LIKE % + keyWord + %);return list;User.java代碼import java.io.Serializable;public class User imple

13、ments Serializableprivate static final long serialVersionUID = 00L;private String no; private String name; private Integer age; private String se*; private String phone; private String imagePath;public String getNo() return no;public void setNo(String no) this.no = no;public String getName() return

14、name;public void setName(String name) = name;public Integer getAge() return age;public void setAge(Integer age) this.age = age;public String getSe*() return se*;public void setSe*(String se*) this.se* = se*;public String getPhone() return phone;public void setPhone(String phone) this.phone

15、 = phone;public String getImagePath() return imagePath;public void setImagePath(String imagePath) this.imagePath = imagePath;BusinessObject.java代碼import java.util.List;publicclass BusinessObject int currentPos; User users; PropertiesUtil proutil;public BusinessObject() currentPos = 0; proutil = new

16、PropertiesUtil(config/telephone.dat); users = getAllUsers();public User getAllUsers() List list = proutil.getUsers();User users2 = new Userlist.size();for(int i =0;i0)currentPos -;return userscurrentPos;public User ne*t() if(currentPos users.length - 1)currentPos +;return userscurrentPos;public User

17、 last() currentPos = users.length - 1;return userscurrentPos;publicvoid saveUser(User user) proutil.save(user);users = getAllUsers();currentPos = Integer.parseInt(user.getNo() - 1; PropertiesUtil.java代碼import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundE*ception;import jav

18、a.io.FileOutputStream;import java.io.IOE*ception;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.List;import java*.swing.JOptionPane;public class PropertiesUtil private ObjectInputStream ois = null;private ObjectOutputStream oos = null;p

19、rivate List lstUsers = new ArrayList();private String fileName = null;public PropertiesUtil(String fileName)this.fileName = fileName; SuppressWarnings(unchecked)public List getUsers()try ois = new ObjectInputStream(new FileInputStream(fileName); lstUsers = (ArrayList)ois.readObject(); ois.close(); c

20、atch(FileNotFoundE*ception e) intRecord(); catch (ClassNotFoundE*ception e) e.printStackTrace(); catch (IOE*ception e) e.printStackTrace(); return lstUsers; public void save(User user)try oos = new ObjectOutputStream(new FileOutputStream(config/telephone.dat);int i;for( i = 0;i = lstUsers.size() lst

21、Users.add(user);/新增oos.writeObject(lstUsers);oos.flush();oos.close(); catch (IOE*ception e) e.printStackTrace();/* * 假設(shè)記錄文件不存在,則初始化記錄文件 */private void intRecord()/創(chuàng)立文件File f = new File(config/telephone.dat);try f.createNewFile(); catch (IOE*ception e1) e1.printStackTrace();/新建一條記錄User u = new User()

22、;u.setNo(1);u.setName();u.setAge(0);u.setSe*(F);u.setPhone();u.setImagePath();try oos = new ObjectOutputStream(new FileOutputStream(config/telephone.dat);lstUsers.add(u);oos.writeObject(lstUsers);oos.close(); JOptionPane.showMessageDialog(null, 請(qǐng)重啟本程序); System.e*it(0); catch (FileNotFoundE*ception e

23、1) e1.printStackTrace(); catch (IOE*ception e1) e1.printStackTrace();Test.java代碼import java.io.FileNotFoundE*ception;import java.io.FileOutputStream;import java.io.IOE*ception;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.List;public class Test private ObjectOutputStr

24、eam oos = null;private List lstUsers = new ArrayList();User u1 = null;User u2 = null;User u3 = null;public Test() try oos = new ObjectOutputStream(new FileOutputStream(config/telephone.dat);u1 = new User();u1.setNo(1);u1.setName(人物1);u1.setSe*(M);u1.setAge(11);u1.setPhone(111);u1.setImagePath(config

25、/demo8.jpg);lstUsers.add(u1);u2 = new User();u2.setNo(2);u2.setName(人物2);u2.setSe*(F);u2.setAge(22);u2.setPhone(222);u2.setImagePath(config/demo4.jpg);lstUsers.add(u2);u3 = new User();u3.setNo(3);u3.setName(人物3);u3.setSe*(F);u3.setAge(33);u3.setPhone(333);u3.setImagePath(config/demo2.jpg);lstUsers.a

26、dd(u3); catch (FileNotFoundE*ception e) e.printStackTrace(); catch (IOE*ception e) e.printStackTrace();public static void main(String args) Test t = new Test();try t.oos.writeObject(t.lstUsers);t.oos.close(); catch (IOE*ception e) e.printStackTrace();publicclass Result private String recordLink;priv

27、ate String recordTitle;private String recordAbstractContent;private String keywordTimes;public String getRecordLink() return recordLink;publicvoid setRecordLink(String recordLink) this.recordLink = recordLink;public String getRecordTitle() return recordTitle;publicvoid setRecordTitle(String recordTi

28、tle) this.recordTitle = recordTitle;public String getRecordAbstractContent() return recordAbstractContent;publicvoid setRecordAbstractContent(String recordAbstractContent) this.recordAbstractContent = recordAbstractContent;public String getKeywordTimes() return keywordTimes;publicvoid setKeywordTime

29、s(String keywordTimes) this.keywordTimes = keywordTimes;import java.sql.*;publicclass DatabaseConnection private Connection con=null;privatestaticfinal String DRIVER=.mysql.jdbc.Driver;privatestaticfinal String URL=jdbc:mysql:/localhost:3306/webengineuseUnicode=true&characterEncoding=utf-8;privatest

30、aticfinal String USER=root;privatestaticfinal String PASS=1234;public DatabaseConnection() throws E*ceptionClass.forName(DRIVER);con=DriverManager.getConnection(URL, USER, PASS);public Connection getConnection() throws E*ceptionreturn con;publicvoid close() throws E*ceptionif(con!=null)con.close();i

31、mport java.io.IOE*ception;import java*.servlet.Filter;import java*.servlet.FilterChain;import java*.servlet.FilterConfig;import java*.servlet.ServletE*ception;import java*.servlet.ServletRequest;import java*.servlet.ServletResponse;publicclass SetCharacterEncodingFilter implements Filter private Str

32、ing encoding;Overridepublicvoid init(FilterConfig filterConfig) throws ServletE*ception / TODO Auto-generated method stubthis.encoding = filterConfig.getInitParameter(encoding);Overridepublicvoid doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOE*ception, Servlet

33、E*ception / TODO Auto-generated method stubrequest.setCharacterEncoding(this.encoding);chain.doFilter(request, response);Overridepublicvoid destroy() / TODO Auto-generated method stubthis.encoding=null;import java.sql.*;import java.util.*;import .engine.dao.IRecordDAO;import .engine.po.Record;public

34、class RecordDAOImpl implements IRecordDAO SuppressWarnings(unused)private Connection con = null;SuppressWarnings(unused)private PreparedStatement stat = null;public RecordDAOImpl(Connection con) this.con = con;Overridepublicboolean insertRecord(Record record) throws E*ception int i = 0;String sql =

35、insert into Result(recordTitle,recordContent,recordLink) values(,);try PreparedStatement preStmt = con.prepareStatement(sql);preStmt.setString(1, record.getRecordTitle();preStmt.setString(2, record.getRecordContent();preStmt.setString(3, record.getRecordLink();i = preStmt.e*ecuteUpdate(); catch (SQL

36、E*ception e) e.printStackTrace();if (i = 1) returntrue;/ else returnfalse;Overridepublicboolean clearAll() throws E*ception Connection conn;boolean flag = false;String sql;try conn = con;sql = delete * from Result;flag = stat.e*ecute(sql); catch (E*ception e*) System.out.println(Error : + e*.toStrin

37、g();if (flag) returntrue; else returnfalse;Overridepublic ArrayList getRecord(String condition) throws E*ception ArrayList records = new ArrayList();String sql = select recordLink,recordTitle,recordContent from Result + condition;tryResultSet rs=con.createStatement().e*ecuteQuery(sql);while(rs.ne*t(

38、)Record record=new Record();record.setRecordLink(rs.getString(recordLink);record.setRecordTitle(rs.getString(recordTitle);String content = rs.getString(recordContent);if(content.length()=400)content = content.substring(0,400)+.;record.setRecordContent(content);records.add(record);catch (SQLE*ception

39、 e) e.printStackTrace();return records;public ArrayList getRecord(String where, int number)throws E*ception ArrayList records = new ArrayList();String sql = select recordLink,recordTitle,recordContent from Result where +where + limit + Integer.toString(number);tryResultSet rs=con.createStatement().e

40、*ecuteQuery(sql);while(rs.ne*t()Record record=new Record();record.setRecordLink(rs.getString(recordLink);record.setRecordTitle(rs.getString(recordTitle);String content = rs.getString(recordContent);if(content.length()=400)content = content.substring(0,400)+.;record.setRecordContent(content);records.

41、add(record);catch (SQLE*ception e) e.printStackTrace();return records;import java.util.ArrayList;import java*.servlet. . ServletRequest;import java*.servlet. . ServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForw

42、ard;import org.apache.struts.action.ActionMapping;import .engine.business.ResultController;import .engine.po.Record;import .engine.struts.form.GetResultForm;import .engine.util.PageController;publicclass GetResultAction e*tends Action public ActionForward e*ecute(ActionMapping mapping, ActionForm fo

43、rm, ServletRequest request, ServletResponse response) throws E*ception GetResultForm getResultForm = (GetResultForm) form;String keyWord = getResultForm.getKeyWord();if(keyWord = null|keyWord.equals()keyWord = (String) request.getSession().getAttribute(keyWord);ResultController resultController = Re

44、sultController.getResultController();String str = request.getParameter(PageInde*);if(str=null)str = 1;int currentPageInde* = Integer.parseInt(str);PageController pc = (PageController)request.getAttribute(pc);if(pc=null)pc = new PageController();ArrayList list = resultController.queryResult(keyWord);pc.setBigList(list);request.getSession().setAttribute(pc, pc);request.getSession().setAttribute(keyWord, keyWord);pc.setC

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論