数据库应用——在线预约租车网页设计
XXX    XXX
前言
    每年假期,有些游客会选择租车来自驾游。根据旅游局公布的数据,每年自驾游的旅客至少占总游客人数的一半,而其中有一部分的游客是通过租车公司获取自驾车辆的。一个可靠的线上租车预约平台将便利许多人的出行,免去以往的现场查询、登记、下单等环节。本次实验主要利用MySQL数据库、PHP/HTML/CSS/JS四种前端、后端编程语言进行一个在线预约租车网页的设计。其主要实现的功能模块有注册登录模块、订单处理模块、车辆数据库查询模块、后台管理模块。该系统将实现用户端的用户注册、查询信息、下单、查看反馈功能以及管理端的订单处理、数据库更新、用户信息处理功能。
1.系统设计
1.1开发平台
    前端APP应用是一种主流的数据库开发形式,然而考虑到便捷、一开即用、全平台通用的需求,网页应用结合数据库的形式将更有利于用户使用。因此本次实验选择了以网页开发来实现预约租车平台应用。在后台方面,MySQL Server作为著名的开源、轻量级数据库服务器,是作为小型应用后台开发的不二选择。因此,整个系统的框架将由PHP/HTML/CSS/JS四种网页开发语言结合ODBC访问技术对MySQL Server进行操作,最终的应用成品需要同时运行在客户端与服务端之上。
1.2需求分析
    用户使用软件的最终目的是实现线上预约租车,因此用户必须了解车辆库存及详细信息、可供提车的门店地点,同时软件需要有下订单及查看订单反馈的功能。而在用户视角之外,管理租车公司业务的后台管理员也要能通过软件来了解所有库存信息、查看订单、处理订单与处理在库用户信息的功能。最终系统应具备如下功能:(1)注册、登录、登出;(2)用户端查询个人注册信息、查询可租车辆信息、查询提车门店、查询租车公司提供的额外服务;(3)用户端下订单;(4)用户端查看订单进度。(5)管理员端查看所有订单、所有用户信息、所有公司相关信息;(6)管理员端处理用户订单;(7)管理员端处理已注册用户数据库;(8)管理员端对公司信息数据库进行更新。
图1.1 顶层数据流图
图1.2 底层数据流图
1.3 E-R模型设计
为满足数据流图所示的各个功能,共需要五个实体的实体-联系模型才可完成数据库操作,具体的E-R模型设计如图1.3所示。该模型的五个实体分别是用户、车辆、提车店铺、附件(即附加服务)和预约订单。各实体属性如下所示:
用户:账号,密码,姓名,身份证号,驾照号,用户标识(分辨是否为管理员账号);
车辆:车辆ID,车辆类型,核载人数,颜,厂牌,品牌;
店铺:店铺ID,地点,开门时间,关门时间,店铺名称;
附件:附件ID,附件名称,日租;
订单:订单号,用户账号,用户身份证号,车辆品牌,车辆厂牌,提车地点的店名,需要的附件,提车时间,还车时间,订单处理状况。
图1.3 E-R模型设计图
值得一提的是,若将订单作为关系而非实体来表达原始的系统设计也是可行的,只是如此一来订单便成为了多对象关系,作图更为复杂。考虑到最终应用程序主要操作的数据库对象为订单,而且订单拥有较多的属性,将其作为一个独立实体进行后续设计更符合常理,也可简化设计流程,因此最终采取把订单视为实体的方式完成E-R模型的设计。
1.4关系数据模型转化  
    关系模式共五个,全部为E-R图中实体属性转化而来:
(1)用户信息(sql语句实现的四种功能账号,密码,姓名,身份证号,驾照号,用户标识)
    (2)车辆信息(车辆ID,车辆类型,核载人数,颜,厂牌,品牌)
    (3)可提车的店铺信息(店铺ID,店铺名称,地点,开门时间,关门时间)
(4)附件信息(附件ID,附件名称,日租价格)
(5)订单信息(订单号用户账号,用户身份证号,车辆品牌,车辆厂牌,提车地点的店名,附件名,提车时间,还车时间,订单处理状况)
    在以上五个关系中,每个关系中的主码都决定同关系下其他的所有属性。所有关系中不存在传递依赖、对主码子集的依赖,其范式为BCNF 。
2.后台开发
2.1MySQL平台开发
    采用MySQL Server作为数据库服务器,即可建立一个关系型数据库,并生成一个名称为root的用户名。利用MySQL Workbench登录数据库服务器,便可依照之前的五个关系模型生成对应存储表格。
图2.1 关系数据库数据格式
图2.2 用户信息表内容
图2.3 车辆信息表内容
图2.4 店铺信息表内容
图2.5 附件信息表内容
图2.6 订单信息表内容
   
    之后,建立约束确保数据库的完整性,如图2.1所示,每张表的主码与关系模型中的设计一一对应,此外还在订单信息表中建立了用户账号与提车门店两个属性与另外两张基本表的外码关系,如图2.7所示。
图2.7 订单信息表的外码设计
    设计外码的原因主要是保证每个订单都能有对应用户和对应提车地点,否则不允许下单。而车辆厂牌与品牌不加约束是因为该二者在对应的车辆信息表中不唯一,没有约束性,因此可在前端设计中用技术手段屏蔽掉不存在的车辆信息,以此实现前端约束取代订单表中的外码约束。而在订单表的附件属性不加约束的原因则是因为每个用户可选择多个附件或者不选(留空),因此难以约束,须由管理员在审核订单时自行判断附件的需求可否满足。
    最后,数据库服务器中建立的唯一性及主码索引如图2.8所示。并且在所有关系数据表中,除了订单表的附件名称属性可为空,其他的所有属性都不为空。
图2.8 数据库索引图
2.2网页服务器端开发
    在网页应用中,用户面向的是前端,所有数据都通过后端与数据库服务器联系。采用PHP脚本作为后端接口,利用Apache软件建立服务器于主机上,安装PHP服务器驱动和ODBC驱动,可以在后端利用PHP语言对数据库进行接入和操作。
    首先利用MySQL Workbench进入数据库,创建一个名为visitor的账户(账号见附录),为该账户赋予读取、更新、插入和删除等权限,之后再编写PHP代码利用该账户登录数据库服务器,便可让用户端接入操作,而由于PHP具有前端不可见性,因此数据库对用户实际上是不可见的,具有较好安全性。
图2.9 PHP 对数据库操作的例子
    图2.9说明了PHP是如何操控数据库的,利用PHP自带的mysqli库,可以设定目标数据库
的地址和登录账户。之后选取数据库rentcar进行连接,利用mysqli_query可以对数据库发出变量sql保存的命令语句,而数据库返回的操作结果将以二维数组的形式保存在变量res中。
3.前端开发
    前端采用HTML作为主体,结合JS与PHP实现动态页面设计。考虑到网页使用者分为用户和管理员,因此可以针对两种用户分别设计一套网页,普通用户无法看到管理员界面,管理员也无法登录用户界面,但可以在后台看到用户的注册资料。这一体系的配对通过登录账号的不同进行区分。在普通用户端,使用者登录以后进入主页面,该页面保存其本人的账号信息与过往订单信息,之后可以挑选不同的标签界面进入,分别查看当前车辆资讯、店铺资讯和附件资讯,在最后一个标签界面则可以进行预约操作。在管理员端,登陆以后可看见所有已经确认(即已经同意或者拒绝处理)的预约订单,打开第二个标签界面可以查看未处理的预约订单并进行确认操作。第三个标签可以查看数据库中车辆、店铺和附件清单,并进行插入更新,而第四个标签中则可查看所有用户资料并进行新增用户或者删除用户的操作。需要说明的是,第三个标签不提供数据库信息删除操作是因为考虑到数
据库信息是一个公司的重要核心,删除操作应该给拥有更高权限的管理员直接进入数据库来进行,而不是权限较低的职员在网页上进行。
3.1注册、登录模块设计
    与一般网页设计相同,用户输入网址所在的IP之后,将自动进入登录界面,如果用户没有注册过,则必须立即注册才可登录使用。
图3.1 登录界面
图3.2 注册界面
    该网页应用中,所有HTML界面上的操作都通过post模式在较安全的条件下传送信息给服务器端对应的PHP文件,再由PHP转运从前端HTML界面上获取的资讯给数据库。之后再依次返回结果给前端界面。图3.3展示了登录界面传送信息并接受账号在用户信息表匹配结果的流程。图中username和password为HTML发送给login.php的内容,而PHP获取之后存放在userName与password($可作区分,表示PHP中的变量)之中。最后一个if语句比较数据库查询结果与用户输入内容,可获得是否跳转至登陆后的界面的权限。
图3.3 对用户登录信息进行匹配
    在注册界面对应的后台程序register.php中,PHP文件利用相同的手法获取用户输入资讯,针对每条个人资讯与数据库用户表进行查询比对,如果身份证号、账户号或者驾驶证号已经存在,则页面跳转会提示信息重复,不予注册。注册界面只能注册普通用户,管理员账户必须要在数据库中直接添加或者让另一位管理员在用户信息界面进行后台注册。
    为了防止强制跳转页面等简单的攻击,采用PHP自带的session全局变量在服务器端保存当前用户IP登陆的账户名和账户类型,每当用户登录成功,则自动在这个变量中添加一个记录,用户登出后则自动销毁这个记录。没有登陆的用户因为没有对应记录,因此无法强制跳转到登陆后的页面,也正是这个变量,有效记录每个用户登录的类别是普通还是管理员,保证不同类型的用户页面不会发生交错。
3.2车辆、店铺、附件信息查询与管理模块设计
    普通用户可以在查询界面看到车辆、店铺与附件的信息,但是无权更改任何数据。而管理员则又可查询又可插入更新。
图3.4 普通用户查看车辆信息界面
图3.5 普通用户查看店铺信息界面
图3.6 普通用户查看附件信息界面
图3.7.1 管理员查看车辆、店铺、附件信息界面(上)
图3.7.2 管理员查看车辆、店铺、附件信息界面(下)
    在上述三张信息表的查询界面能动态地把数据库最新结果返回到前端界面上,其主要原理是利用了浏览器的实时解释特性,浏览器总是优先解释网页文件内嵌的PHP代码,之后才解释HTML文本和JS语句。因此在前端HTML文本中嵌入一个实时数据库查询的PHP代码段,则每次打开该界面都能动态的展示表格,这在之后将提及的用户下单页面的下拉选单中是同一个原理。
图3.8  PHP动态嵌入查询店铺表保存成数组
图3.9  PHP将查询结果利用循环嵌入数组元素以动态更新HTML文本形成动态表格
图3.10 管理员数据查询界面的前端获取更新内容的表单代码段

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。