
(姓名)
(浙江海洋学院 数理与信息学院 C06计算机1,浙江 舟山 316000)
摘 要
在现实生活中,人们往往要处理大量繁杂的数据。在这种情况下,利用日趋成熟的计算机技术和数据库管理技术来进行数据处理非常方便。各种信息管理软件也就随之出现了。当今的航空客运服务业发展十分迅速,它是现代生活高节奏的一个有力体现。在航空服务业中,飞机订票业务是一项重要内容,它大大方便了人们的旅行。
当前中国民航市场扩大迅速,随着生活水平的提高,越来越多的人选择飞机出行,对航空公司的服务要求的越来越高,为了适应快速发展的需求,管理大量数据,有效地稳定的管理航空公司,在此将开发一个航空公司信息管理系统,要求能通过该系统为顾客提供航班查询,购买机票以及退票的服务。
本文是软件工程设计航空公司信息管理系统的开发说明,重点运用软件工程知识对系统进行分析、设计实现和测试的思想的具体描述,其中包括软件生命周期的三个主要方面:软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码、测试)和运行维护。通过实际的运用软件工程知识处理问题,加强程序的规范性、清晰性、可靠性,并且使得程序易于维护。本软件使用JAVA进行编写,具有良好的兼容性且易于实现。本系统操作简洁容易上手、结构简单、查找方便、实用性强。
【关键词】:航空公司信息管理,软件工程,Java
1. 概述
1.1 软件工程的概述
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。
软件工程的目标是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。
生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。
1.2 航空公司信息管理系统的产生背景
在现代社会,人们的生活节奏越来越快,如何提高生产生活质量成为人们日益关注的话题。二十一世纪是一个信息化技术高度发达的时代,信息化技术已经深入社会生活的各个领域。在当今激烈的市场竞争中,谁掌握着信息的控制权,谁就掌握着主动权,现代企业的竞争就是一个例证。在现代大型企业中,仅靠人力对企业进行管理不仅效率低下,有时甚至是根本不可能完成的一项任务。因此,必须借助信息技术的发展,对企业的各项事务实施信息化管理,以提高工作效率和可靠性,这也是建立现代化企业的要求和时代发展的必然趋势。
在信息技术还不是十发达的时代,人们在要旅行的时候,必须到车站或是机场的售票处临时买票,或者提前好几天到离居住地很远的地方事先将票买好。在这种情况下,人们不知道是否能按预期买到票。在旅行旺季的时候,有时耽误了大量的时间也没将票买好,给人们的出行带来了很大的不便。
随着信息技术的日趋成熟,航空业务随之产生。现在,人们如果要外出旅行,可以提前将机票预订好。而且更为方便的是,人们不必亲自到机场买票,因为很多地方都有提供订票业务。这大大方便了人们的外出旅行和工作,提高了服务质量和效率。
1.3 航空公司信息管理系统的概述
一般来说一个好的营运的航空公司需要管理所拥有的飞机、航线的设置、客户的信息等,更重要的还要提供票务管理。面对各种不同种类的信息,需要合理的数据库结构来保存数据信息以及有效的程序结构支持各种数据操作的执行。本设计讲述如何建立一个航空公司信息管理系统。系统开发的总体任务是实现各种信息的系统化、规范化和自动化。一般而言,航空公司的管理系统应该包括人事管理系统、设备管理系统和航班管理系统 。由于时间有限,在此先实现航班管理系统,其他模块暂不实现。作为一个订票系统,其服务的对象是双方面的:航空公司和乘客。因此,一个好的信息管理系统,必须让双方在使用时都快捷方便。本系统采用Java为设计语言,界面设计简洁而实用,操作简单。JCreator的开发环境使得本系统的开发简单节省时间,而且在运行测试以及维护等方面也不像其他的开发工具来得繁琐,更减少了在维护方面的成本。
本系统主要实现的功能有:查询航线(根据旅客提出的终点站名输出下列信息:航班号,飞机号,星期几飞,最近一天航班的日期和余票量。),订票(根据客户提出的要求如航班号,所需票数来查询该航班的票额情况,若尚有余票,则为客户办理订票手续;若已满员或余票额少于订票额,则需重新询问客户要求,若需要可登记排队候补。),退票(根据客户提供的情况日期和航班,为客户办理退票手续,然后查询该航班,是构有人排队候补,首先询问排在第一的客户,若退票额能满足他的要求,则为他办理订票手续,否则一次询问其他候补客户。)
2. 航空公司信息管理系统的分析
2.1 问题定义
问题定义阶段必须确定系统应该做什么,一般应通过对客户的访问调查,让系统分析员扼要地写出关于问题性质、工作目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。由于此次程序实现的功能较少且简单,只是实现了用户对航班信息的查询,订票和退票的简单操作,因此跳过。
2.2 可行性研究
2.2.1 技术可行性
Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的Hot Java浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。
Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。
Java具有一下特点:
1、Java语言是简单的。Java从C++演变而来,保留了C++的许多优点,去除了C++中易产生错误的功能,简化了内存管理,减轻了程序员进行内存管理的负担。
2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制。Java语言全面支持动态绑定, Java语言是一个纯的面向对象程序设计语言。
3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口,它提供了用于网络应用编程的类库。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。Java对通过网络下载的类具有一个安全防范机制,并提供安全管理机制让Java应用设置安全哨兵。
6、Java语言是体系结构中立的。Java程序在Java平台上被编译为体系结构中立的字节码格式,然后可以在实现这个Java平台的任何系统中运行。
7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性。
8、Java语言是解释型的。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
10、Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。线程的活动由一组方法来控制,Java语言支持多个线程的同时执行,并提供多线程之间的同步机制。
11、Java语言是动态的。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
本系统采用java作为开发语言,来实现安全的、多线程的、可移植航空定票系统,并且降低开发难度。
2.2.2 经济可行性
本系统实现的功能较少且简单,所以在开发的过程中基本上不需要考虑什么成本,开发人员已尽可能的减少。使用较成熟的开发工具也减少不必要的支出,只需用很小的代价便可开发完毕。使用本系统的用户只需在短时间内就可以获得个人所需的信息,并获得需要的服务。这点与传统的人工服务相比,效率得到了很大的提升,无论是对用户还是公司都节省了大量的时间,带来很大的方便,并且省去了雇佣员工的费用。软件的经济效益大大的超过了它的开发成本,所以开发本软件在经济上是可行的。
2.2.3 操作可行性
本系统采用的是直观的图形用户界面,用户进入航空公司信息管理系统的主界面后,有查询、订票和退票这三个操作按钮可供用户选择,各个界面简洁,操作方便,容易上手,更有提示信息。航班的查询只要在查询界面按提示输入信息,然后在界面显示相应的信息。预订机票只要在订票界面输入提示信息,就可预订成功,如果预订数量超过余票量,则系统提示,请从新预订。退票则只要在退票界面按提示输入信息,系统核对过正确后,就可确认退票。总体来说,程序操作简单,数据显示直观。
另外,从法律方面来看,该系统的开发只运用于学习中,它不存在法律问题,也可以说是完全合法的,完全可行的。从社会效益方面来看,该系统的应用有利于航空客运业的发展,提高它的经济效益,同时促进社会经济的发展。
2.3 需求分析
2.3.1 确定对系统的综合要求
1.功能需求:航空公司信息管理系统必须完成的功能是:对机票的查询、订票和退票的简单管理操作,系统的实现采用直观的图形用户界面,用户进入航空公司信息管理系统的主界面后,有查询、订票和退票这三个操作界面可供用户选择,各个界面简洁,操作方便,容易上手。用户可以对航班进行详细的信息查询,然后根据需求进行订票和退票(整个程序运行过程中,对用户不当的操作将提出错误警告)。
2.性能需求:为了保证系统能够长期、安全、稳定、可靠、高效的运行,系统应该满足以下的性能需求:系统处理的准确性和及时性是系统的必要性能,航空公司信息管理系统在开发过程中,应该充分考虑以后的可扩充性,要求系统提供足够的手段进行功能的调整和扩充。
2.3.2 分析建模
1、对象模型
程序中建立了四个类,类图如图2-1所示:
图2-1 类图
2、功能模型
数据流图如图2-2所示:
图2-2 数据流图
系统用例图如图2-3所示:
3、动态模型
主要状态转换图如下:
2.2.3 系统逻辑模型
航班信息实体E-R图
图2-7航班信息实体E-R图
用户信息实体E-R图
图2-8 用户信息实体E-R图
3. 航空公司信息管理系统的系统设计
3.1 总体设计
3.1.1 软件层次结构图
图3-1软件层次结构图
3.1.2 IPO图
图3-2 主模块的IPO图
3.2 详细设计
3.2.1 软件程序流程图
软件具体工作流程:查询,首先查询航班信息,填写终点站;然后对用户填写的数据信息进行核对处理,如果不符合就提示错误,如果符合要求就显示信息。订票,首先填写航班号和订票数;然后对用户填写的数据信息进行核对处理,如果不符合就提示错误,或者余票量不够,进入排队候补登记,如果符合要求就进入订票界面,最后填写用户个人信息确定订票。退票,首先填写日期和航班号,然后对用户填写的数据信息进行核对处理,如果不符合就提示错误,如果符合要求就进入退票界面,最后填写用户个人信息和退票数确定退票。
程序流程图如下:
图3-6 程序流程图
3.2.2 主要功能盒图设计
图3-7 软件启动盒图
图3-8 查询操作盒图
图3-9 订票操作盒图
图3-10 退票操作盒图
3.2.3 出错处理设计
程序在运行时主要会出现两种错误:(1)由于输入信息,或无法满足要求时产生的错误,称为软错误。(2)由于其他问题,如计算机软件故障、模块语句错误等,产生的问题,称为硬错误。
对于软错误,须在查询操作成功判断及输入数据验证模块由数据进行数据分析,判断错误类型,再生成相应的错误提示语句,送到输出模块中。
对与硬错误,可在出错的相应模块中输出简单的出错语句,并将程序重置。返回输入阶段。出错信息必须给出相应的出错原因。
4.航空公司信息管理系统的编码和测试
4.1 系统编码
4.1.1 软件的界面
首先是启动系统的总模块,由此进入各个操作模块。
界面截图:
代码:
public FlightBook()
//构造函数
{
super("航空订票");
this.setSize(600,400);
this.setLocation(300,240);
this.setResizable(false);
this.setVisible(true);
this.setLayout(new BorderLayout());
JPanel panel=new JPanel(new GridLayout(11,1));
this.add(panel,BorderLayout.WEST);
this.setBackground(Color.blue);
button_ask=new JButton("查询");
panel.add(button_ask);
button_ask.addActionListener(this);
button_book=new JButton("订票");
panel.add(button_book);
button_book.addActionListener(this);
button_cancel=new JButton("退票");
panel.add(button_cancel);
button_cancel.addActionListener(this);
text_user=new JTextArea();
this.add(text_user,BorderLayout.CENTER);
frame_cx=new JFrame("输入");
//查询输入框
frame_cx.setSize(280,120);
frame_cx.setResizable(false);
frame_cx.setBackground(Color.LIGHT_GRAY);
frame_cx.setLayout(new FlowLayout());
frame_cx.add(new JLabel("终点站:"));
text_field1=new JTextField(20);
frame_cx.add(text_field1);
button_ok1=new JButton("ok");
frame_cx.add(button_ok1);
button_ok1.addActionListener(this);
frame_cx.addWindowListener(this);
frame_dp=new JFrame("输入");
//订票输入框
frame_dp.setSize(350,150);
frame_dp.setResizable(false);
frame_dp.setBackground(Color.LIGHT_GRAY);
frame_dp.setLayout(new FlowLayout());
frame_dp.add(new JLabel(" 航班号:"));
text_field2=new JTextField(20);
frame_dp.add(text_field2);
frame_dp.add(new JLabel(" 订票数:"));
text_field3=new JTextField(20);
frame_dp.add(text_field3);
button_ok2=new JButton("确定");
frame_dp.add(button_ok2);
button_ok2.addActionListener(this);
frame_dp.addWindowListener(this);
frame_tp=new JFrame("输入");
//退票输入框
frame_tp.setSize(350,150);
frame_tp.setResizable(false);
frame_tp.setBackground(Color.LIGHT_GRAY);
frame_tp.setLayout(new FlowLayout());
frame_tp.add(new JLabel(" 日期 :"));
text_field4=new JTextField(20);
frame_tp.add(text_field4);
frame_tp.add(new JLabel(" 航班号:"));
text_field5=new JTextField(20);
frame_tp.add(text_field5);
button_ok3=new JButton("正确");
frame_tp.add(button_ok3);
button_ok3.addActionListener(this);
frame_tp.addWindowListener(this);
dialog_cx=new JDialog(this,"提示",true);
//提示查询输入航线未开通错误
dialog_cx.setSize(240,80);
label=new JLabel("此站点未开通航线,请重新输入!");
dialog_cx.add(label);
dialog_cx.setLayout(new FlowLayout(FlowLayout.CENTER));
dialog_cx.addWindowListener(this);
frame_dpsx=new JFrame("订票手续");
//订票手续
frame_dpsx.setSize(250,200);
frame_dpsx.setResizable(false);
frame_dpsx.setBackground(Color.LIGHT_GRAY);
frame_dpsx.setLayout(new FlowLayout(FlowLayout.CENTER));
frame_dpsx.add(new JLabel(" 姓名 :"));
text_fielddp_name=new JTextField(10);
frame_dpsx.add(text_fielddp_name);
frame_dpsx.add(new JLabel(" 航班号 :"));
text_fielddp_hbh=new JTextField(10);
frame_dpsx.add(text_fielddp_hbh);
frame_dpsx.add(new JLabel(" 订票数 :"));
text_fielddp_number=new JTextField(10);
frame_dpsx.add(text_fielddp_number);
frame_dpsx.add(new JLabel("联系方式 :"));
text_fielddp_lxfs=new JTextField(10);
frame_dpsx.add(text_fielddp_lxfs);
button_tj=new JButton("提交");
frame_dpsx.add(button_tj);
button_tj.addActionListener(this);
frame_djsx=new JFrame("登记手续");
//登记手续
frame_djsx.setSize(250,200);
frame_djsx.setResizable(false);
frame_djsx.setBackground(Color.LIGHT_GRAY);
frame_djsx.setLayout(new FlowLayout(FlowLayout.CENTER));
frame_djsx.add(new JLabel(" 姓名 :"));
text_fielddj_name=new JTextField(10);
frame_djsx.add(text_fielddj_name);
frame_djsx.add(new JLabel(" 航班号 :"));
text_fielddj_hbh=new JTextField(10);
frame_djsx.add(text_fielddj_hbh);
frame_djsx.add(new JLabel(" 订票数 :"));
text_fielddj_number=new JTextField(10);
frame_djsx.add(text_fielddj_number);
frame_djsx.add(new JLabel("联系方式 :"));
text_fielddj_lxfs=new JTextField(10);
frame_djsx.add(text_fielddj_lxfs);
button_wc=new JButton("完成");
frame_djsx.add(button_wc);
button_wc.addActionListener(this);
frame_tpsx=new JFrame("退票手续");
//退票手续
frame_tpsx.setSize(250,200);
frame_tpsx.setResizable(false);
frame_tpsx.setBackground(Color.LIGHT_GRAY);
frame_tpsx.setLayout(new FlowLayout(FlowLayout.CENTER));
frame_tpsx.add(new JLabel(" 姓名 :"));
text_fieldtp_name=new JTextField(10);
frame_tpsx.add(text_fieldtp_name);
frame_tpsx.add(new JLabel(" 航班号 :"));
text_fieldtp_hbh=new JTextField(10);
frame_tpsx.add(text_fieldtp_hbh);
frame_tpsx.add(new JLabel(" 退票数 :"));
text_fieldtp_number=new JTextField(10);
frame_tpsx.add(text_fieldtp_number);
frame_tpsx.add(new JLabel("联系方式 :"));
text_fieldtp_lxfs=new JTextField(10);
frame_tpsx.add(text_fieldtp_lxfs);
button_cg=new JButton("成功");
frame_tpsx.add(button_cg);
button_cg.addActionListener(this);
dialog_dpwk=new JDialog(this,"提示",true);
//提示订票输入未开通航线错误
dialog_dpwk.setSize(350,80);
label=new JLabel("此站点未开通航线,请查询后重新输入!");
dialog_dpwk.add(label);
dialog_dpwk.setLayout(new FlowLayout(FlowLayout.CENTER));
dialog_dpwk.addWindowListener(this);
dialog_dpyk=new JDialog(this,"提示",true);
//提示订票输入票额不足错误
dialog_dpyk.setSize(350,150);
label1=new JLabel("此站点已满员或余票不足,请查询后重新输入!");
dialog_dpyk.add(label1);
label2=new JLabel(" 若需要,可登记排队候补");
dialog_dpyk.add(label2);
button_sq=new JButton("登记");
button_sq.addActionListener(this);
dialog_dpyk.add(button_sq);
dialog_dpyk.setLayout(new FlowLayout(FlowLayout.CENTER));
dialog_dpyk.addWindowListener(this);
dialog_tpts=new JDialog(this,"提示",true);
//提示退票输入日期和航班号矛盾错误
dialog_tpts.setSize(350,80);
label=new JLabel("您输入的日期无此航班号,请查询后重新输入!");
dialog_tpts.add(label);
dialog_tpts.setLayout(new FlowLayout(FlowLayout.CENTER));
dialog_tpts.addWindowListener(this);
d=new JDialog(this,"提示",true);
//当退票满足客户,提示联系该客户
d.setSize(350,150);
d.setLayout(new FlowLayout(FlowLayout.CENTER));
d.addWindowListener(this);
this.addWindowListener(this);
this.setVisible(true);
}
4.1.2 软件的查询、订票和退票模块
查询截图:
查询成功截图:
订票截图:
退票截图:
代码:
public void actionPerformed(ActionEvent e)
{
String s=e.getActionCommand();
if(s=="查询")
{
frame_cx.setLocation(this.getX()+100,this.getY()+100);
frame_cx.setVisible(true);
}
if(s=="订票")
{
frame_dp.setLocation(this.getX()+100,this.getY()+100);
frame_dp.setVisible(true);
}
if(s=="退票")
{
frame_tp.setLocation(this.getX()+100,this.getY()+100);
frame_tp.setVisible(true);
}
if(s=="ok")
{
if(text_field1.getText().toString().trim().equals("北京"))
{
text_user.append("地点:"+F_name[0]+" 航班号:"+H_number[0]+" 飞机号:"+F_number[0]+" 时间:"+time[0]+" 价格:"+Price[0]+" 余票量:"+Count[0]+"\\n");
}
else if(text_field1.getText().toString().trim().equals(""))
{
text_user.append("地点:"+F_name[1]+" 航班号:"+H_number[1]+" 飞机号:"+F_number[1]+" 时间:"+time[1]+" 价格:"+Price[1]+" 余票量:"+Count[1]+"\\n");
}
else if(text_field1.getText().toString().trim().equals("澳门"))
{
text_user.append("地点:"+F_name[2]+" 航班号:"+H_number[2]+" 飞机号:"+F_number[2]+" 时间:"+time[2]+" 价格:"+Price[2]+" 余票量:"+Count[2]+"\\n");
}
else if(text_field1.getText().toString().trim().equals("纽约"))
{
text_user.append("地点:"+F_name[3]+" 航班号:"+H_number[3]+" 飞机号:"+F_number[3]+" 时间:"+time[3]+" 价格:"+Price[3]+" 余票量:"+Count[3]+"\\n");
}
else if(text_field1.getText().toString().trim().equals("悉尼"))
{
text_user.append("地点:"+F_name[4]+" 航班号:"+H_number[4]+" 飞机号:"+F_number[4]+" 时间:"+time[4]+" 价格:"+Price[4]+" 余票量:"+Count[4]+"\\n");
}
else
{
dialog_cx.setLocation(this.getX()+100,this.getY()+100);
dialog_cx.setVisible(true);
}
frame_cx.setVisible(false);
}
if(s=="确定") {
String Hnumber=text_field2.getText().toString().trim();
int Dcount=Integer.parseInt(text_field3.getText().toString().trim());
if(Hnumber.equals("CAC")||Hnumber.equals("cac"))
{
if(Dcount<=Count[0])
{
Count[0]-=Dcount;
frame_dpsx.setLocation(this.getX()+100,this.getY()+100);
frame_dpsx.setVisible(true);
}
else
{
dialog_dpyk.setLocation(this.getX()+100,this.getY()+100);
dialog_dpyk.setVisible(true);
}
}
else if(Hnumber.equals("CFC")||Hnumber.equals("cfc")&&Dcount<=Count[1])
{
if(Dcount<=Count[1])
{
Count[0]-=Dcount;
frame_dpsx.setLocation(this.getX()+100,this.getY()+100);
frame_dpsx.setVisible(true);
}
else
{
dialog_dpyk.setLocation(this.getX()+100,this.getY()+100);
dialog_dpyk.setVisible(true);
}
}
else if(Hnumber.equals("CDA")||Hnumber.equals("cda")&&Dcount<=Count[2])
{
if(Dcount<=Count[2])
{
Count[0]-=Dcount;
frame_dpsx.setLocation(this.getX()+100,this.getY()+100);
frame_dpsx.setVisible(true);
}
else
{
dialog_dpyk.setLocation(this.getX()+100,this.getY()+100);
dialog_dpyk.setVisible(true);
}
}
else if(Hnumber.equals("CCX")||Hnumber.equals("ccx")&&Dcount<=Count[3])
{
if(Dcount<=Count[3])
{
Count[0]-=Dcount;
frame_dpsx.setLocation(this.getX()+100,this.getY()+100);
frame_dpsx.setVisible(true);
}
else
{
dialog_dpyk.setLocation(this.getX()+100,this.getY()+100);
dialog_dpyk.setVisible(true);
}
}
else if(Hnumber.equals("MCM")||Hnumber.equals("mcm")&&Dcount<=Count[4])
{
if(Dcount<=Count[4])
{
Count[0]-=Dcount;
frame_dpsx.setLocation(this.getX()+100,this.getY()+100);
frame_dpsx.setVisible(true);
}
else
{
dialog_dpyk.setLocation(this.getX()+100,this.getY()+100);
dialog_dpyk.setVisible(true);
}
}
else
{
dialog_dpwk.setLocation(this.getX()+100,this.getY()+100);
dialog_dpwk.setVisible(true);
}
frame_dp.setVisible(false);
}
if(e.getActionCommand()=="提交")
{
frame_dpsx.setVisible(false);
}
if(e.getActionCommand()=="登记")
{
dialog_dpyk.setVisible(false);
frame_djsx.setLocation(this.getX()+100,this.getY()+100);
frame_djsx.setVisible(true);
}
if(e.getActionCommand()=="完成")
{
int Wait_number=Integer.parseInt(text_fielddj_number.getText().toString().trim());
Wait_name[Wait_i]=text_fielddj_name.getText().toString().trim();
Wait_hbh[Wait_i]=text_fielddj_hbh.getText().toString().trim();
Wait_count[Wait_i]=Wait_number;
Wait_xl[Wait_i]=Wait_i;
Wait_lxfs[Wait_i]=text_fielddj_lxfs.getText().toString().trim();
frame_djsx.setVisible(false);
text_user.append("登记姓名 :"+Wait_name[Wait_i]+" 登记航班号 :"+Wait_hbh[Wait_i]+" 登记订票数量 :"+Wait_count[Wait_i]+" 联系方式 :"+Wait_lxfs[Wait_i]+"\\n");
Wait_i++;
}
if(e.getActionCommand()=="正确") {
String a=text_field4.getText().toString().trim();
String b=text_field5.getText().toString().trim();
if(a.equals("周三
")&&b.equals("cfc")||b.equals("CFC")||b.equals("ccx")||b.equals("CCX"))
{
frame_tpsx.setLocation(this.getX()+100,this.getY()+100);
frame_tpsx.setVisible(true);
}
else if(a.equals("周日
")&&b.equals("cda")||b.equals("CDA")||b.equals("mcm")||b.equals("MCM"))
{
frame_tpsx.setLocation(this.getX()+100,this.getY()+100);
frame_tpsx.setVisible(true);
}
else if(a.equals("周五")&&b.equals("cac")||b.equals("CAC"))
{
frame_tpsx.setLocation(this.getX()+100,this.getY()+100);
frame_tpsx.setVisible(true);
}
else
{
dialog_tpts.setLocation(this.getX()+100,this.getY()+100);
dialog_tpts.setVisible(true);
}
frame_tp.setVisible(false);
}
if(e.getActionCommand()=="成功")
{
int i=0;
int j=0;
String c=text_fieldtp_hbh.getText().toString().trim();
int Numb=Integer.parseInt(text_fieldtp_number.getText().toString().trim());
frame_tpsx.setVisible(false);
if( c.equals("cac")||c.equals("CAC")) {
Count[0]+=Numb;
if(Wait_i>0)
{
for(i=0;i if(Wait_hbh[i].equals("cac")||Wait_hbh[i].equals("CAC")&&Wait_count[i]<=Count[0]) { j=i+1; label=new JLabel(j+"号客户: "+Wait_name[i]+" 满足订票要求,联系方式是:"+Wait_lxfs[i]); d.add(label); d.setLocation(this.getX()+100,this.getY()+100); d.setVisible(true); } } } } else if( c.equals("cfc")||c.equals("CFC")) { Count[1]+=Numb; if(Wait_i>0) { for(i=0;i if(Wait_hbh[i].equals("cfc")||Wait_hbh[i].equals("CFC")&&Wait_count[i]<=Count[0]) { j=i+1; label=new JLabel(j+"号客户: "+Wait_name[i]+" 满足订票要求,联系方式是:"+Wait_lxfs[i]); d.add(label); d.setLocation(this.getX()+100,this.getY()+100); d.setVisible(true); } } } } else if( c.equals("cda")||c.equals("CDA")) { Count[2]+=Numb; if(Wait_i>0) { for(i=0;i if(Wait_hbh[i].equals("cda")||Wait_hbh[i].equals("CDA")&&Wait_count[i]<=Count[0]) { j=i+1; label=new JLabel(j+"号客户: "+Wait_name[i]+" 满足订票要求,联系方式是:"+Wait_lxfs[i]); d.add(label); d.setLocation(this.getX()+100,this.getY()+100); d.setVisible(true); } } } } else if( c.equals("ccx")||c.equals("CCX")) { Count[3]+=Numb; if(Wait_i>0) { for(i=0;i if(Wait_hbh[i].equals("ccx")||Wait_hbh[i].equals("CCX")&&Wait_count[i]<=Count[0]) { j=i+1; label=new JLabel(j+"号客户: "+Wait_name[i]+" 满足订票要求,联系方式是:"+Wait_lxfs[i]); d.add(label); d.setLocation(this.getX()+100,this.getY()+100); d.setVisible(true); } } } } else if( c.equals("mcm")||c.equals("MCM")) { Count[4]+=Numb; if(Wait_i>0) { for(i=0;i if(Wait_hbh[i].equals("mcm")||Wait_hbh[i].equals("MCM")&&Wait_count[i]<=Count[0]) { j=i+1; label=new JLabel(j+"号客户: "+Wait_name[i]+" 满足订票要求,联系方式是:"+Wait_lxfs[i]); d.add(label); d.setLocation(this.getX()+100,this.getY()+100); d.setVisible(true); } } } } } } 4.2 系统测试 信息技术深深融入业务生活,使得软件产品质量的要求变得很高。这也使我们为提高软件测试的效率来寻求各式各样的方法。而软件测试的方法和技术是多种多样的。对于软件测试技术,可以从不同的角度加以分类:按测试阶段可分为:单元测试、集成测试、确认测试。 测试任何产品都有两种方法:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;如果知道产品的内部过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。前一种方法称为黑盒测试,后一种方法成为白盒测试。 4.2.1 黑盒测试的内容 功能测试也称为黑盒测试,用于验证系统的各项功能是否能正常完成。由于实际情况的多样性,需要由多人重复测试,在不同情况下执行各项功能操作,其输出就是该功能的执行结果。黑盒测试着重测试软件功能。黑盒测试并不能取代白盒测试,它是与白盒测试互补的测试方法,它很可能发现白盒测试不易发现的其他类型错误。 黑盒测试发现下述类型错误: (1)功能不正确或遗漏了功能。 (2)界面错误。 (3)数据结构错误或外部数据库访问错误。 (4)性能错误。 (5)初始化和终止错误。 4.2.2 使用黑盒测试的情况分析 采用等价划分的有效等价类和无效等价类进行测试。 1.查询功能的测试 (1)测试数据:输入要查询的终点站:北京,单击OK。 预期的输出结果:显示终点站为北京的航班的全部信息 实际运行结果如下图所示: 运行结果符合预期情况。 (2)测试数据:输入要查询的终点站:上海,单击OK。 预期的输出结果:提示此站点未开通航线,请重新输入! 实际运行结果如下图所示: 运行效果符合预期情况。 2.订票功能的测试 (1)测试数据:输入航班号:CAC,订票数:3,单击确定。 预期的输出结果:显示订票手续对话框 实际运行结果如下图所示: 运行效果符合预期情况。 (2)测试数据:输入航班号:CAM,订票数:3,单击确定。 预期的输出结果:提示此站点未开通航线,请查询后重新输入! 实际运行结果如下图所示: 运行效果符合预期情况。 (3)测试数据:输入航班号:CAC,订票数:100,单击确定。 预期的输出结果:提示此站点已满或余票不足,请查询后重新输入! 实际运行结果如下图所示: 运行效果符合预期情况。 3.退票功能的测试 (1)测试数据:输入日期:周五,航班号:CAC,单击确定。 预期的输出结果:显示退票手续对话框 实际运行结果如下图所示: 运行效果符合预期情况。 (1)测试数据:输入日期:周二,航班号:CAC,单击确定。 预期的输出结果:提示您输入的日期无此航班号,请查询后重新输入! 实际运行结果如下图所示: 运行效果符合预期情况。 5.总结 本设计实现了航空公司信息管理系统的一些简单功能,设计了3个简单的人机交互界面,本软件的设计是由JAVA语言实现。主要实现的功能有:航空信息的查询、订票和退票。 通过航空公司信息管理系统的设计,感觉动手能力增强了很多,JAVA编程能力有了比较大的提升。设计本系统,是对自己专业知识的一次检验,也是一次增强自身综合素质机会。软件工程这门课程将我们从局部的编写程序带入了整体开发软件的阶段,这是对我们知识与能力的一种挑战。本文是软件工程设计航空公司信息管理系统的开发说明,重点描述运用软件工程知识对系统进行分析、设计和实现的思想,其中包括软件生命周期的三个主要方面:软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码、测试)和运行维护。通过对开发本系统的文档的书写,更进一步学习了软件开发的全过程,把软件工程知识与实际开发软件相结合,规范了实际开发软件程序的全过程,为将来的毕业设计做准备。 总之,本次设计锻炼了实践能力,增长了我发现问题、解决问题的能力,大大丰富了自己的专业知识和技能。由于各种原因,系统的功能还没有得到进一步的完善,以后会继续努力,在今后的学习过程中,不断地提高自己。 参考文献 [1] 张海藩,软件工程导论(第5版),清华大学出版社,2008 [2] 史济民,软件工程—原理、方法与应用,高等教育出版社,2002 [3] 周苏,王文,软件工程学教程,科学出版社,2004 [4] 郑人杰,实用软件工程,清华大学出版社,2002 [5] 张湘辉等,软件开发的过程与管理,清华大学出版社,2005 [6] 陈松乔,任胜兵,王,现代软件工程 [M],清华大学出版社,2004 [7] 薛德黔等,软件工程,科学出版社,2005 [8] 郭宁,软件工程实用教程,人民邮电出版社,2006 [9] 汤一平,Java语言程序设计,科学出版社,2006 [10] 孙卫琴,java面向对象编程[M],电子工业出版社, 2006
