友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

php程序设计简明教程(DOC格式)-第12部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!



4 )业务查询  

根据用户输入的查询信息,查询出符合条件的业务记录。  



                         PHP 讲义    第  80  页  共  90  页  


…………………………………………………………Page 81……………………………………………………………

2。系统分析与设计  



分析以上用户需求,设计形成便于技术人员理解的专业技术描述。  

本例主要从数据和功能两个方面来分析和设计一个系统。  

从技术人员的角度来说,就是从数据库和程序两个方面,来分析和设计一个系统。  

 (1)数据库的分析与设计  

1)分析用户数据,形成概念设计,转化为关系模式,从而完成逻辑设计  

方法:采用实体…联系(E…R )方法  

两个基本实体:新闻和人员  

分别转化为关系  

关系一:新闻(标题,时间,作者,状态,内容)  

关系二:人员(帐号,密码,姓名,联系方式,权限)  

关系三:操作记录(姓名,操作机器,操作时间,操作类型,操作稿件)  

以上三个关系,是用户需求的原型表述,还不够规范,不便于直接应用于系统的设计。  

  

为此,下面对上面的关系,根据规范化理论,采用模式分解方法,进行规范化:  

关系一:新闻(标题,时间,作者,状态,内容)  

其中,状态属性值∈{提交待发,暂存,发布,退回}  

规范化后,分解为两个关系:  

①新闻(新闻代码,标题,时间,人员代码,状态代码,内容)  

②新闻状态(状态代码,状态名称)  



状态代码    状态名称  



1       提交待发  



2       暂存  



3       发布  



4       退回  



关系二:人员(帐号,密码,姓名,联系方式,权限)  

其中,权限属性值∈{登录,增加人员,修改人员,添加稿件,修改稿件,审核稿件}  

规范化后,分解为两个关系:  

③权限(权限代码,权限名称)  



权限代码    权限名称  



1       登录系统  



2       增加人员  



3       修改人员  



4       添加稿件  



5       修改稿件  



6       审核稿件  



7       业务查询  



④人员(人员代码,帐号,密码,姓名,联系方式,权限代码串)  

其中,权限代码串是权限代码的组合,表示权限组合。组合中,每种权限代码只出现一次。  

关系三:操作记录(姓名,操作机器,操作时间,操作类型,操作稿件)  

其中,每次仅限一种操作,这样,操作类型信息可用权限信息来代替,故关系规范化后,分解为两个关系:  

⑤操作记录(记录代码,人员代码,操作机器IP,操作时间,新闻代码,权限代码)  

③权限(权限代码,权限名称)  

上述关系①②③④⑤之间的联系,如下图所示:  



                           PHP 讲义    第  81  页  共  90  页  


…………………………………………………………Page 82……………………………………………………………

                                               



上图采用Microsoft Viso 画成。  

箭头指向表示外键(FK:Foreign Key )参照(参考解释的意思)。  

PK :Primary Key,主键。  

2 )数据库的物理设计与实现  

包括字段,表,数据库名称,用户和权限等内容的方案设计。  

命名约定:字段,表,数据库的命名采用汉语拼音首字母。  

方案设计的依据:概念设计和逻辑设计的成果:上述5 个关系模式。  

方案设计的步骤:自底向上,具体如下:  

第一步:字段设计——确定所有字段的名称、类型和宽度。  

第二步:表设计——确定数据表的名称,主键等。  

第三步:确定数据库名称。  

第四步:确定用户和权限方案。  

第五步:实现——在具体的DBMS 中实现上面四步的设计方案。  

下面逐一进行:  

n 第一步:字段设计  

方法:  

确定哪些属性参加字段设计:把所有关系中的属性集中列表,重复的字段只列一次,表中最终的这些属性需要设 

计其相应的字段。把它们集中到一起进行设计的目的是:避免重复设计。  

字段的命名:将每个属性转化成字段。根据命名约定确定字段的名称,  

字段的类型和宽度:根据实际需要确定类型和宽度,在满足应用需求的前提下,尽量减少存储宽度。  

字段设计结果:字段名称、类型和宽度  



序号   属性名       字段名    类型                   宽度(西文字符)  



1    新闻代码      xwdm   整型,无符号,自动编号          9  



2    标题        bt     变长字符型                50  



3    时间        sj     日期时间型                 (DBMS  自定)  



4    人员代码      rydm   微整型,无符号,自动编号         2  



5    状态代码      ztdm   微整型,无符号,自动编号         1  



6    内容        nr     文本型                   (DBMS  自定)  



7    状态名称      ztmc   变长字符型                8  



                              PHP 讲义    第  82  页  共  90  页  


…………………………………………………………Page 83……………………………………………………………

8    帐号         zh     变长字符型                  16  



9    密码         mm     变长字符型                  16  



10   姓名         xm     变长字符型                  8  



11   联系方式       lxfs   变长字符型                  20  



12   权限代码串      qxdmc  变长字符型                  7  



13   权限代码       qxdm   微整型,无符号,自动编号           1  



14   权限名称       qxmc   变长字符型                  8  



15   记录代码       jldm   整型,无符号,自动编号            9  



16   操作机器IP     czjq_ip  变长字符型                15  



17   操作时间       czsj   日期时间型                   (DBMS  自定)  



n 第二步:表设计——确定数据表的名称,表中包括的字段,字段中的主键、外键等  

方法:  

确定表名:遵照命名约定,将关系名转化为表名。  

确定表中的字段:根据原关系中的属性,选择相应的字段。  

确定主键和外键。  

表的设计  



序号   关系名      表名   表中字段                       主键     外键  



1    新闻       xw   xwdm;bt;sj;rydm;ztdm;nr    xwdm   rydm;ztdm  



2    新闻状态     xwzt  ztdm;ztmc                 ztdm     



3    人员       ry   rydm;zh;mm;xm;lxfs;qxdmc   rydm   qxdmc  



4    权限       qx   qxdm;qxmc                  qxdm     



5    操作记录     czjl  jldm;rydm;czjq_ip;czsj;xwdm;qxdm  jldm  rydm;xwdm;qxdm  



n 第三步:确定数据库名称  

xwxt (新闻系统)  

n 第四步:确定用户和权限方案  

用户和权限设计  



序  用户帐号       用户密码     登录主 用户权限                                       说明  

号                      机  



1    root     自行设定     自行设 全局全部权限                                     超级用户  

                       定  



2    user_xwxt  user_xwxt  localhost  仅对数据库 xwxt 内所有表具有 SELECT , 受限用户,程序访 

                       %       UPDATE ,DELETE ,INSERT 权限               问数据库用  



localhost :服务器所在机器。  

% :除localhost 以外的任何一台机器。  

n 第五步:实现——在具体的DBMS 中实现上面四步的设计方案  

选定的DBMS :我们选择MySQL 为实现上述物理方案设计的DBMS 。  

以超级用户身份,通过phpMyAdmin ,快速实现上述四步设定的方案。  

具体步骤:自上而下  

第一步:创建数据库xwxt  

第二步:依次创建5 个表,完成每个表中的字段设计,主键、外键设计。  

注意:凡是外键,不必设计成自动编号型(auto_increment )。  

第三步:创建用户user_xwxt ,设定其密码为:user_xwxt ,设定其权限为:对数据库xwxt  内所有表具有全部权限, 

无全局权限。关于超级用户root ,若已存在,则不必创建。  

这三步的实现,用MySQL 的脚本命令描述如下:  

CREATE DATABASE ‘xwxt‘;  

USE ‘xwxt‘;  

CREATE TABLE ‘xw‘ (  



                                PHP 讲义    第  83  页  共  90  页  


…………………………………………………………Page 84……………………………………………………………

‘xwdm‘ INT( 9 ) UNSIGNED NOT NULL AUTO_INCREMENT ;  

‘bt‘ VARCHAR( 50 ) NOT NULL ;  

‘sj‘ DATETIME NOT NULL ;  

‘rydm‘ TINYINT( 2 ) UNSIGNED NOT NULL ;  

‘ztdm‘ TINYINT( 1 ) UNSIGNED NOT NULL ;  

‘nr‘ TEXT NOT NULL ;  

PRIMARY KEY ( ‘xwdm‘ )    

);  

CREATE TABLE ‘xwzt‘ (  

‘ztdm‘ TINYINT( 1 ) UNSIGNED NOT NULL AUTO_INCREMENT ;  

‘ztmc‘ VARCHAR( 8 ) NOT NULL ;  

PRIMARY KEY ( ‘ztdm‘ )    

);  

CREATE TABLE ‘ry‘ (  

‘rydm‘ TINYINT( 2 ) UNSIGNED NOT NULL AUTO_INCREMENT ;  

‘zh‘ VARCHAR( 16 ) NOT NULL ;  

‘mm‘ VARCHAR( 16 ) NOT NULL ;  

‘xm‘ VARCHAR( 8 ) NOT NULL ;  

‘lxfs‘ VARCHAR( 20 ) NOT NULL ;  

‘qxdmc‘ VARCHAR( 7) NOT NULL ;  

PRIMARY KEY ( ‘rydm‘ )    

);  

CREATE TABLE ‘qx‘ (  

‘qxdm‘ TINYINT( 1 ) UNSIGNED NOT NULL AUTO_INCREMENT ;  

‘qxmc‘ VARCHAR( 8 ) NOT NULL ;  

PRIMARY KEY ( ‘qxdm‘ )    

);  

CREATE TABLE ‘czjl‘ (  

‘jldm‘ INT( 9) UNSIGNED NOT NULL AUTO_INCREMENT ;  

‘rydm‘ TINYINT( 2 ) UNSIGNED NOT NULL ;  

‘czjq_ip‘ VARCHAR( 15 ) NOT NULL ;  

‘czsj‘ DATETIME NOT NULL ;  

‘xwdm‘ INT( 9 ) UNSIGNED NOT NULL ;  

‘qxdm‘ TINYINT(1 ) UNSIGNED NOT NULL ;  

PRIMARY KEY ( ‘jldm‘ )    

);  

GRANT  SELECT  ;  INSERT  ;  UPDATE  ;  DELETE  ON  ‘xwxt‘。  *  TO  〃user_xwxt〃@〃%〃  IDENTIFIED  BY  

〃user_xwxt〃;  

FLUSH PRIVILEGES ;  

GRANT SELECT ; INSERT ; UPDATE ; DELETE ON ‘xwxt‘。 * TO 〃user_xwxt〃@〃localhost〃 IDENTIFIED BY  

〃user_xwxt〃;  

FLUSH PRIVILEGES ;  

将这些脚本命令存成。脚本文件(默认是。sql 文件,也可以是。txt 文件),使用客户端工具mysql。exe 或phpMyAdmin 

执行脚本文件,可在MySQL 中迅速完成物理设计的实现。  

 (2 )功能的分析与设计  

1)功能模块设计  

确定功能模块的程序组成,及模块间调用关系。  



序号       模块编号         功能模块名称            程序名  



                                             PHP 讲义    第  84  页  共  90  页  


…………………………………………………………Page 85……………………………………………………………

1      q1        最新新闻           q1。php 浏览最新新闻标题,前台首页  



2      q2        所有新闻           q2。php 浏览所有新闻标题  



3      q3        查看新闻           q3。php 浏览某条新闻全文,是q1 和q2 的公共调用模块  



4      h1        登录后台           h1。php 登录信息输入界面→h1_chuli。php 登录信息验证程序  



5      h         后台首页           h。php ,链接h2,h3,h4,h5,h6,  



6      h2        增加人员           h2。php 新人信息输入界面→h2_chuli。php 新人信息处理程序  



7      h3        修改人员           h3。php 人员修改信息输入界面→h3_chuli。php 人员修改处理程序  



8      h4        添加稿件           h4。php 添加稿件界面→h4_chuli。php 添加稿件处理程序  



9      h5        修改稿件           h5。php 修改稿件界面→h5_chuli。php 修改稿件处理程序  



10     h6         审核稿件          h6。php 审核稿件界面→h6_chuli。php 审核稿件处理程序  



11     h7        业务查询           h8。php 查询信息录入界面→h8_chuli。php 查询程序  



12     h8        退出后台           h9。php 销毁所有当前操作人员信息,安全退出后台,回到前台  



13     h9        业务记录           h9。php 业务记录,是 h1_chuli。php ,h2_chuli。php ,h3_chuli。php , 

                                h4_chuli。php,h5_chuli。php,h6_chuli。php,h7_chuli。php,h8。php 的公 

                                共调用模块。该模块无界面。  



14     g1        连接服务器          g1。php  



15     g2        关闭连接           g2。php  



  

2 )模块间关系图示  



                                                                                                

3)文件部署  

将程序文件、图片文件、SQL 脚本文件等,建立各自的文件夹,分门别类地存放于Web 发布文档目录下。  

文件夹的名称按照见名知义的原则命名。  

文件夹命名的一般做法:  



                                    PHP 讲义    第  85  页  共  90  页  


…………………………………………………………Page 86……………………………………………………………

文件夹     用途  



backup  备份资料  



image   存放网页、程序引用的图片文件  



inc     存放公用程序、自定义函数等  



inc/js  存放公用JavaScript 程序脚本文件  



script  存放程序脚本文件  



script/q  存放所有前台程序  



script/h  存放所有后台程序  



设计结果如图所示:(abc 为发布文档根目录)  



                



4 )程序设计  

根据程序功能设计的要求,以及程序之间的调用关系,对程序进行具体设计。  

n g1。php 连接服务器  

本程序供其它程序调用,无界面。  

本程序算法比较简单,直接用编码表示为:  

  

n g2。php 关闭与服务器的连接  

本程序供其它程序调用,无界面。  

本程序算法比较简单,直接用编码表示为:  

  

n q1。php 最新新闻:  

①界面设计  



                                    PHP 讲义    第  86  页  共  90  页  


…………………………………………………………Page 87……………………………………………………………

                                                         

其中:  

标题链接指向q3。php?xwdm=当前标题对应的新闻代码xwdm 值,打开链接的窗口是新窗口  

 “全部新闻”链接到q2。php  

 “登录后台”链接到h1。php  

②动态构造新闻标题列表的算法  

调用g1。php,连接数据库  

查询已发布的10 条新闻的xwdm ,bt,sj,按sj 倒序排序  

将查询结果装入数组  

调用g2。php,关闭连接  

遍历数组,以表格形式输出标题  

    标题链接指向q3。php?xwdm=数组当前行存有xwdm 的元素的值,打开链接的窗口是新窗口  

n q2 所有新闻:  

①界面设计  



                                                           



标题链接指向q3。php?xwdm=当前标题对应的新闻代码xwdm 值,打开链接的窗口是新窗口  

 “最新新闻”链接到q1。php  

首页,上一页,下一页,尾页——的链接由程序根据当前页位置决定  

②算法表述  

约定:  

用变量page 存储当前页码:page 为空则令page=0,表示当前为第1 页;page=n 则表示当前为第(n+1)页。  

用变量pagesize 存储每页显示的记录数:本例中规定pagesize=25。  

  

page 为空则令page=0  

调用g1。php,连接数据库  

  

取得属于当前页中的新闻代码xwdm ,标题bt:  

    查询已发布新闻的 xwdm ,bt,sj,按 sj  倒序排序,从结果集中的第page*pagesize  行开始取,最多取 

    pagesize 行。  



                                   PHP 讲义    第  87  页  共  90  页  


…………………………………………………………Page 88……………………………………………………………

    将取得的这些行中的xwdm ,bt 装入数组xw 。  

  

取得已发布的新闻记录总数total_records 。  

调用g2。php,关闭连接  

  

计算总页数page_count:  

    若total_records==0,则page_count 为0;  

    若total_records0,则page_count= 向上取整(total_records/pagesize);  

    若total_records%pagesize==0,则page_count= total_records/pagesize。  

构造导航条信息pageinfo  (界面中倒数第二行):  

  pageinfo=”共”。 total_records。”条新闻    第”。(page+1)。”页    共”。page_count。”页”  

    下面确定:“首页”,“上一页”,“下一页”,“尾页”的链接的情况  

      若有链接,链接到什么地方,同时传递什么样的参数及参数值:  

      链接到本页即PHP_SELF,同时传递参数page,其值根据所链接的文字而定:  

        参数page=0,当链接文字为“首页”(也可省略传递参数)  

        参数page=page…1,当链接文字为“上一页”  

        参数page=page+1,当链接文字为“下一页”  

        参数page=page_count…1,当链接文字为“尾页”  

            下面确定何时应具有链接:  

        当page==0 时,当前页是首页,故“首页”,“上一页”不应具有链接  

        当page》0 时,当前页不是首页,故“首页”,“上一页”应具有链接  

        当page
返回目录 上一页 下一页 回到顶部 9 10
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!