![java課程設(shè)計—網(wǎng)絡(luò)爬蟲搜索引擎_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/83a06bda-0fa2-497d-b824-9d57f5f3ad2f/83a06bda-0fa2-497d-b824-9d57f5f3ad2f1.gif)
![java課程設(shè)計—網(wǎng)絡(luò)爬蟲搜索引擎_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/83a06bda-0fa2-497d-b824-9d57f5f3ad2f/83a06bda-0fa2-497d-b824-9d57f5f3ad2f2.gif)
![java課程設(shè)計—網(wǎng)絡(luò)爬蟲搜索引擎_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/83a06bda-0fa2-497d-b824-9d57f5f3ad2f/83a06bda-0fa2-497d-b824-9d57f5f3ad2f3.gif)
![java課程設(shè)計—網(wǎng)絡(luò)爬蟲搜索引擎_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/83a06bda-0fa2-497d-b824-9d57f5f3ad2f/83a06bda-0fa2-497d-b824-9d57f5f3ad2f4.gif)
![java課程設(shè)計—網(wǎng)絡(luò)爬蟲搜索引擎_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/6/83a06bda-0fa2-497d-b824-9d57f5f3ad2f/83a06bda-0fa2-497d-b824-9d57f5f3ad2f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、武漢理工大學(xué)java語言課程設(shè)計學(xué) 號: 課 程 設(shè) 計題 目網(wǎng)絡(luò)爬蟲搜索引擎學(xué) 院管理學(xué)院專 業(yè)信息管理與信息系統(tǒng)班 級姓 名指導(dǎo)教師王新201年7月4日課程設(shè)計任務(wù)書學(xué)生姓名: 指導(dǎo)教師: 王新 工作單位:信息管理與信息系統(tǒng)系 題 目: 網(wǎng)絡(luò)爬蟲搜索引擎 初始條件:合理應(yīng)用Java相關(guān)知識與編程技能,結(jié)合UML面向?qū)ο笤O(shè)計,解決信息管理領(lǐng)域的實際問題,如學(xué)生成績管理、學(xué)籍管理、圖書借閱管理、自動存取款機、通信錄管理、商品銷售管理、醫(yī)院門診管理、火車訂票管理、影院自動售票、世界杯足球比賽管理、人力資源管理、酒店前臺管理、房產(chǎn)中介管理、停車收費管理等。要求完成的主要任務(wù): (包括課程設(shè)計工作量
2、及其技術(shù)要求,以及說明書撰寫等具體要求)1進行需求分析,撰寫需求文檔,繪制用例圖。2識別需求文檔中的類,建模類,初步繪制類圖(之后逐漸完善)。3確定、建模類的實例變量。4確定、建模類的方法。5若有需要,在系統(tǒng)中加入繼承與多態(tài)。6將UML圖轉(zhuǎn)換成Java代碼框架。7設(shè)計算法,若有復(fù)雜的數(shù)據(jù)結(jié)構(gòu)需求,使用相應(yīng)集合框架。8設(shè)計數(shù)據(jù)訪問層,若有數(shù)據(jù)持久化需求,使用數(shù)據(jù)庫/文件。9添加表示層,若程序運行在桌面,使用圖形用戶界面。10實現(xiàn)完整的系統(tǒng),最終Java源代碼至少在300行以上。11進行測試,并給出相應(yīng)結(jié)果。課程設(shè)計報告中要求詳細描述思路、步驟、方法、實現(xiàn)、問題及解決過程、操作說明、測試及結(jié)果。時
3、間安排:12014年6月23日 課程設(shè)計選題、查閱資料22014年6月24日25日 UML面向?qū)ο笤O(shè)計32014年6月26日7月1日 Java程序設(shè)計與代碼調(diào)試42014年7月2日 改進、完善、測試系統(tǒng)52014年7月3日7月4日上午 撰寫、提交課程設(shè)計報告62014年7月4日下午 課程設(shè)計答辯指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日網(wǎng)絡(luò)爬蟲搜索引擎1項目介紹1.1開發(fā)背景該項目軟件開發(fā)的意圖是開發(fā)出一款網(wǎng)絡(luò)爬蟲軟件。應(yīng)用目標(biāo)為搜集網(wǎng)絡(luò)信息,便于查詢使用。在如今的BIG DATA時代,網(wǎng)絡(luò)信息龐大而又復(fù)雜,用戶很難直接從中獲得需要的信息。網(wǎng)絡(luò)爬蟲軟件就是將這些信息收集并
4、整理,當(dāng)用戶發(fā)起搜索請求時,該系統(tǒng)可將用戶最需要的信息反饋給用戶。1.2用戶的特點 本軟件為免費軟件,可供所有可使用互聯(lián)網(wǎng)的用戶使用。最終用戶只需掌握基本的上網(wǎng)技術(shù)即可,操作人員的主要工作是啟動和關(guān)閉服務(wù)器,只需掌握基本的電腦使用方法即可。維護人員需要專業(yè)的程序員,懂得Java的網(wǎng)絡(luò)編程以及計算機網(wǎng)絡(luò)基礎(chǔ),教育水平在專科以上。軟件的預(yù)期工作時間為24h/日。組織結(jié)構(gòu)圖及用戶角色如圖表1-1所示:1.3需求分析1.3.1各子模塊功能的描述本系統(tǒng)共分為三大模塊:爬蟲模塊、數(shù)據(jù)庫模塊和搜索模塊,也就是后臺、前臺和數(shù)據(jù)庫。每一個模塊有各自的分工,最后三大模塊集合在一起構(gòu)成一個完整的網(wǎng)絡(luò)爬蟲系統(tǒng)。各個子
5、模塊的詳細功能如下:1.3.2爬蟲模塊第一個模塊為爬蟲模塊。爬蟲模塊的主要任務(wù)是負責(zé)尋找網(wǎng)頁,并將網(wǎng)頁內(nèi)的URL和關(guān)鍵字提取出來。此模塊又詳細分為兩大模塊:服務(wù)器模塊和正則引擎模塊,這兩個模塊分別負責(zé)上述的兩個功能。服務(wù)器模塊向某個種子URL發(fā)送請求,或得其頁面內(nèi)容;正則引擎模塊將服務(wù)器獲取的頁面用正則表達式對其進行分析,截取其中的URL和關(guān)鍵字,然后再將URL傳遞給服務(wù)器模塊。系統(tǒng)按照這樣的方式不斷的抓取網(wǎng)頁并進行分析,最后將結(jié)果存進數(shù)據(jù)庫。1.3.3搜索模塊第二個模塊是搜索模塊,用戶在搜索界面輸入關(guān)鍵字,然后系統(tǒng)在數(shù)據(jù)庫中搜索對應(yīng)的關(guān)鍵字,最后將結(jié)果返回給用戶。此模塊又分為搜索界面和結(jié)果界
6、面。搜索界面是首頁,用戶在此界面中輸入想要搜索的關(guān)鍵詞,這些關(guān)鍵詞將被此頁面記錄下來傳遞到數(shù)據(jù)中進行搜素。結(jié)果頁面是數(shù)據(jù)庫結(jié)果的接受者,當(dāng)數(shù)據(jù)庫完成搜素后會將結(jié)果傳遞給次頁面,然后結(jié)果頁面會將結(jié)果呈現(xiàn)給用戶。1.3.4數(shù)據(jù)庫模塊數(shù)據(jù)庫模塊在整個系統(tǒng)中起到存儲和橋梁作用。爬蟲模塊將搜索的結(jié)果整理完成后存入數(shù)據(jù)庫,搜索模塊從數(shù)據(jù)庫中獲取需要的信息并呈現(xiàn)給用戶。1.4對非功能性的需求1.4.1精度 該系統(tǒng)的輸入為一個字符串,里面包含了一個或多個關(guān)鍵字,長度在38個漢字以內(nèi),超過的部分將被直接舍棄。輸出的數(shù)據(jù)要求包括網(wǎng)站的URL和頁面簡介,按照頁面內(nèi)容與搜索內(nèi)容的匹配程度來排序。1.4.2時間特性要求
7、 a) 響應(yīng)時間0.01sb) 更新處理時間0.1c) 數(shù)據(jù)的轉(zhuǎn)換和傳送時間0.1s1.4.3靈活性該系統(tǒng)運用的主要語言是Java,由于Java是一門跨平臺的語言,所以本系統(tǒng)的兼容性比較強,只要配置了Java環(huán)境就可以運行。當(dāng)該系統(tǒng)與數(shù)據(jù)庫MySQL的接口發(fā)生變化時,系統(tǒng)在重新加載了新的驅(qū)動后要能夠正常運行。1.4.4輸人輸出要求輸入:由用戶輸入搜索關(guān)鍵字,關(guān)鍵字類型為合法字符。輸出:顯示結(jié)果列表或提示信息,包含頁面地址、頁面標(biāo)題、頁面描述的條目列表或字符串提示信息。1.4.5故障處理要求出錯輸出信息:根據(jù)不同的錯誤提供不同的錯誤提示信息。例如無網(wǎng)絡(luò)連接、無法檢索到結(jié)果。出錯處理對策:1)一般
8、錯誤:顯示錯誤信息,提示用戶重新操作 2)嚴(yán)重錯誤:重新啟動,必要時啟用備份恢復(fù)數(shù)據(jù)1.4.6其他專門要求如用戶單位對安全保密的要求,對使用方便的要求,對可維護性、可補充性、易讀性、可靠性、運行環(huán)境可轉(zhuǎn)換性的特殊要求等。 1)健壯性:如果用戶在發(fā)送搜索請求后與服務(wù)器連接中斷,在用戶重新連接后并重新請求時,系統(tǒng)應(yīng)快速將信息反饋給用戶。2)可維護性:新的管理員應(yīng)該可以在10分鐘以內(nèi)掌握關(guān)閉和開啟服務(wù)器等基本操作。3)運行環(huán)境可轉(zhuǎn)換行:任何裝有瀏覽器的系統(tǒng)都應(yīng)該可以訪問服務(wù)器。當(dāng)服務(wù)器更換操作系統(tǒng)時,在部署好Java環(huán)境后應(yīng)可以馬上運行。2程序設(shè)計2.1總體設(shè)計思想本軟件通過客戶端瀏覽器,用戶設(shè)置自
9、己的愛好,并通過http傳給服務(wù)器,服務(wù)器接收信息執(zhí)行響應(yīng)操作。2.3程序設(shè)計總體框圖系統(tǒng)功能層次模塊圖如圖1-2所示圖表1-1 系統(tǒng)層次模塊圖2.4程序詳細設(shè)計(1)RecordDAOProxy類UML設(shè)計(2)IRecordDAO類設(shè)計說明(3)DatabaseConnection類設(shè)計說明(4)RecordDAOImpl類設(shè)計說明(5)Record類設(shè)計說明(6)HtmlHelper類設(shè)計說明(7)SpiderThread類設(shè)計說明(8)DAOFactory類設(shè)計說明(9)Page類UML設(shè)計(10)測試類UML設(shè)計(7)主體程序UML類圖源代碼部分: RecordDAOProxy.ja
10、va代碼import java.util.ArrayList;import com.engine.dao.impl.RecordDAOProxy;import com.engine.po.Record;import com.engine.util.HtmlHelper;/* author */public class ResultController private ResultController ()private static ResultController resultController;/* return ResultController */Public static sync
11、hronized ResultController getResultController()if(resultController = null)resultController = new ResultController();return resultController;/* * param keyWord * return Record * throws Exception*/public ArrayList<Record> queryResult(String keyWord) throws Exception String keyWords = keyWord.spl
12、it("s");ArrayList<Record> list = new ArrayList<Record>();RecordDAOProxy recordDao =null;for(int i=0; i<keyWords.length;+i)keyWord = keyWordsi;recordDao = new RecordDAOProxy();list.addAll(recordDao.getRecord("WHERE recordTitle LIKE '%" + keyWord + "%'&q
13、uot;);recordDao = new RecordDAOProxy();list.addAll(recordDao.getRecord("WHERE recordContent LIKE '%" + keyWord + "%'");return list;User.java代碼import java.io.Serializable;public class User implements Serializableprivate static final long serialVersionUID = 5612649006026227
14、700L;private String no; private String name; private Integer age; private String sex; private String phone; private String imagePath;public String getNo() return no;public void setNo(String no) this.no = no;public String getName() return name;public void setName(String name) = name;public
15、Integer getAge() return age;public void setAge(Integer age) this.age = age;public String getSex() return sex;public void setSex(String sex) this.sex = sex;public String getPhone() return phone;public void setPhone(String phone) this.phone = phone;public String getImagePath() return imagePath;public
16、void setImagePath(String imagePath) this.imagePath = imagePath; BusinessObject.java代碼import java.util.List;public class BusinessObject int currentPos; User users; PropertiesUtil proutil; public BusinessObject() currentPos = 0; proutil = new PropertiesUtil("config/telephone.dat"); users = g
17、etAllUsers();public User getAllUsers() List <User> list = proutil.getUsers();User users2 = new Userlist.size();for(int i =0;i<list.size();i+)users2i=list.get(i);return users2;public User first() currentPos =0;return userscurrentPos;public User previous() if(currentPos >0)currentPos -;ret
18、urn userscurrentPos;public User next() if(currentPos < users.length - 1)currentPos +;return userscurrentPos;public User last() currentPos = users.length - 1;return userscurrentPos;public void saveUser(User user) proutil.save(user);users = getAllUsers();currentPos = Integer.parseInt(user.getNo() -
19、 1; PropertiesUtil.java代碼import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.List;import javax
20、.swing.JOptionPane;public class PropertiesUtil private ObjectInputStream ois = null;private ObjectOutputStream oos = null;private List<User> lstUsers = new ArrayList<User>();private String fileName = null;public PropertiesUtil(String fileName)this.fileName = fileName; SuppressWarnings(&q
21、uot;unchecked")public List<User> getUsers()try ois = new ObjectInputStream(new FileInputStream(fileName); lstUsers = (ArrayList<User>)ois.readObject(); ois.close(); catch(FileNotFoundException e) intRecord(); catch (ClassNotFoundException e) e.printStackTrace(); catch (IOException e
22、) 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();i+)if(user.getNo().equals(lstUsers.get(i).getNo()lstUsers.set(i, user);/修改break;if(i >= lstUsers.size(
23、) lstUsers.add(user);/新增oos.writeObject(lstUsers);oos.flush();oos.close(); catch (IOException e) e.printStackTrace();/* * 若記錄文件不存在,則初始化記錄文件 */private void intRecord()/創(chuàng)建文件File f = new File("config/telephone.dat");try f.createNewFile(); catch (IOException e1) e1.printStackTrace();/新建一條記錄Use
24、r u = new User();u.setNo("1");u.setName("");u.setAge(0);u.setSex("F");u.setPhone("");u.setImagePath("");try oos = new ObjectOutputStream(new FileOutputStream("config/telephone.dat");lstUsers.add(u);oos.writeObject(lstUsers);oos.close(); JOp
25、tionPane.showMessageDialog(null, "請重啟本程序"); System.exit(0); catch (FileNotFoundException e1) e1.printStackTrace(); catch (IOException e1) e1.printStackTrace();Test.java代碼import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOut
26、putStream;import java.util.ArrayList;import java.util.List;public class Test private ObjectOutputStream oos = null;private List<User> lstUsers = new ArrayList<User>();User u1 = null;User u2 = null;User u3 = null;public Test() try oos = new ObjectOutputStream(new FileOutputStream("co
27、nfig/telephone.dat");u1 = new User();u1.setNo("1");u1.setName("人物1");u1.setSex("M");u1.setAge(11);u1.setPhone("111");u1.setImagePath("config/demo8.jpg");lstUsers.add(u1);u2 = new User();u2.setNo("2");u2.setName("人物2");u2.setS
28、ex("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.setSex("F");u3.setAge(33);u3.setPhone("333");u3.setImagePath("config/demo2.jpg&q
29、uot;);lstUsers.add(u3); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();public static void main(String args) Test t = new Test();try t.oos.writeObject(t.lstUsers);t.oos.close(); catch (IOException e) e.printStackTrace();public class Result private Strin
30、g recordLink;private String recordTitle;private String recordAbstractContent;private String keywordTimes;public String getRecordLink() return recordLink;public void setRecordLink(String recordLink) this.recordLink = recordLink;public String getRecordTitle() return recordTitle;public void setRecordTi
31、tle(String recordTitle) this.recordTitle = recordTitle;public String getRecordAbstractContent() return recordAbstractContent;public void setRecordAbstractContent(String recordAbstractContent) this.recordAbstractContent = recordAbstractContent;public String getKeywordTimes() return keywordTimes;publi
32、c void setKeywordTimes(String keywordTimes) this.keywordTimes = keywordTimes;import java.sql.*;public class DatabaseConnection private Connection con=null;private static final String DRIVER="com.mysql.jdbc.Driver"private static final String URL="jdbc:mysql:/localhost:3306/webengine?us
33、eUnicode=true&characterEncoding=utf-8"private static final String USER="root"private static final String PASS="1234"public DatabaseConnection() throws ExceptionClass.forName(DRIVER);con=DriverManager.getConnection(URL, USER, PASS);public Connection getConnection() throws
34、 Exceptionreturn con;public void close() throws Exceptionif(con!=null)con.close();import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.S
35、ervletResponse;public class SetCharacterEncodingFilter implements Filter private String encoding;Overridepublic void init(FilterConfig filterConfig) throws ServletException / TODO Auto-generated method stubthis.encoding = filterConfig.getInitParameter("encoding");Overridepublic void doFilt
36、er(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException / TODO Auto-generated method stubrequest.setCharacterEncoding(this.encoding);chain.doFilter(request, response);Overridepublic void destroy() / TODO Auto-generated method stubthis.encoding=null
37、;import java.sql.*;import java.util.*;import com.engine.dao.IRecordDAO;import com.engine.po.Record;public class RecordDAOImpl implements IRecordDAO SuppressWarnings("unused")private Connection con = null;SuppressWarnings("unused")private PreparedStatement stat = null;public Recor
38、dDAOImpl(Connection con) this.con = con;Overridepublic boolean insertRecord(Record record) throws Exception int i = 0;String sql = "insert into Result(recordTitle,recordContent,recordLink) values(?,?,?)"try PreparedStatement preStmt = con.prepareStatement(sql);preStmt.setString(1, record.g
39、etRecordTitle();preStmt.setString(2, record.getRecordContent();preStmt.setString(3, record.getRecordLink();i = preStmt.executeUpdate(); catch (SQLException e) e.printStackTrace();if (i = 1) return true;/ else return false;Overridepublic boolean clearAll() throws Exception Connection conn;boolean fla
40、g = false;String sql;try conn = con;sql = "delete * from Result"flag = stat.execute(sql); catch (Exception ex) System.out.println("Error : " + ex.toString();if (flag) return true; else return false;Overridepublic ArrayList<Record> getRecord(String condition) throws Exceptio
41、n ArrayList<Record> records = new ArrayList<Record>();String sql = "select recordLink,recordTitle,recordContent from Result " + condition;tryResultSet rs=con.createStatement().executeQuery(sql);while(rs.next()Record record=new Record();record.setRecordLink(rs.getString("re
42、cordLink");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 (SQLException e) e.printStackTra
43、ce();return records;public ArrayList<Record> getRecord(String where, int number)throws Exception ArrayList<Record> records = new ArrayList<Record>();String sql = "select recordLink,recordTitle,recordContent from Result where " +where +" limit " + Integer.toStrin
44、g(number);tryResultSet rs=con.createStatement().executeQuery(sql);while(rs.next()Record record=new Record();record.setRecordLink(rs.getString("recordLink");record.setRecordTitle(rs.getString("recordTitle");String content = rs.getString("recordContent");if(content.length
45、()>=400)content = content.substring(0,400)+"."record.setRecordContent(content);records.add(record);catch (SQLException e) e.printStackTrace();return records;import java.util.ArrayList;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.a
46、pache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import com.engine.business.ResultController;import com.engine.po.Record;import com.engine.struts.form.GetResultForm;import com.engine.util
47、.PageController;public class GetResultAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception GetResultForm getResultForm = (GetResultForm) form;String keyWord = getResultForm.getKeyWord();if
48、(keyWord = null|keyWord.equals("")keyWord = (String) request.getSession().getAttribute("keyWord");ResultController resultController = ResultController.getResultController();String str = request.getParameter("PageIndex");if(str=null)str = "1"int currentPageIndex = Integer.parseInt(str);PageController pc = (PageController)request.getAttribute("pc");if(pc=null)pc = new PageController();ArrayList<Record> list = resultController.queryResult(keyWord);pc.setBigList(list);request.getSession().setAttribute("pc", pc);request.getSess
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年專業(yè)經(jīng)銷住宅合同
- 2025年住宅購買居間合同標(biāo)準(zhǔn)文本
- 2025年船舶涂料項目規(guī)劃申請報告模板
- 2025年加工鹽項目規(guī)劃申請報告模式
- 2025年水利設(shè)施開發(fā)管理服務(wù)項目提案報告模板
- 2025年專業(yè)軟件技術(shù)支持合同示范文本
- 2025年石膏行業(yè)誠信購銷協(xié)議
- 2025年絕緣材料:絕緣套管項目提案報告模稿
- 2025年人才發(fā)展合作框架協(xié)議
- 2025年兒童監(jiān)護權(quán)放棄協(xié)議范例
- 機器狗:技術(shù)成熟性能優(yōu)越場景剛需放量在即2025
- 2025年村民代表會議講話稿(3篇)
- 《教育強國建設(shè)規(guī)劃綱要(2024-2035年)》解讀-知識培訓(xùn)
- 《加油站安全管理培訓(xùn)課件》
- (一模)烏魯木齊地區(qū)2025年高三年級第一次質(zhì)量語文試卷(含答案)
- 2024年第四季度 國家電網(wǎng)工程設(shè)備材料信息參考價
- 年度得到 · 沈祖蕓全球教育報告(2024-2025)
- 2025年日歷表(A4版含農(nóng)歷可編輯)
- 人工智能大模型
- 架橋機安全教育培訓(xùn)試卷及答案(共3頁)
- 通信桿路工程施工
評論
0/150
提交評論