案例十航班与订票管理系统.docx
《案例十航班与订票管理系统.docx》由会员分享,可在线阅读,更多相关《案例十航班与订票管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
案例十航班与订票管理系统
A、课程设计实施步骤
同学们可按下列步骤完成所选题目的设计并写出设计报告。
第一步:
问题分析
在对所选题目进行调研的基础上,明确课题背景及该选题要做什么。
依据调查结果,进一步分析和表达用户的需求。
(1)系统的功能需求:
围绕选题,明确系统的主要功能;
(2)用户操作需求:
系统应以怎么的方式与用户进行交互。
第二步:
总体设计
(1)系统的功能划分:
主要给出系统的功能结构图;
(2)系统流程:
主要给出系统工作流程示意图。
第三步:
详细设计与实现
(1)类设计:
给出系统中设计的类的功能、结构等的说明;
(2)系统的主要代码:
类的实现及程序主要代码及其说明;
第四步:
测试
以运行结果的形式给出程序的测试过程,需要运行界面截图与文字说明,缺一不可。
第五步:
形成设计报告
对设计结果的合理性、规范程度和实际运行的结果以报告的形式进行提交。
B、课程设计报告要求
课程设计报告有四个方面的要求:
1.问题描述。
包括此问题的理论和实际两个方面。
2.解决方案。
包括:
(1)总体设计:
应合理划分系统功能模块,系统工作流程合理、符合实际;
(2)详细设计与实现:
类的设置是问题域中客观存在事物的放映和抽象,代码符合程序编写规范;
(3)测试:
对系统应进行全面的功能测试,以保证系统的可靠运行。
3.报告撰写格式要规范,具体参见样例。
案例十用VC++制作一个航班与订票管理系统
关键词:
查看数据使用文件支持OLEDB数据源
10.1课程设计的目的和意义
民航售票/订票是民航管理业务中的一个最基本的业务,表面上看,它只是民航业务的一个简单的部分,但是它涉及到资金管理与客户服务等多方面。
过去传统的售票方式已经不能满足现代航空业务流量剧增的客观要求,本课程设计便是利用开发工具VC++开发一个民航售售票管理系统,它能方便快捷地运用在民航业务的营运之中。
10.2系统功能设计
本系统设计主要是根据售票业务的基本流程进行的,一般地说,售票业务包括:
售票子系统、订票子系统、查询子系统、飞行时刻表等甲方个方面。
其中,售票与订票系统至少要满足:
(1)顾客乘坐飞机的起点、终点、日期和可以使用(预订)的座位等基本信息。
(2)自动显示符合顾客要求的航班及座位是否存在(是否还有空位)。
(3)利用查询子系统,可以查询当前航班的售票订票情况和乘客信息。
(4)查询航空公司的航班时刻表信息。
其系统的功能模块如图10.1所示。
当然,本系统仅供学生练习使用,不可能是真正意义上的航班管理系统,它与实际的需求还有很大的差距。
图10.1民航售票系统功能模块图
10.3航班管理系统数据库与数据表的创建
数据库是数据表的集合,与其他任何的数据库应用系统一样,系统开发首先应该开发一个数据库,它用于存放系统中的数据表,本案例仍采用MicrosoftOffice2003中的MicrosoftAccess2003来进行数据库与数据表的创建工作。
为此我们先定义一个“航班管理数据库”的数据库文件,同时创建3个数据表的结构,即“乘客数据表”、“飞行时刻表”、“航班信息”的结构,我们将通过这三个数据表对航班业务进行管理。
1.“乘客数据表”结构的定义
乘客管理是航班管理中的一个重要的方面,首先需要对乘客进行记录,根据乘客在购票、订票和乘客信息等方面的特点,我们特设计“乘客数据表”的结构如表10.1所示。
表10.1“乘客数据表”结构
字段名称
字段类型
字段大小
小数位数
索引
必须填写
航班号
购订票人
身份证号
发出城市
到达城市
日期
起飞时间
到达时间
座位等级
文本
文本
数字
文本
文本
日期/时间
日期/时间
日期/时间
文本
50
20
默认
50
50
默认
默认
默认
4
是
是
是
是
是
是
是
是
是
乘客数据表的演示数据可参表10.2所示内容。
表10.2乘客数据表的演示数据
航班号
购订票人
身份证号
出发城市
到达城市
日期
起飞时间
到达时间
座位等级
XH-0001
XH-0001
XH-0001
XH-0001
XH-0001
XH-0001
张三有
李有前
程钱
王三福
陈东东
张明确
111132227
121212218
111132220
111132221
111132222
111132223
重庆
重庆
重庆
重庆
重庆
重庆
北京
北京
北京
北京
北京
北京
02-6-14
02-6-14
02-6-14
02-6-14
02-6-14
02-6-14
13:
55:
00
13:
55:
00
13:
55:
00
13:
55:
00
13:
55:
00
13:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
A
B
C
A
A
A
2.“航班信息”数据表结构的定义
航班信息是供乘客查询使用的一个重要内容,也是航空公司进行数据管理的重要方面,根据航班信息的特点,特创建“航班信息”数据表的结构如表10.3所示。
表10.3“航班信息”数据表结构
字段名称
字段类型
字段大小
小数位数
索引
必须填写
航班号
购订票人
身份证号
发出城市
到达城市
日期
起飞时间
到达时间
座位等级
剩余座位
座位总数
票价
文本
文本
数字
文本
文本
日期/时间
日期/时间
日期/时间
文本
数字
数字
数字
50
20
默认
50
50
默认
默认
默认
4
默认
默认
默认
关键、惟一
是
是
是
是
是
是
是
是
是
是
是
是
“航班信息”数据表结构一经创建,用户可以在其中输入一些数据记录,以在后面的对话框制作中显示对话框制作的数据操作效果。
其演示数据可参考表10.4所示内容(数据仅供演示之用,无须考虑业务的真实性)。
表10.4“航班信息”数据表的参考数据
航班号
购订票人
身份证号
出发城市
到达城市
日期
起飞时间
到达时间
座位等级
座位总数
剩余座位
票价
XH-001
XH-001
XH-001
XH-001
XH-001
XH-001
XH-001
张有钱
李富生
王明星
张铁生
李开封
陈有名
王一万
32322323
23423232
34343433
34343434
34343435
34343436
34343437
重庆
重庆
重庆
重庆重庆
重庆
重庆
北京
北京
北京
北京
北京
北京
北京
02-6-16
02-6-16
02-6-16
02-6-16
02-6-16
02-6-16
02-6-16
13:
55:
00
13:
55:
00
13:
55:
00
13:
55:
00
13:
55:
00
13:
55:
00
13:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
15:
55:
00
A
A
A
B
B
C
C
35
35
35
35
35
35
35
450
450
450
400
400
350
350
3.“飞行时刻表”结构定义
飞行时刻表是航空公司的一切航班运行的时刻表,它也是航班管理中的一个重要方面,根据航空时刻表的数据特点,特定义“飞行时刻表”的结构如表10.5所示。
表10.5“飞行时刻表”数据表结构
字段名称
字段类型
字段大小
小数位数
索引
必须填写
航班号
发出城市
到达城市
起飞时间
到达时间
所属公司
文本
文本
文本
日期/时间
日期/时间
文本
50
50
50
默认
默认
50
关键、惟一
是
是
是
是
是
是
飞行时刻表的演示数据可参考表10.6所示内容。
表10.6飞行时刻表的演示数据
航班号
发出城市
到达城市
起飞时间
到达时间
所属公司
XH-001
BH-002
ZH-003
重庆
北京
西安
北京
重庆
北京
13:
55:
00
12:
00:
00
17:
05:
00
15:
55:
00
14:
00:
00
20:
03:
00
西南航空公司
北方航空公司
中国民航
10.4制作一个系统封面位图
本案例我们仍将制作一个系统封面位图。
系统启动时首先出现一个Splash画面,该画面主要内容就是一个位图文件。
系统封面闪动之后,进入系统操作功能界面。
其位图文件如图10.2所示。
图10.2位图文件
10.5创建应用程序框架
与前面的所有案例一样,在VC++开发平台中,往往开发应用程序就是从应用程序框架着手的。
在前面我们已经创建了数据库、数据表,制作了系统封面的位烀文件,也就作好了系统开发的一切准备工作,因此我们可以着手应用系统的界面制作了。
创建“航班售票管理系统”应用程序框架的步骤如下:
(1)结束数据库的创建并启动VC++,出现VC++主控界面。
(2)在VC++主控界面中单击“文件|新建…”菜单项,出现新建工程类型选择对话框,在工程类型对话框中选择MFCAppWizard(EXE)工程类型。
(3)输入工程名称为“航班售票管理系统”并选择Win32平台类型。
(4)单击“确定”按钮,进入文档类型设置对话框。
(5)选择单文档类型,即创建一个单文档界面的应用程序,设置资源使用的语言为中文,选择文档/查看体系结构支持。
(6)单击“下一步”按钮,进入框架设计的第2步,出现图10.3所示对话框,在该对话框中,用户可对数据库的应用作一些相关的选择。
图10.3数据库选择
(7)在本案例中,我们选择“数据库查看使用文件支持”选项,它与前面的所有案例的数据查看方式有所区别。
(8)单击DataSource按钮,出现数据源选择对话框,如图10.4所示。
图10.4数据源选择
本案例中,我们将采用一种新的数据源,即选择OLEDB数据源。
(9)单击SelectOLEDBDatasource按钮,出现一个数据库驱动程序列表,如图10.5所示。
我们在列表中选择MicrosoftOLEDBProviderforODBCDrivers.
(10)单击Next按钮,出现一个数据连接属性选项卡。
(11)在选项卡中使用连接字符串选项。
再单击Build按钮,即创建一个新的数据源,如图10.6所示。
图10.5驱动程序列表
图10.6数据源连接
确认后回到图10.3所示的对话框,单击“完成”按钮即结束应用程序框架的信息显示。
然后再选择ODBC数据源,即刚才通过OLE方法创建的数据源即可,如图10.7所示。
图10.7航班宇航管理数据源的引入
最后,工程基本框架创建的信息如下所示:
Applicationtypeof航班管理系统:
SingleDocumentInterfaceApplicationtargeting:
Win32
Classestobecreated:
Application:
CMyAppin 航班管理系统.hand航班管理系统.cpp
Frame:
CMainFrameinMainFrm.handMainFrm.cpp
Document:
CMyDlgin航班管理系统Doc.hand航班管理系统Doc.cpp
Features:
+Initialtoolbarinmainframe
+Initialstatusbarinmainframe
+3DControls
+UsessharedDLLimplementation(MFC42.DLL)
+Includesdatabaseheaderfiles
+ActiveXControlssupportenabled
+Localizabletextin:
中文[中国]
10.6创建乘客订购票管理对话框
航班管理系统的第一个对话框就是乘客订票对话框,它可以记录乘客订票的一些基本内容,它的制作我们在前面已经介绍过多次,其布局如图10.8所示。
图10.8乘客订票对话框
该对话框的制作方法大家应该是比较熟悉了,在前面我们已经多次进行过介绍,为此我们不再重复,请参考后面的工程实现文件的内容。
10.7制作航班时刻查询对话框
航班管理的另一个重要方面就是航班时刻表查询。
我们可以采用前面案例中ADO控件和DBGrid控件进行查询(参见案例二),但首先需要在工程中插入一个新的对话框资源,然后加工制作新的对话框,其对话框布局如图10.9所示。
图10.9“航班时刻表查询”对话框布局
该对话框的制作过程我们也不重复介绍了,它是我们前面多次制作过的一种对话框类型。
10.8制作航班信息处理对话框
航班作息处理对话框的制作完全可以采用与飞行时刻表相同的方法进行创建,这里全部略去其过程的介绍。
为了调用航班时刻对话框和航班信息对话框,需要在主对话框IDD_MY_FORM中增另两个命令按钮控件,其主对话框的布局如图10.10所示。
图10.10在主对话框中新增按钮
最后运行工程,可以检验各个功能模块的执行情况。
航班信息对话框的运行效果如图10.11所示。
图10.11航班信息对话框的运行效果
10.9制作系统启动封面
系统启动封面的制作方法在前面也已经作过介绍,只需要插入一个启动封面的资源即可(参见案例五)。
10.10 工程文件分析
为了使大家熟悉使用VC++制作应用系统的一般方法,我们在本案例中给出了一个航班管理系统,它的制作过程我们在前面几乎都介绍过,因此,本案例的过程几乎全部省略。
我们仅给出工程的一些文件,供大家参考使用,或在编程时进行分析。
1.工程实现文件
工程实现文件是用户制作工程中进行类创建、类声明、创建消息映射和编制过程代码的主要记录文件,它的内容如下所示:
//航班管理系统View.cpp:
implementationoftheCMyViewclass
#include"stdafx.h"
#include"航班管理系统h"
#include"航班管理系统Set.h"
#include"航班管理系统Doc.h"
#include"航班管理系统View.h"
#include"FxrjDlg.h"
#include"HbxxDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////
//CMyView
IMPLEMENT_DYNCREATE(CMyView,CRecordView)
BEGIN_MESSAGEMAP(CMyView,CRecordView)
//{{AFX_MSG_MAP(CMyView)
ON_BN_CLICKED(IDC_BUTTON1, OnButtonl)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
//ON_BN_CLICKED(IDC_BUTTONS, OnButtonS)
//}}AFX_MSG_MAP
//Standardprintingcommands
ON_COMMAND(ID_FILE_PRINT, CRecordView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView:
:
OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////
//CMyViewconstruction/destruction
CMyView:
:
CMyView():
CRecordView(CMyView:
:
IDD) ~
{
//{{AFX_DATA_INIT(CMyView)
m_pSet=NULL;
//}}AFX_DATA_INIT
//TODO:
addconstructioncodehere
}
CMyView:
:
~CMyView()
{
}
voidCMyView:
:
DoDataExchange(CDataExchange*pDX)
{
CRecordView:
:
DoDataExchange(pDX);
//{{AFX_DATAMAP(CMyView)
DDX_FieldText(pDX,IDC_EDIT1,m_pSet->m_HBH,m_pSet);
DDX_FieldText(pDX,IDC_EDIT2,m_pSet->m_DGPR,m_pSet);
DDX_FieldText(pDX,IDC_EDIT3,m_pSet->m_SFZH,mpSet);
DDX_FieldText(pDX,IDC_EDIT4,m_pSet->mFCCS,mpSet);
DDX_FieldText(pDX,IDC_EDIT5,m_pSet->m_DDCS,mpSet);
DDX_FieldText(pDX,IDC_EDIT9,m_pSet->m_ZWDJ,mpSet);
//}}AFX_DATA_MAP
}
BOOLCMyView:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnCRecordView:
:
PreCreateWindow(cs);
}
voidCMyView:
:
OnInitialUpdate()
{
m_pSet=&GetDocument()->m_mySet;
CRecordView:
:
OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
/////////////////////////////////////////////////////
//CMyViewprinting
BOOLCMyView:
:
OnPreparePrinting(CPrintInfo*pInfo)
{
//defaultpreparation
returnDoPreparePrinting(pInfo);
}
voidCMyView:
:
OnBeginPrinting(CDC*/*pDC*/, CPrintInfo*/*pInfo*/)
{
//TODO:
addextrainitializationbeforeprinting
}
voidCMyView:
:
OnEndPrinting(CDC*/*pDC*/, CPrintInfo*/*pInfo*/)
{
//TODO:
addcleanupafterprinting
}
/////////////////////////////////////////////////////
//CMyViewdiagnostics
#ifdef_DEBUG
voidCMyView:
:
AssertValid() const
{
CRecordView:
:
AssertValid();
}
voidCMyView:
:
Dump(CDumpContext&dc)const
{
CRecordView:
:
Dump(dc);
}
CMyDoc*CMyView:
:
GetDocument() //non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
return(CMyDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////
//CMyViewdatabasesupport
CRecordset*CMyView:
:
OnGetRecordset()
{
returnm_pSet;
}
/////////////////////////////////////////////////////
//CMyViewmessagehandlers
2.工程设置文件
另外,我们列出工程的设置文件,它主要包括了工程中对于数据源、数据集和数据初始化的一些信息,其内容如下所示:
//航班管理系统Set.cpp:
implementationoftheCMySetclass
#include"stdafx.h"
#include"航班管理系统.h"
#include"航班管理系统Set.h"
#ifdef_DEBUG
#d