项目介绍
伴随着科技水平的不断提高,人们的消费水平也逐日增加,当今大学校园,
学生对跑腿服务的需求日益增多,繁忙的学业、使学生没有多于的时间去食堂,这就成就了小程序校园跑腿服务,小程序覆盖了用户的跑腿订单发布、订单信息查看、对跑腿员评价、以及活动申请与提交,用户可以以多种身份登录系统,同时完成发布和订单的查看,在小程序校园跑腿没有开发之前进行了深入调查,并设计开发一套小程序校园跑腿,该系统一方面方便用户日常生活、解决学习时间冲突等问题。另一方面为提供给在校大学生勤工俭学的途径。
系统后台服务端使用php编写,使用mysql数据库,小程序端使用的是微信开发者、Uni-weixin框架,可以展示丰富绚丽的小程序界面,数据库方面使用的MySql的数据库,完全可以满足小程序校园跑腿使用,并且性能优秀。系统分析和设计采用面向对象的方法。论文对整个系统的分析、设计和实现做了详细的描述。
开发环境
编程语言:PHP
数据库 :Mysql
系统架构:B/S
编译工具:phpstudy
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net
系统实现
4.1 用户微信端功能模块
用户要登录微信小程序,则需要注册。在小程序校园跑腿里用户可以进行登录,用户注册:个人账号、密码、姓名、性别、邮箱、手机号码进行注册,如图4-1所示。
图4-1用户注册界面图
用户登录:用户通过登录页面输入账号、密码,进行登录,如图4-2所示。
图4-2用户登录界面图
用户登录进入小程序校园跑腿首页,查看首页、跑腿订单、订单信息、意见角、我的等功能模块的相应操作,如图4-3所示。
图4-3系统首页界面图
我的:在我的页面,查看用户信息、订单信息、评价信息、活动信息、用户申请、我要发贴、我的发贴等功能进行相应的操作,如图4-4所示。
图4-4我的界面图
用户信息:点击用户信息,进入个人详情页面可修改个人账号、姓名、性别、邮箱、手机号码、相片等内容,点击保存来更新用户信息,也可以点击退出登录,退出系统,如图4-5所示。
图4-5用户信息界面图
活动信息:用户在活动信息页面,查看活动编号、活动时间、发布日期、活动简介、活动内容等,如有需要点击申请,进入申请页面填写备注内容提交,如图4-6 4-7所示。
图4-6活动信息界面图
图4-7申请界面图
跑腿订单,用户在跑腿订单页面,通过编辑填写订单编号、订单名称、地点类型、出发地、目的地、相关图片、跑腿费用、状态、个人账号、姓名、手机号码、发布日期,点击提交发布,如图4-8所示。
图4-8跑腿订单界面图
我要发帖:用户通过我要发帖页面填写发布标题、内容进行帖子发布,以及查看特帖子评论,,如图4-9所示。
图4-9我要发帖界面图
4.2 跑腿员微信端功能模块
跑腿员要登录微信小程序,则需要注册。在小程序校园跑腿里跑腿员可以进行登录,在注册页面填写:跑腿账号、跑腿服姓名、性别、邮箱、联系手机进行注册,如图4-10所示。
图4-10用户注册界面图
跑腿员:跑腿员通过登录页面输入跑腿账号、密码,进行登录,如图4-11所示。
图4-11跑腿员登录界面图
登录小程序校园跑腿首页,跑腿员可以看到首页、跑腿订单、订单信息、意见角、我的等功能模块的相应操作,如图4-12所示。
图4-12系统首页界面图
我的:在我的页面,可以对跑腿员信息、跑腿订单、订单信息、评价信息、活动信息、跑腿员参与、我要发贴、我的发贴等功能进行相应的操作,如图4-13所示。
图4-13我的界面图
跑腿员:点击跑腿员信息,可修改跑腿账号、跑腿服姓名、性别、邮箱、联系手机、相片等内容,点击保存来更新跑腿员信息,也可以点击退出登录,退出系统,如图4-14所示。
图4-14跑腿员界面图
跑腿订单:在跑腿订单页面,查看订单编号、订单名称、地点类型、出发地、目的地、相关图片、跑腿费用、状态、个人账号、姓名、手机号码、发布日期等内容,如有需要接单审核审核用户,完成审核点击接单系统会跳入接单页面,如图4-15 4-16所示。
图4-15跑腿订单界面图
图4-16审核界面图
活动信息页面,跑腿员查看活动的活动编号、活动时间、发布日期、活动简介
,如有需要点击参与按钮进入参与页面填写备注进行提交,如图4-17所示。
图4-17活动界面图
图4-17参与界面图
4.3管理员服务端功能模块
管理员通过输入用户名,密码,角色等内容进行登录,登录到系统后台,进行相应的操作,如下图4-18所示。
图4-18管理员登录界图面
管理员登录进入到微信小程序校园跑腿的后台,管理员查看首页、个人中心、用户管理、跑腿员管理、跑腿订单管理、订单信息管理、评价信息管理、活动信息管理、用户申请管理、跑腿员参与管理、意见角、系统管理等进行相应操作,如下图4-19所示:
图4-19管理员功能界图面
用户管理:在用户管理页面,管理员可以对用户账号、用户姓名、性别、头像、电话号码等用户信息进行详情、修改、删除、新增等操作,如下图4-20所示。
图4-20用户管理界面图
跑腿员管理:管理员通过跑腿员页面查看跑腿账号、跑腿服姓名、性别、邮箱、联系手机、相片等内容,可进行新增、详情查看、修改、删除等操作,如下图4-21所示。
图4-21物品类型管理界面图
跑腿订单管理:管理员可对跑腿订单查看订单编号、订单名称、地点类型、出发地、目的地、相关图片、跑腿费用、状态、个人账号、姓名、手机号码、发布日期等内容进行详情查看、修改、删除,以及审核用户上传跑腿订单进行审核,如图下图4-22所示。
图4-22跑腿订单管理界面图
订单信息管理:管理员通过订单信息页面,查看订单编号、订单名称、地点类型、出发地、目的地、相关图片、个人账号、姓名、手机号码、订单状态、跑腿账号、跑腿姓名、联系手机、操作时间,以及查看支付详情、审核与回复等操作,如下图4-23所示。
图4-23订单信息管理界面图
活动信息管理:管理员通过活动信息页面新增编辑活动编号、活动名称、活动图片、活动时间、发布日期、活动内容进行发布,如下图4-24所示。
图4-24活动信息管理界面图
跑腿员参与管理:管理员通查看跑腿员参与活,进行审核跑腿员参加活动,并回复跑腿员,如下图4-25 所示。
图4-25跑腿员参与管理界面图
系统管理;管理员在该页面轮播图管理界面管理员可以在此页面进行首页轮播图上传,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作,如下图4-26所示。
图4-26轮播图管理界面图
核心代码
<?php
session_start();
class PaotuiyuancanyuController extends CommonController {
public function __construct()
{
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
header('Access-Control-Allow-Headers:Origin,Content-Type,Accept,token,X-Requested-With,device');
}
public $columData = [
'id','addtime'
,'shenqingbianhao'
,'huodongmingcheng'
,'huodongshijian'
,'huodongtupian'
,'paotuizhanghao'
,'paotuixingming'
,'beizhu'
,'shenqingriqi'
,'crossuserid'
,'crossrefid'
,'sfsh'
,'shhf'
,'userid'
];
/**
* 分页,列表
* get
*/
public function page(){
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$userid = $tokens['id'];
$where = " where 1 ";//查询条件
if($tokens['isAdmin'] != 1 && $tokens['tablename'] == 'paotuiyuan') {
$where .= " and `paotuizhanghao` = '".$tokens['username']."' ";
}
$page = isset($_REQUEST['page'])?$_REQUEST['page']:"1";
$limt = isset($_REQUEST['limit'])?$_REQUEST['limit']:"10";
$sort = isset($_REQUEST['sort'])?$_REQUEST['sort']:"id";
$order = isset($_REQUEST['order'])?$_REQUEST['order']:"asc";
foreach ($_REQUEST as $k => $val){
if(in_array($k, $this->columData)){
if ($val != ''){
$where.= " and ".$k." like '".$val."'";
}
}
}
$base = json_decode(base64_decode($token),true);
if ($base['isAdmin']!=1){
$md5 = md5($userid."+10086");
$colum = "paotuizhanghao";
$columData = $base['columData'];
if (isset($_SESSION[$md5]) && in_array($colum, $columData)){
if($base['tablename'] == 'paotuiyuan'){
$where .= " and `paotuizhanghao` = '".$_SESSION[$md5]."'";
}
}
}
$sql = "select * from `paotuiyuancanyu` ".$where;
$count = table_sql($sql);
if ($count->num_rows < 1){
$numberCount = 0;
}else{
$numberCount = $count->num_rows;
}
$page_count = ceil($numberCount/$limt);//页数
$startCount = ($page-1)*$limt;
$lists = "select * from `paotuiyuancanyu` ".$where." order by ".$sort." ".$order." limit ".$startCount.",".$limt;
$result = table_sql($lists);
$arrayData = array();
if ($result->num_rows > 0) {
while ($datas = $result->fetch_assoc()){
array_push($arrayData,$datas);
}
}
exit(json_encode([
'code'=>0,
'data' => [
"total" => $numberCount,
"pageSize" => $limt,
"totalPage" => $page_count,
"currPage" => $page,
"list" => $arrayData
]
]));
}
/**
* 分页,列表list
* get
*/
public function lists(){
$page = isset($_REQUEST['page'])?$_REQUEST['page']:"1";
$limt = isset($_REQUEST['limit'])?$_REQUEST['limit']:"10";
$sort = isset($_REQUEST['sort'])?$_REQUEST['sort']:"id";
$order = isset($_REQUEST['order'])?$_REQUEST['order']:"asc";
$refid = isset($_REQUEST['refid']) ? $_REQUEST['refid'] : "0";
$where = " where 1 ";//查询条件
if($tokens['isAdmin'] != 1 && $tokens['tablename'] == 'paotuiyuan') {
$where .= " and `paotuizhanghao` = '".$tokens['username']."' ";
}
foreach ($_REQUEST as $k => $val){
if(in_array($k, $this->columData)){
$where.= " and ".$k." like '".$val."'";
}
}
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$userid = $tokens['id'];
$token = $this->token();
$base = json_decode(base64_decode($token),true);
$userid = $base['id'];
if ($base['isAdmin']!=1){
$md5 = md5($userid."+10086");
$colum = "paotuizhanghao";
$columData = $base['columData'];
if (isset($base['success'][$colum]) && in_array($colum, $columData)){
$where .= " and `paotuizhanghao` = '".$base['success'][$colum]."'";
}
}
$sql = "select * from `paotuiyuancanyu`".$where;
$count = table_sql($sql);
if ($count->num_rows < 1){
$numberCount = 0;
}else{
$numberCount = $count->num_rows;
}
$page_count = ceil($numberCount/$limt);//页数
$startCount = ($page-1)*$limt;
$lists = "select * from `paotuiyuancanyu` ".$where." order by ".$sort." ".$order." limit ".$startCount.",".$limt;
$result = table_sql($lists);
$arrayData = array();
if ($result->num_rows > 0) {
while ($datas = $result->fetch_assoc()){
array_push($arrayData,$datas);
}
}
exit(json_encode([
'code'=>0,
'data' => [
"total" => $numberCount,
"pageSize" => $limt,
"totalPage" => $page_count,
"currPage" => $page,
"list" => $arrayData
]
]));
}
/**
* 新增数据接口
* post
*/
public function save(){
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$uid = $tokens['id'];
$keyArr = $valArr = array();
$tmpData = strval(file_get_contents("php://input"));//Content-Type: application/json 需要用到php://input 处理输入流
if (!empty($tmpData)&& isset($tmpData)){
$postData = json_decode($tmpData,true);
$postData['userid'] = $uid;
foreach ($postData as $key => $value){
if (in_array($key, $this->columData)){
if(!empty($value) || $value == 0) {
if ($key == 'id') {
continue;
}
array_push($keyArr,"`".$key."`");
if($key == 'clicktime') {
array_push($valArr,"'".date('Y-m-d h:i:s', time())."'");
} else {
array_push($valArr,"'".$value."'");
}
}
}
}
}
$k = implode(',',$keyArr);
$v = implode(',',$valArr);
$sql = "INSERT INTO `paotuiyuancanyu` (".$k.") VALUES (".$v.")";
$result = table_sql($sql);
exit(json_encode(['code'=>0]));
}
/**
* 新增数据接口 add
* post
*/
public function add(){
$keyArr = $valArr = array();
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$uid = $tokens['id'];
$tmpData = strval(file_get_contents("php://input"));
if (!empty($tmpData)&& isset($tmpData)){
$postData = json_decode($tmpData,true);
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$uid = $tokens['id'];
$postData['userid'] = $uid;
foreach ($postData as $key => $value){
if (in_array($key, $this->columData)){
if(!empty($value) || $value == 0) {
if ($key == 'id') {
continue;
}
array_push($keyArr,"`".$key."`");
if($key == 'clicktime') {
array_push($valArr,"'".date('Y-m-d h:i:s', time())."'");
} else {
array_push($valArr,"'".$value."'");
}
}
}
}
}
$k = implode(',',$keyArr);
$v = implode(',',$valArr);
$sql = "INSERT INTO `paotuiyuancanyu` (".$k.") VALUES (".$v.")";
$result = table_sql($sql);
exit(json_encode(['code'=>0]));
}
/**
* 更新接口
* post
*/
public function update(){
$tmpData = strval(file_get_contents("php://input"));
$postData = json_decode($tmpData,true);
$v = array();
foreach ($postData as $key => $value){
if (in_array($key, $this->columData)){
if ($key == "id"){
$id = $value;
}
if(!empty($value) || $value === 0) {
array_push($v,$key." = '".$value."'");
}
}
}
$value = implode(',',$v);
$sql = "UPDATE paotuiyuancanyu SET ".$value." where id = ".$id;
$result = table_sql($sql);
exit(json_encode(['code'=>0]));
}
/**
* 删除
* post
*/
public function delete(){
$ids = strval(file_get_contents("php://input"));//发现接收的是字符串
preg_match_all('/\d+/',$ids,$arr);
$str = implode(',',$arr[0]);//拼接字符,
$sql = "delete from paotuiyuancanyu WHERE id in({$str})";
$result = table_sql($sql);
exit(json_encode(['code'=>0]));
}
/**
* 查询一条数据
* get
*/
public function info($id=false){
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$userid = $tokens['id'];
$name = isset($_REQUEST['name'])? $_REQUEST['name']:"";
if (!empty($id)){
$where = "`id` = ".$id;
}else{
$where = "`name` = ".$name;
}
$sql = "select * from `paotuiyuancanyu` where ".$where;
$result = table_sql($sql);
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
$lists = $row;
}
}
exit(json_encode([
'code'=>0,
'data'=> $lists
]));
}
/**
* 查询一条数据
* get
*/
public function detail($id=false){
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$userid = $tokens['id'];
$name = isset($_REQUEST['name'])? $_REQUEST['name']:"";
if ($id){
$where = "`id` = ".$id;
}else{
$where = "`name` = ".$name;
}
$sql = "select * from `paotuiyuancanyu` where ".$where;
$result = table_sql($sql);
if (!$result) exit(json_encode(['code'=>500,'msg'=>"查询数据发生错误。"]));
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
$lists = $row;
}
}
exit(json_encode([
'code'=>0,
'data'=> $lists
]));
}
/**
* 获取需要提醒的记录数接口
* get
*/
public function remind($columnName,$type){
$remindStart = isset($_GET['remindstart'])?$_GET['remindstart']:"";
$remindEnd = isset($_GET['remindend'])?$_GET['remindend']:"";
$where = '';
$token = $this->token();
$tokens = json_decode(base64_decode($token),true);
if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>403,'msg'=>"你还没有登录。"]));
$uid = $tokens['id'];
$where .= " and `userid` = '".$uid."'";
if ($type == 1){//数字
if ($remindStart && $remindEnd){
$where .= " and ".$columnName."<='".$remindEnd."' and ".$columnName.">='".$remindStart."'";
}elseif($remindStart){
$where .= " and ".$columnName.">='".$remindStart."'";
}elseif($remindEnd){
$where .= " and ".$columnName."<='".$remindEnd."'";
}
}else{
if ($remindStart && $remindEnd){
$where .= " and ".$columnName."<='".date("Y-m-d",strtotime("+".$remindEnd." day"))."' and ".$columnName.">='".date("Y-m-d",strtotime("+".$remindStart." day"))."'";
}elseif($remindStart){
$where .= " and ".$columnName.">='".date("Y-m-d",strtotime("+".$remindStart." day"))."'";
}elseif($remindEnd){
$where .= " and ".$columnName."<='".date("Y-m-d",strtotime("+".$remindEnd." day"))."'";
}
}
$sql = "select * from `paotuiyuancanyu` where 1 ".$where;
$result = table_sql($sql);
exit(json_encode(['code'=> 0 ,'count' => $result->num_rows]));
}
}
论文参考
目 录
第一章 绪论 1
1.1 本课题研究背景 1
1.2 电子商务简介 1
1.3 本课题研究的目的和意义 2
1.4 论文所做的主要工作 2
第二章 系统实现的技术支持 4
2.1 微信小程序技术 4
2.2 B/S简介 4
2.3 Mysql数据库技术 4
2.4 PHP语言简介 4
第三章 小程序校园跑腿系统的分析与设计 5
3.1系统分析 5
3.1.1可行性分析 5
3.1.2 经济可行性 5
3.1.3 技术可行性 5
3.1.4 运行可行性 5
3.1.5需求分析 5
3.1.6 功能分析 6
3.2 总体设计 6
3.3 数据库设计 6
3.3.1 数据库E-R图 6
3.3.2 数据库中相关的表 9
第四章小程序校园跑腿系统详细设计 13
4.14.1 用户微信端功能模块 13
4.2 跑腿员微信端功能模块 22
4.3管理员服务端功能模块 22
第五章 系统的调试和测试 27
第六章 总结 29
参考文献 30
致谢 31