旅游管理系统

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


相关推荐

  • Python递归实现全排列

    Python递归实现全排列排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;全排列:当n==m时,称为全排列;比如:集合{1,2,3}的全排列为:{123} {132}{213}{231}{321}{312}递归思想:取出数组中第一个元素放到最后,即a[1]与a[n]交换,然后递归求a[n-1]的全

  • VS Code插件

    VS Code插件

  • mac全选文字的快捷键_Mac文本快捷键你知道多少?

    mac全选文字的快捷键_Mac文本快捷键你知道多少?我们在MAC电脑上码字的时候,经常会遇到需要对某段文字进行修改或者操作的情况,相信很多人的做法是用鼠标去移动光标快速定位,如果字数篇幅比较小也是可以的,但是如果遇到大篇幅的文章,一点点的用鼠标去找会非常麻烦,今天我就教大家几个MAC文本快捷键,让你在最短的时间内把光标移动到你想要的位置,提高在电脑上码字的效率。image1、全文&段落定位目标位置比较远的时候,需要对光标远程定位,下面的组合…

  • Java模式(适配器模式)

    Java模式(适配器模式)

    2021年11月14日
  • 什么是泛型编程

    什么是泛型编程1.C++两种抽象方法(1)面向对象编程封装(Encapsulation)继承(Inheritance)多态(Polymorphism)(2)泛型编程概念(concepts)模型化(modeling)强化(refinement)2.泛型编程概念泛型编程(GenericProgramming)指在多种数据类型上皆可操作。和面向对象编程不同,它并不要求额外的间接…

  • mysql的慢查询日志怎么查看_mysql慢查询优化

    mysql的慢查询日志怎么查看_mysql慢查询优化MySQL数据库,慢查询日志

发表回复

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

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