




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十三章 2007年6月17日 星期日授课教师:老刘学生: 王洪峰第一节 HashMap类常见的方法及其用法public class Test public static void main(String args) /创建5个Bean的对象b1-b5并对它们进行初始化Bean b1=new Bean();b1.setAge(23);b1.setName(Bob);Bean b2=new Bean();b2.setAge(23);b2.setName(Bob);Bean b3=new Bean();Bean b4=new Bean();b4.setAge(30);b4.setName(Jack);Bean b5=new Bean();b5.setAge(29);b5.setName(wang);HashMap h=new HashMap();/创建HashMap类型对象h;/并调用put方法,将它们取个key名(外号),加入到Map中h.put(1,b1);h.put(2,b2);h.put(3,b3);h.put(4,b4);h.put(5,b5);h.remove(3);/调用remove()方法,将key值为3的元素移除HashMapSystem.out.println(h.size();/输出Map中的元素数Bean temp=(Bean)h.get(5);/将key值为5的元素取出来,并恢复其Bean身份,并其引用返回给tempSystem.out.println(temp.getAge();System.out.println(temp.getName();/输出key值为5的属性值第二节 equals方法和hashCode方法的重写在处理两个对象之间关系时,有时会需要判断两个对象是否相等,如果他们的引用指向的是同一个对象,那么它们是相等的。如Object中的equals方法。如果它们指向的是同一类型的不同对象,但是他们的属性值是相等的,也就是说它们的内容是相等的,那么我们就需要重写equals方法,例如:String中的equals方法就是Object中的equals方法的重写。如果我们自己定义一个类,需要将自己写的类型的两个对象equals。那么我们就需要在该类中重写Object中的equals方法。重写完equals方法后还需要重写hashCode方法。因为当我们用Hash容器(如HashMap、HashSet)装载这些对象时,例如,将一个对象用add方法加入Set时,会产生一个HashCode,当我们又创建一个同类型内容相同的对象时,又变成另外一个HashCode了,它们在容器中的HashCode是随机的生成的,那么你就无法取得该对象了。如果我们要判断容器中是否装进了某种类型的对象,那么就需要重写hashCode方法,因为equals方法返回true的对象,它们的hashCode是相同的,重写hashCode方法就是让计算机在同一HashCode中寻找,否则计算机出于Hash容器的高效性考虑,不会去在已经存放该对象的hashCode中寻找,当然也就找不到了。重写equals方法和hashCodepublic class Money /创建名叫Money这个类public int value = 0;/定义int型数据成员value,并初始化为0。public Money()/创建无参数的构造方法public Money(int i)/带有参数的构造方法value = i;public boolean equals(Object obj)/重写时需要注意重写的方法定义的要求if (obj=null)/判断形参的是否为空。如果是,返回false return false;if(this=obj)/判断形参对象与调用该方法的当前对象是否指向同一对象,如果是返回true.return true;if(!(obj instanceof Money)/判断形参对象是否是Money的实例,如果不是,返回false.return false;Money mo=(Money)obj;/将形参引用恢复成该对象的身份。if(mo.value!=this.value)/如果他们的内容不相等,返回false return false;return ture;如果都不是上面的情况返回truepublic int hashcode()/重写hashcode方法,使它们的hashcode保持一致return value;我们在eclipse中测试一下:如果我们不重写hashCode方法。那么输出的将会是flase如果我们将每个对象都存放在同一hashCode中,那样查找的效率就会很低,但是我们还可以利用String中的hashCode的算法,去重新写hashCode方法。public int hashCode()String str=String.valueOf(value);/将整型的value转化为String型的strreturn str.hashCode();/用String中的hashCode的算法,返回hashCode第十四章 2007年6月18日 星期一授课教师:老刘学生: 王洪峰第一节 如何创建一个文件对象有三种方式:1、File myfile=new File(“d:/java/a.txt”);2、File myfile1=new File(“d:/java”, a.txt”);3、File myfile2=new File(“myfile1”, b.txt”);File类中常见的方法举例说明:import java.io.File;import java.io.IOException;/导入java.io包中的File和 IOException两个类public class FileName public static void main(String args)File f1=new File(d:/java111);/创建一个文件对象f1f1.mkdir();/创建该文件对象的目录File f=new File(d:/whjhg.txt);/创建一个文件对象fFile ff=new File(f1,www.txt);/创建一个文件对象ff,利用File中的构造方法,将其目录设置为f1所指向的路径/将文件名设置为www.txt。try /处理创建文件时可能出现的异常/如果两个文件不存在则创建这2个文件ff.createNewFile();f.createNewFile(); catch (IOException e) /捕获异常e.printStackTrace();System.out.println(ff.canRead();/ff所指向的这个文件是否可读?System.out.println(ff.canWrite();/ ff所指向的这个文件是否可写入?System.out.println(ff.exists();/ ff所指向的这个文件是否存在?System.out.println(ff.getPath();/输出ff对象的路径名System.out.println(ff.isHidden();/ff所指向的文件是否为隐藏文件?System.out.println(ff.isFile();/ff这个对象是一个文件吗?System.out.println(f1.mkdir();/f1这个对象路径创建成功了吗?System.out.println(ff.isDirectory();/ff这个对象是目录吗?System.out.println(ff.lastModified();/ff所指向的这个文件的最后修改时间System.out.println(ff.length();/ff所指向的这个文件的大小是多少System.out.println(ff.delete();/删除ff所指向的文件是否成功System.out.println(f.renameTo(f1);/是否成功的将f所指向的文件重命名为f1System.out.println(f.toString();/以字符串的形式将f对象返回在eclipse中测试一下结果:第二节 怎么样将一个创建好的文件写入一些内容import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;/导入java.io包中的FileOutputStream 、IOException 、PrintStreampublic class Output /创建名叫Output的类public void write(String filename)/创建一个带有参数的无返回值的方法write/目的是将形参中所代表的路径名文件写入一些内容FileOutputStream fs=null;PrintStream ps=null;/分别创建两个FileOutputStream、 PrintStream对象fs 和ps。/将它们初始化为nulltry /处理在写入文件时可能出现的异常fs=new FileOutputStream(filename);/将fs的引用指向用该方法形参作为构造方法参数的FileOutputStream对象ps=new PrintStream(fs);/将ps的引用指向用fs作为构造方法参数的PrintStream对象ps.println(1234567890123);/调用ps对象中的println方法,将字符串1234567890123写入到文件中System.out.println(文件写入成功);/如果没有出现异常,输出 文件写入成功。 catch (Exception e) /捕获异常e.printStackTrace();finally/无论是否写入成功,都应该将fs和ps所指向的文件关闭try if(ps!=null)ps.close(); catch (Exception e1) e1.printStackTrace();try if(fs!=null)fs.close(); catch (IOException e1) e1.printStackTrace();在eclipse中测试一下第三节 怎么样读取一个文件的内容import java.io.File;import java.io.FileInputStream;import java.io.IOException;/导入java.io包中的File、FileInputStream 、IOExceptionpublic class In /创建名叫In的类public String fun(String a)/创建带有参数的,返回值类型为String的方法fun/其中形参a是字符串形式的文件路径/该方法返回的是形参路径所指向的文件内容File ff=new File(a);/创建用形参作为构造方法参数的File类型的对象ffFileInputStream fs=null;/创建FileInputStream对象fs,并初始化为nullbyte bb=new byte2;/创建byte型的数组bb,并指定长度为2,指定了每次读取的字符数String con=;/创建一个String类型的变量con,用来储存读取文件的内容int n=0;/定义一个局部变量。初始化为0try/处理在读取文件中可能存在的异常fs=new FileInputStream(ff);/将fs的引用指向用该方法形参作为构造方法参数的FileInputStream对象while(n!=-1)/以是否读到文件尾为判断条件,进行while循环if(n!=0)/如果n不等于0,将读取bb数组中的n个字符/并将其内容放入到temp临时字符串中String temp=new String(bb,0,n);/将内容累加到con中con+=temp;n=fs.read(bb);/用fs对象调用read方法将读取出的字符个数赋给ncatch(Exception e)/捕获异常e.printStackTrace();finally/无论是否出现异常都应该将文件关闭try /处理关闭文件时产生的异常 fs.close(); catch (IOException e1) /捕获IOException异常e1.printStackTrace();return con;/返回调用该方法所读取的文件内容我们在eclipse中测试一下,测试码如图:第四节 利用前两个程序中的方法拷贝一个文件import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/导入java.io包中的File、FileInputStream、FileOutputStream、IOException类 public class CopyFile /创建CopyFile类public void copy(String srcName, String desName) /创建copy方法,其形式参数分别为源文件和目的文件 File src = new File(srcName); File des = new File(desName);/分别由两个形参作为File构造方法的参数,创建两个File对象src和des FileInputStream fis = null; FileOutputStream fos = null;/分别声明FileInputStream、FileOutputStream的对象fis和fos,并将其初始化为null try /处理在文件copy的时候所产生的异常 des.createNewFile();/创建形参des所指的目的文件 fis = new FileInputStream(src); fos = new FileOutputStream(des);/分别创建FileInputStream、FileOutputStream的对象fis和fos int n=0;/定义整形变量n,初始化为0 byte buf = new byte2;/创建byte型的数组bb,并指定长度为2,指定了每次读取的字符数 while(n = fis.read(buf) != -1) /调用fis的read方法读取源文件,并将其读取的字符数量赋给n/定义循环条件为n!=-1(未读到文件尾) fos.write(buf,0,n);/将每次读取的内容写入到目的文件中 catch(Exception e) /捕获异常 e.printStackTrace(); finally /为了安全起见,分别处理在文件关闭时的异常 try if(fos!=null)fos.flush(); catch (IOException e1) e1.printStackTrace(); try if(fos!=null)fos.close(); catch (IOException e2) e2.printStackTrace(); try if(fis!=null)fis.close(); catch (IOException e3) e3.printStackTrace(); System.out.println(文件copy成功); 在eclipse中测试,测试码如下图:第十五章 2007年6月20日 星期三授课教师:老刘学生: 王洪峰第一节 与文件操作相关的一些程序实例一、实现FilenameFilter接口来过滤符合某些条件的文件或目录。import java.io.File;import java.io.FilenameFilter;/导入java.io包中的File类和FilenameFilter接口public class JavaFilter implements FilenameFilter/创建JavaFilter类实现FilenameFilter接口public boolean accept(File dir,String name)/重写接口中的accept方法,以实现FilenameFilter接口return name.endsWith(.java);/返回一以.java结尾字符串在eclipse中测试:二、读取properties类型文件的内容:properties类型文件叫属性文件,其中的内容不要写中文,否则会读出乱码,它的作用是实现程序和程序之间、程序和服务器之间的信息交换。由于properties类型文件通常存放的是一些服务器的IP地址,或者存放程序实现所必须的目录或文件,所以可以利用文件返回的字符串来使维护程序更加方便。下面举一个读取properties类型文件的内容的程序。我们首先在硬盘上创建一个test. properties.用记事本打开写入内容如下图其中url和name叫做标记,后面的部分叫内容import java.io.File;import java.io.FileInputStream;import java.util.Properties;/导入java.io包中的File和FileInputStream类/导入java.util中的Properties类public class ReadPro /创建ReadPro类 public String url = ; public String name = ; /定义.properties类型文件中的内容标记url和 name作为数据成员,初始化它们为public ReadPro() /在构造方法中完成读取.propertie文件的操作/使其创建该类对象时就已经将.propertie文件的内容赋给该类的成员变量 try /处理在读取文件中可能出现的异常 Properties props = new Properties(); /创建Properties类的对象 File f = new File(d:/Test/test. properties); /用.propertie文件路径作为参数的构造方法创建File类对象f FileInputStream in = new FileInputStream(f);/将f作为FileInputStream构造方法的参数创建其对象in props.load(in);/将in作为参数用对象props调用Properties中的方法load/将文件读取出来 in.close(); /关闭该文件 url = props.getProperty(url); name=props.getProperty(name);/用Properties类中的getProperty方法将标记作为参数,分别返回给数据成员 catch(Exception e) /捕获异常 e.printStackTrace(); 我们在eclipse中测试。测试码见下图:第三节 线程一、基本概念:1、进程:通俗来讲就是指正在被cpu执行的代码叫进程。2、线程:等待被cpu执行的代码叫线程。3、多线程:指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务。 由于cpu采用分时复用,每个线程都有机会得到执行,每个都执行1ms,我们看起来就像是同时执行。二、创建线程:线程的所有活动都是通过线程的run()方法来实现的。在一个线程被建立并初始化以后, Java 的运行时系统就自动调用 run()方法,正是通过 run()方法才使得建立线程的目的得以实现。线程开始执行时,从它的 run ()方法中执行,这种方法是定义的线程的执行起点,就像应用程序从 main()开始一样。通常, run()方法是一个循环,例如一个播放动画的线程要循环显示一系列图片。有时, run() 方法会执行一个时间较长的操作,例如下载并播放电影。有两种方法可以构造自己的 run() 方法。下面我们将通过两个例子来分别说明。1、通过继承创建线程定义一个线程类,它继承线程类 Thread 并重写其中的方法 run ( ) ,由于 Java 只支持单继承,用这种方法定义的类不能再继承其他父类。启动时调用start方法。举例说明public class X1 extends Thread /创建类X1,继承Thread类int i=1;/定义整型变量i,初始化值为1public void run()/重写run方法while(i0)System.out.println(X1的 +i+);try /处理在线程sleep时所产生的异常X1.sleep(1000L);/为了测试时能看清楚,调用Thread类中的sleep方法/每秒输出一个数字 catch (InterruptedException e) /捕获异常e.printStackTrace();测试码如图:2、提供一个实现接口 Runnable 的类作为一个线程的目标对象,在初始化一个Thread 类或者 Thread 子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体 run ( )。这时,实现接口 Runnable 的类仍然可以继承其他父类。举例说明:public class X2 implements Runnable/创建X2类,实现Runnable接口int i=1;public void run()/重写run方法以实现Runnable接口while(i0)System.out.println(X2的 +i+);try Thread.sleep(1000L); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();测试码入图:3、两种方法的比较 (1)直接继承线程 Thread 类。不能再从其他类继承,编写简单,可以直接操作线程。 (2)通过实现 Runnable 接口实现线程。可以将 CPU 、代码和数据分开,形成清晰的模型;还可以继承其他类;保持程序风格的一致性和良好的扩展性。在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就只能用第二种方法来构造,即实现Runnable 接口。三、线程的状态:1、创建状态(new Thread() 当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。2、可运行状态( Runnable ) 当一个线程处于可运行状态时,系统为这个线程分配了它所需的系统资源,安排其运行并调用线程运行方法,这样就使得该线程处于可运行( Runnable )状态。3、运行中状态( Running ) 当一个线程处于可运行状态时,系统为这个线程分配了它所需的系统资源, Java 的运行系统选中一个可运行状态的线程,该线程占有 CPU 并转为运行中状态。4、不可运行状态( Not Runnable ) 不可运行状态也称为阻塞状态( Blocked )。由于某种原因(输入输出、等待消息或其他阻塞情况),系统不能执行线程的状态。这时即使处理器空闲,也不能执行该线程。5、死亡状态( Dead ) 线程执行结束的状态。存在两种情况:自然撤消或是被停止。四、线程控制:1、设置线程的优先级用Thread类中的setPriorty方法;例如:Thread.setPriorty(10);其中的参数10是设置为最高优先级,1是最低优先级。注意:要在线程启动前设置优先级。2、停止一个线程:一种方法是直接调用stop方法,但这不可靠,sun公司的文档写明不推荐的方法。另外一种就是自己写个方法,让线程该停止的时候调用该方法。例如:可在例一中添加fun方法:public class X1 extends Thread int i=1;public void run()while(i0)System.out.println(X1的 +i+);try X1.sleep(1000L); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();public void fun()i=-1;System.out.println(X1 is Dead);测试码入图:3、启动多个线程:在下图中,我们虽然设置它们同样的sleep时间,但是还是显示出了不规律性,当多个线程都有机会执行时,cpu想执行哪个要靠它的心情决定。表现出来的随机性,我们是无能为力的。4、当两个线程同时对一个数据进行操作时,例如、一个线程向数组中写数字,另外一个输出,那么有可能出现还没有写入的时候就被输出了。当我们不知道什么时间控制其停止的时候可以使用join方法。join方法是等待一个线程执行完毕。public class Join /创建Join类,用来测试join方法int a=new int 10;/定义一个int型的数组a,其长度为10public static void main(String args) /创建main方法,作为程序入口 Join a=new Join();a.fun();/调用fun()方法,启动内部类中的线程,为数组a初始化。for(int i=0;i10;i+) System.out.println(ai= *+a.ai); /输出数组a的各个元素值public void fun()/创建fun方法XXX b=new XXX();/创建内部类对象bThread th=new Thread(b);th.start();/启动线程try /调用join方法,使该线程结束再处理main方法th.join(); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();class XXX implements Runnable/创建内部类XXX实现Runnable接口public void run()/重写run方法实现Runnable接口for(int i=0;i后面输入 open 1234 回车 */public class TestServerSocket1 public static void main(String args) throws Exception /安装电话分机 ServerSocket server = new ServerSocket(1234); System.out.println(Server is listening.); /秘书守侯电话 Socket sock = server.accept(); server.close(); /发出指示 PrintStream ps = new PrintStream(sock.getOutputStream(); for(int i = 10; i 0; i-) ps.println(i + 每天写500行代码就能成JAVA高手.); /放下电话 ps.close(); sock.close(); /秘书接听一个电话就下班了:) 第三部分 JDBC技术第一章 2007年6月29日 星期五授课教师:老刘学生:王洪峰第一节 基本概念及java.sql包中常见类和接口在JAVA程序中对数据库的访问是通过JDBC工具包来进行的。利用它可以使用SQL语句对任意一种数据库进行访问java.sql包中常见类和接口:1、Connection接口它代表数据库的连接,并拥有创建SQL语句的方法,以及完成常规的SQL操作。2、类 DriverManager 该类管理一组 JDBC 驱动程序的基本服务以及创建数据库的连接,它可以在任意时间显式地加载 JDBC 驱动程序。例如,my.sql.Driver 是使用以下语句加载的: Class.forName(my.sql.Driver);在调用 getConnection 方法时,DriverManager 会试着从初始化时加载的那些驱动程序中查找合适的驱动程序。并返回一个Connection接口类型的连接。注意:getConnection方法是会抛出SQLException异常的,使用时候要try-catch或者throw 。3、接口 Statement用于执行静态 SQL 语句并返回它所生成结果的对象。在默认情况下,同一时间每个 Statement 对象在只能打开一个 ResultSet 对象。因此,如果读取一个 ResultSet 对象与读取另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的。如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。提供用来执行SQL语句的方法,返回SQL语句执行的结果放在ResultSet对象中。4、接口 ResultSet 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。第二节 一个简单的数据库访问程序在JAVA语言中,访问数据库的基本步骤是:首先加载JDBC驱动程序,建立与数据库的连接,在建立与数据库连接后执行SQL语句,处理执行结果,最后断开连接,关闭数据库。举例说明:1、注册驱动程序(如果使用简单开发环境,就需要重新配置环境变量classpath=.;D:oracleora92jdbclibclasses12.jar,重启)。Class.forName(oracle.jdbc.driver.OracleDriver);2、创建数据库连接:创建与指定数据库连接,需要使用DriverManager类中的getConnection()方法。如果成功与数据库建立连接,则返回一个Connection对象,否则会抛出一个SQLException异常。使用该方法的语法格式如下:Connection conn=DriverManager. getConnection(url,user,password);Connectionconn=DriverManager.getConnection(jdbc:oracle:thin::1521:WHF612,scott,tiger其中参数url字符串表示数据库的具体位置,其中的jdbc:oracle:thin表示与数据库连接的方式,::1521表示数据库的IP地址和端口号,:WHF612表示数据库的名称。后两个参数user,password表示该数据库的用户名和密码。3、创建SQL语句在建立与数据库的连接并获取连接对象后,就可以使用这个连接对象发送SQL语句。在JAVA中所有SQL语句都是由Statement对象发送到数据库的。如果发送的SQL语句运行后产生结果,Statement对象调用方法后会将该结果返回给一个ResultSet对象。由于Statement是接口,没有构造方法,不能实例化一个对象,所以需要使用Connection对象中的createStatement()方法。将该引用返回给Statement对象。Statement stmt = conn.createStatement();4、执行SQL语句,处理执行结果JDBC通过ResultSet对象接收结果,一个ResultSet对象包含了执行SQL SELECT语句后返回的结果,而且还提供了对该结果的数据访问。可以调用ResultSet对象中的next()方法读取结果中的数据,如果有结果该方法返回true,否则返回false。因此可以使用该方法的返回值作为循环条件,访问所有结果中的数据。ResultSet rs = stmt.executeQuery(SELECT STUDENTID,NAME,AGE FROM STUDENT );while (rs.next()String id = rs.getString(STUDENTID);String name = rs.getString(NAME);String age = rs.getString(AGE);String dept = rs.getString(DEPART);System.out.println(id + + name + + age + );5、善后工作:断开连接,关闭数据库等。分别利用ResultSet、Statement、Connection的close()方法,断开连接,关闭数据库rs.close();stmt.close();conn.close();注意:这里可能会在关闭连接时出现异常,需要处理6、测试首先在在数据库中建表,并插入几条数据,如下图然后打开eclipse ,建立新项目,并将Oracle目录下jdbclib文件夹中的classes12.jar复制到项目中的lib目录中:接着 右键点击项目名称whf属性java构建路径选择库点击添加jar选择项目中的lib文件夹下的classes12.jar 确定。第三节一个稍微复杂的JDBC项目一、项目介绍:道里分公司的驴总想要抢南岗区炮子的地盘,密谋暗杀炮子情报组的重要人物,但苦于没有他们的资料,无从下手。于是驴总委托你去秘密连接炮子集团的数据库,来取得其情报组重要资料。发出狠话:“只有一周时间,完成不了任务,你小命不保”。由于时间紧
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年客户服务热线代表面试指南与题库
- 2025年军事文职应聘笔试模拟试题及答案
- 2025年宠物电商项目合作计划书
- 2025年地震专用仪器项目建议书
- 2025年新型催化重整催化剂项目合作计划书
- 抗肿瘤药物防护课件
- 抗美援朝纪念课件
- 2025年制动气室项目发展计划
- 检验三基考试及答案
- 高考全国卷3理综试题及答案
- 手术后盆腔脓肿查房
- 舞蹈教学教学课件
- 2024版电网公司反事故措施(2024版)
- 退伍军人离队安全教育培训纲要
- 办案安全自查和整改情况报告
- 2025年贵州省中考理科综合(物理化学)试卷真题(含答案详解)
- 工地剪彩活动方案
- 看守所突发事件应急预案
- 酒店卫生培训课件
- 科研中试基地管理制度
- 法院付款申请书
评论
0/150
提交评论