旅游管理系统剖析-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII旅游管理系统目录一、系统的需求分析 (3)1.1、背景材料 (3)1.2、需求分析 (3)二、系统的概要设计 (4)2.1、系统的功能设计 (4)2.2、系统的数据字典 (4)2.3、系统的E-R图 (7)2.3.1实体-属性图 (7)2.3.2实体-联系图 (9)三、系统的详细设计 (11)3.1系统的数据库设计 (11)3.1.1数据库的逻辑设计 (11)3.1.2数据库的物理设计 (13)四、旅游管理系统实施 (23)4.1系统的功能模块设计 (23)4.2个人系统模块的划分及实现 (25)4.2.1个人系统模块划分 (25)4.2.2旅游团管理模块的设计及实现 (25)4.2.3模块的测试运行 (37)五、评价与总结 (43)5.1旅游管理系统优点 (43)5.2旅游管理系统缺点 (43)5.3总结 (44)一、系统的需求分析1.1、背景材料某旅行社要开发一个小型旅游管理子系统,主要涉及的基本实体及其基本信息如下:旅游线路:线路编号、起点、终点、旅游天数、主要景点。
旅游班次:班次编号、出发日期、回程日期、旅游标准、报价、折扣率。
导游:导游编号、身份证号、姓名、性别、出生日期、住址、联系电话、语种、等级。
宾馆:宾馆编号、宾馆名称、所在城市、星级、标准房价、联系人、职务、联系地址、联系电话、传真。
游客:游客编号、身份证号、姓名、性别、出生日期、住址、联系电话,旅游线路、出发日期、回程日期。
保险:保险单号、人均保险费、保险期限。
1.2、需求分析一条旅游线路可以开设多条旅游班次,但一个旅游班次只在固定的某一条旅游线路上;每条旅游班次可以有多个旅游团,但某个旅游团只参加某个固定的旅游班次;每个旅游班次可以有多名导游陪同,一名导游可以在不同的时间陪同不同旅游班次的旅游团;一家宾馆可以接待多个旅游班次,一个旅游班次在旅游期间可以再多加宾馆食宿;该旅行社接受游客的个人报名,但将若干相同出发日期、回程日期、旅游线路的游客组织成旅游团的方式开展旅游活动,每个旅游团的人数下限为20人,上限为50人,每个旅游团包括团号、团名、实际人数、联系人、住址、联系电话等信息;游客以旅游团为单位参见保险,一张保险单只对一个旅游团,一个旅游团在旅游期间只能参见一次保险。
二、系统的概要设计2.1、系统的功能设计⑴游客报名管理子系统。
至少包括:游客报名数据的录入,游客报名数据的修改、游客报名数据的注销、游客报名情况查询(尽可能多的查询方式)。
⑵旅游团组团管理子系统。
至少包括:旅游团的组建工作,当出现相同出发日期、回程日期、旅游线路的游客人数达到组团要求时组建一个旅游团,然后通过存储过程完成旅游班次、导游、办理保险、住宿宾馆等旅游的安排工作、旅游团组团情况查询(尽可能多的查询方式)。
⑶旅游团统计子系统。
至少包括:按不同的时间段(月、季、年)统计各旅游线路的旅游团的总团数、最少(团的)人数、最多(团的)人数、平均人数、总人数。
等信息;按不同的时间段(月、季、年)统计各宾馆所接待的旅游线路的旅游团的总团数、最少(团的)人数、最多(团的)人数、平均人数、总人数。
等信息。
⑷系统维护子系统。
至少包括:操作者权限的设置、取消和更改;数据库数据的导入和导出;数据库的备份扥功能。
2.2、系统的数据字典系统的数据字典:2.3、系统的E-R图2.3.1实体-属性图旅游线路实体及其属性旅游班次实体及其属性导游实体及其属性旅游团实体及其属性宾馆实体及其属性游客实体及其属性保险实体及其属性2.3.2实体-联系图三、系统的详细设计3.1系统的数据库设计3.1.1数据库的逻辑设计一、根据系统的E-R图,转换得到关系模式及每个关系模式的主码、外码如下:(1)旅游线路(线路编号,起点,终点,旅游天数,主要景点,设计者)主码:线路编号;外码:无(2)旅游班次(班次编号,出发日期,回程日期,旅游标准,报价,折扣率,线路编号)主码:班次编号;外码:线路编号(3)导游资料(导游编号,身份证号,姓名,性别,出生日期,住址,联系电话,等级,语种)主码:导游编号;外码:无(4)旅游团(团号,团名,实际人数,联系人,住址,联系电话,旅游班次)主码:团号;外码:旅游班次(5)宾馆(宾馆编号,宾馆名称,所在城市,星级,标准房间,联系人,联系地址,传真,联系电话,旅游班次)主码:宾馆编号;外码:旅游班次(6)游客(游客编号,身份证号,姓名,性别,出生日期,住址,出发日期,回程日期,班次编号)主码:旅客编号,身份证号;外码:班次编号(7)保险(保险单号,人均保险费,保险期限,团号)主码:保险单号;外码:团号(8)陪同(导游编号,团号)主键:导游编号,团号,外码:无(9)接待(宾馆编号,团号)主键:导游编号,团号;外码:无二、在上述的所定义的所有关系模式中,“游客报名单项”关系模型中,报名费=报价*折扣率,存在“传递依赖”该模式属于2NF,“参保单项”关系模型中,参保总额=人均保险费*实际人数,存在“传递依赖”,只满足2NF。
其他的所有关系模式都满足3NF。
非规范化处理:1、“游客报名单项”关系模式若考虑如下两种情况:①如果不存在折扣率优惠,以上的“报名费”的计算公式不成立;②存在折扣率优惠时,该计算公式成立。
为保持处理效率,避免每次查询“报名费”都要重新计算,所以得保留该数据项。
2、“游客报名单”关系模式为了便于查询报名单的“报名总额”且避免频繁的查询进行计算,而增加“报名总额”这项。
该项是各游客报名费之和。
所以增加“报名总额”数据项。
(1)旅游线路(线路编号,起点,终点,旅游天数,主要景点,设计者)主码:线路编号;外码:无(2)旅游班次(班次编号,出发日期,回程日期,旅游标准,报价,折扣率,线路编号)主码:班次编号;外码:线路编号(3)导游资料(导游编号,身份证号,姓名,性别,出生日期,住址,联系电话,等级,语种)主码:导游编号,身份证号;外码:无(4)旅游团(团号,团名,实际人数,联系人,住址,联系电话,旅游班次)主码:团号;外码:旅游班次(5)宾馆(宾馆编号,宾馆名称,所在城市,星级,标准房间,联系人,联系地址,传真,联系电话)主码:宾馆编号;外码:无(6)游客(游客编号,身份证号,姓名,性别,出生日期,住址,出发日期,旅游线路,回程日期,报名费)主码:旅客编号,身份证号;外码:无(7)保险(保险单号,人均保险费,保险期限,团号)主码:保险单号;外码:团号(8)陪同(陪同单号,导游编号,团号,陪同开始日期,陪同天数)主键:报名单号,外码:导游编号,团号(9)接待(接待单号,宾馆编号,团号,入住时间,接待天数)主键:接待单号;外码:宾馆编号,团号(10)报名(报名单号,报名日期,游客编号,班次编号)主键:报名单号;外键:游客编号,班次编号3.1.2数据库的物理设计一、根据关系模式分析,得出如下数据库表tb_User(用户信息表)表tb_User用于保存客户信息,该表的结构如表5.1所示。
表5.1 用户信息表⏹tb_Line(旅游线路信息表)表tb_Line用于保存旅游线路信息,该表的结构如表5.2所示。
表5.2 旅游线路信息表⏹tb_Order(旅游班次信息表)表tb_Order用于保存旅游班次信息,该表的结构如表5.3所示。
表5.3 旅游班次信息表⏹tb_Guide(导游信息表)表tb_Guide用于保存导游信息,该表的结构如表5.4所示。
表5.4 导游信息表⏹tb_Group(旅游团信息表)表tb_group用于保存旅游团信息,该表的结构如表5.4所示。
表55 旅游团信息表⏹tb_Hotels(宾馆信息表)表tb_Hotels用于保存宾馆信息,该表的结构如表5.5所示。
表5.6 宾馆信息表⏹tb_Vistor(游客信息表)表tb_Vistor用于保存游客信息表,该表的结构如表5.6所示表5.7 游客信息表⏹tb_Insurance(保险信息表)表tb_Insurance用于保存保险信息,该表的结构如表5.7所示。
表5.8 保险信息表⏹tb_accompany(陪同关系表)表tb_accompany用于联系导游与旅游团的关系,该表的结构如表5.8所示。
表5.9 陪同关系表⏹tb_reception(接待关系表)表tb_reception用于联系宾馆信息与旅游团的关系,该表的结构如表5.9所示。
表5.10 接待关系表⏹tb_enroll(报名关系表)表tb_enroll用于联系游客信息与旅游班次关系和保存报名所需费用的信息,该表的结构如表5.10所示。
表5.11 报名关系表二、数据库相关代码数据库创建CREATE DATABASE TourMDBON PRIMARY(NAME=Tour_dat1,FILENAME='E:\data\Tourdat1.mdf',SIZE=10MB,MAXSIZE=200MB,FILEGROWTH=10%),(NAME=Tour_dat2,FILENAME='E:\data2\Tourdat2.ndf',SIZE=10MB,MAXSIZE=500MB,FILEGROWTH=20%)LOG ON(NAME=Tour_log1,FILENAME='F:\log\Tourlog1.ldf',SIZE=10MB,MAXSIZE=100MB,FILEGROWTH=10%)数据库自动收缩ALTER DATABASE TourMDBSET AUTO_SHRINK ON表1CREATE TABLE tb_User(User_id char(8)CONSTRAINT pk_userid PRIMARY KEY CLUSTERED,User_name nvarchar(20)NOT NULL,User_pwd varchar(20)NOT NULL,User_right varchar(10)NOT NUL)第1位(固定):1;第2、3、4位(数字):国家;第5、6位(数字):省份;第7、8、9、10位(数字):编号表2CREATE TABLE tb_Line(Line_no CHAR(10) check(Line_no LIKE’[1][0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9]’ ) PRIMARY KEY,Line_start NVARCHAR(10),Line_end NVARCHAR(10),Line_days TINYINT,Line_sight NVARCHAR(80)Line_designer NVARCHAR(8))第1位(固定):2;第2、3、4位(数字):国家;第5、6位(数字):省份;第7、8、9、10位(数字):编号表3CREATE TABLE tb_Order(Order_no CHAR(10) check(Order_no LIKE’[2][0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9]’ ) PRIMARY KEY,Order_go SMALLDATETIME,Order_back SMALLDATETIME,Order_standard CHAR(4) CHECK (Order_standard) IN (‘豪华’, ‘经济’), Order_price SMALLMONEY,Order_discout CHAR(4),Line_no CHAR(10)REFERENCES tb_Line(Line_no))第1位(固定):3;第2、3、4(数字):国籍;第5、6、7位(数字):编号表4CREATE TABLE tb_Guide(Guide_no CHAR(7) check(Guide_no LIKE’[3][0-9][0-9] [0-9][0-9] [0-9][0-9]’ )PRIMARY KEY,Guide_id CHAR(18) UNIQUE,Guide_name NVARCHAR(10),Guide_sex NCHAR(2) CHECK (Guide_sex) IN (‘男’, ‘女’),Guide_birth SMALLDATETIME CHECK (Guide_birth<getdate()),Guide_address NVARCHAR,Guide_phone CHAR(11),Guide_language NVARCHAR(30),Guide_level NVARCHAR(5) CHECK (Guide_sex) IN (‘实习,兼职,‘全职’)), 表5CREATE TABLE tb_Group(Group_no CHAR(10)PRIMARY KEY,Group_name NVARCHAR(10),Group_people TINYINT,Group_charge NVARCHAR(10),Group_address NVARCHAR(10),Group_phone CHAR(11),Order_no CHAR(10)REFERENCES tb_Order(Order_no))表6CREATE TABLE tb_Hotels(Hotels_no CHAR(7)PRIMARY KEY,Hotels_name NVARCHAR(20),Hotels_city NVARCHAR(10),Hotels_star NVARCHAR(10),Hotels_price SMALLMONEY,Hotels_charge NVARCHAR(12),Hotels_address NVARCHAR(60),Hotels_phone CHAR(11),Hotels_fakes CHAR(11))表7CREATE TABLE tb_Visitor(Visitors_no CHAR(7) PRIMARY KEY,Visitors_code CHAR(18) UNIQUE,Visitors_name NVARCHAR(12),Visitors_sex VARCHAR(1),Visitors_birth SMALLDATETIME,Visitors_address NVARCHAR(60),Visitors_phone CHAR(11),Visitors_leavetime SMALLDATETIME,Visitors_returntime SMALLDATETIME)表8CREATE TABLE tb_Insurance(Insurance_no CHAR(10)PRIMARY KEY,Insurance_pay SMALLMONEY,Insurance_period SMALLDATETIME,Group_no CHAR(10)REFERENCES tb_Group(Group_no))表9CREATE TABLE tb_accompany(Accomp_no CHAR(10)PRIMARY KEYGuide_no CHAR(7) REFERENCES tb_Guide(Guide_no), Group_no CHAR(10) REFERENCES tb_Group(Group_no), Accomp_start SMALLDATETIME,Accomp_days TINYINT)表10CREATE TABLE tb_Reception(Reception_no CHAR(10)PRIMARY KEYHotels_no CHAR(7) REFERENCES tb_Hotels(Hotels_no),Group_no CHAR(10) REFERENCES tb_Group(Group_no),Reception_start SMALLDATETIME,Reception_days TINYINT)表11CREATE TABLE tb_Enroll(Enroll_no CHAR(10)PRIMARY KEY,Enroll_date SMALLTIME,Visitors_no CHAR(7) REFERENCES tb_Visitor(Visitors_no),Order_no CHAR(10) REFERENCES tb_Order(Order_no))三、为了提高查询的效率,需要对存储数据的基本表建立索引。