收藏 分销(赏)

4S店客户管理系统V10.doc

上传人:天**** 文档编号:4323502 上传时间:2024-09-06 格式:DOC 页数:32 大小:249KB 下载积分:12 金币
下载 相关 举报
4S店客户管理系统V10.doc_第1页
第1页 / 共32页
4S店客户管理系统V10.doc_第2页
第2页 / 共32页


点击查看更多>>
资源描述
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 目 录 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.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客户管理系统的各个模块,确定系统的详细功能模块和数据结构,为下阶段开发工作提供依据。 本手册作为系统的详细设计说明书,将为编码人员从事本系统的编写工作提供一套详实的、可操作性强的文档。 1.2 预期读者 本文档的读者为4S店客户管理系统项目组开发小组成员、集成小组成员、测试小组成员、维护人员等。 1.3 系统名称及版本号 中文名称:4S店客户管理系统 系统版本:V1.0 1.4 任务提出者 项目组组长:xx 1.5 项目承接者和实施者 xxx科技有限公司 4S店客户管理系统项目组 1.6 面向的用户群体 角色 人员 描述 管理系统角色 系统管理员 管理整个系统的人员,分配分店用户 分店管理员 配置本店系统参数 信息审批员 审核短信发送 系统服务角色 业务管理员 查看数据,添加数据等 客户服务员 查看数据、发送短信等 系统服务角色 最终用户 获得信息 2、系统的组织结构 系统主要是依托在数据库上的B/S结构的管理系统,是对众多数据的管理和查看,而表现出来的功能模块,都与数据库操作相关。结合权限管理,合理限制各使用角色的操作过程,有效实现系统既定需求目标。 系统的总体设计遵循如下的原则。 1)系统应具有良好的适应性:能适应用户对系统的软件环境、管理内容、模式和界面的要求; 2)系统应具有可靠性:采用成熟的技术方法和软件开发平台,以保证系统在以后的应用中安全、可靠; 3)系统应具有较好的安全性:应提高安全机制和用户权限限制机制的完善程度,确保数据的受限访问; 4)系统应具有良好的可维护性:系统应易于维护、安装; 5)系统应具有良好的可扩展性:系统应适应未来信息化的要求,能方便地进行功能扩展,以建立完善的信息集成管理体系 2.1 系统的组织架构图 权 限 管 理 模 块 数据库 数据库管理模块 会员资料管理模块 短信发送管理模块 违章查询管理模块 系统设置管理模块 1)数据库 数据库是系统的基础,为了使系统便于安装和维护,结合需求中要求的数据数量等级,系统使用MYSQL数据库。 2)数据库管理模块 为了使系统涉及的数据库相关操作更加简单可靠,增加可读性和复用性,将数据库操作封装成模块,使用一个类来实现数据库的增、删、改、查功能。 3)权限管理模块 权限管理模块包括权限检查和权限管理,权限通过单权限和角色来实现,首先建立操作员,为操作员分配角色,而对应的角色具有相应的权限,以此来实现权限的管理。权限的检验只检验单项权限,权限值为数字,单项权限为2的n(n取值0-20)次方计算出来的,角色所拥有的权限为各项权限值相加得到,通过“用户权限&该项操作所需权限>0”来检验是否具有该项权限。 4)系统设置模块 系统设置模块主要是作为程序扩展的一个部分单独出来,具有通用性,与系统具体功能无关,包括如下功能: A、 登录管理 B、 菜单管理 C、 页面自动生成 D、 字典表定义(键、值对应参数) 5)违章查询管理模块 该模块主要实现和违章数据库的接口,实现会员违章查询功能,查询模块与违章数据库使用直连接口,即直接查询违章数据库。 6)短信发送管理模块 该模块主要实现短信发送功能,与违章查询类似,短信发送模块使用直连数据库的方式,将信息发送到待发表中,短信发送功能的实现需要借助SP的短信网关,或者安装短信猫程序,接口则使用直接写入数据库这种模式。 7)会员资料管理模块 该功能是4s管理系统的核心功能,实现信息资料的录入、修改、查询、删除等功能,根据需求,编写相应的界面。 3、界面设计要求 3.1 基本原则 根据需求分析,对界面的要求主要为响应速度快、简洁美观、字体大小适中、功能列表清晰、颜色明快。结合需求,将界面设计为框架模式,分上、左、中、右4个模块,上部内容为系统名称、常用功能、当前时间、当前登录用户信息;左部内容为菜单,菜单分为大菜单和子菜单,主要是为了使功能分块清晰,使用户更容易找到需要的功能,左部可通过点击边缘按钮进行隐藏,使中部显示具有更大的窗口,方便用户查看和操作;中部内容为主要显示部分,操作功能、展示都在中部实现,是系统的主要部分;右部内容为帮助,默认隐藏不显示。 3.1.1 界面设计样式 界面主要部分为灰色,装饰部分使用蓝色,按钮蓝色带花纹,菜单使用图片、文字相结合模式,表格使用深灰色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 数据库设计 数据库设计请参考《数据库设计》 4.2 数据库接口 数据库接口封装成一个类db_mysql.php,程序代码如下: <?php /* *###################################### * Sea DMS *###################################### */ class db { var $querynum = 0; var $cn; function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0) { if($pconnect) { 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' && $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($dbname, $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' && @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') { $this->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)); } 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($query) { 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; } function version() { return mysql_get_server_info(); } function close() { return mysql_close($this->cn); } function halt($message = '', $sql = '') { echo "MySQL Query:$sql<br> Message:".$this->error(); exit(); } } ?> 4.3 系统登录 登录需要登录名、密码和图片验证码,图片验证码使用数字验证码,在用户打开页面时通过checkcode.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++) { $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次定义颜色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),"*",imageColorAllocate($aimg,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255))); } //上面生成了背景,现在就该把已经生成的随机数放上来了。道理和上面差不多,随机数1个1个地放,同时让他们的位置、大小、颜色都用成随机数~~ //为了区别于背景,这里的颜色不超过200,上面的不小于200 for ($i=0;$i<strlen($temp_pwd);$i++){ imageString($aimg, mt_rand(3,5),$i*$img_width/4+mt_rand(1,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); ?> 登录时在数据库中验证用户名和密码,验证通过后,查询用户所属分店、角色、用户名、用户编号,再根据角色取得权限,并将这些值注册成为SESSION,使之在总个会话过程有效。成功后跳转至主框架页面frame.php。 4.4 权限检查 权限检查在每一个页面开始都需要包含,名称为:login.php,用于检验用户是否合法登录,保证系统安全,程序代码如下: <? session_start(); //检验用户是否登录 if($_SESSION["session_user_power"] <= 0) { ?> <link href="main.css" rel="stylesheet" type="text/css"> <table width="300" border="0" align="center" cellpadding="6" cellspacing="0" class="d"> <tr> <td align="center"> <font color="#FF0000">你未登录或者权限不够进行此操作!</font><br><br> [<a href="index.php" target="_parent">登录</a>]&nbsp;&nbsp;[<a href="javascript:window.close()">关闭窗口</a>] </td> </tr> </table> <? exit(); } ?> 权限检查语句如下所示: if(($session_user_power&该页面所需操作权限)==0) { echo "权限不足!"; exit(); } 4.5 基本页面结构 因为大部分的功能页面,都是通过数据库操作来实现其功能,所以具有类似性,规定数据库相关操作页面,分为3个基本页面,及浏览页面_view.php,编辑和添加页面_edit.php,功能实现页面_do.php,view页面实现数据库数据的查询、展示功能,edit页面实现用户输入功能,do页面将用户输入提交到数据库保存。 View页面的大致结构,如需显示不同数据库表中的数据,则只需要修改主显示区域部分即可,其他部分可以复用: <? //权限检查 require_once("login.php"); //数据库 require_once("opendb.php"); //全局函数 require_once("global.php"); //操作权限检查 if(($session_user_power&16)==0) { echo "权限不足!"; exit(); } ?> <link href="main.css" rel="stylesheet" type="text/css"> <script language="javascript"> //<!-- function delmsg(id) { if(confirm("真的要删除吗?")) { window.location = "car_series_do.php?action=delete&id="+id; } } //--> </script> <? //1为管理员权限,如果非管理员,则只能查看本分店的信息 if(($session_user_power&1)==0) $addition = " parent_id='".$session_company."'"; else $addition = " 1 "; $url = "&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_page = 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 = 1;//显示1页 //排序 if($orderby == "") $orderby = "id"; if($desc == "") $desc = "desc"; if($desc == "desc") { $img_src = "images/down.gif"; } else { $img_src = "images/up.gif"; } ?> <!—查询表单--> <form name="form1" method="post" action="<?=$PHP_SELF?>?action=submit"> <table width="400" style="border: 1px solid #999999;" cellspacing="0" cellpadding="3" class="d"> <tr align="left"> <td width="30"> <input type="button" value="添加" onclick="javascript:window.location='car_series_edit.php'"> </td> <td width="80"> <select name="key"> <option value="id" <?if($key == id) echo "selected";?>>编号</option> <option value="name" <?if($key == name) echo "selected";?>>车系</option> </select> </td> <td width="80"> <input type="text" value="<?=$key_word?>" size="10" name="key_word"> </td> <td> <input type="submit" value="查询">&nbsp; </td> </tr> </table> </form> <!—主显示区域开始--> <table width="400" border="1" style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="3" class="d"> <tr align="right"> <td colspan="3"> <? if($cur_page>1){?> <a href=<?=$PHP_SELF;?>?cur_page=1<?=$url?>> <?}?> 首页</a> &nbsp; <?if($cur_page>1){?> <a href=<?=$PHP_SELF;?>?cur_page=<?=$cur_page-1;?><?=$url?>> <?}?> 上一页</a> &nbsp; <?if($max_page>1&&$cur_page<$max_page){?> <a href=<?=$PHP_SELF;?>?cur_page=<?=$cur_page+1;?><?=$url?>> <?}?> 下一页</a> &nbsp; <?if($max_page>1&&$cur_page<$max_page){?> <a href=<?=$PHP_SELF;?>?cur_page=<?=$max_page;?><?=$url?>> <?} ?> 尾页</a>&nbsp; <?echo $cur_page."/".$max_page;?>&nbsp;&nbsp;<?=$max["c"];?> </td> </tr> <tr align="center" bgcolor="#E5E5E5"> <td width="100" align="center"><a href="<?=$PHP_SELF?>?orderby=id&desc=<?=$desc=="desc"?"asc":"desc"?><?=$url?>">编号</a><?if(id==$orderby){?><img src="<?=$img_src?>" border="0"><?}?></td> <td width="100" align="center"><a href="<?=$PHP_SELF?>?orderby=name&desc=<?=$desc=="desc"?"asc":"desc"?><?=$url?>">车系</a><?if(name==$orderby){?><img src="<?=$img_src?>" border="0"><?}?></td> <td width="100" align="center">操作</td> </tr> <? $addition .= " ORDER BY ".$orderby." ".$desc." "; $addition .= " LIMIT ".($cur_page-1)*$pagesize.",".$pagesize; $sql = "SELECT * FROM ".$addition; // echo $sql; $rss = @$db->query($sql); while($rs = $db->fetch_array($rss)) { ?> <tr> <td width="100" align="center"><?=$rs["id"]?></td> <td width="100" align="center"><?=$rs["name"]?></td> <td width="100" align="center"> <?if(($session_user_power&16) > 0 ){?> <a href="car_series_edit.php?id=<?=$rs["id"]?>&action=edit">编辑</a> <?}if(($session_user_power&16) > 0 ){?> <a href="javascript:delmsg(<?=$rs["id"]?>);">删除</a> <?}?> </td> </tr> <? } ?> <tr align="right"> <td colspan="3"> <? $url .= "&orderby=".$orderby."&desc=".$desc; if($cur_page>1){?> <a href=<?=$PHP_SELF;?>?cur_page=1<?=$url?>> <?}?> 首页</a> &nbsp; <?if($cur_page>1){?> <a href=<?=$PHP_SELF;?>?cur_page=<?=$cur_page-1;?><?=$url?>> <?}?> 上一页</a> &nbsp; <?if($max_page>1&&$cur_page<$max_page){?> <a href=<?=$PHP_SELF;?>?cur_page=<?=$cur_page+1;?><?=$url?>> <?}?> 下一页</a> &nbsp; <?if($max_page>1&&$cur_page<$max_page){?> <a href=<?=$PHP_SELF;?>?cur_page=<?=$max_page;?><?=$url?>> <?} ?> 尾页</a>&nbsp; <?echo $cur_page."/".$max_page;?>&nbsp;&nbsp;<?=$max["c"];?> </td> </tr> <?if(($session_user_power&1) > 0){?> <tr> <td colspan="3"> <? echo $sql;?> </td> </tr> <?}?> </table> <!—主显示区域结束--> 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_series WHERE id='".$id."'"; $rs = $db->fetch_array($db->query($sql)); //取得原信息内容 $name = $rs['name']; } ?> <link href="main.css" rel="stylesheet" type="text/css"> <form name="form1" method="post" action="car_series_do.php?action=<?if($action=="edit") echo "update";else echo "insert";?>"> <table width="400" style="border: 1px solid #999999;" cellspacing="0" cellpadding="3" class="d"> <!—主操作区域开始--> <tr> <td width="100" align="center">车系</td><td width="300"><input type="text" name="name" value="<?=$name?>"></td> </tr> <!—主操作区域结束--> <tr align="center"> <td colspan="4" bgcolor="#CCCCCC"> <input type="submit" name="Submit" value="提交"> <input type="hidden" name="id" value="<?=$id?>"> <input type="button" value="返回" onClick="javascript:history.back(-1)"> </td> </tr> </table> </form> Do页面的基本结构,根据需要修改相应的SQL语句即可: <? require_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&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
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服