旅行预定系统的设计与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二 旅行预定系统的设计与实现

实验要求

编写一个简单的旅行预订系统。该系统涉及的信息有航班,出租车,宾馆房间和客户的数据信息。他们的关系模式如下:

FLIGHTS (String flightNum, int price, int numSeats, int numAvail, String FromCity, String ArivCity);

HOTELS(String location, int price, int numRooms, int numAvail);

CARS(String location, int price, int numCars, int numAvail);

CUSTOMERS(String custName);

RESERVATIONS(String custName, int resvType, String resvKey)

为简单起见,我们有下列假设:

1.在给定的一个班机上,所有的座位价格也一样;flightNum是表FLIGHTS的一个主码

(primary key)。

2.在同一个地方的所有的宾馆房间价格也一样;location是表HOTELS的一个主码。

3.在同一个地方的所有出租车价格一样;location是表 CARS的一个主码。

4.custName是表CUSTOMERS的一个主码。

5.表RESERVATIONS包含着那些和客户预订的航班、出租车或宾馆房间相应的条目,具体

的说,resvType指出预订的类型(1为预订航班,2为预订宾馆房间,3为预订出租车),而resvKey是表RESERVATIONS的一个主码。

6.在表FLIGHTS中,numAvail表示指定航班上的还可以被预订的座位数。对于一个给定的

航班(flightNum),数据库一致性的条件之一是,表RESERVATIONS中所有预订该航班的条目数加上该航班的剩余座位数必须等于该航班上总的座位数。这个条件对于表CARS 和表HOTELS同样适用。

该应用系统完成如下基本功能:

1.航班,出租车,宾馆房间和客户基础数据的入库,更新

2.预定航班,出租车,宾馆房间。

3.查询航班,出租车,宾馆房间,客户和预订信息。

4.查询某个客户的旅行线路。

5.检查预定线路的完整性。

概要设计

我的程序起名为TravelAgency,使用Access+ODBC+MFC的方式实现,能够实现上述所有功能。Access使用的是2007版,MFC的版本是跟随Visual Studio 2008的9.0版,ODBC驱动使用的是Microsoft Access Driver。

首先,利用Access中创建一个满足实验要求中关系模式定义的数据库Tour.mdb。其中FLIGHTS表、HOTELS表、CARS表、CUSTOMERS表的主键分别按实验要求依次取为flightNum、location、location、custName。对于RESERVATIONS表,我把resvKey定义为所选定的预定内容在FLIGHTS表、HOTELS表和CARS表中对应的主键;在RESERVATIONS表中,主键为(custName, resvType,resvKey)。

再利用Windows的ODBC数据源管理工具创建一个File DSN,使用Microsoft Access Driver,并与刚才去创建的Tour.mdb连接。该DSN起名为tour.dsn。

最后,创建一个MFC应用程序,依次选择使用单文档/视图架构、有文件支持的数据库、Dynaset模式。主记录集类CTravelAgencySet(继承自CRecordSet)与Tour.mdb中的RESERVATIONS表绑定,同时创建4个MFC Consumer(也是继承自CRecordSet)CUSTOMERS、FLIGHTS、HOTELS、CARS,分别与数据库中其他4个表相连接。至此,整个数据库应用系统的平台就搭好了。

功能介绍与实现

软件主界面如下图所示。项目选择区用于选择当前Flight、Car、Hotel和Customer中的某一项进行操作;内容显示区使用一个ListControl,该控件十分适合显示一个表中的信息。为方便起见,我也用它来显示旅客行程和可用路线。

图 1 软件界面

下面介绍功能选择区每一个按钮的功能,以及该功能的实现。所有功能都在TraveAgencyView.cpp 中实现。

(1)List Items 显示表中内容 图1中显示的正是当前表选择为FLIGHTS 时,List Items 的显示效果。该按钮对应于void CTravelAgencyView ::OnBnClickedListItem ()函数,实现该功能比较简单。首先根据选择的表的类型,创建ListCtrol 的表头;然后利用CRecordSet 的MoveNext()函数遍历整个表,并把每一行的信息输出到List Ctorl 中。

(2)Add Item 添加记录

图 2 添加记录

项目选择区

内容显示区

该功能对应与void CTravelAgencyView::OnBnClickedAddItem()。以FLIGHTS 表为例,图2显示的是点击Add Item按扭后弹出的Add Flights对话框;对每一种类型的表有一个单独此种对划款。的点击OK,系统会利用CRecordSet::AddNew()和CRecordSet::Update()函数实现记录的添加。

图 3 添加记录后的表

图3显示了点击OK后表中的内容,可以看到新的航班D002以经成功的加入了表中。

(3)Edit Item(修改记录)和Delete Item(删除记录)

这两个功能分别对由void CTravelAgencyView::OnBnClickedUpdateItem()和void CTravelAgencyView::OnBnClickedDeleteItem2()实现。以图3为例,当在List Control中选定一个项目后,Edit Item和Delete Item两个按钮就被激活了,可以使用。这两个功能分别调用了CRecordSet::Edit()和CRecordSet::Delete()函数。

为保证数据库的一致性,在做修改和删除记录时,软件会检测RERVATIONS表中有没有哪一个预定使用了待修改或删除的条目,如果有的话,软件会弹出MessageBox提示必须先移除所有相关的预定,如图4所示。

图 4 修改或删除时的提示错误

(4)List Reservations 显示所有预定信息

相关文档
最新文档