




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-第4章系统设计4.1系统功能设计系统设计是一个把软件需求转换成用软件系统表示的过程。通过对目标系统的分析和研究,做出了多媒体技术与应用课程网站的总体规划,这是全面开发系统的重要基础。在对多媒体技术与应用课程网站全面分析调查的基础上,制定出多媒体技术与应用课程网站的总体规划。系统设计包括系统总体设计、系统详细设计、系统数据库设计、系统开发工具、开发技术和开发模式等。从数据流图出发,对数据流图进行分析,得出的层次化的模块结构图.多媒体技术与应用课程网站前台功能模块图如图4-1所示:图4-1前台功能模块图多媒体技术与应用课程网站后台功能模块图如图4-2所示:图4-2多媒体技术与应用课程网站后台功能模块图4.2数据库设计数据库是本系统的核心和基础。它设计的好坏直接影响着整个系统的质量。数据是一切系统设计的基础,通俗地说,数据库设计就像高楼大厦的根基一样,如果设计的不合理、不完善,将在系统开发过程中,甚至到后期的系统维护、功能变更和功能扩充时,引起较多问题,严重时甚至要重新设计,重做大量已完成工作。4.2.1概念结构设计从数据需求分析中得出系统的实体属性图。(1)管理员实体属性图如图4-3所示:图4-3管理员实体属性图(2)课程介绍实体属性图如图4-4所示:图4-4班级实体属性图(3)学生信息实体属性图如图4-5所示:图4-5学生实体属性图(4)老师实体属性图如图4-6所示:图4-6老师实体属性图(5)课件信息实体属性图如图4-7所示:图4-7教学资料实体属性图(6)公告信息实体属性图如图4-8所示:图4-8公告信息实体属性图(7)信息交流实体属性图如图4-9所示:图4-9留言信息实体属性图(8)教学视频实体属性图如图4-10所示:图4-10教学视频信息实体属性图4.2.2数据库表设计(1)管理员信息表(t_admin)管理员信息表主要用于系统管理员的信息,主要字段包括:编号、登陆账号、登陆密码。表4.13管理员信息表(t_admin)字段名数据类型字段描述长度主键userIdInt编号10√userNamevarchar登陆账号50userPwvarchar登陆密码50(2)课件信息表(t_doc)课件信息表主要用于老师发布的课件信息,主要字段包括:编号、课件标题、课件介绍等。表4.14课件信息表(t_doc)字段名数据类型字段描述长度主键IdInt编号10√titlevarchar标题50contentvarchar内容50fujianvarchar附件50fujianYuanshimingvarchar附件原始名50shijianvarchar发布时间50(3)教学视频信息表(t_shipin)教学视频信息表主要用于老师发布的教学视频信息,主要字段包括:编号、视频标题、附件等。表4.15教学视频信息表(t_shipin)字段名数据类型字段描述长度主键IdInt编号10√titlevarchar标题50contentvarchar内容50fujianvarchar附件50fujianYuanshimingvarchar附件原始名50shijianvarchar发布时间50(4)学生信息表(t_stu)学生表主要存储学生的基本信息,主要字段包括:ID、学号、姓名、性别、年龄、登录帐号、登录密码等。表4.17学生信息表(t_stu)字段名数据类型字段描述长度主键idInt编号10√xuehaovarchar学号50name1varchar姓名50sexvarchar性别50ageInt年龄50loginpwvarchar登录密码50(6)老师信息表(t_tea)老师信息表主要存储老师的基本信息,主要字段包括:ID、教师号、姓名、性别、年龄、登录帐号、登录密码等。表4.18老师信息表(t_tea)字段名数据类型字段描述长度主键idIntID10√bianhaovarchar教师号50namevarchar姓名50sexvarchar性别50ageInt年龄50loginpwvarchar登录密码50(7)公告信息表(t_gonggao)公告信息表主要存储管理员发布的公告信息,主要字段包括:ID、公告标题、公告内容、发布时间等。表4.19公告信息表(t_gonggao)字段名数据类型字段描述长度主键idIntID10√titlevarchar公告标题50contentvarchar公告内容5000shijianvarchar发布时间50(8)交流信息表(t_liuyan)公告信息表主要存储学生直接相互交流的信息,主要字段包括:ID、留言标题、留言内容、留言时间等。表4.20留言信息表(t_liuyan)字段名数据类型字段描述长度主键idIntID10√titlevarchar公告标题50contentvarchar公告内容5000shijianvarchar发布时间504.3系统安全我们可以通过设定安全约束来保护网络资源,这个安全约束决定何人被授权访问那些由一系列的URL地址和HTTP协议描述的受保护的网络资源。安全约束是很容易来通过JDK中的deploytool工具来设定。当一个未认证的用户试图访问受保护的网络资源时,系统进行身份认证,并且只有当你是具有访问这些资源的资格的用户时才能进行访问。为了满足企业中的不同安全级别和客户对系统的需求,JSP/Servlet提供了三种基于web客户端的验证方式:(1)HTTP基本验证(HTTPBasicAuthentication)HTTP基本验证是HTP协议所支持的验证机制。这种验证机制利用用户名和密码作为验证信息。Web客户端从用户获取用户名和密码,然后传递给web服务器,web服务器在指定的区域(realm)中验证用户。但需要注意的是,这种验证方法是不够安全的。因为这种验证方法并不对用户密码进行加密,而只是对密码进行基本的baseb4的编码。而且目标web服务器对用户来说也是非验证的。不能保证用户访问到的web服务器就是用户希望访问的。可以采用一些安全措施来克服这个弱点。例如在传输层上应用SSL或者在网络层上使用IPSEC或VPN技术。基于表单的验证(Fonn-BasedAuthentication)基于表单的验证使系统开发者可以自定义用户的登录页面和报错页面。这种验证方法与基本HTTP的验证方法的唯一区别就在于它可以根据用户的要求制定登录和出错页面.基于表单的验证方法同样具有与基本HTI'P验证类似的不安全的弱点。用户在表单中填写用户名和密码,而后密码以明文形式在网路中传递,如果在网路的某一节点将此验证请求截获,再经过反编码很容易就可以获取用户的密码。因此在使用基本HTTP的验证方式和基于表单的验证方法时,要确定这两种方式的弱点对你的应用是可接受的,为了消除明文传输的确定,我们可以将基于表单的验证建立在SSL层上。(2)基于客户端证书的验证(Client-CertificateAuthentication)基于客户端证书的验证方式要比上面两种方式更安全。它通过HTTPS(HTIPoverSSL)来保证验证的安全性。安全套接层((SecureSocketsLayer)为验证过程提供了数据加密,服务器端认证,信息真实性等方面的安全保证。在此验证方式中,客户端必须提供一个公钥证书,你可以把这个公钥证书看作是你的数字护照。公钥证书也称数字证书,它是被称作证书授权机构(CA)一一个被信任的组织颁发的。这个数字证书必须符合X509公钥体系结构(PKI)的标准。如果确定这种验证方式,Web服务器将使用客户端提供的数字证书来验证用户的身份。正如上面所述,本系统采用的是基于表单的验证。在网络层使用可编程性安全方法。当仅使用声明性安全方法不能完全满足应用程序的安全要求时,利用可编程安全方法来满足之。在HttpServletRequest接口中有以下几种方法用于安全编程。 (1) getRemoteUser:获得认证用户的用户名 (2) isUserInRole:确定用户是否是属于特定的安全角色 (3) getUserPrincipal:返回一个Java.security.Principal对象在数据层,应用组件总是请求连接到一个数据库资源,作为这个连接的一部分,数据库可能需要组件登录才能提供有关资源。应用组件提供了组件管理登录和容器管理登录两种方法来设计数据库登录。在组件管理登录的方法中,组件代码中包含处理登录数据库功能的代码。在容器管理的登录的方法中,组件让容器来承担配置和管理数据库登录的责任。容器通过用户名和密码来建立一个和数据库实例的连接。4.4设计思想设计思想遵循以下几点:1.采用B/S模式进行开发,其优点是后台与前台处理层次分明,而且符合众多已经习惯网页搜索方式的用户。2.采用面向对象的开发与设计理念。运用面向对象技术的前提是对整体系统的高度和准确抽象,通过它可以保证系统良好的框架,进而带来产品较强的稳定性和运行效率。3.采用模块化设计。模块化设计要求将整个系统划分成基于小的模块,有利于代码的重载,简化设计和实现过程。4.简单方便的系统界面。设计简单友好的系统界面,方便用户较快的适应系统的操作。5.速度优先原则。由于此工具最重要的评测标准就是速度,因此在设计过程中,具体过程尽量做到资源占用少,速度快。6.设计既要突出重点,又要细致周到。要符合设计需求,在有可能改进的地方进行扩充,使系统更适应用户的需要。4.5界面要求界面设计目前已经成为评价软件质量的一条重要指标,一个好的用户界面可以增加用户使用系统的信心和兴趣,提高工作效率,JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。创建动态页面非常方便。用户界面是指软件系统与用户交互的接口,通常包括输出、输入、人-机对话的界面格式等。1.输出设计输出是由手机对输入的原始信息进行加工处理,形成高质量的有效信息,并使之具有一定的格式,提供管理者使用,这是输出设计的主要职责和目标。系统设计的过程正好和实施过程相反,并不是从输入设计到输出设计,而是从输出设计到输入设计,这是因为输出表格直接与使用者相联系,设计的出发点应当是保证输出表格方便地为使用者服务,正确及时反映和组成用于各部门的有用信息。输出设计的原则是考虑既要全面反映不同管理层的各项需要,又要言简意赅,不要将用户需要和不需要的都提供给用户。2.输入设计输入数据的收集和录入是比较费事的,需要大量的人力和一定设备,并且容易出错。如果输入系统的数据有错误,则处理后的输出将扩大这些错误,因此输入数据的正确性对于整个系统质量的好坏是具有决定性意义的。输入设计的原则有如下几点:1)输入量应保持在能满足处理要求的最低限度。设计中可采用设置字段初值,下拉式数据窗口等方式尽量减少用户键盘输入量。输入量越少,错误率就越少,数据准备时间也减少。2)输入的准备及输入过程应尽量容易进行,从而减少错误的发生。3)应尽量早对输入数据进行检查(尽量接近原数据发生点),以便使错误及时得到更正。4)输入数据尽早地用其处理所需的形式被记录,以避免数据由一种介质转移到另一种介质时需要转录而可能发生的错误5)尽量避免线程死锁情况,为了用户体验友好,所以手机与服务端的交互要在其它线程进行4.6性能要求本科协管理系统在管理权限上要严格进行控制,具体要求如下:1.要想管理本系统的电影信息,必须先要凭用户名和密码登陆到系统中,没有权限的用户不能通过任何方式登录系统查看系统的任何信息和数据,以确保系统的严密性和安全性。2.在具体实现中设定不同权限,不同权限用户登录到系统后,不能越级操作,管理员可以使使用所有模块;普通用户用户只能在线浏览信息,比如,活动交流,成果查看,技术指导等功能。1.各种记录信息的完整性,信息记录内容不能为空2.各种数据间相互联系的正确性3.相同数据在不同记录中的一致性第5章系统实现5.1管理员登录图4.1系统登陆页面设计 5.2管理员功能模块1.描述:系统主页面:左方页面展示了管理员可操作的六大功能,进入相关的管理页面可以链接到子菜单,并且高亮显示,每个管理模块下面都有相应的子菜单。2.程序运行效果图如图4.2所示:图4.2管理员主页面在每个jsp页面将会对相关用户进行拦截操作,这样可以提高安全性,防止用户不经过登陆页面而进入任何子菜单页面:if(session.getAttribute("user")==null){out.print("<script>alert('请先登录!');window.open('../index.jsp','_self')</script>"); }5.2.1课程介绍管理课程介绍管理图5.4课程介绍管理 5.2.2教师信息管理教师信息录入1.描述:管理员输入教师相关正确信息后点击录入按钮,如果是没有输入完整的教师经理信息,都会给出相应的错误提示,不能录入成功。输入数据都通过form表单中定义的方法onsubmit="returncheckForm()"来检查,checkForm()函数中是各种的校验输入数据的方式。2.程序效果图如下图5.6所示:图5.6教师信息录入教师信息管理1.描述:管理员点击左侧的菜单“教师管理”,页面跳转到教师管理界面,调用后台的action类查询所有教师信息。2.程序效果图如下图5.7所示图5.7教师信息管理教师管理关键代码:publicStringteaAdd(){ TTeatea=newTTea(); tea.setTeaBianhao(teaBianhao); tea.setLoginName(loginName); tea.setLoginPw(loginPw); tea.setTeaRealname(teaRealname); tea.setTeaSex(teaSex); tea.setTeaAge(teaAge); tea.setDel("no"); teaDAO.save(tea); this.setMessage("操作成功"); this.setPath("teaMana.action"); return"succeed"; } publicStringteaMana() { Stringsql="fromTTeawheredel='no'"; ListteaList=teaDAO.getHibernateTemplate().find(sql); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("teaList",teaList); returnActionSupport.SUCCESS; } publicStringteaDel() { TTeatea=teaDAO.findById(teaId); tea.setDel("yes"); teaDAO.attachDirty(tea); this.setMessage("操作成功"); this.setPath("teaMana.action"); return"succeed"; }5.2.3学生信息管理学生信息录入1.描述:管理员输入学生相关正确信息后点击录入按钮,如果是没有输入完整的学生经理信息,都会给出相应的错误提示,不能录入成功。输入数据都通过form表单中定义的方法onsubmit="returncheckForm()"来检查,checkForm()函数中是各种的校验输入数据的方式。2.程序效果图如下图5.9所示:图5.9学生信息录入学生信息管理1.描述:管理员点击左侧的菜单“学生管理”,页面跳转到学生管理界面,调用后台的action类查询所有学生信息。2.程序效果图如下图5.10所示图5.10学生信息管理学生管理关键代码:publicStringstuAdd(){ TStustu=newTStu(); stu.setStuXuehao(stuXuehao); stu.setStuRealname(stuRealname); stu.setStuSex(stuSex); stu.setStuAge(stuAge); stu.setLoginPw(loginPw); stu.setZhuangtai("a"); stu.setDel("no"); stuDAO.save(stu); this.setMessage("操作成功"); this.setPath("stuMana.action"); return"succeed"; } publicStringstuMana() { ListstuList=stuDAO.getHibernateTemplate().find("fromTStuwheredel='no'"); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("stuList",stuList); returnActionSupport.SUCCESS; } publicStringstuDel() { TStustu=stuDAO.findById(stuId); stu.setDel("yes"); stuDAO.attachDirty(stu); this.setMessage("删除成功"); this.setPath("stuMana.action"); return"succeed"; }5.2.4公告信息管理公告信息录入1.描述:管理员输入公告相关正确信息后点击录入按钮,如果是没有输入完整的公告信息,都会给出相应的错误提示,不能录入成功。输入数据都通过form表单中定义的方法onsubmit="returncheckForm()"来检查,checkForm()函数中是各种的校验输入数据的方式。2.程序效果图如下图5.12所示:图5.12公告信息录入公告信息管理1.描述:管理员点击左侧的菜单“公告信息管理”,页面跳转到公告信息管理界面,调用后台的action类查询出所有的公告信息,并把这些信息封转到数据集合List中,绑定到request对象,然后页面跳转到相应的jsp,显示出公告信息。2.程序效果图如下图5.13所示图5.13公告信息管理页面公告信息管理关键代码:publicStringgonggaoAdd(){ TGonggaogonggao=newTGonggao(); gonggao.setGonggaoTitle(gonggaoTitle); gonggao.setGonggaoContent(gonggaoContent); gonggao.setGonggaoData(newDate().toLocaleString()); gonggaoDAO.save(gonggao); this.setMessage("公告添加完毕"); this.setPath("gonggaoMana.action"); return"succeed"; } publicStringgonggaoMana() { ListgonggaoList=gonggaoDAO.findAll(); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("gonggaoList",gonggaoList); returnActionSupport.SUCCESS; } publicStringgonggaoDel() { TGonggaogonggao=gonggaoDAO.findById(gonggaoId); gonggaoDAO.delete(gonggao); this.setMessage("公告删除完毕"); this.setPath("gonggaoMana.action"); return"succeed"; } publicStringgonggaoDetail() { TGonggaogonggao=gonggaoDAO.findById(gonggaoId); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("gonggao",gonggao); returnActionSupport.SUCCESS; }公告详细信息查看1.描述:先是点击公告信息管理,页面跳转到公告信息管理界面,浏览所有的公告信息,点击要查看的公告信息,弹出公告信息详细信息界面。公告信息删除1.描述:先是点击公告信息管理,页面跳转到公告信息管理界面,浏览所有的公告信息,点击要删除的公告信息,弹出的确定对话框,即可删除该公告信息。5.3前台网站功能模块5.3.1网站首面设计1.描述:前台首页是浏览者打开一个网站后第一眼看到的网页,网站能不能吸引浏览者,在很大程度上取决于首页做得怎么样。首页包含内容虽然丰富但不杂乱,色彩搭配要合理,整体风格要独特。2.程序效果图如下图5.22所示:图5.22网站首页5.3.2教学课件下载1.描述:点击网站主页菜单的课件信息菜单,进入课件信息列表,点击课件信息具体内容,并下载资料中的附件信息。2.程序效果图如下图5.23所示:图5.23教学课件下载课件下载核心代码:publicStringdocAll(){ Stringsql="fromTDocwheredel='no'"; ListdocList=docDAO.getHibernateTemplate().find(sql); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("docList",docList); returnActionSupport.SUCCESS;} publicStringdocDetailQian(){ TDocdoc=docDAO.findById(id); Maprequest=(Map)ServletActionContext.getContext().get("request"); request.put("doc",doc); returnActionSupport.SUCCESS;}5.3.3教学视频下载1.描述:点击网站主页菜单的教学视频,进入教学视频信息列表,点击视频信息浏览具体内容,并下载视频中的附件信息。2.程序效果图如下图5.24所示:图5.24教学视频下载教学视频下载关键代码:StringfujianPath=request.getParameter("fujianPath");StringfujianYuashiMing=request.getParameter("fujianYuashiMing"); fujianYuashiMing=.URLDecoder.decode(fujianYuashiMing,"UTF-8");System.out.println(fujianYuashiMing+fujianPath); SmartUploadsu=newSmartUpload();//新建一个SmartUpload对象su.initialize(pageContext);//初始化 su.setContentDisposition(null);//设定contentDisposition为null以禁止浏览器自动打开文件,//保证点击链接后是下载文件。若不设定,则下载的文件扩展名为//doc时,浏览器将自动用word打开它。扩展名为pdf时,将用acrobat打开//response.sendRedirect(path+"/updown/updown_err.jsp");//su.downloadFile("/uploadPath/file/liu.doc");//下载英文文件 su.downloadFile(fujianPath,null,newString(fujianYuashiMing.getBytes(),"ISO8859-1"));//下载中文文件//downloadFile(StringsourceFilePathName,StringcontentType,StringdestFileName)out.clear();out=pageContext.pushBody();5.3用户身份鉴别身份鉴别通常包括用户提交的一个用户名和口令,你可以只使用用户名或口令对用户进行鉴别,也可以选择通过IP地址来鉴别。通过IP地址来鉴别只有当用户拥有静态IP时才起作用,所以并不常用。在此我采用基于表单的身份鉴别。 在基于表单的鉴别中,提示用户名和口令的Web页面由服务器来提供,而不是依靠浏览器显示对话框,这样,在需要用户登录时就可以给用户提交额外的信息和选项了。需要注意的是,虽然输入口令时显示为星号,但是浏览器还是以纯文本传送口令本身:非加密、不进行Base64编码,只是纯文本。如果采用GET方法将表单数据提交给服务器,用户浏览器将在URL中明显地显示出口令,而且浏览器还会将它保存在最近浏览地页面列表中。因此,在笔者实现基于表单的身份验证时,使用的是POST方法提交表单数据给服务器。 当用户登录认证的表单请求后,表单采用POST方法提交到LoginServlet.LoginServlet将获得的参数传给Userbean(是一个JavaBean),如果通过验证就进入系统的功能区,否则就返回登录界面。下面介绍用户bean(Usecjava),它定义了一组属性,包括 (1)userlD,这是一个只读属性,标示登录会员的会员编号,这个编号对于使用系统的所有用户(包括教师、学生和管理员)来说是唯一的: (2)userName,这是一个可读写属性,标示登录会员的用户名; (3)passWord,是一个可读写属性,标示登录会员的口令; (4)userType,也是一个可读写属性,标示登录会员的身份类型;该属性与userName,password都是用户通过login.jsp页面提交到checked.jsp,然后由checked.jsp将参数赋值给这三个属性。 (5)login,这是一个boolean属性,用来判断当前的访问是否是登录会员的访问。 (6)Userbean实现了如下两个公共方法用来检查用户是否是会员登录。 (7)checkUser:用来检查用户登录信息。它主要是通过JDBC访问数据库,通过检查用户名、口令、身份类型是否正确或者匹配,如果正确则置login为true,并从数据库中读取相应字段给属性UserlD赋值。 (8)isLogin:获取login值,检查是否是登录会员的访问。 (9)isStudent,isTeacher,isAdm:获取登录会员的身份类型。Userbean在本系统的许多程序中都要用到,它是作为session范围的bean定义的。5.4对话跟踪处理HTTP(HypertextTransferProtocol)是一个基于请求/响应模式的应用层协议。其最新版本为1.1,在RFC2068中最先提出,并在RFC2616中进行了修正。HTTP对浏览器进行请求、服务器提供响应的规则进行了定义。 一个客户机与服务器建立连接后,发送一个请求给服务器,请求方的格式为:请求方法,请求URI,协议版本号,后边是0个或多个头标以及可能的请求数据。服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是0个或多个响应头标,一个空行指明头标的结束,最后是组成响应的数据。 HTTP最初的设计意图是在WWW上发布文档和图像,因此,它使用了一个相当简单的通信模型。客户端对文档进行请求,服务器响应以文档或错误代码,最终事务处理完成。服务器不会保留请求的任何信息:下一次客户端进行请求时,服务器没有方法可以将它与其他客户端区别开来。这就是HTTP的协议无状态性。 本系统采用JSP/Servlet会话API来对会话进行跟踪和管理。其机制是要求服务器保持所有会话数据,并对其设置一个会话ID,客户端凭借该会话ID通知服务器将自己置于指定的会话环境中。一旦服务器初始化了一个会话对象并且客户端接受了它,服务器就可以构建复杂的、有效的对象并保存大量的属于该会话的数扼。为维持会话,服务器和客户端之间需要传输的仅仅是一个会话ID。 Javax.servlet.http包中提供了一个HttpSession类。该类提供了一个像HashTable一样的接口,让应用程序开发者能够根据名字存储和检索对象。会话Session本质上是服务器端的一个对象。该对象在被创建后将被保留直至超时或,被参与一个会话的Servlet关闭。客户端用于标识一个Session的是一个会话ID如果一个JSP/Servlet允许会话,任何时候,客户端向服务器请求一个JSP/Servlet页面时,服务器将检查该HTTP请求的头标中是否包括一个会话ID。如果客户端的HTTP请求中包括一个有效的会话ID,服务器返回该会话ID所标识的一个HttpSession对象,并将该次请求/响应置于该会话环境。如果客户端的HTTP请求中不包括一个会话ID,或是包括的会话ID无效,服务器将创建一个HttpSession对象,并将其引用返回到一个Session变量。随后,服务器将在返回给客户端的Http响应中的Set-cookie头标中加入一个名称为JSESSIONID,取值为当前会话ID的cookie。此cookie被送往客户端,且在客户端的后续的请求中将被返回给服务器。5.5数据访问优化实训管理平台中的业务数据使用相应的实体组件作为对象视图,客户端可以通过组件提供的属性读写方法。完成对业务数据地读写操作。通常,客户端需要多次调用实体组件的getter方法才能得到所有的属性值。但使用多个只返回单个属性值的getter方法调用来从特定的实体组件获取数据的效率将非常低下。随着调用次数的逐渐增加,系统的性能会明显下降。为了提高数据访问效率,在设计上运用值对象的设计思想。值对象是普通的Java对象,封装了实体组件的所有属性。值对象的设计思想是由在客户端提出检索请求时由实体组件构造一个新的值对象实例,把检索的属性值拷贝到该对象中,然后把一该值对象实例传递给客户端。客户端可以通过检索一该值对象获取单个的属性值。值对象是按照值传递的方式传给客户端的,对值对象的所有调用都是本地调用,加快了实体组件客户端的访问速度,从而提高了系统的数据处理性能。实训管理平台的用户不仅可以检索数据,还能对特定的数据进行修改。所有的这些业务处理过程都要用到值对象。因此,在值对象的设计上采用了可更新值对象的策略,也就是说,不仅可以把来自实体组件的值传递到客户端,而且可以把客户端更新的数据传递回实体组件对象。为了保持值对象的状态,值对象必须是可序列化的。以用户信息实体组件为例,对可更新的值对象进行简略的说明。(1)定义值对象类Cls_TeacherInfo_ValucObjectpublicclassCls_TeacherInfo_ValueObjectimplementsSerializable{ privatejava.lang.Stringname; privatejava.lang.Stringsex; publicvoidsetName6ava.lang.StringTeachemame){name=Teachername;j publicjava.lang.StringgetNameo{returnname;}}(2)修改用户信息实体组件本地接口,在本地接口中添加值对象读写方法 getDatalnfo()/setDatalnfo()(3)在用户信息实体组件类内实现值对象的读写方法//修改值对象,相应的实现对数据库数据的修改publicvoidsetDataInfo(Cls_TeacherlnfoesValue0bjectupdateData){ setName(updateData,getName());}//查询值对象publicCls_Teacherlnfo_ValueObjectgetDatalnfoo{ Cls_Teacherlnfo_ValucObjectobj=newCls_Teacherrnfo_Value0bject(}: Obj.setDrugName(getNameo); returnobj;} 通过使用值对象,减少了从实体组件获取属性值的网络调用次数,提高数据访问效率。5.6数据库连接原理采用JDBC连接数据库的方式,只需在工程中导入对应数据库的jar包,就可以方便的对数据库进行连接,在程序中,用Class.forName()方法来加载驱动程序,在用DriverManager的getConnection()方法就可以创建一个数据库连接。程序采用的是DAO模式来操作数据库,DAO(DataAccessObject,数据访问对象),是Java编程中的一种经典模式,已被广泛应用,也是J2EE架构中持久层框架的基础知识,基于分层次式的软件架构来实现对数据库的访问操作。DAO模式的主要思想就是从抽象数据源获取与操纵数据的方法。抽象数据的含义就是编写应用程序的程序员不必关心数据库的物理位置,已经是何种数据库,只需使用封装数据库中表示记录的数据对象即可。其思想如图3.10所示:封装使用封装使用DataSourceDataAccessObjectBusinessObjectDataSourceDataAccessObjectBusinessObject创建/使用获取/修改创建/使用获取/修改DataTransferObjectDataTransferObject图3.10DAO模式类图图中BussinessObject是业务对象,是使用DAO模式的客户端;DataTransferObject数据传输对象,在应用程序不同层次之间传输对象,在一个分布式应用程序中,通常可以提高整理的性能;DataObjectAcces数据输入/输出对象封装了对数据源的一些基本操作;DataSource指的是数据源。可以从图中看出,DAO模式分离了业务逻辑和数据罗即将,是的编写的软件具有良好的层次式体系结构。本系统为了方便数据库的操作,主要使用DB的对象来接一个数据库(建立一个类DBContent),代码如下:publicDB() { try { Class.forName(className); }catch(ClassNotFoundExceptione) { System.out.println("加载数据库驱动失败!"); e.printStackTrace(); } } /**创建数据库连接*/ publicConnectiongetCon() { try { con=DriverManager.getConnection(url,user,password); }catch(SQLExceptione) { System.out.println("创建数据库连接失败!"); con=null; e.printStackTrace(); } returncon; }在程序需要连接数据库的地方,只需要生成一个DB的对象,就可以对数据库进行连接并操作。5.7中文乱码在程序中经常会遇到中文乱码的情况,如果手动的在servlet和jsp页面进行设置,相当麻烦。因此,在程序的开始就写了一个过滤器SetCharacterEncodingFilter。在web.xml中配置:<filter><filter-name>SetCharacterEncodingFilter</filter-name><filter-class>myweb.util.filter.SetCharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>gb2312</param-value></init-param></filter><filter-mapping><filter-name>SetCharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern>//*表示工程下所有的页面都会有此过滤器的处理</filter-mapping>对应的SetCharacterEncodingFilter.java文件中的重要代码,在初始化init()方法中定义:publicvoidinit(FilterConfigfilterConfig)throwsServletException{ this.filterConfig=filterConfig;this.encoding=filterConfig.getInitParameter("encoding");Stringvalue=filterConfig.getInitParameter("ignore");}在工具包util包中同样定义了DataFormate类来处理字符转换:publicstaticStringtoUni(StringgbStr){StringuniStr="";/*把字符串转换成uincode编码*/if(gbStr==null){gbStr="";}try{byte[]tempByte=gbStr.getBytes("GB2312");uniStr=newString(tempByte,"ISO8859_1");}catch(Exceptionex){}returnuniStr;}/*把字符串转换成Utf8编码*/publicstaticStringtoUtf8String(Strings){StringBuffersb=newStringBuffer();for(inti=0;i<s.length();i++){charc=s.charAt(i);if(c>=0&&c<=255){sb.append(c);}else{byte[]b;try{b=Character.toString(c).getBytes("utf-8");}catch(Exceptionex){System.out.println(ex);b=newbyte[0];}for(intj=0;j<b.length;j++){intk=b[j];if(k<0){k+=256;}sb.append("%"+Integer.toHexString(k).toUpperCase());}} returnsb.toString();}第6章软件测试测试是开发时期最后一个阶段,是保证软件质量的重要手段。软件测试就是在受控制的条件下对系统或应用程序进行操作并评价操作结果的过程,所谓控制条件应包括正常条件与非正常条件。软件测试过程中应该故意地去促使错误的发生,也就是事情在不该出现的时候出现或者在应该出现的时候没有出现。从本质上说,软件测试是"探测",在“探测”中发现软件的毛病。6.1软件测试的重要性软件测试在软件生命周期中占据重要的地位,在传统的瀑布模型中,软件测试学仅处于运行维护阶段之前,是软件产品交付用户使用之前保证软件质量的重要手段。近来,软件工程界趋向于一种新的观点,即认为软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难。[19]事实上,对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。在此系统功能大部分实现可以运行之之时,便需要开始考虑进行系统测试工作了。通过对系统进行测试可以找出系统中隐藏的一些错误。在发现错误以后需要及时进行修正,以保障系统的长期稳定运行。这个过程必不可少。测试的软件模块的基本功能,可以继续进行,尽可能提高软件的鲁棒性。系统的测试有黑盒测试和白盒测试两种方法。黑盒测试也称作功能测试。黑盒测试是在程序接口进行。它只检查程序功能是否可以运行并符合设计时所提出的要求。黑盒测试检查当有数据进行输入的时候程序是否能及时作出反应,而且还能够保持外部信息的完整性。白盒测试也叫结构测试。白盒测试要求测试人员完全了解程序的结构和程序的处理过程。白盒测试会依照程序内部的逻辑顺序来进行测试,检验程序是否都能按照指定的要求去完成工作。[16]本系统开发过程进行了模块测试、验收测试等测试。模块测试也可以称为单元测试,目的是保证程序每一个单独模块作为一个独立单元可以正常的运行。模块测试常常可以发现编码和详细设计方面发生的错误。它主要用来评价模块的接口,局部数据结构,重要的执行路径,出错处理通路。模块测试主要是由代码审核和软件测试两部分组成。[17]验收测试是为了验证软件的有效性和可靠性。其目的是为了说明软件可以向设计的那样正确的运行,也是对用户的一种保障措施。验收测试主要用黑盒测试法,验收测试有可能出现两种的结果。第一种是系统的功能与特性无法满足用户的要求;另一种可能是系统功能和性能十分完善,用户十分满意。平行运行。所谓平行运行就是同时运行。就是将新开发出来的系统与原有的旧系统同时执行同样的任务,比较它们之间的差异。这样做的目的是可以发现新系统的并为改善的缺点,同时也可以让用户熟悉新系统,便于以后得运用与操作。在模块测试时应该主要从以下几个方面开始入手:模块接口,局部数据结构,重要执行通道,出错处理通道,影响上述方面的边界条件。测试时进行代码审查测试,从数据类型,变量声明,数据结构进行审查,然后功是能测试。改变测试计划改造另一个角度测试,发现错误并记录,修改代码,测试条件通过多分支使程序,判别结果,以完成模块的测试。6.2测试实例的研究与选择程序测试的主要方法分为两大类,白盒测试和黑盒测试。白盒测试:一种是以程序的内部逻辑结构为依据而设计测试用例的方法,因而又称结构测试或玻璃盒测试,将软件看成一个透明的白盒子,按照程序的内部结构和处理逻辑来选定测试用例,对软件的逻辑路径及过程进行测试,检查它与设计是否相符[20]。白盒测试就是要选取足够的测试用例,对源代码实行比较充分的覆盖,以便尽可能多地发现程序中的错误。主要有两种方法:一种称为逻辑覆盖法,另一种称为路径覆盖法。黑盒测试:也称功能测试,数据驱动测试等,它将待测对象堪称是一个黑盒子,在完全不考虑程序的内部结构和特性的情况下,只依据规格说明书检查程序的功能是否能正常使用。黑盒测试主要是根据输入条件和输出条件的确定测试数据,来检查程序是否能产生正确的输出。进行黑盒测试主要有下面几种方法:等价分类法、边界值分析法、猜错法、因果图法。本系统的测试综合了白盒测试、黑盒测试两种方法,但主要使用的是黑盒测试方法。在测试当中遵循了“尽早地和不断进行测试”,“保证测试用例的完整性和有效性”原则。通过测试达到以下测试目的:1.功能检查:检查功能是否争取,是否遗漏或实现不了应该实现的功能等。2接口检查:检查能否正确地接受信息或输出信息。3数据检查:检查数据结构或外部信息是否有(如数据文件)访问错误。4性能检查:检查性能需求能否得到满足。[21]5初始化、终止检查:检查是否能进行正确地初始化或终止。6.3测试环境与测试条件处理器:Inter(R)Core(TM)2DuoT5750内存:2GB硬盘:160G操作系统:WindowsXP数据库:SqlServer6.4系统运行情况通过对系统的全面测试,所有测试条目都已经通过,实现了基本要求,系统可以正常运行。6.5系统评价系统评价是指系统在正式运行了一段时间之后,对它在功能上、技术上和经济上所进行的审核评价。针对本系统的评价如下:(1)系统功能评价根据本系统开发前所订的目标,在系统完成后经过测试运行,该系统达到了预定的开发目标,在实际使用中的功能可以满足用户需求。[22](2)系统技术评价本系统设计合理,功能达到了预期目标,且系统运行后稳定可靠,安全性高,具有实用性,大大提高了信访办公效率。系统经济评价在规定时间内,该系统完成了系统分析时所确定的系统开发目标,达到了设计要求,投入使用后为用户节省了大量人力物力财力,提高了科学管理水平。第7章结论计算机技术的飞速发展带动了很多行业的发展,计算机带给我们最直观的价值就是减少了人力物力的投资,提高了工作质量和效率,从而提高了整个社会的生产力。目前各大酒店充分利用计算机资源和网络资源来提高自身的管理水平,而有关多媒体技术与应用课程网站的设计也成为多媒体技术与应用课程网站争论的热点问题。本文在分析多媒体技术与应用课程网站的基础上,用JSP和SqlServer数据库设计并完成多媒体技术与应用课程网站。通过系统调试结果显示,本系统基本完成了功能需求。在整个设计过程中,采用瀑布模型和结构化的设计方法。本系统界面美观友好,操作方便,做出了自己的特色。但由于时间仓促加上缺乏系统开发经验,系统在设计过程中不可避免地遇到了各种各样的问题,如:1.有些数据输入时没有及时的进行数据格式校验,不能保证数据绝对正确性。2.由于时间关系,系统功能实现不够完善,使用可能存在一些不方便。本系统在实际使用过程中有可能出现一些问题,通过对系统的不断优化和完善,能够调试出真正符合实际情况的多媒体技术与应用课程网站,形成统一、规范、科学、合理的多媒体技术与应用课程网站。参考文献[1]张孝祥、徐明华.JAVA基础与案例开发详解[M].清华大学出版社.2009.45-46.[2]康牧.JSP动态网站开发实用教程[M].清华大学出版社.2009.127-127.[3]刘亚宾.精通Eclipse--JAVA技术大系[M].电子工业出版社.2005.167-168.[4]于万波.网站开发与应用案例教程[M].清华大学出版社.2009.77-78.[5]杨学瑜.高立军,软件开发过程与项目管理[M].电子工业出版社.2008.43-46.[6]张洁才.Javaweb应用开发教程[M].科学出版社.2005.66-68.[7]戴维尔.JavaScript程序员教程[M].电子工业出版社.2010.333-334.[8]黎连业、王华、李淑春.软件测试与测试技术[M].清华大学出版社.2009.321-322.[9]黄梯云.管理信息系统[M].北京:电子工业出版社.2006.216-217.[10]JamesD.McCaffrey等.NET软件测试自动化之道[M].北京:电子工业出版社.2007.213-214.[11]甘仞初.信息系统开发[M].北京:经济科学出版社.2007.144-145.[12]马赫.DreamweaverMX2004网页设计经典108例[M].中国青年出版社.2005.99-101.[13]唐友国湛洪波著.JSP网站开发详解[M].电子工业出版社.2008.111-112.[14]卫红春等著.信息系统分析与设计[M].北京:清华大学出版社.2009.51-53.[15]张大方李玮等著.软件测试技术与管理[M].湖南:湖南大学出版社.2007.333-334.[16](美)H.M.Deitel,P.Jdeitel.Java程序设计教程(第五版).清华大学出版社.2004.212-212.[17](美)ElliotteRustyHarold.JavaNetworkProgramming.东南大学出版社.2005.122-123.[18]孙卫琴等.精通struts:基于MVC的JavaWeb设计与开发[M].电子工业出版社.2005.144-144.[19]张文静林琪著.JSP程序设计[M].人民邮电出版社.2005.256-257.[20]孙卫琴李洪成著.Tomcat与JavaWeb开发技术详解[M].电子工业出版社.2005.343-344.[21](美)JohnJ.Patrick.SQL基础(第二版).清华大学出版社.2004.77-79.[22](美)Davidflanagan.Java技术手册(第五版).东南大学出版社.2006.33-35.[23]黄裴、徐汀荣.电子商务原理与技术(第二版),科学出版社.2006.124-126.致谢大学生活在这个时候即将划上一个句号。但是对于我的人生道路来说,这仅仅是一个逗号,我将面对的是又一次征程的开始。回忆过去,许许多多的事情浮现在脑海:刚上大学时欢乐心情和兴奋的场景还历历在目。一切都是那么新鲜,那么富有吸引力。有快乐也有艰辛,有收获也有失落。衷心感谢信息学院所有支持帮助过我的老师,谢谢你们多年来的关心和爱护。同窗的友情同样难忘,你们与我共同走过了人生中不平凡的道路,给我留下了值得珍藏的美好记忆。最后,我要特别感谢指导教师XX老师。本论文是在她们的悉心指导和热情帮助下完成的,老师认真负责的工作态度,严谨的治学精神和精深的理论水平都使我受益匪浅。她们无论在理论上还是在实践中,都给予我很大的帮助,使我专业技能的应用水平得到很大提高,这对于我以后的工作和学习都有益处。值此论文完成之际,特别向指导老师表示衷心的感谢和崇高的敬意,谢谢她们细心而又耐心地辅导,使得我得以顺利的完成毕业设计开发工作,同时也要感谢其他帮助过我的老师和同学,他们在我成长过程中给予了我很大的帮助,在此一并表示感谢。由于本人水平有限,加上时间紧促,本文一定有不少缺点和不足,恳请各位老师给予帮助和指正。学生签名:日期:附录I文献翻译1、英文原文JAVAthreeframeworksusedtomakeWENapplications.ShowstrutsprimarilyresponsibleforthepresentationlayerspringIOCandAOPuseittoprocesscontroloperations(responsiblefortheoperationofthedatabase)hibernatemainlypersistentdatatothedatabaseIntheservletjsptodowithwebdevelopmentwhenthereisaweb.xmlmappingfile,whichhasalabelthatisusedformappingfilemapping.WhenyouentertheURLinthebrowserwhenthefilewillbewrittenbasedonyournamecorrespondingtoajavafile,thebrowserisawebpage,sojustwritethepagenameisbasedonthecontentsofthedocumentwritteninjavadisplay,justfromthename,whetheryouarefrom.php.jsp.doorwhatothercorrespondstothejavafile,thejavacodefilewhatactiontodo,displayawordoraconnectiontoadatabaseorjumptootherpagesothatthejavafilethedatapackagetoplaytheroleofsecurityandeaseofmanagement.Infact,thisjavafilescompiledover是.Classofabytecodefile,notasasimilarhtmlcodetoembedtagsandwebdocuments.Heandthedifferenceisjspjspfilestoembedhtmlcodelabel.Thereservletorstrutsactionintheformofhtmlsubmitajavafilenamecorresponds,strutsgenerally.Do,andaremappedasabove.One,SpringSpringisapowerfulframeworktosolvemanyofthecommonJ2EEdevelopmentissues.Springprovidesaconsistentwaytomanagebusinessobjectsandtoencouragetheinjectionoftheprogramminginterfaceratherthantheclassofgoodprogramminghabits.Spring-basedarchitectureisbasedontheuseofJavaBeanpropertiesInversionofControlcontainer.However,thisisonlypartofthecompletepicture:SpringIoCcontainerinuseasaframeworktobuildcompleteattentiontoallaspectsofacompletesolutionlayerisunique.Springprovidesauniquedataaccessabstraction,includingasimpleandefficientJDBCframework,whichgreatlyimprovestheefficiencyandreducesthepossibilityoferrors.Spring'sdataaccessarchitecturealsointegratesHibernateandotherO/Rmappingsolutions.Springalsoprovidesauniquetransactionmanagementabstraction,whichcaninavarietyofunderlyingtransactionmanagementtechniques,suchasJTAorJDBCtransactionprovidesaconsistentprogrammingmodel.SpringprovidesalanguagewritteninstandardJavaAOPframework,itgivesPOJOsprovidesdeclarativetransactionmanagementandothercorporatematters-ifyouneedto-canimplementyourownaspects.ThisframeworkisstrongenoughtomakeanapplicationtosetasidethecomplexityofEJB,whileenjoyingcriticalservicesandassociatedtraditionalEJB.SpringIoCcontainerandalsoprovidesapowerfulandflexibleintegrationMVCWebframework.Two,STRUCTSStrutsisanMVCframeworkSunJ2EEplatformbasedmainlyusedServletandJSPtechnologytoachieve.SinceStrutscanfullymeettheneedsofapplicationdevelopers,easytouse,quickquick,popularattentioninthepastyear.StrutstheServlet,JSP,customlabelsandinformationresources(messageresources)intoaunifiedframework,developersdonothavetousetheirowncodingMVCmodeltoachieveitsfulldevelopment,greatlysavingtime,sothatStrutsisaverygoodapplicationframework.Three,HibernateHibernateobject-relationalmappingframeworkisanopensource,ithadaverylightweightJDBCobjectpackagesothatJavaprogrammerscanusearbitraryobjectprogrammingthinkingtomanipulatethedatabase.HibernatecanuseJDBCinanyapplication,eitherprograminJavaclientutilitycanalsobeusedinServlet/JSPWebapplication,themostrevolutionaryis,HibernatecanreplacetheEJBCMPJ2EEapplicationarchitecturetocompletethetaskofdatapersistence.,HibernatecanreplacetheEJBCMPJ2EEapplicationarchitecture,datapersistencetocompletethetask.2、中文译文JAVA三大框架用来做WEN应用。struts主要负责表示层的显示spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作)hibernate主要是数据的持久化到数据库在用jsp的servlet做网页开发的时候有个web.xml的映射文件,里面有个mapping的标签就是用来做文件映射的。当你在浏览器上输入URL地址的时候,文件就会根据你写的名称对应到一个java文件,根据java文件里编写的内容显示在浏览器上,就是一个网页,所以网页名字是随便写的,随便起的名字,不管你起的是.php.jsp.do还是其他的什么都对应这个java文件,这个java文件里的代码进行什么操作就干什么,显示一句话还是连接数据库还是跳转到其他页面等等,这个java文件把数据进行封装起到安全和便于管理的作用。其实这个java文件编译过来是.class的一个字节码文件,没有那么一个类似html嵌入标签和代码的网页文件。他与jsp文件区别就是jsp把代码嵌入到html标签中。还有servlet或者struts中html表单的action中的提交名称对应一个java文件,struts一般是.do的,都和上面一样是映射。一、SpringSpring是一个解决了许多在J2EE开发中常见的问题的强大框架。Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的InversionofControl容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/Rmapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVCWeb框架。二、STRUCTSStruts是一个基于SunJ2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Strut
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 清远拆除厂房施工方案
- 苏州电梯井防水施工方案
- 砖墙砌体切割施工方案
- 脱硫塔整体施工方案范本
- 扩充车库改造方案范本
- 服毒应急处理方案范本
- 总图道路及围墙施工方案
- D级危房加固施工方案
- 汉字书写规范与基本功训练:初中汉字书写能力培养方案
- 健康教育课件
- 2024年中学英语教师招聘考试试题及答案真题
- 计算机等级考试二级MS Office高级应用与设计试题与参考答案(2025年)
- 玉米深加工完整版本
- 2025年高考数学热点题型突破:平面向量 重难点题型(含答案)
- 《法制宣传之盗窃罪》课件
- 2024年嵌入式软件许可协议3篇
- 中国的传统农耕文化科普
- 门诊护理一病一品汇报
- 全文图解九项准则《医疗机构工作人员廉洁从业九项准则》
- 2024年医疗器械经营质量管理规范培训课件
- 部编版历史九年级上册第七单元 第20课《第一次 工业革命》说课稿
评论
0/150
提交评论