大家好,又见面了,我是你们的朋友全栈君。
介绍
高级数据库布置的实验作业
要求:
题目: 设计与实现一个旅游预订系统,该系统涉及的基本信息有航班,出租车,宾馆和客户等数据信息。实体和其特征属性举例如下:
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:N。
一个城市可以有多辆出租车,所以城市和出租车的联系为1:N。
一个城市可以作为多个航班的出发地和目的地,所以城市和航班的出发和达到联系为1:N。
一个顾客可以预约多个宾馆、航班和出租车,一个宾馆、航班和出租车也可以被多个客户预约,所以顾客和宾馆、航班和出租车的练习为M:N。
ER图转换为关系模式
- 城市实体可以转换为关系city,cityName表示的城市名,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键。建表语句如下:
DROP TABLE IF EXISTScity
;
CREATE TABLEcity
(
cityName
varchar(20) NOT NULL,
PRIMARY KEY (cityName
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; - 顾客实体可以转换为关系customer,custName表示顾客名,password表示密码,type用来区分是否是管理员,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键。建表语句如下:
DROP TABLE IF EXISTScustomer
;
CREATE TABLEcustomer
(
password
varchar(50) NOT NULL,
custName
varchar(50) NOT NULL,
type
int(10) DEFAULT 1,
PRIMARY KEY (custName
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; - 出租车实体可以转换为关系car,carNum表示车牌号,price表示价格,城市和出租车的联系为1:N,可以通过外键来表示联系,即cityName,代表所属的城市,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键,通过外键关联到城市的信息,无冗余信息,即满足第三范式的要求。建表语句如下:
DROP TABLE IF EXISTScar
;
CREATE TABLEcar
(
carNum
varchar(50) NOT NULL,
price
int(10) DEFAULT 0,
cityName
varchar(50) NOT NULL,
PRIMARY KEY (carNum
),
CONSTRAINTcarcityName
FOREIGN KEY (cityName
) REFERENCEScity
(cityName
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8; - 宾馆实体可以转换为关系hotel,hotelName为宾馆名称,price表示价格,numRooms表示房间数量。城市和宾馆的联系为1:N,可以通过外键来表示联系,即cityName,代表所属的城市,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键,通过外键关联到城市的信息,无冗余信息,即满足第三范式的要求。建表语句如下:
DROP TABLE IF EXISTShotel
;
CREATE TABLEhotel
(
hotelName
varchar(50) NOT NULL,
price
int(10) DEFAULT 0,
numRooms
int(10) DEFAULT 0,
cityName
varchar(50) NOT NULL,
PRIMARY KEY (hotelName
),
CONSTRAINThotelcityName
FOREIGN KEY (cityName
) REFERENCEScity
(cityName
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8; - 航班实体可以转换为关系flight,flightNum表示航班号,price表示价格,numSeats表示座位数,城市和航班的出发地联系为1:N,可以通过外键来表示联系,即fromCity,代表出发的城市,城市和航班的目的地联系为1:N,可以通过外键来表示联系,即arivCity,代表到达的城市,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键,通过外键关联到城市的信息,无冗余信息,即满足第三范式的要求。建表语句如下:
DROP TABLE IF EXISTSflight
;
CREATE TABLEflight
(
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
),
CONSTRAINTfromCity
FOREIGN KEY (fromCity
) REFERENCEScity
(cityName
) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINTarivCity
FOREIGN KEY (arivCity
) REFERENCEScity
(cityName
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8; - 顾客和宾馆、航班以及出租车之间的预约联系可以转化为关系reservation,resvKey表示预约的车牌号或航班号或宾馆名,custName是外键,表示顾客,resDate代表预约的日期,满足了三范式中的第一个范式即属性不可分割,满足了三范式中的第二范式,即有主键,通过外键关联到用户的信息,无冗余信息,即满足第三范式的要求。建表语句如下:
DROP TABLE IF EXISTSreservation
;
CREATE TABLEreservation
(
resvKey
varchar(50) NOT NULL,
custName
varchar(50) NOT NULL,
type
int(10) NOT NULL,
resDate
DATE,
KEYreservationkey
(resvKey
,custName
,type
,resDate
),
CONSTRAINTreservationcust
FOREIGN KEY (custName
) REFERENCEScustomer
(custName
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
测试用例与截图
- 注册和登录
操作:输入用户名和密码,点击注册即可注册,点击登录即可登录。
- 首页:
操作:登录成功后,即进入首页个人中心,可以看到首页为空,因为我们还没有预订过航班、宾馆和出租车。先去预约几项,以查看效果。
- 预约航班
操作:点击航班预约,即可进入预约航班界面。输入出发地和目的地和日期后,点击查询即可预约航班,如图,预约后,可以看到余票-1,为了后面看到效果,我们接着预约上海到武汉的票,再预约武汉到成都的票,截图类似,如下图:
- 预约宾馆
操作:点击旅馆预约,即可进入旅馆预约界面,输入城市名称和日期查询,点击预约,预约后可以看到剩余房间数量-1。
- 预约出租车
操作:点击出租车预约,即可进入出租车预约界面,输入城市名称和日期查询,点击预约,预约成功后可以看到当天出租车少了一辆。
- 个人中心
操作:点击个人中心,可以看到自己的所有预约项目,并且可以取消自己所预约的。在我的行程中可以看到自己的行程路线图。点击取消武汉到成都的航班后,可以看到如下效果。
- 航班管理
操作:使用管理员账号登录,系统初始化时内置了一个admin用户,密码admin,登录后,可以看到如下不同,点击航班管理,可以增加或删除航班。
- 宾馆管理
操作:使用管理员账号登录,系统初始化时内置了一个admin用户,密码admin,点击宾馆管理,可以增加或删除宾馆。
- 出租车管理
操作:使用管理员账号登录,系统初始化时内置了一个admin用户,密码admin,点击出租车管理,可以增加或删除出租车。
代码
参见github链接
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130303.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...