电梯控制系统(Java课程设计)内容.doc_第1页
电梯控制系统(Java课程设计)内容.doc_第2页
电梯控制系统(Java课程设计)内容.doc_第3页
电梯控制系统(Java课程设计)内容.doc_第4页
电梯控制系统(Java课程设计)内容.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

电梯英才网A1 系统描述1 功能描述本电梯系统用来控制一台运行于一个具有N层的大楼电梯,它具有上升、下降、开门、关门、载客的基本功能。大楼的每一层都有:(1) 两个指示灯 这两个指示灯分别用于指示当前所在的层数和电梯的当前状态(上行、下行或停止);(2) 电梯锁 用于将本层的电梯门锁住,并使本楼层的电梯按钮失效,电梯里相应的按钮也失效,使得电梯不能也不可能停在本层;(3) 按钮 除了第一层和顶层,每一层都有两个按钮(上行、下行),乘客可以呼叫上楼或下楼,顶楼只有一个下楼按钮,而第一层只有一个上楼按钮。电梯里面具有:(1) 标示从“1”到“N”的N个按钮,用于让乘客选择所要的层数;(2) 关门按钮 当乘客按下此按钮时,电梯门如果开着将关上,否则不执行任何操作;(3) 开门按钮 当乘客按下此按钮时,电梯如果停在某一层,电梯门将打开,否则不执行任何操作;(4) 超重测试和警报装置 电梯的地面有超重感应装置,当电梯载重达到某一个值时,电梯“超重警报铃”发出超重警报,并且不执行关门命令。2 关键实现方法描述用“最大距离循环”来说明电梯的运行方式。也说是说,电梯处于上行状态时就一直上行直到不再有上行任务,电梯处于下行状态时就一直下行直到不再有下行任务。用两个队列来实现电梯的调度,电梯根据这两个队列发送来的楼层号作为目的地进行运行。在上行队列中保存了所有的上行请求的楼层号(包括楼层的呼叫和电梯里的楼层按钮请求),即保存电梯上行时需要停的楼层号。队列排列规则是:高于或等于电梯当前所地楼层的上行请求的楼层号从小到大排在队列的前部分,低于电梯当前所地楼层的上行请求的楼层号从小到大排在队列后部分。如果新请求的楼层号被插在队列头时同时将这个楼层号发送给电梯作为它的目的地。在下行队列中保存了所有的下行请求的楼层号(包括楼层的呼叫和电梯里楼层按钮请求),即保存电梯下行时需要停的楼层号。队列排列规则是:低于或是等于电梯当前所在楼层的下行请求的楼层从大到小排在队列前部分,高于电梯当前所在楼层的下行请求的楼层号从大到小排在队列后部分。当电梯正在上行时,如果上行队列的队列头改变时,系统将同时将这个新的队列头发送给电梯作为它的新目的地。有两种原因引起队列头的改变。(1) 新的请求插入到上行队列头。(2) 电梯到达某个楼层将这个楼层的请求从上行队列的队列头删除,后继的更高楼层号成为对列头。当电梯正在下行时,如果下行队列的队列头改变时,系统将同时将这个新的队列头发送给电梯作为它的新目的地。有两种原因引起下行队列头的改变。(1) 新的请求插入到下行队列头。(2) 电梯到达某个楼层将这个楼层的请求从下行队列的队列头删除,后继的更高楼层号成为对列头。在电梯上行过程中,当上行队列中没有比电梯当前所在的楼层更高的楼层号时,发送电梯目的地的开始从下行队列中取得。同样,在电梯下行过程中,当下行队列中没有比电梯当前所在的楼层更低的楼层号时,发送电梯目的地的开始从上行队列中取得。如此反复,当两个队列中都没有数据时,电梯暂停。当电梯到达某层时,此层的所有请求按钮全部复位(包括楼层和电梯里的按钮),电梯门自动开启,在一段时间内如果乘客没有按下开门或关门的按钮,电梯将自动关门。为了保证电梯系统的安全,在任何不安全的情况下,紧急制动就会被促发,电梯被强制停止。A2 用例模型1 角色识别根据前面系统的描述,可以确定与该系统交互的两个角色:电梯管理员(elevator manager)和乘客(passenger),其中乘客是电梯的主要使用者,电梯管理员的责任是对电梯进行维护(见图A1)。角色:乘客角色职责:乘电梯上下楼开电梯门关电梯门角色识别问题:(1) 使用系统主要部分(2)对系统运行结果感兴趣角色:电梯管理员角色职责:开电梯锁关电梯锁处理电梯紧急事故角色识别问题:(1)维护管理,保持系统正常运行(2)对系统运行结果感兴趣图A12 用例识别在角色的基础上,可以确定系统的用例,做法是针对每一个角色考查它要求系统提供的功能,它使用系统的哪些功能,经过分析,可得到如下的用例。乘客相关的用例:l 按下某楼层的上行按钮(go up stair)。l 按下某楼层的下行按钮(go down stair)。l 按下某电梯内的某一层楼按钮(go to floor request)。l 按下关门按钮 (close door)。l 按下开门按钮(open door)。l 超重测试(overweight test)。电梯管理员的用例:l 锁住某层电梯锁(lock floor)。l 打开某层电梯锁(open floor)。用例的描述如下:用例1 按下某楼层的上行按钮(go up stair)(1) 乘客按下第M层的上行按钮。(2) M被插入到上行队列的合适位置。(3) 如果M被插到上行队列头。l 如果电梯正处于上行状态。将M发送给电梯作为目的地。l 如果电梯处于停止状态。将M发送给电梯作为目的地。(4)电梯到达此楼层。 (5)电梯自动打开门(用例9)。(6)乘客进入电梯。(7)超重测试(用例6)。用例2 按下某楼层的下行按钮(go down stair)。(1) 乘客按下第M层的下行按钮。(2) M被插入到下行队列的合适位置。(3) 如果M被插到下行队列头。l 如果电梯正处于下行状态。将M发送给电梯作为目的地。l 如果电梯处于停止状态 将M发送给电梯作为目的地。(4) 电梯到达此楼层。(5) 电梯自动打开门(用例9)。(6) 乘客进入电梯。(7) 超重测试(用例9)。用例3 按下电梯内的某一楼层按钮(go to floor request)(1) 乘客按下电梯内L层的按钮。(2) 如果被按下的楼层号L比电梯当前所在的楼层号高。l 将此楼层号插入到上行队列的合适位置。l 如果L被插入到上行队列头。如果电梯正处于上行状态。将L发送给电梯作为电梯的目的地。(3) 如果被按下的层号L比电梯当前所在的楼层低。l 将此楼层号L插入到下行队列的合适位置。l 如果L被插入到下行队列头。如果电梯正处于下行状态。将L发送给电梯作为目的地。(4) 电梯到达目的楼层。(5) 电梯自动开门(用例9)。用例4按下关门按钮(request close door)(1) 如果电梯门关着。保持电梯门关闭状态。(2) 如果电梯门开着。关闭电梯门。用例5 按下开门按钮(request open door)如果电梯停在某一层。l 如果电梯门关着。打开电梯门。l 如果电梯门开着。保持电梯门开状态。用例6 超重测试(overweight test)(1) 乘客进入电梯。(2) 如果电梯超重感应装置检测到超重。l 电梯发出超重警报,并拒绝关闭电梯门。l 乘客走出电梯。l 电梯解除超重警报,并允许关闭电梯门。用例7 锁住某层电梯锁(lock floor)此层的楼层请求按钮和电梯内的楼层按钮失效。用例8 打开某层电梯锁(open floor)此层的楼层请求按钮和电梯内的楼层按钮恢复正常。用例9 自动打开电梯门(auto open door)(1) 电梯到达某楼层。(2) 电梯自动开门。用例10 自动关闭电梯门(auto close door)(1) 电梯门打开的状态达到设置的时限。(2) 关闭电梯门。A3 类模型 根据分析,我们可以得到下面这些类。 乘客类(Passenger)、管理员类(Manager)、电梯类(Elevator)、电梯门类(ElevatorDoor)、楼层的上行请求按钮类(Go Up Request)、楼层的下请求按钮类(Go Down Request)、电梯里的楼层按钮类(Go To Floor Request)、楼层锁类(lock)、指示灯类(Indicate Light)、队列类(Queue)、定时器类(Timer)、异常处理类(Expection)。1 乘客类(Passenger)PassengerPress()2 管理员类(Manager)ManagerLockFloor()OpenFloor()3 电梯类(Elevator)属性State表示电梯的状态(停止、上行、下行),Position表示电梯所在的楼层(1-N),IsOverWeight标识电梯是否超重,IsNormal用于标识电梯是否正常。方法StartUp(Floor)表示启动电梯上行到Floor层,StartDown(Floor)表示启动电梯下行到Floor层,Stop表示电梯停下来,Warn()启动电梯超重警报,CancelWarn取消电梯超重警报。ElevatorStatePositionIsOverWeightIsNormalStartUp(Floor)StartDown(Floor)Stop()Warn()CancelWarn()4 梯门类(ElevatorDoor)属性State表示电梯门的状态(开或关),方法Open()表示打开电梯门,Close()表示关闭电梯门。ElevatorDoorStateOpen()Close5 楼层的上行请求按钮类(Go Up Request)、楼层的下行请求按钮类(Go Down Request)、电梯里的楼层按钮类(Go To Floor Request)属性State表示按钮是否已经被按下,Enabled表示按钮是否能用(如果被管理员锁住就不能用),OnFloor表示按钮对应的楼层号,方法Press()表示按下按钮,Reset()表示复位按钮, 6 指示灯类(Indicate Light)指示灯分为楼层指示灯和电梯状态指示灯,其中State属性表示指示灯的状态(亮或灭)。楼层指示灯有Show(Floor)方法用于显示电梯所在楼层数,电梯状态指示灯有Show(UporDown)方法用于显示电梯上行或下行。7 楼层锁类(lock)属性State表示楼层锁的状态(关或开),OnFloor表示锁所在的楼层数,方法On()表示开锁,Off()表示关锁。LockFloorStateOnFloorOn()Off()8 队列类(Queue)队列类用于创建上行和下行队列,IsEmpty属性表示队列是否为空,方法Insert(Elevator)用于插入元素,DeleteHead()方法用于删除队列头元素,Send(HeadElement)用于将队列头发送给电梯。QueueIsEmptyInsert(Elevator)DeleteHead()Send(HeadElement)9 定时器类(Timer) Time属性用于设置定时的时间长,StartTimer()方法用于启动计时,当计时结束时执行Doing()方法并停止计时。TimerTimeStartTimer()Doing()10 异常处理类(Expection)Type属性用语标识发生的异常类型,Source记录异常源,Doing()方法用于当发生异常时做出的处理。ExceptionTypeSourceDoing()11 类关系图。 实训内容实训内容一 绘制电梯图形实训目的(1) 学会使用Java.awt包中的Graphics类控制和显示用户自定义界面成分,如字体、颜色和图形。(2) 掌握简单的图形动画效果。实训要求创建Applet程序,实现土5-1(a)所示简单的电梯二维图形,并当单击“开门“、“关门”按钮时实现图形上的关门、开门动作。如图5-1(b)就是单击开门后正在开门的过程中。实训指导java.awt包提供了控制字体的Font类、控制颜色的Color类。通过这两个类的属性的设置可以实现对界面上的字体和颜色的控制。如closeDoor.setFont(new Font(“TimesRoman”,Font.BOLD,12);这个语句将closeDoor上显示的文字颜色设置成红色。Java.awt包还提供了用户绘图操作的类Graphics,其中包括了许多绘制文字和图形的相关方法。使用Graphics类可以绘制线、圆和椭圆、矩形和多边形、显示图像、动画和各种字体。如draeLine(int x1,int y1,int x2,int y2),在坐标(x1,y1)、(x2,y2)之间画一条直线。drawRect(int x,int y,int width,int height)方法和fillRect(int x,int y,int width,int height)方法分别用当前颜色在指定位置绘制一个矩形框和一个填充的矩形,其中参数x,y分别是矩形的左上角坐标;width,height分别用语指定矩形的宽和高。DrawOval(int x,int y,int width,int height)方法和fillOval(int x,int y,int width,int height)方法可以在指定的矩形区域内绘制椭圆,其中的参数x、y、width、height分别表示矩形的左上角x、y坐标、宽和高。要实现以上自定义成分,还要借助于Applet类的paint()方法,由该方法画出实际的图形。当Applet运行时,将自动创建一个Graphics类的对象g,并把这个对象参数传递给paint()方法。在paint()方法中,就可以调用Graphics类提供的绘制图形和文字的方法了。下面是程序的实现部分。import java.awt.*;import java.applet.*;public class Applet1 extends java.applet.Applet Button closeDoor=new Button(关门); Button openDoor=new Button(开门); int yPos=60,50,50,60,60; int xPos=30,40,90,100,30; int flag=2; public void init() closeDoor.setFont(new Font(TimesRoman,Font.BOLD,12); closeDoor.setForeground(new Color(255,0,0); add(closeDoor); openDoor.setFont(new Font(TimesRoman,Font.BOLD,12); openDoor.setForeground(new Color(0,255,0); add(openDoor); public boolean action(Event e,Object o) if(e.target=closeDoor) flag=0; else if(e.target=openDoor) flag=1; repaint(); return true; public void paint(Graphics g) g.setColor(new Color(150,150,50); g.fillRect(30,60,70,90); g.setColor(new Color(20,20,150); g.fillPolygon(xPos,yPos,4); g.setColor(new Color(190,150,150); g.drawRect(30,60,70,2); g.setColor(new Color(0,0,0); g.drawOval(105,72,18,18); g.setColor(new Color(0,0,255); g.fillArc(101,75,27,27,60,60); g.setColor(new Color(0,0,0); g.drawOval(105,100,18,18); g.setColor(new Color(0,0,255); g.fillArc(102,88,27,27,-120,60); if(flag=0) g.setColor(new Color(150,40,40); for(int i=0;i=33;i+) g.draw3DRect(30,63,1+i,86,true); g.draw3DRect(99-i,63,1+i,86,true); else if(flag=1) g.setColor(new Color(150,40,50); g.draw3DRect(30,63,34,86,true); g.setColor(new Color(150,40,50); g.draw3DRect(66,63,34,86,true); g.setColor(new Color(150,150,40); for(int i=0;i=50;ElePositionPix-) g.drawImage(Elevator_Image,50,ElePositionPix,this); try Thread.sleep(100); catch(InterruptedException e) showStatus(e.toString(); else if(flag=1) for(;ElePositionPix=200;ElePositionPix+) g.drawImage(Elevator_Image,50,ElePositionPix,this); try Thread.sleep(100); catch(InterruptedException e) showStatus(e.toString(); 实训内容三 实现电梯控制仿真界面设计 实训目的(1) 学会使用各种容器组建,重点掌握Applet和Panel容器的使用。(2) 学会流式布局、网格布局、边框布局和网格袋布局这4种布局方式的界面设计。实训要求 为了实现电梯控制的防真,需要设计出与实际电梯运行相似的界面,这个范例就是为实现电梯控制防真而设计一个界面。如图6-2所示。将这个界面分成3部分来看,左边部分代表一座楼,颜色深浅分别代表不同的楼层,F1F6分别表示一楼到六楼,每个楼层都有标识着向上和向下箭头的按钮,分别表示上行和下行按钮;中间部分是电梯通道,绿色的方形图片表示电梯;界面的右边部分包含着“启动电梯”按钮、“关闭电梯”按钮、电梯位置指示、电梯内的楼层按钮板。 实训指导(1)设置HTML文件中的Applet的显示尺寸width和height为合适的值,如290和400。方法如下:选择HTML文件,用鼠标右击打开弹出菜单,单击Open菜单选项,在代码编辑窗口中打开HTML文件。然后选择Source选项卡,此时将看到一块灰色的区域,即Applet的显示区域,在该区域上用鼠标右击打开弹出菜单,选择Always View AsText菜单项,以文本方式显示该区域的代码,修改width和height参数即可。(2)回到Java Applet程序,向Applet容器设置成网格袋布局方式,添加3个Panel将界面从左到右分成3部分,并且使得右边和左边的Panel纵横都向外扩充,而中间部分的Panel不扩充。(3) 将左部分的面板设置成网格布局方式,并在这个面板中添加6个子面板,将这6个面板反别设置成不同的颜色,代表6个楼层。(4) 将这6个子面板设置成流式布局方式,并分别向这6个面板添加楼层标示和上行和下行按钮。(5) 将右部分的面板设置成网格布局方式,添加两个子面板将其分成上下两部分并分别设置背景和颜色;将上部分的子面板设置成网格布局方式,向其中添加如图6-2所示的启动、关闭和状态显示信息;将下部分面板设置成边框布局方式,并向其中添加相应的控制按钮。(6) 装入电梯模拟图片,在Applet的合适位置显示该图片。实现此布局的完整程序代码如下:import java.awt.*;import java.applet.*;public class Applet3 extends java.applet.Applet Panel Floor_Panel=new Panel(); Panel Elevator_Panel=new Panel(); Panel Indication_Panel=new Panel(); Panel Floor1_Panel=new Panel(); Panel Floor2_Panel=new Panel(); Panel Floor3_Panel=new Panel(); Panel Floor4_Panel=new Panel(); Panel Floor5_Panel=new Panel(); Panel Floor6_Panel=new Panel(); Label FloorLabel1=new Label(F1); Label FloorLabel2=new Label(F2); Label FloorLabel3=new Label(F3); Label FloorLabel4=new Label(F4); Label FloorLabel5=new Label(F5); Label FloorLabel6=new Label(F6); FloorButton UpButton1=new FloorButton(1,true,); FloorButton DnButton1=new FloorButton(1,false,); FloorButton UpButton2=new FloorButton(2,true,); FloorButton DnButton2=new FloorButton(2,false,); FloorButton UpButton3=new FloorButton(3,true,); FloorButton DnButton3=new FloorButton(3,false,); FloorButton UpButton4=new FloorButton(4,true,); FloorButton DnButton4=new FloorButton(4,false,); FloorButton UpButton5=new FloorButton(5,true,); FloorButton DnButton5=new FloorButton(5,false,); FloorButton UpButton6=new FloorButton(6,true,); FloorButton DnButton6=new FloorButton(6,false,); Panel SubInd_Panel1=new Panel(); Panel SubInd_Panel2=new Panel(); Panel SubInd_Panel3=new Panel(); Button Start_Button=new Button(启动电梯); Button Stop_Button=new Button(关闭电梯); Label Indication_Prompt=new Label(电梯所在层); Label State_Prompt=new Label(电梯状态); Label Indication_Light=new Label(1层); Label State_Light=new Label(停止); Label ETitleLabel=new Label(电梯内楼层按钮板); Label EastLabel=new Label(); Label WestLabel=new Label(); Label SouthLabel=new Label(); DesFlButton DesFl_Button1=new DesFlButton(1,1); DesFlButton DesFl_Button2=new DesFlButton(2,2); DesFlButton DesFl_Button3=new DesFlButton(3,3); DesFlButton DesFl_Button4=new DesFlButton(4,4); DesFlButton DesFl_Button5=new DesFlButton(5,5); DesFlButton DesFl_Button6=new DesFlButton(6,6); Image eImage; public void init() GridBagLayout gbl=new GridBagLayout(); GridBagConstraints gbc=new GridBagConstraints(); setLayout(gbl); gbc.gridx=0;gbc.gridy=0; gbc.gridwidth=1; gbc.gridheight=1; gbc.fill=GridBagConstraints.BOTH; gbc.anchor=GridBagConstraints.WEST; gbc.weightx=1;gbc.weighty=1; gbc.insets=new Insets(0,0,0,0); gbl.setConstraints(Floor_Panel,gbc); add(Floor_Panel); gbc.gridx=1;gbc.gridy=0; gbc.gridwidth=1; gbc.gridheight=1; gbc.fill=GridBagConstraints.HORIZONTAL; gbc.anchor=GridBagConstraints.NORTHWEST; gbc.weightx=1;gbc.weighty=1; gbc.insets=new Insets(0,0,0,0); gbl.setConstraints(Elevator_Panel,gbc); add(Elevator_Panel); gbc.gridx=2;gbc.gridy=0; gbc.gridwidth=1; gbc.gridheight=1; gbc.fill=GridBagConstraints.BOTH; gbc.anchor=GridBagConstraints.EAST; gbc.weightx=1;gbc.weighty=1; gbc.insets=new Insets(0,0,0,0); gbl.setConstraints(Indication_Panel,gbc); add(Indication_Panel); Floor_Panel.setLayout(new GridLayout(6,1); Floor6_Panel.setBackground(new Color(50,220,220); Floor5_Panel.setBackground(new Color(50,190,190); Floor4_Panel.setBackground(new Color(50,160,160); Floor3_Panel.setBackground(new Color(50,130,130); Floor2_Panel.setBackground(new Color(50,100,100); Floor1_Panel.setBackground(new Color(50,70,70); Floor_Panel.add(Floor6_Panel); Floor_Panel.add(Floor5_Panel); Floor_Panel.add(Floor4_Panel); Floor_Panel.add(Floor3_Panel); Floor_Panel.add(Floor2_Panel); Floor_Panel.add(Floor1_Panel); Floor1_Panel.setLayout(new FlowLayout(FlowLayout.RIGHT); FloorLabel1.setForeground(new Color(255,0,0); FloorLabel1.setFont(new Font(TimesRoman,Font.BOLD,18); UpButton1.setCursor(new Cursor(Cursor.HAND_CURSOR); UpButton1.setFont(new Font(TimesRoman,Font.BOLD,10); DnButton1.setCursor(new Cursor(Cursor.HAND_CURSOR); DnButton1.setFont(new Font(TimesRoman,Font.BOLD,10); DnButton1.setEnabled(false); Floor1_Panel.add(FloorLabel1); Floor1_Panel.add(UpButton1); Floor1_Panel.add(DnButton1); Floor2_Panel.setLayout(new FlowLayout(FlowLayout.RIGHT); FloorLabel2.setForeground(new Color(255,0,0); FloorLabel2.setFont(new Font(TimesRoman,Font.BOLD,18); UpButton2.setCursor(new Cursor(Cursor.HAND_CURSOR); UpButton2.setFont(new Font(TimesRoman,Font.BOLD,10); DnButton2.setCursor(new Cursor(Cursor.HAND_CURSOR); DnButton2.setFont(new Font(TimesRoman,Font.BOLD,10); Floor2_Panel.add(FloorLabel2); Floor2_Panel.add(UpButton2); Floor2_Panel.add(DnButton2); Floor3_Panel.setLayout(new FlowLayout(FlowLayout.RIGHT); FloorLabel3.setForeground(new Color(255,0,0); FloorLabel3.setFont(new Font(TimesRoman,Font.BOLD,18); UpButton3.setCursor(new Cursor(Cursor.HAND_CURSOR); UpButton3.setFont(new Font(TimesRoman,Font.BOLD,10); DnButton3.setCursor(new Cursor(Cursor.HAND_CURSOR); DnButton3.setFont(new Font(TimesRoman,Font.BOLD,10); Floor3_Panel.add(FloorLabel3); Floor3_Panel.add(UpButton3); Floor3_Panel.add(DnButton3); Floor4_Panel.setLayout(new FlowLayout(FlowLayout.RIGHT); FloorLabel4.setForeground(new Color(255,0,0); FloorLabel4.setFont(new Font(TimesRoman,Font.BOLD,18); UpButton4.setCursor(new Cursor(Cursor.HAND_CURSOR); UpButton4.setFont(new Font(TimesRoman,Font.BOLD,10); DnButton4.setCursor(new Cursor(Cursor.HAND_CURSOR); DnButton4.setFont(new Font(TimesRoman,Font.BOLD,10); Floor4_Panel.add(FloorLabel4); Floor4_Panel.add(UpButton4); Floor4_Panel.add(DnButton4); Floor5_Panel.setLayout(new FlowLayout(FlowLayout.RIGHT); FloorLabel5.setForeground(new Color(255,0,0); FloorLabel5.setFont(new Font(TimesRoman,Font.BOLD,18); UpButton5.setCursor(new Cursor(Cursor.HAND_CURSO

温馨提示

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

评论

0/150

提交评论