实习指导书-第三章-基于C#.NET的程序设计与开发_第1页
实习指导书-第三章-基于C#.NET的程序设计与开发_第2页
实习指导书-第三章-基于C#.NET的程序设计与开发_第3页
实习指导书-第三章-基于C#.NET的程序设计与开发_第4页
实习指导书-第三章-基于C#.NET的程序设计与开发_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上第三章 基于C#.NET的程序设计与开发在这一部分中,您将从零开始学习应用C#.NET进行Windows编程的相关知识。即使您以前没有接触过C#.NET,没有接触过C#语言,也无需担心,相信通过这一章的学习,您能迅速迈进Visual C#.NET 的编程大门。在这一章中,我们将首先介绍Visual Studio 2005 编程环境,随后介绍C#语言,之后重点介绍几个常用控件,再以一些简单的实例来展示具体的操作办法,最后留出相关问题供您思考拓展。1 Visual Studio 2005 IDE 简介这这一节中,您将了解到Visual Studio 2005 集成编译环境

2、(Integrated Development Environment,IDE)的基本布局及其主要功能,方便之后的程序设计。首先启动Visual Studio 2005,界面如图3.1所示。图3.1 Visual Studio 2005启动界面点击菜单栏上的“文件”>“新建项目”,在项目类型中选择Visual C#的“Windows应用程序”,如图3.2所示。图3.2 新建项目对话框在此之后进入了C#.NET集成开发环境,如图3.3所示。展示在我们面前的就是一个常规布局,下面我们来认识一下各部分的功能。图3.3 C#.net集成开发环境布局1.1 菜单栏菜单栏位于窗口的正上方(在标题栏的

3、下面),包含了C#.NET 中的所有命令,下面我们分别来看一下各菜单的主要功能。文件:每个Windows 程序几乎都有文件菜单。它已经成为一个标准。这个菜单中还有新建、打开和关闭单个文件和整个项目的命令选项。编辑:编辑菜单提供的选项有撤消、重复、剪切、复制、粘贴、删除、查找等。视图:视图菜单可以快速访问构成IDE的各种窗口,如解决方案资源管理器,属性窗口,输出窗口和工具箱等。项目:项目菜单允许在应用程序中添加各种文件,如窗体和类。生成:当编写完程序后,希望在不适用C#.NET 环境的情况下运用它时,就应使用生成菜单。调试:调试菜单允许在C#.NET IDE 中启动和停止运行应用程序。它也允许访

4、问C#.NET调试器,而调试器允许单步执行代码,观察它的执行情况。数据:数据菜单可使用数据库中的信息。格式:格式菜单中的命令选项可管理如何把所创建的控件显示到窗体上。工具:工具菜单中有配置 C#.NET IDE 的命令,以及到其他已安装的外部工具的链接。窗口:窗口菜单也是标准的,它允许像Word 和Excel 那样同时打开多个窗口。这个菜单中的命令允许在IDE中切换窗口。帮助:利用帮助菜单可以访问Visual Studio.NET的帮助文档,访问该文档有多种方式,如通过目录、索引或者搜索。1.2 工具栏工具栏位于菜单栏的正下方,IDE中有许多工具栏,包括格式、图像编辑和文本编辑等,这些工具栏可

5、通过“视图”菜单下的“工具栏”菜单选项在IDE中添加或删除。每个工具栏都提供了对常用命令的快速访问,而不必选择相应的菜单选项。当鼠标在某个工具上悬停的时候,则会出现对该命令的解释。1.3 工具箱在IDE 的左侧或者右侧,有一个竖直排布的按钮(工具箱),单击,可以弹出以下界面,如果没有该按钮则可以通过点击“视图”->“工具栏”使之显示出来,如图3.4所示。图3.4 工具箱工具箱中包含了能够运用到 Windows编程中的所有控件,除了Windows默认的一些标准控件之外,您还可以添加一些自定义控件或者第三方控件(如我们后面将要使用到的ArcGIS控件)。1.4 解决方案管理器解决方案资源管理

6、器位于IDE 的右上方,这是一个展示了整个工程的树结构,如图3.5所示。如果没有,点击工具栏上的“解决方案资源管理器”按钮弹出,如图3.6所示。从解决方案工程管理器中可以清楚的看到各窗体(Form)的名字,类的名字,模块以及包含的资源、引用等。图3.5 解决方案管理器图3.6 “解决方案资源管理器”工具1.5 属性窗口属性窗口位于IDE的右下方,它随着当前选择控件的变化而变化。在属性窗口中能快速调整各控件的属性,如控件的名称、显示文字、颜色、大小、位置等,如图3.7所示。图3.7 属性窗口1.6 文档大纲点击通过如图3.8所示的文档大纲的工具按钮,弹出文档大纲,如图3.9所示。 图3.8 “文

7、档大纲”的工具按钮文档大纲用于显示控件与控件的层次关系,通过文档大纲可以很方便地查看到父控件和该控件的子控件。 图3.9 文档大纲2 C#语言简介C#(C sharp)是微软(Microsoft)在2000年6月发布的一种新的编程语言,是微软为.NET Framework量身订做的程序语言,C#拥有C/C+的强大功能以及Visual Basic简单易用的特性,是第一个组件导向(Component-oriented)的程序语言,和C+和Java一样亦为对象导向(object-oriented)的程序语言。C#看起来与Java有着惊人的相似:它包括了诸如单一继承、界面,与Java几乎同样的语法,和

8、编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。C#语言定义主要是从C和C+继承而来的,而且语言中的许多元素也反映了这一点。例如定义变量、关系运算等。如果你有C或者C+的基础,那么学习C#语言就相对容易了。12.1 变量声明声明变量就是指定变量的名称和类型。C#变量声明由一个类型和跟在后面的一个或多个变量组成,多个变量之间需用逗号分开,声明以分号结束。在声明变量时,还可以初始化变量。C#变量名是一种标识符,需要符合标识符的命名规则。变量名是区分大小写的,基本的变量名命名规则包括:变量只

9、能由字母、数字或下划线组成;变量名的第一个符号不能是数字;不能使用关键字作变量名;一旦在一个语句块中定义了一个变量,在其作用域内就不能再定义同名变量,否则将发生编译错误。double dblV1, dblV2;/局部变量的声明int intVal = 835; /局部变量的声明并赋值int intVal = 835; /局部变量的声明并赋值public string mFormName;/公有成员变量的声明private string mFormName;/私有成员变量的声明protected string mFormName;/保护成员变量的声明2.2 表达式与运算符表达式是由运算符(Ope

10、rator)和操作数(operand)构成的序列。运算符指示对操作数进行何种运算。例如,+、-、*、/和new都是运算符。操作数是指计算机指令中进行数字运算的量,例如:在比较指令中,操作数则指定进行比较的两个数值,包括文本、常量、变量和表达式。在C#中,若表达式最终的计算结果为所需的类型值,表达式就可以出现在需要值或对象的任意位置,如下面的示例代码:double dblV1 = 123.45;double dblV2 = 24.312;double dblV3 = Math.Sqrt(dblV1 * dblV1 + dblV2 * dblV2);MessageBox.Show(dblV3.To

11、String(), "信息提示");表达式dblV1 * dblV1 + dblV2 * dblV2作为方法Math.Sqrt的参数使用,表达式dblV3.ToString()又是方法MessageBox的参数。表达式包括常量表达式、布尔表达式等。运算符是专门用来处理数据运算的特殊符号,对操作数进行运算,并产生运算结果。运算符包括基本运算符(.、( )、 、+、-、new、sizeof、typeof、checked和unchecked等)、赋值运算符(=、+=、-=、*=、/=、%=、&=、|=、=、<<=和>>=)、算术运算符(+、-、*、

12、/和%)、关系运算符(=、!=、>、<、>=和<=)、逻辑运算符等(与(&)、或(|)、异或()和取补()、移位运算符(左移位运算符<<和右移位运算符>>)和三元运算符(?:)等。2.3 条件语句if引导的条件语句:格式: if(表达式1) 语句1;说明:如果表达式1成立则执行语句1,否则不执行语句1。例子: if(x > 0) y = 10;if-else 语句:格式: if(表达式1) 语句1; else 语句2;说明:如果表达式1成立则执行语句1,否则执行语句2。例子: if(x > 0) y = 10; else y

13、= 5;if-else if-else语句:格式: if(表达式1) 语句1; else if(表达式2) 语句2; else 语句n;说明:这种格式是从上到下逐个对表达式判断,一旦发现条件满足的表达式,就执行相关的语句,并跳出判断,如果都不满足则执行else相应的语句。例子: if(x > 0) y = 10; else if(x = 0) y = 5;else y = 1;switch-case语句:格式: switch(变量x) case 常量1: 语句1; case 常量2: 语句2; default:语句n; 说明:这种格式是从上到下逐个将变量x与case后的常量比较,一旦发现

14、变量x与某个case后的常量相等,则从该语句向后执行(注意,如果没有break,后面的case语句都会执行),如果没有与变量x相等的常量,的执行default后的语句。例子: switch(k) case 1: y = 1; break; case 2: y = 10; break; case 3: y = 100; break; default: y = 0; 2.4 循环语句for循环语句:格式: for(表达式1, 表达式2, 表达式3) 循环体内语句;说明:先对表达式1赋初值; 判别表达式2是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行表达式3,进入第二次循环

15、,再判别表达式2;否则判断表达式2的值为假,不满足条件,就终止for循环,执行循环体外语句。例子: for(i = 0; i < 100; i+) sum += i;while语句:格式: while(表达式) 循环体内语句;说明:这里的表达式是循环能否继续下去的条件。只要表达式为真,则执行循环体内语句。否则终止循环,执行循环体外语句。例子: while(i < 100) sum += i;i+;do-while语句:格式: do 循环体内语句; while(表达式)说明:程序进入do-while循环后,先执行循环体内语句,然后判断表达式的真假,若为真则进行下一次循环,否则为假则终

16、止循环。该循环语句的特点是:表达式为假时也执行一次循环体内语句。例子: do sum += i;i+; while(i < 100)2.5 函数C#和C+对于函数的定义和使用有很多相同之处,对于这些相同之处不需要一一做详细的介绍,具体请参阅C#入门经典这本书(这是一本曾成就无数C#程序员的经典名著,最新版为第5版,2010年12月出版,定价99.8元),该节主要介绍C#特有的特点。(1)函数参数引用传递与值传递C#对函数参数做了更明确的标示,使得程序更加清晰可读,通过使用in和out关键字说明了参数的作用,in修饰的参数在形参和实参结合的时候会生成副本,这样对形参的修改就不会对实参产生影

17、响(副作用),因为这个函数内部使用的不是实参而是生成的那个副本。out关键字函数对形参的修改会对实参产生副作用的,这样out的意思就是说我要用这个参数作为返回值。这点和C+引用传递的语义是类似的,函数对参数的修改会反映在实参上,这样我就可以得到最终变化的结果,其语义就是return的作用一样。如果没有in、out修饰则默认是in.如下面两个函数:public void InternalMagic(int x) 函数1 x+=100; public void InternalMagic(in int x) 函数2 x+=100; public void InternalMagic(out int

18、 x) 函数3 x+=100; 函数1和函数2是一样的,函数3则不同,当调用函数1的时候,传入的参数不会改变,而调用函数3时,传入的参数会自增100.2.函数的委托委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性,在C#中使用delegate关键字定义委托,然后使用我们熟悉的函数调用的语法来调用委托。如下代码所示:public delegate void Del(string message);/定义一个委托/创建一个和委托相似的函数(参数,

19、返回值类型和个数相同)public static void DelegateMethod(string message) System.Console.WriteLine(message);/使用委托/ 生那么一个委托.Del handler = DelegateMethod;/ 使用委托.handler("Hello World");2.6 面向对象C#是一种完全面向对象的语言,他和C+一样具有类、对象、继承、多态等特点。与C+不同的是C#不支持多重继承。另外,C#多了接口的概念。接口只包含方法、属性、索引器(有参属性)、事件四种成员。方法的实现是在实现接口的类中完成的,

20、如下面的示例所示:/定义接口interface ISampleInterface void SampleMethod(); /声明接口的方法 /接口的实现体class ImplementationClass : ISampleInterface / Explicit interface member implementation: void ISampleInterface.SampleMethod() / Method implementation. static void Main() / Declare an interface instance. ISampleInterface ob

21、j = new ImplementationClass(); / Call the member. obj.SampleMethod(); C#接口的接口弥补了C#在多继承下的不足,使得C#在面向对象方面更加完善。要想了解更多的关于C#面向对象的知识请参阅C#入门经典。3 窗体及其控件简介在这一小节中,您将接触到几个C#.NET 编程中常用的控件及其主要属性。23.1 窗体(Form控件)Form 表示组成应用程序的用户界面的窗口或对话框。如图3.10所示,即为一个窗体:图3.10 窗体(Form控件)在 C#.NET IDE中,支持可视化的编辑,这让程序员将更多的精力放在程序本身的编写上,而

22、不用花费太大的精力到界面的设计。在IDE 中,支持“所见即所得”的模式,也就是说,在编辑过程中各控件的位置与程序实际运行中的位置是一样的(使用程序代码控制控件的属性,如尺寸、位置及可见性等除外)。在编辑过程中,Form 中可以放置不同的控件,用来构建应用程序。需要插入新的窗体,可以点击菜单栏中的“项目”>“添加Windows 窗体”,选择“Windows窗体”添加一个新的窗体。若需要修改已有的窗体名称,则在解决方案资源管理器中修改(与Windows 中修改文件名类似)。单击Form,将其激活,点击右键,转到属性窗口,可以看到Form的属性,如图3.11所示。图3.11 窗体的属性在 Fo

23、rm 的属性中,Text 属性表示窗体的显示名称;TopMost 控制窗体是否总是位于应用程序最上方;StartPosition 控制窗体生成的时候出现在屏幕上的位置;FormBorderStyle控制窗体的样式等。具体Form的属性及时间等信息,请参阅MSDN中的相关定义及解释。除此之外,在属性窗口中还可以对窗体添加事件,例如鼠标单击、双击事件,捕获键盘和窗口退出等事件。点击属性对话框中的按钮即可对窗口添加事件,如图3.12。图3.12 窗口的事件图3.12中列出了与Form控件相关的所有事件,每个事件代表什么请查阅MSDN,在事件填入相应的函数(函数的名称要符合C#函数的命名规则)则会自动

24、为该窗体添加相应的函数,如Click事件的事件处理函数是OnClick,Form1窗体类中会自动生成一个OnClick函数。3.2 Label 控件Label控件用于显示文字、提示、输出结果等,是C#编程中常用的控件之一。如图3.13所示。图3.13 任务管理器中的label控件 在Windows任务管理器中的句柄数、线程数、进程数和物理内存中的总数、可用数和系统缓存等都是典型的Label控件。从工具箱的“公共控件”中点击Label控件,并将其拖入到Form窗体中,并放入适当的位置,即可在窗体中显示Label控件。与Form窗体一样,点击Label控件使其进入激活状态,就可以在属性窗口中更改L

25、abel的属性,其中Text属性是该Label控件显示的内容,是Label控件最常用的属性,同时还可以为Label控件添加事件,其方法和Form控件相似。3.3 Button控件Button控件是按钮控件,是C#编程中常用的控件之一,它主要用于制作各种类型的按钮,如图3.14所示。图3.14 Windows计算器中的按钮其中按钮属性中最常用的是Text,该属性用于设置按钮上显示的内容,最常见的事件是Click事件,该事件是处理按钮按下后的事件。3.4 TextBox 控件TextBox控件是文本框控件,既可以用来接受用户输入,也可以用来做结果输出。如图3.15所示。图3.15 TextBox控

26、件图3.15中右边控件为文本框控件,用于接收用户的输入,如果要得到用户的输入数据,则可以访问该文本框控件的Text属性,另外还可以接收文件框得到或者失去焦点的事件等。3.5 菜单控件菜单控件分为两类,一类是界面菜单,另一类是上下文菜单,界面菜单一般位于程序的上面,包括文件、编辑、视图等,上下文菜单一般是当鼠标右键按下弹出的右键菜单,如图3.16所示。 图3.16 界面菜单(左)和上下文菜单(右)C#中的界面菜单和上下文菜单是用不同的控件来表示的,界面菜单是MenuStrip控件,上下文菜单是ContextMenuStrip控件。下面对它们的用法一一介绍。(1)MenuStrip的用法:从工具箱

27、的“菜单和工具栏”中点击MenuStrip控件,然后再点击或者拖动到目标Form控件中去,即可以为该Form控件添加一个界面菜单。一般界面菜单都在Form控件的最上方,也可以通过改变MenuStrip的Dock属性来改变MenuStrip控件的位置。Dock属性包括Top、Bottom、Left、Right、Fill和None六种选择,分别代表将该控件放置在父控件的上方、下方、左方、右方、充满父控件和不设置。一旦创建了MenuStrip就可以创建菜单项,菜单项分为五种类型,一种是ToolStripMenuStrip,该类型就是最常用的一种菜单类型,它类似于按钮,按下即可触发特定的菜单事件。如图

28、3.17中的“安全性设置(E)”就是ToolStripMenuStrip类型的菜单项。除此之外,还有MenuStrip、ComboBox、TextBox和Separator类型的菜单项,可以通过点击菜单项后面的三角符号选择菜单项的类型。图3.17 ToolStripMenuStrip类型的菜单项图3.18 选择菜单项类型其中MenuStrip表示级联菜单,如图3.18。ComboBox表示将菜单项改成如复选框类型的菜单项,TextBox是将菜单项改成可输入的文本编辑框,而Separator是将该菜单项目改成菜单分隔符,双击该菜单项,即可为该菜单项加入一个单击事件,按delete键可以将该菜单项

29、删除。(2)ContextMenuStrip的用法:ContextMenuStrip菜单项的添加、编辑和为菜单项添加事件与MenuStrip相同,它与MenuStrip不同的是弹出的时机不同,它需要当鼠标右击的时候弹出。此时只需要设置窗体控件中的ContextMenuStrip属性为新建的ContextMenuStrip对象名称就可以了,如图3.19所示。图3.19 设置窗体的ContextMenuStrip属性3.6 ToolStrip 控件ToolStrip控件就是工具条控件,通过它可以制作各式各样的工具条,与菜单项类似,工具条上的工具项也有很多类型,它可以是按钮,可以是复选框,可以是文本

30、框,也可以是一个进度条等。如图3.20所示。图3.20 不同类型的工具项其中button类型的工具项是在工具条上添加一个按钮,注意一般工具条上的按钮都是有图标的,因此,必须要为工具条的上的按钮指定Image属性。Image属性可以从磁盘文件中导入图片资源,也可以用项目自带的图片资源。Label类型的工具项是在工具条中加入一个Label对象。其他的如SplitButton、DropDownButton、Separator、ComboBox、TextBox和ProgressBar请查阅MSDN或者亲自试验一下。在此不需一一累述。3.7 常用对话框C#还提供了一些常用的对话框,如打开对话框、保存对话

31、框、字体选择对话框和颜色对话框等。不需要对这些对话框重新设计,只需要将这些对话框控件拖入到目标窗体中直接调用即可。下面着重讲述一下打开对话框的使用方法,其他对话框的使用方法与此相同,不需要一一累述。第一步:设置对话框的弹出事件。在此,我们用一个按钮事件来表示,即点击按钮弹出打开对话框,在目标窗口Form1控件中加入一个按钮控件,将按钮控件的Text属性改为“打开对话框”,同时将“设计”中的Name属性改为” OpenDialog”(此步骤可以不要,如果不要,系统会自动生成一个随机的无意义名字,建议将其改成一个有意义的名称),如图3.21。图3.21 “打开对话框”按钮第二步:从工具箱中对话框选

32、项中选择OpenFileDialog控件,并将“设计”中的Name属性改为“mOpenFileDialog”。第三步:双击“打开对话框”按钮,进入该按钮的单击事件,在该事件中显示打开对话框。其中FileName记录了打开对话框中选中的文件,另外OpenFileDialog控件还支持多选,只需要将OpenFileDialog属性中的Multiselect属性改为“true”就行了,在多选的情况下,要得到选择的所用文件就要访问OpenFileDialog对象的FileNames变量,而不能访问FileName变量,FileName只能在单选条件下使用。4 计算器的制作14.1 界面的制作如图3.2

33、2为即将设计的实验程序的界面。图3.22 计算器界面 根据图3.22界面的布局将菜单、按钮和文本框控件加入的合适的位置。为了使得按钮的大小相同,按钮之间排列整齐,需要用到布局工具条,如图3.23。图3.23 布局工具条布局工具条主要提供了控件与控件之间的大小相同、左对齐、右对齐和居中对齐等功能。选中多个控件(拉框选择或者按着Ctrl键逐个点选),点击“左对齐”按钮,则选中的控件就会自动左对齐;点击“使得大小相同”按钮,则选中的控件就会自动设置为相同的大小。更改按钮控件的ForeColor属性可以设置按钮显示文字的颜色,如图3.22中“Backspace”按钮的文本颜色是红色,则可以选中Back

34、space按钮,在属性窗口中找到ForeColor属性设置颜色就可以了。禁用输入文本框的键盘输入功能:选中文本框,为文本框添加一个KeyPress事件。在KeyPress事件中取消键盘输入。这时,通过键盘输入的字符无法显示在文本框中。其代码如下:/不允许显示文本框键盘输入private void OnKeyPress(object sender, KeyPressEventArgs e)/取消输入e.Handled = true;使文本框的文字显示在右侧,默认情况下,文本框的文字显示在左侧,为了使文本框的文字显示在右侧,要设置文本框的TextAlign属性为Right。4.2 命名规则和添加事

35、件为了增加代码的可读性以及方便后续代码的编写,强烈建议为每个按钮命一个有意义的名字,不要用Virsual Studio 2005直接随机生成的名字,本程序的控件的命名如表3.1。表3.1 计算器控件命名控件名称mOutput-mNum0-mNum9mPositivemPointmDividemMultiplymSubtractmAddmSqrtmModmReciprocalmEqualmBackSpacemClearAbout为所有的按钮添加Click事件,双击按钮即可为按钮自动添加Click事件,也可以通过属性窗口的事件页面来添加事件。4.3 数字键输入事件的处理由于数字键0-9按钮的处理是

36、一样的,所不同仅仅是传入的字符参数不同,如0号数字键传入的字符是“0”,因此可以把所有数字键放在一个函数中统一处理。在处理数字键事件的时候要考虑以下两个问题:(1) 当按下了符号键(+,-,*,/,%,=),要先将mOutput控件中的数据清空。(2)追加字符的位置,当按下小数点键的时候,要将字符追加到mOutput显示字符的末尾,如果没有按下小数点键,则将字符追加到小数点前一位。弄清了以上两个问题后,数字键输入事件的处理就好办了,其代码如下: /*/ /* 数字键0-9按下事件 */ /*/ private void mNum0_Click(object sender, EventArgs

37、e) NumberKeyDown("0"); private void mNum1_Click(object sender, EventArgs e) NumberKeyDown("1"); / 2-9 数字键与上述相同 /*/ /* 处理数字键按下事件,其中参数key记录按下了那个数字键 */ /*/ private void NumberKeyDown(string key) if (mSignPress)/等号键是否按下,如果按下则将mOutput中的内容清空 mOutput.Text = "0." mSignPress = f

38、alse; /得到文本框的内容 string outString = mOutput.Text; if(mPointPress)/小数点键已经按下,在小数点后追加数字 outString += key; else/小数点键没有按下,在小数点前追加数字 /小数点在字符串中的位置 int pos = outString.IndexOf('.'); /得到最高位数字 string highest = outString.Substring(0, 1); /得到小数点前的字符串 string priString = outString.Substring(0, pos); /得到小数点后的字符串 string nextString = outString.Substring(pos+1); /字符转整型 int intigrate = int.Parse(highest); if (intigrate = 0)/最高位数字为0,则替换整数部分 priString = key; else/最高位数字不为0,则向后追加 priString += key; /整合成输出结果 outString = priString + ".&qu

温馨提示

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

评论

0/150

提交评论