基于net的聊天工具的设计与实现.docx_第1页
基于net的聊天工具的设计与实现.docx_第2页
基于net的聊天工具的设计与实现.docx_第3页
基于net的聊天工具的设计与实现.docx_第4页
基于net的聊天工具的设计与实现.docx_第5页
免费预览已结束,剩余32页可下载查看

下载本文档

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

文档简介

XXXXXX毕业设计摘 要作为除电视、报纸、广播之外的第四大媒体,互联网不仅成为人们获取新闻信息的主要来源,更成为了人们闲暇之余的一种休闲手段。随着互联网技术的发展,各种各样基于网络的应用也随之诞生,网络聊天工具便是其中的一种。本文采用Visual Studio 2008+SQL Server 2005开发环境,结合Win Forms、ADO.NET等多种技术,实现了一个类似QQ的网络聊天工具,并在WINDOWS平台上加以了实现。通过C#语言进行网络编程,通过公共的数据库交换各种信息,实现了人性化的界面设计与功能设计。软件经过测试,满足现代人们即时通信的需求,达到预期的设计效果,对网络聊天工具的人性化设计具有一定的现实意义,同时也为其他相关项目的设计提供了参考。关键词:聊天工具 C# 即时通信 数据库 人性化AbstractInternet is the fourth major media other than televisions, newspapers and broadcasting, acting not only as a major source of news information, it is also a means of recreation for people during their leisure. Along with the high-speed development of the Internet technology, various of applications which are based on network were born, one of them is online chat tool. This thesis develops an online chat tool which likes QQ and based on the integration of various technologies such as Win Forms, ADO.NET etchant based on the adoption of Visual Studio 2008+SQL Server 2005 development environment, and then implement it on WINDOWS platform. It used C # language for network programming, and exchange different information through common database for the implemention of the humanized UI design and function design. After going through the tests, this online chat tool can achieve the projected design purpose of instantaneous communication needs of people in modern times, it also poses certain realistic significance to the humanization of online chat tool and provides as a reference to the design of other relevant projects.Key words: chat tool、C#、instantaneous communication、database、humanization 目 录第一章 引言11.1 系统开发背景11.2 聊天软件的开发目标1第二章 开发环境与关键技术简介22.1 C#简介22.2 .NET Framework简介22.3 WinForms窗体设计技术32.4 C/S结构32.5 ADO.NET技术42.6 SQL Server 2005数据库简介4第三章 需求分析53.1 可行性研究53.2 用户需求53.3 性能需求53.4 系统功能需求6第四章 系统设计74.1 系统功能结构74.2 系统模块划分74.3 系统整体流程图8第五章 详细设计95.1 登录界面设计95.2 注册界面设计115.3 主界面设计145.4 查找/添加好友界面设计185.5 聊天界面设计235.6 个人设置界面设计285.7 系统消息界面设计29小结32致谢33参考文献3434第一章 引言1.1 系统开发背景当今社会已进入信息时代,信息是当今世界最重要的资源之一,它与物质及能源一起构成了三大能源支柱。信息高速公路是信息社会的基础设施,而互联网则是信息高速公路的重要组成部分。在互联网相当普及的今天,你们对网络的依赖越来越大,越来越离不开网络,网络聊天更是成为了人们的“家常便饭”。通过网络聊天工具,人们足不出户就可进行闲聊甚至工作会谈,极大地方便了人们的日常生活与工作需求。常用的网络聊天工具主要是QQ与MSN。MSN主要用于国际,而国内的主流网络聊天工具是QQ。QQ有着非常良好的操作界面,和强大的通信功能,集娱乐、生活和工作于一身。随着技术的进步,QQ不仅可以通过宽带网在PC上使用,通过手机也可以实现与好友、同事通信。而无论是QQ还是MSN,都存在一个很大的问题广告。每次登陆后时不时会弹出一些广告窗口,绝大多数网友都对此感觉厌烦。因此在本次论文的激励下,我决定设计一个类似QQ并且无垃圾信息的网络聊天工具,此外也希望通过本次论文能更好地学习与掌握网络软件编程知识。1.2 聊天软件的开发目标本论文的主要工作是设计一个类似QQ的网络即时聊天工具,主要是采用WinForms+ADO.NET技术实现。软件功能主要包括用户注册、用户登录、用户间聊天、查找/添加好友、个人设置等。客户端通过公共的数据库交换信息,消息的发送和读取都是通过操作数据库来完成的。在程序中采用定时扫描数据库的方式来查找未读消息。文章首先简介涉及的相关技术与基本知识,然后阐述本软件的功能,再具体分析软件各个模块的功能及具体实现方法。第二章 开发环境与关键技术简介2.1 C#简介C#(读作C Sharp)是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言, 是一种安全的、稳定的、简单的、优雅的,由C和C+衍生出来的面向对象的编程语言。它在继承C和C+强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的, 而且它是微软公司.NET windows网络框架的主角。C#最引人入胜的地方是它和Java的不同,而不是相似的地方:中间代码、命名空间中的申明、基本的数据类型、两个基本类、参数传递、与COM的集成、代理和反馈。2.2 .NET Framework简介.NET Framework是支持生成、运行下一代应用程序和XML Web Services的内部Windows组件,它简化了在高度分布式Internet环境中的应用程序开发,.NET Framework可实现的功能如下:l 提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。l 提供一个将软件部署和版本控制冲突最小化的代码执行环境。l 提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。l 提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。l 使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。l 按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。2.3 WinForms窗体设计技术WinForm是.Net开发平台中对Windows Form的一种称谓。.Net 为开发WinForm的应用程序提供了丰富的Class Library(类库)。这些WinFrom 类库支持RAD(快速应用程序开发),这些类库被封装在一个名称空间之中,这个名称空间就是System.Windows.Forms。在此名称空间中定义了许多类,在开发基于.Net的GUI应用程序的时候,就是通过继承和扩展这些类才使得我们的程序有着多样的用户界面。2.4 C/S结构C/S结构是当前数据库应用程序中极为流行的一种方式。尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。另外它的服务器端还可以将信息集中起来,任何客户机都可以通过访问服务器而获得所需的信息。Client/Server模型最终可归结为一种“请求/应答”关系。一个请求总是首先被客户发出,然后服务器总是被动地接收请求,返回客户需要的结果。在客户发出一个请求之前,服务进程一直处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答,如图2-1所示。图2-1 客户机服务器通信结构示图2.5 ADO.NET技术ADO.NET是一组用于和数据源进行交互的面向对象类库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来进行连接。 ADO.NET提供与数据源进行交互的相关的公共方法,但是对于不同的数据源采用一组不同的类库。这些类库称为Data Providers,并且通常是以与之交互的协议和数据源的类型来命名的。然而无论使用什么样的Data Provider,你将使用相似的对象与数据源进行交互。SqlConnection对象管理与数据源的连接。SqlCommand对象允许你与数据源交流并发送命令给它。为了对进行快速的只“向前”地读取数据,使用SqlDataReader。如果想使用断开数据,使用DataSet并实现能进行读取或者写入数据源的SqlDataAdapter。2.6 SQL Server 2005数据库简介SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序 。SQL Server 2005 数据引擎是本企业数据管理解决方案的核心。此外 SQL Server 2005 结合了分析、报表、集成和通知功能。这使您的企业可以构建和部署经济有效的 BI 解决方案,帮助您的团队通过记分卡、Dashboard、Web services 和移动设备将数据应用推向业务的各个领域。SQL Server 2005 通过在可伸缩性、数据集成、开发工具和强大的分析等方面的革新更好的确立了微软在BI领域的领导地位。SQL Server 2005 能够把关键的信息及时的传递到组织内员工的手中,从而实现了可伸缩的商业智能。从CEO 到信息工作者,员工可以快速的、容易的处理数据,以更快更好的做出决策。SQL Server 2005全面的集成、分析和报表功能使企业能够提高他们已有应用的价值,即便这些应用是在不同的平台上。 商业智能增强体现在以下几个方面: 端到端的集成BI平台 集成服务 分析服务 报表服务 Microsoft Office System的集成本网络聊天软件的开发环境主要使用SQL Server 2005的开发版。第三章 需求分析3.1 可行性研究本软件只做开发学习使用,所以暂且不考虑经济成本及盈利问题。开发所需要的平台已经搭建好,并做好了充分的前期准备工作,其次因为本程序的平台将基于WINDOWS,将要使用网络通信技术,而WINDOWS有完善成熟的网络通信接口,以及与C#开发环境的严密契合能力,加之相类似的更大规模的网络聊天工具产品也已有例在先,所以这个程序的开发在技术上是完全可行的。3.2 用户需求随着互联网的普及,网络聊天工具已经成为了人们日常生活中不可缺少的一部分。根据人们对聊天工具的需求,主要可以概括为以下几点:1、 操作简单方便、界面简洁美观;2、 能够注册新用户;3、 拥有熟悉的聊天界面;4、 能够查找/添加好友;5、 能够进行个人设置;6、 系统运行稳定、安全可靠。3.3 性能需求首先要求程序要完全可靠,可以应付各种由于系统问题产生的错误,比如初始网络失败等。要求提前设想到类似的尽可能多的可能发生的事件,做出相应的应对措施,并向用户提交简单易懂清晰明白的提示信息。程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,避免发生程序假死现象。开发文档要有好的易理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。要求程序对所运行之系统的硬件条件要求尽可能低,运行时内存占用尽可能小,响应速度要尽可能快。并且不发生内存泄漏之类影响系统运行的错误事件。并且要求易于维护及扩展。所以应该采用模块化开发,各个模块之间不要有太多的耦合,以免维护困难。3.4 系统功能需求这个程序要实现的功能如下:(1) 程序启动之后就能直接进入登陆界面,输入错误时会提示。(2) 登陆界面有注册新用户选项,点击进入注册界面。(3) 注册成功后会提示自动生成的帐号。(4) 登陆后进入主界面,用户可以添加好友,可以直接查找,也可以按条件查找,还可以查看所有用户。(5)当双击列表中某个用户头像的时候,要弹出聊天对话框,可以在其中编辑要发送的聊天信息,并进行发送。(6)聊天界面要人性化,下面是发送框,上面对方发来的上一条聊天记录。(7)可以修改自己的个人资料,也可以更换头像。第四章 系统设计4.1 系统功能结构基于C#的网络聊天软件用 户 注 册用 户 登 录好 友 列 表发 送 消 息接 收 消 息 查 找 好 友 添 加 好 友 删 除 好 友 个 人 设 置图4-1 系统功能结构4.2 系统模块划分登录模块:实现用户登录功能。在没有账号的情况下可以选择进入注册新用户界面。注册模块:实现注册新用户功能。注册信息包括必填基本资料与选填资料。主模块:实现列表功能。列表包括好友列表与陌生人列表。通过主界面可以进行聊天功能,也可以打开查找/添加好友功能与个人设置功能等。聊天模块:实现发送消息与接收消息功能。通过公共的数据库交换信息,消息的发送和读取都是通过操作数据库来完成的。在程序中采用定时扫描数据库的方式来查找未读消息。也能实现删除好友功能。查找/添加好友模块:实现查找好友功能与添加好友功能。主要方法有精确查找、按条件查找,与查看所有用户。个人设置模块:实现修改个人资料。更换头像模块:实现更换用户头像。系统消息模块:实现添加好友信息的读取。4.3 系统整体流程图该网络聊天工具系统整体流程图如图4-2所示:登录成功主界面聊天界面/个人设置界面/查找添加好友界面NYYNNY显示号码注册成功合法?输入检查注册登录验证输入登录数据已注册?用 户图4-2 系统整体流程图第五章 详细设计5.1 登录界面设计当用户运行程序时,首先进入的是登录界面,如图5-1所示:图5-1 登录界面如果没有账号,则单击“注册新用户”标签,可以打开注册界面;如果有已注册的账号,则在输入账号与密码后,点击“登录”按钮,可以打开主界面。当点击“登录”按钮时,则触发登录按钮事件,其处理流程图如图5-2所示:用 户输入登录数据扫描数据库中的Users表有该用户且密码正确?登录成功主界面YN图5-2 登录事件流程图其中登录按钮的代码实现如下:/ 登录按钮事件处理 private void btnLogin_Click(object sender, EventArgs e) bool error = false; / 标志在执行数据库操作的过程中是否出错 / 如果输入验证成功,就验证身份,并转到相应的窗体 if (ValidateInput() int num = 0; / 数据库操作结果 try / 查询用的sql语句 string sql = string.Format(SELECT COUNT(*) FROM Users WHERE Id=0 AND LoginPwd = 1, int.Parse(txtLoginId.Text.Trim(), txtLoginPwd.Text.Trim(); / 创建Command 对象 SqlCommand command = new SqlCommand(sql, DBHelper.connection); DBHelper.connection.Open(); / 打开数据库连接 num = Convert.ToInt32(command.ExecuteScalar(); catch (Exception ex) error = true; Console.WriteLine(ex.Message); finally DBHelper.connection.Close(); / 关闭数据库连接 if (!error & (num = 1) / 验证通过 / 设置登录的用户号码 UserHelper.loginId = int.Parse(txtLoginId.Text.Trim(); / 创建主窗体 MainForm mainForm = new MainForm(); mainForm.Show(); / 显示窗体 this.Visible = false; / 当前窗体不可见 else MessageBox.Show(输入的用户名或密码有误!, 登录提示, MessageBoxButtons.OK, MessageBoxIcon.Error); 5.2 注册界面设计当在登录界面点击“注册新用户”标签时,将打开注册界面,如图5-3所示:图5-3 注册界面其中基本资料为必填资料,详细资料为选填资料。在用户输入完资料后,点击“确认注册”按钮进行注册。其间会对相关的输入进行检查,如果输入不符合规范,则不允许注册,不会向数据库插入记录,并会提示错误原因。如果输入正确,则向数据库插入一条用户记录,在数据库中自动生成一个新的登录号码(Users表的Id字段),以消息框的形式告诉用户申请成功的号码。其流程图如图5-4所示:用户返回登录界面注册成功并显示号码打开注册界面自动添加星座选项与血型选项输入注册信息检查合法性提示不合法原因合法?YN向数据库中添加记录返回登录界面注册成功并显示号码图5-4 注册界面流程图其中确认注册按钮的代码实现如下:/ 点击注册,向数据库添加记录 private void btnRegist_Click(object sender, EventArgs e) / 输入验证通过,就插入记录到数据库 if (ValidateInput() int myQQNum = 0; / QQ号码 string message; / 弹出的消息 string sex = rdoMale.Checked ? rdoMale.Text : rdoFemale.Text; / 获得选中的性别 string sql = ; / 查询用的SQL语句 int starId; / 星座Id int bloodTypeId; / 血型Id bool error = false; / 操作数据库是否出错 / 根据星座和血型的选择来分情况确定SQL语句 if (cboStar.Text != & cboBloodType.Text != ) / 获得星座的Id starId = GetStarId(); / 获得血型的Id bloodTypeId = GetBloodType(); sql = string.Format(INSERT INTO Users (LoginPwd, NickName, Sex, Age, Name, StarId, BloodTypeId) values (0,1,2,3,4,5,6), txtLoginPwd.Text.Trim(), txtNickName.Text.Trim(), sex, int.Parse(txtAge.Text.Trim(), txtName.Text.Trim(), starId, bloodTypeId); else if (cboStar.Text != & cboBloodType.Text = ) / 获得星座的Id starId = GetStarId(); sql = string.Format(INSERT INTO Users (LoginPwd, NickName, Sex, Age, Name, StarId) values (0,1,2,3,4, 5), txtLoginPwd.Text.Trim(), txtNickName.Text.Trim(), sex, int.Parse(txtAge.Text.Trim(), txtName.Text.Trim(),starId); else if (cboStar.Text = & cboBloodType.Text != ) / 获得血型的Id bloodTypeId = GetBloodType(); sql = string.Format(INSERT INTO Users (LoginPwd, NickName, Sex, Age, Name, BloodTypeId) values (0,1,2,3,4, 5), txtLoginPwd.Text.Trim(), txtNickName.Text.Trim(), sex, int.Parse(txtAge.Text.Trim(), txtName.Text.Trim(), bloodTypeId); else sql = string.Format(INSERT INTO Users (LoginPwd, NickName, Sex, Age, Name) values (0,1,2,3,4), txtLoginPwd.Text.Trim(), txtNickName.Text.Trim(), sex, int.Parse(txtAge.Text.Trim(), txtName.Text.Trim(); try / 创建Command 对象 SqlCommand command = new SqlCommand(sql, DBHelper.connection); DBHelper.connection.Open(); / 打开数据库连接 int result = command.ExecuteNonQuery(); / 执行插入命令 if (result = 1) sql = SELECT Identity FROM Users; / 查询新增加的记录的标识号 command.CommandText = sql; / 重新指定Command 对象的SQL 语句 myQQNum = Convert.ToInt32(command.ExecuteScalar(); / 强制类型转换会出错 message = string.Format(注册成功!你的MyQQ号码是0, myQQNum); else message = 注册失败,请重试!; catch (Exception ex) error = true; message = 服务器出现意外错误!请稍候再试!; Console.WriteLine(ex.Message); finally DBHelper.connection.Close(); / 关闭数据库连接 / 显示注册结果 if (error) MessageBox.Show(message, 注册失败, MessageBoxButtons.OK, MessageBoxIcon.Warning); else MessageBox.Show(message, 注册结果, MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); 5.3 主界面设计当用户输入正确的登录信息并登录后,出现图5-5所示的主界面:图5-5 主界面登陆后在“我的好友”列表中显示当前好友列表,包括好友的头像和昵称。在主界面的顶部要显示当前登陆的用户头像,昵称和登录账号。当有新的聊天消息时候。发来的消息的好友头像要闪动,双击头像弹出“聊天”窗口后,头像停止闪动,当有添加好友请求消息时,窗体底部的好友请求验证按钮要闪烁,单击该按钮弹出“系统消息”窗体后,按钮停止闪烁。通过主窗体下方的按钮打开“查找/添加好友”窗体,“个人信息”窗口,“系统消息”窗口,也可刷新好友列表和退出程序。通过右键菜单能够切换大小头像。能够把陌生人转为好友,能够删除一个好友或陌生人,如图5-6所示:图5-6 右键功能显示好友列表的控键可以用提供的第三方控键sidebar,该控键的命名空间为Aptech.ui。Sidebar是一个能够以分组形式显示列表的控件,能够实现类似QQ的好友分组功能,sidebar控键中可以包含很多组(sbgroup),每个组可以包含很多sidebar项(sbitem)。Sidebar的列表项有两种显示方式:大图标和小图标,它可以通过它的view属性来设置。Sidebar 控件还有一个imagelist 属性,可以和一个imagelist控件关联,列表项中显示的图片就是存放在imagelist控件中的图片。可以通过Sidebar项(sbitem)的imageindex来指定图片在imagelist控件中的索引。其中加载窗体时的代码如下:/ 窗体加载时发生 private void MainForm_Load(object sender, EventArgs e) / 工具栏的消息图标 tsbtnMessageReading.Image = ilMessage.Images0;/ 显示个人的信息 ShowSelfInfo();/ 添加 SideBar 的两个组 sbFriends.AddGroup(我的好友); sbFriends.AddGroup(陌生人);/ 向我的好友组中添加我的好友列表 ShowFriendList(); 定时扫描数据库读取未读信息的代码如下:/ 定时扫描数据库,找到未读消息 private void tmrMessage_Tick(object sender, EventArgs e) ShowFriendList(); / 刷新好友列表 int messageTypeId = 1; / 消息类型 int messageState = 1; / 消息状态 / 找出未读消息对应的好友Id string sql = string.Format( SELECT Top 1 FromUserId, MessageTypeId, MessageState FROM Messages WHERE ToUserId=0 AND MessageState=0, UserHelper.loginId); SqlCommand command; / 消息有两种类型:聊天消息、添加好友消息 try command = new SqlCommand(sql, DBHelper.connection); DBHelper.connection.Open(); SqlDataReader dataReader = command.ExecuteReader(); / 循环读出一个未读消息 if (dataReader.Read() this.fromUserId = (int)dataReaderFromUserId; messageTypeId = (int)dataReaderMessageTypeId; messageState = (int)dataReaderMessageState; dataReader.Close(); catch (Exception ex) Console.WriteLine(ex.Message); finally DBHelper.connection.Close(); / 判断消息类型,如果是添加好友消息,就启动喇叭timer,让小喇叭闪烁 if (messageTypeId = 2 & messageState = 0) SoundPlayer player = new SoundPlayer(system.wav); player.Play(); tmrAddFriend.Start(); / 如果是聊天消息,就启动聊天timer,让好友头像闪烁 else if (messageTypeId = 1 & messageState = 0) / 获得发消息的人的头像Id sql = SELECT FaceId FROM Users WHERE Id= + this.fromUserId; try command = new SqlCommand(sql, DBHelper.connection); DBHelper.connection.Open(); this.friendFaceId = Convert.ToInt32(command.ExecuteScalar(); / 设置发消息的好友的头像索引 catch (Exception ex) Console.WriteLine(ex.Message); finally DBHelper.connection.Close(); / 如果发消息的人没有在列表中就添加到陌生人列表中 if (!HasShowUser(fromUserId) UpdateStranger(fromUserId); SoundPlayer player = new SoundPlayer(msg.wav); player.Play(); tmrChatRequest.Start(); / 启动闪烁头像定时器 5.4 查找/添加好友界面设计在主界面中单击“查”字样按钮后,出现查找/添加好友界面如图5-7所示:图5-7 查找/添加好友界面直接点击“查找”后,即查找所有用户,查询结果如图5-8所示:图5-8 基本查找单击“上一步”则回到“基本查找”页面。点击“精确查找”,如图5-9所示:图5-9 精确查找输

温馨提示

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

评论

0/150

提交评论