《数据库原理及应用》课程设计
题 目 民航销售管理子系统数据库设计
专 业 计算机科学与技术 班 级 计算机2111班 姓 名 成 绩 指导教师 刘春燕
2013 年7月1日至20xx年7月5日
课程设计任务书
设计题目:民航销售管理子系统数据库设计 设计目的:
1. 学会分析研究数据对象的特性;
2. 学会数据的组织方法;
3. 选择合适的数据的存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理;
4. 提高学生的运用能力、 提高数据库设计素质 ;
设计任务:(在规定的时间内完成下列任务)
1. 查某代售地某月售出的票数金额。
2. 查航空公司拥有多少航班
3. 查某天某航空还剩多少票或座位
4. 如何查某天某航空还剩甲等座位,乙等座位票价是多少
5. 查某航天公司拥有多少售票点。某月售出总金额为多少某航线售出金额为多少
具体要完成的任务是:
A. 编制完成上述问题的数据库设计并能得出正确的运行结果。
B. 采取统一格式:有问题描述、基本要求、测试数据及实现方法等组成写出规范的课程设计说明书;
时间安排
7月1日 布置课程设计任务;
7月2日 分配题目后,查阅资料、 准备程序;
7月3,4 日 上机调试程序、书写课程设计报告;
7月5日 下午提交课程设计报告及相关文档
具体要求
课程设计报告按统一通用格式书写,具体格式要求请在网络上查阅; 每位学生应独立完成各自的任务;
指 导 教 师 签 名:
13 年 6月29 日
教研室主任(或责任教师)签名: 13 年 6月29日
1实验背景
1.1需求分析
需求分析是管理系统设计的最基础的部分,民航销售管理子系统管理主要是处理售票,机票,票价的管理,航空公司提供航线和飞机资料对在本飞机起飞和降落的机票进行管理,而客户的得到的是查询航班航线和机票,以及机票订购功能。
随着飞机场规模的不断扩大,航班数量也相应的增加,有关航班的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致机场航班管理上的混乱,人力与物力过多浪费,航班管理费用的增加,从而使机场的负担过重,影响整个机场的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的民航销售管理系统,对航班进行集中统一的管理。
另一方面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。
提高民航工作效率,作到信息的规范管理,科学统计和快速查询,让明航更好的为社会服务。
1.2实验环境
SQL Server 2005
2民航销售管理子系统设计需求
1. 查某代售地某月售出的票数金额。
2. 查航空公司拥有多少航班
3. 查某天某航空还剩多少票或座位
4. 如何查某天某航空还剩甲等座位,乙等座位票价是多少
5. 查某航天公司拥有多少售票点。某月售出总金额为多少,某航线售出金额为多少
2.1事物需求
(1)在航班信息管理部分,要求:
a.可以查询航班信息。
b.可以对航班信息进行添加及删除的操作。
(2 )在机票信息管理部分,要求:
a.可以查看机票信息,要求:
b.可以对机票信息进行维护,包括添加及删除的操作。
(3)在售票信息管理部分,要求:。
a.可以查看售票信息。
b.可以对售票信息进行维护操作。
3 E-R图设计
明航销售管理子系统可以划分的实体有:航班信息实体、机票信息实体、售票点信息实体。用E-R图一一描述这些实体。
3.1航班信息E-R图,如图1
图1
3.2机票信息实体E-R图,如图二
图2
3.3售票点信息实体E-R图,如图三
图3
3.4总的信息实体图,如图四
图4
4数据字典
5关系图
图5—1数据库存表关系图
6源代码
6.1数据库建立
6.1.1创建数据库
create database hangkong
use hangkong
6.1.2航班表的建立
create table hangban(
[航班号] nvarchar(30) primary key not null,
[航班起点] nvarchar(30) NOT NULL,
[航班终点] nvarchar(30) NOT NULL,
[舱型] nvarchar(30) NOT NULL,
[人数] int NOT NULL,--该航班能装的人数的max
)
6.1.3创建机票表
create table jipiao(
[机票号] nvarchar(30) primary key not null, --primary key -- 设为自增长
[航班号] nvarchar(30) foreign key references hangban([航班号]),
[票型] char(2) not null,--check(甲,乙)--票型为甲,乙两种,甲靠窗贵些,乙不靠便宜
[票价]numeric(6,1) not null,
[日期] datetime not null--该日期为飞机的起飞时间
)
6.1.4创建售票表
create table shoupiao(
id int identity(1,1)primary key, --primary key?
[售票地点] nvarchar(30),
[售票日期] datetime not null,--票卖出去时候的日期
[机票号] nvarchar(30) foreign key references jipiao([机票号]) ,--外键约束--唯一 )
6.2数据的初始化
6.2.1 对航班表进行初始化
insert into hangban values('dy001','襄阳','法国','贵宾舱','8')
insert into hangban values('dy002','襄阳','美国','贵宾舱','8')
insert into hangban values('dy003','襄阳','美国','普通舱','8')
insert into hangban values('dy004','襄阳','日本','普通舱','8')
6.2.2对售票表进行初始化
--机票 机票的票数已决定 等待购买
--法贵
insert into jipiao values('r001','dy001','甲','1000.0','2013-1-1')
insert into jipiao values('r002','dy001','甲','1000.0','2013-1-1')
insert into jipiao values('r003','dy001','甲','1000.0','2013-1-1')
insert into jipiao values('r004','dy001','甲','1000.0','2013-1-1')
insert into jipiao values('r005','dy001','乙','800.0','2013-1-1')
insert into jipiao values('r006','dy001','乙','800.0','2013-1-1')
insert into jipiao values('r007','dy001','乙','800.0','2013-1-1')
insert into jipiao values('r008','dy001','乙','800.0','2013-1-1')
--美贵
insert into jipiao values('r009','dy002','甲','2000.0','2013-1-2')
insert into jipiao values('r010','dy002','甲','2000.0','2013-1-2')
insert into jipiao values('r011','dy002','甲','2000.0','2013-1-2')
insert into jipiao values('r012','dy002','甲','2000.0','2013-1-2')
insert into jipiao values('r013','dy002','乙','1800.0','2013-1-2')
insert into jipiao values('r014','dy002','乙','1800.0','2013-1-2')
insert into jipiao values('r015','dy002','乙','1800.0','2013-1-2')
insert into jipiao values('r016','dy002','乙','1800.0','2013-1-2')
--美普
insert into jipiao values('r017','dy003','甲','1500.0','2013-1-3')
insert into jipiao values('r018','dy003','甲','1500.0','2013-1-3')
insert into jipiao values('r019','dy003','甲','1500.0','2013-1-3')
insert into jipiao values('r020','dy003','甲','1500.0','2013-1-3')
insert into jipiao values('r021','dy003','乙','1300.0','2013-1-3')
insert into jipiao values('r022','dy003','乙','1300.0','2013-1-3')
insert into jipiao values('r023','dy003','乙','1300.0','2013-1-3')
insert into jipiao values('r024','dy003','乙','1300.0','2013-1-3')
--日普
insert into jipiao values('r025','dy004','甲','800.0','2013-1-3')
insert into jipiao values('r026','dy004','甲','800.0','2013-1-3')
insert into jipiao values('r027','dy004','甲','800.0','2013-1-3')
insert into jipiao values('r028','dy004','甲','800.0','2013-1-3')
insert into jipiao values('r029','dy004','乙','700.0','2013-1-3')
insert into jipiao values('r030','dy004','乙','700.0','2013-1-3')
insert into jipiao values('r031','dy004','乙','700.0','2013-1-3')
insert into jipiao values('r032','dy004','乙','700.0','2013-1-3')
6.2.3 对售票表进行初始化
-x 截止到分机起飞各站所卖出去的票
--北站卖出去的票
insert into shoupiao values('襄阳北站','2012-12-1','r001')
insert into shoupiao values('襄阳北站','2012-12-1','r002')
insert into shoupiao values('襄阳北站','2012-12-2','r003')
insert into shoupiao values('襄阳北站','2012-12-2','r004')
--南站卖出去的票
insert into shoupiao values('襄阳南站','2012-10-1','r005')
insert into shoupiao values('襄阳南站','2012-10-1','r006')
insert into shoupiao values('襄阳南站','2012-10-2','r009')
insert into shoupiao values('襄阳南站','2012-10-2','r010')
--西站卖出去的票
insert into shoupiao values('襄阳西站','2012-10-1','r011')
insert into shoupiao values('襄阳西站','2012-10-1','r012')
insert into shoupiao values('襄阳西站','2012-10-2','r017')
insert into shoupiao values('襄阳西站','2012-10-2','r018')
--东站卖出去的票
insert into shoupiao values('襄阳东站','2012-10-1','r007')
insert into shoupiao values('襄阳东站','2012-10-1','r008')
insert into shoupiao values('襄阳东站','2012-10-2','r025')
insert into shoupiao values('襄阳东站','2012-10-2','r026')
7结果数据处理
7.1对设计任务书的解决
7.1.1查某代售地某月售出的票数金额
SQL语言: select sum(dbo.tpiao(机票号)) 收入 from shoupiao where 售票地点='襄阳北站' and month(售
票日期)='12' and year(售票时间)='2012'
sum(dbo.tpiao(机票号)*票数)
--(票价(机票号))*票数)
--创建一个返回机票价的函数
create function tpiao(@id nvarchar(30)) returns numeric(6,1)
as
begin
declare @piao numeric(6,1)
select @piao=票价
from jipiao
where 机票号=@id
return @piao
end
drop function tpiao
说明:创建了一个函数通过机票号能返回该机票价格,用到了系统函数“sum”,“month”,“year”
测试:取“襄阳北站”在20xx年12月份售出的票数金额
图7-1-1某地某月售票金额
7.1.2查航空公司拥有多少航班
SQL语言:
select count(航班号) 航班数量 from hangban
说明:计算‘航班号’的个数即可,航班号为主键不存在重复
图7-1-2该航空公司航班数量
7.1.3查某天某航空还剩多少票或座位
SQL语言:
select (select 人数 from hangban where 航班号='dy001')-count(*) 剩余票数
from shoupiao where 机票号 in (select 机票号 from jipiao
where 航班号='dy001') and datediff(day,售票日期,'2013-10-3')>=0
说明:1.查寻出某航班的座位数
2.查寻出截止到某月已经售出的该航班的票数
3.将两者相减即可
测试:'2013-10-3,航班‘dy001’剩余座位数
图7-1-3 两者相减得到剩余的票
7.1.3.1如何查某天某航班还剩甲等座位
SQL语言:
select (select 人数 from hangban where 航班号='dy001')- count(*) 剩余票数
from shoupiao
where dbo.tpxin(机票号)='甲' and
机票号 in (select 机票号 from jipiao where 航班号='dy001')
and datediff(day,售票日期,'2012-12-1')>=0
说明:此问题类似与4.1.3 只要知道某座位号对应的票型即可,故写了一个同机票号返回对
应票型的函数,如下:
create function tpxin(@phao nvarchar(30)) returns char(2)
as
begin
declare @pxin char(2)
select @pxin=票型
from jipiao
where 机票号=@phao
return @pxin
end
drop function tpxin
测试:2012-12-1,航班号='dy001' 所剩余甲票数量
图7-1-3-1某天某航班剩余甲等座位
7.1.3.2某天某航班乙等座位票价是多少 SQL语言:
select distinct dbo.tpiao(机票号) 票价格
from shoupiao where dbo.tpxin(机票号)='乙' and
机票号 in (select 机票号 from jipiao where 航班号='dy001') 说明:同上例,用到了通过机票号返回对应的票型的函数 测试:2012-12-1,航班号='dy001' 乙票价格
图7-1-3-2 某天某航班乙等座位票价
7.1.4.1查航天公司拥有多少售票点
SQL语言:
select count( distinct 售票地点) 售票点数 from shoupiao 说明:计算出售票点的个数即可
图7-1-4-1航空公司拥有的售票点数
7.1.4.2某月售出总金额为多少
SQL语言:
select * from shoupiao
select sum(dbo.tpiao(机票号)) 这个月的售出额 from shoupiao
where year(售票日期)='2012' and month(售票日期)='12' 说明:用到了通过机票号返回机票价格的函数 测试:2012-12 售出金额
图7-1-4-2某月的售出总额
7.1.4.3某月某航线售出金额为多少
SQL语言:
select sum(票价) 该航线收入
from hangban,jipiao,shoupiao
where shoupiao.机票号=jipiao.机票号 and jipiao.航班号=hangban.航班号
and year(售票日期)='2012' and month(售票日期)='10' and 航班终点='美国'
说明:某航线,由于是单选故只要给出航班终点即可,由于查询的数据涉及三张表 故采用链接查询
1. 连接三张表
2. 选择终点,年月份
3. 求和
测试:2012-12,由‘襄阳’到‘美国航线’售出金额。
图7-1-4-3 某月某航线售出总额