MVC模式学习--雇员管理系统项目开发

1, 项目开发,使用原型开发,

① 开发流程:

需求分析->设计阶段->编码阶段->测试阶段->发布阶段/维护阶段

需求阶段:PM/项目经理 对客户

设计阶段:技术人员(架构师,组长,程序员)->设计数据库

开发阶段:组长,程序员

测试阶段:测试人员

发布阶段:实施工程师

维护阶段:开发人员

② 对应于php研发流程:

需求阶段:PM与项目经理定好需求,美工UI(ps画图)->网页前端人员UE(div+css),PM和项目经理根据静态页面与客户探讨不断修改;

设计阶段:架构师设计框架,设计数据库;

开发阶段: php研发人员与js前端设计人员开发;

测试阶段:测试人员测试;

发布阶段:php研发人员与js前端设计人员发布;

维护阶段:php研发人员与js前端设计人员维护;

2, 需求设计:

① 管理员可以登录到管理界面;

② 管理员可以对雇员进行增加;

③ 管理员可以对雇员进行修改;

④ 管理员可以查看雇员(分页显示);

⑤ 管理员可以删除雇员;

附带:可以实现用户在一定时间内不用反复登陆;可以统计网站被访问的次数。

3, UML时序图

4, 美工UI图片,UE设计静态页面,界面设计

登录界面,主界面,显示记录页面

5, 设计数据库,管理员数据表和用户数据表(使用PowerDesigner)

CDM(Categories---Information---Conceptual Data)(TOOLS—Model option –Notation----E/R+Merise)

PDM(TOOLS---Generate Physical Data Model 选择mysql5.0)

生成sql语句(Database---Generate Database)。生成内容如下:

/*==============================================================*/
/* DBMS name:      MySQL 5.0                                    */
/* Created on:     2015/11/4 1:03:19                            */
/*==============================================================*/

drop table if exists admin;

drop table if exists emp;

/*==============================================================*/
/* Table: admin                                                 */
/*==============================================================*/
create table admin
(
    id                   int not null auto_increment,
   name                 varchar(64),
   password             varchar(64),
   primary key (id)
);

/*==============================================================*/
/* Table: emp                                                   */
/*==============================================================*/
create table emp
(
    id                  int not null auto_increment,
   name                 varchar(64),
   grade                int,
   email                varchar(64),
   salary               float,
   primary key (id)
);

注:将emp数据表的id1修改为id,执行以下语句,生成数据表。

6, 代码阶段

① Model1模式,没有分层概念,也就是把界面显示和业务逻辑的处理放在一个文件夹中完成。

② 分层模式,界面和业务逻辑分离。

③ MVC模式,在分层模式中加控制器,强制把数据的输入,数据的处理,数据的显示分开。PHP中MVC框架Zend framework,thinkphp,cakephp,yii。

7, MVC设计模式,MVC是一种软件设计模式,分为M、V、C三部分。

① M(model模型),处理业务逻辑的类文件,比如Admin.class.php,AdminServer.class.php以及工具类等;

② C(controller控制器),控制器的主要作用是接收用户的请求,并调用某个service方法,完成任务,然后跳转到下一个页面;

③ V(view视图/界面),前端页面;

MVC的核心思想就是强制程序员在编写项目时候,把数据的输入/数据的处理/数据的输出分开。具体流程如下:

没有必要对每一个请求,对应生成一个控制器,可以把同一逻辑的请求,提交给一个控制器(数据表)即可。

8, 代码层次如下:

代码页目录结构如下:

具体每个代码页:

login.php

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=GB2312" />
    <title>雇员管理系统登陆页面</title>
</head>
<body>
<form action="loginProcess.php" method = "post">
    用户名:<input type="text" name="username" /><br/>
    密码:<input type="password" name="passwd" /><br/>
    <input type="submit" value="登陆" name="sub" /><input type="reset" value="重新填写" name="res" />
</form>
</body>
</html>

loginProcess.php

<?php
require_once "AdminServer.class.php";
$username = $_POST[‘username‘];
$passwd = $_POST[‘passwd‘];
if(!$username || !$passwd){
    echo "用户名或密码不能为空!,请重新<a href=‘login.php‘>登陆</a>";
}

if(AdminServer::checkLogin($username, $passwd)){
    header("Location:empManage.php?name={$username}");
}else{
    header("Location:login.php");
}

empManage.php

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=GB2312" />
    <title>用户管理页面</title>
</head>
<body>
<?php
echo $_GET[‘name‘];
?>,欢迎你
    <h1>主界面</h1>
    <a href="empList.php">管理用户</a><br/>
    <a href="empAdd.php">添加用户</a><br/>
    <a href="#">查询用户</a><br/>
    <a href="login.php">重新登录</a><br/>
    <a href="#">退出系统</a><br/>
</body>
</html>

empList.php

<?php
require_once "fenyePage.class.php";

//显示第几页内容
$pageNow = $_GET[‘pageNow‘]?$_GET[‘pageNow‘]:1;
$fenyePage = new fenyePage(‘emp‘, $pageNow, ‘empList.php‘);

$res = $fenyePage->getListByFenye();

echo "<table border=1>";
echo "<tr><th>用户ID</th><th>用户名</th><th>邮件</th><th>级别</th><th>修改用户</th><th>删除用户</th></tr>";
foreach($res as $key => $row){
    echo "<tr><td>{$row[‘id‘]}</td><td>{$row[‘name‘]}</td><td>{$row[‘email‘]}</td><td>{$row[‘grade‘]}</td><td><a href=‘empUpdate.php?id={$row[‘id‘]}‘>修改用户</a></td><td><a href=‘empProcess.php?flag=del&id={$row[‘id‘]}‘>删除用户</a></td></tr>";
}
echo "</table>";

$fenyeBanner = $fenyePage->getFenyeBanner();
echo $fenyeBanner;
?>

empProcess.php

<?php
require_once "EmpServer.class.php";

$empServer = new EmpServer();
$flag = $_REQUEST[‘flag‘];
if(!empty($flag)){
    if($flag == ‘del‘){ // 执行删除操作
        $id = $_GET[‘id‘];
        $b = $empServer->delEmpById($id);
        if($b == 1){
//        echo "删除成功!";
            header("Location:empList.php");
        }else{
            echo "删除失败!";
        }
    }else if($flag == ‘add‘){   //执行添加操作
        $name = $_POST[‘name‘];
        $grade = $_POST[‘grade‘];
        $email = $_POST[‘email‘];
        $salary = $_POST[‘salary‘];
        $b = $empServer->addEmp($name, $grade, $email, $salary);

//        $emp = new Emp();
//        $emp->setName($name);
//        $emp->setGrade($grade);
//        $emp->setEmail($email);
//        $emp->setSalary($salary);

//        $b = $empServer->addEmp($emp);
    }else if($flag == ‘update‘){  //执行修改操作
        $id = $_POST[‘id‘];
        $name = $_POST[‘name‘];
        $grade = $_POST[‘grade‘];
        $email = $_POST[‘email‘];
        $salary = $_POST[‘salary‘];

        $b = $empServer->updateEmpById($id, $name, $grade, $email, $salary);
        if($b){
            header("Location:empList.php");
        }else{
            echo "修改失败!";
        }
    }

}

empAdd.php

<h1>添加用户</h1>
<form action="empProcess.php" method="post">
    <input type="hidden" name="flag" value="add">
<table>
    <tr><td>用户名:</td><td><input type="text" name="name" /></td></tr>
    <tr><td>级别:</td><td><input type="text" name="grade" /></td></tr>
    <tr><td>邮箱:</td><td><input type="text" name="email" /></td></tr>
    <tr><td>工资:</td><td><input type="text" name="salary" /></td></tr>
    <tr><td colspan="2"><input type="submit" value="添加用户" /><input type="reset" value="重新填写"></td></tr>
</table>
</form>

empUpdate.php

<?php
$id = $_GET[‘id‘];
require_once "EmpServer.class.php";
$empServer = new EmpServer();
$res = $empServer->getEmpById($id);
$row = $res[0];
?>
<h1>修改用户</h1>
<form action="empProcess.php" method="post">
    <input type="hidden" name="flag" value="update">
    <input type="hidden" name="id" value="<?=$id?>">
    <table>
        <tr><td>用户名:</td><td><input type="text" name="name" value="<?=$row[‘name‘]?>" /></td></tr>
        <tr><td>级别:</td><td><input type="text" name="grade" value="<?=$row[‘grade‘]?>" /></td></tr>
        <tr><td>邮箱:</td><td><input type="text" name="email" value="<?=$row[‘email‘]?>" /></td></tr>
        <tr><td>工资:</td><td><input type="text" name="salary" value="<?=$row[‘salary‘]?>" /></td></tr>
        <tr><td colspan="2"><input type="submit" value="修改用户" /><input type="reset" value="重新填写"></td></tr>
    </table>
</form>

Admin.class.php

<?php
class Admin
{
    private $id;
    private $name;
    private $password;

    public function setId($id){
        $this->id = $id;
    }

    public function getId(){
        return $this->id;
    }

    public function setName($name){
        $this->name = $name;
    }

    public function getName(){
        return $this->name;
    }

    public function setPassword($password){
        $this->password = $password;
    }

    public function getPassword(){
        return $this->password;
    }

}

AdminServer.class.php

<?php
require "SqlHelper.class.php";
class AdminServer
{

    //验证登陆正确
    public function checkLogin($username, $password){
        $b = false;
        $sqlHelper = new SqlHelper();
        $sql = "select password from admin where name = ‘{$username}‘";
        $res = $sqlHelper->execute_query($sql);
        if($res){
            while($row = mysqli_fetch_assoc($res)){
                if($row[‘password‘] == md5($password)){
                    $b = true;
                }
            }
        }
        $sqlHelper->close_connect();
        return $b;
    }

}

Emp.class.php

<?php
class Emp
{
    private $id;
    private $name;
    private $grade;
    private $email;
    private $salary;

    public function setId($id){
        $this->id = $id;
    }

    public function getId(){
        return $this->id;
    }

    public function setName($name){
        $this->name = $name;
    }

    public function getName(){
        return $this->name;
    }

    public function setGrade($grade){
        $this->grade = $grade;
    }

    public function getGrade(){
        return $this->grade;
    }

    public function setEmail($email){
        $this->email = $email;
    }

    public function getEmail(){
        return $this->email;
    }

    public function setSalary($salary){
        $this->salary = $salary;
    }

    public function getSalary(){
        return $this->salary;
    }
}

EmpServer.class.php

<?php
require_once "SqlHelper.class.php";
class EmpServer
{
    //根据id删除某条记录
    public function delEmpById($id){
        $sqlHelper = new SqlHelper();
        $sql = "delete from emp where id = {$id}";
        $b = $sqlHelper->execute_dml($sql);
        $sqlHelper->close_connect();
        return $b;
    }

    //添加某条记录
    public function addEmp($name, $grade, $email, $salary){
        $sqlHelper = new SqlHelper();
        $sql = "insert into emp(name,grade,email,salary) VALUES (‘{$name}‘,‘{$grade}‘,‘{$email}‘,‘{$salary}‘)";
        $res = $sqlHelper->execute_dml($sql);
        $sqlHelper->close_connect();
        return $res;
    }

    //查询某个id对应的记录
    public function getEmpById($id){
        $sqlHelper = new SqlHelper();
        $sql = "select * from emp where id = {$id}";
        $res = $sqlHelper->execute_dql($sql);
        $sqlHelper->close_connect();
        return $res;
    }

    //修改某个id对应的记录
    public function updateEmpById($id, $name, $grade, $email, $salary){
        $sqlHelper = new SqlHelper();
        $sql = "update emp set name=‘{$name}‘,grade=‘{$grade}‘,email=‘{$email}‘,salary=‘{$salary}‘ where id = ‘{$id}‘";
        $res = $sqlHelper->execute_dml($sql);
        $sqlHelper->close_connect();
        return $res;
    }
}

fenyePage.class.php

<?php
require_once "SqlHelper.class.php";
class fenyePage
{
    private $table;
    private $pageNow;
    private $pageCount;
    private $rowCount;
    private $pagesize;
    private $gotoUrl;

    public function __construct($table, $pageNow, $gotoUrl){
        $sqlHelper = new SqlHelper();
        $this->table = $table;
        $this->pageNow = $pageNow;
        $this->pageSize = 2;
        $getCountSql = "select count(id) as num from {$table}";
        $this->rowCount = $sqlHelper->getCount($getCountSql);
        if($this->pageSize){
            $this->pageCount = ceil($this->rowCount/$this->pageSize);
        }
        $this->gotoUrl = $gotoUrl;
    }

    //获取某一页的记录数据
    public function getListByFenye(){
        $sqlHelper = new SqlHelper();
        //显示某页记录数
        $limitBegin = $this->pageSize*($this->pageNow - 1);

        $getListPerPageSql = "select * from {$this->table} limit $limitBegin,$this->pageSize";
        $res = $sqlHelper->execute_dql($getListPerPageSql);
        return $res;
    }

    //获取分页下部分
    public function getFenyeBanner(){
        $pageNext = ((int)$this->pageNow+1) > $this->pageCount?$this->pageCount:((int)$this->pageNow+1);
        $pagePeriod = ((int)$this->pageNow-1) < 1?1:((int)$this->pageNow-1);
        return "<form action=‘{$this->gotoUrl}‘><a href=‘{$this->gotoUrl}?pageNow=1‘>首页</a>  
        <a href=‘{$this->gotoUrl}?pageNow={$pagePeriod}‘>上一页</a>  
        <a href=‘{$this->gotoUrl}?pageNow={$pageNext}‘>下一页</a>  
        <a href=‘{$this->gotoUrl}?pageNow={$this->pageCount}‘>尾页</a>  
        <input type=‘text‘ name=‘pageNow‘ value=‘{$this->pageNow}‘>/{$this->pageCount}<input type=‘submit‘ value=‘GO‘>
        </form>";
    }

}

SqlHelper.class.php

<?php
//操作数据库的工具类
class SqlHelper
{
    private $conn;
    private $host = "10.252.158.217"; //118.207.76.55
    private $username="root";
    private $password="521lhy";
    private $dbname = "test";

    //类的初始化,获得链接
    public function __construct(){
        $this->conn = new MySQLi($this->host, $this->username, $this->password, $this->dbname);
        if($this->conn->connect_error){
            die("连接错误!".$this->conn->connect_error);
        }

        $this->conn->query("set names utf-8");
    }

    //执行sql语句
    public function execute_query($sql){
        $res = $this->conn->query($sql) or die($this->conn->error);
        return $res;
    }

    //执行dql语句
    public function execute_dql($sql){
        $arr = array();
        $res = $this->conn->query($sql) or die($this->conn->error);
        while($row = mysqli_fetch_assoc($res)){
            $arr[] = $row;
        }
        mysqli_free_result($res);
        return $arr;
    }

    //获取某数据表记录总数
    public function getCount($sql){
        $rowCount = 0;
        $res = $this->execute_query($sql);
        if($row = mysqli_fetch_assoc($res)){
            $rowCount = $row[‘num‘];
        }
        mysqli_free_result($res);
        return $rowCount;
    }

    //执行sql语句
    public function execute_dml($sql){
        $res = $this->conn->query($sql) or die($this->conn->error);
        if(!$res){
            return 0;
        }else{
            if(mysqli_affected_rows($this->conn) > 0){
                return 1;
            }else{
                return 2;
            }
        }
    }

    //关闭连接
    public function close_connect(){
        if($this->conn){
            $this->conn->close();
        }
    }
}

  

  

时间: 2024-10-05 17:32:31

MVC模式学习--雇员管理系统项目开发的相关文章

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

项目(1)----用户信息管理系统---项目开发(业务处理层)

项目开发---业务处理层 这里主要实现下面两个包中的类,其实性质和Dao和Dao的实现类一样,但为了规范,这里在写接口和实现类      com.study.user.service   //接口包             1.UserService.java     com.study.user.service.impl  //实现接口类             1.UserServiceImpl.java    1.UserService.java import java.util.List

项目(1)----用户信息管理系统---项目开发(数据管理层)

   项目开发(1)     这里实现下面三个步骤: 2.0建立数据库 2.1开发实体User 对象 2.2开发工具类 JDBCUtils 2.3开发DAO接口 和实现类 2.0建立数据库 create table t_user( id varchar2(37) , username varchar2(30), password varchar2(30) not null, email varchar2(30), birthday varchar2(30), preference varchar

学习html5 app项目开发

这周因为部门接了个小的html5 app case,所以从事android开发的我就接下了这个项目.与其说是项目需要,其实更大部分是我自己想要做html5 app,因为我对这个全新的平台已经好奇很久了.蠢蠢欲动很久了,只不过之前没有碰到项目练手而已. 好了,让我们开始这篇博文的主要内容吧.说到html5相信大家都不陌生了,的确这个概念已经在国内火了一段时间,但是大家对于html5具体能够干什么,到底在什么地方我应该使用html5呢?然后html5相较之前的版本又多了什么呢?且听我慢慢到来吧,首先

c# MVC模式学习笔记_数据验证

改变显示字段名称 设计字段规范 1.引用 1 using System.ComponentModel; 2 using System.ComponentModel.DataAnnotations; 2.DisplayName值 public class Book { public int BookID { get; set; } [DisplayName("ISBN")] public string isbn { get; set; } [DisplayName("图书名称:

Java的MVC模式简介

Java的MVC模式简介 MVC(Model View Control)模型-视图-控制器 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),即为MVC.它是一种软件设计的典范, 一.MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个

深入理解MVC模式

一,什么是MVC模式 该模式是一种软件设计典范,他把软件系统划分为三个基本部分:模型层(Model).视图层(View).控制器(Controller) *Model(模型)表示应用程序核心(比如数据库记录列表) *View(视图)显示数据(数据库记录) *Controller(控制器)处理输入(写入数据库记录) Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据 View(视图)是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的 Cont

分层模式开发+MVC模式开发--韩顺平雇员数据库管理

1.分层模式 在使用分层设计模式编写代码之前,我们更多的是采用面向过程然后眉毛胡子一把抓,在一两个程序代码里写完所有的功能,这样只适合于小型个人项目.因为不利于阅读和修改,只有编程的个人比较熟悉程序的结构.这不利于程序的扩展性和协同开发.所以,我们引入一个固定的模式来进行编程,使得所有代码结构清晰明确,而且易于扩展延伸. 此处介绍的一种模式是分层模式.把程序分成几个层次:界面层.业务逻辑层.数据层. 界面层:主要功能就是实现界面的显示.比如要在登陆页面显示输入框之类,就需要login.php中放

ASP.Net MVC开发基础学习笔记:一、走向MVC模式

一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/blog/index.aspx的URL,那么我们的WebForm程序会到网站根目录下去寻找blog目录下的index.aspx文件,然后由index.aspx页面的CodeBehind文件(.CS文件)进行逻辑处理,其中或许也包括到数据库去取出数据(其中的经过怎样的BLL到DAL这里就不谈了),然后再由