软件设计说明 (TAH)

一、概述 ----苏艳

1.1 开发背景

有人测算,假定每辆车每年行驶2万公里,时速50公里,则全年的动态交通行驶状态只有400小时,而静态停放状态达8000多小时,占95%以上。根据有关部门公布的数据,截至2014年底,北京市共有机动车559.1万辆,机动车保有量与停车位缺口量达到250万个;深圳、上海、广州、南京等城市的停车位缺口均超过150万个。而在城市中心地带,平均泊位供给数更是仅为0.17个/辆。

停车具有高频刚需的特性,也是汽车后服务市场的最佳切入口,停车所能连接的市场份额更达到上万亿。面对如此庞大的发展空间,我们就思考开发“路边停车”这么一个系统,用于出租预定停车位的平台,用户既可通过平台找到离自己最近的停车位停车,亦可将自己家中的停车位于空闲时刻出租给其他车主以获取利润。用以解决现金社会停车位供不应求的现状。

1.2 开发目标

  (1)停车位预订功能:车主可提前预订停车位,在指定时间段内前往停车位停车。

  (2)停车位添加及出租功能:停车位主可在地图上精确添加停车位并完善具体信息(空闲时间段、每小时收费、图片、地址等)来出租以获取收益

  (3)定位导航功能:在预订停车位并支付订金后可使用导航功能前往指定地点。

  (4)订单管理及评价功能:用户可管理自己所有的订单,查看详细的订单详情,实时显示订单的状态,并可在订单完成后对停车位进行评价。

5)硬件功能:停车桩,可以实现停车管理,上升、下降、暂停功能。实现用户无人监管收费停车。 

用户使用车位出租软件,作为找车位用户,我们提供车位预订功能可以让用户能提前找到车位后避免被占位,在预订成功之后可以直接开启导航将车主导航到所预订的车位上,也避免了找不到车位,并且可以给车位评价打分,这样既可以帮助出租车位的用户改进不足,也可以给其他用户提醒和推荐等。而作为出租车位的用户,我们提供停车位添加的模块,并且在硬件方面提供停车桩可以达到无人监管收费停车的目的。这样既保证了作为客户的使用方便,也保证了商家的管理安全保障。

1.3 参考资料

《构建之法第2版》 邹欣 著 人民邮电出版社

《轻量级javaEE企业应用实战第4版》  李刚 著 电子工业出版社

http://www.runoob.com/jquerymobile/jquerymobile-tutorial.html——菜鸟教程(学习JQM框架,htmlcssjs等)

http://www.w3school.com.cn/index.html——W3school(学习JQM框架,htmlcssjs等)

http://www.imooc.com/learn/207——慕课网jQM Web App 列车时刻表(学习JQM框架)

1.4 设计原则

 项目采用HBuilder软件,以jqm框架开发前端(android包装),采用MyEclipse开发服务器端,数据库则使用MySql,硬件部分基于物联网开发平台的功能扩展。前后端交互时采用ajax异步传送jsonp数据。完成后不仅可以做成手机APP,在网页上同样也可以运行。

二、需求分析----温昀

 

2.1 需求陈述

 

   共享车位APP是基于地理位置,通过互联网社交来实现就近共享停车: 车主可以通过共享车位APP找到找到低价便捷最适合的停车位,一旦车主预定车位成功,车位地锁会升起,直至预定的车主对地锁进行解锁在订单结束后,车主还可以停车位进行点评;车位主可以分享自己的空闲时段车位到车位分享APP出租,增加收益,并能更方便的认识到身边的车友; 小区物业或停车管理公司可以通过车位分享APP进行安全高效的小区车位错时管理

 

2.2 操作用例

 

   用户登录后首先先定位当前位置;其次,用户可以在我的界面上选择发布车位出租信息(如:车位地址、车位出租时间段、车位出租价位)或者是查找附近车位租用适合的车位又或者查看历史订单对订单进行评价等;最后,用户还可以对自己的信息进行查看修改。

 

车位主

 

车主

 

2.3 功能分析划分

 

【分析功能并划分功能块】

 

1)停车位预订功能:车主可提前预订停车位,在指定时间段内前往停车位停车。

 

2)停车位添加及出租功能:停车位主可在地图上精确添加停车位并完善具体信息(空闲时间段、每小时收费、图片、地址等)来出租以获取收益

 

3)定位导航功能:在预订停车位并支付订金后可使用导航功能前往指定地点。

 

4)订单管理及评价功能:用户可管理自己所有的订单,查看详细的订单详情,实时显示订单的状态,并可在订单完成后对停车位进行评价。

 

5)收藏功能:在个人信息页可以查看我的收藏,用户如果对该停车位满意可进行收藏。

 

6)硬件功能:停车桩,可以实现停车管理,上升、下降、暂停功能。实现用户无人监管收费停车。

 

2.3.1 系统登录

 

   用户登录app首先出现地图定位定位自己所在位置 用户可以在我的界面上选择车位出租或者预定车位或者查看历史记录对上次的停车订单进行评价

 

2.3.2 用户管理

 

 实现用户显示,添加,删除,修改

 

2.4 运行环境

 

    H5+eclipse

 

 

 

三、总体设计----严奕亭

3.1 系统建模

 

3.2 E-R图(实体-联系图)

 

3.3 类图设计图

3.4 接口设计图

四、数据库设计----郑艺娟

 

4.1数据库E-R

 

 

 

4.2数据库逻辑设计

CDM图:

 

 

 

PDM图:

 

 

 

③数据字典:

用户信息表

   概述:存放用户基本的信息,包括用户id、电话、密码、用户名、性别、头像、信用值、登陆状态、邮箱、注册时间。

表名:User_info

 

中文

列名

数据类型

主外健

描述

用户id

user_id

int

PK

 

电话

user_tel

varchar(11)

NOT NULL

 

密码

user_pw

Varchar(20)

NOT NULL

登录密码

用户名

user_name

Varchar(15)

 

 

性别

user_sex

Char(1)

 

 

头像

user_image

Varchar(100)

 

 

信用值

user_credit

int

 

 

登陆状态

user_login_state

Char(1)

 

 

邮箱

user_email

varchar(30)

 

 

注册时间

user_register_time

datetime

 

 

 

用户钱包表

   概述:存放用户钱包的基本信息,包括用户id、支付密码、积分、支付金额。 

表名:User_purse

 

中文

列名

数据类型

主外健

描述

用户id

user_id

int

PK

 

支付密码

user_pay_pw

varchar(6)

 

 

积分

user_point

int

 

 

支付金额

user_money

decimal

 

 

 

车位表

    概述:存放车位的基本信息,包括车位id、用户id、车位锁id、车位状态、车位数量、车位价格、车位图片、车位收入、经度、纬度。 

表名:space_info

 

中文

列名

数据类型

主外健

描述

车位id

space_id

int

PK

 

用户id

User_id

int

Not null,fk

 

车位锁id

lock_id

int

Not null,fk

 

车位状态

Space_state

Char(1)

 

 

车位数量

Space_number

Varchar(100)

 

 

车位价格

Space_price

decimal

 

 

车位图片

Space_image

Varchar(100)

 

 

车位收入

Space_income

decimal

 

 

经度

longitude

float

 

 

纬度

latitude

float

 

 

 

租车位表

   概述:存放租车位的基本信息,包括车位id、租出开始时间、租出结束时间。 

表名:rent_time

 

中文

列名

数据类型

主外健

描述

车位id

space_id

int

PK

 

租出开始时间

space_start_time

datetime

pk

 

租出结束时间

space_end_time

datetime

 

 

 

出租车位订单表

   概述:存放出租车位订单的基本信息,包括租车位订单id、用户id、车位id、订单时间、预计价格、订单开始时间、订单结束时间、实付金额、实际开始时间、实际结束时间、订单状态、支付状态。

表名:rent_order_info

  

中文

列名

数据类型

主外健

描述

租车位订单id

order_id

int

pk

 

用户id

user_id

int

fk

 

车位id

space_id

int

fk

 

订单时间

order_time

datetime

 

 

预计价格

pre_price

decimal

 

 

订单开始时间

order_start_time

datetime

 

 

订单结束时间

order_end_time

datetime

 

 

实付金额

real_price

decimal

 

 

实际开始时间

real_start_time

datetime

 

 

实际结束时间

real_end_time

datetime

 

 

订单状态

order_state

Char(1)

 

 

支付状态

pay_state

Char(1)

 

 

 

车位锁表

   概述:存放车位锁的信息,包括车位锁id、车位锁状态。

表名:lock_info

 

中文

列名

数据类型

主外健

描述

车位锁id

lock_id

int

pk

 

车位锁状态

lock_state

Char(1)

 

 

 

评价表

   概述:存放评价表的信息,包括车位锁id、车位锁状态。 

表名:lock_info

 

中文

列名

数据类型

主外健

描述

用户id

user_id

int

Pk,fk

 

车位id

space_id

int

Pk,fk

 

订单id

order_id

int

Pk,fk

 

评价时间

evaluate_time

datetime

 

 

内容

content

Varchar(255)

 

 

分数

rank

Varchar(4)

 

 

是否实名

is_real_name

Char(1)

 

 

 

借车位订单表

    概述:存放借车位订单的基本信息,包括借车位订单id、用户id、车位id、订单时间、预计价格、订单开始时间、订单结束时间、实付金额、实际开始时间、实际结束时间、订单状态、支付状态。

表名:rent_order_info

 

中文

列名

数据类型

主外健

描述

租车位订单id

order_id

int

pk

 

用户id

user_id

int

fk

 

车位id

space_id

int

fk

 

订单时间

order_time

datetime

 

 

预计价格

pre_price

decimal

 

 

订单开始时间

order_start_time

datetime

 

 

订单结束时间

order_end_time

datetime

 

 

实付金额

real_price

decimal

 

 

实际开始时间

real_start_time

datetime

 

 

实际结束时间

real_end_time

datetime

 

 

订单状态

order_state

Char(1)

 

 

支付状态

pay_state

Char(1)

 

 

 

 

4.3出错处理

   对数据的合法性进行验证,防止错误的产生;. 每天进行数据备份,保证备份即时更新系统崩溃时重启系统,可继续工作; 数据丢失,回复已备份的最新

4.4安全保密设计

   在特殊数据如用户密码或支付密码等,在数据库中采用密码加密的方式,对存储的数据进行特定方式的加密,保证数据在有秘钥的情况下才能正确读出,防止其他人恶意对数据库进行信息的获取;在数据的传送过程中采用加密的形式;用户授权处理,保证用户操作的合法性。

 

五、详细设计----林晓君

 

  程序总流程图

 

 

部分代码:

 

(登录代码)

 

public class Register extends HttpServlet {

 

//登录页面部分代码

 

public void doPost(HttpServletRequest request, HttpServletResponse response)

 

throws ServletException, IOException{

 

PrintWriter out = response.getWriter();

 

HttpSession session = request.getSession();

 

//获取前端参数

 

String operate = request.getParameter("operate");

 

if(operate != null && operate.length() > 0){

 

if("validate".equals(operate)){//给用户发送短信

 

String tel = request.getParameter("tel");

 

SendMessage send = new SendMessage();

 

//随机验证码

 

GetRandom ran = new GetRandom();

 

String sran = ran.getRandom();

 

try {

 

//发送短信

 

send.sendSms(tel,sran);

 

} catch (ClientException e) {

 

e.printStackTrace();

 

}

 

//将验证码保存在session

 

session.setAttribute("validate", sran);

 

}else if("register".equals(operate)){//注册验证

 

//获取前端参数

 

String tel = request.getParameter("tel");

 

String validate = request.getParameter("validate");

 

String pw = request.getParameter("pw");

 

String userName = request.getParameter("userName");

 

//session获取验证码

 

String vali = (String) session.getAttribute("validate");

 

System.out.println(vali);

 

if(validate==null||!(validate.length()>0)||!validate.equals(vali)){

 

JSONObject json = new JSONObject();

 

//返回1,说明验证码错误

 

json.put("state", "1");

 

String jsonp = request.getParameter("jsonpCallback");

 

out.print(jsonp + "(" + json.toString() + ")");

 

System.out.println(json.toString());

 

}else{

 

String jsonp = request.getParameter("jsonpCallback");

 

DbUserInfo user = new DbUserInfo();

 

String re = user.addNewUser(tel, pw,userName);

 out.print(jsonp + "(" + re + ")"); 

} }}}}

(注册代码)

public class Login extends HttpServlet {

//用户登录部分代码

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//传输头的规范写在filter里面,所以这儿不用写

PrintWriter out = response.getWriter();

//获取前端传过来的参数

String tel = request.getParameter("tel");

String pw = request.getParameter("password");

//数据库获取用户密码

DbUserInfo user = new DbUserInfo();

String relPW = user.getPw(tel);

JSONObject jsob = new JSONObject();

String jsonp = request.getParameter("jsonpCallback");

......................

六、实现----孙伟峰

   因为项目分前后端来写,所以前后端的对接一定要有规定好的格式,否者容易出现各种问题。具体的规定如下:

1、传递的参数的编码格式:通通用UTF-8的编码格式。之所以用UTF-8的格式是因为UTF-8编码的的兼容性比GBK编码来的好。虽然GBK的中文编码比UTF-8的中文编码少一个字节,但是我们项目比较小,一次性传输的数据不大,所以不用太过于考虑传输的流量问题。而且项目中很多参数都是用英文的,对于英文来说,UTF-8的编码相对于GBK就小了。

2、前端传输数据的方法:用ajax来传输。ajax能支持异步和同步,也是现在主流的方法,所以统一决定用它。

3、传输的数据的格式:JSONP格式。起先我们是用json格式的数据的,但是这样的格式虽然跨域传输的问题可以解决,但是服务器端不能保存session,而且cokie也不能使用,虽然可以解决,但是过于繁琐。而jsonp格式的就可以完美的适合我们的项目而且使用的方法也非常简单。

4、前端代码编写原则:统一使用JQM框架来写。JQM可以自动适应各种手机,根据手机屏幕大小来改变控件的大小。要求缩进格式统一用tab键进行缩进,因为用的都是hbuilder所以不会出现tab缩进的格式不统一的结果。

5、服务器端的代码编写原则:因为是用java写的后端,所以代码的编写要求按照java的规范来写,如{}的放置的位置,按照大部分java编写格式的规范写成如下的格式:

   方法的定义也是首个单词小写,后面的单词首字母大写。

6、测试的规范:先由UI和后端人员讨论前端要接收的字段,然后绘制出前端的主要界面。然后再让前端人员前去编写前端页面。后端在写完代码的时候要先测试一下数据能否成功传输。后端写测试成功后,告诉传过去的参数的参数名,最后后端和前端对接。当前端对接成功后,就可以把写好的代码更新到与服务器以便于后端人员后期调试使用。

    经过测试我们的这个方法是行得通的,我们的登录注册页面以及其他的一系列页面都成功的对接完毕。

七、维护和拓展----何温森

 

7.1 维护方法

   1、及时发现并修正该软件潜在的错误。

 

   2、在需要的情况下修改软件的部分属性。

 

   3、为提升性能,对程序代码进行优化。

 

7.2功能拓展方法

 

   为该功能编写相关的程序代码后以超链接的形式进行跳转,尽量避免修改源程序的代码做到低耦合。