1、 4S店客户管理系统V1.0 详细设计说明书 拟制人 日期 2011年03月16日 审核人 日期 2011年03月 16日 批准人 日期 2011年03月 16日 历史修改记录 序号 版本号 更改时间 更改内容描述 填写人 1 V1.0 2011-3-26 建立 2 V1.0 2011-6-08 修改 3 4
2、 目 录 1、引言 1 1.1、编写目的 1 1.2 预期读者 1 1.3 系统名称及版本号 1 1.4 任务提出者 1 1.5 项目承接者和实施者 1 1.6 面向的用户群体 2 2、系统的组织结构 2 2.1 系统的组织架构图 3 3、界面设计要求 4 3.1 基本原则 4 3.1.1 界面设计样式 4 3.1.2 其他界面约定 5 3
3、2 用户界面设计规则 5 3.2.1 字体 5 3.2.2 尺寸 5 3.2.4 自适应对象的尺寸改变 5 4、程序描述 5 4.1 数据库设计 5 4.2 数据库接口 6 4.3 系统登录 10 4.5 基本页面结构 13 5、模块设计 25 5.1模块一:数据库处理模块 25 5.2模块二:会员管理模块 25 5.3模块三:权限管理模块 26 5.4模块四:短信发送模块 27 5.5模块五:违章查询模块 27 5.6模块六:系统设置模块 28 1、引言 1.1、编写目的 编写本详细设计说明书的目的在于详细的说明4S客户管理系统的各个
4、模块,确定系统的详细功能模块和数据结构,为下阶段开发工作提供依据。 本手册作为系统的详细设计说明书,将为编码人员从事本系统的编写工作提供一套详实的、可操作性强的文档。 1.2 预期读者 本文档的读者为4S店客户管理系统项目组开发小组成员、集成小组成员、测试小组成员、维护人员等。 1.3 系统名称及版本号 中文名称:4S店客户管理系统 系统版本:V1.0 1.4 任务提出者 项目组组长:xx 1.5 项目承接者和实施者 xxx科技有限公司 4S店客户管理系统项目组 1.6 面向的用户群体 角色 人员 描述 管理系统角色 系统管理员 管理整个系统的人员
5、分配分店用户 分店管理员 配置本店系统参数 信息审批员 审核短信发送 系统服务角色 业务管理员 查看数据,添加数据等 客户服务员 查看数据、发送短信等 系统服务角色 最终用户 获得信息 2、系统的组织结构 系统主要是依托在数据库上的B/S结构的管理系统,是对众多数据的管理和查看,而表现出来的功能模块,都与数据库操作相关。结合权限管理,合理限制各使用角色的操作过程,有效实现系统既定需求目标。 系统的总体设计遵循如下的原则。 1)系统应具有良好的适应性:能适应用户对系统的软件环境、管理内容、模式和界面的要求; 2)系统应具有可靠性:采用成熟的技术方法和软
6、件开发平台,以保证系统在以后的应用中安全、可靠; 3)系统应具有较好的安全性:应提高安全机制和用户权限限制机制的完善程度,确保数据的受限访问; 4)系统应具有良好的可维护性:系统应易于维护、安装; 5)系统应具有良好的可扩展性:系统应适应未来信息化的要求,能方便地进行功能扩展,以建立完善的信息集成管理体系 2.1 系统的组织架构图 权 限 管 理 模 块 数据库 数据库管理模块 会员资料管理模块 短信发送管理模块 违章查询管理模块 系统设置管理模块 1)数据库 数据库是系统的基础,为了使系统便于安装和维护,结合需求中要求的数据数量等级,系统使用
7、MYSQL数据库。 2)数据库管理模块 为了使系统涉及的数据库相关操作更加简单可靠,增加可读性和复用性,将数据库操作封装成模块,使用一个类来实现数据库的增、删、改、查功能。 3)权限管理模块 权限管理模块包括权限检查和权限管理,权限通过单权限和角色来实现,首先建立操作员,为操作员分配角色,而对应的角色具有相应的权限,以此来实现权限的管理。权限的检验只检验单项权限,权限值为数字,单项权限为2的n(n取值0-20)次方计算出来的,角色所拥有的权限为各项权限值相加得到,通过“用户权限&该项操作所需权限>0”来检验是否具有该项权限。 4)系统设置模块 系统设置模块主要是作为程序扩展的一个部
8、分单独出来,具有通用性,与系统具体功能无关,包括如下功能: A、 登录管理 B、 菜单管理 C、 页面自动生成 D、 字典表定义(键、值对应参数) 5)违章查询管理模块 该模块主要实现和违章数据库的接口,实现会员违章查询功能,查询模块与违章数据库使用直连接口,即直接查询违章数据库。 6)短信发送管理模块 该模块主要实现短信发送功能,与违章查询类似,短信发送模块使用直连数据库的方式,将信息发送到待发表中,短信发送功能的实现需要借助SP的短信网关,或者安装短信猫程序,接口则使用直接写入数据库这种模式。 7)会员资料管理模块 该功能是4s管理系统的核心功能,实现信息资料的录入、修
9、改、查询、删除等功能,根据需求,编写相应的界面。 3、界面设计要求 3.1 基本原则 根据需求分析,对界面的要求主要为响应速度快、简洁美观、字体大小适中、功能列表清晰、颜色明快。结合需求,将界面设计为框架模式,分上、左、中、右4个模块,上部内容为系统名称、常用功能、当前时间、当前登录用户信息;左部内容为菜单,菜单分为大菜单和子菜单,主要是为了使功能分块清晰,使用户更容易找到需要的功能,左部可通过点击边缘按钮进行隐藏,使中部显示具有更大的窗口,方便用户查看和操作;中部内容为主要显示部分,操作功能、展示都在中部实现,是系统的主要部分;右部内容为帮助,默认隐藏不显示。 3.1.1 界面设计样
10、式 界面主要部分为灰色,装饰部分使用蓝色,按钮蓝色带花纹,菜单使用图片、文字相结合模式,表格使用深灰色1像素宽线条分割,操作以10*14像素大小图标美化。 3.1.2 其他界面约定 界面尽量使用CSS样式表来定义视觉效果。 3.2 用户界面设计规则 3.2.1 字体 font-family: Arial, Helvetica, sans-serif; font-size: 12px; 3.2.2 尺寸 100%适应窗口大小 3.2.3 布局 标题栏 菜单 主功能区 帮助 3.2.4 自适应对象的尺寸改变 100%自适应窗口大小 4、程序描述 4.1 数据
11、库设计 数据库设计请参考《数据库设计》 4.2 数据库接口 数据库接口封装成一个类db_mysql.php,程序代码如下:
12、nect) { if(!$this->cn=@mysql_pconnect($dbhost, $dbuser, $dbpw)) { $this->halt('Can not connect to MySQL server'); } } else { if(!$this->cn=@mysql_connect($dbhost, $dbuser, $dbpw)) { $this->halt('Can not connect to MySQL server'); } } if($this->version() > '4.1' &&
13、GLOBALS['charset']) { //ATTENTION: remove the following line if you want to use the default database character set. mysql_query("SET NAMES 'gbk'", $this->cn); } if($this->version() > '5.0') { mysql_query("SET sql_mode=''", $this->cn); } if($dbname) { mysql_select_db($dbn
14、ame, $this->cn); } } function select_db($dbname) { return mysql_select_db($dbname, $this->cn); } function fetch_array($query, $result_type = MYSQL_ASSOC) { return mysql_fetch_array($query, $result_type); } function query($sql, $type = '') { if($type == 'UNBUFFERED' && @
15、function_exists('mysql_unbuffered_query')) { $query = mysql_unbuffered_query($sql); } else { if($type == 'CACHE' && intval(mysql_get_server_info()) >= 4) { $sql = 'SELECT SQL_CACHE'.substr($sql, 6); } if(!($query = mysql_query($sql, $this->cn)) && $type != 'SILENT') { $t
16、his->halt('MySQL Query Error', $sql); } } $this->querynum++; return $query; } function affected_rows() { return mysql_affected_rows($this->cn); } function error() { return mysql_error($this->cn); } function errno() { return intval(mysql_errno($this->cn)); }
17、 function result($query, $row) { $query = @mysql_result($query, $row); return $query; } function num_rows($query) { $query = mysql_num_rows($query); return $query; } function num_fields($query) { return mysql_num_fields($query); } function list_tables($quer
18、y) { return mysql_list_tables($query); } function free_result($query) { return mysql_free_result($query); } function insert_id() { $id = mysql_insert_id($this->cn); return $id; } function fetch_row($query) { $query = mysql_fetch_row($query); return $query; } f
19、unction version() {
return mysql_get_server_info();
}
function close() {
return mysql_close($this->cn);
}
function halt($message = '', $sql = '') {
echo "MySQL Query:$sql
Message:".$this->error();
exit();
}
}
?>
4.3 系统登录
登录需要登录名、密码和图片验证码,图片验证码使用数字验证码,在用户打开页面时通过c
20、heckcode.php文件生成,同时注册一个Session,用于验证用户输入。checkcode.php代码如下(需要php.ini开去gd2): $img_width=70; //先定义图片的长、宽 $img_height=23; function creatpwd($len) { //根据需要,可以加入英文字母 $word = array("0","1","2","3","4","5","6","7","8","9"); srand((double)microtime()*1000000); for($i=0; $i<$len; $i++)
21、 { $rand = rand(); srand($rand); $single = $rand%10; $pwd .= $word[$single]; } return $pwd; } $temp_pwd = creatpwd(4); session_register("temp_pwd"); $aimg = imageCreate($img_width,$img_height); //生成图片 ImageColorAllocate($aimg, 255,255,255); //图片底色,ImageColorAllocate第1次
22、定义颜色PHP就认为是底色了 $black = ImageColorAllocate($aimg, 0,0,0); //定义需要的黑色 ImageRectangle($aimg,0,0,$img_width-1,$img_height-1,$black);//先成一黑色的矩形把图片包围 //下面该生成雪花背景了,其实就是在图片上生成一些符号 for ($i=1; $i<=100; $i++) { //先用100个做测试 imageString($aimg,1,mt_rand(1,$img_width),mt_rand(1,$img_height
23、),"*",imageColorAllocate($aimg,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)));
}
//上面生成了背景,现在就该把已经生成的随机数放上来了。道理和上面差不多,随机数1个1个地放,同时让他们的位置、大小、颜色都用成随机数~~
//为了区别于背景,这里的颜色不超过200,上面的不小于200
for ($i=0;$i 24、10),mt_rand(1,$img_height/4), $temp_pwd[$i],imageColorAllocate($aimg,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)));
}
//Header("Content-type: image/png"); //告诉浏览器,下面的数据是图片,而不要按文字显示
ImagePng($aimg); //生成png格式
ImageDestroy($aimg);
?>
登录时在数据库中验证用户名和密码,验证通过后,查询用户所属分店、角色、用 25、户名、用户编号,再根据角色取得权限,并将这些值注册成为SESSION,使之在总个会话过程有效。成功后跳转至主框架页面frame.php。
4.4 权限检查
权限检查在每一个页面开始都需要包含,名称为:login.php,用于检验用户是否合法登录,保证系统安全,程序代码如下:
session_start();
//检验用户是否登录
if($_SESSION["session_user_power"] <= 0)
{
?>
26、border="0" align="center" cellpadding="6" cellspacing="0" class="d">
exit
你未登录或者权限不够进行此操作!
[登录] [关闭窗口]
27、); } ?> 权限检查语句如下所示: if(($session_user_power&该页面所需操作权限)==0) { echo "权限不足!"; exit(); } 4.5 基本页面结构 因为大部分的功能页面,都是通过数据库操作来实现其功能,所以具有类似性,规定数据库相关操作页面,分为3个基本页面,及浏览页面_view.php,编辑和添加页面_edit.php,功能实现页面_do.php,view页面实现数据库数据的查询、展示功能,edit页面实现用户输入功能,do页面将用户输入提交到数据库保存。 View页面的大致结构,如需显示不同数据库表中的数据,则只需要修改主
28、显示区域部分即可,其他部分可以复用: //权限检查 require_once("login.php"); //数据库 require_once("opendb.php"); //全局函数 require_once("global.php"); //操作权限检查 if(($session_user_power&16)==0) { echo "权限不足!"; exit(); } ?> //1为管理员权限,如果非管理员,则只能查看本分店的信息 if(($session_user_power&1)==0) $addition = " parent_id='".$session_company."'"; else $addition = " 1 "; $url = "
30、action=".$action; //根据关键字进行查询 if($key_word != "") { $addition .= " AND ".$key." LIKE '%".$key_word."%'"; $url .= "&key=".$key."&key_word=".$key_word; } $addition = " car_series WHERE ".$addition; //分页 if($pagesize <= 0 || $pagesize == "") $pagesize = 30; if($cur_page == "") $cur_p
31、age = 1; $max = $db->fetch_array($db->query("SELECT COUNT(*) as c FROM ".$addition)); if(($max["c"]/$pagesize) == floor($max["c"]/$pagesize))//分页显示初始化 $max_page=floor($max["c"]/$pagesize);//假如可以整除 else $max_page=floor($max["c"]/$pagesize)+1;//否则再加一页显示 if($max_page == 0)//如果总页数为0 $max_page
32、 1;//显示1页 //排序 if($orderby == "") $orderby = "id"; if($desc == "") $desc = "desc"; if($desc == "desc") { $img_src = "images/down.gif"; } else { $img_src = "images/up.gif"; } ?>
|
i 36、f($cur_page>1){?> ?cur_page=1=$url?>> }?> 首页 1){?> ?cur_page==$cur_page-1;?>=$url?>> }?> 上一页 1&&$cur_page<$max_page){?> ?cur 37、page==$cur_page+1;?>=$url?>> }?> 下一页 1&&$cur_page<$max_page){?> ?cur_page==$max_page;?>=$url?>> } ?> 尾页 =$max["c"];?> |
||
| =$url?>">编号 |
=$url?>">车系 |
操作 |
| =$rs["id"]?> | =$rs["name"]? 41、> |
0 ){?>
&action=edit">编辑
}if(($session_user_power&16) > 0 ){?>
);">删除
}?>
42、 |
|
$url .= "&orderby=".$orderby."&desc=".$desc;
if($cur_page>1){?>
?cur_page=1=$url?>>
}?>
首页
1){?>
43、P_SELF;?>?cur_page==$cur_page-1;?>=$url?>> }?> 上一页 1&&$cur_page<$max_page){?> ?cur_page==$cur_page+1;?>=$url?>> }?> 下一页 1&&$cur_page<$max_page){?> ?cu44、r_page==$max_page;?>=$url?>> } ?> 尾页 =$max["c"];?> |
||
| echo $sql;?> | ||
45、 Edit页面结构如下,如需要操作其他数据库,需要修改相应部分的代码: require_once("login.php"); require_once("opendb.php"); require_once("global.php"); //权限检查 if(($session_user_power&16)==0) { echo "权限不足!"; exit(); } //如果是编辑,则需要将原数据库信息取出作为比较 if($action == "edit") { //定义需要操作的数据库表 $sql = "SELECT * FROM car_seri
46、es WHERE id='".$id."'"; $rs = $db->fetch_array($db->query($sql)); //取得原信息内容 $name = $rs['name']; } ?>
Do页面的基本结构,根据需要修改相应的SQL语句即可: r49、equire_once("login.php"); require_once("opendb.php"); require_once("global.php"); //权限 if(($session_user_power&16)==0) { echo "权限不足!"; exit(); } //处理增加、更新、删除 if($action == "insert" || $action == "update" ||$action == "delete") { //增加记录 if($action == "insert" && ($session_user_power&
50、16) > 0) { $sql = "INSERT INTO car_series (name,parent_id) VALUES ('$name','$session_company')"; } //修改记录 else if($action == "update" && (($session_user_power&16) > 0)) { $sql = "UPDATE car_series SET name='$name' WHERE id='$id' and parent_id='".$session_company."'"; } //删除记录 e






