

已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京电子科技学院大专毕业设计(论文)北京电子科技学院毕 业 论 文论文题目: 仿qq聊天软件 班 级: 2009级大专1班 专 业: 计算机信息管理学生姓名: 王阳指导教师: 任慧日 期: 2010年 5月 28日摘 要腾讯qq是深圳腾讯计算机系统有限公司开发的一款著名的基于internet的即时通信(im)软件。它是一种使人们能在网上识别在线用户并与他们实时交换消息的技术,为网络用户提供一个实时交流聊天的平台。仿qq聊天软件主要是仿照qq实现用户通过网络相互交流的功能,为进一步开发即时通信技术应用奠定基础。开发此软件的目的是综合以往软件开发知识,进一步熟悉面向对象开发方法,以便得到实用软件开发经验。该系统基本上采用c/s模式实现,其中客户之间聊天采用p2p技术,基于.net框架,使用sql server2005数据库,采用visual c#2005语言进行编程。本论文将介绍与该系统相关的关键技术,比如套接字socket,多线程技术等等,重点介绍该系统的相关功能、设计思路,通过相关的插图详细介绍整个系统的开发过程及其实现,并总结开发过程中的经验,分析错误原因,提出解决方案。关键词:即时通信;qq;聊天软件目 录摘 要第一章 绪论31.1课题背景31.2课题意义31.3研究现状3第二章 关键技术分析42.1.net42.2sockets42.3xml技术42.4数据库技术5第三章 系统设计与分析53.1功能分析53.2总体设计93.2.1处理流程93.2.2功能模块133.3详细设计153.4数据库设计40第四章 系统的实现与错误分析404.1系统实现404.2错误分析43第五章 结论44参考文献44致谢45第一章 绪论1.1 课题背景仿qq聊天软件系统是基于互联网的即时通信软件该系统。即使用因特网技术,允许人们实时的传送信息。即时通信服务的特点是能让用户可以选择性地接受或拒绝某人的信息,也可以同一时间与多人进行交流。当前中国无线互联网呈现出爆发式的增长趋势,移动互联网渐成趋势,即时通信技术已经从pc机向手机媒体渗透 。1.2 课题意义一直以来,空间上的距离都是人们彼此相互交流的最大障碍。缩短彼此之间空间上的距离,使得天涯若比邻,就成了人们迫切的愿望。随着计算机网络技术的发展,人们不再满足仅仅依靠收发电子邮件来进行交流,因此更加即时的直观的使人们能在网上识别在线用户并与他们实时交换消息的即时通信技术应运而生,它是电子邮件发明以来迅速崛起的在线通讯方式,为网络用户提供一个实时交流聊天的平台。而且即时通信和社会化网络、统一通信、在线协同三大技术热点的关系将越来越密切,已经构成融合发展的趋势。在消费者市场,即时通信成为社会化网络的重要支撑性应用;在企业市场,即时通信的普适化应用对企业重视的统一通信和在线协同已经产生重要的影响1,因此即时通信技术的应用将越来越广泛,越来越普遍。1.3 研究现状即时通信的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。如今的即时通信服务已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台2。当前即时通信技术和其他技术的关系越来越密切,同时,随着手机互联网的快速发展,即时通信的各个功能逐渐从pc渗透到手机媒体。第二章 关键技术分析2.1 .netc#.net是微软公司为net3平台量身定做的编程语言,它是一种现代程序设计语言,使程序员能够快速地在net平台上开发种类丰富的应用程序,它继承了c+和java的语法,去掉了c+中的许多复杂和容易引起问题的东西(比如指针),比起java。它又多了一些简洁优美的特性。可以说c#.net 是最适合开发net应用系统的程序语言。基此原因,本系统采用c#net4-5-6进行编程开发。2.2 sockets本系统基本上采用基于sockets7-8的cs通信系统为了在服务器和客户机之间通过tcp/ip协议通信systemnetsockets命名空间提供了tcplistener类和tcpclient类。tcplistener类用于服务器上,该类的构造函数定义了服务器监听的端口号。并用stat()方法启动监听。为了与客户机通信,需要创建一个tcpclient类对象可用tcplistener类的accepttcpclient()方法创建一个tcpclient类对象。该方法在建立与客户机的连接之前是禁用的。客户机也使用tcpclient类并用该类的connect()方法启动与服务器的连接,之后使用与tcpclient类对象相关的流发送和接收数据。服务器启动监听后,如果有客户端连接的信号收到,服务器就自己新建一个socket,然后再新建个线程用来和需要连接的客户端通讯(以新建的socket为参数),同时,为了能够使windows窗口响应,还要发送事件给父窗口,接着自己继续侦听。新建的线程执行完毕,自动关闭连接,释放资源。这样,就实现了socket的连接和多线程通讯。另外使用postmessage函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,实现消息与指定窗口的绑定。2.3 xml技术在net中提供了一个dataset类,通过该类的方法能够实现将关系型数据写入一个xml文档,.net中的dataset类能够绑定关系型数据库的数据表,将关系数据库的平面结构转化为xml的层次结构,通过调用dataset类的writexml9方法,可以将数据库中的表写入到一个xml文档中进行保存,并由服务器通过传送xml文件至客户端达到用户与数据库相互交互的目的。2.4 数据库技术数据库选择sql server200510。为了实现较快的执行速度,减少网络流量。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行sql语句。存储过程(stored procedure)是一组为了完成特定功能的sql语句集经编译后存储在数据库中。第三章 系统设计与分析3.1 功能分析仿qq聊天软件系统的总目标是用户依靠网络服务器提供的服务实现实时聊天,方便人与人之间相互交流。图3-1是客户端用户和服务器管理员的用例图。图3-1 用例图客户端用户具有注册、登陆、实时聊天、查询好友、添加好友、删除好友、更新组、添加组、删除组等功能。服务器管理员具有开启服务、关闭服务、配置服务器的功能。相关uml活动图如下:图3-3 用户注册用例活动图用例名称:注册信息参与执行者:用户,显示器前置条件:系统已开机主事流:1. 用户进入注册页面。2. 用户在注册页面上编辑个人基本信息。3. 系统接收并验证信息是否合法。4. 如果不合法,系统弹出警告框,提示出错。5. 警告过后,返回到1,重新输入。6. 如果注册成功,系统弹出提示框提示注册成功。图2-4 客户服务用例活动图用例名称:客户服务参与执行者:用户,显示器前置条件:系统已开机主事流:1. 用户开打登陆页面。2. 用户在登陆页面上输入登陆信息。3. 客户端初步验证信息是否合法。4. 如果不合法,弹出警告框,提示出错。5. 警告过后,返回到1,重新输入。6. 发送登录信息至服务器验证身份。7. 如果不合法,弹出警告框,提示出错。8. 警告后,返回到1,重新输入。9. 登陆成功,进入主界面。10. 用户根据需要选择聊天、查询好友、添加好友、删除好友、更新组、添加组、删除组功能。11. 如果选择聊天,则发送信息至相应好友;如果选择退出系统,则退出系统;如果选择查询好友等其他功能,则发送相应信息到服务器。12. 服务器响应并返回执行情况。3.2 总体设计3.2.1 处理流程注册/登录132678910经网络送服务器程序服务器经网络送来回答26322730283129334544找48友34组36p2p38组42组46友50友19友12找13组16p2p17组18组11能选择用户在线面板373943454749543521友24p2p22组20组23p2p25组14p2p1540友41友图3-1 系统数据流程图下面对各模块(以数字表示)进行功能说明:1、 读入并确定(登录/注册):它是一个事务处理中心,若是注册则转入2 ,登录则转入5。2、 读入注册资料:读取所输入的用户资料,并将数据送3。3、 检验输入资料:检验输入的用户资料,初步检查输入是否有误,它是一个事务处理中心,有误则转2再次读入,检查无误则将数据送4。4、 执行数据库操作:执行sql insert语句,添加用户注册资料,将有关执行结果的数据送5。5、 输出注册结果: 弹出对话框显示注册结果6、 读入qq号和密码: 读取所输入的qq号和密码,并将数据送7。7、 检验输入资料: 检验输入的qq号和密码,初步检查输入是否有误,它是一个事务处理中心,有误则转6再次读入,检查无误则将数据送8。8、 准备服务器数据: 准备需发送到服务器的数据qq号和密码,将准备好的数据送9。9、 准备网络数据包: 将数据准备/加密成网络传输数据包。10、 网络数据发送: 将数据包经网络发送到服务器程序, 它是程序与网络的接口。11、 读入并确定(聊天/提醒/查询好友/删除好友/删除组/更新组/添加组): 它是一个事务处理中心,若是聊天则转入12,提醒则转入14,查询好友转入16,删除好友转入18,删除组转入20,更新组转入22,添加组转入24。12、 接受/发送聊天信息: 读取网络送来的或所输入的聊天信息,并将数据送13。13、 显示聊天信息: 在聊天窗口中显示聊天内容。14、 读取提醒用户的相关信息: 读取某上线用户的qq号和昵称,并将数据送1515、 显示提醒: 显示信息提醒用户某好友上线16、 读入查询好友的相关信息:读取所输入的查询好友的相关信息,并将数据送17。17、 准备服务器数据:准备需要发送到服务器的数据查询好友的相关信息,将准备好的数据送9。18、 读入删除好友的qq号:读取所输入的删除好友的qq号,并将数据送19。19、 准备服务器数据:准备需要发送到服务器的数据删除好友的qq号,将准备好的数据送9。20、 读入要删除组的名称:读取所输入的要删除组的名称,并将数据送21。21、 准备服务器数据:准备需要发送到服务器的数据要删除组的名称,将准备好的数据送9。22、 读入要更新组的名称及重命名的名称:读取所选定组的名称和所输入的重命名的名称,并将数据送23。23、 准备服务器数据:准备需要发送到服务器的数据组的新旧名称,将准备好的数据送9。24、 读入要添加的组的名称:读取所输入的添加组的名称,并将数据送25。25、 准备服务器数据:准备需要发送到服务器的数据要添加组的名称,将准备好的数据送9。26、 网络数据接受:接受由服务器程序经网络传送到客户机的数据包, 它是程序与网络的接口。27、 解开/判断:解开26 所接受的数据包,并判断数据是登录数据/在线好友数据/好友列表数据/添加好友数据/查询好友数据/删除好友数据/删除组数据/更新组数据/添加组数据,它是一事务处理中心,分别将数据送到28。28、 登录成功?由返回的数据判断登录是否成功,它是一事务处理中心,若登录成功则转到29、30、31、33,不成功则转到1。29、 准备服务器数据:准备需要发送到服务器的数据获取用户好友列表,将准备好的数据送9。30、 准备服务器数据:准备需要发送到服务器的数据获取在线好友列表,将准备好的数据送9。31、 读取好友列表:从本地相应文件中读取好友列表并判断每一好友的状态。32、 在用户在线面板显示好友:根据各好友状态在该用户在线面板上显示好友列表。33、 发送提醒:发送信息提醒在线好友该用户上线。34、 读取好友列表:读取服务器发送过来的好友列表信息,并将数据送35。35、 保存好友列表:将服务器发送过来的好友列表保存至本地相应文件。36、 读取在线好友列表:读取服务器发送过来的在线好友列表信息,并将数据送37。37、 保存好友列表:将服务器发送过来的在线好友列表保存至本地相应文件。38、 读取查询好友结果:读取服务器发送过来的查询结果。并将数据送39。39、 显示查询好友结果:在相应的窗体中显示查询结果,转到40。40、 读取选定的好友信息:读取用户选定的要添加的好友qq号和呢称,并将数据送41。41、 准备服务器数据:准备需要发送到服务器的数据要添加的好友qq号和呢称,将准备好的数据送9。42、 读取添加好友结果:读取服务器发送过来的添加好友结果,并将数据送43。43、 显示添加好友结果:弹出对话框显示添加好友结果。44、 读取删除好友结果:读取服务器发送过来的删除好友结果,并将数据送45。45、 显示删除好友结果:弹出对话框显示删除好友结果。46、 读取删除组结果:读取服务器发送过来的删除组结果,并将数据送45。47、 显示删除组结果:弹出对话框显示删除组结果。48、 读取更新组结果:读取服务器发送过来的更新组结果,并将数据送45。49、 显示更新组结果:显示更新组后的结果。50、 读取添加组结果:读取服务器发送过来的添加组结果,并将数据送45。51、 显示添加组结果:弹出对话框显示添加组结果。3.2.2 功能模块仿qq聊天软件系统主要分为两个功能模块:服务器端和客户端。1、 服务器端。服务器端的作用是从数据库中获取用户信息并向客户端服务,管理员可以开启关闭服务器,并对服务器进行配置。服务器端连接数据库生成用户好友列表服务器配置信息接受与发送在线好友记录操作登录验证开启服务暂停服务关闭服务查询好友删除好友添加好友数据处理添加分组更新分组删除分组图3-2 服务器模块图服务器开启服务后,随时侦听指定端口是否有客户端发送过来的信息,根据相应的信息与数据库交互进行数据的处理。2、 客户端。用户安装客户端软件后,可以通过登录界面登录系统,新用户可以注册后登录,登录后与在线好友进行实时聊天,查询、添加、删除好友,更新、删除、添加组。客户端服务登 录注 册聊天退 出删除好友添加分组更新分组删除分组功能选择添加好友查询好友图3-3 客户端模块图3.3 详细设计1、 开启服务程序代码:startserver;启动条件:点击开启服务按钮;功能:开启服务。准备输入服务器ip地址验证数据合法性开启服务数据合法图3-4 开启服务关键代码:public bool startserver()tryqtcplistener = new tcplistener(qseripendpoint);qtcplistener.start();qserth = new thread(new threadstart(qqservering);serverrun = true;qserth.start();return (true);catch return (false);2、 暂停服务程序代码:stopserver;启动条件:点击停止服务按钮;功能:暂停服务。准备暂停服务点击停止服务按钮图3-4 暂停服务关键代码:public bool stopserver()tryserverrun = false;qtcplistener.stop();qserth.abort();return (true);catchreturn (false);3、 服务器配置程序代码:qsaveconfigserver;启动条件:点击服务器配置按钮;功能:配置服务器。准备输入服务器信息验证数据合法性保存数据合法图3-5配置服务器关键代码:public class qsaveconfigserverpublic static bool saveconfigserver(string ipadd, string port)trystringbuilder str = new stringbuilder();string configfileurl = config/ipconfig.dat;str.append(?xmlversion=1.0encoding=”utf-8”?”);str.append( + ipadd + );str.append( + port + );str.append();streamwriter save = new streamwriter(configfileurl);save.write(str.tostring();save.close();return (true);catchreturn (false);public static bool saveconfigdate(string ip, string database, string uid, string pwd)trystringbuilder str = new stringbuilder();string fileurl = config/dataconfig.dat;str.append(?xmlversion=1.0encoding=”utf-8”?”);str.append( + ip + );str.append( + database + );str.append( + uid + );str.append( + pwd + );str.append();streamwriter save = new streamwriter(fileurl);save.write(str.tostring();save.close();return (true);catchreturn (false); 4、 登录程序代码:login;启动条件:点击登录按钮;功能:登录。准备输入qq号和密码验证数据合法性发送登录信息之服务器数据合法进入用户界面加载好友列表图3-6 登录关键代码:客户端: public static bool qlogin(string uid, string pwd)string serinffile = serinfserinf.dat;stringstrip=getserinf.readxmlnode(serinffile,/root/server/ip);stringstrport=getserinf.readxmlnode(serinffile,”/root/server/port”);int port = int.parse(strport);tcpclient tcpclnt = new tcpclient();tcpclnt.connect(strip, port);stream stm = tcpclnt.getstream();utf8encoding sendmsg = new utf8encoding();byte arrysendmsg = sendmsg.getbytes(1; + uid + ; + pwd);stm.write(arrysendmsg, 0, arrysendmsg.length);byte judge = new byte1;stm.read(judge, 0, 1);string req = system.text.encoding.utf8.getstring(judge);stm.close();tcpclnt.close();if (req.trim() = 1)return (true);elsereturn (false);服务器:public static bool quserlogin(string uid, string pwd)if (uid = -1 | pwd = -1)return (false);elsestring sql = string.format(select * from userinf where cqqnum=0 and vcquserpwd=1, uid, pwd);sqlconnection conn = sqlconnectiontest.getconnection();if (conn != null)conn.open();sqlcommand com = new sqlcommand(sql, conn);sqldatareader dr;dr = com.executereader();if (dr.read()com.dispose();conn.close();return (true);elsecom.dispose();conn.close();return (false);elsereturn (false);5、 聊天程序代码:messagesend;启动条件:双击好友;功能:聊天。准备输入聊天信息发送信息图3-7 聊天关键代码:private void messagesend() try string toipnumber = ; checkoutnum nan = new checkoutnum(towho); this.toipname = nan.qqname; this.msg = msg; toipnumber = nan.qqnumber; xmldatadocument xml = new xmldatadocument(); xml.load(online.dat); xmlnode root = xml.selectsinglenode(root); for (int i = 0; i root.childnodes.count; i+) if (root.childnodesi.childnodes0.innertext.trim() = toipnumber.trim() this.ipendpoint = root.childnodesi.childnodes1.innertext.trim(); break; checkoutippoint iep = new checkoutippoint(ipendpoint); tcpclient send = new tcpclient(); send.connect(iep.ipadd, iep.port); stream stm = send.getstream(); utf8encoding asen = new utf8encoding(); byte ba = asen.getbytes(2; + sharedate.thisuser.trim() + ; + msg);/参数格式为(标识;原用户消息内容) stm.write(ba, 0, ba.length); send.close(); result = true; catch result = false; 6、 查询好友程序代码:queryfriend;启动条件:点击查询好友按钮;功能:查询好友准备输入要查的好友信息发送信息至服务器显示查询结果图3-9 查询好友关键代码:客户端:/ / 向服务器发送请求!查询好友/ / 用户号码/ 呢称/ 添加结果public string qureyfriend(string usernumber, string username)string serinffile = serinfserinf.dat;string strip = getserinf.readxmlnode(serinffile, /root/server/ip);string strport = getserinf.readxmlnode(serinffile, /root/server/port);int port = int.parse(strport);tcpclient tcpclnt = new tcpclient();tcpclnt.connect(strip, port);stream stm = tcpclnt.getstream();utf8encoding sendmsg = new utf8encoding();byte arrysendmsg = sendmsg.getbytes(3; + usernumber + ; + username);stm.write(arrysendmsg, 0, arrysendmsg.length);byte judge = new byte1;stm.read(judge, 0, 1);string req = system.text.encoding.utf8.getstring(judge);stm.close();tcpclnt.close();switch (req)case -1:return (sorry!要查询的好友不存在!);case 00:return (恭喜!查找好友成功!请刷新);default:return (未知错误!);服务器:/ / 通过用户名查询用户/ / 需要查询的用户名/ public static dataset selectuserbyname(string name)dataset ds = new dataset();sqlconnection con = sqlconnectiontest.getconnection();con.open();sqldataadapter da = new sqldataadapter(selectuserbyname, con);da.selectcommand.commandtype = commandtype.storedprocedure;sqlparameter username =da.selectcommand.parameters.add(username, sqldbtype.char, 10);username.direction = parameterdirection.input;username.value = name;da.fill(ds);da.dispose();con.close();return (ds);/ / 通过用户号码查询用户/ / 需要查询的用户号码/ public static dataset selectuserbynum(string num)dataset ds = new dataset();sqlconnection con = sqlconnectiontest.getconnection();con.open();sqldataadapter da = new sqldataadapter(selectuserbynum, con);da.selectcommand.commandtype = commandtype.storedprocedure;sqlparameter usernum = da.selectcommand.parameters.add(usernum, sqldbtype.char, 8);usernum.direction = parameterdirection.input;usernum.value = num;da.fill(ds);da.dispose();con.close();return (ds);/ / 生成查询好友结果xml文件/ / 需要生成列表的用户名/ 返回生成的文件路径,-1意味着生成文件失败public string qureyfriendxml(string owner, string qureynum, string qureyname)trystring xmlurl = temp+owner.trim() + qurey.xml;if (!file.exists(xmlurl)file.create(xmlurl).close();stringbuilder add = new stringbuilder();streamwriter str = new streamwriter(xmlurl);add.append();add.append();str.write(add.tostring();str.close();xmldatadocument xmldata = new xmldatadocument();xmldata.load(xmlurl);xmlnode root = xmldata.selectsinglenode(root);if (qureynum = & qureyname = )qureydata = opdate.getalluser();elseif (qureynum = )qureydata = opdate.selectuserbyname(qureyname);elsequreydata = opdate.selectuserbynum(qureynum);for (int i = 0; i qureydata.tables0.rows.count; i+) xmlelement qurey = xmldata.createelement(qurey);xmlelement qqnumber = xmldata.createelement(qqnumber);xmlelement qqname = xmldata.createelement(qqname);qqnumber.innertext=qureydata.tables0.rowsicqqnum.tostring().trim();qqname.innertext=qureydata.tables0.rowsicusername.tostring().trim();qurey.appendchild(qqnumber);qurey.appendchild(qqname);root.appendchild(qurey);xmldata.save(xmlurl); return (xmlurl);catchreturn (-1);7、 添加好友程序代码:addfriend;启动条件:点击添加好友按钮;功能:添加好友准备发送信息至服务器添加好友选定要添加的好友图3-10 添加好友关键代码:客户端:/ / 向服务器发送请求!添加好友/ / 好友拥有者/ 好友号码/ 添加结果public static string addfriend(string owner, string friend,string groupname)string serinffile = serinfserinf.dat;string strip = getserinf.readxmlnode(serinffile, /root/server/ip);string strport = getserinf.readxmlnode(serinffile, /root/server/port);int port = int.parse(strport);tcpclient tcpclnt = new tcpclient();tcpclnt.connect(strip, port);stream stm = tcpclnt.getstream();utf8encoding asen = new utf8encoding();byte ba = asen.getbytes(4; + owner + ; + friend+;+groupname);stm.write(ba, 0, ba.length);byte bb = new byte2;int k = stm.read(bb, 0, 2);string req = system.text.encoding.utf8.getstring(bb);stm.close();tcpclnt.close();switch (req)case 00:return (恭喜!添加好友成功!请刷新);case 10:return (对不起!该好友在你的好友列表中!);default:return (未知错误!);服务器:/ / 添加好友/ / 该好友拥有者号码/ 需要添加的好友/ 返回添加结果public static string addfriend(string ow, string fnumber, string gname)sqlconnection con = sqlconnectiontest.getconnection();con.open();sqlcommand cmd = new sqlcommand(addfriend, con);cmd.commandtype = commandtype.storedprocedure;sqlparameter owner = cmd.parameters.add(owner, sqldbtype.char, 8);sqlparameter friendnumber = cmd.parameters.add(friendnumber, sqldbtype.char, 8);sqlparameter groupname = cmd.parameters.add(groupname, sqldbtype.char,10);sqlparameter result = cmd.parameters.add(result, sqldbtype.int);owner.direction = parameterdirection.input;friendnumber.direction = parameterdirection.input;groupname.direction = parameterdirection.input;result.direction = parameterdirection.output;owner.value = ow;friendnumber.value = fnumber;groupname.value = gname;cmd.executenonquery();con.close();return (result.value.tostring();8、 删除好友程序代码:delfriend;启动条件:点击删除好友按钮;功能:删除好友。准备发送信息至服务器删除好友选定要删除的好友图3-11 删除好友关键代码:客户端:/ / 向服务器发送请求!删除好友/ / 好友拥有者/ 好友号码/ 删除结果public static string delfriend(string owner, string friend)string serinffile = serinfserinf.dat;string strip = getserinf.readxmlnode(serinffile, /root/server/ip);string strport = getserinf.readxmlnode(serinffile, /root/server/port);int port = int.parse(strport);tcpclient tcpclnt = new tcpclient();tcpclnt.connect(strip, port);stream stm = tcpclnt.getstream();utf8encoding asen = new utf8encoding();byte ba = asen.getbytes(7; + owner + ; + friend);stm.write(ba, 0, ba.length);byte bb = new byte1;int k = stm.read(bb, 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅游补充协议书
- 汽车工程原理与维修技术试题集解析
- 进口产品合作合同协议
- 清工劳务协议书
- 永大税务协议书
- 车辆转让协议和转让合同
- 轮值董事协议书范本
- 配电柜楼层使用协议合同
- 车辆运输协议合同书
- 转让定制衣柜合同协议
- 大学生学风建设问卷调查表全
- 住院精神疾病患者自杀风险护理(2023版团标)
- 高血压危象护理教学查房
- 脚手架工程安全管理风险辨识及防范措施
- DB15-T 3225-2023 焦炉煤气制LNG单位产品能源消耗限额
- 股骨颈骨折课件
- MRI常见伪影和解决方法课件
- 玩转计算机网络-计算机网络原理智慧树知到课后章节答案2023年下青岛大学
- 建标 144-2010 老年养护院建设标准
- 医疗设备强检计量目录(参考)
- 汽车配件名称大全全
评论
0/150
提交评论