PHP程序设计项目化教程课件 项目8 购物车系统-面向对象程序设计_第1页
PHP程序设计项目化教程课件 项目8 购物车系统-面向对象程序设计_第2页
PHP程序设计项目化教程课件 项目8 购物车系统-面向对象程序设计_第3页
PHP程序设计项目化教程课件 项目8 购物车系统-面向对象程序设计_第4页
PHP程序设计项目化教程课件 项目8 购物车系统-面向对象程序设计_第5页
已阅读5页,还剩81页未读 继续免费阅读

VIP免费下载

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

文档简介

购物车系统

——面向对象程序设计

项目8张华同学观察到购买学习资料和生活用品流程烦琐、等待时间长,他提出了开发一个便捷校园购物系统的想‍法。为提高系统运营效率,尤其是库存和销售管理,张华选择利用面向对象程序设计技术来构建一个模块化、可扩展且易维护的购物车系统。此系统旨在让用户轻松添加、删除商品,并实时查看购物车内商品的总‍价。通过这个系统的实现,能够为同学们带来便捷的购物体验,节省时间,丰富校园生活。购物车系统熟悉面向对象的思想,了解面向过程和面向对象程序设计思想的差异;掌握类与对象的使用方法,包括类的定义和实例化方法、类成员的访问方法等;了解常见的魔术方法,掌握构造方法和析构方法的用法;掌握类常量和静态成员的定义和访问;了解面向对象的三大特性,掌握封装、继承、多态的实现方法;掌握抽象类和接口的定义和实现。能够编写遵循面向对象原则的代码:涵盖类的设计、方法的实现以及对象的使用;能够熟练运用封装、继承、多态三大特性设计程序;能够根据实际需求应用抽象类和接口。培养良好的面向对象程序设计习惯,编写出更加模块化、可扩展和易于维护的代码;提高问题解决能力,能够运用面向对象的方法分析和解决复杂问题;培养创新思维,能够运用面向对象知识解决实际问题,为软件开发和系统管理贡献力量。面向对象类和对象魔术方法类常量和静态成员面向对象的特性抽象类和接口面向对象PART01PHP是一种功能强大的混合型程序设计语言,它支持面向对象程序设计和面向过程程序设计两种范式。对于简单的脚本和小型应用,使用面向过程的程序设计范式可能更加直观和高效。然而,在处理大型、复杂的项目时,面向对象程序设计展现出了其独特的优‍势。8.1面向对象面向过程就是按照一系列步骤去解决问题,这些步骤通常是按照特定的顺序执行函数,以实现所需功能。面向对象程序设计采用了一种更符合人类思维方式的方法来解决问题。在面向对象程序设计中,我们分析问题中的对象,并定义它们的特性(属性)和行为(方法),对象之间通过信息传递进行交互,共同完成任务。面向过程与面向对象在思维方式上有着本质的区别。在面向过程中,我们关注的是过程本身,扮演着执行者的角色;而在面向对象中,我们更关注对象,扮演着指挥官的角‍色。以日常生活中的洗衣服为例,面向过程的方法会关注洗衣的每一个具体步骤,面向对象的方法则更侧重于洗衣机这个对象及其提供的功能。8.1.1面向过程和面向对象的对比为了理解面向对象程序设计与面向过程程序设计两种范式,可以将它们比作餐饮中的两种不同制作方式:盖浇饭和蛋炒饭。使用面向对象程序设计能够更好地处理复杂问题,提高代码的可读性、可维护性和可扩展性。而面向过程程序设计更适合某些简单或性能敏感的场景。因此,在选择程序设计方法时,我们应充分考虑问题的特性和需求,以选择最适合的设计方案。8.1.2面向对象程序设计的优势代码重用性面向对象程序设计更像制作盖浇饭。在这种范式下,问题被分解为多个独立的对象(如不同的菜品和米饭),每个对象负责处理自己的数据和行为。这些对象之间通过接口进行通信,就像盖浇饭中的菜品和米饭灵活组合在一起。这种设计方式不仅提高了代码的可读性和可维护性,还使得程序更加易于扩展和重用。代码重用性面向过程程序设计就像制作蛋炒饭,各种成分(如鸡蛋、米饭、蔬菜等)紧密融合在一起,形成一个整体。在这种范式下,程序员详细规划每一步的操作顺序。然而,当问题变得复杂,或者需要添加新的功能时,这种方式可能会导致代码变得难以维护和扩展。面向对象程序设计的思维方式与我们的日常思维方式非常相似。比如,在描述一个人时,我们会考虑其姓名、性别、年龄等特征,以及行为如驾驶和烹饪等。在面向对象程序设计中,这些特征被称作属性,行为被称作方法。简而言之,面向对象程序设计允许我们将现实世界的事物抽象成对象,并为这些对象赋予属性和方法。8.1.3面向对象的核心概念1.类的概念类是具有相同属性和方法的一组对象的抽象描述。可以使用定义的类创建对象。在PHP中,通过类创建的对象称为对象实例,而创建对象的过程就是类的实例化过程。类是一个抽象的概念,对象则是这个抽象概念的具体实例。2.对象的概念在面向对象程序设计中,对象是来自客观世界的实体,如人类、书桌等。对象可分为静态部分(属性)和动态部分(方法)。属性是对象的静态特征,如人的身高、体重等;方法是对象的行为,如人的行走、说话等。在编程时,我们首先将现实世界的实体抽象为对象,再定义其属性和方法。8.1.3面向对象的核心概念3.对象的属性和方法对象包含两个核心要素:属性和方法。属性是描述对象特征的变量,也称为成员变量。方法是描述对象行为的函数。在PHP中,对象是属性和方法的集合,方法表示对象的行为,而属性表示对象的状态。通过访问和设置属性,以及调用方法,我们可以对对象进行各种操‍作。8.1.3面向对象的核心概念类和对象PART02在PHP中,使用class关键字定义类。类的成员主要包含属性(变量)和方法(函数)。属性用于描述对象的特征,例如人的姓名、年龄等。方法用于描述对象的行为,例如说话、走路等。声明类的语法格式如‍下。说明:类名:PHP的类名不区分大小写,但为了保持代码的一致性和可读性,通常采用大驼峰命名法,即每个单词的首字母大写。例如,Student表示学生类。属性列表:是多个属性的声明。方法列表:是多个方法的声明。通常,属性声明放在方法声明之前。类可以没有任何成员,也可只有属性或方‍法。8.2.1类的定义class类名{

...//属性列表

...//方法列表}Student类定义示例代码。8.2.1类的定义//定义一个学生类classStudent{

//成员属性

public$name="张华";

public$age=20;

//成员方法

publicfunctionshowInfo()

{

echo"ThisisStudentclass.";

}}PHP提供了3种访问控制修饰符来设定类成员的可见性:public(公有),protected(受保护)和private(私有)。3种访问控制修饰符对应的权限属性如下表所示,其中,√表示允许访问,×表示不允许访‍问。说明:

public:声明公共的成员,在类的内部和外部都可以访问。如果成员不显式指定访问控制修饰符,则默认为public。protected:声明受保护类中的成员,只能在类的内部和子类访‍问。private:声明私有的类中的成员,只能在类的内部访问,不能被继‍承。8.2.2访问控制修饰符PHP类成员定义的示例代码如‍下。8.2.2访问控制修饰符classStudent{

public$id=1; //公共的成员属性,不受访问限制

protected$name="张三"; //受保护的成员属性,能在类内和子类中访问

private$age=20; //私有的成员属性,仅能在类内访问

publicfunctionshowInfo() //公共的成员方法

{

echo"Thisispublicmethod.";

}

privatefunctionprivateInfo() //私有的成员方法

{

echo"Thisisprivatemethod.";

}}在PHP中定义一个类之后,若要使用类的方法或属性,需要先实例化一个类,这个实例便是类中的对象。PHP中使用new关键字创建对象,实例化类的基本语法格式如‍下。

说明:$对象名:表示要创建的新实例的变量名,通过这个实例可以访问类中的成员。变量名要遵循PHP中变量的命名规范,尽量做到见名知‍义。new:表示创建一个新的对‍象。类名:表示要实例化的类的名称。类名后面括号包含的是可选参数的列表,用于初始化类的成员属性。如果在实例化类时,不需要传递参数,则可以省略类名后面的括‍号。8.2.3类的实例化$对象名=new类名([参数1,参数2,…]);例如,实现在8.2.1节定义的Student类的基础上创建两个学生对象并输出的代码如下。运行结果如下图所示。8.2.3类的实例化$stu1=newStudent();//实例化Student类,创建学生对象$stu1$stu2=newStudent();//实例化Student类,创建学生对象$stu2echo"<pre>";print_r($stu1);print_r($stu2);echo"</pre>";实例化一个类后,可使用对象访问符->访问对象实例的属性或方法,具体的语法格式如‍下。在对象方法执行时会自动定义一个$this特殊变量,表示对当前对象的引用。通过$this->的形式可引用当前对象的方法和属性,其作用是完成对象内部成员之间的访问。$this只能在类定义的方法中使用,不能在类定义的外部使‍用。8.2.4访问类的成员对象名->属性名; 对象名->方法名;类外部访问类的成员示例。8.2.4访问类的成员classStudent{public$name;publicfunctionsayHello(){return"你好!我是".$this->name;}}$stu1=newStudent(); //实例化对象$stu1->name="张阳"; //直接访问对象$stu1的name属性echo$stu1->sayHello(); //调用对象$stu1的sayHello()方法在学习编程时,有时会在类的成员方法中直接使用echo语句来输出文本,这样便于理解代码的运行结果。但在真正的项目开发中,更倾向于使用return语句来输出数据。1.提高可重用性当使用return语句时,方法可以返回一个具体的值。这个值既可以被直接赋给某个变量,也可以在其他地方使用。相比之下,echo语句只是简单地输出数据到浏览器。2.便于测试和调试使用return语句返回的值可以很方便地用于测试和调试。3.代码更清晰通常建议将业务逻辑(如计算、数据处理)与表示逻辑(如数据显示)分开。使用return语句就能很好地实现这一点。4.用途更广泛return语句返回的值不仅用于输出,它还有用于条件判断、保存到数据库或发送给客户端等多种用‍途。为何在类方法中使用return语句而非echo语句【案例实践8-1】类的实例化及类成员的访问定义Student

类,实例化它并访问其成员。【案例实践8-1】类的实例化及类成员的访问运行结果如下图所‍示。在PHP中,对象的比较方式与基本数据类型不同。当需要比较两个对象是否相等时,可以采用同一性比较或值比较两种方‍式。(1)同一性比较(===

!==)使用===和!==比较操作符时,比较的是两个变量是否为同一个实例,即它们是否引用同一个对‍象。(2)值比较(==

!=)使用==和!=比较操作符时,PHP会尝试进行值的比较。如果两个对象是同一个类的实例,且两个对象的属性和属性值相同,那么它们在值上被认为是相等‍的。如果需要确认两个变量是否确实指向同一个对象,应使用同一性比较;如果只关心两个对象的内容是否一致,可使用值比较。8.2.5对象的比较对象的比较示例。8.2.5对象的比较在PHP中,还可以使用instanceof关键字检查一个对象是否为某个类的实例,返回布尔值。instanceof关键字左边的变量表示对象,右边的变量表示类名。如果对象是指定类或其子类的实例,则返回true,否则返回false。8.2.5对象的比较var_dump($stu1instanceofStudent);//输出bool(true),因为$stu1是Student类的实例var_dump($stu1instanceofTest);//输出bool(false),因为$stu1不是Test类的实例魔术方法PART03在PHP中,魔术方法是一组特殊的类方法,指那些以两条下画线(__)开头预定义的方法。这些方法会在PHP脚本运行期间的不同时刻被自动调用,不需手动调‍用。8.3魔术方法魔术方法可以让开发者实现各种高级功能,如属性重载、方法重载、对象序列化、自定义对象字符串表达方式等。常见的魔术方法如下表所‍示。8.3.1常见的魔术方法每个类中都有一个构造方法,它在创建类的实例时自动调用,也就是使用new关键字来实例化对象时自动调用,常用于对象属性的初始化赋值或者执行一些必要的初始化操作。构造方法被命名为__construct(),其语法格式如下。上述语法格式中,访问控制修饰符可以省略,默认值为public。8.3.2构造方法[访问控制修饰符]function__construct([参数列表]){//初始化操作}构造方法示例。8.3.2构造方法如果类中没有显式定义构造方法,PHP会隐式地创建一个默认的构造方法。这个默认的构造方法不接收任何参数,也不执行任何操作,其形式大致如下。无显式定义构造方法的类示例。8.3.2构造方法publicfunction__construct(){//无操作}与构造方法对应的是析构方法,析构方法在对象被销毁之前自动调用。析构方法通常用于在对象销毁前执行一些清理操作,比如关闭文件句柄、释放资源或者执行一些需要在对象销毁时完成的特殊操作。析构方法被命名为__destruct(),且不接收任何参数。8.3.3析构方法[访问控制修饰符]function__destruct(){//清理操作}使用析构方法示例。8.3.3析构方法本案例实践实现了一个Person类,该类通过构造方法对属性进行初始化赋值,通过析构方法执行清理操作。【案例实践8-2】构造方法和析构方法的应用类常量和静态成员PART04在PHP中,类不仅可以定义普通的属性和方法,还可以包含类常量和静态成员。类常量是固定不变的值,而静态成员属于类本身,不属于任何一个类的实例,这两者都可以被类的所有实例共‍享。8.4类常量和静态成员类常量是在类中定义且值不会改变的常量。定义后,它在类的所有对象中都是相同的。类常量使用const关键字声明,并使用类名直接访问,基本语法格式如下。类常量的命名规范与普通常量的一致,通常以大写字母表示类常量名。类常量可以通过类名直接访问,即在类的内部或外部通过“类名::类常量名”的方式进行访问。::称为范围解析操作符,又称双冒‍号。8.4.1类常量const类常量名='常量值';示例:定义一个包含类常量的Circle类,并计算圆的周长和面积。8.4.1类常量除了类常量,静态成员在类的所有实例之间共享,可以通过类名直接访问,无须创建类的实例。静态成员有两种,分为静态属性和静态方法。在PHP中,静态成员使用static关键字定义。定义静态成员的基本语法格式如下。访问静态成员的基本语法格式如下。8.4.2静态成员publicstatic属性; //定义静态属性publicstatic方法(){}; //定义静态方法类名::属性名; //访问静态属性类名::方法名(); //调用静态方法示例:静态成员的用法。8.4.2静态成员类常量:通常用于定义不会更改的常量,如数学常量、配置选项等。类常量是不可变的,因此非常适合用于需要保证一致性的场‍合。静态属性:用于在类之间共享数据,而不必通过实例化对象来访问。它们可以用于存储类的状态信息、缓存数据等。静态属性是可变的,因此可以用于需要动态修改数据的场‍合。类常量和静态属性的应用场景在PHP的类中,self

关键字是一个特殊的类引用,它用于引用当前类本身,而不是类的实例。self关键字用于在类的内部引用当前类的类常量、静态属性和静态方法,不能在类的外部使‍用。在PHP的类中,以static关键字声明的属性为静态属性,以static关键字声明的方法为静态方法,使用范围解析运算符::来访问类中的静态属性和静态方‍法。在类内,对静态方法或静态属性的访问建议用self,不要用$this->的形式。对非静态方法或属性的访问不能用self,只能用$this->。self和static关键字面向对象的特性PART05面向对象程序设计有三大核心特性,即封装、继承和多态,它们共同为开发者提供了一种更加灵活、可维护和可扩展的编程方式。8.5面向对象的特性封装是面向对象程序设计中的一个关键概念。在编程中,当需要保护某些数据不被外部随意访问或修改时,就需要用到封‍装。在编程中,封装是指将数据(属性)和操作这些数据的方法紧密地结合在一起。这样做的好处是可以隐藏数据的具体实现细节,只通过特定的方法来访问或修改这些数据。在PHP中,我们可以通过设置属性的访问权限来实现封装,即将属性设置为private或protected,这样它们就不能被类的外部直接访问。对于private或者protected权限的属性,PHP提供了以下3种访问方式。8.5.1

封装1.使用公共方法访问私有成员在类中,可以使用private来封装属性,这意味着这些属性只能在对象内部被访问。为了从外部访问这些私有属性,我们可以在类中定义公共方‍法。类的封装示例。8.5.1

封装2.利用魔术方法访问私有属性PHP提供了一些特殊的魔术方法,如__set($name,$value)和__get($name),它们允许在读取或写入不可访问属性时被调用,这为访问和修改类内部的封装属性提供了灵活‍性。示例:使用__set()和__get()魔术方法来访问Employee类私有属性$salary。8.5.1

封装3.使用魔术方法访问未定义成员除__get()和__set()之外,PHP还提供了__call($name,$arguments)魔术方法,它会在调用对象中不存在的方法时被自动调用。8.5.1

封装在面向对象程序设计中,继承描述的是类和类之间的一种关系,它允许一个类(子类)继承另一个类(父类)的属性和方法,这就像在现实世界中,孩子会继承父母的一些特征和行为一‍样。通过继承,子类可以在不改变父类的基础上进行扩展,添加新的功能或特性。这种机制能够重用代码,减少代码重复编写。以运动项目为例。假设有一个“运动”类,包含一些通用的属性和方法。然后,可以创建“球”和“田径”类作为“运动”类的子类。进一步,“篮球”和“足球”类又可以作为“球”的子类,“短跑”和“长跑”类则可以作为“田径”类的子类,这样就形成了一个清晰的运动项目继承体系,如下图所‍示。8.5.2继承PHP使用extends关键字实现子类与父类之间的继承,其基本语法格式如下。PHP中的类只允许单继承,即一个类只能直接从一个类继承。例如,“球”继承“运动”,“篮球”继承“球”,但是“篮球”不能同时继承“球”和“运动”。8.5.2继承class子类名extends父类名{//子类的内容定义}示例:使用继承创建一个Ball类,它从Sport类继承。8.5.2继承在PHP中,可使用parent关键字调用父类的内容。使用parent关键字可调用的父类的内容包括:类常量、静态属性、静态方法、成员属性、成员方法等。使用parent关键字的语法格式如下。认识parent关键字parent::父类常量名; //调用父类类常量parent::父类属性名; //调用父类静态属性或成员属性parent::父类方法名(); //调用父类静态方法或成员方法父类ParentClass有一个方法method()。当创建了一个子类ChildClass,并在个子类中调用父类的method()方法,可使用parent关键字。认识parent关键字classParentClass{publicfunctionmethod(){echo'这是父类定义的方法。';}}classChildClassextendsParentClass{publicfunctioncallMethod(){parent::method(); //在子类中调用父类的成员方法}}$obj=newChildClass();$obj->callMethod(); //输出“这是父类定义的方法。”在PHP中,当需要在继承的过程中保证某些类或方法不被改变,需使用final关键字将类定义成最终类,或将方法定义成最终方法。使用final关键字定义的类不能被继承,只能被实例化;使用final关键字定义的方法不能重‍写。使用final关键字的语法格式如‍下。认识final关键字finalclass类名 //最终类{[访问控制修饰符]finalfunction方法名(){} //最终方法}使用final关键字定义类的示例代码如‍下。认识final关键字finalclassPerson{//类的实现//这个类不能被继承}//下面的代码会导致错误,因为Person类被声明为finalclassStudentextendsPerson{}classAnotherClass{publicfinalfunctionfinalMethod(){echo"这个方法不能被重写。";}}classChildClassextendsAnotherClass{//导致错误,因为finalMethod()被声明为finalpublicfunctionfinalMethod(){}//错误:不能重写最终方法AnotherClass::finalMethod()}多态是指在同一个操作域操作不同的对象,会产生不同的执行结果。在面向对象程序设计中,多态的实现离不开继承,当多个对象继承了同一个对象后,就获得了相同的方法,然后可以根据每个对象的需求来改变同名方法的执行结‍果。在PHP中,多态可以通过继承和接口来实现(接口在后文讲解)。当一个类继承自另一个类时,它可以添加新的功能或者覆盖(重写)父类的方法,这样,一个父类(如Person类)可以被多个子类(如Student类)继承,每个子类都可以有自己的行为,同时共享父类的特‍性。8.5.3多态比如,存在父类“人”类,它可以被“学生”类继承。虽然“人”类和“学生”类都有“介绍自己”这个功能,但介绍的内容会有所不同,这就是多态的体现。8.5.3多态【案例实践8-3】实现学校运动员参赛得奖统计实现个人运动员和团队运动员的参赛和得奖统计。不同类型的运动员的比赛方式和统计结果有所不‍同。首先,定义运动员父类Athlete。【案例实践8-3】实现学校运动员参赛得奖统计然后,定义个人运动员子类IndAthlete和团队运动员子类TeamAthlete。【案例实践8-3】实现学校运动员参赛得奖统计最后,实例化IndAthlete类和TeamAthlete类,创建个人运动员对象和团队运动员对象,调用相应参赛方法等。【案例实践8-3】实现学校运动员参赛得奖统计运行结果如下图所‍示。抽象类和接口PART06抽象类和接口是面向对象程序设计中用于实现抽象化的重要概念,它们的存在分别解决了代码复用与多态性实现的问题,适用于不同的程序设计场‍景。8.6抽象类和接口抽象类是不能被实例化的类,只能作为其他类的父类。抽象类的作用是为子类提供一个共同的接口和部分实现。抽象类可以包含抽象方法(没有具体实现的方法)、非抽象方法(有具体实现的方法)、属性和常‍量。以abstract关键字声明的类称为抽象类。以abstract关键字声明的方法称为抽象方法。任何一个类,只要有一个方法被声明为抽象方法,这个类就必须被声明为抽象类。抽象方法只是声明了其调用方式(参数),具体实现需要子类来完成。8.6.1抽象类abstractclass类名 //定义抽象类{

publicabstractfunction方法名(); //定义抽象方法}继承一个抽象类时,子类必须实现父类中的所有抽象方法;另外,这些方法的访问控制修饰符必须和抽象父类中的一样(或者访问权限更宽松)。例如,某个抽象方法被声明为受保护的,子类中实现的方法就应该声明为受保护的或者公有的,而不能声明为私有的。此外,方法的调用方式必须匹配,即类型和强制参数数量必须一‍致。抽象类应用示例。8.6.1抽象类如果一个抽象类中的所有方法都是抽象的,那么可以将其定义为接口。接口通常用于定义一组公共的方法,而不关心这些方法的具体实现过程。这使得接口可以被不同的类实现,从而实现多‍态。接口是用interface关键字定义的类,可以指定必须实现哪些方法,但不需要定义这些方法的具体内容,并且所有方法都必须是公有的;可以定义常量,其和类常量的用法完全相同,但是在PHP8.1之前不能被子类或子接口所覆盖;可以定义魔术方法,以便要求类实现这些方法。定义接口的语法格式如下。8.6.2接口interface接口名 //定义接口{

publicfunction方法名(); //定义公共方法}一个类可以实现一个或多个接口。可使用implements关键字实现接口。类中必须实现接口中定义的所有方法,否则会出现严重错误。类可以实现多个接口,用逗号分隔多个接口的名称即‍可。8.6.2接口class类名implements接口名 {类的内容定义 //必须实现接口中定义的方法}接口应用示例。8.6.2接口【案例实践8-4】实现常见交通工具的应用汽车和飞机作为交通工具,都需要具备燃料续航的功能。因此可以通过抽象类和接口提炼共同的属性、必需的方法,再通过子类继承抽象类各自的不同功能,实现接口和必需的方‍法。首先,使用Vehicle抽象类来定义所有交通工具共有的属性和方法。【案例实践8-4】实现常见交通工具的应用定义一个Refuelable接口来表示具有加油能力的交通工具,包含抽象方法refuel()。代码如下。//Refuelable接口interfaceRefuelable{publicfunctionrefuel($fuelAmount);}【案例实践8-4】实现常见交通工具的应用定义Car子类和Plane子类,它们都继承Vehicle类并实现Refuelable接口,各自包含特有的属性和方法。【案例实践8-4】实现常见交通工具的应用实例化Car子类和Plane子类,创建Car对象和Plane对象,调用各自的方法。为实现购物车系统,需要确定购物车系统的功能需求:用户能够添加商品到购物车、删除购物车中的商品、查看购物车中的商品列表、修改购物车中商品的数量、计算购物车中商品的总价、清空购物车‍等。首先,利用面向对象的封装、继承、多态的思想,设计商品类(Product)及其子类食品类(Food)和电子产品类(Electronics类);设计购物车类(Cart),用于管理购物车中的商品项,如下图图所‍示。然后,设计购物车前端界面,用于展示商品列表、购物车内容等;设计后端逻辑,处理购物车操作并使用Session来存储购物车数‍据。最后,构建出一个稳定、安全的购物车系统,保证其具备良好的性能,较高的安全性、可维护性和扩展‍性。任务8-1定

温馨提示

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

评论

0/150

提交评论