旅游管理系统

旅游管理系统旅游管理系统介绍要求:ER图代码介绍高级数据库布置的实验作业要求:题目:设计与实现一个旅游预订系统,该系统涉及的基本信息有航班,出租车,宾馆和客户等数据信息。实体和其特征属性举例如下:FLIGHTS(StringflightNum,intprice,intnumSeats,intnumAvail,StringFromCity,StringArivCity);H…

大家好,又见面了,我是你们的朋友全栈君。

介绍

高级数据库布置的实验作业

要求:

题目: 设计与实现一个旅游预订系统,该系统涉及的基本信息有航班,出租车,宾馆和客户等数据信息。实体和其特征属性举例如下:
FLIGHTS (String flightNum, int price, int numSeats, int numAvail, String FromCity, String ArivCity);
HOTELS(String name,String location, int price, int numRooms, int numAvail);
CARS(String type,String location, int price, int numCars, int numAvail);
CUSTOMERS(String custName);
RESERVATIONS(String custName, int resvType, String resvKey)
根据自己的经验给出该旅游系统数据库设计E/R图(可以增加实体和属性),然后基于此数据库完成如下功能:
1. 航班,出租车,宾馆房间和客户基础数据的入库,更新。
2. 预定航班,出租车,宾馆房间。
3. 查询航班,出租车,宾馆房间,客户和预订信息。
4. 查询某个客户的旅行线路。
5. 其他任意你愿意加上的功能。
要求:
1) E/R图中包含弱实体,子集联系等,关系中元组数 〉=20 。
2) 提交文档:E/R图及解释,E/R图到关系模式的转换及说明,分析给出关系的模式属于哪个NF,然后讨论其模式优化。完成的功能及说明。系统实现的环境。各关系元组数据文件及说明。
3) 提交系统:源程序及可执行程序,测试用例。

ER图

在这里插入图片描述

ER图解释

  1. 系统涉及的实体集
     城市:具有属性城市名。
     顾客:具有属性客户名和密码。
     管理员:是顾客的子类实体,具有顾客的所有的属性。
     出租车:具有属性车牌号、价格,依赖于城市而存在,为弱实体。
     宾馆:具有属性宾馆名、价格、房间数,依赖于城市而存在,为弱实体。
     航班:具有属性航班号、价格、座位数,依赖于城市而存在,为弱实体。
  2. 涉及的联系
     一个城市可以有多个宾馆,所以城市和宾馆的联系为1:N。
     一个城市可以有多辆出租车,所以城市和出租车的联系为1:N。
     一个城市可以作为多个航班的出发地和目的地,所以城市和航班的出发和达到联系为1:N。
     一个顾客可以预约多个宾馆、航班和出租车,一个宾馆、航班和出租车也可以被多个客户预约,所以顾客和宾馆、航班和出租车的练习为M:N。

ER图转换为关系模式

  1. 城市实体可以转换为关系city,cityName表示的城市名,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键。建表语句如下:
    DROP TABLE IF EXISTS city;
    CREATE TABLE city (
    cityName varchar(20) NOT NULL,
    PRIMARY KEY (cityName)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  2. 顾客实体可以转换为关系customer,custName表示顾客名,password表示密码,type用来区分是否是管理员,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键。建表语句如下:
    DROP TABLE IF EXISTS customer;
    CREATE TABLE customer (
    password varchar(50) NOT NULL,
    custName varchar(50) NOT NULL,
    type int(10) DEFAULT 1,
    PRIMARY KEY (custName)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  3. 出租车实体可以转换为关系car,carNum表示车牌号,price表示价格,城市和出租车的联系为1:N,可以通过外键来表示联系,即cityName,代表所属的城市,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键,通过外键关联到城市的信息,无冗余信息,即满足第三范式的要求。建表语句如下:
    DROP TABLE IF EXISTS car;
    CREATE TABLE car (
    carNum varchar(50) NOT NULL,
    price int(10) DEFAULT 0,
    cityName varchar(50) NOT NULL,
    PRIMARY KEY (carNum),
    CONSTRAINT carcityName FOREIGN KEY (cityName) REFERENCES city (cityName) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  4. 宾馆实体可以转换为关系hotel,hotelName为宾馆名称,price表示价格,numRooms表示房间数量。城市和宾馆的联系为1:N,可以通过外键来表示联系,即cityName,代表所属的城市,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键,通过外键关联到城市的信息,无冗余信息,即满足第三范式的要求。建表语句如下:
    DROP TABLE IF EXISTS hotel;
    CREATE TABLE hotel (
    hotelName varchar(50) NOT NULL,
    price int(10) DEFAULT 0,
    numRooms int(10) DEFAULT 0,
    cityName varchar(50) NOT NULL,
    PRIMARY KEY (hotelName),
    CONSTRAINT hotelcityName FOREIGN KEY (cityName) REFERENCES city (cityName) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  5. 航班实体可以转换为关系flight,flightNum表示航班号,price表示价格,numSeats表示座位数,城市和航班的出发地联系为1:N,可以通过外键来表示联系,即fromCity,代表出发的城市,城市和航班的目的地联系为1:N,可以通过外键来表示联系,即arivCity,代表到达的城市,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键,通过外键关联到城市的信息,无冗余信息,即满足第三范式的要求。建表语句如下:
    DROP TABLE IF EXISTS flight;
    CREATE TABLE flight (
    flightNum varchar(20) DEFAULT NULL,
    price int(10) DEFAULT 0,
    numSeats int(10) DEFAULT 0,
    fromCity varchar(50) NOT NULL,
    arivCity varchar(50) NOT NULL,
    PRIMARY KEY (flightNum),
    CONSTRAINT fromCity FOREIGN KEY (fromCity) REFERENCES city (cityName) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT arivCity FOREIGN KEY (arivCity) REFERENCES city (cityName) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  6. 顾客和宾馆、航班以及出租车之间的预约联系可以转化为关系reservation,resvKey表示预约的车牌号或航班号或宾馆名,custName是外键,表示顾客,resDate代表预约的日期,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键,通过外键关联到用户的信息,无冗余信息,即满足第三范式的要求。建表语句如下:
    DROP TABLE IF EXISTS reservation;
    CREATE TABLE reservation (
    resvKey varchar(50) NOT NULL,
    custName varchar(50) NOT NULL,
    type int(10) NOT NULL,
    resDate DATE,
    KEY reservationkey (resvKey,custName,type,resDate),
    CONSTRAINT reservationcust FOREIGN KEY (custName) REFERENCES customer (custName) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

测试用例与截图

  1. 注册和登录
    操作:输入用户名和密码,点击注册即可注册,点击登录即可登录。
    在这里插入图片描述
  2. 首页:
    操作:登录成功后,即进入首页个人中心,可以看到首页为空,因为我们还没有预订过航班、宾馆和出租车。先去预约几项,以查看效果。
    在这里插入图片描述
  3. 预约航班
    操作:点击航班预约,即可进入预约航班界面。输入出发地和目的地和日期后,点击查询即可预约航班,如图,预约后,可以看到余票-1,为了后面看到效果,我们接着预约上海到武汉的票,再预约武汉到成都的票,截图类似,如下图:
    在这里插入图片描述
    在这里插入图片描述
  4. 预约宾馆
    操作:点击旅馆预约,即可进入旅馆预约界面,输入城市名称和日期查询,点击预约,预约后可以看到剩余房间数量-1。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 预约出租车
    操作:点击出租车预约,即可进入出租车预约界面,输入城市名称和日期查询,点击预约,预约成功后可以看到当天出租车少了一辆。
    在这里插入图片描述
    在这里插入图片描述
  6. 个人中心
    操作:点击个人中心,可以看到自己的所有预约项目,并且可以取消自己所预约的。在我的行程中可以看到自己的行程路线图。点击取消武汉到成都的航班后,可以看到如下效果。
    在这里插入图片描述
    在这里插入图片描述
  7. 航班管理
    操作:使用管理员账号登录,系统初始化时内置了一个admin用户,密码admin,登录后,可以看到如下不同,点击航班管理,可以增加或删除航班。
    在这里插入图片描述
    在这里插入图片描述
  8. 宾馆管理
    操作:使用管理员账号登录,系统初始化时内置了一个admin用户,密码admin,点击宾馆管理,可以增加或删除宾馆。
    在这里插入图片描述
  9. 出租车管理
    操作:使用管理员账号登录,系统初始化时内置了一个admin用户,密码admin,点击出租车管理,可以增加或删除出租车。
    在这里插入图片描述

代码

参见github链接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130303.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大批量数据excel下载—本文作者只试了51万数据的下载,用时7秒

    一.背景:现在的项目里,有诸多下载功能,随着数据越来越多,下载的时间也越来越长,很影响用户体验,为了解决这一问题,我不得不挺身而出,斩破难关。项目中原本用的是poi-HSSFWorkbook,但是如果是50万数据量下载,回经历一个漫长的等待过程,然后内存溢出。jxl也不用想了,估计也差不多。二.两种方法:后来从网上搜索发现针对大数据量的导出有两条路可以走:第一:用poi-SXSSFWo

    2022年4月4日
    44
  • wp-login.php 404页面,wordpress404页面制作完整的正确操作流程

    wp-login.php 404页面,wordpress404页面制作完整的正确操作流程近期,看到很多SEO站长在我网站留言:为什么wordpress无法跳转正确的404页面或者404页面未找到?小L一查资料,看到搜索引擎出现的结果,有些很难让人操作和理解。于是,L氪迹SEO技术教程学习网在这里以图文形式来分享一下wordpress404页面制作完整的正确操作流程。【1、404页面模板下载】操作概述:小L在这里教大家较简单的方法,让你快速上线设置好404页面。打开你喜欢的网站的404…

    2022年7月27日
    16
  • plantuml 依赖_遇见PlantUML

    plantuml 依赖_遇见PlantUML前言来到公司实习也快一个月了,最大的体会就是,虽然大部分时间做的是简单的增删该查,但不同于在学校时写的Demo,你要充分考虑程序的鲁棒性(健壮性)、可扩展性(可维护性)、时间/空间复杂度等。因为是要实际上线的项目,你需要面面俱到,对团队负责。于是决定在完成组里任务之余,花时间提高自己的的编码规范、多思考程序设计的可扩展性、性能是否可观等。我觉得开发工程师和码农之间的区别是,不仅是复制粘贴和以实现功…

    2025年6月23日
    4
  • 基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇

    基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇说明首先祝贺自己顺利的完成了毕业答辩工作,想起整个过程还是挺让自己感动的。最后还被评为优秀毕业设计,虽然并没有什么luan用,但是,马上毕业了,还是挺让人怀念的。整个资料从第一篇博客说起就说会全部开源的,期间承蒙各位朋友的支持,给与资助,在此感谢了。虽然资料中私人信息删除了一些,但是不免有疏漏,所以有关个人信息还挺各位删除掉,小

    2022年4月8日
    45
  • redis集群客户端JedisCluster优化 – 管道(pipeline)模式支持

    redis集群客户端JedisCluster优化 – 管道(pipeline)模式支持redis集群客户端JedisCluster优化-管道(pipeline)模式支持Redis在3.0版正式引入了集群这个特性,扩展变得非常简单。然而当你开心的升级到3.0后,却发现有些很好用的功能现在工作不了了,比如我们今天要聊的pipeline功能。我们知道,普通的情况下,redisclient与server之间采用的是请求应答的模式,即:Client:command1

    2022年8月31日
    3
  • linux启动ftp命令_linux安装ftp命令

    linux启动ftp命令_linux安装ftp命令ftp服务器在网上较为常见,Linuxftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件下面由学习啦小编为大家整理了linux下开启ftp命令的相关知识,希望对大家有所帮助!linux下启动FTP命令的方式一般linux都有vsftpd吧,启动命令是servicevsftpdstart,你要限制匿名登录的话,修改它的配置文件/etc/vsftpd/vsftpd.conf,把an…

    2022年9月21日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号