软件工程课程设计
成都创新互联专注于泰兴企业网站建设,成都响应式网站建设,商城系统网站开发。泰兴网站建设公司,为泰兴等地区提供建站服务。全流程定制网站设计,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
一、 课程设计题目:
航空公司机票预订系统。
二、 课程设计内容简要分析:
航空公司为方便旅客,需开发一个机票预定系统。为便于旅客由旅行社代替航空公司负责为旅客定票,旅行社把预定机票的旅客信息,包括姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地,输入机票预定系统的客户端程序,系统经过查询航空公司内的航班数据服务器后,为旅客安排航班,印出取票通知。旅客在飞机起飞前一天凭取票通知和帐单交款后取票,系统校对无误后即印出机票给旅客。
要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要求客户机的界面要简单明了,易于操作,服务器程序利于维护。
三、主要设计过程:
1、问题定义:
航空运输现在已经逐渐成为我国运输事业的重要手段,但是对于航空运输来说,天气或人为的种种的因素,会给航空机票的预定和退订带来困难,特别是对于机票的预定和退订的条理性、及时性和准确性,也同样带来巨大的困难。
对以上的问题,完全可以建立一套完整的航空公司机预定系统,来对信息进行录入、查询、订票、退票等日常管理工作,尽量少的人员介入和数据冗余,以简练实用为基础,实现信息管理计算机化,提高工作效率和信息化水平。
2、可行性分析:
可行性分析对系统的开发至关重要,可以大幅减少不必要的损失,保证系统开发的顺利进行。可以从技术可行性、经济可行性、操作可行性三方面进行系统可行性分析:
2.1、技术可行性:
这些年来,计算机技术的发展异常迅猛,而绝大多数的企业和单位,都已经把计算机作为信息和数据处理、保存和管理的重要工具。
Java是Sun Microsystem公司的James Gosling开发的编程语言。它以C++为基础,但是却是一个全新的软件开发语言。Java是一个简单,面象对象、分布式、解释性、强壮、安全,与系统无关、可移植、高性能、多线程和动态的语言,利用Java就可以编制出程序接口好、图形界面优美的管理系统。同时,微软公司开发的SOL Server 2000,为数据库的开发和管理带来了极大的方便。
2.2、经济可行性:
一方面,对于新系统的开发和研究,不需要花费更多的费用,而且对于人员的培训,不同样不需要花费很多;另一方面,航空公司的原有服务器和计算机系统,同样可以用来使用,不需要更新系统。
2.3、操作可行性:
对于用Java开发的本系统,通过简单的学习就可以熟练操作,同时,对于票务的管理,也同样因为本系统的高效性、及时性和方便性而易于管理。
通过以上的分析,航空公司机票预定系统在经济上、技术上、操作上都是可行的。
3、 需求分析:
需求分析阶段的主要目标是准确了解用户对未来软件的系统结构的需求,是发现、求精、建模、规格说明和复审过程。
在需求分析中,可以采用主要流程和数据流程图来描述。
3.1、该系统主要要完成的流程为:
a) 录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
b) 查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
c) 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
d) 退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
3.2、数据流程图:
数据流程图是描绘信息流和数据从输入移动到输出的过程中所经历的变换。是一种能全面描述信息系统逻辑模型的主要工具,也是系统分析人员与用户进行交流的有效手段。
旅客的订票流程图如下:
旅客取票的流程图如下:
订票旅客清单
打印机票
旅客信息查询
旅客
旅客
售出机票信息
4、概要设计:
4.1、本系统的设计总框图:
说明:本系统共分为两大子系统:客户定票系统和后台管理系统。
客户服务系统包含三个子系统:
1、查询系统(实现查询功能)
2、定票系统(实现定票功能)
3、退票系统(实现退票和修改功能)
后台处理系统包含三个子系统:
1、航班信息查询 (实现航班信息的查询功能)
2、航班信息修改(实现航班信息的修改、新增、删除功能)
3、乘客信息查询(实现乘客信息的查询)
两大系统共用两个数据文件:航班基本信息文件和客户定票信息文件。
4.2、客户定票系统的概要设计:
说明:
1)查询:用户可以通过输入航班号单关键字查询,飞机的起降地点和飞机的起飞时间双关键字查询两种方式进行查询。(注:结构图里查询和订票之间的连线表示客户可以由查询界面直接进入订票界面)
2)订票:客户可以直接从主界面直接进入订票界面,也可以从航班信息查询界面通过事件触发进入订票界面。客户在订票界面内填写客户基本信息和所定航班的关键信息,然后由提交事件进行信息有效性判断。如果数据有效,则修改航班基本信息,新增客户信息。
3)退票和修改:在客户正确输入交易单号,乘客姓名,身份证号的前提下,系统确定数据有效性,客户拥有退票或修改交易的权限。此时对航班基本信息数据文件和客户订票信息文件进行数据项的删除或修改。
4)客户修改的主要作用:当客户对于所定机票的航班号,数量,等级等内容需要修改时,可启动此功能。
同时,为方便客户修改过程能准确的了解航班基本信息,在客户退票界面加入了查询按钮。可以通过事件触发进入相关界面。
4.3、后台管理系统的概要设计:
说明:
1) 航班信息修改:管理人员可以通过输入航班号与日期查询该航班的基本信息 。可在查询的结果上进行修改,也可删除该条信息。所有数据修改都应在数据文件中完成,在界面上显示出来。
2) 航班信息录入:管理人员可以通过输入新的航班信息新加一条航班的基本信息。
3) 乘客信息查询:管理人员可以通过输入交易单号码,乘客姓名,乘客身份证号查询乘客的基本信息。
4.4、机票预订系统的逻辑模型如下:
航班机票信息
旅行时间
姓名
性别
旅行地点
身份证号码
工作单位
旅客
1
价格
航空公司
取票通知
帐单
订票
1 1
时间
旅行社
合适航班机票
N
订票旅客清单
售出机票信息
可售机票
等级
5、详细设计:
5.1、主界面程序流程图设计:
说明:在主界面,可以设置四个按钮以供选择:查询、订票、退票和退出。
选择不同的按钮触发不同事件。
5.2、查询系统程序流程图设计:
5.3、订票系统程序流程图设计:
5.4、 退票系统流程流程图设计:
6、实现和单元测试:
6.1、编码:
航班信息链表类核心代码:
public class FlightList implements Serializable
{
public FlightListNode firstNode; // 第一架航班的信息表
public FlightListNode lastNode; // 最后一架航班的信息表
public String name;
public int numberOfRecords; // 全天起落航班的总记录
public FlightList( String s )
{
name = s;
firstNode = lastNode = null;
}
public boolean exist( String sFlightNo, Date date ) //判断含传入航班号和日期的结点是否存在
{
FlightListNode current = firstNode; // 航班信息的第一个结点
while( current != null)
{
if( current.data.flightNum.equals( sFlightNo )
current.data.date.equals( date ) )
return false;
else
current = current.next; //当前航班号不存在时转入下一个结点
}
return true;
}
public void insertAtFront( FlightInfo insertItem ) //在链首插入结点
{
if( isEmpty() )
firstNode = lastNode = new FlightListNode( insertItem );
else
firstNode = new FlightListNode( insertItem, firstNode );
return numberOfRecords ++;
}
public void insertAtBack( FlightInfo insertItem ) //在链尾插入结点
{
if( isEmpty() )
firstNode = lastNode = new FlightListNode( insertItem );
else
lastNode = lastNode.next = new FlightListNode( insertItem );
return numberOfRecords ++;
}
public void delete( FlightInfo deleteItem ) //删除航班信息结点
{
FlightListNode deleteNode = new FlightListNode( deleteItem );
FlightListNode current = firstNode;
if( isEmpty() )
throw new EmptyListException( name );
FlightListNode temp = firstNode;
int flag = 0 ;
while( current != null )
{
if( current.data.flightNum.equals( deleteNode.data.flightNum ))
{
if( flag == 0 )
{
firstNode = firstNode.next;
}
temp.next = current.next;
break;
}
else
{
temp = current;
current = current.next;
flag ++;
}
}
numberOfRecords --;
}
}
7、软件维护:
维护方面主要为对服务器上的数据库数据进行维护。可使用 SQL SERVER 2000的数据库维护功能机制。例如,定期为数据库进行Backup,维护管理数据库死锁问题和维护数据库内数据的一致性等。
三、 主要参考文献:
1 张海潘. 软件工程导论. 北京:清华大学出版社,2005
2 赵松涛. SQL Server 2000系统管理实录. 北京:电子工业出版社, 2006
3 宋波. Java Web应用与开发教程. 北京:清华大学出版社,2006
4 孙卫琴. Java面向对象编程. 北京:电子工业出版社,2006
各个航空公司的代码是不同的。比如:AA 美国航空公司 LY 以色列空公司 AC 加拿大航空公司 MA 匈牙利航空公司等等,你要先查到航空公司代码,然后查到航班代码才能预定。
机票预定系统概要设计说明书1.引言
1.1 编写目的
在本机票预定系统项目的前一阶段,也就是需求分析阶段中,已经将系统用户对本系统的需求做了详细的阐述,这些用户需求已经在上一阶段中对航空公司、各旅行社及机场的实地调研中获得,并在需求规格说明书中得到详尽得叙述及阐明。
本阶段已在系统的需求分析的基础上,对机票预定系统做概要设计。主要解决了实现该系统需求的程序模块设计问题。包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。在以下的概要设计报告中将对在本阶段中对系统所做的所有概要设计进行详细的说明。
在下一阶段的详细设计中,程序设计员可参考此概要设计报告,在概要设计对机票预定系统所做的模块结构设计的基础上,对系统进行详细设计。在以后的软件测试以及软件维护阶段也可参考此说明书,以便于了解在概要设计过程中所完成的各模块设计结构,或在修改时找出在本阶段设计的不足或错误。 1.2 项目背景 本项目(机票预定系统)时由浙江航空公司委托,由负责开发。
机票预定系统将由两部分组成:置于个旅行社定票点的前台客户程序,以及置于航空公司的数据库服务器。本系统与其他系统的关系如下: 1.3 定义 1.3.1 专门术语
SQL SERVER: 系统服务器所使用的数据库管理系统(DBMS)。
SQL: 一种用于访问查询数据库的语言
事务流:数据进入模块后可能有多种路径进行处理。
主键:数据库表中的关键域。值互不相同。
外部主键:数据库表中与其他表主键关联的域。
ROLLBACK: 数据库的错误恢复机制。
1
1.3.2 缩写
系统:若未特别指出,统指本机票预定系统。
SQL: Structured Query Language(结构化查询语言)。
ATM: Asynchronous Transfer Mode (异步传输模式)。
1.4 参考资料 以下列出在概要设计过程中所使用到的有关资料:
1. 机票预定系统项目计划任务书 浙江航空公司 1999/3 2.机票预定系统项目开发计划 《》软件开发小组 1999/3
3.需求规格说明书 《》软件开发小组 1999/3
4.用户操作手册(初稿) 《》软件开发小组 1999/4
5.软件工程及其应用 周苏、王文等 天津科学技术出版社 1992/1
6.软件工程 张海藩 清华大学出版社 1990/11
7.Computer Network A.S.Tanenbaun Prentice Hall 1996/01
文档所采用的标准是参照《软件工程导论》沈美明著 的“计算机软件开发文档编写指南”。
2.任务概述
链接:v(括号里不是链接)iew-so(括号里不是链接)(括号里不是链接)urce:ht(括号里不是链接)tp://(括号里不是链接)ww(括号里不是链接)w.a(括号里不是链接)irch(括号里不是链接)ina(括号里不是链接).co(括号里不是链接)m.cn(括号里不是链接)/?ci(括号里不是链接)d=(括号里不是链接)GN-buy(括号里不是链接):20130221:SEM:Baidu:CHN:00(括号里不是链接)0120|fc=(括号里不是链接)k91(括号里不是链接)8988499.a151793471.u933021.pb
public class Ticket {
private int month;
private int classLevel; //1: 头等舱, 2: 经济舱
private int price;
private int basePrice = 5000; //原价
public Ticket(int month, int classLevel) {
this.month = month;
this.classLevel = classLevel;
}
public void showMeThePrice() {
//旺季月份: 4-10
if ((month = 4) (month = 10)) {
if (classLevel == 1) {
price = basePrice * 0.9;
System.out.println("Month: " + month + "; Class: " + classLevel + "; Price: " + price);
} else if (classLevel == 2) {
price = basePrice * 0.8;
System.out.println("Month: " + month + "; Class: " + classLevel + "; Price: " + price);
}
}
// 淡季月份: 1,2,3,11,12
if ((month = 1) (month = 3) || month = 11 || month = 12) {
if (classLevel == 1) {
price = basePrice * 0.5;
System.out.println("Month: " + month + "; Class: " + classLevel + "; Price: " + price);
} else if (classLevel == 2) {
price = basePrice * 0.4;
System.out.println("Month: " + month + "; Class: " + classLevel + "; Price: " + price);
}
}
}
}
测试类:
public class Test {
Ticket myTicket = new Ticket(4, 1); //例如:四月,头等舱
myTicket.showMeThePrice();//输出显示价格
...
}
以上代码全部手打,因为公司没有安装jdk,所以无法测试,你自己调试吧。