3智能家居综合实训应用项目设计开发与调试修改版_第1页
3智能家居综合实训应用项目设计开发与调试修改版_第2页
3智能家居综合实训应用项目设计开发与调试修改版_第3页
3智能家居综合实训应用项目设计开发与调试修改版_第4页
3智能家居综合实训应用项目设计开发与调试修改版_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、智能家居综合实训指导书应用项目设计开发与调试(逍遥版适用于 2018 级)项目开发:赖斯霖、黄灿铭、肖 钦、黄加涛项目测试:王奕丽、刘海斌、吴少敏资料整理:王奕丽指导:王进华1目录项目图11.1 简单点灯的客户端项目图1一进阶点灯的客户端与进阶点灯的服务器项目图1APP 点灯 Android 客户端项目图2光照传感器与自动开关项目图2二项目表3光照传感器与自动开关. 3三项目方案设计与实现(源码关键部分)33.1 C# socket( )简单点灯43.1.1 C#socket()简单点灯项目的建立43.1.2 C#socket()简单点灯客户端界面设计53.1.3 C#soc

2、ket 简单点灯客户端代码设计123.1.4 C#socket 简单点灯客户端完整源代码截图173.2 C# socket( )服务进阶点灯203.2.1 C#socket( )服务设计 C#socket( )服务设计步骤截图 C#socket( )服务设计源码截图253.2.2 C#socket( )客户端设计2 C#socket( )客户端设计步骤截图2 C#socket( )客户端关键源码截图30APP 点灯353.3 AndroidAPP 点灯开发过程截图353.3.0 Android3.3.1 布局截图38布局代码3

3、83.3.2 Android 客户端代码截图423.3.3 为 Androidstudio 增加网络权限503.4 光照传感器与自动开关. 573.4.1 光照传感器3.4.2 光照传感器与自动开关与自动开关布局57设计源码截图583.5 Java 点灯软件开发623.5.1 前言6 . 6 开发环境:eclipse;JDK1.8;633.5.2 UI 设计6 新建可视化项目类6 进入可视化设计界面并添加控件6 、初级点灯:两个 Button(按钮)控件6 、进阶点灯:四个 Button(按钮)控件

4、、若干 JTextField(文本框)控件、Choice(下拉菜单(可选)、JLabel(文本). 6、光感点灯:在进阶点灯的基础上再加三个(IP,Port,光感系数)、两个文本框(IP,Port)、一个按钮(连接)6 规范命名663.5.3 按钮代码(功能实现)6、准备工作(避免报错)66I 、创建按钮 、简单点灯 、进阶点灯方法67的关键代码块67的关键代码块6.1、按下连接按钮,触发. 6.2、开关灯按钮. 6 、光感模块,自动点灯70.

5、1 、功能实现概况70.2 、关键代码块70代码完整版:按钮已隐藏72完整代码:73尾注:84II 项目图1.1 简单点灯的客户端项目图Main()方法Form1.class (类)1.2 进阶点灯的客户端与进阶点灯的服务器项目图1执行“断开”的代码执行“连接”的代码执行“关”的指令代码执行“开”的指令代码button4_Click()方法button3_Click()方法button2_Click()方法button1_Click()方法1.3APP 点灯 Android 客户端项目图1.4 光照传感器与自动开关项目图2二项目表三l项目方案设计与实现(源码关键部分)敲代码时千万

6、注意 ip 和端!3简单点灯客户端(pc)Main() 方法button1_ Click()方法button2_ Click()方法button3_ Click()方法button4_ Click()方法进阶点灯客户端(pc)Main() 方法button1_ Click()方法button2_ Click()方法button3_ Click()方法进阶点灯服务端(pc)Main() 方法button1_ Click()方法button2_ Click()方法startServer() 创建本地服务器方法ListenerClientConnect 客户端连接方法receiverData 接收客

7、户端信息方法APP 点灯Open() 方法Close() 方法Hostopen()点击连接按钮Hostclose()点击断开按钮光 照 传 感器 数 据 采集 与 自 动开关Main() 方法button1_ Click()方法button2_ Click()方法ReadData()/读取传感器方法Command()/根据传感器状态,开关灯指令方法l 通信方式主要是基于 socket 通信,所以在程序中对 socket 实例进行任务操作前需要完成 socket对象的创建,尤其是关闭后再进行操作时要再次创建 socket 实例对象,否则会报异常。3.1 C# socket( )简单点灯说明:这个

8、简单的客户端是使用 socket 协议。目的是想让大家接触 socket 协议。采用的开发平台:Visual Studio 2017,也可以采用 Visual Studio 2013。3.1.1 C#socket()简单点灯项目的建立打开Visual Studio 20174依次点击右上角的文件、新建、项目。选择Visual C#,窗体应用,可在处设置项目文件的名称、文件存放位置3.1.2 C#socket()简单点灯客户端界面设计5界面布局展示设计布局时,选择下拉项中的,弹出工具箱,可根据需要选择其中的相关控件,拉取放置到设计界面上。本界面使用的控件有以上 5 种(button 按钮,com

9、bobox 下拉选项框,label, picturebox 图片显示框,textbox 文本框)6工具箱点击左上方视图1、picturebox 控件设置选择 picturebox 控件,按住鼠标拉取到窗体,设置到合适的大小(控件的设置基本相同,以下均省略)7点击选中设置在窗体中的picturebox 控件,可看到右下角对应控件的属性在程序右下角的属性中,找到 Image,点击(.),点击导入本地,在硬盘中选择本地图片当作显示的图片作为背景图。2、button 按钮,label8button 按钮,label,设置界面显示的文本于属性的 Text 中设置,属性中的Font 可设置控件上显示的文本

10、的字体、大小9对象名。并非(Name)项,此为该控件的ForeColor 项设置控件显示的文本的颜色103、关键优化控件:comboBox利用该控件可实现自由进行开关。拉取 comboBox 控件,在属性设置中找到,点击图中所示按钮),弹出字符串集合编辑器,输入要设置的下拉选项字符串文本,设置完成后运行,点击下拉按钮即有上一图的所示效果。11注意:每个选项字符串占一行。(.Items 项选择输出端口打开窗体设计代码,亦可看到自动生成的下拉选项设置代码。3.1.3 C#socket 简单点灯客户端代码设计设置完大部分的控件后,要开始给控件编写、功能,以达到我们的使用需求。主要利用socket 协

11、议,与硬件进行连接通讯。socket、ip、ipe 对象12将字符串 Ip 地址转换为 IPAddress 实例获取文本框(输入端)的字符串内容,并将其转换为 int 类型,因为新建socket 实例对象13要求参数 port 为 int 类型。网络节点 ipe 实例化时调用Connect()方法建立 socket连接设置按钮点击时,双击界面设计窗体中的某一个要编写代码的按钮,未自动跳转到代码编写位置时,可右键选择查看代码。14可以看到点击以生成,即可在当中编写相关的程序代码连接按钮利用trycatch() ;if()else()对连接过程进行监测,排错。调用 close()方法关闭 sock

12、et 连接和15调用send()方法,数据获取下拉列表选项的文本内容使用 switch 选择,选中的输出端口相应的开启命令。16若无一符合条件,则运行defult 后的代码,跳出提示。3.1.4 C#socket 简单点灯客户端完整源代码截图1718193.2C# socket( )服务进阶点灯说明:进阶灯是需要两台电脑进行的。电脑A 运行客户端,电脑B 运行服务端,然后客户端和服务端运行,由端发指令给服务端,服务端收到指令之后点灯。电脑 A(端)-ààà-电脑 B(服务器)-ààà点灯l开发平台:Visual Studio 2017

13、l3.2.1 C#socket( )服务设计第一步:创建服务器注意:本地 IP 为连接设备 WIFI 后的 IPV4 地址20第二步:客户端连接到的开关服务器,连接后就可以向服务器消息以实现 4150 各个端口21异常处理机制:Socket 连接中我们往往会遇到各种异常如:解决异常方法: C#socket( )服务设计步骤截图首先我们需要 Microsoft Visual Studio 2017这个软件新建两个 Windos 窗体应用,一个作为客户端一个作为服务端23注意:本地 IP 为连接设备 WIFI 后的 IPV4 地址24或者是你用网线连接路由器后你的以太网口 IPV

14、4 地址 C#socket( )服务设计源码截图252627283.2.2 C#socket( )客户端设计 C#socket( )客户端设计步骤截图2 C#socket( )客户端关键源码截图30当程序执行后,编译器会直接生成.exe 的可执行程序31然后会打开工程所在文件夹,所要的在binDebug 这个目录下3.2.3 C# socket( )服务进阶点灯项目调试 测试 创建服务器,并连接到实训台注意:本地 IP 为连接设备 WIFI 后的 IPV4 地址运行设计的服务端程序,填入对应的参数,如下图。3 开启客户端

15、,建立连接运行设计的各个端口的开关程序,客户端连接到服务器,连接后就可以向服务器消息以实现 41503 指令测试客户端制用电设备。“指令”,如 DO1-ON 或者 DO1-off,实现 ADAM4150DO 口开启或关闭继电器,进而控343.3 AndroidAPP 点灯说明:这个点灯APP 软件的开发环境是使用 Android Studio 编写的。3.3.0 AndroidAPP 点灯开发过程截图新建一个项目然后一直点 next 直到下图点击 finish更换软件名字和图标35*正式内容*注意事项1:不要将单词打错,注意单词的大小写,同时,如逗号,等符号不要弄错。2:若是出

16、现这种红色的情况的话(下图 1)。先将鼠标点击在红色字体的周边,待出现(下图2)的情况时,按Alt+Enter 键,导入需要调用的类,若是无法自动修复,则可能是调用了下面的某一个方法,待后面的方法写完后报错会消除即可。3:如果不按照图操作创建 xml 与 Java 文件,而是单个创建,需要在文件中添加。打开下图的两个文件36373.3.1布局截图布局代码下图先设置相对布局,并且设置名称为“IP”和“端口”名字的文本框用来显示,并且设置控件来成为输入框能使得用户输入内容EditView3839该图为设置端的输入框给用户输入内容,接下来设置一个嵌套的线性布局,目的是为了让连接和断开按钮分别占据半行

17、,单纯用相对布局来设置的话可能会比较麻烦40Spinner 是设置下拉框选项,需要和 Java 代码衔接一起使用才能实现想要的效果413.3.2 Android 客户端代码截图java-MainActivity.java 这个敲下面的图片内容42上图中的 array 会报错,是因为没有建 array.xml 的文件所以会报错,看下图解决错误43然后在 array.xml 里面写入下图代码构建好适配器后就需要为适配器添加内容,到这之前我们的下拉框已经实现了显示功能,能够使用看到 DO0-DO7这 几 个 选 项 , 下 图 是 为 了 选 择 选 项 后 能 够 得 到 的 具 体 效 果444

18、5设置完效果之后就得设置连接的对象了(Socket),然后通过建立线程来实现指定的内容464748493.3.3 为 Androidstudio 增加网络权限最后记得下图给予网络权限,不然报错但是灯也点不亮503.3.1 AndroidAPP 点灯调试测试接入对应的 wifi 可以连通设备运行 APP打开 Android studio 安装到的 APP,输入指定的 ip 和端进行连接5 测试连接点击连接后,一旦连接,再次点击连接之后会出现下图的情况,说明你已经连上设备了5.4 选择 ADAM4150 执行端口此时点击图中的ADAM 按

19、钮便会出现下图这种情况2.5 执行对应端口指令此时选中ADAM 接入灯泡的 DO 口,点击打开按钮.6 观测实验平台图中显示正在开启,然后观察设备上的灯泡54这时则说明实现安卓软件智能家居已经完成啦,最后再关闭灯泡试试,点击上图的关闭按钮55563.4 光照传感器与自动开关3.4.1光照传感器与自动开关布局573.4.2光照传感器与自动开关设计源码截图5859603.4.3 光照传感器与自动开关设计测试 智能家居无线组网本机连接实训台路由器 wifi,并确认wifi 状态信息在 /24 网段:由于本模拟量光照传感器与智能点灯程序

20、所连接的服务器 IP 和端是写死的(理解代码的情况下可以自行更改),传感器硬件所连接的串口服务器所对应端口参数必须为:(IP:;端口为 26)串口服务器的端口配置需如下图笔记本连接搭好硬件的WIFI 和关闭电脑自身的其它网卡(需要完成实验指导书的:1智能家居综合实训_组网信道调试与测试_王进华2智能家居综合实训_数字量ADAM 4150 下行数据调试与测试_2智能家居综合实训_传感器及上行数据通道调试与测试的全部内容) 光照与自动开关运试运行设计的程序,如下61当点击开始智能化按钮:窗体会自动获取传感器所返回的光照强度数值并且根据强度数值实现开光灯的功能。(

21、由于传感器因素需要我们用手握住传感器才会实现灯的自动开启)3.5 Java 点灯软件开发3.5.1 前言Java 点灯软件的 UI 和功能实现模块分别是使用Java 自带的 GUI 和 IO、net 包里的类和方法体实现的。则即,需要导入 swing、awt、io、net 包里的类,可以预先导入,也可以在代码编写过程中通过 eclipse软件的提示功能(Alt+/),在调用时快速导入;在 eclipse 中,可以通过安装一些可视化设计插件安装插件来简化繁琐的GUI 设计过程6 开发环境:eclipse;JDK1.8;3.5.2 UI 设计 新建可视化

22、项目类6 进入可视化设计界面并添加控件、初级点灯:两个 Button(按钮)控件6、进阶点灯:四个 Button(按钮)控件、若干 JTextField(文本框)控件、Choice(下拉菜单(可选)、JLabel(文本)、光感点灯:在进阶点灯的基础上再加三个数)、两个文本框(IP,Port)、一个按钮(连接)(IP,Port,光感系6规范命名3.5.3 按钮代码(功能实现)、准备工作(避免报错)为节省系统顺序,Java 里的对象一般都是需要的时候才,而这便使代码产生了局部性,即因不同导致无法调用。解决这类

23、问题的方法除了变化顺序,最简单的便是直接在一开始直接调用,不用担心顺序问题。红框:提前先黑框:需要时,后面便可6、创建按钮方法、简单点灯的关键代码块步骤:用 try/catch 包围,调用 socket 并配置 IP 和端口,获取输出流,开灯指令6、进阶点灯的关键代码块步骤:.1、按下连接按钮,触发>获取输入的 IP 和端口并配置>使用 “IP 文本框的对象名”.getText() ,可直接获取文本内容。>端口可通过 Integer.parseInt(“Port 文本框的对象名”.getText() 来强制转化为 I

24、nt>可通过变量将连接的信息传出,也可直接禁用按键,来达到未连接不可开关灯的效果>禁用按钮的代码为 “按钮的对象名”.setEnabled(true/false) ,其中,true 和 false 分别表示可否编写6.2、开关灯按钮开灯:实现步骤已注释,使用的 Port 方法体是Choice(下拉菜单栏)写的,可用其他方法代替关灯:同上,不多赘述6、光感模块,自动点灯.1、功能实现概况因为光度传感器需要接收 “获取指令”才会获取光度信息并传回,因此需要在收光度信息。这里的解决方案是,通过新建线程达到目的。线程的简单新建方法:new Th

25、read () public void run () “代码” .start();获取指令的同时,接.2、关键代码块获取指令:接收光感信息后,并处理:70将两个线程放在连接按钮触发下:71代码完整版:按钮已隐藏72完整代码:import java.awt.Choice;import java.awt.Color;import java.awt.event.ActionEvent; import java.awt.event.ActionListenerg; import java.io.DataOutputStream; import java.io.IOException;im

26、port java.io.InputStream; import .Socket;import java.rmi.UnknownHostException;import javax.swing.JButton;import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JTextPane;SuppressWarnings("serial")public class Client extends JFrame private St

27、ring t;private JFrame f; private JLabel num;private Choice PortItem; private JTextPane textPane;private Socket socket,socket1,socket2;private JButton Button_Open, Button_Close, btnGet; private JTextField ipText,portText,IP2Text,port2Text; public static void main(String args) new Client();public Clie

28、nt() /底层f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setBounds(100, 100, 393, 259);f.getContentPane().setLayout(null);/文本框textPane = new JTextPane();textPane.setBounds(14, 78, 266, 43); f.getContentPane().add(textPane); textPane.setEditable(false);73/IPJLabel lblIp = new JLa

29、bel("IP:");lblIp.setBounds(14, 13, 24, 18); f.getContentPane().add(lblIp);/IP 文本框ipText = new JTextField(); ipText.setBounds(52, 8, 97, 28); f.getContentPane().add(ipText); ipText.setColumns(10);ipText.setText("");/PortJLabel lblPort = new JLabel("port:");lbl

30、Port.setBounds(14, 44, 40, 37); f.getContentPane().add(lblPort);/Port 文本框portText = new JTextField(); portText.setBounds(52, 49, 40, 27); f.getContentPane().add(portText); portText.setText("23");portText.setColumnsg(10);/光感系数num = new JLabel("0.000");num.setBounds(240, 173, 40, 1

31、8); f.getContentPane().add(num);/IP2JLabel lblIp_1 = new JLabel("IP:");lblIp_1.setBounds(14, 173, 40, 18); f.getContentPane().add(lblIp_1);/IP2 文本框IP2Text = new JTextField(); IP2Text.setText("");IP2Text.setColumns(10); IP2Text.setBounds(52, 169, 97, 27);f.getContentPan

32、e().add(IP2Text);/Port2JLabel lblPort_1 = new JLabel("port:");lblPort_1.setBounds(150, 162, 40, 37); f.getContentPane().add(lblPort_1);74/Port2 文本框port2Text = new JTextField(); port2Text.setText("26"); port2Text.setColumns(10); port2Text.setBounds(191, 169, 40, 27); f.getContentP

33、ane().add(port2Text);f.setVisible(true);/下拉选项卡PortItem = new Choice(); PortItem.setBounds(295, 8, 72, 24); f.getContentPane().add(PortItem); PortItem.addItemg("DO0"); PortItem.addItem("DO1"); PortItem.addItem("DO2"); PortItem.addItem("DO3"); PortItem.addItem(&

34、quot;DO4"); PortItem.addItem("DO5"); PortItem.addItem("DO6"); PortItem.addItem("DO7");PortItem.setEnabled(false);/连接按钮JButton btnConnect = new JButton("connect"); btnConnect.setBounds(163, 8, 89, 28); f.getContentPane().add(btnConnect);btnConnect.setBackg

35、round(Color.LIGHT_GRAY);按钮-连接/btnConnect.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) 设置状t = "connect"/态为已连接try socket=newSocket(ipText.getText(),Integer.parseInt(portText.getText();/新建 socket 并配置 IP 和 Port catch (UnknownHostException e1) e1.printStackT

36、race(); catch (IOException e1) e1.printStackTrace();portText.setEnabled(false);/设置 Port 文本框不可用ipText.setEnabled(false);/设置 IP 文本框不可用75btnConnect.setEnabled(false);/设置连接按钮不可用PortItem.setEnabled(true);/设置下拉菜单可用Button_Open.setEnabled(true);/设置开灯按钮可用Button_Close.setEnabled(true);/设置关灯按钮可用);按钮-连接/开灯按钮But

37、ton_Open = new JButton("Open"); Button_Open.setBounds(295, 49, 73, 27); f.getContentPane().add(Button_Open);Button_Open.setBackground(Color.LIGHT_GRAY);Button_Open.setEnabled(false);/设置按钮初始状态为不可用,防止未连接情况下的操作按钮-开灯/Button_Open.addActionListener(new ActionListener() public void actionPerforme

38、d(ActionEvent arg0) try DataOutputStreamDataOutputStream(socket.getOutputStream();/获取输出流da=new通da.write(Port("open");/过“Port”方法体返回下拉选项卡中/对应端口的对应开灯代码并/textPane.setText(textPane.getText()+PortItem.getSelectedItem()+"-openrn"); catch (IOException e) e.printStackTrace(););按钮-开灯/关灯按钮7

39、6Button_Close = new JButton("Close");Button_Close.setBounds(294, 94, 73, 27); f.getContentPane().add(Button_Close); Button_Close.setBackground(Color.LIGHT_GRAY);Button_Close.setEnabled(false);/设置按钮初始状态为不可用,防止未连接情况下的操作按钮-关灯/Button_Close.addActionListener(new ActionListener() public void act

40、ionPerformed(ActionEvent arg0) try DataOutputStreamDataOutputStream(socket.getOutputStream();/获取输出流da=new通da.write(Port("close");/过“Port”方法体返回下拉选项卡中/对应端口的对应关灯代码并/textPane.setText(textPane.getText()+PortItem.getSelectedItem()+"-closern"); catch (IOException e) e.printStackTrace();

41、);按钮-关灯/获取光感信息按钮btnGet = new JButton("Get"); btnGet.setBounds(295, 168, 72, 28); f.getContentPane().add(btnGet);btnGet.setBackground(Color.LIGHT_GRAY);按钮-光感/btnGet.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg) IP2Text.setEnabled(false); port2Text.setEn

42、abled(false);获取指令/new Thread() public void run() 77try socket1=newSocket(IP2Text.getText(),Integer.parseInt(port2Text.getText();/新建 socket 并配置 IP 和 Portwhile (true) byte b = 0x01, 0x04, 0x00, 0x07, 0x00, 0x01, (byte) 0x80,指令0x0B;/DataOutputStreamDataOutputStream(socket1.getOutputStream();/获取输出流da=ne

43、wda.write(b);/延迟Thread.sleep(1500);/ catch (.UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); catch (InterruptedException e) e.printStackTrace();.start();获取指令/接收数据并处理/new Thread() public void run() try socket2=newSocket(IP2Text.getText(),Integer.parseInt(port2T

44、ext.getText();/新建 socket 并配置 IP 和 Portwhile (true) InputStream socket2.getInputStream();/获取输入流is=/byte b = new byte1024;int len = 0;if (len = is.read(b) != 0) Thread.sleep(1500); is.read(b,0,len);byte U, L;78double hum, Hum;U = b3;L = b4;hum = (Integer.parseInt(String.valueOf(U) << 8 |Integer.

45、parseInt(String.valueOf(L);Hum光感系数=hum/10000;/num.setText(String.valueOf(Hum);/if(Hum<-0.2) DataOutputStreamda=newDataOutputStream(socket.getOutputStream();da.write(Port("open");textPane.setText(PortItem.getSelectedItem()+ "-openrn");else if(Hum>-0.2) DataOutputStreamda=new

46、DataOutputStream(socket.getOutputStream();da.write(Port("close");textPane.setText(PortItem.getSelectedItem()+ "-closern");/ catch(UnknownHostException e)e.printStackTrace(); catch(IOException e) e.printStackTrace();79 catch(InterruptedException e)e.printStackTrace();.start();接收数据

47、并处理/);按钮-光感/注:Port 方法体:public byte Port(String a) byte b = null;if (t = "connect") if (a = "open") byte o = 0X01, 0X05, 0X00, 0X10, (byte) 0XFF, 0X00, (byte) 0X8D, (byte) 0XFF ;switch (PortItem.getSelectedItem() case "DO0":b = o; break;case "DO1":o3 = 0X11;o6

48、= (byte) 0XDC;o7 = (byte) 0X3F; b = o;break; case "DO2":o3 = 0X12;o6 = (byte) 0X2C;o7 = (byte) 0X3F; b = o;break; case "DO3":o3 = 0X13;o6 = (byte) 0X7D;o7 = (byte) 0XFF; b = o;break; case "DO4":o3 = 0X14;o6 = (byte) 0XCC;o7 = (byte) 0X3E; b = o;break;80case "DO5":o3 = 0X15;o6 = (byte) 0X9D;o7 = (byte) 0XFE; b = o;break; case "DO6":o3 = 0X16;o6 = (byte) 0X6D;o7 = (byte) 0XFE; b = o;break; case "DO7

温馨提示

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

评论

0/150

提交评论