




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上JAVA RMI 對計算器編程實現(xiàn)摘要:本文圍繞Java編程語言在網(wǎng)絡(luò)編程方面的具體應(yīng)用,論述了面向?qū)ο蠓椒?,對計算器程序進行需求分析、概要設(shè)計、詳細設(shè)計,最后使用java rmi編程實現(xiàn)了全過程。Java作為一種風(fēng)靡一時的網(wǎng)絡(luò)開發(fā)語言,其巨大的威力就體現(xiàn)在它強大的開發(fā)分布式網(wǎng)絡(luò)應(yīng)用的能力上,而RMI就是開發(fā)百分之百純Java的網(wǎng)絡(luò)分布式應(yīng)用系統(tǒng)的核心解決方案之一。其實它可以被看作是RPC的Java版本。但是傳統(tǒng)RPC并不能很好地應(yīng)用于分布式對象系統(tǒng)。而Java RMI 則支持存儲于不同地址空間的程序級對象之間彼此進行通信,實現(xiàn)遠程對象之間的無縫遠程調(diào)用。RMI目前使
2、用Java遠程消息交換協(xié)議JRMP(Java Remote Messaging otocol)進行通信。JRMP是專為Java的遠程對象制定的協(xié)議。因此,Java RMI具有Java的"Write Once,Run Anywhere"的優(yōu)點,是分布式應(yīng)用系統(tǒng)的百分之百純Java解決方案。用Java RMI開發(fā)的應(yīng)用系統(tǒng)可以部署在任何支持JRE(Java Run Environment Java,運行環(huán)境)的平臺上。本文擬從程序的角度舉例介紹怎樣利用RMI實現(xiàn)Java分布式應(yīng)用。 關(guān)鍵詞:JAVA RMI 分布式 應(yīng)用Abstract : This pap
3、er focuses on the specific application in the Java programming language network programming , discusses the object-oriented method, the calculator program needs analysis , outline design , detailed design , and finally the use of java rmi programming the entire process. As a rage Java web developmen
4、t language, and its enormous power is reflected in the ability of its powerful development of distributed network applications , while the core 100% pure Java RMI is to develop a network of distributed application system one of the solutions . In fact, it can be seen as RPC Java version. But traditi
5、onal RPC is not well applied to distributed object systems . The Java RMI supports communication between the stored procedures in different address spaces each object class , seamless remote call remote objects. Currently the use of Java RMI remote message exchange protocol JRMP (Java Remote Messagi
6、ng PRotocol) communication. JRMP is a protocol designed for Java remote object making. Thus , the advantages of "Write Once, Run Anywhere" The Java RMI with Java , and is 100% pure Java distributed application system solutions. Applications developed using Java RMI systems can be deployed
7、on any platform supported JRE (Java Run Environment Java, Runtime Environment) . This paper , for example from the perspective of how to introduce the use of the program 's implementation of Java RMI distributed applications .Keywords: JAVA RMI Distributed Application 1引言隨著科學(xué)技術(shù)的發(fā)展,計算機領(lǐng)域也在飛速的發(fā)展,人
8、們對于計算器的要求越來越高。而java語言是今年來比較流行的語言。經(jīng)過10多年的發(fā)展,java已經(jīng)滲透到全球的每個角落。而在這個網(wǎng)絡(luò)時代,java語言在網(wǎng)絡(luò)編程方面的有事使得網(wǎng)絡(luò)編程有了更好的選擇。Java語言最令人矚目的特點就是其具有跨平臺性,使其不受平臺影響,并得到了廣泛的應(yīng)用。1.1 RMI系統(tǒng)運行機理RMI應(yīng)用程序通常包括兩個獨立的程序:服務(wù)器程序和客戶機程序。典型的服務(wù)器應(yīng)用程序?qū)?chuàng)建多個遠程對象,使這些遠程對象能夠被引用,然后等待客戶機調(diào)用這些遠程對象的方法。而典型的客戶機程序則從服務(wù)器中得到一個或多個遠程對象的引用,然后調(diào)用遠程對象的方法。RMI為服務(wù)器和客戶機進行通信和信息傳遞
9、提供了一種機制。在與遠程對象的通信過程中,RMI使用標準機制:stub和skeleton。遠程對象的stub擔(dān)當(dāng)遠程對象的客戶本地代表或代理人角色。調(diào)用程序?qū)⒄{(diào)用本地stub的方法,而本地stub將負責(zé)執(zhí)行對遠程對象的方法調(diào)用。在RMI中,遠程對象的stub與該遠程對象所實現(xiàn)的遠程接口集相同。調(diào)用stub的方法時將執(zhí)行下列操作:(1) 初始化與包含遠程對象的遠程虛擬機的連接;(2) 對遠程虛擬機的參數(shù)進行編組(寫入并傳輸);(3) 等待方法調(diào)用結(jié)果;(4) 解編(讀?。┓祷刂祷蚍祷氐漠惓?;(5) 將值返回給調(diào)用程序。為了向調(diào)用程序展示比較簡單的調(diào)用機制,stub將參數(shù)的序列化和網(wǎng)絡(luò)級通信等細節(jié)
10、隱藏了起來。在遠程虛擬機中,每個遠程對象都可以有相應(yīng)的skeleton(在JDK1.2環(huán)境中無需使用skeleton)。Skeleton負責(zé)將調(diào)用分配給實際的遠程對象實現(xiàn)。它在接收方法調(diào)用時執(zhí)行下列操作:(1) 解編(讀?。┻h程方法的參數(shù);(2) 調(diào)用實際遠程對象實現(xiàn)上的方法;(3) 將結(jié)果(返回值或異常)編組(寫入并傳輸)給調(diào)用程序。stub和skeleton由rmic編譯器生成。利用RMI編寫分布式對象應(yīng)用程序需要完成以下工作2:(1) 定位遠程對象。應(yīng)用程序可使用兩種機制中的一種得到對遠程對象的引用。它既可用RMI的簡單命名工具rmiregistry來注冊它的遠程對象,也可以將遠程對象引
11、用作為常規(guī)操作的一部分來進行傳遞和返回。(2)與遠程對象通信。遠程對象間通信的細節(jié)由RMI處理,對于程序員來說,遠程通信看起來就像標準的Java方法調(diào)用。(3)給作為參數(shù)或返回值傳遞的對象加載類字節(jié)碼。因為RMI答應(yīng)調(diào)用程序?qū)⒓僇ava對象傳給遠程對象,所以,RMI將提供必要的機制,既可以加載對象的代碼又可以傳輸對象的數(shù)據(jù)。在RMI分布式應(yīng)用程序運行時,服務(wù)器調(diào)用注冊服務(wù)程序以使名字與遠程對象相關(guān)聯(lián)??蛻魴C在服務(wù)器上的注冊服務(wù)程序中用遠程對象的名字查找該遠程對象,然后調(diào)用它的方法。1.2 對象序列化在RMI分布式應(yīng)用系統(tǒng)中,服務(wù)器與客戶機之間傳遞的Java對象必須是可序列化的對象。不可序列化的
12、對象不能在對象流中進行傳遞。對象序列化擴展了核心Java輸入/輸出類,同時也支持對象。對象序列化支持把對象編碼以及將通過它們可訪問到的對象編碼變成字節(jié)流;同時,它也支持流中對象圖形的互補重構(gòu)造。序列化用于輕型持久性和借助于套接字或遠程方法調(diào)用(RMI)進行的通信。序列化中現(xiàn)在包括一個 API( Programming Interface,應(yīng)用程序接口),答應(yīng)獨立于類的域指定對象的序列化數(shù)據(jù),并答應(yīng)使用現(xiàn)有協(xié)議將序列化數(shù)據(jù)域?qū)懭肓髦谢驈牧髦凶x取,以確保與缺省讀寫機制的兼容性。為編寫應(yīng)用程序,除多數(shù)瞬態(tài)應(yīng)用程序外,都必須具備存儲和檢索 Java對象的能力。以序列化方式存儲和檢索對象的要害
13、在于提供重新構(gòu)造該對象所需的足夠?qū)ο鬆顟B(tài)。存儲到流的對象可能會支持 Serializable(可序列化)或 Externalizable(可外部化)接口。對于Java對象,序列化形式必須能標識和校驗存儲其內(nèi)容的對象所屬的 Java類,并且將該內(nèi)容還原為新的實例。對于可序列化對象,流將提供足夠的信息將流的域還原為類的兼容版本。對于可外部化對象,類將全權(quán)負責(zé)其內(nèi)容的外部格式。序列化 Java 對象的目的是:提供一種簡單但可擴充的機制,以序列化方式維護 Java對象的類型及安全屬性;具有支持編組和解編的擴展能力以滿足遠程對象的需要;具有可擴展性以支持 Java 對象的簡單持久性;只有在自定義時,才需
14、對每個類提供序列化自實現(xiàn);答應(yīng)對象定義其外部格式。2 分布式應(yīng)用的實現(xiàn)和運行步驟2.1 編寫Java RMI分布式應(yīng)用程序的步驟主要包括以下幾步:將遠程類的功能定義為Java接口。在Java中,遠程對象是實現(xiàn)遠程接口的類的實例1。在遠程接口中聲明每個要遠程調(diào)用的方法。遠程接口具有如下特點:1) 遠程接口必須聲明為public。假如不這樣,則除非客戶端與遠程接口在同一個包內(nèi),否則當(dāng)試圖裝入實現(xiàn)該遠程接口的遠程對象時會得到錯誤結(jié)果。2) 遠程對象擴展java.rmi.Remote接口。3) 除了所有應(yīng)用程序特定的例外之外,每個方法還必須拋出java.rmi.RemoteException例外。4)
15、 任何作為參數(shù)或返回值傳送的遠程對象的數(shù)據(jù)類型必須聲明為遠程接口類型,而不是實現(xiàn)類。2.2 系統(tǒng)功能圖圖 2.2 計算器系統(tǒng)功能圖3 程序設(shè)計說明下面是一個使用RMI實現(xiàn)的計算器,主要分為兩個部分,服務(wù)器主要實現(xiàn)接受客服端的連接并進行加、減、乘、除,最后將結(jié)果返回給客戶端,客戶端主要實現(xiàn)對計算器的GUI編程,添加事件監(jiān)聽,對用戶進行的操作進行判斷,并調(diào)用客服端的方法進行計算。下面對結(jié)果和程序進行分析:定義一個接口并從實現(xiàn)Remate接口定義一個CalculatorImp類實現(xiàn)Calculator這個接口,并重寫接口的方法服務(wù)端進行注冊客戶端進行遠程方法調(diào)用運行結(jié)果如下:啟動服務(wù)端啟動客戶端:參
16、考文獻:1 編程思想 Thinking in Java 4th Bruce Eckel著 北京;機械工業(yè)出版社,20072 分布式操作系統(tǒng) Andrew S.Tanenbaum著 北京;電子工業(yè)出版社,2008附源代碼:package com.cqupt.RMI;import java.rmi.Remote;public interface Calculator extends Remote /J2SE的API中Remote確實是個接口,/只有實現(xiàn)了remote接口的方法才可以被遠程調(diào)用Public double add(double a,double b)throws java.rmi.Re
17、moteException;public double sub(double a,double b)throws java.rmi.RemoteException;public double mul(double a,double b)throws java.rmi.RemoteException;public double div(double a,double b)throws java.rmi.RemoteException;package com.cqupt.RMI;import java.rmi.RemoteException;import java.rmi.server.Unica
18、stRemoteObject;public class CalculatorImp extends UnicastRemoteObject implements Calculator CalculatorImp() throws RemoteExceptionsuper();public double add(double a, double b) throws java.rmi.RemoteException / TODO Auto-generated method stubSystem.out.println("RMI調(diào)用服務(wù)端所得結(jié)果:" + a + " +
19、 " + b + "=" + (a + b);return a + b;public double div(double a, double b) throws java.rmi.RemoteException / TODO Auto-generated method stubSystem.out.println("RMI調(diào)用服務(wù)端所得結(jié)果:" + a + " / " + b + "=" + (a / b);return a / b;public double mul(double a, double b
20、 )throws java.rmi.RemoteException / TODO Auto-generated method stubSystem.out.println("RMI調(diào)用服務(wù)端所得結(jié)果:" + a + " * " + b + "=" + (a * b);return a * b;public double sub(double a, double b) throws java.rmi.RemoteException / TODO Auto-generated method stubSystem.out.println(&
21、quot;RMI調(diào)用服務(wù)端所得結(jié)果:" + a + " - " + b + "=" + (a - b);return a - b;package com.cqupt.RMI;import .MalformedURLException;import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;public class CaculatorServer CaculatorServer()try Calculator c
22、= new CalculatorImp();LocateRegistry.createRegistry(3000);/使用一個新的端口,默認端口是1109Naming.rebind("rmi:/localhost:3000/CaculatorServer", c); /將server注冊System.out.println("服務(wù)器注冊成功"); catch (RemoteException e) e.printStackTrace(); catch (MalformedURLException e1)e1.printStackTrace();publi
23、c static void main(String args)new CaculatorServer();package com.cqupt.RMI;import .MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;public class CalculatorCli
24、ent extends JFrame private String front = "", behind = "" /分別用于記錄加減乘除運算符之前,之后輸入的內(nèi)容 private String op; /用于記錄運算符 private String re;/用于存儲運算結(jié)果的字符串格式 private boolean flag = false; /用于記錄是否按下了運算符 private boolean flag1 = false;/用于判斷是否輸入了點運算符 private double result;/用于存儲運算結(jié)果 private boolea
25、n flag2 = false;/用于判斷是否輸入了數(shù)字 private boolean flag3 = false;/用于判斷是否按下了等號運算符 JPanel contentPane; JTextField txtResult = new JTextField("0"); JButton btnNull = new JButton("sqrt"); JButton btnFour = new JButton("4"); JButton btnFive = new JButton("5"); JButton bt
26、nSix = new JButton("6"); JButton btnDecrease = new JButton("-"); JButton btnBegin = new JButton("C"); JButton btnOne = new JButton("1"); JButton btnTwo = new JButton("2"); JButton btnThree = new JButton("3"); JButton btnMultiply = new JButt
27、on("*"); JButton btnCancel = new JButton(""); JButton btnZero = new JButton("0"); JButton btnMinus = new JButton("+/-"); JButton btnPoint = new JButton("."); JButton btnDivide = new JButton("/"); JButton btnEqual = new JButton("="
28、); JButton btnIncrease = new JButton("+"); JButton btnSeven = new JButton("7"); JButton btnEight = new JButton("8"); JButton btnNine = new JButton("9"); public CalculatorClient() try setDefaultCloseOperation(EXIT_ON_CLOSE); jbInit(); catch (Exception exception
29、) exception.printStackTrace(); private void jbInit() throws Exception contentPane = (JPanel) getContentPane(); contentPane.setLayout(null); this.setResizable(false); setSize(new Dimension(400, 300); setTitle("計算器"); txtResult.setEnabled(false); txtResult.setFont(new java.awt.Font("Dia
30、log", Font.PLAIN, 20); txtResult.setEditable(false); txtResult.setHorizontalAlignment(SwingConstants.RIGHT); txtResult.setBounds(new Rectangle(33, 19, 310, 34); btnNull.setBounds(new Rectangle(298, 70, 46, 37); btnNull.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12); /btnNull.addA
31、ctionListener(new FrameCalculate_btnNull_actionAdapter(this); btnFour.setBounds(new Rectangle(33, 120, 46, 37); btnFour.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnFive.setBounds(new Rectangle(101, 120, 46, 37); btnFive.setFont(new java.awt.Font("Dialog", Font.PLAIN,
32、20); btnSix.setBounds(new Rectangle(167, 119, 46, 37); btnSix.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnDecrease.setBounds(new Rectangle(234, 120, 46, 37); btnDecrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnBegin.setBounds(new Rectangle(298, 121, 46
33、, 37); btnBegin.setFont(new java.awt.Font("Dialog", Font.PLAIN, 15); btnBegin.addActionListener(new Calculate_btnBegin_actionAdapter(this); btnOne.setBounds(new Rectangle(33, 172, 46, 37); btnOne.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnTwo.setBounds(new Rectangle(
34、101, 172, 46, 37); btnTwo.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnThree.setBounds(new Rectangle(167, 172, 46, 37); btnThree.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnMultiply.setBounds(new Rectangle(234, 172, 46, 37); btnMultiply.setFont(new java.awt
35、.Font("Dialog", Font.PLAIN, 20); btnCancel.setBounds(new Rectangle(298, 172, 46, 37); btnCancel.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12); btnCancel.addActionListener(new Calculate_btnCancel_actionAdapter(this); btnZero.setBounds(new Rectangle(33, 222, 46, 37); btnZero.
36、setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); /加載數(shù)字0-9的監(jiān)聽事件 btnZero.addActionListener(new Calculate_btnZero_actionAdapter(this); btnOne.addActionListener(new Calculate_btnZero_actionAdapter(this); btnTwo.addActionListener(new Calculate_btnZero_actionAdapter(this); btnThree.addAction
37、Listener(new Calculate_btnZero_actionAdapter(this); btnFour.addActionListener(new Calculate_btnZero_actionAdapter(this); btnFive.addActionListener(new Calculate_btnZero_actionAdapter(this); btnSix.addActionListener(new Calculate_btnZero_actionAdapter(this); btnSeven.addActionListener(new Calculate_b
38、tnZero_actionAdapter(this); btnEight.addActionListener(new Calculate_btnZero_actionAdapter(this); btnNine.addActionListener(new Calculate_btnZero_actionAdapter(this); btnMinus.setBounds(new Rectangle(101, 222, 46, 37); btnMinus.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10); btnMinus.
39、addActionListener(new Calculate_btnMinus_actionAdapter(this); btnPoint.setBounds(new Rectangle(167, 222, 46, 37); btnPoint.setFont(new java.awt.Font("Dialog", Font.PLAIN, 30); btnPoint.setHorizontalTextPosition(SwingConstants.CENTER); btnPoint.addActionListener(new Calculate_btnPoint_actio
40、nAdapter(this); btnDivide.setBounds(new Rectangle(234, 222, 46, 37); btnDivide.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnEqual.setBounds(new Rectangle(298, 222, 46, 37); btnEqual.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnEqual.addActionListener(new Cal
41、culate_btnEqual_actionAdapter(this); btnIncrease.setBounds(new Rectangle(234, 70, 46, 37); btnIncrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); /加載加減乘除運算符的監(jiān)聽事件 btnIncrease.addActionListener(new Calculate_btnIncrease_actionAdapter(this); btnDecrease.addActionListener(new Calcula
42、te_btnIncrease_actionAdapter(this); btnMultiply.addActionListener(new Calculate_btnIncrease_actionAdapter(this); btnDivide.addActionListener(new Calculate_btnIncrease_actionAdapter(this); btnSeven.setBounds(new Rectangle(33, 70, 46, 37); btnSeven.setFont(new java.awt.Font("Dialog", Font.PL
43、AIN, 20); btnEight.setBounds(new Rectangle(101, 70, 46, 37); btnEight.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnNine.setBounds(new Rectangle(167, 70, 46, 37); btnNine.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); contentPane.add(btnFive); contentPane.add(btnS
44、ix); contentPane.add(btnDecrease); contentPane.add(btnBegin); contentPane.add(btnOne); contentPane.add(btnTwo); contentPane.add(btnThree); contentPane.add(btnMultiply); contentPane.add(btnCancel); contentPane.add(btnMinus); contentPane.add(btnPoint); contentPane.add(btnDivide); contentPane.add(btnEq
45、ual); contentPane.add(btnEight); contentPane.add(btnNine); contentPane.add(btnFour); contentPane.add(btnSeven); contentPane.add(btnIncrease); contentPane.add(btnNull); contentPane.add(txtResult); contentPane.add(btnZero); public void btnZero_actionPerformed(ActionEvent e) if (flag) /如果剛剛按下了運算符 txtRe
46、sult.setText(""); if (flag1) /判斷之前是否輸入了點運算符 txtResult.setText("0." + e.getActionCommand(); flag1 = false; else txtResult.setText(e.getActionCommand(); flag2 = true; else int num = txtResult.getText().indexOf("."); if (num < 0 && !txtResult.getText().equals(&q
47、uot;0") txtResult.setText(txtResult.getText() + e.getActionCommand(); else if (num < 0 && txtResult.getText().equals("0") txtResult.setText(e.getActionCommand(); else if (num >= 0 && txtResult.getText().equals("0") txtResult.setText("0." + e.g
48、etActionCommand(); else if (num >= 0 && !txtResult.getText().equals("0") txtResult.setText(txtResult.getText() + e.getActionCommand(); flag = false; flag3=false; public void btnIncrease_actionPerformed(ActionEvent e) if(flag3) txtResult.setText(txtResult.getText(); op = e.getAct
49、ionCommand(); /得到剛剛按下的運算符 front = txtResult.getText(); /記錄加減乘除運算符之前輸入的內(nèi)容 else if (flag2) ActionEvent ee = new ActionEvent("qq", 1, "pp"); btnEqual_actionPerformed(ee); op = e.getActionCommand(); /得到剛剛按下的運算符 front = re; flag2 = false; else front = txtResult.getText(); /記錄加減乘除運算符之前
50、輸入的內(nèi)容 op = e.getActionCommand(); /得到剛剛按下的運算符 flag3=false; flag = true; /記錄已經(jīng)按下了加減乘除運算符的其中一個 public void btnEqual_actionPerformed(ActionEvent e) if(!flag3)/未曾按下等于運算符 behind = txtResult.getText(); else front = re; try double a1 = Double.parseDouble(front); double b1 = Double.parseDouble(behind); if (o
51、p = "+") result = this.invoke(a1, b1, "+"); else if (op = "-") result = this.invoke(a1, b1, "-"); else if (op = "*") result = this.invoke(a1, b1, "*"); else result = this.invoke(a1, b1, "/"); Double r = new Double(result); re = r.
52、toString(result); txtResult.setText(re); catch (ArithmeticException ce) txtResult.setText("除數(shù)不能為零"); catch (Exception ee) if (!flag3) flag3 = true; public double invoke(double a1,double b1,String symbol)double result = 0;try Calculator c = (Calculator)Naming.lookup("rmi:/localhost:3000/CaculatorServer");/Naming.lookup will retur
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 碌曲縣2025年數(shù)學(xué)五年級第二學(xué)期期末經(jīng)典試題含答案
- 長春建筑學(xué)院《形體訓(xùn)練1》2023-2024學(xué)年第二學(xué)期期末試卷
- 襄陽科技職業(yè)學(xué)院《中西醫(yī)結(jié)合耳鼻咽喉科學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 伊吾縣2025屆數(shù)學(xué)五年級第二學(xué)期期末學(xué)業(yè)水平測試試題含答案
- 浙江省杭州市富陽區(qū)2025屆初三調(diào)研測試(二)物理試題文試題含解析
- 骨科機器人手術(shù)個案護理
- 銷售新人培訓(xùn)方案
- 煤礦安全規(guī)程培訓(xùn)課件
- 淘寶售后規(guī)則培訓(xùn)
- 物流訂單管理培訓(xùn)課件
- 《三角形的外角》優(yōu)秀課件
- 如何進行社會調(diào)查研究課件
- 鵪鶉蛋脫殼機的設(shè)計
- 項目管理進度表模板(全流程)
- 行為安全觀察behaviorbasedsafety研究復(fù)習(xí)過程
- 鍋爐專業(yè)術(shù)語解釋及英文翻譯對照
- 《小石潭記》作業(yè)設(shè)計
- 體育測量與評價PPT課件-第五章身體素質(zhì)的測量與評價
- 過程分層審核檢查表
- 氣井地面排采技術(shù)方案
- 旅行社等級評定申報材料完整版
評論
0/150
提交評論