




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2015届本科毕业论文(设计)基于java技术的即时聊天系统实现姓 名:_ xxxx _系 别:计算机与信息技术学院专 业: 网络安全 _学 号:_xxxxxxxx_ _指导教师:_ xxxxx _2015年 5月8日目 录1 绪论11.1 背景11.2 论文研究内容与方法12 开发环境介绍12.1 java技术简介12.2 开发工具简介13 需求分析13.1 功能性需求分析23.2 非功能性需求分析24 总体设计24.1 功能模块设计24.2 数据库设计35 系统详细设计与实现55.1 界面设计55.1.1 登录界面55.1.2 注册界面55.1.3 修改密码界面65.1.4 好友列表界面75.1.5 聊天窗口界面85.1.6 服务器端界面95.2 功能实现95.2.1 实现登录95.2.2 实现注册95.2.3 实现修改密码105.2.4 添加、删除好友105.2.5 移动黑名单115.2.6 多对多聊天125.2.7 显示表情125.2.8 文件的发送135.2.9 历史记录136 测试阶段14总 结14参考文献15致 谢15基于java技术的即时聊天系统实现摘要基于java技术的即时聊天系统采用c/s架构,myeclipse集成开发环境和mysql数据库为开发环境,在window7系统下使用java程序设计语言开发的一款聊天系统。系统主要分为:用户注册、用户登录、修改密码、好友列表、聊天等五大模块;在功能上用户能够进行添加删除好友,移动黑名单,一对一、多对多的聊天,发送表情,传送文件等操作。关键词java;即时聊天系统;c/s;myeclipse;mysql; implementation of instant messaging system based on java technologyabstractjava technology and c/s architecture is used in the instant messaging system,the myeclipse integrated development environmentandmysql database as a development environment based onjava programming language,the use of window7 system in the developmentof achat system. the systemis mainly divided into:user registration,user login,change password,list of friends,chat and otherfive modules;in function,users canadd and delete friends,mobileblacklist,one to one,many to many chat,send expression,transfer files and otheroperations.keywordsjava; instant messaging system; c/s ;myeclipse;mysql;16商丘师范学院2015届本科毕业论文(设计)1 绪论1.1 背景随着互联网的蓬勃发展,即时聊天已经成为如今最流行的通讯方式,尤其在移动互联网方面,即时聊天已经与我们的生活息息相关。同时,java是一种非常流行的程序设计语言,可以用来开发面向对象、跨平台的应用程序。 即时聊天已经与我们的生活不可分割,利用自己学习到的java语言开发一款自己的聊天软件是一个非常不错的选择,既能够检验自己对java技术的掌握,同时又能够开发一款自己的聊天软件。1.2 论文研究内容与方法基于java技术的聊天系统主要是探索如何在java技术下能够实现即时聊天的一些基本功能:用户注册,用户登录,添加删除好友,移动黑名单,实现一对一、多对多的聊天,能够发送表情,传送图片、视频等1。论文的设计主要采用了两种研究方法:一是文献资料研究的方法。在研究聊天系统现实中,本人通过图书馆、电子图书馆学习了java语言中的一些编程技术;二是理论与实际相结合,既然掌握了技术与方法,那么就应该快速的进行实践,在软件的设计过程中,才能够理解到理论与现实的差距,遇到棘手问题,应该快速查阅资料快速攻破。2 开发环境介绍本聊天系统是基于java技术的,采用c/s结构,采用mvc的开发框架,利用myeclipse、mysql数据库作为开发工具。2.1 java技术简介java是一种程序设计语言, 主要应用于android 应用、jsp网站、pc和游戏控制台等领域。java语言能够使开发者在设计程序的时候能够根据自己的情况自定义数据类型和关联操作,对于程序中的数据结构的改变或者代码的改变进行相应的操作;java语言编写的程序编译后无需再次编译,可以在任何硬件设备下运行1。本次课题中主要用到swing工具包中jframe类,采用java和windows混合界面风格,作为开发程序的外观风格来设计聊天系统界面;其次,使用java socket编程技术实现系统之间的网络通信2。2.2 开发工具简介myeclipse是一种集成开发软件。myeclipse的功能强大,可以集成多种语言开发插件,进行相应开发语言的开发工作。mysql是一个关系数据库,底层代码是c、c+编写的,通过编译测试达到代码的可移植;而且,它支持支持linux、windows、msc os等多种操作系统,支持多线程。它的代码是开源的,用户可以在其基础上根据自己的需要进行二次开发;mysql的体积小、速度快、成本低,因此一些小型网站的开发都选择 mysql 作为其网站的数据库。3 需求分析软件系统的开发是根据用户的需求来设计开发出用户需要的软件系统或者系统中的软件部分的过程。项目流程化能够促进项目的监管、人员的合理分配。需求分析是指对即时聊天系统的功能、非功能进行全面分析的过程,对以后开发出来的软件应该实现什么样的功能,具有什么样的界面以及软件能够达到什么样的性能等。3.1 功能性需求分析即时聊天系统在功能上主要能够实现如今人们经常用到的各种即时通讯软件的一些基本交流聊天的功能,主要的功能性需求如下:1. 登录界面:注册用户能够进行登录,通过连接数据库进行判断用户是否能够进入好友列表界面。2. 注册界面:用户可以注册,注册信息可以被添加到数据库,然后用于确定用户的登录。3. 好友列表界面:用户能够自由添加、删除好友,移动黑名单等;同时能够实现双击好友,能够进入对应好友聊天窗口等4. 聊天界面:能够将聊天的信息、表情等显示到对应的聊天界面上;能够发送文件、音乐、视频等;能够对聊天的历史记录进行简单的查看、翻页等。5. 修改密码界面:让用户在忘记密码或者想修改密码时候,能够进行修改密码操作。3.2 非功能性需求分析1. 操作系统:windows7旗舰版;2. 硬盘:500g;3. 开发平台:myeclipse2014;4. 数据库:mysql。4 总体设计软件设计是从软件的用户的需求出发,根据需求分析来确定软件系统功能设计的整体结构,然后划分各个功能模块,最后确定每个模块的实现算法以及编写具体的代码,最终形成了软件的具体设计方案3。4.1 功能模块设计根据系统分析的结果画出系统功能模块图,对各个模块进行细分,确定模块相互结构关系。 图4- 1系统功能模块图4.2 数据库设计通过用户的注册,聊天等形成初步的数据需求;对数据需求进行概念上的设计,得到对应的e-r图;其次选择合适的方法,将e-r图转化为关系模型;然后对关系模型进行物理设计4。1. e-r图设计:分析确定各个数据表的字段、数据类型、关系等,画出e-r图。 图4- 2用户属性图4- 3好友属性图4- 4历史记录属性2. 物理设计:根据系统的数据类型,我们可以选择为数据库表中字段最合适的数据类型,字段大小,索引结构等5。表4- 1用户信息表序列号字段描述类型空额外1id用户编号int(11)否主键(自增)2name用户名varchar(16)否3zhanghao用户帐号varchar(11)否唯一4password用户密码varchar(32)否5sex性别varchar(2)否6birthday出生年月varchar(32)否7address地址varchar(32)否表4- 2好友信息表序列号字段描述类型空额外1id编号int(11)否主键(自增)2zhanghao用户帐号varchar(11)否外键3friendid好友帐号varchar(255)4blackname黑名单varchar(255)表4- 3历史记录表序列号字段描述类型空额外1id编号int(11)否主键(自增)2zhanghao用户帐号varchar(32)否3who属于者varchar(11)否外键4sendtime发送时间varchar(32)否5font字体类型varchar(64)否6record发送类容varchar(255)否7pic表情varchar(255)5 系统详细设计与实现编码阶段是将软件设计阶段的各种描述转变成程序代码,在编码阶段应该注意编程语言的选择,在本次课题中,我们使用的是java语言。5.1 界面设计软件界面的设计是非常重要的,对于各个模块采用不同的组件进行设计。下面简单的介绍下如何设计软件的界面。5.1.1 登录界面本即时聊天系统的登录界面(图:3-5),采用jfram容器,使用默认布局,通过setbounds()方法自定义位置。上部是一个jpanel,内置一个jlabel;中间是根据需要放置jlabel、jtextfield、jpasswordfield;最下方放置一个jbutton。具体代码如下:sjp1_jbl=new jlabel(new imageicon(image/login.jpg);s jp1_jbl.setbounds(0,-5,428,159);sjbl1=new jlabel(zhanghao);sjbl1.setbounds(70, 165, 30, 30);sjtf=new jtextfield();sjtf.setbounds(110, 163, 130, 30);sjbl2=new jlabel(mima);sjbl2.setbounds(70, 200, 30, 30);sjbl3=new jlabel(zhuce);sjbl3.setbounds(255, 163, 52, 30);sjpf=new jpasswordfield();sjpf.setbounds(110, 200, 130, 30);sjbl4=new jlabel(xiugai);sjbl4.setbounds(255, 200, 52, 30);sjp3_jb1=new jbutton(new imageicon(image/denglu.png); sjp3_jb1.setbounds(85, 270, 195, 30);图5- 1登录界面5.1.2 注册界面在注册界面(3-6)中同样采用默认布局自定义位置。对于jlabel、jtextfield、jpasswordfield如何放置就不讲太多了,在这里主要讲下新引入的知识点hashmap集合和graphics绘画技术。hashmap是集合类,我们可以通过put、get方法向其中添值、取值,其最重要的一点是它是键值对形式的,通过一个键就能取出相应的值,对于本界面的全国省市联动,正好可以用到地址的灵活变动。通过for循环创建每个省份按钮,并添加addactionlistener监听器,获取其对应省份代号,再通过get方法向hashmap索要其对应的id值。代码如下:添加:hashmap hm=new hashmap();for(int i=0;iprovince.length;i+)hm.put(provincei, ari);获取:if(hm.containskey(s)registeraddress address=(registeraddress) hm.get(s);system.arraycopy(address.getcity(), 0, city, 0, address.getcity().length);for(int i=0;iaddress.getcity().length;i+)addr_jb3.additem(cityi);graphics可以对其进行重写,调用其方法进行绘画,对于本界面中的验证码,正是运用到此类,可以根据自己想要的样式进行绘制。代码如下:stringbuffer randomrecv = new stringbuffer();for (int i = 0; i recv; i+) /通过循环绘制验证码string stm = string.valueof(codesequencerandom.nextint(codesequence.length);red = random.nextint(255);green = random.nextint(255);blue = random.nextint(255);g.drawstring(stm, (i + 1) * x, codey);code= randomrecv.tostring();图5- 2注册界面5.1.3 修改密码界面密码修改界面(图3-7)是一个重要的组成部分,用户在此能够进行密码修改、重置密码;在本界面中同样的运用到以上界面的基本布局界面的组件,同样的引入了新的组件jtabbedpane。jtabbedpane提供add方法允许设计者向其中添加标题,通过添加addchangelistener监视器,当触发时候进行页面的跳转。从密码修改界面能够开出它拥有两个界面提供用户使用。代码如下:sjp0=new jpanel();sjp0.setlayout(null);sjp1=new jpanel();sjp1.setlayout(null);sjtp=new jtabbedpane();sjtp.add(修改密码,sjp0);sjtp.add(忘记密码,sjp1);图5- 3密码修改界面5.1.4 好友列表界面在好友列表界面(图3-8)中,引入一个新的组件jtree。jtree是树形组件,能够添加删除子节点,子节点同样能够添加子节点。jtree是许多初学者在做类似系统软件的首选,对于java默认的tree节点、把柄的图标是不美观的,我们需要对其进行重写。代码如下:tree.setcellrenderer(new defaulttreecellrenderer() public getstreerenderercomponent(jtree stree,string val,boolean bool, int cow, boolean havefoc) if (leaf) this.seticon(title);this.setclosedicon(close)return this;);图5- 4好友列表界面5.1.5 聊天窗口界面聊天窗口界面(3-9)是即时聊天系统里最重要的部位,在这我们能够进行交流,发送表情,发送文件,音乐,视频等,它是软件中的灵魂。从图片上看它只是个普通的界面,但是它拥有很多没有展示的部分,例如表情窗口、聊天记录界面、字体样式选框等。在这个普通的界面中运用到了jwindow、jtextpane、和jsplitpane组件。jtextpane是一个可以编辑和显示图片、文本html等的富文本组件。jwindow是一个窗口容器。但是它不像jfram那样,它不具有标题栏、窗口管理按钮等,我自认为它是做表情窗口最佳的选择。jsplitpane分隔组件。两个组件图形化分隔以外观实现为基础,并且这个组件可以由用户自由调整大小。代码如下:jlabel jl=new jlabel105;string file_names=;for(i=0;ijl.length;i+)file_names=img/+i+.gif;jli=new jlabel(new chaticon(qqchatfacewindow.class.getresource(file_names),i), swingconstants.center);jli.settooltiptext(i+);jli.addmouselistener(new mouseadapter() public void mouseclicked(mouseevent e)if(e.getbutton()=1) jlabel facelabel = (jlabel)(e.getsource();chatframe.insertface(facelabel.geticon(););jp.add(jli);图5- 5聊天窗口界面5.1.6 服务器端界面服务端仅是用来开启socket,界面并没有什么太多的功能,只是两个按钮而已,在这里就不做过多的介绍了。5.2 功能实现在实现功能之前我们需要做一些必要的共同类。首先我们需要做一个用户信息类(user),接着是信息类(message),其次是消息类型类(messagetype),它们不需要做过多的设计,只需要定义一些需要的变量,然后对其进行set和get即可。5.2.1 实现登录实现登录功能还是一个比较简单的功能,只需要我们获取到用户的登录帐号和登录密码,通过对象流将对象(u)给传递给服务器,服务器通过get方法获取帐号和密码,然后从数据库中查询用户的密码字段信息进行对比,将对比的后的信息再通过对象流的方式传递给客户端,再进行相应的处理。代码如下:user m=new user();m.setuserno(sjtf.gettext().trim();m.setpasswd(md5.getmd5code(new string(jpf.getpassword();m.settype(messagetype.message_login);qqclientuser qqclientuser=new qqclientuser();if(qqclientuser.checkuser(m)qqfriendlistframe peoplelist =new qqfriendlistframe(m. getuserno ();/将好友聊天窗口添加到集合中qqfriendlist.addfriendpeople(m.getuserno(), peoplelist);objectoutputstream oos = null;try oos=newobjectoutputstream(m.getuserno ().gets().getoutputstream(); catch (ioexception e1) e1.printstacktrace();msges s=new msges ();/做一个messages.setmestype(msges.message_get_allfriend);s.setsender(m.getuserno();/指明我要的是这个帐号的全部好友5.2.2 实现注册注册功能需要将用户在注册界面的填写信息和相应的选择信息,通过对象流的形式将对象(u)传递给服务器,服务器调用数据库插入代码即可。代码如下:messagearray r=new messagearray();string str=new string6;md5 getmd5 = new md5();str0=nick_jtf.gettext();str1=num_jtf.gettext();str2=getmd5.getmd5code(string.valueof(jpf1.getpassword();str3=sex;str4=bir_jb1.getselecteditem().tostring()+bir_jb2.getselecteditem().tostring()+bir_jb3.getselecteditem().tostring();str5=addr_jb1.getselecteditem().tostring()+ +addr_jb2.getselecteditem().tostring()+addr_jb3.getselecteditem().tostring();r.setstr(str);user m=new user();m.setstr(str);u.settype(messagetype.message_ret_register);clientuser qqclientuser=new clientuser();if(qqclientuser.register(m)dispose();new clientlogin();5.2.3 实现修改密码密码的修改相对的简单,用户只需要根据相应的选项卡填写,就能够进行密码的修改,至于实现的代码如下:user m=new user();m.setuserid(m0);m.setnick(1);m.setpasswd(md5.getmd5code(m1);m.setnewpassword(md5.getmd5code(m2);m.settype(messagetype.message_rel_password);clientuser qqclientuser=new clientuser();if(qqclientuser.relpasswored(m)dispose();new clientlogin();5.2.4 添加、删除好友添加好友相对于删除好友,是一件比较麻烦的事情,具体的思路是:当用户在添加好友输入框中输入想要添加好友的帐号,然后通过对象流将对象(m)传送给服务器,服务器通过后台hashmap集合获取好友的线程,然后将对象传递给好友。对于如何获取到好友的线程呢?在这里就粗略的讲述一下:本系统在每个用户登录的时候,服务器都会为每个用户新建一个线程,同时将每个用户的线程和其帐号通过hashmap进行键值对的绑定,到使用的时候服务器只需通过帐号就能获取到相应的帐号线程,这样就能够很简单的帮我们想要传递的信息转发给相应的好友。代码如下:public hashmap thread=new hashmap();/向hm中添加一个客户端通讯线程public static void setclients (string no, serverconnecclient sct)thread.put(no, sct);public static serverconnectclient getclient(string no)return thread.get(no);图5- 6添加、删除好友选项框图5- 7添加好友提示框5.2.5 移动黑名单黑名单功能是每个即时聊天软件必不可少的功能,对于本系统的黑名单功能,那么我又是如何实现的呢?其实在方法是比较简单的,jtree提供一个自带的方法,它允许子节点进行移动,我们能够在界面上看到相互之间的移动,那么剩下的问题就是数据库存储的问题了。对于通常系统的黑名单,你将对方添加至黑名单,但对方并未将你删除或者也添加至黑名单;而且本系统的数据库中的好友字段在添加好友的时候只是将要添加好友的帐号追加到自己的好友字段中,好友的字段不做任何的处理,所以在添加黑名单的时候,你不知道自己的好友字段中是否有此帐号;本着简单的原则,我们只要将你想添加黑名单的帐号追加到你的黑名单字段,对于其在你好友字段中不做任何的处理。只需要在提取好友id信息的时候把存在黑名单中的好友id移出即可。代码如下:public arraylist getfriend(string userid)string sql1=select friendid from friend where zhanghao=+userid+ limit 1;string sql2=select zhanghao from friend where friendid like %+userid+%;string sql3=select blackname from friend where zhanghao=+userid+ limit 1;sqlhelper sqlhelp=new sqlhelper();arraylist str=sqlhelp.execute_getfriends(sql1, sql2,sql3);arraylist al=new arraylist();objecttr1=(object)tr.get(0);objecttr2=(object)tr.get(1);for(int i=0;itr1.length;i+)/system.out.println(tr1i);al.add(tr1i);for(int j=0;jtr2.length;j+)/system.out.println(tr2i);if(tr1i.equals(tr2j)al.remove(tr1i);objecttr=al.toarray();al.clear();al.add(str);al.add(str2);return al;5.2.6 多对多聊天多对多的聊天是本系统的一个比较亮点的设计,用户能够在同一时间跟多个用户进行聊天,对于聊天的内容不会错乱。同绑定线程一样,在用户开启好友聊天界面的时候,客户端将你的帐号同聊天好友的帐号组合在一起,通过hashmap的键值对的形式将组合后的字符串和这个窗口进行绑定,每开启一个窗口都进行绑定,等到客户端接受到服务器发送来的信息,进行相应的处理,即可将信息追加到对应的聊天窗口中。代码如下:msges s=new msges ();if(s.get msges ().equals( 3)if(qqchat.getchat(m.getgetter()+ +m.getsender()=null)qqfriendchatframe friendchat=new qqfriendchatframe(m.getgetter(),m.getsender();qqchat.addqqchat(m.getgetter()+ +m.getsender(), qqchat);qqfriendchatframe friendchat=qqchat.getqqchat(m.getsender()+ m.getgetter();if(!qqchat.isvisible()qqchat.setvisible(true);friendchat.addmeg(m.getsender(), m.getcon(), m.getpic(), m.getfname(), m.getfsize(), m.getfstyle(), m.getfcolor();/显示5.2.7 显示表情在本聊天系统中,用户能够发送表情图片,然而图片跟文字是不一样的,不能够直接的显示在聊天窗口上的,也不能直接的传送给好友,也不能将其直接的存放在数据库中;因此,我专门给显示表情编写了一些必要的函数。由于本系统是c/s架构的,每一个客户端都是一样的,系统内存放着这些表情图片,而且每一个表情图片都有自己相应的id;因此,我们只需要提取到使用的表情图片的id,以及获得它在发送信息的位置即可,到时我们只需要将发送的文本和表情的id及其在发送信息的位置发送过去即可,客户端内置一些专门处理表情的函数,代码如下:重组发送表情:private string buildpicinfo()stringbuilder all = new stringbuilder();for(int i = 0; i this.jtp2.gettext().length(); i+) if(dmsg.getname().equals(icon) icon icon = styleconstants.geticon(jtp2.getstyleddocument().getattributes(); friendchaticon fch = (friendchaticon)icons; pictureinfo pictureinfo= new pictureinfo (i,string.valueof(fch.getid(); allpictureinfo.add(pictureinfo); all.append(i+#+ fch.getid()+); 重组收到的表情信息串:public void receivedpicinfo(string pic)string picinfo = pic.split(+);for(int i = 0 ; i picinfo.length ; i+)string pp = picinfo i.split(#);if(pp.length=2)picinfo spic = new picinfo(integer.parseint(pp 0), pp 1);addreceivdpicture.add(spic);/将表情添加到滚动列表中图5-8表情窗口5.2.8 文件的发送发送文件是很多聊天系统都拥有的功能,在本系统中我们能够发送文本文件、音乐、视频等,能够给用户提供更多的服务。对于如何发送文件,这是个值得探讨的问题。在java中,它提供了很多能够发送文件的方法,例如字符流、字节流、对象流等,但是在服务器端、客户端我们一直使用的是对象流进行数据的接受、发送,从而使发送的信息不至于错乱。考虑到我们不可能专门为发送文件再写一个服务器端,因此,对于文件的发送我们再次的使用对象流的形式进行发送,同样文件的发送也可以多对多的发送,不会造成错乱。文件的发送方式已经解决,那么对于文件的读取方式我们需要再次进行思考,由于发送的文件除了有文本文件,还有音乐、视频等,我们不可能直接使用字符流的方式进行读取,因此,我们只能采用字节流的形式读取文件。此时,文件的读取方式、发送方式已经确定,剩下的就是写入方式了,既然我们采用的是字节流的方式读取的,就应该用字节流的方式进行写入,如何采用字符流的方式写入,会出现一些意想不到的问题,例如:文本文件可能会有乱码,一些图片、exe文件等打不开的问题。代码如下:文件的读取和发送:fileinputstream fis =new fileinputstream(filepath);byte bytes=new byte1024*4;while(fis.read(bytes)!=-1)sm.setbytes(bytes);objectoutputstream pos=new objectoutputstream(getoutputstream();pos.writeobject(sm);文件的写入:fileoutputstream ps=new fileoutputstream(sm.getsavepath()+sm.getfilename(),true);ps.write(sm.bytes();5.2.9 历史记录历史记录是每一个即时聊天系统必备的功能,本系统的历史记录做的相对比较简单,除了能够在每一页显示规定的记录条数之外,还能够显示当前页数和总页数,用户能够通过点击上一页和下一页进行翻看历史记录。代码如下:public void appendreceivechatrecord(arraylist list) /接受到的聊天历史信息追加jtp3.settext();for(int i=0;i list.size();i+)string str=(string) al.get(i);system.out.println(str0+str1+str2+str3+str4);string msg=str0+ +str1;datefont.setmessage(msg);insertrecord(datefont);/插入标题string s=str2;string fmsg=s.split(+);string ss=fmsg3.substring(17, fmsg3.length()-1).split(,);int r=integer.parseint(ss0);int g=integer.parseint(ss1.substring(2);int b=integer.parseint(ss2.substring(2);myfont=ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年自考专业(汉语言文学)练习题含答案详解(典型题)
- 红外光谱仪培训
- 2026届山东省邹平双语学校化学九上期末联考试题含解析
- 柳中庸《听筝》古诗鉴赏试题及答案
- 威海市重点中学2026届九年级英语第一学期期末调研模拟试题含解析
- 酒店地震应急培训
- 2026届陕西省宝鸡市岐山县化学九上期中考试模拟试题含解析
- 副班个人工作总结
- 护士核心能力培训
- 2026届福建省厦门市海沧区鳌冠学校英语九年级第一学期期末考试模拟试题含解析
- 职场动物进化手册
- 2025中国农业银行贷款合同
- 青少年脊柱侧弯预防
- 2025年静脉输液考试题及答案2024
- 体育单招核心-1700-单词
- 2025年义乌市酒店式公寓行业市场调研分析及投资战略咨询报告
- PEP五年级英语上册单词默写表格
- 王心语《影视导演基础》(第3版)笔记和课后习题详解
- 厂区设备内作业安全规程(4篇)
- 山东省城市园林绿化乡土适生植物名录2024
- 慢性冠脉综合征的管理
评论
0/150
提交评论