基于微信平台的反馈式订票系统
2018-08-11任晓萌李海涛王妍肖及京京
◆任晓萌 李海涛 王妍肖 及京京 陈 晨 王 波
基于微信平台的反馈式订票系统
◆任晓萌 李海涛 王妍肖 及京京 陈 晨 王 波
(华北理工大学建筑工程学院 河北 063000)
系统针对郊区学校与市中心区间的班车运行情况,在B/S架设下,使用Python语言,采用MTV模型组织下的Django框架,以Nginx+Uwsgi+Django组合作为后台服务器构架,实现了用户的登录、查询车次、预订车票、进行支付、加车反馈、退票等功能,提供了一种可有效缓解班车运行压力的新型的购票系统,开发了基于微信平台的反馈式订票系统,有效解决了学校师生候车时间长的问题。
微信;反馈式;订票;系统
0 引言
随着网络的快速发展,网上订票作为一种简便快捷的购票手段,受到了越来越多用户的认可。目前华北理工大学已顺利整体搬迁至曹妃甸,学校开通了校区——唐山西站的大巴以便利师生的出行。但学校师生仍面临等车时间过长,等车队伍过长的现状。为解决上述问题,开发了基于微信平台的反馈式订票系统,该系统基于用户提供的出行时间段,反馈给用户车次、乘车时间等具体信息,有效调整班车班次,合理安排班车发车时间和数量,提高师生出行效率。
1 系统分析
反馈式订票系统包括前台用户页面、后台管理页面两个方面。
1.1 前台用户页面
前台用户页面包括以下5个模块:
(1)查询功能模块:用户查询班次,发车时间,车票记录等基本信息;
(2)订票功能模块:用户按照自身需求用于预订车票,进行支付并更新数据库信息;
(3)退票功能模块:用户按照自身需求用于退票和返款处理并更新数据库信息;
(4)申请加车模块:如果已有班次座位已满,用户可以根据自身情况进行申请加车;
(5)个人信息模块:用户可以查看本人的账号信息、预订信息以及加车信息。用户能够通过输入出发地、目的地、发车时间,在前端订票页面查询并根据自身需要选择班次。若班次座位已满,则用户可以通过加车选项来申请具体时间的班次来进行加车预订。微信支付成功以后,系统为用户生成订单信息,用户可以在个人中心页面查看他们的订票记录,且可以向系统发出退款请求。系统将针对详细状况做出相应的退款处理。
1.2 后台管理页面
后台管理页面包括以下4个模块:
(1)班次信息管理:对于班次信息,系统设计了增减编辑和检查班次满座率等管理工作;
(2)乘客信息管理:统计并记录用户的预订信息以及申请加车信息,针对退票用户及时地进行返款处理,对数据库信息实时更新;
(3)加车信息管理:对乘客申请加车情况重新添加班次;
(4)财务信息管理:能够记录唐曹客运的周、月、年运营收入状况。管理员可以在后台管理用户、对班车的相关信息进行录入和修改、按照乘客申请加车的具体情况重新添加班次并合理调度车辆安排发车。
2 系统设计
2.1 模块设计
微信订票系统主要由用户模块和管理员模块构成:
(1)用户模块有查询、订票、退票、申请加车、个人信息5个功能模块,如图1所示。其中,用户可以通过“查询”功能,查看车票预订详情。若无满意的车票显示,可以在此界面重新输入出发地、到达地以及出发日期,并再次进行查询。也可以点击“加车”按钮进行加车,对班次不足的车次进行加车反馈。通过系统的“预订”功能可以检查车票信息。
(2)管理员模块有班次、乘客、加车、财务4个信息模块,管理员的站点管理界面可进行具体车辆信息参数的更改,以及增加或减少具体日期的车次,如图2所示。
图1 用户模块界面图
图2 管理员模块界面图
2.2 数据库设计
微信订票系统实体属性:
(1)用户信息实体属性包含ID、登录名和密码;
(2)班次信息实体属性包含始发地、目的地、发车时间、到达时间、和价格;
(3)加车信息实体属性包含登录名、发车日期和车次;
(4)订单信息实体属性包含登录名、班次、票数和支付状态;
(5)财务信息实体属性包含周收入、月收入、年收入和订单列表;
(6)管理员信息实体属性包含ID、登录名和密码。
在User类的使用中,对象创建完成后Django自动生成表auth_user,乘客信息表继承User类,并继承id,username,password字段。通过在班次信息表(booksystem_bus)和乘客信息表(auth_user)之间增加一张新表booksystem_bus_user,以及在加车信息表(choice_choice)和乘客信息表(auth_user)之间增加一张新表choice_choice_user,由此实现多对多关系。
2.3 后台服务器设计
考虑到本系统Nginx对静态文件的处理能力,设计构建了Nginx+Uwsgi+Django的服务器用来动态分离和反向代理。HTTP的请求由Nginx做解包与分析,其中,Nginx对静态文件进行静态的处理返回。Nginx会将动态文件的请求输出给Uwsgi,调用Django的文件函数后将数据传送回Uwsgi,将数据输出到Nginx,最终输出到客户端。
2.4 微信服务器接口设计
微信服务器采用Django的服务器构架,使用wechatpy的SDK进行不同API的接口接入。在微信项目APP下,引入check_signature Invalid Signature Exception、parse_message等函数,解析XML的消息,验证接入微信请求的有效性;引入WeChatMenu自定义下的view,引导用户进入客户端;在项目APP下增加wechatpay下的WeChatJSAPI、WeChatOrder、WeChatRefund,统一下单接口,公众号网页JS支付接口以及退款接口,进行微信支付的配置。用户发送支付请求,系统会通过Ajax输送数据,后台把前台数据合成XML完成统一下单接口的调用。前台提取prepay_id通过微信浏览器内置JS调用JSAPI支付。在退款接口中,通过双向证书的验证,调用WeChatRefundAPI,即可实现申请退款功能。
2.5 系统架构设计
MTV模式的主要特点体现在全部组件的松耦合形式。Django驱动的Web运用都有精确目标并能独立修改。当重新命名数据表时,管理员的任务可简化为只更改模型。
3 系统实现
3.1 运行环境与关键技术
该反馈式订票系统设计采用了Python2.7语言,利用Django1.8.3框架,其自带的SQLite作为数据库,HTML、CSS与JavaScript作为Web前台设计,以VMware工作站虚拟机中的Ubuntu作为开发环境,为开发者在Windows系统中顺利运行Linux Ubuntu系统提供了必要条件。
3.2 关键代码分析
(1)班次信息代码分析:班次信息属于Django模型,继承了models.Model,Django默认的后台管理界面使进度管理得以实现。
(2)乘客信息代码分析:乘客继承了Django.contrib.认证。除了auth_user需要输入的对象,其他的默认字段不需要考虑。
(3)URL映射代码分析:当用户在订票系统中发起一个网页的请求时,Django控制器会接管通过url.py文件来寻找相应的视图,然后返回HTML响应或如果没有找到则返回404未找到错误,其中最重要的是“相符”元组,这是URL和视图之间映射的定义。
(4)登录判定代码分析:当管理员和普通用户共享登录窗口时,可以在显示登录者信息前确定登录者的身份并显示相应的内容。
(5)订票流程代码分析:在整个订票的过程中,第一要明确用户是否登录,假如未登录,就加载登录页面;假如用户已经登录了,则将其确定的班次传入bus.id;第二判断,如果用户已经预订了该班次,则冲突信息将被反馈,否则,预订成功并显示更新后的预订成功界面。
(6)退票信息代码分析:当用户退款时,后台需要更新数据库,更新飞行(能力,book_sum,收入)领域,并在booksystem_bus_user删除顺序表。
(7)后台增加加车信息代码分析:后台管理系统具有对加车信息增减修改的功能,具体操作如图3,可添加加车日期并选择一个或多个该日期的加车时间点,为前台提供了供用户进行反馈操作的加车信息选项。
图3 增加加车信息代码
4 结束语
系统设计应用了Django框架,以Nginx+Uwsgi+Django组合作为后台服务器构架,使用了Python语言,实现了班车查询、购票、退票以及加车等功能,可以用于缓解学校班车运行压力,方便师生出行,且具有可自助管理后台、方便运行与维护和运行稳定的优点,对于新区开发初期的通勤班车运行管理有一定的参考和应用价值。
[1]马强,肖俊生.大学校车调度系统模型研究[J].科技风, 2012.
[2]王冉阳.基于Django和Python的Web开发[J].电脑编程技巧与维护,2009.
[3]李舜,王辉.基于WAP的手机上网订票系统的设计与实现[J].计算机工程与设计,2008.
[4]黄耿生.利用虚拟机搭建Linux操作系统的实践环境[J].福建电脑,2013.
[5]梁永恩,万世明,翟敏换.SQLite数据库在嵌入式系统中的应用研究[J].现代计算机(专业版),2015.
[6]邱鹏,万怀宇,林友芳等.基于用户行为分析的在线订票系统缓存优化策略研究[J].计算机与现代化,2017.
[7]商恩福.网上订票系统分析与设计[J].电脑编程技巧与维护,2009.
[8]张霞,张志强,吕晓艳等.铁路学生团体票订票系统的设计与实现[J].铁路计算机应用,2013.
华北理工大学2017大学生创新训练项目“基于微信平台的反馈式订票系统”,项目编号:X2017143;华北理工大学校内科技项目,项目编号:25398899。