




已阅读5页,还剩116页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章 基于JSP的BBS论坛本章要实现的系统是一个用JSP、Servlet 技术实现的小型BBS论坛系统。在本系统里,我们将综合使用前文里给出的技术,并且,将使用DAO的设计模式来开发数据库应用逻辑。9.1需求分析与设计我们将通过分析通用的BBS论坛系统,来明确这个系统的实际需求和设计目标,并在此基础上明确本系统的开发工作。9.1.1 需求分析我们来观察一下BBS论坛系统,可以发现通用的BBS论坛系统包含了如下的内容: 用户可以通过前台注册页面,注册成为会员,并且登录自己的后台。 根据网站管理员可以分配三种不同的权限给每一个用户:vip用户、一般注册用户、游客。 游客可以浏览帖子,也可以回帖,但是不能够发布主题。 一般用户可以发布主题,回帖,个性签名,个人头像等功能。 vip用户不仅有一般用户的所有权利,还可以上传文件。 网站管理员可以行使所有的权利,包括设定会员的权限,删除帖子等权利。从上面的叙述中,我们可以看出,BBS论坛系统最主要的功能是发布主题,回复帖子。根据常规,发布的每一个主题都由以下因素构成: 发布主题的会员 回帖帖子的会员 帖子的个性化签名 可供下载的附件并且,根据需求,每一个注册会员都能拥有一个后台,用户通过此后台查看自己发布的帖子,修改个人信息,上传个人图片。综上所述,邮件发送系统的需求归纳如下: 需要提供支持用户登录,注册界面。 需要提供用户的发布主题,回复帖子的界面。 需要提供一个会员后台,利用此后台,用户管理自己的帖子,以及个人信息。 需要提供一个管理原的后台,利用此后台,网站管理员可以删除用户,删除主题,设定会员权限,设定网站基本信息。9.1.2 模块设计根据上述所归纳的需求,我们把这个系统分成通用数据库管理模块、登录注册模块、信息发布模块和文件上传、会员后台、管理员后台六大模块,而在数据库管理模块里,不仅包含了通用的数据库访问逻辑,更应当以DAO模式封装了各业务逻辑所需要的数据库操作的方法。各模所包含的文件及其功能如下表8-1所示:表9-1 BBS论坛系统模块一览表模块名文件名文件名以及对应的存储位置功能描述数据库管理模块com.study.dao.DAOFactoryDAO工厂类,用以生成各种DAO实例com.study.dao.MemberDAO供外部类调用的接口,提供了所有关于会员管理的方法com.study.dao.MemberDAOImpl实现MemberDAO接口的类,提供会员的添加,修改,删除等操作com.study.dao.MessageDAO供外部类调用的接口,提供了所有关于公告信息的方法com.study.dao.MessageDAOImpl实现公告信息借口的类,提供信息的添加,修改,删除,查询等操作com.study.dao.TopicDAO供外部类调用的接口,提供了所有关于公告信息类型的方法com.study.dao.TopicDAOImpl实现公告信息类型借口的类,提供信息的添加,修改,删除,查询等操作com.study.vo.Member封装了会员的属性com.study.vo.Message封装了公告信息的属性com.study.vo.Topic封装了公告信息类型的属性com.study.database.DBConnection数据库的连接对象,提供数据库的连接com.study.database. DBConnectionManage数据库连接池,用以管理数据库连接对象登录注册模块/WebRoot/default.jsp网站的首页/WebRoot/login.jsp会员用户的登录页面com.study.servlet.CheckLogin用于验证用户com.study.servlet.saveMember用于注册用户/WebRoot/register.jsp会员注册页面信息发布模块/WebRoot/list.jsp显示论坛信息/WebRoot/addtopic.jsp发布主题页面/WebRoot/reply.jsp回复主题页面com.study.servlet.delMessage删除信息com.study.servlet.Message添加信息会员管理模块/WebRoot/member/updatemember.jsp修改会员信息/WebRoot/member/list.jsp查看发布的主题网站管理模块/WebRoot/manage/listmember.jsp查看所有会员/WebRoot/manage/message.jsp查看所有信息/WebRoot/manage/updatemember.jsp修改会员权限文件上传模块/WebRoot/uploadfile.jsp选择需要上传的文件/WebRoot/save_file.jsp保存文件/WebRoot/uploadpic.jsp选择需要上传的头像/WebRoot/save_pic.jsp保存头像辅助模块com.study.util.DataContext辅助对象,将一些通用的方法封装在该类中。图 9-1 说明了各个模块之间的依赖关系。图 9-1 各个模块之间的依赖关系从图9-1中可以看出,上述的每个模块都会依赖数据库模块,通过该模块存储读取数据库。用户首先进入到网站首页,接着可以登录,或者注册为会员,发布主题,回复帖子,也可以直接登录到用户后台,管理个人信息。而网站的后台管理员可以管理所有发布的信息,会员。9.1.3 数据库设计本模块使用SQL Server 2005作为后台支持的数据库。设计数据库的步骤如下:(1) 在SQL Server 2005中新建一个名为”BBS”的数据库。(2) 在BBS数据库里新建一张名为member的表,用来记录会员信息,该表的字段结构如下表8-2所述:表9-2 member表结构字段中文描述数据类型是否为空备注memberid会员IDnumeric 否自增长,主键memberusername会员用户名nvarchar(50)否memberpassword会员密码nvarchar(50)否memberauthority会员权限int否默认是00表示会员权限是管理员,可以添加或修改会员信息1表示会员权限是vip会员2表示会员权限是一般会员membername会员姓名nvarchar(100)否memberemail会员设定的E-mailnvarchar(100)否memberphotourl会员上传的照片路径nvarchar(200)否memberscore会员的积分int否membersign会员个性签名nvarchar(200)否 创建该表的SQL语句如下:CREATE TABLE dbo.member (memberid numeric(18, 0) IDENTITY (1, 1) NOT NULL ,memberusername nvarchar (50) COLLATE Chinese_PRC_CI_AS NULL ,memberpassword nvarchar (50) COLLATE Chinese_PRC_CI_AS NULL ,memberauthority int NULL ,memberemail nvarchar (100) COLLATE Chinese_PRC_CI_AS NULL ,membersign nvarchar (200) COLLATE Chinese_PRC_CI_AS NULL ,memberphotourl nvarchar (200) COLLATE Chinese_PRC_CI_AS NULL ,membername nvarchar (200) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO设置该表主键的SQL语句如下:ALTER TABLE member WITH NOCHECK ADD CONSTRAINT PK_member PRIMARY KEY CLUSTERED (memberid) GO通过上面的语句,我们把该表的memberid字段设置为主键。(2) 在BBS数据库里新建一张名为Message的表。在项目里,我们通过这张表记录所有发布的主题。该表的字段结构如下表9-3所述:表9-3 Message表结构字段中文描述数据类型是否为空备注messageid信息ID号numeric否自增长,主键messagetitle信息标题Varchar(200)是messagecontent信息内容int是默认是0messagedate信息发布日期datatype否messagetype信息类型int否messagememberid发布会员信息的ID号numeric否messageparentid帖子所属的主题numeric否0表示该信息是主题其余表示所属信息的ID号messagetopicid信息所属类型int否创建该表的SQL语句如下:CREATE TABLE dbo.message (messageid numeric(18, 0) NOT NULL ,messagetitle nvarchar (200) COLLATE Chinese_PRC_CI_AS NULL ,messagecontent ntext COLLATE Chinese_PRC_CI_AS NULL ,messagedate datetime NULL ,messagetype int NULL ,messagememberid numeric(18, 0) NULL ,messageparentid numeric(18, 0) NULL ,messagetopicid int NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARYGO设置其主键的SQL语句如下:ALTER TABLE message WITH NOCHECK ADD CONSTRAINT PK_UserRole PRIMARY KEY CLUSTERED (MessageID) GO(4) 在BBS数据库里新建一张名为topic的表,用来记录信息类型。该表的字段结构如下表8-4所述:表9-4 topic表结构字段中文描述数据类型是否为空备注topicid信息类型IDint 否自增长,主键topicname信息类型名称nvarchar(200)否创建该表的SQL语句如下:CREATE TABLE dbo.topic (topicid numeric(18, 0) NOT NULL ,topictitle nvarchar (200) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARYGO设置主键的SQL语句如下ALTER TABLE topic WITH NOCHECK ADD CONSTRAINT PK_link PRIMARY KEY CLUSTERED (topicid) GO表创建完了之后,由于考虑到本模块不提供用户注册的功能,所以就需要手动地通过SQL Server的查询分析器,在Member表里面添加些数据,所需的具体SQL语句如下所示:insert into member (memberusername,memberpassword,memberauthority,memberemail,memberpop,membersmtp) values(admin,admin,0,9,pop3.163,)GO通过上面的代码,我们为在BBS系统手动地添加了权限为网站管理员的”admin”,其登录的用户名和密码均是”admin”。我们本应为上述的权限添加动作做一专门的界面,但由于本章主要讨论JAVA手法E-mail的业务逻辑,所以通过修改数据表来完成。9.2建立基于JSP的项目创建完数据库后,我们接下来开始要将重点放在建立JSP项目上,在此,我们使用的开发环境是:MyEclipse + Tomcat 的集成开发环境。9.2.1 创建JSP项目在MyEclipse集成开发环境中,可以参照第八章的方式因为章节调整的关系,是否还是第8章,新建一个Web工程,并且取名为BBS。9.2.2在项目中导入需要加载的JAVA类包因为BBS系统中,需要与数据库进行交互,故我们需要导入连接SQLServer数据库的三个jar包:sqljdbc.jar。因为导入jar 包的方法,我们已经在第八章的时候详细介绍,在此不做特别介绍了。做完了准备工作后,我们接下来就可以开发JAVA Web项目了。9.3开发数据库通用模块根据图 9-1所示,这个模块主要的作用是对数据库进行操作,将数据库的数据分装成JAVA对象,被相对应的模块调用,例如,登录模块需要获得所有联系人信息,首先可以通过数据库模块获得一个Vector容器,然后再可以通过迭代器,将Vector容器中的对象显示出来,最后返回结果。在数据通用模块中,可以分为数据库连接以及数据库交互(DAO)这两个部分。9.3.1 连接数据库根据需求分析,我们在此选择SQL Server做为我们的数据库,首先将连接数据库的jar包导入到项目中,导入过程可以参照9.2.2小节导入数据库jar包部分。连接数据库是一个繁琐的过程,而且要维护每一个数据库连接,也不是一件容易的事,但在本书的第三章节在第3章里开发过数据库连接池吗?中,我们已经开发过一个数据库连接池类(DBConnectionManage),在这个项目中我们可以直接将这个类导入到com.study.database包中,具体方法可以参照8.3.1的连接数据库章节。接着我们就可以利用这个类,直接连接数据库,整个网站的层次结构可参考图9-2图 9-2 Web应用程序架构图9.3.2 开发对象模型和DAO代码实现业务逻辑在本项目里,各种逻辑动作,比如用户登录、主题发布,回复帖子,后台管理,等,都需要业务实体的支持。在此我们定义了一个com.study.dao包,用以分离数据库操作逻辑和业务处理逻辑,此外,我们还定义了一个com.study.vo包,用以封装同逻辑相关的数据,例如当我们登录系统,就开始了一个验证用户的业务逻辑,在这个业务逻辑里,我们需要从数据库中取出的会员信息,封装成一个包含用户类逻辑数据的Member对象,这样登录模块,就能直接使用这个对象了。让我先看看如何创建vo包中的类。1 开发vo包vo包中的类都是用于封装数据的,故里面的类必须是JavaBean类型,比如我们用Member类来封装会员信息:package com.study.vo;public class Member private long memberid;/会员ID号private String memberusername;/会员用户名private String memberpassword;/会员密码private int memberauthority;/会员权限private String membername;/会员姓名private String memberemail;/会员E-mailprivate String memberphotourl;/会员图片连接private int memberscore;/会员积分private String membersign;/会员个人签名/构造函数,用于初始化会员public Member()memberid = 0;memberscore = 0;memberauthority = 0;public int getMemberauthority() return memberauthority;public void setMemberauthority(int memberauthority) this.memberauthority = memberauthority;public String getMemberemail() return memberemail;public void setMemberemail(String memberemail) this.memberemail = memberemail;public long getMemberid() return memberid;public void setMemberid(long memberid) this.memberid = memberid;public String getMembername() return membername;public void setMembername(String membername) this.membername = membername;public String getMemberpassword() return memberpassword;public void setMemberpassword(String memberpassword) this.memberpassword = memberpassword;public String getMemberphotourl() return memberphotourl;public void setMemberphotourl(String memberphotourl) this.memberphotourl = memberphotourl;public int getMemberscore() return memberscore;public void setMemberscore(int memberscore) this.memberscore = memberscore;public String getMembersign() return membersign;public void setMembersign(String membersign) this.membersign = membersign;public String getMemberusername() return memberusername;public void setMemberusername(String memberusername) this.memberusername = memberusername;该类用于封装会员信息,我们将数据库中的会员信息都封装在这个类中,其他模块都可以调用这个类获取会员信息。从中我们可以看到VO类的特性:(1)VO类封装了同一类型的属性,比如这里是封装了会员信息的属性。(2)VO类里提供了get和set类型的方法用来供外界读取和设置其中的属性。在BBS论坛中里,我们需要有一个信息对象来记录信息的ID号,信息内容,信息标题,回帖情况等等,我们用Message.java文件来描述信息对象。由于这个类的逻辑结构同Member.java非常相似,所以我们仅仅给出关键性代码,全部的代码可以参考光盘上的文件:public class Message private long messageid;/信息IDprivate String messagetitle;/信息标题private String messagecontent;/信息内容private Date messagedate;/信息发布日期private int messagetype;/信息类型private long messagememberid;/信息发布人IDprivate long messageparentid;/信息所属主题private int messagetopicid;/信息所属板块/省略get和set类型的方法为了丰富我们的BBS论坛信息,在此我们还需要新建一个记录板块信息的类,Topic类,这个类同样属于VO类型,我们同样只给出关键性的代码:public class Topic/帖子IDprivate int topicid;/帖子标题private String topicname;/省略get和set类型的方法Topic类用于记录BBS论坛的板块信息,板块信息只有网站管理员可以开通。有了vo包中封装的类,我们就开始实现具体的业务逻辑了。2 开发dao包dao包中,我们封装了所有的业务逻辑,可以说是整个Web站点的核心,例如实现用户的验证,添加,修该,删除,信息的发布,删除等功能。下面我们将逐一介绍每一个文件:(1) DAOFactory类DAOFactory用于创建每一个DAO对象,它是一个工厂类,用于生成DAO对象,产生的DAO对象可以被我们直接调用。使用DAOFactory类,而并不是在程序中直接使用new关键字来创建DAO对象的好处是可以随时拆卸以及加载需要的DAO对象,这样不仅便于管理,更加重要的是降低了类与类之间的依赖关系,DAOFactory类的代码如下:package com.study.dao;import com.study.dao.*;/导入dao包import com.study.vo.*;/导入vo包public class DAOFactory /通过静态方法,获取MemberDAO对象 public static MemberDAO getMemberDAO() /MemberDAO是一个接口,引用MemberDAOImpl对象,这样的做法可以屏蔽 /所有的操作细节MemberDAO memberdao = new MemberDAOImpl();return memberdao; /通过静态方法,获取LinkDAO对象 public static MessageDAO get MessageDAO () / MessageDAO是一个接口,引用MessageDAO Impl对象/这样的做法可以屏蔽所有的操作细节MessageDAO messagedao = new MessageDAO Impl();return messagedao; (2) MemberDAO类MemberDAO是一个接口,外部对象通过调用此接口提供的方法完成会员信息的添加,修改,删除等业务逻辑,代码如下:package com.study.dao;import java.util.Vector;import com.study.vo.*;public interface MemberDAO / 通过一个Member对象,修改会员信息public boolean updateLink(Member instance);/ 添加会员信息public boolean addMember(Member instance);/ 删除会员信息public boolean delMember(Member instance);/ 获得会员列表public Vector liskMember();/验证会员public Member validator(Member instance); 接着我们将介绍实现MemberDAO接口的类:MemberDAOImpl。(3)MemberDAOImplMemberDAOImpl实现了MemberDAO接口,用于实现联系人的添加,修改,删除,验证操作根据这四个操作,我们分别写四个函数用以实现上述功能,以下是实现会员添加功能的代码/添加会员信息public boolean addMember(Member instance) boolean re = false;/ 根据Member表中的字段,拼接SQL语句String query = insert into member(memberusername,memberpassword,memberemail, +memberauthority, membersign,memberphotourl,membername) + values(?,?,?,?,?,?,?);Connection con = null;PreparedStatement pst = null;/ 获取数据库连接池DBConnectionManage dbmanage = DBConnectionManage.getInstance();try / 从数据库连接池中获取数据连接con = dbmanage.getFreeConnection();pst = con.prepareStatement(query);pst.setString(1, instance.getMemberusername();pst.setString(2, instance.getMemberpassword();pst.setString(3, instance.getMemberemail();pst.setInt(4, instance.getMemberauthority();pst.setString(5, instance.getMembersign();pst.setString(6, instance.getMemberphotourl();pst.setString(7, instance.getMembername();/ 执行sql语句pst.executeUpdate();re = true; catch (Exception ex) finally try / 关闭数据库连接,释放资源dbmanage.closeStatement(pst);dbmanage.closeConnection(con); catch (Exception ex) return re = true;修改会员信息,删除会员信息的实现方法和添加会员信息的实现方法类似,唯一的不同之处是给予的SQL语句不同,参考代码如下:/修该会员信息public boolean updateMember(Member instance) boolean re = false;/ 根据Member表中的字段,拼接SQL语句String query = update member set memberusername = ?,memberpassword=?,+membername=?,memberemail=?,memberauthority,membersign=?,+memberphotourl=?;Connection con = null;PreparedStatement pst = null;/ 获取数据库连接池DBConnectionManage dbmanage = DBConnectionManage.getInstance();try / 从数据库连接池中获取数据连接con = dbmanage.getFreeConnection();pst = con.prepareStatement(query);pst.setString(1, instance.getMemberusername();pst.setString(2, instance.getMemberpassword(); pst.setString(3, instance.getMembername();pst.setString(4, instance.getMemberemail();pst.setInt(5, instance.getMemberauthority();pst.setString(6, instance.getMembersign();pst.setString(7, instance.getMemberphotourl();/ 执行sql语句pst.executeUpdate();re = true; catch (Exception ex) finally try / 关闭数据库连接,释放资源dbmanage.closeStatement(pst);dbmanage.closeConnection(con); catch (Exception ex) return re = true;以下是实现删除会员信息的代码,代码中处理SQL语句部分与修改,添加会员的代码不同,其他都异样。/删除会员信息public boolean delMember(Member instance) boolean re = false;/ 根据Member表中的字段,拼接SQL语句String query = delete from member where memberid =?;Connection con = null;PreparedStatement pst = null;/ 获取数据库连接池DBConnectionManage dbmanage = DBConnectionManage.getInstance();try / 从数据库连接池中获取数据连接con = dbmanage.getFreeConnection();pst = con.prepareStatement(query);pst.setLong(1, instance.getMemberid();/ 执行sql语句pst.executeUpdate();re = true; catch (Exception ex) finally try / 关闭数据库连接,释放资源dbmanage.closeStatement(pst);dbmanage.closeConnection(con); catch (Exception ex) return re = true;会员验证功能:public Member validator(Member instance) /根据用户填写的用户名和密码,拼接SQL语句String query = select * from member where memberusername = ? and +memberpassword = ?;Connection con = null;PreparedStatement pst = null;ResultSet rs = null;Vector list = new Vector();/获取数据库连接池DBConnectionManage dbmanage = DBConnectionManage.getInstance();try / 从数据库连接池中获取数据连接con = dbmanage.getFreeConnection();pst = con.prepareStatement(query);pst.setString(1, instance.getMemberusername();pst.setString(2, instance.getMemberpassword();/ 执行sql语句,并将记录集返回给ResultSetrs = pst.executeQuery();/判断数据库中是否存在该对象,如果存在的话就封装一个Member对象if(rs.next()instance.setMemberauthority(rs.getInt(memberauthority);instance.setMemberusername(rs.getString(memberusername);instance.setMemberpassword(rs.getString(memberpassword);instance.setMemberemail(rs.getString(memberemail);instance.setMemberid(rs.getLong(memberid);instance.setMemberphotourl(rs.getString(memberphotourl);instance.setMemberscore(rs.getInt(memberscore);instance.setMembersign(rs.getString(membersign);elseinstance = null; catch (Exception ex) finally try / 关闭数据库连接,释放资源dbmanage.closeResult(rs);dbmanage.closeStatement(pst);dbmanage.closeConnection(con); catch (Exception ex) /返回封装后的Member对象return instance;(4)MessageDAO类参照MemberDAO的实例代码,MessageDAO是一个接口,用于提供方法,供其他类使用,参考代码如下:package com.study.dao;import java.util.Vector;import com.study.vo.Member;import com.study.vo.Message;import com.study.vo.Topic;public interface MessageDAO / 添加信息public boolean addMessage(Message instance);/ 删除信息public boolean delMessage(Message instance);/ 通过会员对象,获得信息列表public Vector liskMessageByMember(Member instance); / 通过发布的主题对象,获得信息列表public Vector liskMessageByMessage(Message instance); / 通过板块信息对象,获得信息列表public Vector liskMessageByTopic(Topic instance);与MemberDAO不同的是,MessageDAO要根据实际需求不同,公开不同的方法。(5) MessageDAOImplMessageDAOImpl实现了MessageDAO的接口,改类中一共实现了5个方法,参考代码如下:public boolean addMessage(Message instance) boolean re = false;/ 根据member表中的字段,拼接SQL语句String query = insert into message(messagetitle,messagecontent,messagedate, +messagetype,messagememberid,messageparentid,messagetopicid) + values(?,?,?,?,?,?,?);Connection con = null;PreparedStatement pst = null;/ 获取数据库连接池DBConnectionManage dbmanage = DBConnectionManage.getInstance();try / 从数据库连接池中获取数据连接con = dbmanage.getFreeConnection();pst = con.prepareStatement(query);pst.setString(1, instance.getMessagetitle();pst.setString(2, instance.getMessagecontent();pst.setDate(3, instance.getMessagedate();pst.setInt(4, instance.getMessagetype();pst.setLong(5, instance.getMessagememberid();pst.setLong(6, instance.getMessageparentid();pst.setInt(7, instance.getMessagetopicid();/ 执行sql语句pst.executeUpdate();re = true; catch (Exception ex) finally try / 关闭数据库连接,释放资源dbmanage.closeStatement(pst);dbmanage.closeConnection(con); catch (Exception ex) return re = true;addMessage()方法用于添加新的信息,例如用户发表的主题或者用户回复的帖子都是通过这个方法,将信息写入数据库的。delMessage删除帖子的方法与添加帖子的方法相似。public boolean delMessage(Message instance) boolean re = false;/ 根据member表中的字段,拼接SQL语句String query = delete from message where messageid = ?;Connection con = null;PreparedStatement pst = null;/ 获取数据库连接池DBConnectionManage dbmanage = DBConnectionManage.getInstance();try / 从数据库连接池中获取数据连接con = dbmanage.getFreeConnection(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆现代职业技术学院《中国建筑史(Ⅱ)》2024-2025学年第一学期期末试卷
- 恩施职业技术学院《数据挖掘技术》2024-2025学年第一学期期末试卷
- 吉首大学张家界学院《文献检索与论文》2024-2025学年第一学期期末试卷
- 餐饮店员工招聘及培训计划
- 企业项目审批流程模板及说明
- 天津艺术职业学院《机械工程检测技术》2024-2025学年第一学期期末试卷
- 新疆应用职业技术学院《模型设计制作》2024-2025学年第一学期期末试卷
- 河南对外经济贸易职业学院《烹饪营养》2024-2025学年第一学期期末试卷
- 贺州学院《DMAX建模与渲染》2024-2025学年第一学期期末试卷
- 医院药品采购流程优化及执行方案
- 建筑公司分包合同管理办法
- 2025至2030苏打水行业发展趋势分析与未来投资战略咨询研究报告
- 2025年秋季学期德育工作计划:向下扎根向上开花
- 2025-2030中国家政服务行业信用体系建设与服务质量监管报告
- 2025年安徽省普通高中学业水平选择性考试(物理)科目高考真题+(答案解析版)
- 2025年成都东部集团有限公司及下属企业招聘考试笔试试卷【附答案】
- 高中生物的学习方法
- GE彩超Logiq操作手册培训课件
- 罐头食品工艺
- 混凝土外加剂检测原始记录表
- GB/T 15670-1995农药登记毒理学试验方法
评论
0/150
提交评论