机票预订系统课程设计报告

更新时间:2023-07-21 14:49:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《数据库原理及应用课程设计》

系统开发报告

学号:

姓名:

题目:机票预订系统

指导教师:

提交时间: 2015年12月

计算机工程系

目录

一.概述 (2)

1.1 课程实训目的与要求 (2)

1.2 机票预订系统 (2)

1.2.1 系统功能的基本要求 (2)

1.2.2 数据库要求 (3)

二.需求分析 (3)

2.1背景分析 (3)

2.2 功能分析 (3)

2.3 数据词典 (4)

三.概念结构设计 (6)

3.1概念结构设计的方法与步骤 (6)

3.2 局部 E-R 图设计 (6)

3.4总体概念 E-R 图结构 (7)

四.逻辑结构设计 (9)

4.1 逻辑结构设计 (9)

4.2 数据库表的建立 (10)

五.物理结构设计 (10)

5.1 表的建立与数据载入 (10)

5.2 视图建立 (11)

5.3 索引建立 (11)

5.4 存储过程 (11)

5.5 触发器 (11)

5.6 创建登陆账户和添加数据库用户 (12)

六.数据流图及程序结构框图 (13)

6.1 功能模块图 (13)

6.2数据流图 (13)

七.界面设计与功能测试................................ 错误!未定义书签。

7.1登录界面及代码 (14)

7.2 进入系统界面 (15)

7.3 订票过程 (15)

八.总结 (19)

一.概述

应用对数据库技术及应用的理论学习通过上机实践的方式将理论知识与实

践更好的结合起来巩固所学知识。

实践和巩固在课堂教学中学习的关于数据库的有关知识熟练掌握对于给定

实训任务的数据库的创建、基本操作、程序系统的建立和调试以及系统评价。

实践和巩固在课堂教学中学习的关于关系数据库原理的有关知识和数据库

系统的建立方法熟练掌握对于给定实际问题为了建立一个关系数据库信息管

理系统必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系

统调试、维护以及系统评价的一般过程为将来在学习工作中的应用打下基础。1.1 课程实训目的与要求

课程实训的目的是本次课程实训的主要任务是运用在《数据库原理及应用》课程中学到的理论知识来指导实践了解数据库设计过程及其实现方法学会用

数据库建模的方法解决实际问题。掌握数据库原理、范式理论、规范化等相关知识掌握数据库分析设计的具体步骤与基本方法掌握 SQL 语言的基本语法和

基本内容并能运用 SQL Server 2005 实现设计数据库掌握 SQL Server 2005 数据库、表、视图、约束、索引、存储过程、触发器的使用利用一种前台开发工

具实现数据库管理系统的开发实现特定的业务功能。通过综合课程实训提高

实践动手技能培养独立分析分析问题和解决问题的能力。

课程实训的要求本次课程实训的选题比较灵活可以是自主选题也可以

自己选择比较感兴趣的题目重点是完成数据库的分析、设计与实现题目要符

合《数据库原理及应用》的要求并且具备一定的难度和深度除此以外可以

从备选题目之外选择一个题目完成。

1.2 机票预订系统

在所给的实训题目中我选择的是机票预订系统的设计。

1.2.1 系统功能的基本要求

每个航班信息的输入

每个航班的坐位信息的输入

当旅客进行机票预定时输入旅客基本信息系统为旅客安排航班打印取

票通知和帐单

旅客在飞机起飞前一天凭取票通知交款取票

旅客能够退订机票

能够查询每个航班的预定情况、计算航班的满座率。

1.2.2 数据库要求

在数据库中至少应该包含下列数据表

航班信息表

航班坐位情况表

旅客订票信息表

取票通知表

帐单。

二.需求分析

2.1背景分析

随着社会发展的不断进步民航事业的壮大人们消费水平的提高乘坐民

航的消费者也越来越多旅游也逐渐成为普通老百姓的生活组成部分飞机票预

定查询系统在各机票预定网点中的作用也越显重要。目前我国一些旅行社和酒

店的机票预定还停留在人工处理阶段这已经严重制约了工作效率在计算机技

术高速发展的今天有必要引入高效的计算机系统来协助处理机票预定工作。

因此开发一套具有完整的存储查询核对打印机票功能的实时机票预定系

统势在必行。

机票预定系统是为机场工作人员和客户提供订票退票等与机票相关内容和管理的系统它具有开放体系结构的、易扩充的、易维护的、具有良好人机界面的优点.它除克服了存储乘客信息少查询效率低下等问题外更重要的是其安全性可靠性实现航空公司的机票销售的自动化。它为企业的决策层提供准确、精细、迅速的机票销售信息为乘客出行提供方便便于机场工作人员对机票信息进行管理提高了机场工作人员对机票管理的工作效率。

2.2 功能分析

经过综合分析确定了机票预订系统主要包括以下功能

(1) 航班信息管理功能主要实现航班的一些基本信息航班编号、票价、起飞地、目的

地、起飞时

间的添加、修改、删除和查询。

(2) 航班座位信息管理功能主要实现航班座位也就是机票的一些基本信息航班编号、座

位号、座位

信息、机票类型的添加、修改、删除和查询。

(3) 旅客信息管理功能此模块的主要实现旅客一些基本信息姓名、性别、联系方式、证件

号码、

的查询功能。

(4) 取票信息管理功能此模块用于取票信息的管理包括对航班基本信息航班编号等旅

客基本

信息旅客姓名、座位号、取票时间的查询。

(5) 退票信息管理功能此模块用于退票信息的管理包括对订单号、旅客姓名、联系方

式、证件号

码的查询。

2.3 数据词典

经分析之后,本系统要用到五个基本表:航班信息表、航班座位情况表、旅客订票信息表、取票和账单信息表、退票信息表。数据结构定义如表

机票预订系统的主要数据Array字典如下

1 航班信息数据流来源航班管理

数据流去向航班安排

数据项组成航班号起飞地目的地起飞时间票价

2 航班座位情况数据流来源航班管理和订票情况数

据流去向旅客座位

数据项组成航班号座位号,座位信息机票类型

3 旅客信息数据流来源确定旅客信息后管理人员输入系统数据流去

向安排顾客的航班数据项组成旅客姓名身份证号性别电话号4 取票通知和账单信息数据流来源打印取票通知和账

单数据流去向核对订票信息

数据项组成旅客姓名取票时间航班号座位号机票类型

5 退票信息数据流来源旅客退票申请数据流去向

订票信息申请退票

数据项组成旅客姓名身份证号订单号电话号

三.概念结构设计

3.1概念结构设计的方法与步骤

1 概念结构设计的方法概念设计阶段我采用自底向上的方法即自顶向下的进

行需求分析然后再

自底向上的进行概念结构设计。对已经细化到无法再分的阶段逐步集成在一起最终合成一个全局概念模式。

2 概念结构设计的步骤第一步是进行局部视图的设计由于高层的数据流图只

能反映系统的概貌

而中层流图能较好的反映系统中各局部应用的子系统组成。因此我们先逐一的设计分E-R图。

第二步是进行视图的集成各子系统的E-R图设计好之后下一步就是要将所有的分E-R图合成一个系统的总E-R图一般有两个方式多个分E-R图

一次集成另一种是一次集成两个分E-R图。我想采用一次集成两个分E-R 图

的方式。

3.2 局部 E-R 图设计

根据需求分析抽象出信息结构可得该系统的E-R图。

(1) 航班信息 E-R 图如图 3.1 所示。

起飞地

起飞时间

目的地

航班编号票价

航班信息

图 3.1航班信息E-R图

(2) 航班座位信息 E-R 图如图 3.2 所示。

座位号座位信息

机票类型航班编号

航班座位信息

图 3.2 机票信息 E-R 图

(3) 旅客E-R图如图3.3所示。

身份证号性别

电话号

姓名

旅客

图 3.3旅客E-R图

(4) 取票通知 E-R 图如图 3.4 所示。

机票类型

旅客姓名座位号

取票时间航班编号

取票通知和账单

图 3.4 取票通知 E-R 图

(5) 退票信息E-R图如图3.5所示。

订单号身份证号

电话号旅客姓名

退票信息

图 3.5 退票信息 E-R 图

3.4总体概念 E-R 图结构

经过逐步细化再进行每两个一集成初步形成一个E-R图最后得到图3.6总

体概念结构E-R图

四.逻辑结构设计

4.1 逻辑结构设计

1 E-R 图向关系模型的转换

将图 3.6总体概念结构E-R图转化成关系模型。

退票信息订单号旅客姓名联系方式证件号码

旅客旅客姓名证件号码联系方式性别)

航班信息表航班号票价起飞地目的地起飞时间

取票通知单旅客姓名取票时间证件号码航班号座位号

机票信息表座位号航班号座位信息机票类型

2 数据模型的优化

将转化的关系模式进行优化最终达到第三范式。

确定数据依赖

退票信息订单号旅客姓名联系方式证件号码根据这个关系写出数据依赖

订单号→旅客姓名订单号→联系方式订单号→证件号码

旅客旅客姓名证件号码联系方式性别)

旅客姓名→证件号码旅客姓名→联系方式旅客姓名→性别

航班信息表航班号票价起飞地目的地起飞时间

航班号→起飞地航班号→票价航班号→目的地航班号→起飞时间

取票通知单旅客姓名取票时间航班号座位号

旅客姓名→取票时间旅客姓名→航班号旅客姓名→座位号

机票信息表座位号航班号座位信息机票类型

座位号航班号→舱位类型座位号航班号座位信息→机票类型

对各关系模式间数据依赖进行极小化处理消除冗余

订单号→旅客姓名订单号→联系方式订单号→证件号码

旅客姓名→性别旅客姓名→取票时间旅客姓名→航班号旅客姓名→座

位号旅客姓名→机票类型

航班号→起飞地航班号→目的地航班号→起飞时间

座位号航班号→座位信息

看这些模式是否符合要求确定是否要对某些模式进行合并或者分解

最终分解成第三范式

订单号联系方式证件号码订单号旅客姓名旅客姓名取票时间性别机票类型旅客姓名航班号旅客姓名座位号航班号座

位号票价航班号起飞地目的地起飞时间

3 数据库的结构

根据总体结构图设计机票预定系统基本表结构其相应标的定义如下4.2 数据库表的建立

需要明确数据库需要建几张表,以及每张表包括的属性。在建立每张表的过程中,需要对表进行字段属性的设置。在机票预订管理系统中,要建立六张表,分别是:订单信息表,旅客信息表,航班信息表,机票信息表,取票通知单表,退票通知表。

表4.2.1 订单信息表

Table 5-1 of the booking information form

表4.2.2 旅客信息表

Table 5-2 passengers information table

表4.2.3 航班信息表

Table 5-3 flight information table

表4.2.4 机票信息表

Table4.2.4 ticket information table

表4.2.5 退票信息表

Table4.2.5refund information table

4.2.1视图的建立

视图是查看数据库的一种方式,视图提供了存储预定义的查询语句作为数据库中的对象,具备以后使用的能力。视图是一种逻辑对象,是一种虚拟表。

五.物理结构设计

数据库物理设计是指设计出数据库的物理数据模型它是数据库在物理设备

上的具体实现即数据库服务器物理空间上的表空间、表、字段、索引、视图、

存储过程、触发器以及相应的数字字典的设计。

经过数据库的需求分析和概念模型设计得到数据库的逻辑结构现在可以设计好的逻辑结构在SQL server中建立数据库及数据库的数据表。

5.1 表的建立与数据载入

需要明确数据库需要建立几张表以及每个表中所要包括的属性。在建立表的过程中。要对每个表进行字段属性的设置。至少包括5张表每个表都有主键根据实际情况建立视图

在机票预订系统中主要建立了5个表分别是航班信息表航班座位情况表旅客订票信息表取票和账单信息表退票信息表。

5.2 视图建立

视图是查看数据库表中数据的一种方式。视视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力。视图是一种逻辑对象是一种虚拟表。

在机票预订系统中我建立了两个视图。分别是航班和座位视图和旅客和取票信息视图。他们分别通过飞机编号也就是flight number项和旅客信息也就是passage name 项联系起来。

5.3 索引建立

索引是一个单独的、物理的数据库结构它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引依赖于表建立它提供了数据库中编排表中数据的内部方法。

在机票预订系统中我建立了三个索引分别是在航班信息表中建立了flight number 索引在旅客信息表中建立 passage name 索引在航班座位信

息表中建立了seat number索引。索引类型为唯一性的非聚集索引。

5.4 存储过程

我创建了三个存储过程输出三个表的全部信息。分别是航班信息表、航班座位信息表、旅客信息表。

命令为

CREATE PROC aaa

AS

SELECT *

FROM Flight number

CREATE PROC bbb

AS

SELECT *

FROM S eat number

CREATE PROC ccc

AS

SELECT *

FROM Passage name

5.5 触发器

触发器是一种实施复杂的完整性约束的特殊存储过程它在SQL server进

行某个特定的表修改时由SQL Server自动执行。触发器一般用于加强数据库的某些使用规则。

在机票管理系统中我建立了一个DDL触发器用于保护当前SQL Server 服务器里的所有数据库不被删除。具体代码为

CREATE TRIGGER notdelete

ON all server

FOR DROP_DATABASE

AS

PRINT’不能删除数据库’

ROLLBACK

GO

另外分别在航班信息表、航班座位信息表、旅客信息表、取票通知和账单这

四个表中建立了四个触发器对于表中的添加和更改数据提示错误信息。代码为

CREATE TRIGGER a ON flight number

FOR INSERT,UPDATE

AS RAISERROR('不能添加和更新数据',16,1)

ROLLBACK TRANSACTION

GO

CREATE TRIGGER b ON flight number

FOR INSERT,UPDATE

AS RAISERROR('不能添加和更新数据',16,1)

ROLLBACK TRANSACTION

GO

CREATE TRIGGER c ON passage number

FOR INSERT,UPDATE

AS RAISERROR('不能添加和更新数据',16,1)

ROLLBACK TRANSACTION

GO

CREATE TRIGGER d ON Get ticket time

FOR INSERT,UPDATE

AS RAISERROR('不能添加和更新数据',16,1)

ROLLBACK TRANSACTION

GO

5.6 创建登陆账户和添加数据库用户

在实训中我利用SQL创建了一个“login1”的登陆账号。密码为123456。

在一个数据库中用户账号唯一标识一个用户用户对数据库的访问权限以及对数据库对象的所有关系都是通过用户账号来控制的。

在机票预订系统中我创建了一个用户名为user1的用户。

六.数据流图及程序结构框图

6.1 功能模块图

根据所需的功能可以设计出系统的总体功能模块如图 6.1所示。

机票预订系统

航机旅取退

班票客票票

信信信信信

息息息息息

管管管管管

理理理理理

模模模模模

取票信息管理模块的细化功能模块如图 6.2所示。

6.2数据流图

取票信息管理

旅客基本信息查询机票基本信息查询

图 6.2取票信息管理模块

退票信息管理模块的细化功能模块如图 6.3所示。

取票信息管理

旅客基本信息查询订单信息查询

图 6.3 退票信息管理模块

订票信息

旅客

机票预订系统旅客

机票付费信息

图 6.4 0层数据流图

知、账单信息

图 6.5 1 层数据流图

七.界面设计与功能测试

7.1登录界面及代码

using System;

using

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using

using

namespace WindowsApplication2

{

public partial class Form6 : Form

{

public Form6()

{

InitializeComponent();

}

public SqlConnection conn;

private void label3_Click(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

Form1 f = new Form1();

conn.Open();

string uname = this

string upassword = this

SqlCommand thiscommand = conn.CreateCommand();

mandText = "select 管理员账号,管理员密码from 管理员where 管理员账号='" + uname + " '";

SqlDataReader thisreader = thiscommand.ExecuteReader();

if (thisreader.Read())

{

if (thisreader["管理员密码"].ToString().Trim() == upassword)

{

MessageBox .Show("恭喜您登陆成功!", "登陆成功!", MessageBoxButtons .OK,

MessageBoxIcon .Information);

//yhxx tt = new yhxx(); //tt.Show();

//this.Close();//关闭当前窗体 //new Form1().Hide();

this .Visible = false ;//当前窗口不可见

f.Show(); 通知、账单信息

旅客信息

订票 旅客 旅客

// new Form2().Show();//form2显示new Form2().Show(); }

}

else

{

MessageBox.Show("密码错误,请重新输入!", "错误", MessageBoxButtons.OK, rmation);

}

}

conn.Close();

}

private void Form6_Load(object sender, EventArgs e)

{

string MyConn = ;

conn = new SqlConnection(MyConn);

}

}

}

7.2 进入系统界面

using System;

using

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using

namespace WindowsApplication2

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

Form2 f = new Form2(); f.Show();

}

private void button2_Click(object sender, EventArgs e)

{

Form2 A = new Form2(); A.Show();

// A frm2 = new A();

// frm2.Show();

}

}

}

7.3 订票过程

using System;

using

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using

namespace WindowsApplication2

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Form3 f = new Form3(); f.Show();

}

private void button2_Click(object sender, EventArgs e)

{

Form4 f = new Form4(); f.Show();

}

private void button3_Click(object sender, EventArgs e)

{

}

private void Form2_Load(object sender, EventArgs e)

{

}

}

}

using System;

using

using ponentModel;

using System.Data;

using

using System.Drawing;

using System.Text;

using

namespace WindowsApplication2

{

public partial class Form3 : Form

{

public Form3()

{

InitializeComponent();

}

public SqlConnection conn;

private void button1_Click(object sender, EventArgs e)

{

string MyInsert = "insert into 订单信息表values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "','" + textBox9.Text + "','" + textBox10.Text + "','" + textBox11.Text + "','" + textBox12.Text + "','" + textBox13.Text + "')";

SqlCommand MyCommand = new SqlCommand(MyInsert, conn);

conn.Open();

MyCommand.ExecuteNonQuery();

conn.Close();

MessageBox.Show("成功", "提示", MessageBoxButtons.OK, rmation);

// SqlConnection conn = new SqlConnection(MyConn);

// try

// {

//// conn.Open();

// }

// catch { MessageBox.Show("数据库连接失败"); return; }

// SqlCommand sqlCmd = new SqlCommand(sql, conn);

// SqlDataAdapter da = new SqlDataAdapter(sql, conn); ;//实例化sqldataadpter

// DataSet ds1 = new DataSet();//实例化dataset

// da.Fill(ds1);//把数据填充到dataset

// dataGridView1.DataSource = ds1.Tables[0];//将数据集绑定datagridview,完成显

// conn.Close();

}

private void Form3_Load(object sender, EventArgs e)

{

//SqlConnection conn = new SqlConnection(MyConn);

string MyConn = ;

conn = new SqlConnection(MyConn);

}

private void label14_Click(object sender, EventArgs e)

{

}

}

}

using System;

using

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using

using

namespace WindowsApplication2

{

public partial class Form4 : Form

{

public static Form4 f = null;

public Form4()

{

InitializeComponent();

f = this;

}

public SqlConnection conn;

public string toos()

{

string a = textBox1.Text;

return a;

}

private void button1_Click(object sender, EventArgs e)

{

// conn = new SqlConnection(MyConn);

string MyInsert = "select * from 订单信息表where 订单号='"+textBox1.Text+"'";

SqlCommand MyCommand = new SqlCommand(MyInsert, conn);

try

{

conn.Open();

}

catch { MessageBox.Show("数据库连接失败"); return; }

object o = MyCommand.ExecuteScalar();

if (o == null)

{

MessageBox.Show("不存在此记录", "提示", MessageBoxButtons.OK, rmation); }

else

{

SqlDataAdapter DA = new SqlDataAdapter(MyInsert, conn);

DataSet dsl = new DataSet();

DA.Fill(dsl);

dataGridView1.DataSource = dsl.Tables[0];

}

try

{

conn.Close();

}

catch { return; }

// MyCommand.ExecuteNonQuery();

// conn.Close();

// MessageBox.Show("成功", "提示", MessageBoxButtons.OK, rmation);

// SqlConnection conn = new SqlConnection(MyConn);

}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

}

private void Form4_Load(object sender, EventArgs e)

{

string MyConn = ;

conn = new SqlConnection(MyConn);

}

private void button2_Click(object sender, EventArgs e)

{

string MyInsert = "delete from 订单信息表where 订单号='" + textBox1.Text + "'";

SqlCommand MyCommand = new SqlCommand(MyInsert, conn);

conn.Open();

MyCommand.ExecuteNonQuery();

conn.Close();

MessageBox.Show("删除成功");

}

private void button3_Click(object sender, EventArgs e)

{

Form5 f = new Form5();

f.Show();

}

}

}

using System;

using

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using

using

namespace WindowsApplication2

{

public partial class Form5 : Form

{

public SqlConnection conn;

public Form5()

{

InitializeComponent();

}

private void Form5_Load(object sender, EventArgs e)

{

string MyConn = ;

conn = new SqlConnection(MyConn);

}

private void textBox1_TextChanged(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

string rnum = textBox1.Text;

string num = Form4.f.toos();

string sql = "update 订单信息表set 航班号='" + rnum + "'where 订单号='"+num+"'";

SqlCommand Mycommond = new SqlCommand(sql, conn);

try

{

conn.Open();

Mycommond.ExecuteNonQuery();

conn.Close();

MessageBox.Show("换机成功!");

}

catch { MessageBox.Show("数据库连接失败"); return; }

}

}

}

八.总结

经过一周的实训本次课程设计终于完成了。通过这次课程设计,使我对数据库这门课程有了更深入的理解。数据库是一门实践性较强的课程,通过这次课.

程设计,我明白了理论与实际应用相结合的重要性掌握并熟练运用SQL语句,以及c#的应用提高了我的综合运用所学知识的能力。

在本次课程设计和过程中,由于时间不是很长,再加上要求独立完成,系统需求分析上可能不是很全面,程序中还存在很多不足,希望老师能给予批评和指导。经过这次课程设计,我的知识得到了很大提高,经验也更加丰富。希望能在今后的不断的学习中和努力中把程序做得更好。最后感谢指导老师所给我的帮助。

主要参考文献《数据库技术及应用》——主编刘太安林晓霞中国石油大学出版社

本文来源:https://www.bwwdw.com/article/waym.html

Top