当前网上购物以其方便快捷等优势成为了很多消费者青睐的消费模式。 高校师生更是将此作为购物的首选, 每日各大高校都有着数量巨大的邮递快件, 各快递公司都在高校成立了快递接收与寄送代理点, 但通过电话或者短信等方式让老师、同学领取快递的方式严重影响校园的教学秩序。 古贞等的大学校园设立快递超市的可行性分析研究[1], 刘珍的高校校园快递新模式研究[2]等从理论方面进行了阐述; 但很少有关校园快递超市系统设计的相关文献; 大部分文献主要集中在快递管理系统的设计与实现上, 像张芳的基于J2EE 的快递管理系统的设计与实现[3], 蔡磊的基于架构技术的快递管理系统的设计与实现[4], 刘振庭的基于 Web Services 快递管理系统解决方案[5]. 而且文献都没有涉及当访问量过高以及遇到攻击时的解决方案。
本文从并发性、安全性等角度出发, 结合校园快递超市的实际需求, 设计与实现了一套校园快递超市系统。
1 总体设计
1.1 模块设计
基于 PHP+MySQL 的校园超市快递管理系统分为4 个主要功能模块: 快件操作、统计报表、收派终端以及结算管理。 在前台页面中包括用户登录、快件查询、运价查询 3 个主要模块; 快递管理系统的总体功能架构设计, 如图 1 所示:
各功能模块说明如下:
用户登录: 系统操作员登录系统, 实现快递快件的各种操作。
快件查询: 学院师生输入快件运单号, 查询快递是否到达。
运价查询: 学院师生可输入快件的目的地、重量等信息查询寄送快件的运价。
快件信息: 包含快件信息录入、快件信息签收、快件信息揽入三个模块。
(1)快件信息录入主要是录入到达快件的运单号、收件人姓名、联系方式、到达日期等信息。
(2)快件信息签收模块主要是实现收件人签收快件,包括单次签收与批量签收功能。
(3)快件信息揽入主要录入学院师生邮寄快件的基本信息, 包括单号、寄送人姓名、寄送日期、快件的重量、保费、运价等。
统计报表: 包括所有快件信息与监控对比两个模块。 所有快件信息模块主要是展示各快递公司的到件情况, 监控对比模块主要是监控各快递公司已派件情况和未派件情况的对比; 对于未派送快件以进行发送短信进行提醒。
收派终端: 主要是给系统管理员使用, 包括派费设定与运价设定两个子模块。 派费设定主要是设置各快递公司的派送价格; 运价设定主要是根据目的地和重量设定保费、首重、续重等参数。
结算管理: 包含收派件收入明细与收入总计两个子模块;(1)收派件收入明细模块可以查询各个时间段各快递公司的派件数量、收件数量、派费、运费以及费用合计等详细信息。(2)收入总计模块可查询各时间段的收派费用以及总的收入合计。 结算管理模块可以实时监控各时间段校园快递的盈利情况。
1.2 数据库设计
本项目采用MySQL数据库, PHP自身可以与大多数数据库进行连接, 但 MySQL 数据库是开源界所公认的与 PHP 结合最好的数据库, 其具有安全、跨平台、体积小、高效等特点, 是 PHP 的黄金搭档。 本系统共设计了派件信息表、揽件信息表、价格表、快递公司表以及用户信息表 5 张表, 其 ER 图如下图 2 所示。
2 系统实现
2.1 前端界面实现
前端界面呈现主要是采用 HTML+CSS+jQuery 方式, 同时为提高 Web 前端性能, 采用文献[6]的方式进行了浏览器访问优化实现, 如通过合并 CSS 以及 JS、图片等来减少HTTP请求;使用浏览器缓存、启用压缩、减少 COOKIE 传输等。
2.1.1 条码扫描枪自动录入
本系统的录入采用条码扫描枪扫描快件运单号,进行批量自动录入, 如图 3 所示。 扫描枪扫描系统默认键为键盘上的 ENTER 键, 编写文本框事件响应函数addRow(),函数功能为识别扫描枪, 动态生成表格行,其关键代码如下:
function addRow(evt){
var k=window.event?evt.keyCode:evt.which;
if (k==13){
clearTimeout(firstTime);
var addTable=document.getElementById(“addpage”);
var row_index=addTable.rows.length;
//新插入行在表格中的位置
var newRow=addTable.insertRow(row_index);
//插入新行
newRow.id=“row”+row_index;
//设置新插入行的 ID
var col2=newRow.insertCell(0);
col2.innerHTML=“<inputclass='ipt'
name='b”+row_index+“‘id='b”+row_index+“'
type='text' onkeypress=\”addRow(event)\“ />”;
}
2.2 高访问量高并发解决方案
因系统为 B/S 结构以及系统是面向高校师生, 可能会出现某一时间段集中访问系统进行并发查询的高访问量情况, 本文采用两种策略来解决这种流量激增的状况。
2.2.1 页面静态化
静态化可以有效提高系统的访问效率、降低服务器负载[7], PHP 中动态生成静态页面主要应用 PHP 中的缓存函数, 本文主要创建了一个 StaticPage 类; 在StaticPage 类中, 定义 pageBegin()和 pageEnd()方法分别用来定义所要生成静态页面的开始和结束位置; 定义 getStaticPageName()方法根据实际的 PHP 页面的请求地址生成静态页面地址; 定义 makeStaticPage()方法创建静态页面;StaticPage 类中生成静态页的方法是真正意义地生成静态页面, 而非伪静态, 其好处是不受服务器局限, 如果使用伪静态的方法则要开启Apache服务器的Rewrite 功能。
2.2.2 引入 MemCache 缓存技术
memcache 是一个高性能的分布式的内存对象缓存系统, 它能够用来存储各种格式的数据, 包括图像、视频、文件以及数据库检索的结果等。 使用 Memcache能减少服务器压力和数据库读取次数, 缓解数据库的压力[8], 让 Memcache 作为一个缓存区域, 把部分信息保存在内存中, 在前端能够迅速的进行存取。 首先在服务器端开启 Memcache 扩展, 然后下载安装好Memcache;其关键代码如下:
<?php
$mem=new Memcache;
$mem->connect(“localhost”,11211); $sql=“select *
from tb_express”;
$key=substr(md5($sql), 10, 8);
$data=$mem->get($key);
if(!$data){
$mysqli=new mysqli(“localhost”, “root”,
“123456”, “db_express”);
$result=$mysqli->query($sql);
$data=array();
while($row=$result->Fetch_assoc()){
$data[]=$row;
}
$result->free();
$mysqli->close();
$mem->set($key,$data,
MEMCACHE_COMPRESSED, 3600);
echo $sql;
}
echo '<pre>';
print_r($data);
?>
2.3 安全保障
为了保证系统的安全运行, 系统从客户端与服务器端都进行了安全设计。 在客户端采用用户名和口令字的身份鉴别技术, 对密码使用 MD5 加密; 通过编写jQuery 组件类来验证用户输入的合法性,防御跨站脚本(XSS)攻击; 同时采用验证码技术, 在一定程度上对跨站点请求伪造攻击(CSRF)进行防御;服务器端设计对用户分角色管理, 对访问控制进行了详细设计与实现, 针对不同的角色赋于不同的操作权限。 在防御 SQL 注入方面使用预编译语句、存储过程以及编写安全函数等方法; 同时对 SessionFixation 攻击与 Session 保持攻击方面进行了有效预防;编写代码时针对 PHP 中常见的文件包含漏洞、变量覆盖漏洞和代码执行漏洞分别进行了有效防御。
运行实践表明, 该系统具有良好的安全性、可操作性、可移植性和可扩展性。 基于 WEB 管理,提高了快件信息管理工作的实时性和准确性。 本系统目前正在推广之中, 其开发技术也将适合其它网络化管理信息系统的开发与实施。 图 4 是登录查询界面,图 5 是快件信息界面, 图 6 是收入总计界面。
3 总结
本文主要介绍基于 PHP 与 MySQL 的校园超市快递管理系统的设计与实现。 系统的设计与实现过程中主要采用了软件工程的分析模式, 针对设计与实现进行了详细描述。 系统主要基于 B/S 结构, 釆用 PHP 语言, 使用 JS、JQUERY 等前沿网页处理技术, 数据库采用 MySQL, 进行数据库表及表关系的设计。 实现了高访问高并发的解决方案, 同时对系统的安全方面进行了详细设计与实现。
参考文献
1 古贞,单晓曦,邹亚清,周肖芳,陆霞。大学校园设立快递超市的可行性分析研究。物流工程与管理,2014,36(5):206–207.
2 刘珍。高校校园快递新模式研究。武汉商业服务学院学报,2013,27(1):27–29.
3 张芳。基于 J2EE 的快递管理系统的设计与实现[硕士学位论文].济南:山东大学,2013.
4 蔡磊。基于架构技术的快递管理系统的设计与实现[硕士学位论文].武汉:华中科技大学,2011.
5 刘振庭,毕杨。基于 Web Services 快递管理系统解决方案。现代电子技术,2012,35(8):33–34.
6 李雨晨。WEB 系统前端性能优化方法研究[硕士学位论文].长沙:湖南大学,2013.
7 白万民,吴夫丹,白小军。Web 应用中的网页静态化技术研究。西安工业大学学报,2014,34(1):34–37.
8 谢杰涛,吴敏,吴娟,史睿冰。Web 系统高性能本地数据缓存实现机制。计算机应用研究,2014,31(7):74–77.