一.需求分析
该项目完成如下功能:
1. 管理员可以登录到管理界面
2. 可以对雇员进行增加
3. 可以对雇员进行修改
4. 可以查看雇员(分页显示)
5. 可以删除雇员
二.设计数据库
请注意:对于一个大型项目而言.我们建议表的字段名可以采用
表名_字段名
管理员表:
admin
create table admin(
id int primary key ,
name varchar(32) not null,
password varchar(128) not null);
雇员表 emp
create table emp(
id int primary key auto_increment,
name varchar(64) not null,
grade tinyint, /*1 表示1级工.. */
email varchar(64) not null,
salary float
)
表创建到mysql数据库
添加初始化数据
insert into emp (name,grade,email,salary)
values('shunping',1,'shunping@sohu.com',200);
insert into admin values(100,'admin',md5('admin'));
1. 代码阶段
准备素材(图片,静态页面,flash,文字...)..
要求:如果登录不成功,在login.php页面显示红色的提示信息.
在管理页面提供一个超链接,可以退出系统
① 如果完成不到数据库验证,就可以登录成功,如果不成功,给出提示.
② 要求到数据库去验证,该用户是否存在.
③ 在管理页面显示登录成功的人名字
思路: 通过跳转把用户名专递给 empManage.php页面
④ 在用户列表页面(empList.php)显示所有的用户信息
⑤ 考虑分页显示我们的用户信息.
思路:
在分页中有几个变量是必须的
5.1 $pageNow ->显示第几页 用户输入
5.2 $pageCount -> 共有几页 [在程序中算法 ]
5.3 $rowCount ->共有多少条记录 [这个数据库获取]
5.4 $pageSize ->每页显示几条记录 [程序员定义]
实例
说明
$pageNow=1
$rowCount=7
$pageSize=3
讨论 $pageCount怎样计算
//小算法
$pageNow=1
$rowCount=7
$pageSize=3
$pageCount=ceil($rowCount/$pageSize);
//刚好能整除
/*if($rowCount%$pageSize==0){
$pageCount=$rowCount/$pageSize;
}else{
$pageCount= ceil($rowCount/$pageSize);
}*/
?>
测试一下分页的效率 ,在实际开发中,数据量很大,因此,需要我们测试当数据量大时,是否可以满足用户需求.,模拟大量的数据 20w
mysql 自我复制
insert into emp (name,grade,email,salary) select name,grade,email,salary
from emp;
⑥ 网站结构的问题
从整个项目看,我们的页面中 loginProcesss.php 和 empList.php中有对数据库的操作,代码有重复
在empList.php 页面中有显示用户信息,还有分页逻辑 ,界面和业务逻辑混合,不好
说明一下我们的软件(网站),开发经过了三个阶段
model1 -> 分层(mv)->mvc模式
mdel1 基本概念是: 把界面和业务放在一个页面完成.
分层模式 基本概念是; 把界面和业务分开编写.->好处就是结构清晰,利于分工开发.
mvc 模式: 基本概念: 强制把数据的输入,数据的处理,数据的显示分开
u 使用分层模式来完成雇员信息分页的功能
思路:
1. 在什么文件中去封装我们的分页代码->EmpService.class.php
2. 通过分析我们知道为了完成分页我们的empList.php 文件需要两个重要的数据 一个是 $pageCount 第二个是 分页需要显示的数据
$res2
3. 代码
4. 我们要处理如果关闭资源的问题,问题很重要.
上机的任务:
框架图的用户登录,分页显示雇员信息,使用分层模式开完成.体会一下该模式的特点.,同时考虑实现 10页翻页的功能.
同时考虑实现 10页翻页的功能
思路的分析:
$page_whole=10;
$start=floor(($pageNow-1)/$page_whole)*$page_whole+1;
$index=$start;
//整体每10页向前翻
//如果当前pageNow在1-10页数,就没有向前翻动的超连接
if($pageNow>$page_whole){
echo " <<
";
}
//定$start 1---》10 floor((pageNow-1)/10)=0*10+1 11->20
floor((pageNow-1)/10)=1*10+1 21-30 floor((pageNow-1)/10)=2*10+1
for(;$start
echo "[$start]";
}
//整体每10页翻动
echo " >>
";
u 请大家考虑,目前我们为了完成分页,是写在EmpSerivice 类,我们能不能做一个通用的方法,可以适用于各种情况的分页?
u 如何做一个通用的分页模块(函数)
思路:
我设计一个FenyePage 类,该类可以封装我们分页需要的各种信息
class FenyePage{
public $pageSize=6;
public $res_array; //这是显示数据
public $rowCount; //这是从数据库中获取
public $pageNow; //用户指定的
public $pageCount; //这个是计算得到的
}
u 我增加一个新的功能,删除某个雇员
1. 我们使用传统的方法来完成,然后分析问题所在?
把删除用户的请求,提交给empList.php页面本身,因为empList.php页面目前可以接收两种请求,因此我们需要分别对待,最简单的方法就是设置一个标志位
flag
分析: 我们如果真的这样吧删除请求,直接交给empList.php, 这个页面好的结构会被坏,所以这个页面又会变得臃肿