软件综合项目工程专业课程设计Socket聊天系统.doc
《软件综合项目工程专业课程设计Socket聊天系统.doc》由会员分享,可在线阅读,更多相关《软件综合项目工程专业课程设计Socket聊天系统.doc(34页珍藏版)》请在咨信网上搜索。
目 录 1.序言 4 2.需求分析 5 2.1系统功效需求 5 2.1.4点歌 5 2.1.5分组管理 5 2.1.6个人信息管理 5 2.1.7用户管理 5 2.1.8视频通话 5 2.2非功效需求: 5 2.2.2网络安全 5 2.3用例分析 6 2.3.1参与者 6 2.3.2用例分析 6 2.3.3系统用例图 6 3.总体设计 8 3.1TCP服务器设置 8 3.2分析类图 9 3.3次序图 10 3.2.1用户私聊次序图 10 3.2.2用户传送文件序列图 11 3.3协作图 11 3.3.1用户私聊协作图 11 3.3.2用户传送文件协作图 12 4.具体设计 14 4.1用户端设计 14 4.2服务端设计 14 4.3多线程设计 15 5.代码实现 16 5.1服务端设计 16 5.2用户端设计 18 5.3多线程 22 5.3.1服务端多线程 22 5.3.2用户端多线程 24 6.运行和测试 25 6.1用户登录界面 25 6.2输入端口界面 25 6.3服务器统计,在线用户信息。 26 6.4私聊 26 6.4.1登录 26 6.4.2用户给指定好友发送信息。(私聊) 27 6.4.3指定好友接收到好友信息。(私聊信息) 27 6.4.5好友回复我信息 28 6.5群聊 28 6.5.1发送群消息 28 6.5.2好友响应并接收群聊信息 29 29 7. 小结 30 8.参考文件 31 1.序言 伴随互联网快速发展,网络聊天工具已经作为一个关键信息交流工具,受到越来越多网民青睐。现在,出现了很多很不错聊天工具,其中应用比较广泛有Netmeeting、腾讯QQ、MSN-Messager等等。该系统开发关键包含一个网络聊天服务器程序和一个网络聊天用户程序两个方面。前者经过Socket套接字建立服务器,服务器能读取、转发用户端发来信息,并能刷新用户列表。后者经过和服务器建立连接,来进行用户端和用户端信息交流。其中用到了局域网通信机制原理,经过直接继承Thread类来建立多线程。开发中利用了计算机网络编程基础理论知识,如TCP/IP协议、用户端/服务器端模式(Client/Server模式)、网络编程设计方法等。在网络编程中对信息读取、发送,是利用流来实现信息交换,其中介绍了对实现一个系统信息流分析,包含了部分基础软件工程方法。经过分析这些情况,该局域网聊天工具采取Eclipse为基础开发环境和java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不停修正和改善,直到形成可行系统 本文经过javaSocket实现了一个基于局域网和网络聊天室程序开发---基于javaC/S模式网络聊天室设计和实现。 C/S(Client/Server)结构,即大家熟知用户机和服务器结构。它是软件系统体系结构,经过它能够充足利用两端硬件环境优势,将任务合理分配到Client端和Server端来实现,降低了系统通讯开销。现在大多数应用软件系统全部是Client/Server形式两层结构,因为现在软件应用系统正在向分布式Web应用发展,Web和Client/Server 应用全部能够进行一样业务处理,应用不一样模块共享逻辑组件;所以,内部和外部用户全部能够访问新和现有应用系统,经过现有应用系统中逻辑能够扩展出新应用系统。这也就是现在应用系统发展方向。 关键词:聊天 用户端 信息 服务器端 Java C/S聊天系统 2.需求分析 2.1系统功效需求 2.1.1实现私聊(一对一):在登陆情况下选择你要聊天好友,进行信息传送,实现相互聊天,这也是本系统最基础功效。 2.1.2群聊(一对多):能够实现一对多人聊天。 2.1.3大文件传输:在能够聊天基础上,实现通讯多元化,进行文件传输。是通讯双方能够选择传送对方想取得资料。 2.1.4点歌 2.1.5分组管理 2.1.6个人信息管理 2.1.7用户管理 2.1.8视频通话 2.2非功效需求: 2.2.1界面友好:界面易操作性,对经典聊天程序界面进行了学习和借鉴,模拟她们界面和常见操作。 2.2.2网络安全 加密 解密 为了提升传输安全性,进行加密操作。立即在网络上被她人了窃听消息,也不能得到原始信息,预防个人关键信息和隐私信息被盗。 2.3用例分析 2.3.1参与者 本系统显而易见两个参与者:用户和管理员。 2.3.2用例分析 从上面需求里进行抽象和提取关键信息,在确定系统边界情况下,选择最基础用例,然后对用例进行描述和细化。使其能完全描述系统功效性需求。 2.3.3系统用例图 经过对参与者和用例分析,确定她们关系(包含参与者和参与者关系,参与者和用例关系,用例之间关系。)其中用例之间关系是分析中关键,图私聊和群聊全部有socket聊天模块,所以能够确定是包含关系。管理个人信息,包含了分组管理和用户信息管理,其中分组管理和用户信息管理,是个人信息管理子集,所以应该是泛化关系。在文件传输时候,可能会产生信息丢失,造成信息不完整,接收方不能完整收到发送方消息,所以造成发送方重发信息。所以这是扩展关系,因为只有在传输文件失败时候,才能启用重传文件模块。 用户所参与模块首先应该登录,在登录系统后,能够私聊和群聊来交流信息。用户能够管理自己信息进行修改自己信息和管理自己分组。为了丰富系统功效我,我们还特意实现了点歌功,和传输文件吸引用户眼光。 3.总体设计 3.1TCP服务器设置 在T C P / I P协议族中,有两个互不相同传输协议: T C P(传输控制协议)和U D P(用户数据报协议)。T C P为两台主机提供高可靠性数据通信。它所做工作包含把应用程序交给它数据分成适宜小块交给下面网络层,确定接收到分组,设置发送最终确定分组超时时钟等。因为运输层提供了高可靠性端到端通信,所以应用层能够忽略全部这些细节。而其次, U D P则为应用层提供一个很简单服务。它只是把称作数据报分组从一台主机发到另一台主机,但并不确保该数据报能抵达另一端。任何须需可靠性必需由应用层来提供。 Bind() Socket() Readfrom() 等候用户请求 处理服务请求 Sendto() Close() Socket() Bind() Sendto() Readfrom() Close() 服务请求 服务应答 服务器 用户机 服务器和用户机通讯步骤 3.2分析类图 (系统整齐分析类图) 没有类是单独存在,通常和别类协作,发明比单独工作更大语义。所以,除了捕捉系统词汇以外,还要将注意力集中到这些类是怎样在一起工作。使用类图来表示这种协作。确定你建模机制。机制代表了部分你建模系统部分功效和行为,这些功效和行为是一组类、接口和其它事物相互作用结果。对于每个机制,确定类、接口和其它参与这个协作协作。同时确定这些事物之间关系。 用场景来预排这些事物,沿着这条路你将发觉模型中忽略部分和定义错误部分。确定用这些事物内容来填充它们。对于类,开始于取得一个责任(类职责),然后,将它转化为具体属性和方法。 3.3次序图 3.2.1用户私聊次序图 用户在进入系统前首先要输入相互通讯端口号,因为用户机和服务器全部是本机所以不需要寻求IP地址,然后输入用户名新建一个用户,因为没有保留历史统计功效,所以每次进入系统前全部需要新建一个用户。然后输入用户名和密码,在确定用户和密码。登陆成功,选择在线能够聊天好友,输入信息然后发送,达成和好友交流。 3.2.2用户传送文件序列图 3.3协作图 3.3.1用户私聊协作图 强调是发送和接收消息对象之间组织结构。一个协作图显示了一系列对象和在这些对象之间联络和对象间发送和接收消息。对象通常是命名或匿名类实例,也能够代表其它事物实例。 3.3.2用户传送文件协作图 用户在登录系统后,进入登陆界面,在界面好友框里,选择要传送文件好友,点击传送文件按钮,会弹出选择文件对话框,在对话框里查找你所在文件系统中你要传送文件。然后点击传送。 4.具体设计 4.1用户端设计 一个网络聊天室运行,首先是要有一个完整稳定服务器端,而且拥有很多个服务器端。客服端要含有实现用户注册和用户登陆,在登陆成功后,要显示出公聊界面,实现聊天功效而且能够发送表情和保留聊天内容和显示聊天统计等功效,在新用户上线和用户下线时要更新每个用户端在线用户列表名,而且能够和在线用户实现一对一私聊功效。 在服务器端能够实现不停监听客服连接,而且依据用户端发送过来不一样信息如注册信息,登录信息,公聊信息,私聊信息,退出信息等,服务器端要做出不一样响应,而且要实现数据库操作,如依据用户注册信息保留数据库中,依据登录时发送来用户名和密码检测是否正当用户等。 经为每一个连接着用户端建立了一个线程,这个线程好比一根电话线一直等候用户端说话,而信息发送中心就相当于一个总台,一旦有些人打电话进来,就经过电话线把信息传 完成了服务器端第一个任务,那么第二个任务也就不难处理了。上面已送到总台,再由总台依据需要将这个信息发送给接收群。这么 就意味着,服务器每接收一条信息,就要调用一次信息发送中心方法,并将这条信息发送到全部用户端(或特定某个/某多个用户端)。 电脑每做一次动作,一个步骤,全部是根据以经用计算机语言编好程序来实施,程序是计算机要实施指令集合,而程序全部全部是用我们所掌握语言来编写。所以大家要控制计算机一定要经过计算机语言向计算机发出命令。 侦听服务器发送连接请求,有请求就接收发来信息,并经过短信猫发出去 单说,服务器端是为用户端服务,服务内容诸如向用户端提供资源,保留用户端数据等等.用户端能够是任意一台电脑,只要它和服务器端存在连接,而且得到了服务器端授权,就能够使用服务器端服务.象现在就能够了解为baidu网站是服务器端,我们现在使用电脑就是用户端.我们能够使用它服务. 4.2服务端设计 因为用户端需要同时能够接收信息和发送信息,所以也必需利用多个线程来实现。根本程用于接收用户输入内容并将之发送到服务器端,而一个后台线程将一直接收来自服务器端信息,并将之返回给用户端用户。 用户端(Client)或称为用户端,是指和服务器相对应,为用户提供当地服务程序。除了部分只在当地运行应用程序之外,通常安装在一般用户机上,需要和服务端相互配合运行。因特网发展以后,较常见用户端包含了如万维网使用网页浏览器,收寄电子邮件时电子邮件用户端,和即时通讯用户端软件等。对于这一类应用程序,需要网络中有对应服务器和服务程序来提供对应服务,如数据库服务,电子邮件服务等等,这么在用户机和服务器端,需要建立特定通信连接,来确保应用程序正常运行。 不过用户端及伺服端关系不见得一定建立在两台分开机器上,同一台机器中也有这种主从关系存在。提供服务伺服端及接收服务用户端也有可能全部在同一台机器上,比如我们在提供网页服务器上实施浏览器浏览本机所提供网页,这么在同一台机器上就同时饰演伺服端及用户端。 4.3多线程设计 为了能实现一对多通话聊天也就是说间接多对多聊天功效,所以必需在用户端配置和服务端配置时候。实现多线程功效。实现程序并发。和能够降低创建进程是CPU资源浪费。和服务区负荷太重。 多线程在用户端能够实现,用户进行群聊,和接收多个好友响应信息。在服务端能够降低创建进程开销。 在一个程序中,这些独立运行程序片断叫作“线程”(Thread),利用它编程概念就叫作“多线程处理”。多线程处理一个常见例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等候程序完成了目前任务以后才开始响应。 使用线程能够把占据时间长程序中任务放到后台去处理用户界面能够愈加吸引人,这么比如用户点击了一个按钮去触发一些事件处理,能够弹出一个进度条来显示处理进度。程序运行速度可能加紧,在部分等候任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下能够释放部分珍贵资源如内存占用等等。 不过假如有大量线程,会影响性能,因为操作系统需要在它们之间切换。更多线程需要更多内存空间。线程可能会给程序带来更多“bug”,所以要小心使用。线程中止需要考虑其对程序运行影响。通常块模型数据是在多个线程间共享,需要预防线程死锁情况发生。 5.代码实现 5.1服务端设计 public class ServerFrame extends JFrame { private JPanel contentPane; private JTextField txtPort; private JLabel lblState; private JTextArea txtAllUsers; // 集合:用来保留全部登录用户 private List<UserInfo> allLoginUser = null; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { ServerFrame frame = new ServerFrame(); // 严禁用户更改窗体大小 frame.setResizable(false); // 距中 frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public ServerFrame() { allLoginUser = new ArrayList<UserInfo>(); initComponet(); } public List<UserInfo> getAllLoginUser() { return allLoginUser; } public void setAllLoginUser(List<UserInfo> allLoginUser) { this.allLoginUser = allLoginUser; } private void initComponet() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 449, 506); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JPanel panel = new JPanel(); panel.setBorder(new TitledBorder(UIManager .getBorder("TitledBorder.border"), "\u670D\u52A1\u5668\u4FE1\u606F", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 70, 213))); panel.setBounds(10, 10, 421, 143); contentPane.add(panel); panel.setLayout(null); JLabel label = new JLabel("\u670D\u52A1\u5668\u72B6\u6001\uFF1A"); label.setBounds(48, 38, 81, 23); panel.add(label); lblState = new JLabel("New label"); lblState.setBounds(161, 42, 110, 15); panel.add(lblState); JLabel label_1 = new JLabel("\u670D\u52A1\u5668\u7AEF\u53E3\uFF1A"); label_1.setBounds(48, 87, 81, 15); panel.add(label_1); txtPort = new JTextField(); txtPort.setBounds(161, 84, 110, 21); panel.add(txtPort); txtPort.setColumns(10); JButton btnStart = new JButton("\u542F\u52A8\u670D\u52A1\u5668"); btnStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { startServer(e); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); btnStart.setBounds(289, 83, 93, 23); panel.add(btnStart); JPanel panel_1 = new JPanel(); panel_1.setBorder(new TitledBorder(null, "\u5DF2\u7ECF\u767B\u5F55\u7684\u7528\u6237", TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel_1.setBounds(20, 163, 411, 299); contentPane.add(panel_1); panel_1.setLayout(new BorderLayout(0, 0)); txtAllUsers = new JTextArea(); panel_1.add(txtAllUsers, BorderLayout.CENTER); } public void updateGui() { this.txtAllUsers.setText(null); for (int i = 0; i < this.allLoginUser.size(); i++) { this.txtAllUsers.append(allLoginUser.get(i).getUserName()); this.txtAllUsers.append("\n"); } } protected void startServer(ActionEvent e) throws IOException { // 验证:是否为空验证 if (CommValidate.isEmpty(txtPort.getText())) { JOptionPane.showMessageDialog(null, "端口号不能空"); return; } // 端口必需是数字 if (!CommValidate.isDigit(txtPort.getText())) { JOptionPane.showMessageDialog(null, "端口号必需是数字"); return; } // 1024之上 // 建立一个监听socket int port = Integer.parseInt(txtPort.getText()); ServerSocket serverSocket = new ServerSocket(port); ServerListerenThread serverListeren = new ServerListerenThread( serverSocket, this); this.lblState.setOpaque(true); this.lblState.setForeground(Color.red); this.txtPort.setEnabled(false);// 禁用 } } 5.2用户端设计 public class ClientLogin extends JFrame { private JPanel contentPane; private JTextField txtLoginUser; private JTextField txtAddress; private JTextField txtPort; private Socket socket; // 登录用户信息 private UserInfo loginUser = null; public UserInfo getLoginUser() { return loginUser; } public void setLoginUser(UserInfo loginUser) { this.loginUser = loginUser; } public Socket getSocket() { return socket; } public void setSocket(Socket socket) { this.socket = socket; } private ServerSocket serverSocket; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { ClientLogin frame = new ClientLogin(); frame.setAlwaysOnTop(true); frame.setResizable(false); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public ClientLogin() { initComponet(); } private void initComponet() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 397, 298); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JPanel panel = new JPanel(); panel.setBorder(new TitledBorder(null, "\u7528\u6237\u767B\u5F55", TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel.setBounds(10, 10, 369, 244); contentPane.add(panel); panel.setLayout(null); JLabel label = new JLabel("\u7528\u6237\u540D\uFF1A"); label.setBounds(37, 36, 54, 15); panel.add(label); txtLoginUser = new JTextField(); txtLoginUser.setBounds(145, 33, 140, 21); panel.add(txtLoginUser); txtLoginUser.setColumns(10); JLabel label_1 = new JLabel("\u670D\u52A1\u5668\u5730\u5740\uFF1A"); label_1.setBounds(37, 80, 98, 15); panel.add(label_1); txtAddress = new JTextField(); txtAddress.setText("localhost"); txtAddress.setBounds(145, 77, 140, 21); panel.add(txtAddress); txtAddress.setColumns(10); JLabel label_2 = new JLabel("\u7AEF\u53E3\u53F7\uFF1A"); label_2.setBounds(37, 120, 54, 15); panel.add(label_2); txtPort = new JTextField(); txtPort.setText("5555"); txtPort.setBounds(145, 117, 140, 21); panel.add(txtPort); txtPort.setColumns(10); JButton btnLogin = new JButton("\u767B\u5F55"); btnLogin.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { login(e); } catch (UnknownHostException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } catch (ClassNotFoundException e3) { // TODO Auto-generated catch block e3.printStackTrace(); } } }); btnLogin.setBounds(69, 164, 93, 23); panel.add(btnLogin); JButton btnReset = new JButton("\u91CD\u7F6E"); btnReset.setBounds(192, 164, 93, 23); panel.add(btnReset); } protected void login(ActionEvent e) throws IOException, ClassNotFoundException { // 验证 // 得到GUI界面上数据 String userName = this.txtLoginUser.getText(); String serverAddress = this.txtAddress.getText(); int serverPort = Integer.parseInt(this.txtPort.getText()); NormalClass.serverAddress = serverAddress; NormalClass.sererPort = serverPort; // 创建一个登录用户 String clientIP = NormalClass.splitIp(InetAddress.getLocalHost() .toString()); int clientPort = NormalClass.randomPort(); loginUser = new UserInfo(userName, null, clientIP, clientPort); loginUser.setImageIndex((int) (Math.random() * 10)); // 向服务器建立一个连接: 请求 Socket socket = new Socket(serverAddress, serverPort); // 发送数据:构建一个数据包 DataPacket dataPacket = new DataPacket(ICommands.LOGIN, loginUser, null, new Date(), null); OutputStream out = socket.getOutputStream(); ObjectOutputStream objOut = new ObjectOutputStream(out); objOut.writeObject(dataPacket); // 等候服务器响应 InputStream in = socket.getInputStream(); ObjectInputStream objIn = new ObjectInputStream(in); dataPacket = (DataPacket) objIn.readObject(); if (dataPacket.getCommand().equals(ICommands.LOGIN_SUCCESS)) { ClientChat chat = new ClientChat(this); chat.setTitle(this.loginUser.getUserName() + "登录了"); chat.setVisible(true); this.setVisible(false); } objIn.close(); objOut.close(); socket.close(); } } 5.3多线程 5.3.1服务端多线程 public ServerChatThread(Socket socket, ServerFrame frame) { this.socket = socket; this.frame = frame; this.start(); } public void run() { // 接收用户传过来数据包 try { inputStream = this.socket.getInputStream(); objIn = new ObjectInputStream(inputStream); DataPacket dataPacket = (DataPacket) this.objIn.readObject(); // 用户要干 什么? String command = dataPacket.getCommand(); if (command.equals(ICommands.LOGIN)) { // 表示用户要登录 UserInfo loginUser = dataPacket.getFromUserInfo(); // 身份验证 (略)保留用户唯一性 // 保留登录用户 this.frame.getAllLoginUser().add(loginUser); // 更新用户最新信息 this.frame.updateGui(); // 发送一个信息过去 dataPacket.setCommand(ICommands.LOGIN_SUCCESS); dataPacket.setFromUserInfo(null); dataPacket.setToUserInfo(loginUser); this.outPutStream = this.socket.getOutputStream(); this.objOut = new ObjectOutputStream(this.outPutStream); this.objOut.writeObject(dataPacket); // 向每个登录用户发送最新登录用户集合 sendAllUserInfo(); } else if (command.equals(ICommands.CLOSE_CLIENT_WINDOW)) { // 用户要关闭了 UserInfo unLoginUser = dataPacket.getFromUserInfo(); this.frame.getAllLoginUser().remove(unLoginUser); this.frame.updateGui(); // 给用户 dataPacket.setCommand(ICommands.CLOSE_CLIENT_WINDOW_SUCCESS); this.outPutStream = this.socket.getOutputStream(); this.objOut = new ObjectOutputStream(this.outPutS- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 综合 项目 工程 专业课程 设计 Socket 聊天 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文