旅游管理系统

旅游管理系统旅游管理系统介绍要求: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链接

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java心形代码初学者_java输出爱心代码

    java心形代码初学者_java输出爱心代码绘制心形曲线1.要求非常有名的笛卡尔曲线数学公式:(x2+y2−2ax)2=4a2(x2+y2)(x^{2}+y^{2}-2ax)^{2}=4a^{2}(x^{2}+y^{2})(x2+y2−2ax)2=4a2(x2+y2)即心形曲线,本例通过Applet绘制出笛卡尔曲线。2.实现过程笛卡尔曲线是一个圆在同样半径的圆周上滚动,在滚动的过程中一定会形成轨迹曲线。它的数学方程为x=a(2c…

    2022年10月16日
  • mybatis二级缓存实现_mybatis源码深度解析

    mybatis二级缓存实现_mybatis源码深度解析 二级缓存的作用域是全局,换句话说,二级缓存已经脱离SqlSession的控制了。在测试二级缓存之前,我先把结论说一下:二级缓存的作用域是全局的,二级缓存在SqlSession关闭或提交之后才会生效。在分析MyBatis的二级缓存之前,我们先简单看下MyBatis中一个关于二级缓存的类(其他相关的类和接口之前已经分析过):org.apache.ibatis.mapping.Ma…

  • centos7系统更新命令_centos 更新

    centos7系统更新命令_centos 更新1.查看网络IP ifconfig2.下载命令 wget+网址3.安装 yum-y install + 目标4.删除文件 sudo rm 文件所在目录/目标强制删除文件 rm -f删除目录 rm -rf5.复制一个文件到另一个文件夹sudo cp /文件夹/文件 /另一个文件夹6.对一些文件进行读写sudo vim 文件名7….

  • 服务器内网怎么更新微软补丁,架WSUS服务器 内网自动打补丁「建议收藏」

    三、客户端配置  运行“Gpedit.msc”打开组策略编辑器。在组策略编辑器中,依次单击“计算机配置→管理模板→Windows组件→WindowsUpdate”。在右侧双击“配置自动更新”,将自动更新策略设置为“启用”,并设置为“自动下载并计划安装”(图4)。图4双击“指定IntranetMicrosoft更新服务位置”,选择“已启用”项,在“为检测更新设置Intranet夹新服务”下方输入…

  • JS对象的遍历方法

    JS对象的遍历方法法一:使用for…in…循环varobj={‘0′:’a’,’1′:’b’,’2′:’c’};for(letiinobj){console.log(i,”:”,obj[i]);//{0:a,1:b,2:c}}法二:使用Object.keys遍历varobj={‘0′:’a’,’1′:’b’,’2′:’c’};Object.keys(obj).forEach(function(key){ console.log(key,obj[key]);//{0:a,1:

  • 信道和带宽_信道带宽怎么计算

    信道和带宽_信道带宽怎么计算信道和带宽在用cmw500测试不同band下的throughput时,发现module在某几个band注册不上小区。后来经过同事顺滑的演示,得知是因为不同band支持不同的带宽,而我一直设置cmw500的Cellbandwidth=20MHZ,对于那些最大只支持10MHZ的band自然注册不上。关于不同Band支持的带宽可以参考下表(3GPPTS36.101V17.2.0(2021-06))Table5.6.1-1:E-UTRAchannelbandwidth结尾处分享一

发表回复

您的电子邮箱地址不会被公开。

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