1、精品文档就在这里-各类专业好文档,值得你下载,教育,管理,论文,制度,方案手册,应有尽有-航空公司管理信息系统一个正常营运的航空公司需要管理所拥有的飞机、航线的设置、客户的信息等,更重要的还要提供票务管理。面对各种不同种类的信息,需要合理的数据库结构来保存数据信息以及有效的程序结构支持各种数据操作的执行。本设计讲述如何建立一个航空公司管理信息系统。一般而言,航空公司的管理信息系统应该包括人事、工资管理模块 。1 系统设计1.1 系统功能分析系统开发的总体任务是实现各种信息的系统化、规范化和自动化。系统功能分析是在系统开发的总体任务的基础上完成。本例子中的航空公司管理信息系统需要完成功能主要有:
2、l 舱位信息的输入和修改,包括舱位等级编号、舱位等级名称、提供的各种服务类别,以及备注信息等。l 客机信息的输入、修改和查询,包括客机编号、客机型号、购买时间、服役时间、经济舱座位数量、公务舱座位数量、头等舱座位数量以及备注信息等。l 航线信息的输入、修改和查询,包括航线编号、出发城市、到达城市、航班日期、出发时间、到达时间、客机编号、经济舱价格、公务舱价格、头等舱价格和备注信息等。l 客户等级信息的输入、修改,包括客户等级编号、客户等级名称、折扣比例和备注信息等。l 客户信息的输入、修改和查询,包括客户编号、客户姓名、客户性别、身份证号码、联系电话、客户类型和备注信息等。l 订票信息的输入、
3、查询和修改,包括订票编号、客户编号、客户姓名、客户类型、折扣比例、航线编号、出发城市、到达城市、出发时间、舱位类型、票价、结算金额和备注信息等。1.2 系统功能模块设计对上述各项功能进行集中、分块,按照结构化程序设计的要求,得到如图9-1所示的系统功能模块图。图9-1 系统功能模块图2 数据库设计数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。设计数据库系统时应该首先充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求。数据库设计一般包括如下几个步骤:l 数
4、据库需要分析。l 数据库概念结构设计。l 数据库逻辑结构设计。2.1 数据库需求分析用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的具体设计打下基础。仔细分析调查有关航空公司管理信息需求的基础上,将得到如图9-2所示的本系统所处理的数据流程。图9-2 航空公司管理信息系统数据流程图针对一般航空公司管理信息系统的需求,通过对航空公司管理工作过程的内容和数据流程分析,设计如下面所示的数据项和数据结构:l 舱位等级信息,包括的数据项有:舱位等级编号、舱位等级名称、是否有礼
5、品、是否有报纸、是否有饮料、是否有午餐、是否有电影、是否可以改签、是否可以退票、是否可以打折、备注信息等。l 客机信息,包括的数据项有:客机编号、客机型号、购买时间、服役时间、经济舱座位数量、公务舱座位数量、头等舱座位数量、备注信息等。l 航线信息,包括的数据项有:航线编号、出发城市、到达城市、航班日期、出发时间、到达时间、客机编号、经济舱价格、公务舱价格、头等舱价格、备注信息等。l 客户类型信息,包括的数据项有:客户类型编号、客户类型名称、折扣比例、备注信息等。l 客户信息,包括的数据项有:客户编号、客户姓名、客户性别、身份证号码、联系电话、客户类型、备注信息等。l 订票信息,包括的数据项有
6、:订票编号、顾客编号、顾客姓名、顾客类型、折扣比例、航线编号、出发城市、到达城市、舱位类型、机票价格、结算金额、备注信息等。有了上面的数据结构、数据项和数据流程,我们就能进行下面的数据库设计。2.2 数据库概念结构设计得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。这些实体包含各种具体信息,通过相互之间的作用形成数据的流动。本实例根据上面的设计规划出的实体有:舱位等级信息实体、客机信息实体、航线信息实体、客户类型信息实体、客户信息实体、订票信息实体。各个实体具体的描述E-R图如下。舱位等级信息实体E-R图如图9-3所示。
7、图9-3 舱位等级信息实体E-R图客机信息实体E-R图如图9-4所示。图9-4 客机信息实体E-R图航线信息实体E-R图如图9-5所示。图9-5 航线信息实体E-R图客户类型信息实体E-R图如图9-6所示。图9-6 客户类型信息实体E-R图客户信息实体E-R图如图9-7所示。图9-7 客户信息实体E-R图订票信息实体E-R图如图9-8所示。图9-8 订票信息实体E-R图实体之间关系的E-R图如图9-9所示。图9-9 实体之间关系的E-R图2.3 数据库逻辑结构设计现在需要将上面的数据库概念结构转化为SQL Server 2000数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。航空公司管
8、理信息系统数据库中各个表格的设计结果如下面表格所示。每个表格表示在数据库中的一个表。表9-1为供应商信息表。表9-1 serviceInfo 舱位等级信息表列 名数据类型可否为空说 明serviceNOcharNOT NULL舱位等级编号serviceNamenvarcharNULL舱位等级名称noPresentcharNULL是否有礼物noNewsPapercharNULL是否有报纸noDrinkcharNULL是否有饮料noFoodcharNULL是否有午餐noMoviecharNULL是否有电影canChangecharNULL是否可以改签canCancelcharNULL是否可以退票c
9、anDiscountcharNULL是否可以打折serviceMemotextNULL备注信息表9-2为顾客信息表格。表9-2 planeInfo客机信息表格列 名数据类型可否为空说 明planeNOcharNOT NULL客机编号planeTypecharNULL客机型号buyDatedatetimeNULL购买日期serveDatedatetimeNULL服役日期isCommonnvarcharNULL经济舱座位数量isCommercialnvarcharNULL公务舱座位数量isFirstnvarcharNULL头等舱座位数量planeMemotextNULL备注信息表9-3为航线信息表
10、。表9-3 airlineInfo航线信息表列 名数据类型可否为空说 明airlineNOcharNOT NULL航线编号departCitynvarcharNULL出发城市arrivalCitynvarcharNULL到达城市departDatecharNULL航班日期departTimecharNULL出发时间arrivalTimecharNULL到达时间planeNOcharNULL客机编号commonPricenumericNULL经济舱价格commercialPricenumericNULL公务舱价格firstPricenumericNULL头等舱价格airlineMemotextN
11、ULL备注信息表9-4为客户类型信息表格。表9-4 customerType 客户类型信息表列 名数据类型可否为空说 明ctypeNOcharNOT NULL客户类型编号ctypeNamecharNULL客户类型名称discountnumericNULL折扣比例续表列 名数据类型可否为空说 明ctypeMemotextNULL备注表9-5为客户信息表格。表9-5 customerInfo 客户信息表列 名数据类型可否为空说 明customerNOcharNOT NULL客户编号customerNamecharNULL客户姓名customerSexcharNULL客户性别customerIDch
12、arNULL身份证号码customerTelecharNULL客户联系电话customerTypecharNULL客户类型customerMemotextNULL备注表9-6为订票信息表格。表9-6 ticketInfo 订票信息表列 名数据类型可否为空说 明ticketNOcharNOT NULL订票编号customerNOcharNULL客户编号customerNamecharNULL客户姓名customerTypecharNULL客户类型discountnumericNULL折扣比例airlineNOcharNULL航线编号departCitynvarcharNULL出发城市arriva
13、lCitynvarcharNULL到达城市ticketDatedatetimeNULL出发日期serviceTypecharNULL舱位类型ticketPricenumericNULL机票价格ticketSumnumericNULL结算金额customerMemotextNULL备注3 数据库结构的实现经过前面的需求分析和概念结构设计以后,得到数据库的逻辑结构。现在就可以在SQL Server 2000数据库系统中实现该逻辑结构。这是利用SQL Server 2000数据库系统中的SQL 查询分析器实现的。下面给出创建这些表格的SQL语句。3.1 创建系统用户表CREATE TABLE dbo
14、.user_Info1 (user_ID char (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,user_PWD char (10) COLLATE Chinese_PRC_CI_AS NULL ,user_Des char (10) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY3.2 创建舱位等级信息表CREATE TABLE dbo.serviceInfo (serviceNO char (4) COLLATE Chinese_PRC_CI_AS NOT NULL ,serviceName nvarchar (
15、20) COLLATE Chinese_PRC_CI_AS NULL ,noPresent char (2) COLLATE Chinese_PRC_CI_AS NULL ,noNewsPaper char (2) COLLATE Chinese_PRC_CI_AS NULL ,noDrink char (2) COLLATE Chinese_PRC_CI_AS NULL ,noFood char (2) COLLATE Chinese_PRC_CI_AS NULL ,noMovie char (2) COLLATE Chinese_PRC_CI_AS NULL ,canChange char
16、 (2) COLLATE Chinese_PRC_CI_AS NULL ,canCancel char (2) COLLATE Chinese_PRC_CI_AS NULL ,canDiscount char (2) COLLATE Chinese_PRC_CI_AS NULL ,serviceMemo text COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARY3.3 创建客机信息表CREATE TABLE dbo.planeInfo (planeNO char (18) COLLATE Chinese_PRC_C
17、I_AS NOT NULL ,planeType char (20) COLLATE Chinese_PRC_CI_AS NULL ,buyDate datetime NULL ,serveDate datetime NULL ,isCommon nvarchar (20) COLLATE Chinese_PRC_CI_AS NULL ,isCommercial nvarchar (20) COLLATE Chinese_PRC_CI_AS NULL ,isFirst nvarchar (20) COLLATE Chinese_PRC_CI_AS NULL ,planeMemo text CO
18、LLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARY3.4 创建航线信息表CREATE TABLE dbo.airlineInfo (airlineNO char (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,departCity nvarchar (50) COLLATE Chinese_PRC_CI_AS NULL ,arrivalCity nvarchar (50) COLLATE Chinese_PRC_CI_AS NULL ,departDate char (10) COLLA
19、TE Chinese_PRC_CI_AS NULL ,departTime char (10) COLLATE Chinese_PRC_CI_AS NULL ,arrivalTime char (10) COLLATE Chinese_PRC_CI_AS NULL ,planeNO char (18) COLLATE Chinese_PRC_CI_AS NULL ,commonPrice numeric(18, 2) NULL ,commercialPrice numeric(18, 2) NULL ,firstPrice numeric(18, 2) NULL ,airlineMemo te
20、xt COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARY3.5 创建客户类型信息表CREATE TABLE dbo.customerType (ctypeNO char (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,ctypeName char (20) COLLATE Chinese_PRC_CI_AS NULL ,discount numeric(2, 0) NULL ,ctypeMemo text COLLATE Chinese_PRC_CI_AS NULL ) ON PRI
21、MARY TEXTIMAGE_ON PRIMARY3.6 创建客户信息表CREATE TABLE dbo.customerInfo (customerNO char (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,customerName char (50) COLLATE Chinese_PRC_CI_AS NULL ,customerSex char (2) COLLATE Chinese_PRC_CI_AS NULL ,customerID char (18) COLLATE Chinese_PRC_CI_AS NULL ,customerTele ch
22、ar (20) COLLATE Chinese_PRC_CI_AS NULL ,customerType char (14) COLLATE Chinese_PRC_CI_AS NULL ,customerMemo text COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARY3.7 创建订票信息表CREATE TABLE dbo.ticketInfo (ticketNO char (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,customerNO char (14) COLLATE
23、 Chinese_PRC_CI_AS NULL ,customerName char (50) COLLATE Chinese_PRC_CI_AS NULL ,customerType char (14) COLLATE Chinese_PRC_CI_AS NULL ,discount numeric(18, 0) NULL ,airlineNO char (14) COLLATE Chinese_PRC_CI_AS NULL ,departCity nvarchar (50) COLLATE Chinese_PRC_CI_AS NULL ,arrivalCity nvarchar (50)
24、COLLATE Chinese_PRC_CI_AS NULL ,ticketDate datetime NULL ,serviceType nvarchar (20) COLLATE Chinese_PRC_CI_AS NULL ,ticketPrice numeric(18, 2) NULL ,ticketSum numeric(18, 2) NULL ,ticketMemo text COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARY4 航空公司管理信息系统主窗体的创建上面的SQL语句在SQL Server 20
25、00中查询分析器的执行,将自动产生需要的所有表格。有关数据库结构的所有后台工作已经完成。现在将通过航空公司管理信息系统中各个功能模块的实现,讲解如何使用Visual Basic来编写数据库系统的客户端程序。4.1 创建工程项目MIS_Ticket启动Visual Basic后,单击File|New Project菜单,在工程模板中选择Standard EXE,Visual Basic将自动产生一个Form窗体,属性都是缺省设置。这里我们删除这个窗体,单击File|Save Project菜单,将这个工程项目命名为MIS_Ticket。4.2 创建航空公司管理信息系统的主窗体这个项目我们使用多文
26、档界面,单击工具栏中的ADD MDI Form按钮,产生一个窗体。在这个窗体上添加所需的控件,窗体和控件的属性设置见表9-7。创建好的窗体如图9-10所示。表9-7 主窗体及其控件属性设置控 件属 性属性取值frmMain(Form)NameFrmMainCaption大唐航空公司信息管理系统StartUpPositonCenterScreenWindowStateMaximizedSbStatusBar(StatusBar)NameSbStatusBarPanels(1)StyleSbrTextPanels(2)StyleSbrDatePanels(3)StyleSbrTime图9-10 航
27、空公司管理信息系统主窗体在主窗体中加入状态栏控件,可以实时反映系统中的各个状态的变化。状态栏控件需要在通常的属性窗口中设置一般属性,还需要在其特有的弹出式菜单中进行设置。选中状态栏控件,单击鼠标右键,选中Property菜单,然后设置属性。面板1用来显示各种文本信息,面板2用来显示当前日期,面板3用来显示当前时间。4.3 创建主窗体的菜单在如图9-10所示的主窗体中,单击鼠标右键,选择弹出式菜单中的Menu Editor,创建如图9-11所示的菜单结构:图9-11 主窗体中的菜单结构4.4 创建公用模块在Visual Basic中可以用公用模块来存放整个工程项目公用的函数、过程和全局变量等。这
28、样可以极大地提高代码的效率。在项目资源管理器中为项目添加一个Module,保存为Module1.bas。下面就可以开始添加需要的代码了。由于系统中各个功能模块都将频繁使用数据库中的各种数据,因此需要一个公共的数据操作函数,用以执行各种SQL语句。添加函数ExecuteSQL,代码如下:Public Function ExecuteSQL(ByVal SQL _ As String, MsgString As String) _ As ADODB.Recordset执行SQL语句,并返回记录集对象 声明一个连接 Dim cnn As ADODB.Connection 声明一个数据集对象 Dim
29、rst As ADODB.Recordset Dim sTokens() As String异常处理 On Error GoTo ExecuteSQL_Error用Split函数产生一个包含各个子串的数组 sTokens = Split(SQL) 创建一个连接 Set cnn = New ADODB.Connection打开连接 cnn.Open ConnectString If InStr(INSERT,DELETE,UPDATE, _ UCase$(sTokens(0) Then 执行查询语句 cnn.Execute SQL MsgString = sTokens(0) & _ query
30、 successful Else Set rst = New ADODB.Recordset rst.Open Trim$(SQL), cnn, _ adOpenKeyset, _ adLockOptimistic rst.MoveLast get RecordCount返回记录集对象 Set ExecuteSQL = rst MsgString = 查询到 & rst.RecordCount & _ 条记录 End IfExecuteSQL_Exit: Set rst = Nothing Set cnn = Nothing Exit Function ExecuteSQL_Error: Ms
31、gString = 查询错误: & _ Err.Description Resume ExecuteSQL_ExitEnd Function 在ExecuteSQL函数中使用了Connect String函数,这个函数用来连接数据库,代码如下:Public Function ConnectString() _ As String返回一个数据库连接 ConnectString = FileDSN=ticket.dsn;UID=sa;PWD=End Function在录入有关信息时,需要回车来进入下一个文本框,这样对软件使用者非常方便。在所有的功能模块都需要这个函数,所以将它放在公用模块中,代码如
32、下:Public Sub EnterToTab(Keyasc As Integer) 判断是否为回车键 If Keyasc = 13 Then 转换成Tab键 SendKeys TAB End IfEnd SubKeyasc用来保存当前按键,SendKeys函数用来指定的按键。一旦按下回车键,将返回Tab键,下一个控件自动获得输入焦点。添加全局变量,用来记录各个功能模块的读写状态,代码如下:Public gintSmode As Integer 记载舱位等级功能模块的读写状态Public gintPmode As Integer 记载客机信息模块的读写状态Public gintAmode As
33、 Integer 记载航线信息模块的读写状态Public gintTmode As Integer 记载客户类型模块的读写状态Public gintCmode As Integer 记载客户信息模块的读写状态Public gintKmode As Integer 记载订票信息模块的读写状态这些全局变量用来记录是添加状态还是修改状态,赋值1为添加,赋值2为修改。由于航空公司管理信息管理系统启动后,需要对用户进行判断。如果登录者是授权用户,将进入系统,否则将停止程序的执行。这个判断需要在系统运行的最初进行,因此将代码放在公用模块中。5 系统用户管理模块的创建用户管理模块主要实现:l 用户登录。l
34、添加用户。l 修改用户密码。 6 舱位信息管理模块的创建舱位信息管理模块主要实现如下功能:l 添加舱位信息。l 修改舱位信息。l 删除舱位信息。6.1 显示舱位信息窗体的创建选择“航线信息管理|舱位信息”菜单,将出现如图9-12所示的窗体。图9-12 舱位等级信息窗体这个窗体用来显示舱位等级信息,并且可以对各条记录进行操作。在载入窗体时,程序将自动载入所有记录,代码如下:Private Sub menuCarbin_Click() frmService.txtSQL = select * from serviceInfo frmService.Show 0End Sub窗体的Show方法后面加
35、上0或者1,可以得到不同的窗体显示方式。参数为0时,显示的窗体为无模式形式,窗体切换时不需要进行其他操作;参数为1时,显示的窗体为有模式形式,窗体切换时必须进行相关操作。载入窗体时将自动显示各条记录,代码如下:Private Sub Form_Load() ShowTitle ShowDataEnd Sub函数ShowTitle用来显示表头,代码如下:Private Sub ShowTitle() Dim i As Integer With msgList .Cols = 12 .TextMatrix(0, 1) = 等级编号 .TextMatrix(0, 2) = 机舱等级 .TextMat
36、rix(0, 3) = 是否有礼品 .TextMatrix(0, 4) = 是否有报纸 .TextMatrix(0, 5) = 是否有饮料 .TextMatrix(0, 6) = 是否有午餐 .TextMatrix(0, 7) = 是否提供电影 .TextMatrix(0, 8) = 是否可以改签 .TextMatrix(0, 9) = 是否可以退票 .TextMatrix(0, 10) = 是否可以打折 .TextMatrix(0, 11) = 备注信息 固定表头 .FixedRows = 1 设置各列的对齐方式 For i = 0 To 11 .ColAlignment(i) = 0 Ne
37、xt i 表头项居中 .FillStyle = flexFillRepeat .Col = 0 .Row = 0 .RowSel = 1 .ColSel = .Cols - 1 .CellAlignment = 4 设置单元大小 .ColWidth(0) = 1000 .ColWidth(1) = 1000 .ColWidth(2) = 2000 .ColWidth(3) = 1000 .ColWidth(4) = 1000 .ColWidth(5) = 1000 .ColWidth(6) = 1000 .ColWidth(7) = 1000 .ColWidth(8) = 1000 .ColW
38、idth(9) = 1000 .ColWidth(10) = 1000 .ColWidth(11) = 1000 .Row = 1 End WithEnd Sub函数ShowData把各条记录加到表格中,并显示出来,代码如下:Private Sub ShowData() Dim j As Integer Dim i As Integer Dim MsgText As String获得数据集 Set mrc = ExecuteSQL(txtSQL, MsgText) With msgList .Rows = 1 判断是否为空 Do While Not mrc.EOF 移动到下一行 .Rows =
39、 .Rows + 1 循环 For i = 1 To mrc.Fields.Count 判断是否为空 If Not IsNull(Trim(mrc.Fields(i - 1) Then 根据数据类型显示 Select Case mrc.Fields(i - 1).Type Case adDBDate .TextMatrix(.Rows - 1, i) = Format(mrc.Fields(i - 1) & , yyyy-mm-dd) Case Else .TextMatrix(.Rows - 1, i) = mrc.Fields(i - 1) & End Select End If Next
40、 I 移动到下一条记录 mrc.MoveNext Loop End With 关闭数据集对象 mrc.CloseEnd Sub在窗体显示时,可以控制窗体中各个控件按照要求的位置显示。可以在窗体的Resize事件中加入代码,代码如下:Private Sub Form_Resize() 判断当前窗体所处的状态,当前窗体不处于最小化状态并且主窗体不处于最小化状态时进行后面的操作 If Me.WindowState vbMinimized And fMainForm.WindowState vbMinimized Then 边界处理 If Me.ScaleHeight 10 * lblTitle.Height Then Exit Sub End If If Me.ScaleWidth lblTitle.Width + lblTitle.Width / 2 Then Exit Sub End If 控制控件的位置