# airsys **Repository Path**: zhienchen/airsys ## Basic Information - **Project Name**: airsys - **Description**: 航空订票系统 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-01-26 - **Last Updated**: 2025-11-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 一、需求分析(简单介绍项目的背景、作用) 目的:复习与巩固数据库基础与设计知识,学习PHP的基础知识以及PHP的Laravel框架技术,进一步加深对Web编程技术的掌握和理解,利用本次课程设计的机会,将学习到的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力。提高适应实际,实践编程的能力。 本项目参考厦门航空网(https://www.xiamenair.com/zh-cn/),使用Laravel+MySQL模仿实现其一小部分功能。航班数据来着 去哪儿网(https://flight.qunar.com/),由上学期的`SpringBoot`项目完成数据爬取。 ### 二、主要功能(描述已完成的功能) 2.1管理员 2.1.1 登录 2.1.2 注销 2.1.3 管理各航班信息 ​ 对完成日常订票所需的各类信息(包括国家及区域、城市、机场、航站楼、机型、航班、执飞航班、舱位等信息)的管理。 2.2 普通用户 2.2.1 登录 2.2.2 注销 2.2.3 按日期、城市或航班号查询 2.2.4 订票 ​ 添加乘机人 ​ 生成机票明细、订单 ​ 模拟支付 ![img](readme/1.png) 图 2-1 功能概述图 ### 三、 数据库设计(所涉及的表、ER图) #### 3.1给出逻辑设计的完整的E-R图 ![img](readme/2.png) 图3-1 数据库设计-ER图 #### 3.2 各基表描述 3.2.1 国家或地区(countries) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | id | int(11) | PRI | NO | | 国家或地区ID | | name | varchar(200) | | YES | | 国家或地区名称 | 3.2.2 城市(cities) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | country_id | int(11) | MUL | YES | | 国家或地区ID | | id | varchar(20) | PRI | NO | | 城市ID | | name | varchar(200) | | YES | | 城市名称 | 3.2.3 机场(airports) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | city_id | varchar(20) | MUL | YES | | 城市ID | | d | char(3) | PRI | NO | | IATA机场三字码 | | name | varchar(200) | | YES | | 机场名称 | 3.2.4 航站楼(terminals) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | airport_id | char(3) | MUL | YES | | 机场ID | | id | int(11) | PRI | NO | | 航站楼ID | | name | varchar(200) | | YES | | 航站楼名称 | 3.2.5 机型(aircraft_models) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | id | int(11) | PRI | NO | | 机型ID | | name | varchar(100) | | YES | | 机型名称 | 3.2.6 舱位(cabins) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | cabin_class | varchar(50) | | YES | | 舱位等级 | | id | int(11) | PRI | NO | | 舱位ID | 3.2.7 航班(flights) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | ----------------- | -------------- | ------------- | ------------------ | ---------------- | ----------------------- | | end_terminal_id | int(11) | MUL | YES | | 终点站ID | | flight_no | varchar(6) | | YES | | 航班号 公司代码+3/4位数 | | id | int(11) | PRI | NO | | 航班ID | | model_id | int(11) | MUL | YES | | 机型ID | | pricing | double | | YES | | 机票定价 | | start_terminal_id | int(11) | MUL | YES | | 起始站ID | 3.2.8 执飞航班(on_flights) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | ---------------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | actual_arrival_time | datetime | | YES | | 实际到达时间 | | actual_takeoff_time | datetime | | YES | | 实际起飞时间 | | boarding_gate | varchar(10) | | YES | | 登机口 | | current_status | varchar(10) | | YES | | 当前状态 | | estimated_arrival_time | datetime | | YES | | 预计到达时间 | | estimated_takeoff_time | datetime | | YES | | 预计起飞时间 | | execution_price | double | | YES | | 执行价格 | | flight_id | int(11) | MUL | YES | | 航班ID | | id | int(11) | PRI | NO | | 执飞航班ID | 3.2.9 基础用户(users) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | id | varchar(20) | PRI | NO | | 账号 | | name | varchar(100) | | YES | | 用户名 | | password | varchar(30) | | YES | | 密码 | | role | int(11) | | YES | | 权限 | 3.2.10 客户(customers) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | birth_date | date | | YES | | 出生日期 | | email | varchar(50) | | YES | | 邮箱 | | id | varchar(20) | PRI | NO | | 客户ID | | integral | int(11) | | YES | | 积分 | | phone | char(11) | | YES | | 手机号码 | | user_id | varchar(20) | MUL | YES | | 基础用户ID | 3.2.11 乘机人(passengers) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | creditStatus | varchar(20) | | YES | | 信用状态 | | id | char(18) | PRI | NO | | 身份证ID | | name | varchar(100) | | YES | | 姓名 | | phone | varchar(11) | | YES | | 联系电话 | | sex | int(11) | | YES | | 性别 | 3.2.12 机票类型(ticket_types) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | ----------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | basic_price | double | | YES | | 基本销售价格 | | cabin_id | int(11) | MUL | YES | | 舱位ID | | discount | double | | YES | | 折扣 | | id | int(11) | PRI | NO | | 机票种类 | | luggage_limit | double | | YES | | 行李件数 | | on_flight_id | int(11) | MUL | YES | | 执飞航班ID | | remaining_tickets | int(11) | | YES | | 余量 | | rules | varchar(500) | | YES | | 改退签规则 | | ticket_count | int(11) | | YES | | 总数 | 3.2.13 订单(orders) | 列名 | 类型 | KEY | 可否为空 | 默认值 | 注释 | | -------------- | -------------- | ------------- | ------------------ | ---------------- | -------------- | | costs | double | | YES | | 总费用 | | customer_id | varchar(20) | MUL | YES | | 客户ID | | id | int(11) | PRI | NO | | 订单ID | | payment_status | varchar(10) | | YES | | 支付状态 | | useIntegral | int(11) | | YES | | 抵用积分 | ### 四、开发过程介绍 #### 4.1 创建数据库 ​ 创建MySQL相对应的数据库与表结构,适当添加一些记录用于测试; #### 4.2 创建Model ​ 通过Laravel 框架的Model生成工具生成相应的实体类,例如使用 ​ `php artisan make:model Http/Models/User` ​ 便可生成与数据库users表对应的User类; #### 4.3 创建控制器 ​ 因本项目为前后端分离项目,所以后台接口使用 api 资源路由即可,通 过Laravel框架的Controller框架生成工具生成相应的控制器,例如使用 ​ `php artisan make:controllerUserController --api` ​ 便可生成对User类进行增删改查的控制器,当然控制器中的具体方法还 需要自己慢慢去实现。 #### 4.4 配置路由 ​ 为我们的控制器添加路由,如 ​ `Route::apiResource('User', 'UserController');` #### 4.5 导入前端代码 ​ 导入前端项目所需的第三方`js`、`css`库,构建自定义雪碧图及其`css`样式。 ​ 前端项目分两大部分,一部分是基于`layuimini`单页版的后台管理模块, 另一部分是普通用户用于查询航班、订票等操作的页面。 #### 4.6 前后端联调 ​ 编写系列ajax请求,调整前端页面样式,添加正则表达式验证等。 #### 4.7 部署 ​ 在一台CentOS 虚拟机中搭建LNMP环境,导入数据库,上传项目文件,修改`nginx` 配置,重启`ngnix`。 ### 五、 系统开发环境与技术 #### 5.1 系统安装环境(LNMP) | 环境 | 版本 | | ------------------ | ---------------------------- | | 系统 | CentOS-7-x86_64-Minimal-2009 | | Nginx | nginx/1.16.1 | | MySQL | 8.0.21 | | PHP | 7.3.26 | | Laravel(PHP框架) | 7.0 | #### 5.2 用到的其它框架、插件、技术的介绍 5.2.1 `Laravel` ​ `Laravel`是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的 Web App,而且每行代码都可以简洁、富于表达力。 特点: + 强大的rest router,用简单的回调函数就可以调用,快速绑定controller和router; + artisan:命令行工具,很多手动的工作都自动化; + 可继承的模板,简化view的开发和管理; + blade模板:渲染速度更快; + ORM操作数据库; + migration:管理数据库和版本控制; 5.2.2 `gregwar/captcha` 图形验证码工具, Composer下载排行中长期长居第一名榜位。 5.2.3 `Layui` `Layui `是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。此外` layui` 的「模块化加载」十分适用于开发环境,它方便团队开发和代码调试。 5.2.3 `layuimini` 基于`Layui`编写的一套最简洁、易用的后台框架模板。 本项目使用的是`layuimini`单页版,单页版通过前端路由根据浏览器的hash动态加载子页面渲染在 index.html页面上。