雇员信息管理系统(5)分层架构模式

  分层模式采用层次化的组织方式,每一层都是为上一层提供服务,并使用下一层提供的功能。这种模式允许将一个复杂问题逐步分层实现。层次模式中的每一层最多只影响两层,只要给相邻层提供相同的接口,就允许每层用不同的方法实现,可以充分支持软件复用。 
分层模式的典型应用是分层通信协议,如ISO/OSI的七层网络模型。 
  分层模式的优点如下。 
    (1)有助把复杂的问题按功能分解,使整体设计更为清晰。 
    (2)支持系统设计的逐级抽象。 
    (3)具有较好的可扩展性。 
    (4)支持复用。 
  分层模式的缺点如下。 
    (1)并不是每个系统都可以很容易地划分出层次来;同时,各层功能的划分也没有一个统一的、正确的抽象方法。 
    (2)层次的个数过多,系统性能可能会下降。

 

    程序关系图如下


 

 

 1 <!DOCTYPE html>
 2 <html>
 3     <HEAD>
 4         <TITLE>雇员信息系统</TITLE>
 5         <META http-equiv = "content-type" content="text/html; charset = utf-8 ">
 6 <!--连接外部样式表wcss.css-->
 7         <LINK rel="stylesheet" href="wcss.css" type="text/css" />
 8     </HEAD>
 9     <BODY><CENTER>
10     <!--DIV用于调整表单的垂直位-->
11         <DIV style="height: 60px; width: 50px"></DIV>
12         <H1>管理员登录</H1>
13         <FORM action="loginprocess.php" method="post"><TABLE>
14     <!--TR标签内是同一行的内容,TH标签内是同一列的内容-->
15             <TR><TH>
16                 账号:<INPUT type="text" name="id" >
17                 <TH> <DIV class="error"><?PHP 
18                     if (isset($_GET['error']))
19                         echo"*账号或密码错误!";
20                 ?></DIV></TH>
21     <!--判断表单错误信息的存在和显示;DIV防止表单错误信息影响布局-->
22              <TR><TH>密码:<INPUT type="password" name="password" ></TH></TR>
23              <TR>
24                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
25                 <TH><INPUT type="submit" value="登录" >
26                 &nbsp;&nbsp;&nbsp;
27                 <INPUT type="reset" value="重置" ></TH>
28              </TR>
29         </TABLE></FORM>
30              </TH></TR>
31     </CENTER></BODY>
32 </html>
loginview.php
1 <?PHP 
2     require_once "Session.class.php";
3     $session=new Session();
4     $session->destroy();
5     header("Location:loginview.php");
6 ?>
loginprocess.php
 1 <!DOCTYPE html>
 2 <html>
 3     <HEAD>
 4         <TITLE>欢迎使用雇员信息管理系统</TITLE>
 5         <META http-equiv = "content-type" content="text/html; charset = utf-8 " >
 6 <!--连接外部样式表wcss.css-->
 7         <LINK rel="stylesheet" href="wcss.css" type="text/css" />
 8     </HEAD>
 9     <BODY>
10     <!--混合使用div标签与span标签实现同一行文本不同样式-->
11         <?PHP 
12             require_once "Session.class.php";
13             $session=new Session();
14             $name=$session->get('name');
15             if($name!=false)
16                 echo "<div class='welcome'>欢迎<span class='welcome'>".$name."</span>登录成功!</div>";
17             else
18                 header("Location:loginview.php");
19         ?>
20         <HR>
21         <DIV class='mainop' >
22             <DIV><A href="#">管理用户</A></DIV>
23             <DIV><A href="#">添加用户</A></DIV>
24             <DIV><A href="queryview.php">查询用户</A></DIV>
25             <DIV><A href="logoutprocess.php">退出系统</A></DIV>
26         </DIV>
27     </BODY>
28 </html>
mainview.php
1 <?PHP 
2     require_once "Session.class.php";
3     $session=new Session();
4     $session->destroy();
5     header("Location:loginview.php");
6 ?>
logoutprocess.php
 1 <!DOCTYPE html>
 2 <html>
 3     <HEAD>
 4         <TITLE>雇员信息表</TITLE>
 5         <META  http-equiv = "content-type" content="text/html; charset = utf-8 " >
 6         <LINK rel="stylesheet" href="wcss.css" type="text/css" />
 7     </HEAD>
 8     <BODY>
 9         <DIV style="height: 20px"></DIV>
10         <TABLE class="op"><TR>
11             <TH><A href="#">>管理用户</A></TH>
12             <TH><A href="#">>添加用户</A></TH>
13             <TH><A href="#">>查询用户</A></TH>
14             <TH><A href="logoutprocess.php">>退出系统</A></TH>
15         </TR></TABLE>
16         <HR>
17         <?PHP 
18             if (isset($_GET['pageNow'])) 
19                 $pageNow=$_GET['pageNow'];
20             else
21                 $pageNow=1;
22             
23             $pageSize=1;
24             require_once "PagingDisplay.class.php";
25             $emService=new EmService();
26             $emService->pagingDisplay($pageSize,$pageNow);    
27         ?>
28     </BODY>
29 </html>
queryview.php
 1 <?PHP 
 2 /*封装所有对ad表的操作*/
 3 require_once "Session.class.php";
 4 require_once "SqlHelper.class.php";
 5 class AdService
 6 {
 7     public function match($id,$password)
 8     {
 9         $session=new Session();
10         $sqlHelper=new SqlHelper();        
11         $data=$sqlHelper->execute_sql('SELECT password,name FROM ad INNER JOIN em ON ad.id=em.id WHERE ad.id='.$id,MYSQL_ASSOC);
12         $sqlHelper->close_connect();
13         //判断查询结果是否存在及是否完全匹配
14             //md5(),计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
15         if ($data && $data[0]['password']==md5($password)) 
16         {
17             //匹配成功,跳转到mainview.php,并使用session保存管理员姓名
18             $name=$data[0]['name'];
19             $session->set("name",$name);
20             header("Location:mainview.php");
21             die();
22         }
23         //匹配失败,跳转到loginview.php,并发送错误信息error
24         header("Location:loginview.php?error=1");
25         die();
26     }
27 }
28 ?>
AdService.class.php
 1 <?PHP 
 2 /*封装所有对em表的操作*/
 3 require_once "SqlHelper.class.php";
 4 class EmService
 5 {
 6     public function pdQuery($pageSize,$pageNow)
 7     {
 8         $sqlHelper=new SqlHelper();        
 9         $data=$sqlHelper->execute_sql("SELECT * FROM em LIMIT ".($pageNow-1)*$pageSize.",".$pageSize,MYSQL_ASSOC);
10         return $data;
11     }
12     public function get_pageCount()
13     {
14         $sqlHelper=new SqlHelper();
15         $data=$sqlHelper->execute_sql("SELECT COUNT(id) FROM em ",MYSQL_NUM);    
16         if($data)
17             return $data[0][0];
18         else
19             return null;
20     }
21     public function pagingDisplay($pageSize,$pageNow)
22     {
23         $pagingDisplay=new PagingDisplay($pageSize,$pageNow,$this->get_pageCount());
24         $data=$this->pdQuery($pagingDisplay->pageSize,$pagingDisplay->pageNow);
25         echo '<table border="1" width="600" align="center">';
26         echo '<caption><h1>雇员信息表</h1>第'.$pagingDisplay->pageNow.'页,共'.$pagingDisplay->rowCount.'页</caption>';
27         echo '<tr bgcolor="#dddddd">';
28         echo '<th>id</th><th>姓名</th>';
29         echo '</tr>';
30         for($i=0;$i<count($data);$i++)
31         {
32                echo '<tr>';
33             echo '<th>'.$data[$i]['id'].'</th><th>'.$data[$i]['name'].'</th>';
34             echo '</tr>';
35            }
36            echo '</table>';
37         $fileName="queryview.php";
38         $pagingDisplay->page_turn($fileName);
39         echo "<br>";
40         $pagingDisplay->page_number($fileName);
41         $pagingDisplay->page_jump($fileName);
42     }
43 }
44 ?>
EmService.class.php
 1 <script>
 2 function myFunction()
 3 {
 4     alert("Hello World!");
 5 }
 6 </script>
 7 
 8 <?PHP 
 9 /*分页显示相关操作*/
10 require_once "EmService.class.php";
11 class PagingDisplay
12 {
13     public $pageSize=1;//每页信息条数
14     public $pageNow=1;//当前页码
15     public $rowCount=1;//全表总信息条数
16     public $pageCount=1;//全表总页数
17     //构造函数
18     function __construct($pageSize,$pageNow,$rowCount)
19     {
20         $this->pageSize=$pageSize;
21         $emService=new EmService();
22         $this->rowCount=$emService->get_pageCount();
23         $this->pageCount=ceil($this->rowCount/$this->pageSize); 
24         $this->pageNow=$pageNow;
25     }
26     //翻页导航
27     public function page_turn($fileName)
28     {
29         if ($this->pageNow>1) 
30         {
31             $pagePrevious=$this->pageNow-1;
32             echo "<a href='$fileName?pageNow=$pagePrevious'>上一页</a>";
33         }     
34         else 
35             echo "上一页";
36         echo "&nbsp";
37         if ($this->pageNow<$this->rowCount) {
38             $pageNext=$this->pageNow+1;
39             echo "<a href='$fileName?pageNow=$pageNext'>下一页</a>";
40         } 
41         else
42         {
43             echo "下一页";
44         }
45     }
46     //页码导航
47     public function page_number($fileName,$pageNum=5)
48     {
49         echo "第&nbsp";
50         //计算第一个跳转超链接的页码page1
51         //floor()地板函数,向下取整
52         /*当当前页码pageNow等于显示数pageNum的一半时,
53         第一个跳转超链接的页码page1恰为1,恰保证页码跳转显示的超链接个数为pageNum。
54         故当pageNow小于pageNum的一半时,为了保证页码跳转显示的超链接个数仍为pageNum,
55         page1亦为1*/
56         if ($this->pageNow <= ceil($pageNum/2))
57             $page1=1;
58         /*同理*/
59         elseif ($this->pageNow >= $this->rowCount-floor($pageNum/2)) 
60             $page1=$this->rowCount-$pageNum+1;
61         else
62             $page1=$this->pageNow-floor($pageNum/2);
63     //打印省略号
64         if ($this->pageNow > ceil($pageNum/2)) 
65             echo "<span style='color:blue;'>...</span>";
66         else
67             echo "&nbsp&nbsp&nbsp";
68     //打印的页码pagePrint
69         for ($i=0; $i < $pageNum; $i++)
70         {
71         //sprintf("%02d",$page1+$i),表示对$page1+$i补0成两位数
72             $pagePrint=sprintf("%02d",$page1+$i);
73             if ($pagePrint==$this->pageNow) 
74                 echo "<a href='$fileName?pageNow=$pagePrint' style='font-size: 30px;'>[$pagePrint]</a>&nbsp";
75             else 
76                     echo "<a href='$fileName?pageNow=$pagePrint'>[$pagePrint]</a>&nbsp";            
77         }
78     //打印省略号
79         if ($this->pageNow <= ceil($pageNum/2)) 
80             echo "<span style='color:blue;'>...</span>";
81         else
82             echo "&nbsp&nbsp&nbsp";
83             echo "&nbsp页";
84     }
85     //定向跳转
86     public function page_jump($fileName)
87     {
88         echo "
89             <form  action=$fileName method='get' name='page_jump' >
90                 <input type='text' name='pageNow'></input>
91                 <input type='submit' value='跳转到''></input>
92             </form>
93             ";
94     }
95 }
96 ?>
PagingDisplay.class.php
 1 <?PHP 
 2 /*封装所有对Session的操作*/
 3 class Session
 4 {
 5     //开始一个会话或者返回已经存在的会话。
 6     function Session()
 7     {
 8         session_start();
 9     }
10      //注册session变量并赋值
11     function set($name, $value)
12     {
13         $_SESSION[$name] = $value;
14     }
15      //获取session变量
16     function get($name)
17     {
18         if(isset($_SESSION[$name]))
19             return $_SESSION[$name];
20         else
21             return false;
22     }
23     //删除session变量$_SESSION[$name]
24     function del($name)
25     {
26         unset($_SESSION[$name]);
27     }
28       //重置当前会话所关联的全局变量并销毁当前会话中的全部数据
29     function destroy()
30     {
31         //重置当前会话所关联的全局变量
32         $_SESSION = array();
33         //变量并销毁当前会话中的全部数据
34         session_destroy();
35     }
36 }
37 ?>
Session.class.php
 1 <?PHP 
 2 /*封装所有对aedb数据库的操作*/
 3 class SqlHelper
 4 {
 5         public $conn;//SQL连接标识符。
 6         public $dbname="aedb";
 7         public $host="localhost";
 8         public $username="root";
 9         public $password="root";
10         public $characterSet="set names utf8";
11         //构造函数
12         public function __construct()
13         {
14             //获得连接SQL连接标识符conn。
15             $this->conn=mysql_connect($this->host,$this->username,$this->password);
16             if (!$this->conn) 
17                 die("连接失败!错误信息:".mysql_errno());
18             //设置访问数据库的编码
19             mysql_query($this->characterSet,$this->conn) or die("设置编码失败!错误信息:".mysql_errno());
20             //选择数据库
21             mysql_select_db($this->dbname,$this->conn) or die("选择数据库失败!错误信息:".mysql_errno());
22         }
23         //关闭连接
24         public function close_connect()
25         {
26             mysql_close($this->conn);
27         }
28         //获取表信息
29         public function execute_sql($sql,$array_type)
30         {
31             //获取资源标识符res,若失败mysql_query()返回FALSE
32             $res=mysql_query($sql,$this->conn) or die("获取资源标识符失败!错误信息:".mysql_errno());
33             /*mysql_fetch_array()从结果集中取得一行作为关联数组,或数字数组,或二者兼有
34             返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。
35             根据参数$array_type:MYSQL_ASSOC - 关联数组
36                                MYSQL_NUM - 数字数组
37                                MYSQL_BOTH - 默认。同时产生关联和数字数组*/
38             $data = array();
39             while ($row=mysql_fetch_array($res,$array_type)) {
40                 $data[]=$row;
41             }
42         //释放结果内存。成功返回 true,失败返回 false
43             mysql_free_result($res);
44             return $data;
45         }
46 }
47 ?>
SqlHelper.class.php
 1 body{
 2     background-color:#ABC;
 3     text-align:center;
 4     margin:0 auto; 
 5 }
 6 
 7 table.op{
 8     width:900px; 
 9     font-size: 20px; 
10     font-weight:700; 
11     text-align:center;
12     margin:0 auto;
13 }
14 
15 
16 
17 hr{
18     height:5px; 
19     border:none; 
20     border-top:5px double blue;
21 }
22 
23 div.error{
24     height: 20px;
25     width: 150px; 
26     color:red; 
27     size:2px;
28     float:left
29 }
30 
31 div.welcome{
32     color:red; 
33     font-size: 50px; 
34     font-weight:700; 
35 
36 }
37 
38 span.welcome{
39     color:yellow; 
40     font-weight:700; 
41 }
42 
43 span.ellipsis{
44     color:blue; 
45 }
46 
47 div.mainop{
48     width:900px; 
49      margin:0 auto;
50     font-size: 40px; 
51     font-weight:700; 
52 
53 }
54 
55 table.em{
56     width:700px; 
57     margin:0 auto;
58 }
wcss.css

 

转载于:https://www.cnblogs.com/maguariji/p/7268393.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值