基于PHP的旅游管理系统

2023-11-13

系列文章目录

基于SpringBoot的高校在线答疑管理系统

基于SpringBoot的外卖点餐管理系统

基于SpringBoot的实验室管理系统


目录

系列文章目录

前言

一、相关技术

二、系统设计

1.系统体系结构

 2.数据库设计原则

 3.系统UML用例分析

 三、系统页面

1.管理员功能页面

 2.用户功能页面

3.前台功能页面

 四、核心代码


前言

随着旅游行业的不断发展,各家旅游行业之间的竞争日益激烈,旅游部门所需的信息量越来越大,业务操作中涉及的各种线路情况、用户情况以及旅游协作部门的情况越来越复杂多变。而除了一些个别地区已采用了的旅游网站,一般通常是以原始的手工方式处理/新闻资讯。但是工作人员若仅靠手工方式处理大量资料,很可能带来出错率的增长以及大量资源的浪费和闲置等问题。因此,只有加强对旅游信息资源的整合、统一管理,才能使旅游部门运行更加合理、高效地运转。本文是根据旅游行业的这种现状,提出解决问题的一个可行性方法:采用现代化统一的计算机网络系统,实现了旅游管理的网络化,各类信息有序地进行存储,同时采用了权限认证的方式,本系统有管理员与用户,只有经过了系统权限认证之后,方可进入系统主控界面,进行信息管理,推荐查询,在线组队,线路规划等功能的使用。

该系统开发环境为的数据库是Mysql,使用PHP技术开发,B/S结构,是本系统的开发平台。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。


一、相关技术

开发语言:PHP

框架:原生php/thinkphp5

服务器:Apache

数据库:MySQL57

数据库管理工具:Navicat

运行软件:小皮phpstudy

二、系统设计

1.系统体系结构

结构图: ​​​​​​​

 登录系统结构图

 系统结构图

 2.数据库设计原则

      每个数据库的应用它们都是和区分开的,当运行到一定的程序当中,它就会与自己相关的协议与用户端进行通讯。那么这个系统就会对使这些数据进行连接。当我们选择哪个桥段的时候,接下来就会简单的叙述这个数据库是如何来创建的。当点击完成按钮的时候就会自动在对话框内弹出数据源的名称,在进行点击下一步即可,直接在输入相对应的身份验证和登录密码。

旅游见闻的数据流程:

用户信息:用户名、密码、用户姓名、头像、性别、手机号码、邮箱实体E-R图

 景点推荐信息:景点名称、图片、景点星级、景点介绍、地址、城市、门票价格、营业时间、注意事项E-R图

 3.系统UML用例分析

管理员登录后可进行首页、个人中心、用户管理、景点推荐管理、特色美食管理、酒店青旅管理、路线规划管理、休闲娱乐管理、结伴同行管理、结伴同行管理、视频类型管理、新闻资讯、留言板管理、系统管理

用户后台:首页、个人中心、景点推荐管理、特色美食管理、酒店青旅管理、路线规划管理、休闲娱乐管理、结伴同行管理、结伴同行管理、视频类型管理、留言板管理、我的收藏管理

 三、系统页面

1.管理员功能页面

登陆、管理员输入个人的账号、密码、角色登录系统,这时候系统的数据库就会在进行查找相关的信息,如果我们输入的账号、密码不正确,数据库就会提示出错误的信息提示,同时会提示管理员重新输入自己的账号、密码,直到账号密码输入成功后,会提登录成功的信息。

首页:管理员进入到界面,通过界面的任务大厅,登录成功后进入到系统可以进行查看首页、个人中心、用户管理、景点推荐管理、特色美食管理、酒店青旅管理、路线规划管理、休闲娱乐管理、结伴同行管理、留言板管理、系统管理等功能模块,进行相对应操作。

管理员对用户信息可编辑用户名、密码、用户姓名、头像、性别、手机号码、邮箱并进行添加、删除、修改以及查看。

​​​​​​​

 

景点推荐管理:管理员通过列表可以获取查看编辑景点名称、图片、景点星级、景点介绍、地址、城市、门票价格、营业时间、注意事项等信息,进行详情、修改操作。

酒店青旅管理:管理员通过列表可以获取酒店名称、图片、酒店类型、星级、酒店介绍、酒店地址、联系电话等信息,进行查看评论、详情、修改、删除操作。

休闲娱乐管理:管理员通过列表可以获取娱乐名称、图片、详情介绍、打卡地点、城市、人均消费等信息,进行查看评论、详情、修改、删除操作。

 结伴同行管理:管理员通过列表可以获取景点名称、图片、景点介绍、地址、结伴内容、结伴人数、出发时间、用户名、用户姓名、发布日期等信息,进行查看评论、详情、修改、删除操作。

 系统管理:管理员通过系统管理页面查看轮播图/新闻资讯等进行上传图片,资讯发布进行添加、删除、修改以及查看并对整个系统进行维护等操作。

 2.用户功能页面

首页:用户进入到界面,通过界面的任务大厅,登录成功后进入到系统可以进行查看首页、个人中心、结伴同行管理、我的收藏管理等功能模块。

 结伴同行管理,在结伴同行页面可以新增景点名称、图片、景点介绍、地址、结伴内容、结伴人数、出发时间、用户名、用户姓名、发布日期等内容,并进行提交/取消、添加、删除、修改操作操作。

 

 我的收藏管理,在收藏管理页面可以查看收藏名称、收藏图片等等内容,并进行详情查看,修改,等操作。

3.前台功能页面

首页:用户通过首页列表可以查看首页、景点推荐、特色美食、酒店青旅、结伴同行、新闻资讯、留言反馈、个人中心、后台管理、客服等内容。

 注册、用户登陆,在注册页面可以填写用户名、密码、用户姓名、手机号码、邮箱等详细内容,进行注册、登录。

 

 景点推荐,在景点推荐页面通过景点名称、图片、景点星级、景点介绍、地址、城市、门票价格、营业时间、注意事项等信息进行查看、评论。

 

 特色美食,用户在特色美食页面可查看、评论操作。

 

 路线规划,在路线规划页面可查看、搜索、评论、收藏。

 个人中心,用户在个人信息页面可进行编辑用户名、密码、用户姓名、头像、性别、手机号码、邮箱进行添加、修改、删除操作。

 四、核心代码

<?php
session_start();
class UsersController 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','username','password','role'
    ];
    /**
     * 登录接口
     * POST
     * */
    public function login(){
        $username = isset($_REQUEST['username'])?$_REQUEST['username']:"";
        $password = isset($_REQUEST['password'])?$_REQUEST['password']:"";
        $sql = "select * from `users` where username = '".$username."' and password = '".$password."'";
        $result = table_sql($sql);
        if ($result->num_rows > 0) {
            // 输出数据
            while($row = $result->fetch_assoc()) {
                $token_array = [
                    "iat" => time(), //签发时间
                    "exp" => time()+7200, //token 过期时间
                    'tablename'=> 'users',//表名
					'isAdmin' => 1,
                    'id' => $row["id"],
                    "success" => $row,//记录的uid的信息,如果有其它信息,可以再添加数组的键值对
                ];
                $tokens = base64_encode(json_encode($token_array));
                $data = ['code' => 0, 'token' => $tokens];
                exit(json_encode($data));
            }
        } else {
            exit(json_encode(['code'=>500,'msg'=>"账号或密码错误"]));
        }
    }
    /**
     * 退出
     * post
     */
    public function logout(){
        $token = $this->token();
        unset($token);
        exit(json_encode(['code'=>0,'msg'=>'退出成功']));
    }
    /**
     * 获取session
     */
    public function session(){
        $token = $this->token();
        $data = json_decode(base64_decode($token),true);
        $arrayData = $data['success'];
        exit(json_encode(['code'=>0,'data'=>$arrayData]));
    }
    /**
     * 找回密码 重置为123456
     **/
    public function resetPass(){
        $username = input('post.username');
        $counts = "select * from `users` where username = '".$username."'";
        $cotte = table_sql($counts);
        if($cotte->num_rows<1){
            exit(json_encode(['code'=>500,'msg'=>"用户名错误。"]));
        }
        $sql = "update users set password = '123456' where username = '".$username."'";
        $result = table_sql($sql);
        if($result) exit(json_encode(['code'=>500,'msg'=>"重置密码错误。"]));
        exit(json_encode(['code'=>0,'msg'=>"密码已重置为:123456"]));
    }
    /**
     * 分页,列表
     * 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'];
        $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";
        $where = "";//查询条件
        $sql = "select * from `users`".$where;
        $count = table_sql($sql);
        if ($count->num_rows < 1){
            $numberCount = 1;
        }else{
            $numberCount = $count->num_rows;
        }
        $page_count = ceil($numberCount/$limt);//页数
        $startCount = ($page-1)*10;
        $lists = "select * from `users` ".$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" => $count,
                "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'=>"你还没有登录。"]));
        $userid = $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);
            foreach ($postData as $key => $value){
                if (in_array($key, $this->columData)){
                    array_push($keyArr,"`".$key."`");
                    array_push($valArr,"'".$value."'");
                }
            }
        }
        $k = implode(',',$keyArr);
        $v = implode(',',$valArr);
        $sql = "INSERT INTO `users` (".$k.") VALUES (".$v.")";
        $result = table_sql($sql);
        if (!$result) exit(json_encode(['code'=>500,'msg'=>"新增失败"]));
        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)){
                array_push($v,$key." = '".$value."'");
            }
        }
        $value = implode(',',$v);
         $sql = "UPDATE users SET ".$value;
        $result = table_sql($sql);
        if (!$result) exit(json_encode(['code'=>500,'msg'=>"修改失败"]));
        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 users WHERE id in({$str})";
        $result = table_sql($sql);
        if (!$result) exit(json_encode(['code'=>500,'msg'=>"删除失败。"]));
        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 `users` 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
        ]));
    }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于PHP的旅游管理系统 的相关文章

随机推荐

  • 在虚拟机中win10启用远程桌面的方法

    1 打开虚拟机 选择此电脑 右键属性 2 选择远程桌面 开启服务 3 打开cmd 输入ipconfig 查看IP 4 在宿主机上按住win r快捷键 输入matsc 打开远程桌面连接 输入虚拟机的ip 5 输入虚拟机的用户名和密码 6 连接
  • 虚拟机网络桥接,详细操作步骤,本地连接虚拟机

    虚拟机网络桥接 文章目录 虚拟机网络桥接 一 首先查看主机连接网络的网关 二 打开虚拟机的worksation服务 三 修改主机的VMnet8的IPV4属性 四 修改虚拟机的workstation的虚拟网络 五 修改VMnet8的IP 网关
  • ATK&ck靶场系列二

    信息收集 nmap sP 192 168 111 0 24 nmap sS T4 A v p 192 168 111 80 nmap sS T4 A v p 192 168 111 80 Starting Nmap 7 93 https n
  • 录音时分离左右声道的数据

    平台录音默认为8通道数据 保存到文件中取左右声道数据 当mic 1时 取左声道数据 当mic 2时 取右声道数据 private byte splitStereoPcm byte data int monoLength data lengt
  • Spring Bean基础

    Spring Bean基础 1 1 定义Spring Bean 1 1 1 什么是BeanDefinition 1 2 通过BeanDefinition构建Bean 1 3 注册Bean BeanDefinition 注册 1 4 实例化S
  • SQL中按分隔符拆分字符串

    一 Oracle数据库按分隔符拆分字符串 1 应用函数 REGEXP SUBSTR 2 语法 REGEXP SUBSTR String pattern position occurrence modifier 3 参数解释 srcstr 需
  • 【计算机操作系统】第三章 处理机调度与死锁

    在多道程序环境下 主存中有着多个进程 其数目往往多于处理机数目 这就要求系统能按某种算法 动态地把处理机分配给就绪队列中的一个进程 使之执行 分配处理机的任务是由处理机调度程序完成的 由于处理机是最重要的计算机资源 提高处理机的利 用率及改
  • spring boot引入mybatis plus,使用通用mapper、service

    一 mybatis plus官方文档 mybatis plus官方文档 二 spring boot 引入mybatis plus 在指定项目的pom xml文件下添加以下代码
  • JMeter 5.3/MeterSphere v1.1.2接口测试工具安装

    最近工作需要对web服务接口进行压力测试 由于完全没有测试相关经验 就只能走一步看一步了 由于主要是测试接口的并发性能 因而需要一个能并发产生请求的工具 最开始想到用postman 毕竟对这玩意儿比较了解 但是结果是 这个东西虽然能够在短时
  • 从零开始学Python(4) -----用Jupyter绘制各种图形

    在上一次学习中 我们介绍了如何加载CSV文件 并在Jupyter笔记本上绘制条形图 这次 我们将介绍如何从CSV文件中提取任意数据并绘制各种图形 让我们看看股票是涨还是跌 之前 我们已经体验了用Pandas库来读取读取CSV数据并绘制图表
  • 软件工程 第五章 详细设计

    1 详细设计的内容是什么 内容 1 确定每个模块的算法 2 确定每一个模块的数据组织 3 为每个模块设计一组测试用例 4 编写详细设计说明书 原则 1 模块的逻辑描述正确可靠 清晰易读 2 采用结构化程序设计方法 改善控制结构 降低程序复杂
  • vue router 动态路由清除

    重置matcher可达到路由还原效果 在用户退出时调用 resetRouter router 即可还原路由 import Vue from vue import Router from vue router import constantR
  • 为什么出现下一代云计算-分布式云 ?

    2020年10月19日 Garnter发布了2021年战略技术趋势 至此 分布式云连续两年 2020 2021 被列入Gartner战略技术趋势榜单了 分布式云 Distributed Cloud Gartner预测 到2025年 超过50
  • [cmake命令笔记]CMake添加C++预定义宏add_definitions

    比如要在代码中有进行宏判断的地方 ifdefine IMAGE PNG xxx endif ifdefine IMAGE JPG xxx endif ifdefine IMAGE TIFF xxx endif 你需要通过宏执行响应代码 那么
  • pytorch:线性回归(Regression)

    使用pytorch python实现回归 程序 import torch import torch nn functional as F from matplotlib import pyplot as plt 创建数据 x torch u
  • Jtest简介

    Jtest是一个集成的 易于使用和Java单元测试工具 它能够自动测试任何Java类 JSP或部件 而不需要你编写一个测试用例 测试驱动程序和测试桩 只需一键 Jtest自动测试代码的构造 白盒测试 代码功能 黑盒测试 并维护代码的完整性
  • caffe convert_image 初略解析

    需要的基础知识 OpenCV 建议去看官网的图文教程 LevelDB http dblab cs toronto edu courses 443 2014 tutorials leveldb html 这个是我学习的教程 今天在看caffe
  • 时序预测

    时序预测 MATLAB实现贝叶斯优化LSTM时间序列预测 BO LSTM 预测效果 基本介绍 相对于模型的参数而言 Parameter 我们知道机器学习其实就是机器通过某种算法学习数据的计算过程 通过学习得到的模型本质上是一些列数字 如树模
  • uni-app富文本渲染方案rich-text、uparse、v-html简单解析

    uniapp语法 rich text 1 rich text是uni app的内置组件 提供了高性能的富文本渲染模式 2 API参考https uniapp dcloud io component rich text 3 rich text
  • 基于PHP的旅游管理系统

    系列文章目录 基于SpringBoot的高校在线答疑管理系统 基于SpringBoot的外卖点餐管理系统 基于SpringBoot的实验室管理系统 目录 系列文章目录 前言 一 相关技术 二 系统设计 1 系统体系结构 2 数据库设计原则