中国石油大学(北京)现代远程教育
毕 业 设 计(论文)
快递之家管理系统设计与实现
姓 名: 陈涛
学 号:198137
性 别:男
专 业: 计算机科学与技术
年 级:2019秋
学习中心: 校企合作1
指导教师: 冯成2021年9月20日
快递之家管理系统设计与实现
摘 要
随着互联网的发展,人们对物流、快递的需求日益增长。并且目前有多家快递、物流公司,人们需要在各个平台关注不同的快递信息,经常会遇到快递不快,信息更新慢、无法及时接收快递等问题。而物流、快递公司面临着人们对其越来越高的要求需要开发一套既可以让快递员便捷上传物流、快递信息,也可以让用户快速掌握快递信息。以此提高物流、快递公司的工作效率和服务质量。
关键词:快递管理系统;物流公司;系统设计
目 录
第一章 前 言 1
1.1 概述 1
第二章 相关技术 2
2.1 服务模块 2
2.2 编程语言 2
第三章 可行性分析和需求分析 3
3.1 可行性分析 3
3.1.1 技术可行性 3
3.1.2 经济可行性 3
3.2 产品介绍 3
3.3 面向群体 4
3.4 产品范围 4
3.5 产品功能性需求 4
3.6 产品非功能性需求 4
3.6.1 界面需求 4
3.6.2 质量需求 5
第四章 概要与详细设计 6
4.1 系统流程设计 6
4.1.1 系统基础功能结构 6
4.1.2 系统角色设计 7
4.1.3 系统业务流程设计 7
4.2 后台服务设计 8
4.2.1 服务模块设计 8
4.2.3 数据库设计 11
第五章 系统实现 12
5.1 查询功能实现 12
5.2 用户登陆界面实现 13
5.2 登陆后的界面实现 15
第六章 系统测试 17
6.1 系统测试环境 17
6.2 测试过程及结果 17
6.3 测试结果评价 18
第七章 结 论 19
参考文献 20
致 谢 21
第一章 前 言
1.1.1 概述
在国家的大力支持下和科技的进步,网络、信息技术得到了跨越性的发展。随着网络的发达,网上购物、同城速递、跨城物流等服务行业需求量越来越大,人们对快递的需求随之不断提高。国内的快递市场正趋于一种多元化、多样化的市场。目前国内有多家快递、物流公司,如:顺丰、圆通、中通、韵达、京东物流、跨越速运等,人们需要在不同平台上查询自己的快递信息,有时候会因为错过快递信息而没有及时收到快件。且在时间的见证下,目前的多平台查询方式所暴露出来的弊端已经越来越清晰,其效率低、追溯慢、维护难、事务繁的特性频频显出。所以建立方便、快捷的快递查询系统成为了快递市场进一步发展所不可或缺的一部分。使用计算机技术在统一的平台上完成对各个平台的快递信息查询,这显得格外的重要。如此这般可以使得人们在查询快递时不需要流转于多个平台,大大提高查询快递的效率和客户的满意度。这么看开发一套更加便捷的查询快递信息管理系统是非常有必要的,具有推动快递市场进一步发展的重要意义。
第二章 相关技术
1.2.1 服务模块
由于当前互联网发展迅速,智能手机的大面积普及,支付系统变得越来越便捷,绝大多数的人们会选择使用网上购物的方式来消费、购买物品,而这就间接的提高了快递在人们生活中的重要地位。换言之,对于《快递之家管理系统》的多并发、稳定性、性能方面等就要求很高了。考虑到基础系统的稳定性和易操作性,基础操作系统选择Linux,主要服务结构将采用Keepalived+Nginx+Mysql+Ceph。各个服务满足的要求分别为:
1)由Keepalived+Nginx来满足稳定性、高并发、高性能要求;
2)使用Nginx来提供基础的Web服务接口,Nginx服务可以满足高并发要求;
3)由Mysql满足数据库存储要求;
4)使用Ceph来提供存储的基础平台,再结合NFSv4协议满足文件系统的访问。
5)后台主要查询快递信息的功能使用Python实现,并结合Web进行信息展示;
2.2.2 编程语言
常见的如C/C++、JAVA、Go、Python等,考虑到库后台服务的开发语言主要选择 Python语言。Python目前在计算机领域应用范围很广阔,其在多数开发者的心目中占有“优雅”、“明确”、“简单”的独有地位,目前很多大型互联网公司使用Python开发的项目程序有很多,如google earth、YouTube等。网页相关主要用JSP来实现。
第三章 可行性分析和需求分析
1.可行性分析
1.1.技术可行性
1)硬件:目前的硬件性能越来越高,可以满足很高要求的配置。
2)软件开发:目前软件开发的语言有很多,较为流行的Python都在很多系统中得到了很好的运用。
3)数据库:Mysql数据库在当下很多平台都有了很好的表现,作为一个开源的数据库,其安全性、可扩展性、高可用性都得到了很多认可。
4)总结:整体来说不管从硬件选型上、软件开发语言的选择上、还是基础服务的选择上都有很广泛的选择,所以从技术角度该系统的实现是可行的。
1.2.3.1.2 经济可行性
本系统搭建完成后不管从运营成本、人力管理成本都会改善很多。由于当下有很多成熟的技术可供选择,所以在前期的开发投入成本并不需要很多就可以完成。且后期维护方面,基础服务框架来源于多个开源服务,社区沟通便捷方便,问题解决效率高。Python的库有很多,在实现功能上也提供了便捷,所以经济上是可行的。
2.3.2 产品介绍
需要分析系统的功能需求才可使得系统满足用户的需求。以下是对《快递管理之家管理系统》的需求分析。
1)用户信息管理
a)系统需要支持用户实名认证;
b)本系统需要满足用户注册时支持用户填写个人信息且要求用户密码符合安全要求:至少包含数字、符号、大小写字母,不少于8位。
2)快递信息管理
a)支持用户在本平台查看与自己相关快递的实时信息;
b)支持用户录入快递信息并进行实时跟踪查询;
3.3.3 面向群体
本管理系统面向普通用户、系统管理员,其主要功能包括:
系统管理员可以对站点进行管理、普通用户及快递员角色信息状态的管理。普通用户可以在本平台查看与自己相关快递的实时信息。
4.3.4 产品范围
系统的设计目标是开发一个系统初期最为重要的步骤,为了实现系统的灵活性、安全性等特点,系统设计初期必须遵循以下技术指标:
基于Linux操作系统的C/S结构系统;使用Python作为后台服务的首选开发语言,使用JSP作为Web的主要语言;选择Mysql作为系统的数据库存储管理服务。
5.3.5 产品功能性需求
设计了以下功能子系统见表(3-1)。
表3-1 系统总体功能需求表
功能类别 | 子功能 |
用户管理 | 用户信息、查询、角色管理、状态管理 |
快递录入 | 快递信息录入 |
快递查询 | 快递信息的更新与查询 |
6.3.6 产品非功能性需求
6.1.3.6.1 界面需求
本产品界面要求设计如下见表(3-2)。
表3-2 产品界面需求表
需求名称 | 详细要求 |
时间 | 要求在页面的右上角显示,年月日,时分秒 |
简洁 | 要求整体界面简洁明了,操作简单 |
页面自适应 | 可以根据电脑版、手机版界面进行自适应 |
6.2.3.6.2 质量需求
对于产品的质量需求做了如下设计见表(3-3)。
表3-3 产品质量需求表
主要质量要求 | 详细要求 |
页面正确性 | 所有页面显示是不出现乱码,准确显示数据库中内容 |
可靠性 | 显示的内容和操作对应结果要真实且可靠 |
高可用性 | 系统具备高可用、负载均衡特性,不会出现单点故障导致系统无法正常运行 |
易用性 | 易于对网页系统操作性弱用户使用 |
安全性 | 用户信息在传输过程中不被窃取和篡改,满足安全要求 |
可扩展性 | 符合纵横向扩展要求,支持维护升级 |
兼容性 | 可运行在大多数主流的硬件环境中 |
第四章 概要与详细设计
1.4.1 系统流程设计
1.1.4.1.1 系统基础功能结构
主要分为普通用户和系统管理员两个使用角度,为了方便用户清晰知道界面功能选项卡就叫“看看我的快递”和“个人中心”,用户注册登陆相关业务的基础功能结构如下:
1)注册:注册时需要包含用户的登陆名、密码、手机号、真实姓名、身份证号码或其他有效证件、其本人名下所持有的银行卡,并且需要进行实名认证。
2)登陆:完成上述“注册”过程并经过实名认证后就可以进行登录。
3)忘记密码:主要是给已经注册用户提供找回密码的功能,找回密码需要通过身份证、真实姓名、手机号码信息的确认才可进行新密码的修改。
“看看我的快递”页面的基础功能结构如下:
1)我的快递:主要展示与本人有关的快递信息,以条目形式展示。在此页面用户可以单击选择快递信息进行详情查看,在详情页可以看到此快递的实时进度信息,并且也可置顶、关注、取消关注某个快递。
2)个人中心:本界面可以进行个人信息修改,如头像、昵称、个性签名、常用地址、常用联系方式和银行卡绑定、取消绑定的操作。
“系统管理员”页面的基础功能结构如下:
1)系统管理:
a)用户管理:可以对系统中已经注册的用户进行管理,如删除账户、禁用和启用账户、添加账户等;也可以对用户的个人信息做修改,如昵称、真实姓名、头像、手机号、性别等;
b)系统管理:
i.可以导入支持的查询的快递公司的接口功能包;
ii.可以设置一些系统的基础设置,如时间、语言等;
iii.可以将系统置为维护模式;
1.2.4.1.2 系统角色设计
本系统主要有以下两种角色,每个角色主要的使用场景都有不同,具体角色信息如下:
1)“看看我的快递”:设定是普通用户,主要使用场景是查询快递、录入快递信息、关注某快递、置顶某快递、反馈评价等。
2)系统管理员:主要负责快递之家管理系统的日常事宜及处理各种问题,如处理用户反馈、系统维护、系统功能拓展等。
1.3.4.1.3 系统业务流程设计
访问本系统首页主要包含登陆、注册、忘记密码三大功能,首次注册需要进行实名认证,认证成功后即算注册完成。
普通用户登陆系统时主要是进行快递信息查询业务和个人信息修改;
系统管理员主要是为了用户管理、系统基础设置、系统维护、功能性维护的访问目的。
两个不同的操作维度的业务流程如下两张图(见“图4-1”和“图4-2”):
图4-1 “看看我的快递”业务流程图
图4-2 “系统管理”业务流程图
2.4.2 后台服务设计
2.1.4.2.1 服务模块设计
在《快递之家管理系统》中选择Keepalived、Nginx、Mysql、Ceph这几个服务主要是考虑它们具备的优点与平台的高可用、高并发、负载均衡相匹配。下面我会简要说明哪些优点符合此次服务的选择要求:
1)Keepalived: KeepAlived不仅仅支持负载均衡还可以支持双主模式,在HA模式选择中灵活性较高,而且容灾的宕机时间也比较短,可以很好地避免单点故障,所以我们选择keepalived来承担集群的主要结构。
2)Nginx:相对于Apache占用较少的内存资源且扛得住高并发,在处理请求方面是异步非阻塞的,而Apache 在这方面则是阻塞型的,在高并发的场景中Nginx 能够保持低资源低消耗且高性能。另外Nginx的模块编写较为简易,对于后期的维护、功能增改来说会打下良好的基础。再有就是Nginx的官方社区很活跃,如果遇有服务的BUG可以在社区得到各位开发爱好者的支持和指导。
3)Mysql:本系统是基于Linux平台组建的,考虑到资金成本、维护成本会选择开源的数据库软件,所以选择Mysql,版本选择5.6.22,Mysql不仅支持集群还具备较强的集群拓展性,我们主要采用Mysql的主从复制模式,这样可以提高mysql的数据安全。
4)Ceph:它的Crush算法是Ceph系统较大的创新之一,可以做到各类负载的副本放置规则配置,其扩展性也很强,日后在扩展节点、扩容等场景下都会打下良好的运维基础。并且其支持指定副本的物理存储位置分隔故障域,支持数据强一致性以此提高了可靠性。所以存储我们选择Ceph较为可靠。关于Ceph的配置方面,在《快递之家管理系统》的架构中我们采取三台服务器假设双副本的存储方式,然后采用SSD Cache加速读取、存储的速度,协议方面可以采用NFSv4,在Linux系统上NFS协议已经很稳定,且配置简易、使用方便。
5)内存缓存数据库选择Redis服务,因为Redis服务不仅速度快,根据目前已有的数据得知它可以达到读取110000次/s、写81000次/s,还可以支持数据的持久化,即可以将内存中的数据保存在磁盘中,可以做到重启后再次加载数据进行使用,主要的集群功能和故障切换功能相当成熟。
6)本系统的服务模块结构图大致如下(见“图4-3”),图中主要标识各个服务的结构,更为详细的部分后文会作详细描述。
图4-3 《快递之家管理系统》服务模块架构图
以上结构实现了负载均衡、高可用、解决高并发的要求,当然还有一些细节需要考虑,如:存储数据备份、数据库的备份等,Mysql备份有很多中,现有使用较多的有:cp、mysqldump、lvm2快照、xtrabackup。《快递之家管理系统》属于中大型使用场景,备份工具当然不能选择影响业务传输、备份差异大的工具,这里我会在lvm2和xtrabackup这两个选择其中一个,这两种备份方式的备份速度和恢复速度都很快,不过lvm2的便捷性一般,而xtrabackup可以实现innodb热备,灵活性也很强,适合较大规模的备份。
2.2.4.2.3 数据库设计
这里将数据库的部分表设计一下。整个业务流程中会涉及到很多需要存储到数据库中的数据,首先主要有以下几个表[7]:
1)table_user_info:此表格主要存储用户注册时填写的信息的表格,包含的字段为uid、accountName、userRealName、userPassword、userSex、phoneNumber、idCardNu等;
2)table_user_detail:此表格主要记录用户的角色等其他信息的表格,主要包含的字段有uid、accountName、userRealName、userRole、userLoginTime、userLastLoginTime等;
3)table_user_roles:此表格主要记录用户角色的表格,以数字作为角色标识,0为管理员、1普通用户;
4)table_express_info:此表格主要存储“看看我的快递”功能相关的数据的表格,包含的字段有taskid、taskname、expressNu、publishTime、uid、accountName、receiverName、receiverAddress、receiverPhone、senderName、senderAddress、senderPhone、pickupTime、thingsInfo等;
5)table_send_info:此表格主要存储“我要送快递”功能相关的数据的表格,包含的字段有taskid、taskname、expressNu、publishTime、uid、accountName、receiverName、receiverAddress、receiverPhone、senderName、senderAddress、senderPhone、pickupTime、thingsInfo、courierID、courierName、courierPhone等;
6)table_ticket_info:此表格主要存储所有订单信息的表格,包含的字段有ticketid、taskid、ticketStatus、createTime、updateTime等;
第五章 系统实现
1.查询功能实现
本系统的主要核心功能是使用Python语言开发的快递查询模块,现在Python环境下跑通查询代码的主要模块,运行查询的主要代码模块如下:
#!/usr/bin/python
# === the coding is utf-8 ====
import os
import json,request
def searchexpress():
#在此处键入快递单的号码,按照目前快递100网站的要求,只有正在运输途中的快递才能查看的到。
boxNumber = input(‘请输入运单号码’:)
checkurl1 = ‘http://;charset=UTF-8”” language=“”java”%”>