网络聊天室系统1_第1页
网络聊天室系统1_第2页
网络聊天室系统1_第3页
网络聊天室系统1_第4页
网络聊天室系统1_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、项目题目:网络聊天室评分项得分技术(40 分)ServletJSPELFilterListenerTagJSTLData SourceJava MailEJB需求设计文档(8分)注释说明(8分)一.项目规划:开发环境:NetBeans & MySQL开发语言:java,SQL一需求分析:伴随的网络的普及,网络聊天室成为群众网络生活的一部分,各 种类型的聊天室为大众学习,生活,工作服务。本聊天室系统专门针对大学生中对 J2EE编程有兴趣的同学提供一个可以互相交流的平台,分享经验和知识。结构化分析:该程序分成4个模块及分工:数据库建立和链接模一用户登录和注册模块一聊天室模管理员功能模块一一数据库建

2、立:数据库连接代码:用户登录界面和管理员登录选项连接:注册界面:聊天室3个框体:全体3人共同完成管理员删除功能:在线用户分页显示:文档制作:系统完善:数据库建立和链接模块:需求分析:创建程序所需的数据库,2个表的建立及链接数据库的java文件编写, 要求能够将各模块有关的数据操作行为所造成的数据变更及时准确的提交到数据库并 改变。复杂度分析:多表建立,连接,查询功能,连接MySQL数据库。可行性分析:使用powerdesigner建立合适的数据库,上网查找连接MySQL的链 接代码。用户登录和注册模块:需求分析:要求创建简单明了的登陆界面,包括普通用户的账号密码输入框,管 理员特殊登录选项,找

3、回密码,普通用户注册选项以及相应的注册界面。同时在用户登 录及注册时,能够将用户的输入信息准确的链接到数据库中,对数据进行添加,修改和 比较。当管理员登录后自动连接至管理员模块界面。复杂度分析:界面创建及点击后的界面转换,登录与注册时连接数据库后的数据 对比和添加。可行性分析:使用JSP编程实现界面及转换,利用数据库连接模块对数据进行 比较和添加。聊天室模块:需求分析:本程序的主体部分,要求建立3个分框体:聊天信息框,在线成员框 和用户聊天信息输入框形成主窗体。3个框体中要求聊天信息框体按照时间顺序显示所 有用户的聊天信息并声明是否是私人聊天信息,在线成员框体能够及时准确的表现在线 成员的名字

4、和在线总人数,聊天信息输入框体要求除信息输入栏外还要有动作,表情选 项,并在输入栏下方显示当前时间,并将信息时间存放入数据库相应的表中复杂度分析:3部分框体实现,聊天信息的保存,信息输入框与聊天信息框显示 的链接。可行性分析:JSP实现3部分框体及框体信息的链接,聊天信息保存到XML文件 中,聊天时间存放入charroom表中。管理员功能模块:需求分析:要求当管理员登陆后进入高级管理界面,显示所有用户的信息以分页形式 显示,并允许对用户进行删除操作,同时改变数据库中的数据信息。复杂度分析:高级界面的实现及用户信息的分页显示,连接数据库并操作数据库数据。可行性分析:JSP实现界面,标签Tag实现

5、分页显示及数据库的链接。系统总体模块模块名文件名功能描述数据库建立和链接模块BaseConnection.java链接和数据查询更新操 作用户登录和注册模块login.jsp用户登录界面Check.jsp用户登录后台处理Search.jsp密码找回界面regist.jsp用户注册界面SecureFilter.java登录过滤Check_login.java检查登录注册操作loginCheckBean.java封装登录功能的JavaBeanReceiveMail.java接收用户密码SendMail.java发送用户密码聊天室模块ChatRoom.jsp聊天室界面,信息输入界 面Contant.

6、jsp聊天内容界面leave.jsp用户退出处理online.jsp显示在线用户列表UserInfo.java在线用户后台处理UserListener.java监听用户在线情况MessageAction.java聊天内容后台处理StringUtils.java修改字符编码管理员功能模块manage.jsp高级管理界面ManageTag.java分页实现及用户删除数据库设计ER图player nicknamplayer nicknam巳 yarKhar(50) password varchar(50)数据库物理结构在线用户列表onlineusernickNameVARCHAR(50)主码用户名l

7、oginTim eVARCHAR(50)Not Null登录时间注册用户列表playernicknameVARCHAR(50)外码用户名passwordVARCHAR(50)Not Null用户密码MySQL建表SQL脚本(包含索引)/*=*/ /* DBMS name:MySQL 4.0*/* Created on:2010-1-10 14:13:05*/*=*/ drop index Relationship_1_FK on onlineuser; drop table if exists onlineuser; drop table if exists player; /*=*/ /*

8、Table: onlineuser*/*=*/ create table onlineuser ( nicknamevarchar(50),logintimevarchar(50) type = InnoDB; /*=*/ /* Index: Relationship_1_FK*/*=*/ create index Relationship_1_FK on onlineuser ( nickname ); /*=*/ /* Table: player*/*=*/ create table player ( nicknamevarchar(50)not null,passwordvarchar(

9、50),primary key (nickname) ) type = InnoDB; alter table onlineuser add constraint FK_Relationship_1 foreign key (nickname) references player (nickname) on delete restrict on update restrict;设计:a)数据库建立和连接模块实现i实现功能:程序对应的数据库及2个表的创建,包括,在线用户表和登陆用户表。在 线用户表中的数据来自登录用户表中。ii.逻辑设计运用的组件以及组件之间的关系:运用DATA SOURCE技术

10、实现数据库的连接b)1. 0层数据流图user4user4c)子模块设计1,用户登录和注册模块实现1.1逻辑设计运用的组件以及组件之间的关系:用servlet和JSP组件技术实现用户的登陆功能。loginCheckBean在用户登录时,运用session组件保存用户的登陆信息,并用loginCheckBean的javabean组件封装登录功能。Filter组件用来阻止用户的非法登录,如果用户企图不登录而直接进入聊天室 错误登录方式等都将通过filter拦截。运用javamail技术实现用户的密码找回功能。1.2界面设计用户登录界面应包含用户名和密码输入框,找回密码按钮,注册按钮,重置 按 钮,

11、登录按钮。各个按钮分别按内容实现各自的功能。聊天室模块实现2.1逻辑设计运用的组件以及组件之间的关系:运用servlet和JSP组件技术实现聊天的的信息显示功能和基本对话功能。运用EL组件技术显示用户登录时间。运用JSTL组件技术实现在线人员列表的显示和普通用户的删除。运用listener监听用户的登录情况(用户是否在线)。2.2界面设计聊天系统界面,应包含在线人员列表,信息发送框,信息发送按钮,信息发 送 对象框,悄悄话选项按钮,管理员实现管理功能的高级选项按钮,信息显 示 框。管理员功能模块实现3.1逻辑设计运用的组件以及组件之间的关系:运用servlet和JSP技术实现管理员的管理功能。

12、管理员可以查看在线人员列表,在此处运用TAG组件技术实现在线人员的分 页 显示。3.2界面设计该页面应包含管理员实现管理的删除普通用户功能,显示所有注册用户列表,四.系统实现代码说明1数据库连接模块数据库连接:BaseConnection.javapublic BaseConnection() throws Exceptiontry initCtx = new InitialContext();DataSource ds=(DataSource)initCtx.Lookup(java:comp/env/jdbc/mysql/chatroom);conn = ds.getConnection()

13、;stmt = conn.createStatement(); catch (Exception e) e.printStackTrace();/执行静态SQL查询语句并返回它所生成结果的对象public ResultSet executeQuery(String sql) throws SQLException rs = null;try rs = stmt.executeQuery(sql);catch (SQLException ex) System.out.println(Error occured when query database: + ex); throw ex;return

14、 rs;执行静态SQL更新语句并返回影响数据条数public int executeUpdate(String sql) throws SQLExceptiontry conn.setAutoCommit(false);int re = stmt.executeUpdate(sql);mit();return re;catch (SQLException e) conn.rollback();System.out.println(Error occured when update database: + e); throw e; 数据库关闭操作public boolean closeDB()

15、throws Exceptiontry if (this.rs != null)rs.close();if (this.stmt != null)this.stmt.close();if (this.ps != null)this.ps.close();if (this.conn != null) conn.close();if (this.initCtx != null)initCtx.close();return true;catch (SQLException e) System.out.println(Error occured when close database: + e); t

16、hrow e;2用户登录及注册模块使用的技术组件:JSP2.1登录注册界面实现:login.jsp使用的技术组件:JSP代码设计框图如图所示:聊天用户注册/登录昵称:密珂口管理员登录找回密码a .hPfSbaich.jsp-x.hg找回密码巳口口口七 ./检测是否注册成功 注册成功 /检测用户名是否正确用户名或密码错误.请重新输入%2.2如果是注册,进入注册页面regist.jsp2.2.1注册框图如图所示:跳转代码:Check_login.Javaif(login.equals(regist)request.getRequestDispatcher(7regist.jsp).forward(

17、request,response);用户注册昵称:密码:| 口311暗12.2.2从 request中检查是否用户名已经存在, 用户名已被使用 后台处理:Check_login.Javaif(login.equals()try BaseConnection bc=new BaseConnection();String name=request.getParameter(nickName);String query =select * from player;rs=bc.executeQuery(query);while(rs.next()if(rs.getString(1).equals(na

18、me)request.setAttribute(check”,false);request.getRequestDispatcher(/regist.jsp).forward(request,response);String pass=request.getParameter(userPassword);query =insert into player(nickname,password) values(+name+,+pass+); bc.executeUpdate(query);bc.closeDB();catch (Exception e) e.printStackTrace(); o

19、ut.print(regist failed); request.setAttribute(login”, true);request.getRequestDispatcher(/login.jsp).forward(request,response);2.3找回密码界面实现Search.jsp2.3.1实现框图如图所示:跳转代码:login.jsp找回密码 发送邮件用户昵称: 匡15接收,站2茴.2发送代码:SendMail.Javaprotected void processRequest(HttpServletRequest request, HttpServletResponse re

20、sponse)throws ServletException, lOException response.setContentType(text/html;charset=UTF-8”);PrintWriter out = response.getWriter();String query = select * from player;String host= ;String name = request.getParameter(username);String text=No such person;ResultSet rs=null;try BaseConnection bc=new B

21、aseConnection();rs=bc.executeQuery(query);while(rs.next()if(rs.getString(nickName).equals(name)text=rs.getString(password);break;catch(Exception e)e.printStackTrace();tryProperties props = new Properties();props.put(mail.smtp.host”, host); 设置协议所使用的 hostSession session = Session.getInstance(props,nul

22、l);/获得 Session 对象MimeMessage message = new MimeMessage(session); 获得message对象mailmessage.setFrom(newInternetAddress( HYPERLINK mailto:Rua Rua); message.setRecipient(Message.RecipientType.TO,newInternetAddress( HYPERLINK mailto:Ruage Ruage); message.setSubject(Search password);message.setSentDate(new

23、Date();message.setText(text);Transport.send(message);request.setAttribute(send”, true);request.getRequestDispatcher(Search.jsp).forward(request, response); catch(MessagingException m)m.printStackTrace(); finally out.close();2.3.3 接收邮件 ReceiveMail.javaprotected void processRequest(HttpServletRequest

24、request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=UTF-8”);PrintWriter out = response.getWriter();String host = ;String protocol =pop3;String user=Ruage;String password = ruage;out.println();out.println();out.println(Servlet ReceiveM

25、ail);out.println();out.println()trySession ses = Session.getDefaultInstance(System.getProperties(),null);Store store = ses.getStore(protocol); 设置protocol,获得store对象 store.connect(host,user,password);Folder folder = store.getFolder(INBOX);folder.open(Folder.READ_WRITE);Message arraymessage = folder.ge

26、tMessages();for(int i=0; iarraymessage.length; i+) MimeMessage mm = (MimeMessage)arraymessagei;int number = mm.getMessageNumber();String subject = mm.getSubject();Date date = mm.getReceivedDate();Address address = mm.getFrom();String from-;for(int j=0;jaddress.length;j+) from+=addressj.toString();St

27、ring content - mm.getContent().toString();/Object 转 String out.println(*); out.println(Message No:+number+ );out.println(Subject:+subject+”);out.println(Received Date:+date+);out.println(From:+from+”);out.println(Content:+content+”);out.print( 返回 );out.println();out.println();Message No:3Subject:Sea

28、rch passwordReceived Date mullF顺瞰岫.贰u a.co m检查是否是登陆,如果是是登陆是不是管理员登陆if(login.e业al#log!n)C o iiteiit:666666返回if(owner!=null) /owner是取得的判断是否是管理员的checkbox的值 String name=request.getParameter(nickName);返回String pass=request.getParameter(userPassword); if(name.equals(admin)&pass.equals(admin) HttpSession se

29、ssion = request.getSession(); session.setAttribute(checkFilter”, true);request.getRequestDispatcher(7manage.jsp).forward(request,response);elserequest.setAttribute(checklogin”,false);request.getRequestDispatcher(/login.jsp).forward(request,response); elserequest.getRequestDispatcher(/check.jsp).forw

30、ard(request,response);2.4.2如果是用户登录调用check.jsp检查用户名密码是否正确,在check.jsp将调用 javaBeanjsp:setProperty name=check property=username value=/jsp:setProperty name=check property=password value=/ JavaBean 实现 loginCheckBean.javapublic class loginCheckBean private String username;private String password;public bo

31、olean check_login() 从数据库取出数据boolean temp=false;ResultSet rs = null;try BaseConnection bc=new BaseConnection();String query =select * from player;rs=bc.executeQuery(query);while(rs.next()if(rs.getString(1).equals(username)&rs.getString(2).equals(password)temp=true;break;bc.closeDB();catch (Exception

32、e) e.printStackTrace(); return temp;public int add() /向在线用户数据表中插入数据int temp=0;java.util.Date date=new java.util.Date();try BaseConnection bc=new BaseConnection();String query =INSERT INTO onlineuser ( nickName, loginTime) VALUES (,+username+,,+date+,);temp=bc.executeUpdate(query);bc.closeDB();catch

33、(Exception e) e.printStackTrace(); return temp;2.5登录过滤:SecureFilter.java (主要代码)这是一个过滤器,如果用户未登录,直接通过网址输入聊天网址将不会通过。使用技术组件为filterpublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws lOException, ServletException HttpServletRequest hRequest=(HttpServletRequest)r

34、equest;HttpSession session = hRequest.getSession();if(session.getAttribute(checkFilter)!=null)if(!(session.getAttribute(checkFilter).equals(true)request.getRequestDispatcher(7login.jsp).forward(request, response); 3.聊天室模块 3.1聊天室界面,信息输入界面chatroom.jsp / 用于提供像素 对像素处理 window.setInterval(showContent();,1

35、000);var sysBBS=欢迎光临开心聊天室,请遵守聊天室规则,不要使 用不文明用语。;function showContent()varloader1=newnet.AjaxRequest(MessagesAction?action=getMessages&nocache=+newDate().getTime(),deal_content,onerror,GET); function deal_content()var returnValue=this.req.responseText; /获取 Ajax 处理页的返回值var h=returnValue.replace(/s/g,);

36、/去除字符串中的 Unicode 空白符content.innerHTML=sysBBS+returnValue+; /控制是否滚屏 function checkScrollScreen()if(!form1.scrollScreen.checked)document.getElementById(content).style.overflow=scroll;elsedocument.getElementById(content).style.overflow=hidden;document.getElementById(content).scrollTop =document.getElem

37、entById(content).scrollHeight*2; window.onload=function()checkScrollScreen();/当页面载入后控制是否滚屏showContent();/当页面载入后显示聊天内容 / /聊天信息输入栏 function send() /验证聊天信息并发送if(form1.to.value=) alert(请选择聊天对象! );return false; if(form1.content1.value=)alert(发送信息不可以为空! );form1.content1.focus();return false; if(form1.isPr

38、ivate.checked) isPrivate=true; elseisPrivate=false;Varparam=from=+form1.from.value+&face=+form1.face.value+&color=+form1.color.value+&to=+form1 .to.value+&content=+form1.content1.value+&isPrivate=+isPrivate;Var loader=new net. AjaxRequest(MessagesAction?action=sendMessage,deal_send,onerror,POST,para

39、m);function deal_send()content.innerHTML=sys BBS+this.req.responseText+;if(form1.scrollScreen.checked)document.getElementById(content).scrollTop= document.getElementById(content).scrollHeight*2; form1.content1.value=;function Exit()window.location.href=leave.jsp;alert(欢迎您下次光临!);function set(selectPe

40、rson) / 自动添加聊天对象if(selectPerson!=)if(form1.isPrivate.checked & selectPerson=所有人)alert(请选择私聊对象!);elseform1.to.value=selectPerson;elsealert(请重新选择聊天对象!);function checkIsPrivate()if(form1.isPrivate.checked)if(form1.to.value=所有人|form1.to.value=)alert(请选择私聊对象!);form1.to.value=;window.onbeforeunload=functi

41、on()/当用户单击浏览器中的“关闭”按钮时,执行退出操作if(event.clientYdocument.body.scrollWidth)Exit();执行退出操作殴迎光临开慢聊天室,请豆守聊天室规则,.不要使用不文明用语。系统公告:Angel进入了聊天室,大家欢迎殴迎光临开慢聊天室,请豆守聊天室规则,.不要使用不文明用语。系统公告:Angel进入了聊天室,大家欢迎系统公告:Davie进入了聊天室,大家欢迎Davie 对 Angel 说:Hello,Angel.Angel 对所有人说:hello,everyone.I am new here.Davie 对 Angel 说:Angel,se

42、e you again.Davi e 对Davi e 对表暗微笑者 说:悄悄活 滚屏W字体颜色:默认颜色退出聊天室我们的开心聊天室 登录时间:Sun Jan 10 18:56:45 CST 20103.1.1导入在线用户:ChatRoom.jsp运用JSTL3.2显示在线用户online.jsp如上图红色框区域0)String username=;amount=vector.size();for(int i=0;i设置在线用户set函数在ChatRoom.jsp中实现a href=# onclick=set()后台处理:UserInfo.javapublic Vector getList()t

43、his.vector = new Vector(); /vector 是向量是该类属性String query = select nickName from onlineuser;ResultSet rs=null;try BaseConnection bc=new BaseConnection();rs=bc.executeQuery(query);while(rs.next()String ss=rs.getString(nickName);addUser(ss);catch(Exception e)e.printStackTrace();return vector;/增加用户public

44、 boolean addUser(String user) if (user != null) this.vector.add(user);return true;else return false;3.2.2监听是否有用户上下线UserListenerjavapublic class UserListener implements javax.servlet. HYPERLINK http:/http.HttpSessionBindingListener http.HttpSessionBindingListener private String user;private UserInfo

45、container = UserInfo.getInstance();public UserListener() user =;/设置在线监听人员public void setUser(String user) this.user = user;/获取在线监听public String getUser() return this.user;/当Session有对象加入时执行的方法public void valueBound(HttpSessionBindingEvent arg0) System.out.println(上线用户:+ this.user);/当Session有对象移除时执行的方

46、法public void valueUnbound(HttpSessionBindingEvent arg0) System.out.println(下线用户:+ this.user);if (user != ) (container.removeUser(user);3.3导入在线用户:ChatRoom.jsp 聊天内容 3.3.1显示聊天内容Content.jsp3.3.2后台处理聊天内容MessagesAction.java聊天内容放在xml文件中public void doPost(HttpServletRequest request, HttpServletResponse resp

47、onse)String action = request.getParameter(action);if (getMessages”.equals(action) /从 XML 文件中读取聊天信息this.getMessages(request, response); else if (sendMessage”.equals(action) / 发送聊天信息this.sendMessages(request, response); else if (loginRoom”.equals(action) / 登录时,写入系统公告this.loginRoom(request, response);/

48、读取保存聊天信息的XML文件public void getMessages(HttpServletRequest request,HttpServletResponse response) response.setContentType(text/html;charset=GBK);String fileURL = createFile(request, response); / 当文件不存在时创建该文件 /开始解析保存聊天内容的XML文件 /try SAXBuilder builder = new SAXBuilder();Document feedDoc = builder.build(f

49、ileURL);Element root = feedDoc.getRootElement();/ 获取根节点Element channel = root.getChild(messages);/获取 messages 节点Iterator items = channel.getChildren(message).iterator();/获取 message 节,点String messages =; /获取当前用户HttpSession session = request.getSession();String userName =;userName = session.getAttribu

50、te(username).toString();DateFormat df = DateFormat.getDateTimeInstance();while (items.hasNext() Element item = (Element) items.next(); try if (df.parse(sendTime).after(df.parse(session.getAttribute(loginTime).toString()| sendTime.equals(session.getAttribute(loginTime).toString() String from = item.g

51、etChildText(from);/ 获取发言人String face = item.getChildText(face);/ 获取表情String to = item.getChildText(to);/ 获取接收者String content = item.getChildText(content);/获取发言内容boolean isPrivate = Boolean.valueOf(item.getChildText(isPrivate);if (isPrivate) /获取私聊内容if (userName.equals(to) | userName.equals(from) mess

52、ages += 私人对话+from+ + face+ 对+ to+ 说:+ content+ + sendTime + ; else if (系统公告.equals(from) /获取系统公告信息messages +=系统公告:+ content+ + sendTime + ; else /获取普通发言信息messages += + from+ + face + 对 + to+ 说:+ content+ + sendTime + ; catch (Exception e) System.out.println( + e.getMessage();request.setAttribute(mes

53、sages, messages); /保存获取的聊天信息request.getRequestDispatcher(content.jsp).forward(request,response); catch (Exception e) e.printStackTrace(); /发送聊天信息 public void sendMessages(HttpServletRequest request,HttpServletResponse response)response.setContentType(text/html;charset=GBK);StringUtils su = new Strin

54、gUtils();Random random = new Random();String from = su.toUTF8(request.getParameter(from);/ 发言人String face = su.toUTF8(request.getParameter(face);/ 表情String to = su.toUTF8(request.getParameter(to);/ 接收者String color = request.getParameter(color);/ 字体颜色String content = su.toUTF8(request.getParameter(co

55、ntent);/ 发言内容String isPrivate = request.getParameter(isPrivate);/ 是否为悄悄话String sendTime = new Date().toLocaleString();/ 发言时间/*开始添加聊天信息/*开始添加聊天信息*/String fileURL = createFile(request, response); / 当文件不存在时创建该文件SAXBuilder builder = new SAXBuilder();Document feedDoc; try feedDoc = builder.build(fileURL)

56、;Element root = feedDoc.getRootElement();Element channel = root.getChild(messages);Element newNode = new Element(message);channel.addContent(newNode);/ 创建 messages 节点Element fromNode = new Element(HfromH).setText(from);newNode.addContent(fromNode);/ 添加发言人子节点Element faceNode = new Element(face).setTe

57、xt(face);newNode.addContent(faceNode);/ 添加表情子节点Element toNode = new Element(to).setText(to);newNode.addContent(toNode);/ 添加接收者子节点Element contentNode = new Element(HcontentH).setText(H + content + );newNode.addContent(contentNode);/ 添加聊天内容子节点/ System.out.println(发送的信息:+from+face+to+content);Element i

58、sPrivateNode = new Element(isPrivate).setText(isPrivate);newNode.addContent(isPrivateNode);/ 添加是否为悄悄话子节点request.getRequestDispatcher(MessagesAction?action=getMessages&nocache=+ random.nextInt(10000).forward(request, response);XMLOutputter xml = new XMLOutputter(Format.getPrettyFormat();xml.output(fe

59、edDoc, new FileOutputStream(fileURL); catch (Exception e) e.printStackTrace();/根据现在日期生成XML文件名,并判断该文件是否存在,如果不存在将创建该文件public String createFile(HttpServletRequest request,HttpServletResponse response) Date date = new Date();String newTime = new SimpleDateFormat(yyyyMMdd).format(date);String fileURL = r

60、equest.getRealPath(xml/ + newTime + .xml);File file = new File(fileURL);if (!file.exists() /判断文件是否存在,如果不存在,则创建该文件try file.createNewFile(); / 创建文件String dataStr = rn;dataStr = dataStr + rn;dataStr = dataStr + ;dataStr = dataStr + rn;byte content = dataStr.getBytes();FileOutputStream fout = new FileOu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论