PHP程序设计基础 课件 单元5-7 用户管理系统的设计- 仓储管理系统_第1页
PHP程序设计基础 课件 单元5-7 用户管理系统的设计- 仓储管理系统_第2页
PHP程序设计基础 课件 单元5-7 用户管理系统的设计- 仓储管理系统_第3页
PHP程序设计基础 课件 单元5-7 用户管理系统的设计- 仓储管理系统_第4页
PHP程序设计基础 课件 单元5-7 用户管理系统的设计- 仓储管理系统_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

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

文档简介

第五单元

用户管理系统的设计课程内容01MySQL数据库基础知识02数据库和数据表的创建03常用数据库操作语句04通过MySQLi实现用户管理系统05设计和使用数据库操作函数目录

导入项目概述在现代Web开发实践中,无论是个人项目还是企业级应用,持续产生和处理海量数据已成为常态。高效地存储、管理并利用这些数据,已成为一项亟待解决的关键问题。尤其在Web开发领域,随着用户规模的增长和业务需求的日益复杂化,开发人员面临着如何快速、安全地处理用户数据的严峻挑战。数据库作为数据存储与检索的核心系统,能够实现数据的持久化存储,并提供高效的数据查询、添加、删除及修改功能。PHP作为一种广泛应用的服务器端脚本语言,提供了多种与数据库交互的途径。本单元将重点介绍使用MySQLi扩展访问和操作MySQL数据库的方法.

思维导图任务描述设计用于在线用户管理系统的数据库,该系统用于存储用户基本信息(如用户名、密码、电子邮箱等),并支持通过PHP实现数据的增删改查(CRUD)操作。任务5.1用户管理数据库的设计1.1MySQL数据库简介1.数据库基础知识数据库是依据特定数据结构进行组织、存储及管理数据的系统化仓库。在众多数据库类型中,关系型数据库采用二维表格形式实现数据存储,每个数据表均由行(记录)与列(字段)构成规范的数据单元。1.2MySQL数据库的特点1.数据库基础知识MySQL是一款开源关系型数据库管理系统(RDBMS),具备以下核心特性:开源免费、跨平台兼容性好、性能卓越、兼容标准SQL、安全机制完善、支持多存储引擎等。2.1启动MySQL服务2.MySQL服务的启动与停止打开XAMPPControlPannel,找到MySQL服务的图标,在控制面板中点击“MySQL”右侧的“Start”按钮,启动MySQL服务。2.2关闭MySQL服务2.数组分类打开XAMPP,在面板中找到MySQL服务的图标,如果MySQL服务正在运行,会显示一个“停止”按钮,点击“停止”按钮,MySQL服务将被关闭。3.1创建数据库3.数据库和数据表的创建启动并连接MySQL服务器后,就可以对MySQL数据库进行操作了,操作MySQL数据库主要包括创建、查看、选择、删除等。在Navicat中可以右击‘连接,选择新建数据库3.2创建数据表3.数据库和数据表的创建双击打开MySQL数据连接,右击“表”,在弹出菜单中选择“新建表”。3.2创建数据表3.数据库和数据表的创建在弹出的窗口中设计数据表的各字段,输入字段名和类型,并将id字段设置为主键,非空,同时默认中勾选上“自动递增”。保存表格为stu_tb,关闭当前设计窗口后,双击打开数据表stu_tb,可以输入表格中的数据。4.1插入数据格式是:INSERTINTO表名(字段1,字段2,...)VALUES(值1,值2,...);其中,“表名”指的是要插入数据的目标数据表名称,括号内的“字段1,字段2,字段3,...”是需要插入数据的具体字段列表,多个字段之间用逗号分隔。“VALUES”后面括号中的“值1,值2,值3,...”则是与前面字段一一对应的具体数据值,字符串类型的值需要用单引号括起来,数值类型的值可以直接书写,日期类型的值也通常需要用单引号括起来并按照特定格式书写,如'YYYY-MM-DD'。自增的列,如stu_tb中的id字段,不能写在字段列表中,其值也不用写在values中。示例:INSERTINTOstu_tb(name,score)VALUES('张三',140)4.常用数据库操作语句4.2修改(更新)数据格式:UPDATE表名SET字段1=值1,字段2=值2,...WHERE条件;“表名”指要更新数据的数据表名;“SET”用于指定需要修改的字段及对应的新值,多个字段之间用逗号分隔;“WHERE”子句用于限定更新的范围,只有满足条件的行才会被修改。注意:如果省略WHERE子句,会修改表中所有行的值,需特别小心。

例如:更新stu_tb表中id为1的学生的成绩为135,语句如下:

UPDATEstu_tbSETscore=135WHEREid=1;同时修改姓名和成绩,如将id为2的学生姓名改为'李四'、成绩改为138,语句为:

UPDATEstu_tbSETname='李四',score=138WHEREid=2;4.常用数据库操作语句4.3删除数据格式是:DELETEFROM表名WHERE条件;“表名”指要删除数据的数据表名称;“WHERE”子句用于限定删除的范围,只有满足条件的行才会被删除。注意:如果省略WHERE子句,会删除表中所有行,且不可恢复,要特别小心。

例如,要删除stu_tb表中id为3的学生记录,语句如下:

DELETEFROMstu_tbWHEREid=3;若要删除成绩低于60分的学生记录,语句为:

DELETEFROMstu_tbWHEREscore<60;4.常用数据库操作语句4.4查询语句基本格式为:

SELECT字段列表FROM表名[WHERE条件][ORDERBY字段

排序方式][LIMIT起始行,行数];(1)查询所有记录:SELECT*FROMstu_tb;(2)条件查询(WHERE子句)查询成绩大于120分的学生姓名和成绩:

SELECTname,scoreFROMstu_tbWHEREscore>120;查询姓名中包含“张”字且成绩在10到60之间的学生:

SELECT*FROMstu_tbWHEREnameLIKE'%张%'ANDscoreBETWEEN10AND60;查询不是“张三”的学生记录:SELECT*FROMstu_tbWHEREname!='张三';4.常用数据库操作语句4.4查询语句(3)排序查询(ORDERBY子句):按成绩降序排列(从高到低显示所有学生信息):SELECT*FROMstu_tbORDERBYscoreDESC;按姓名升序、成绩降序排列(先按姓名拼音排序,同姓名按成绩从高到低排列):SELECT*FROMstu_tbORDERBYnameASC,scoreDESC;(4)分页查询(LIMIT子句):用LIMIT子句实现分页。其格式为“LIMIT起始行,行数”(起始行从0开始,代表第一行)。例如:查询“stu_tb”表中前5条记录(第一页,每页5条):SELECT*FROMstu_tbLIMIT0,5;查询第6到第10条记录(第二页):SELECT*FROMstu_tbLIMIT5,5;4.常用数据库操作语句4.4查询语句4.常用数据库操作语句(5)聚合查询(聚合函数):聚合函数用于对数据进行统计分析,常见的聚合函数包括:COUNT(*):统计记录总数;SUM(字段):计算指定字段的总和;AVG(字段):计算指定字段的平均值;MAX(字段):获取指定字段的最大值;MIN(字段):获取指定字段的最小值。

例1:统计“stu_tb”表中的学生总数SELECTCOUNT(*)

AS

total_studentsFROMstu_tb;

例2:计算所有学生的平均成绩

SELECTAVG(score)ASavgGradeFROM

stu_tb;

任务实施任务5.1用户管理数据库的设计-任务实施设计用户表user_tb,如图5-6所示,注意其中id列设置为整型int类型,在下面的“默认”中设置为“自动递增”,同时设置为主键,其他用户名userName、密码password和邮箱email设置为可变长度varchar类型,并允许为空值null。

任务描述任务5.2通过MySQLi实现用户管理系统设计一个用户管理系统的数据库,该系统能够存储用户的基本信息,如用户名、密码、邮箱等,并能够通过PHP进行数据的增删改查操作。

知识准备MySQLi还是PDO方式?PHP中提供了多种操作MySQL数据库的方式,现在比较常用的是MySQLi和PDO方式,其中MySQLi只针对MySQL数据库,使用起来简单高效,但是如果你的项目需要在多种数据库中切换,建议使用PDO方式,PDO可以应用在12种不同数据库中,当变更数据库时只需要简单修改即可。本单元中先介绍使用MySQLi方式访问MySQL数据库,并采用面向过程方式。任务5.2通过MySQLi实现用户管理系统-知识准备1.mysqli_connect()连接数据库PHP通过mysqli_connect()函数连接MySQL服务器语法格式如下:mysqli_connect($servername,$username,$password);参数$servername是MySQL服务器的主机名(或IP),如果省略端口号,则默认为3306;参数$username是登录MySQL服务器的用户名,参数$password是MySQL服务器的用户密码。如果连接成功,则函数返回一个连接标识,失败则返回False。例如,使用mysqli_connect()函数连接本地MySQL服务器,代码如下:<?php$conn=mysqli_connect('localhost','root','')ordie("连接数据库服务器失败!",mysqli_connect_error());?>任务5.2通过MySQLi实现用户管理系统-知识准备1.mysqli_connect()连接数据库要连接到服务器上某个具体数据库,可以将连接服务器和打开数据库放在一段程序中。$host='localhost';$username='root';//访问数据库的用户名$password='';//访问数据库root用户的密码,此处为空字符串$database='mydb';//访问的数据库名$conn=mysqli_connect($host,$username,$password,$database);//创建连接if(!$conn){//检查连接是否成功die('连接失败:'.mysqli_connect_error());}echo'连接成功';mysqli_close($conn);任务5.2通过MySQLi实现用户管理系统-知识准备2.mysqli_query()函数执行SQL语句任务5.2通过MySQLi实现用户管理系统-知识准备通常使用mysqli_query()函数来执行对数据库操作的SQL语句。mysqli_query()函数的语法如下:mysqli_query($link,$query)参数$link是MySQL服务器的连接标识,参数$query是要执行的SQL语句,包括插入记录语句、修改记录语句、删除记录语句、查询记录语句等。用法示例:mysqli_query($conn,"INSERTINTOuser_tb(userName,password)VALUES('Tom','123')")1.设计用户管理系统界面任务5.2通过MySQLi实现用户管理系统-任务实施<center><h3>用户管理系统</h3><hr><ahref="5-2.php">1.插入用户</a><br><ahref="5-3.php">2.修改用户</a><br><ahref="5-4.php">3.删除用户</a><br><ahref="5-5.php">4.查询用户</a><br></center>

1.mysqli_query()实现插入记录任务5.2通过MySQLi实现用户管理系统-任务实施$conn=mysqli_connect("localhost","root","","mydb");//1.连接到服务器if(!$conn)die("连接失败:".mysqli_connect_error());//2.准备SQL$sql="INSERTINTOuser_tb(userName,password)VALUES('Tom','123')";if(mysqli_query($conn,$sql))//3.执行DQL语句echo"插入记录成功";//输出操作成功else//失败echo"插入记录失败";mysqli_close($conn);//4.关闭连接2.mysqli_query()实现修改记录任务5.2通过MySQLi实现用户管理系统-任务实施$conn=mysqli_connect("localhost","root","","mydb");//1.连接到服务器if(!$conn)die("连接失败:".mysqli_connect_error());//2.准备SQL$sql="UPDATEuser_tbSETpassword='456'WHEREusername='Tom'";if(mysqli_query($conn,$sql))//3.执行SQL语句

echo"修改用户信息成功";

//输出操作成功else//失败

echo"修改用户信息失败";mysqli_close($conn);3.mysqli_query()实现删除记录任务5.2通过MySQLi实现用户管理系统-任务实施$conn=mysqli_connect("localhost","root","","mydb");//1.连接到服务器if(!$conn)die("连接失败:".mysqli_connect_error());$sql="DELETEFROMuser_tbWHEREusername='Tom'";//2.准备SQLif(mysqli_query($conn,$sql))//3.执行SQL语句echo"删除记录成功";//输出操作成功else//失败echo"删除记录失败";mysqli_close($conn);插入、删除、修改这三个非查询语句,操作步骤基本一样,关键的差异是SQL语句4.mysqli_query()实现查询记录任务5.2通过MySQLi实现用户管理系统-任务实施数据查询与前面三条非查询语句相比存在一定差别,要将查询结果显示在页面中。$conn=mysqli_connect("localhost","root","","mydb");//1.连接到服务器if(!$conn)die("连接失败:".mysqli_connect_error());$sql="SELECTid,userName,passwordFROMuser_tb";//2.准备SQL语句$result=mysqli_query($conn,$sql);//3.执行SQL语句if(mysqli_num_rows($result)>0){//4.显示查询结果while($row=mysqli_fetch_assoc($result))echo$row["id"].",".$row["userName"].",".$row["password"]."<br>";}elseecho"未查询到相关记录";mysqli_close($conn);

1.数据库操作函数的设计任务5.3设计和使用数据库操作函数本任务设计几个函数,简化数据库增、删、查、改操作。在前面任务中大量的代码出现了重复,可以进行优化。通过定义函数的方式将重复代码和常用代码分别定义成不同的函数,并存放在一个文件public.php中,使用时将文件public.php包含进来,就可以直接使用这些函数,达到简化程序,减少重复代码的效果。

1.数据库操作函数的设计任务5.3设计和使用数据库操作函数header("Content-type:text/html;charset=utf-8");$conn=mysqli_connect('localhost','root','','mydb');//建立数据库连接if(!$conn)die('连接数据库失败'.mysqli_error($conn));//报错并退出当前程序mysqli_query($conn,'SETnamesutf8');//配置MySQL,指定字符集,防止乱码functionexeSQL($sql)//执行非查询语句(INSERT/UPDATE/DELETE),返回影响的行数{global$conn;if($result=mysqli_query($conn,$sql)){returnmysqli_affected_rows($conn);}else{die('SQL执行失败:'.$sql.'<br>错误信息:'.mysqli_error($conn));}}

1.数据库操作函数的设计任务5.3设计和使用数据库操作函数/***执行查询语句,返回关联数组格式的结果集*@paramstring$sql待执行的SELECT查询语句*@returnarray关联数组结果集*/functionexeQuery($sql){global$conn;$result=mysqli_query($conn,$sql);if(!$result){die('SQL执行失败:'.$sql.'<br>错误信息:'.mysqli_error($conn));}$data=[];while($row=mysqli_fetch_assoc($result))$data[]=$row;return$data;}

1.数据库操作函数的设计任务5.3设计和使用数据库操作函数/***执行聚合查询(COUNT/SUM/AVG/MAX/MIN)*@paramstring$sql待执行的聚合查询SQL语句*@returnmixed聚合结果数值或false*/functionexeAgg($sql){global$conn;$result=mysqli_query($conn,$sql);if(!$result)die('SQL执行失败:'.$sql.'<br>错误信息:'.mysqli_error($conn));$row=mysqli_fetch_row($result);return$row[0];}functioncloseConn()//关闭数据库连接{global$conn;mysqli_close($conn);}

1.数据库操作函数的设计任务5.3设计和使用数据库操作函数/***提示文字信息,并跳转到目标页面*@paramstring$msg警告信息*@paramstring$url跳转到的网页,默认为空*/functionalertRedirect($msg='',$url=''){$script='';//addslashes函数返回转义后的字符,用于避免SQL注入攻击if($msg)$script.="alert('".addslashes($msg)."');";//如果有提示信息,添加提示语句if($url)$script.="location.href='".addslashes($url)."';";//如果有跳转页面,添加跳转语句if($script)echo"<script>$script</script>";//如果有提示语句或跳转语句,输出脚本}?>2.数据库操作函数的使用任务5.3设计和使用数据库操作函数下面通过设计一个简单的用户管理系统体验一下如何使用该函数。<?phprequire('public.php');//包含文件public.php$sql="INSERTINTOuser_tb(userName,password)VALUES('Tom','123')";if(exeSQL($sql)>0)//调用exeSQL()函数alertRedirect("添加成功");elsealertRedirect("添加失败");closeConn();?>1.用户管理系统设计准备任务5.3设计和使用数据库操作函数-任务实施1.用户管理系统设计准备用户管理系统包括管理主界面,用户信息查询、用户添加、用户删除、用户信息修改,为简化程序,通过包含public.php文件实现网站用户管理系统。2.显示用户信息任务5.3设计和使用数据库操作函数-任务实施准备工作:新建样式表style.css,存放在项目的unit5文件夹下。*{text-align:center;}table{border:1pxsolid#ccc;border-collapse:collapse;width:500px;margin:0auto;}td,th{border:1pxsolid#ccc;padding:8px12px;}th{background-color:#f2f2f2;font-weight:bold;}2.显示用户信息任务5.3设计和使用数据库操作函数-任务实施用户管理系统包括管理主界面,用户添加、用户删除、用户信息编辑修改,为降低重复代码的编写,通过包含public.php文件实现。步骤:导入样式表style.css通过require包含public.php查询结果存在$result中,通过循环将$result输到表格中通过QueryString将用户id传给“删除”和“编辑”链接超链接“添加新用户”链接到插入新用户的insert.php3.插入用户信息任务5.3设计和使用数据库操作函数-任务实施当在系统首页“任务5.3.php”的表格中单击“添加新用户”链接,浏览器将转到insert.php,如图所示。在其中有添加新用户的表单,添加新用户信息,成功后弹出“新增成功”警告框,并返回到系统首页“任务5.3.php”。4.删除用户信息任务5.3设计和使用数据库操作函数-任务实施删除用户的程序delete.php需先从用户管理首页“任务5.3.php”进入。点击表格记录里的“删除”链接,会将该用户的ID通过QueryString查询字符串传递给delete.php。delete.php接收传递来的ID后,构造删除语句并根据该ID执行删除操作。删除成功后会弹出“删除成功”的警告框,并自动返回用户管理首页“任务5.3.php”,效果如图所示。5.修改用户信息任务5.3设计和使用数据库操作函数-任务实施5.1表单中显示用户原有信息先运行用户管理系统首页,点击“修改”链接,通过QueryString方式将该用户的id传递给update.php。在update.php中接收传递的id参数,构造根据id查询的SQL语句,将查询到的用户信息通过value="<?=$row['userName']?>"属性显示在文本框中。5.修改用户信息任务5.3设计和使用数据库操作函数-任务实施5.2修改显示的用户信息用户可以直接在文本框中修改所显示的内容,点击“修改用户信息”按钮,修改成功或修改失败的效果如图所示。第六单元

面向对象程序设计课程内容01面向对象基础02类的封装03类的继承04接口与多态05综合案例目录

导入项目概述面向对象程序设计作为一种重要的编程方式,在PHP程序设计中占据着核心地位。它以对象为基础,将数据和操作数据的方法封装在一起,通过类的定义来创建对象,从而实现对现实世界中各种实体和关系的模拟与处理。在本项目中,我们将深入探究面向对象程序设计的各个方面。首先,从概念入手,清晰地理解什么是类,什么是对象,以及它们之间的关系。类就像是一个模板,规定了对象所具有的属性和方法;而对象则是类的实例化,是具体存在的实体。封装性是其中的关键特性之一,它将类的内部实现细节隐藏起来,只对外提供公共的接口,这样可以提高代码的安全性和可维护性。继承特性则允许一个类从另一个类中获取属性和方法,这大大提高了代码的复用性。多态性使得相同的操作在不同的对象上可以有不同的表现形式。通过本项目的学习,学生将能够熟练掌握面向对象程序设计在PHP中的应用,能够运用这些知识构建出结构清晰、易于维护和扩展的程序,为后续开发更复杂的项目奠定基础。

思维导图任务描述使用面向对象技术实现学生类的定义及实例化,实现类的属性及方法的定义与引用,实现构造函数、析构函数的定义及引用。任务6.1PHP设计学生类1.1面向过程开发软件的缺点1.面向对象技术简介在程序设计中,有两种典型的编程技术,面向过程编程(ProcedureOrientedProgramming,POP)与面向对象编程(ObjectOrientedProgramming,OOP)技术。1.1面向过程开发软件的缺点主要体现在以下几个方面:(1)代码重用性较低,因为面向过程以函数开发为主,缺乏模块化的结构,使得代码难以在不同项目中复用。(2)扩展性差,当需要添加新功能时,往往需要修改大量的现有代码,这不仅增加了开发时间,也提高了出错的风险。(3)面向过程的软件维护难度较大,随着软件规模的扩大,代码的复杂度和相互依赖关系会迅速增长,导致维护成本急剧上升。(4)面向过程开发在应对复杂问题时可能显得力不从心,因为它更侧重于步骤和算法,而非问题的整体结构和对象间的交互。1.2面向对象编程技术介绍1.面向对象技术简介面向对象程序设计就是要解决事物的归类,分析每类事物的特点,找出各类事物之间的联系及相互作用。在面向对象程序中的一切事物产生的个体都视为“对象”,将具有相同的属性和行为的对象归纳成“类”,这个过程叫做抽象。在面向对象程序设计中,对象的特点包括:属性和方法。属性指的是对象的特征,如学生的学号、姓名、性别等,可以用变量来表示;方法指的是对象的行为及相关操作,如学生修改个人信息、查询成绩、请假等,可以用函数来表示。1.3面向对象程序开发技术的特点1.面向对象技术简介对象:对象是现实世界或抽象思维中的实体在计算机中的表示,是面向对象编程的核心。对象具有状态(属性)和行为(方法)。类:类是对象的模板或蓝图,它定义了一组对象共有的属性和方法。通过类可以创建类的实例,即对象。1.3面向对象程序开发技术的特点主要特性1.面向对象技术简介类的封装封装是面向对象编程的核心思想之一。它将对象的属性和方法结合成一个独立的单元,并尽可能隐藏对象的内部细节,只对外提供与对象交互的接口。封装的好处是提高了代码的安全性和可维护性。类的继承继承允许定义一个类(称为父类或基类)作为另一个类(称为子类或派生类)的基础,子类可以继承父类的属性和方法。继承提高了代码的复用性和可维护性。多态多态指的是同一个方法调用在不同的对象上可能产生不同的结果。多态性允许以统一的接口处理不同类型的对象,从而提高了代码的灵活性和可扩展性。1.3面向对象程序开发技术的特点1.面向对象技术简介优点代码重用性高:通过继承,子类可以重用父类的属性和方法,封装好的对象也可以在多个地方重复使用。降低了系统的复杂性:面向对象编程将复杂的系统分解成多个相对简单的对象,使得代码更加易于理解和维护。提高了系统的可维护性:封装隐藏了对象的内部实现细节,降低了模块之间的耦合度。易于扩展:通过继承和多态性,可以方便地扩展已有类的功能。更加灵活:面向对象编程支持动态绑定和多态性,使得程序在运行时可以根据需要动态地改变对象的类型和行为。2.类的定义<?php[权限修饰符]class类名

{//类体(属性和方法)}?>权限修饰符:可用的权限修饰符包括public、protected、private等,默认是public。class:创建类的关键字。类名:遵循PHP的命名规则,通常使用大写字母开头的驼峰式命名法,在类名之后必须加一对花括号{}。类体:定义类共同具有的属性和方法,这些属性和方法是类的成员。2.1类属性的定义2.类的定义例6-1:定义Student类并进行实例化<?php//学生类定义classStudent{public$name;//姓名属性public$stuId;//学号属性}//实例化对象并赋值$stu1=newStudent();$stu1->name="李红";$stu1->stuId="2025001";//输出属性echo$stu1->name."<br>";echo$stu1->stuId;?>定义一个学生(Student)类包含公共属性姓名、学号public(默认):定义公共属性,可以在类的外部被访问和修改。protected:定义受保护属性,只能在类内部、子类以及同一个命名空间内的其他类中访问。private:定义私有属性,只能在类内部访问,不能在类的外部或子类中直接访问。使用new关键字创建对象,语法格式如下。对象名=new类名([参数1],[参数2],...);通过“对象->成员”的方式访问成员属性。如$stu1->name、$stu1->stuId,成员名称前不需要加$符号。2.2类方法的定义2.类的定义例6-2:给Student类的内部增加一个输出学生信息的方法。<?php//学生类定义classStudent{public$name;//姓名属性public$stuId;//学号属性//输出学生信息的方法publicfunctionshowInfo(){echo"姓名:{$this->name}<br>学号:{$this->stuId}";}}//实例化对象并赋值$stu1=newStudent();$stu1->name="李红";$stu1->stuId="2025001";//调用方法输出信息$stu1->showInfo();?>通过function关键字定义的,但与普通函数不同的是,方法必须定义在类的花括号{}内部。方法可以用public(可以从类的外部访问)、protected(只能在类的内部以及继承类中访问)、private(只能在类的内部访问)等修饰符,用于控制方法的访问权限。在类的成员方法中使用该类的成员属性时,此时应使用“$this->成员属性”的格式进程成员变量的引用。3.1构造方法3.类构造方法与析构方法构造方法的定义格式如下:function__construct(参数列表){//函数体(一般完成初始化操作)}构造方法必须命名为__construct()。每个类都有一个构造方法,用于在创建对象时自动调用。如果在类中没有显式的声明它,PHP会自动生成一个没有参数,没有任何操作的默认构造方法。2.2类方法的定义2.类的定义例6-3:为Student类创建构造方法并完成相关数据的初始化<?phpclassStudent{public$name;//姓名public$stuId;//学号//构造方法:创建对象时自动调用,用于初始化属性publicfunction__construct($name,$stuId){$this->name=$name;$this->stuId=$stuId;}publicfunctionshowInfo(){echo"姓名:{$this->name}<br>学号:{$this->stuId}";}}//实例化对象时直接传入参数(自动调用构造方法)$stu1=newStudent("李红","2025001");$stu1->showInfo();?>创建构造方法,完成属性的初始化赋值操作Student类实例化对象时,直接在类名后面加上了参数列表,参数列表的数量和顺序是根据构造函数的参数列表设置。创建类的对象时自动调用构造函数完成对象的初始化工作。注意事项:•构造方法不能被显式调用,只能由new操作符自动调用。•一个类只能有一个构造方法。3.2析构方法3.类构造方法与析构方法析构方法的定义格式如下:publicfunction__destruct(){//析构函数内容(完成清理任务等)}析构方法是对象被销毁之前最后被对象自动调用的方法,以在销毁一个对象之前完成一些特定的操作,关闭文件句柄、释放数据库连接等。例6-4:使用析构方法销毁Student对象classStudent{publicfunction__destruct(){echo"Student对象已销毁";}}$stu=newStudent();unset($stu);//触发析构方法,输出"Student对象已销毁"注意事项:•析构方法不能被显式调用。•如果在对象被销毁前已经手动释放了资源(例如关闭了文件句柄),析构方法中不应再尝试释放这些资源,以避免错误。任务实施<?phpclassStudent{//类的属性public$name;//姓名public$student_id;//学号//1.构造方法:创建对象时自动调用,初始化属性publicfunction__construct($name,$student_id){$this->name=$name;$this->student_id=$student_id;echo"对象创建成功:{$this->name}({$this->student_id})<br>";}//2.信息展示方法:输出学生完整信息publicfunctionshowInfo(){echo"学生信息:<br>";echo"姓名:{$this->name}<br>";echo"学号:{$this->student_id}<br>";}//3.析构方法:对象销毁时自动调用,释放资源publicfunction__destruct(){echo"对象已销毁:{$this->name}({$this->student_id})<br>";}}//测试代码$stu1=newStudent("李红","2025001");//创建对象(自动触发构造方法)$stu1->showInfo();//调用方法展示信息unset($stu1);//手动销毁对象(会触发析构方法)?>任务描述使用三个权限修饰符public、protected、private对类中的成员属性、成员方法进行封装。任务6.2类的封装知识准备在PHP面向对象开发中,封装是面向对象编程的三大基本特性之一(另外两个是继承和多态)。封装的主要目的是隐藏类的内部实现细节,仅对外暴露必要的公共接口,从而保护对象的状态和行为不被外部随意修改,增强代码的安全性和可维护性。在PHP中类的封装通过访问控制符实现,分别为public(公开的)、protected(受保护的)、private(私有的)。知识准备1.public公共成员•定义:使用public关键字定义的类成员,可以在类的外部被访问和修改。•访问范围:public成员对类的实例、子类以及类外部的代码都是可见的。•用途:通常用于那些需要被类的用户直接访问和修改的成员。2.protected受保护成员•定义:使用protected关键字定义的类成员。•访问范围:protected成员只能在本类及其子类中被访问和修改,其他地方不可以被调用。•用途:protected成员可以在定义它们的类内部被访问和修改,任何继承该类的子类都可以访问protected成员,类的实例外部的代码无法直接访问protected成员。3.private私有成员•定义:使用private关键字定义的类成员。•访问范围:private成员只能被其所在类的内部方法访问的成员变量或方法,其他地方都不可以被调用。•用途:private成员可以在定义它们的类内部被访问和修改,不能从类的外部直接访问,也不能被该类的子类访问。类的封装使用public修饰的公共成员定义及调用<?phpclassMyClass{public$public_A;publicfunctionpublicMethod()//公共方法{ echo"这是一个公共方法。";}}$obj=newMyClass();//创建类的实例$obj->public_A="Hello,World!<br>";echo$obj->public_A;//输出:Hello,World!$obj->publicMethod();//输出:这是一个公共方法。?>公共属性公共方法使用protected修饰的受保护成员的定义及调用<?phpclassMyClass{protected$protected_A="Hello,World!";publicfunctionpublicMethod()//公共方法{echo$this->protected_A;}}$obj=newMyClass();//$obj->$protected_A="Hello,PHP!";//echo$obj->$protected_A;$obj->publicMethod();?>受保护属性

公共方法试图修改和访问类的受保护成员,运行程序会出现错误提示注意事项:在类的内部,公共方法publicMethod()可以访问protected属性$protected_A,而在类的外部则没有权限访问protected属性$protected_A。使用private修饰的私有成员的定义及调用<?phpclassMyClass{private$privateVar='Iamprivate';public$publicVar='Iampublic';publicfunctionshowVars(){echo$this->privateVar."<br>";//可以访问echo$this->publicVar."<br>";//可以访问}}$obj=newMyClass();echo$obj->publicVar."<br>";//可以访问//echo$obj->privateVar."<br>";$obj->showVars();?>私有成员属性

公共方法不能从类的外部访问私有成员可以使用函数访问私有成员公共成员属性注意事项:综合可知,public修饰的成员是完全没有被封装的,private修饰的成员封装的最严密的,所有成员只能在所在类中被访问,protected修饰的成员则介于二者之间,可以在自己类和其子类中被访问。大家可以根据实际的需求情况来定义类成员的修饰符。任务6.2类的封装任务实施classStudent{private$stuId;//私有成员:仅类内部可直接访问protected$name;//受保护成员:类内部和子类可直接访问public$age;//公共成员:任何地方可直接访问//构造方法初始化数据publicfunction__construct($id,$name,$age){$this->stuId=$id;//类内部给私有成员赋值$this->name=$name;//类内部给受保护成员赋值$this->age=$age;//公共成员直接赋值}publicfunctiongetstuId()//公共方法:获取私有学号(外部唯一访问途径){return$this->stuId; }publicfunctionsetName($newName)//公共方法:修改受保护姓名(外部修改途径){$this->name=$newName;}publicfunctiongetName()//公共方法:获取受保护姓名(外部读取途径){return$this->name;}}任务实施$stu=newStudent("2025001","李红",20);//测试代码//1.访问公共成员:直接操作echo"年龄:{$stu->age}<br>";//读取$stu->age=21;//修改echo"修改后年龄:{$stu->age}<br><br>";//2.访问受保护成员:通过公共方法//echo$stu->name;//错误:外部不能直接访问echo"姓名:{$stu->getName()}<br>";//通过方法读取$stu->setName("李小红");//通过方法修改echo"修改后姓名:{$stu->getName()}<br><br>";//3.访问私有成员:通过公共方法//echo$stu->stuId;//错误:外部不能直接访问echo"学号:{$stu->getstuId()}<br>";//只能通过方法读取

任务描述使用类的继承实现子类的定义,实现成员的继承。定义一个父类Person,再定义一个子类Student,子类Student继承父类Person的属性和方法,并使用子类实例化对象任务6.3类的继承类的继承class子类名extends父类名{//定义子类成员变量//定义子类成员方法}子类定义在class后的类名后加了extends关键字,extends后面指明父类名。在子类定义中,父类已有的变量、函数一般不再重新定义,在子类中只定义跟父类不同的变量与函数,如果需要也可以对父类中已有的函数进行修改。任务实施父类的定义classPerson{//父类的属性public$name;public$age;publicfunction__construct($name,$age)//构造函数

{$this->name=$name;$this->age=$age;}publicfunctionintroduce()//父类的方法

{ echo"Hello,mynameis".$this->name."andIam".$this->age."yearsold.<br/>";}}任务实施定义子类Student,继承自PersonclassStudentextendsPerson{//子类特有的属性public$stuId;public$major;//子类的构造函数publicfunction__construct($name,$age,$stuId,$major){//调用父类的构造函数来初始化继承的属性parent::__construct($name,$age);$this->stuId=$stuId;$this->major=$major;}publicfunctionstudy()//子类特有的方法

{ echo$this->name."isstudying".$this->major.".";}}任务实施使用子类创建一个Student对象$stu1=newStudent("Alice",20,"S12345","ComputerScience");$stu1->introduce();$stu1->study();

任务描述使用类的继承实现子类方法的重写,以完善该方法在子类中的功能。根据任务6.3,把子类Student从父类Person继承来的方法introduce()进行重写。任务6.4重写父类方法任务实施publicfunctionintroduce(){echo"Iamastudentmajoringin".$this->major.".<br/>";}把上面代码加入到“任务6.3”子类(Student)定义的代码中,则在子类中重写introduce()函数,函数在执行的时则调用了子类重写的introduce()函数,而不会调用父类的introduce()函数。

任务描述使用类的接口技术,实现类的多重继承功能。定义一个接口,接口名为接口命名为StudentTask(学生任务),里面只定义了attendClass()(上课)和doHomework()(做作业)两个方法,将来可以创建大学生、中学生、小学生等不同的类,这些学生上什么课、做什么作业可以不同(类的具体实现),但都逃不掉这两项任务。任务6.5使用接口拓展功能1.接口的定义在PHP中,类的继承是单向性的,如果要实现类的多重继承,就需要用到接口。例如:“手机”可以看作一个接口,它规定了所有手机必须能“打电话”和“发短信”(这是接口里的方法),但具体是老年按键机、智能手机,还是用什么技术实现打电话(是4G还是5G),接口不管——只要能完成这两个功能就行。接口用interface关键字定义,里面只写方法名,不写具体代码(没有方法体)。语法格式:interface接口名

{publicfunction方法1();//只规定有这个方法publicfunction方法2();}2.接口的实现类必须通过implements关键字“遵守”接口,并且必须实现接口中所有的方法(少一个都报错)。语法格式为:class类名implements接口名

{publicfunction方法1(){//具体实现代码}publicfunction方法2(){//具体实现代码}}接口不能创建对象,它只是给类定规则。3.接口的用途统一规范:比如规定“支付接口”必须有pay()方法,不管是微信支付、支付宝支付,都得实现这个方法,调用时就可以统一用pay(),不用管具体是哪种支付。灵活扩展:后续新增支付方式(如银联),只要遵守接口规则实现pay(),就能直接用,不用改原来的代码。一句话总结:接口就是“我不管你怎么做,但你必须能做到这些事”的规则,让不同的类能按照统一的方式工作,同时保持各自的实现灵活性。任务实施interfaceStudentTask//接口{publicfunctionattendClass();publicfunctiondoHomework();}classPerson//父类:人{public$name;publicfunction__construct($name){$this->name=$name;}}规定必须有"上课"方法规定必须有"做作业"方法//学生类:继承“人”类,完成接口规定的任务classStudentextendsPersonimplementsStudentTask

{publicfunctionattendClass(){echo"{$this->name}正在上大学课程<br>";}publicfunctiondoHomework(){echo"{$this->name}在做大学作业<br>";}}父类接口实现“上课”方法实现“做作业”方法任务实施任务测试$stu=newStudent("李红");$stu->attendClass();//执行上课任务$stu->doHomework();//执行做作业任务注意事项:接口是PHP面向对象编程中一个强大的工具,它可以帮助开发者定义类之间的契约,确保类提供特定的功能,并提高代码的可维护性和可扩展性。通过合理地使用接口,可以构建出更加灵活和可扩展的PHP应用程序。

任务描述定义一个父类(Animal)来表示通用的动物,父类中包含属性$name,表示动物的名字,通用的方skill(),表示动物的技能。然后通过继承Animal父类来创建具体的子类(Dog和Bird),两个子类分别重写了skill()方法。在Dog类中还定义了一个方法shout(),表示动物能发出的声音。任务6.6综合实训案例任务实施定义父类AnimalclassAnimal{public$name;//表示动物的名称publicfunctionskill(){}//表示动物拥有的技能,子类中需要重写publicfunction__construct($name)//构造函数

{$this->name=$name;}}

任务实施定义Dog类,继承自AnimalclassDogextendsAnimal{publicfunctionskill()//重写父类的方法{echo$this->name."正在奔跑。<br>";}publicfunctionshout()//子类方法{echo$this->name."的叫声\"旺...旺...\"<br>";}}任务实施

定义Bird类,继承自AnimalclassBirdextendsAnimal{publicfunctionskill()//重写父类的方法{echo$this->name."正在飞行。<br>";}}//测试$dog=newDog("小狗");$dog->skill();$dog->shout();$bird=newBird("小鸟");$bird->skill();第七单元

仓储管理系统课程内容目录01仓储管理系统的规划02仓储管理系统数据库规划03登录页面的设计04系统首页的设计05用户管理模块的设计06货物管理模块的设计07货物入库模块的设计08货物出库模块的设计09库存查询模块的设计

导入项目概述传统企业仓储管理长期面临效率低下、空间浪费、信息滞后、成本过高等诸多问题。仓储管理系统的开发是企业提升竞争力、实现数字化转型的关键举措。对企业效率提升、成本控制、决策优化、合规保障及战略支撑等多个层面提供支持。仓储管理系统是一个高效管理企业库存、优化仓储流程的信息化工具,旨在实现货物入库、出库及库存监控的自动化。本单元通过模拟真实仓储场景,帮助学生将PHP面向对象编程知识应用于实际项目开发,系统涵盖用户管理、货物分类、库存操作等模块,运用数据库交互技术提升数据处理的可靠性与效率。思维导图任务描述仓储管理系统是用于优化仓库运营、提升作业效率、降低管理成本的数字化工具。它通过整合硬件设备、软件算法和数据分析,实现仓库作业的自动化和可视化。仓储管理系统,覆盖从货物入库到货物出库的全流程,同时支持库存监控、人员管理、货物管理等功能。任务7.1仓储管理系统的规划仓储管理系统总体架构1.仓储管理系统结构规划2.仓储管理系统相关页面说明页面说明index.php仓储管理系统首页,展示各功能模块入口及仓储统计信息(总库存量、当日入库

/出库量),用户可点击功能入口跳转至对应页面。conn.php为了更方便的实现数据库连接问题,设计该网页主要实数据库的连接,该网页创建后,供所有涉及到数据库连接的页面引用。login.php仓库管理系统登录的页面,在该网页中通过输入用户名和登录密码,点击登录按钮后,登录到系统的主页面index.php。user_manage.php用户信息管理的主页面,显示所有的用户详细信息,并能够实现用户信息的新增、修改和删除功能。该页面可以链接到user_insert.php、user_update.php、user_delete.php。user_insert.php用户信息采集页面,该页面通过采集控件实现用户信息的采集并把采集到的用户信息存储到数据库表user中。user_update.php用户信息修改页面,主要实现用户信息的修改,提交后会把修改后的信息在数据库表user中进行更新。user_delete.php用户信息的删除页面,主要实现用户信息的删除操作。cargo_manage.php货物信息管理的主页面,显示所有的货物信息,并能够实现货物信息的新增、修改和删除功能。该页面可以链接到cargo_insert.php、cargo_update.php、cargo_delete.php。cargo_insert.php货物信息采集页面,该页面通过采集控件实现货物信息的采集并把采集到的用户信息存储到数据库表cargo中。2.仓储管理系统相关页面说明页面说明cargo_update.php货物信息修改页面,主要实现货物信息的修改,提交后会把修改后的信息在数据库表cargo中进行更新。cargo_delete.php货物信息的删除页面,主要实现货物信息的删除操作。cargo_in.php货物入库信息采集页面,该页面通过采集控件实现货物入库信息的录入,把采集到的数据存储到数据库表cargo_in中。并能够实现入库信表cargo_in和库存信息表cargo的数据一致性处理工作。cargo_out.php货物出库信息采集页面,该页面通过采集控件实现货物出库信息的录入,把采集到的数据存储到数据库表cargo_out中。并能够实现入库信表cargo_out和库存信息表cargo的数据一致性处理工作。cargo_select.php库存信息查询页面,该页面主要实现入库单查询、出库单查询和库存信息查询。该页面可以链接到cargo_in_select.php、cargo_out_select.php、cargo_joint_select.php。cargo_in_select.php入库信息的组合查询页面,该页面通过设置查询条件,可以实现用户对入库信息复杂的查询需求,并能够对查询信息进行修改和删除等操作。cargo_out_select.php出库信息的组合查询页面,该页面通过设置查询条件,可以实现用户对出库信息复杂的查询需求,并能够对查询信息进行修改和删除等操作。cargo_joint_select.php库存信息组合查询页面,该页面通过设置查询条件,可以实现用户对货物库信息复杂的查询需求。任务描述

根据系统功能的需求,本项目使用MySQL创建数据库(storagemanage),并在数据库中建立了4个表,分别是用户表(user)、货物信息表(cargo)、入库信息表(cargo_in)、出库信息表(cargo_out)。任务7.2仓储管理系统数据库规划1.用户表(user)的设计

在仓储管理系统中,用户表是核心基础表之一,用于存储和管理系统操作人员、管理员的登录信息。以下是用户表的详细说明,包括字段设计、功能作用。2.货物信息表(cargo)的设计

在仓储管理系统中,货物信息表用于存储和管理库存中所有货物的详细信息。它支撑了入库、出库、库存查询等关键业务。以下是货物信息表的详细说明,包括字段设计、功能作用。3.入库信息表(cargo_in)的设计

入库信息表是用于记录货物进入仓库详细信息的数据库表,用于存储和管理货物入库信息的表。以下是入库信息表的详细说明,包括字段设计、功能作用。4.出库信息表(cargo_out)的设计

出库信息表是用于记录货物取离仓库详细信息的数据库表,用于存储和管理货物取离信息的表。以下是出库信息表的详细说明,包括字段设计、功能作用。任务描述

登录页面是仓储管理系统用户访问系统的第一个交互界面

温馨提示

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

评论

0/150

提交评论