第一篇:QTP自带的飞机订票程序产品规格说明书
QTP自带的飞机订票程序
产品规格说明书
一.产品介绍
QTP是HP公司开发的功能自动化测试工具。相对于手工测试,QTP自动化测试比人工测试快得多,同时可以避免人工测试的错误,减轻了测试的工作量,给测试人来带来了极大的便利。随着测试技术的发展,自动化测试逐渐成为测试的一个重要测试工具。
二.产品面向的用户群体
专业的测试人员、企业公司测试组以及测试团队 三.产品应当遵循的标准和规范
遵守软件相关的标准、规范建立一套软件测试的管理和评判体系,从根本上保证软件测试的质量,有一定的行业规范和操作规范,脚本生成简单易懂,错误纠正符合常规测试人员的测试习惯,操作易于上手。
四.产品的功能简介
QTP自带的飞机订票程序包括登录、订票、删除等一系列功能操作,运用QTP自动化测试工具来进行登录测试和订票测试,通过检查点来实现对各种测试用例的测试,同时可以对操作进行录制和回放,并生成脚本,便于测试人员对产品进行检查。
五.操作说明
QTP自带的飞机订票程序,可实现登录测试和订票测试。
QTP自带的飞机订票程序,小图标为飞行图标。如图1-01
图1-01
登录模块
打开后可以看到登录界面,登录界面——两个文本框,三个按钮 如图1-02
图1-02 Agent Name文本框
1.登录框可以输入的登录名必须大于4个字符,小于10个字符。
当输入的字符小于4个时,不能登录成功
当输入的字符大于10个时,则光标将移动到所输入字符的初始端,如果此时继续输入字符,那么所输入的字符将会逐渐覆盖原先输入的 字符
2.输入的字符可以是数字,字母,汉字以及特殊符号。3.所输入的字符均为明文,可以看得见。4.登录名不固定可以自主输入。
Password文本框
1.密码框中可以输入的字符可以是数字,字母,汉字以及特殊符号。2.密码框中可以输入的字符必须大于4个字符,最多只能有8个字符。3.所输入的字符均加密不可见,用户所看到的只是星号(*)。4.密码固定为mercury,不区分大小写。OK按钮
登陆窗口中没有输入任何内容,或者是只输入密码时,点击此按钮会提示。如图1-03
图1-03
2.当登录名输入的字符小于4个时,点击此按钮会提示。如图1-04
图1-04 3.当输入符合规格的登录名时,并没有输入密码时,点击此按钮会提示。如图1-05
图1-05 4.当输入符合规格的登录名,及任意输入大于4个字符的密码时,点击按钮会提示。如图1-06
图1-06 5.当输入符合规格的登录名,并输入密码长度小于4个字符时,点击此按钮会提示。如图1-07
图1-07 6.当在文本框中输入的字符均不符合时,点击此按钮将会提示出以下警示框。如图1-08
图1-08 7.当输入符合规格的登录名,并输入Help中所提示的密码(不区分大小写时,则会登录成功。如图1-09
图1-09
Cancel按钮
点击此按钮整个登录窗口都会关闭,如果在点击按钮之前的路窗口 中输入的有内容,则将不会被保存。
Help按钮
不论登录窗口中是否输入有字符,点击此按钮都会提示。如图1-08
图1-08
订票模块
登陆成功后可以看到订票界面。如图2-01
图2-01
日期选择
时间的格式为月/日/年,其中空格处必须输入两个数字,其他字符均不能识别。
当输入的日期不符合常规或者输入的数字不均为两个时,点击飞行班机图标。如图2-02,会出现提示框。如图2-03
图2-02
图2-03
当输入的日期时间过早,则会出现提示框。如图2-04
图2-04 当输入的日期没有对应的航班,点击飞行班机图标时,则会出现对话框。如图2-05
图2-05 当输入的时间有对应的航班,点击飞行班机图标时,则会出现相应对话框可供选择具体航班。如图2-06
图2-06 起始地和目的地
均有下拉列表,可以自行选择,但只能选择下拉列表里所给出的地点。起始地 如图2-07,目的地 如图2-08。
图2-07
图2-08
当选择相应的航班,点击飞行班机图标时。对应在订票窗口中的航班号,登机时间,到达时间,航线,票数,所价钱以及总计都会自动生成在对话框中。如图2-09
图2-09
种类选择class 可以自行选择 头等舱first,经济舱economy,商务舱business,如图2-10。同时票价会随着选择自行改动。
图2-10
姓名填写Name 在选票的同时可以输入自己的姓名,如图2-11
图2-11
选择所买票的张数点击提交订单Insert Order,则订票成功,且自动生成订单号,同时可以删除订单Delete Order。
快捷按钮
订票窗口不但可以订票,同时可以查看某时间段的订票比例图。如图2-12
图2-12 查看Agents Order Report,在Agents Order Report 记录着订票人的信息,订票信息,以及总人数,总票数和总价。如图2-13
图2-13 菜单栏
可以根据自己的需要进行有机选择和调整,进行新建、查看、添加、删除等操作,同时对某些疑问可以在help中寻求帮助。
附:
登录模块中,当登录次数过多时,将会有警示框提示错误次数太多,不能再登录了。
订票模块中,菜单栏和快捷图形按钮可实现的功能基本相同,都可以进行新建、查看、添加、删除等操作,同时对某些疑可寻求帮助。
第二篇:QTP自带的飞机订票功能测试报告
QTP自带的飞机订票功能测试报告
课题名称
飞机订票系统功能测试报告 系/专 业
*******学院 班
级
***** 学
号
***** 学生姓名
*****
指导教师:*****
测试目标
了解熟悉QTP自动化测试工具及其基本功能,掌握QTP自动化测试的基本测试步骤,能运用QTP测试工具对系统进行简单的自动化测试。在QTP测试中能写出基本的脚本语言,以及能够对脚本语句进行编写,能够测试登录功能、订票功能。其中有判断订票是否成功、添加检查点及循环所有航班能否成功测试。
测试内容
熟悉了解飞机订票系统的基本运行流程,从登录到订票、查询、删除等一系列基本功能的操作,并能够对其中的一些功能进行测试工作。此次飞机订票系统测试内容有登录功能,其中登陆功能测试包含一个用户能否正确登录、设置参数可以进行多个用户正确和错误的登录进行测试。在订票功能中有对订票是否成功的测试、设置检查点以及循环所有航班的测试。
测试原理分析
QTP主要采用的是GUI模拟人的操作。它在模拟人的操作时会通过录制记录操作的对象及所做的操作和顺序,然后在回放时按照记录顺序操作这些对象。而在这个模拟的过程中最重要的莫过于界面对象控件的识别。
基本操作
第二步:点击QTP的执行文件
第二步:第一步完成后会出现下图的对画框,然后点击”OK”,如图1-01;
图1-01
第三步:选择“Blank Test”选项,如图1-02;
图1-02
第四步:关闭右上角的对话框,选择左上角的“Record”选项,如图1-03;
图1-03
第五步:对具体软件程序的测试有两种方法。第一种是录制并且运行测试任何一个打开的基于Windows下的应用程序,第二种是只是录制和运行QTP软件中打开的应用程序。如图1-04;
图1-04
第六步:在“application”中点击“+”按钮选择要执行程序的文件,并点击确定按钮,开始录制,如图1-05;
图1-05
登陆测试测试用例设计
针对登录模块的输入条件:用户名和密码,有以下几种情况: 1.当用户什么也没输入,直接点OK按钮,是否提示请输入用户名;
2.当用户输入正确的用户名,没输入密码,直接点击OK按钮,是否提示请输入密码;
3.对密码进行验证看是否设置输入密码的长度;
4.当输入正确的用户名和密码时,点击OK按钮是否进入操作界面;
对登录模块进行测试时,尽可能全面的测试登陆功能的正常和异常情况:只要用户名大于或等于4个字符,密码是“mercury”,即可
登录。
录制与测试过
第一步:用QTP自动打开Flight Reservation系统的登陆界面,输入用户名和密码,确定当前的操作,将订票系统打开,登陆界面如图2-01;
图2-01 第二步:在QTP主界面中单击“Record”,在登陆界面的文本框
中,输入正确的用户名和密码,单击“OK”按钮,进入飞机订票系统界面。在QTP主界面,单击“Stop”按钮,结束当前的录制,如图2-02;
图2-02
录制的脚本代码为:
'写一个循环,读取datatable的每一行测试用例 Dim i '定义变量i Dim outputvalue '定义变量实际得到的输出 Dim istatus '定义变量希望得到的输出
For i=1 to datatable.GetSheet(“Action1”).getrowcount '从第一行,读到datatable的最后一行
Dialog(“Login”).WinEdit(“Agent Name:”).Set DataTable(“AgentName”, dtLocalSheet)Dialog(“Login”).WinEdit(“Password:”).SetSecure DataTable(“Password”, dtLocalSheet)Dialog(“Login”).WinButton(“OK”).Click Dialog(“Login”).Dialog(“Flight Reservations”).Static(“Agent name must be at least 4 characters long.”).Output CheckPoint(“Agent name must be at least 4 characters long.”)Dialog(“Login”).Dialog(“Flight Reservations”).WinButton(“确定”).Click outputvalue=datatable(“outmsg”,dtlocalsheet)'获取该次循环的实际输出 istatus=datatable(“status”,dtlocalsheet)'获取该次循环的预期输出
If outputvalue<>istatus Then Reporter.ReportEvent micFail,“登录测试”,“实际的:”+outputvalue+“预期的:”+istatus+“不相同!” '报错
else Reporter.ReportEvent micPass,“登录测试”,“实际的:”+outputvalue+“预期的:”+istatus+“相同!” '报对 End If
datatable.GetSheet(“Action1”).setnextrow '获取下一行测试用例 Next Dialog(“Login”).WinButton(“Cancel”).Click Dialog(“Login_2”).WinButton(“Cancel”).Click
测试结果
通过运用QTP对飞机订票系统的测试,将已设计好的测试用例添加到QTP中,通过脚本的参数化设置,对测试用例进行自动化循环测试,如下图2-03;
图2-03 QTP对测试用例的自动化测试后,分别将可以登陆成功和不能登陆成功的测试用例进行测试,运行结果如图2-04
图2-04
订票测试
订票实例的前提是登录订票系统的成功,该实例是在订票系统中进行订票
操作:输入航班日期、选择起飞地、选择目的地、选择航班、输入顾客姓名、输入票的张数、选择航班级别、单击订票按钮,完成订票功能。
录制与测试过程
第一步:录制脚本,选择“Record”如图(3-01);
图3-01 第二步:在Agent Nname和Password中都输入Mercury点击“OK”按钮,如图3-02;
图3-02 第三步:输入飞机的时间、出发地、目的地,然后选择“Flights”选择航班,如图3-03;
图3-03
第四步:选择要乘坐飞机的航班,然后点击确定,如图3-04;
图3-04 第五步:输入顾客的姓名、票数、票的类型、点击“insert”,如图3-05;
图3-05 第六步:点击“Stop”结束录制过程,脚本录制成功,如图3-06;
图3-06 录制的脚本代码为:
Dialog(“Login”).WinEdit(“Agent Name:”).Set “mercury” Dialog(“Login”).WinEdit(“Password:”).SetSecure “50d03c65bf584d4548c5df42c75a1b2ce70a1491” Dialog(“Login”).WinButton(“OK”).Click
Dim i '定义变量i
For i=1 to datatable.GetSheet(“Action1”).getrowcount '循环datatable中若干个测试用例 Window(“Flight
Reservation”).ActiveX(“MaskEdBox”).Type DataTable(“Date”, dtLocalSheet)Window(“Flight
Reservation”).WinComboBox(“Fly
From:”).Select DataTable(“FlyFrom”, dtLocalSheet)Window(“Flight
Reservation”).WinComboBox(“Fly
To:”).Select DataTable(“FlyTo”, dtLocalSheet)Window(“Flight Reservation”).WinButton(“FLIGHT”).Click ' 日期不同,起飞地不同,目的地不同,可选择的航班是不一样的 ' 为适应这种不同,则需要从刚才现实的列表中随机选择一个 '则需要用到随机函数,首先要获取列表框中的条目个数
ItemCount=Window(“Flight Table”).WinList(“From”).GetItemsCount SelectItem=RandomNumber(0,ItemCount)'从0~ItemCount中随机选择一个数目
Window(“Flight
Reservation”).Dialog(“Flights Reservation”).Dialog(“Flights Table”).WinList(“From”).Select SelectItem Window(“Flight Table”).WinButton(“OK”).Click Window(“Flight Reservation”).WinEdit(“Name:”).Set “lixiao” Window(“Flight Reservation”).WinRadioButton(“Business”).Set Window(“Flight Reservation”).WinButton(“Insert Order”).Click Window(“Flight Reservation”).WinButton(“Button”).Click
datatable.GetSheet(“Action1”).setnextrow '读取下一行 Next Window(“Flight Reservation”).Close
Reservation“).Dialog(”Flights
测试结果
通过运用QTP对飞机订票系统的测试,将已设计好的测试用例添加到QTP中,通过脚本的参数化设置,对测试用例进行自动化循环测试,如下图3-07;
图3-07 QTP对测试用例的自动化测试后,对订票参数的测试用例进行测试,测试结果如图3-08
图3-08 分析与建议
功能较少,但基本上满足了飞机订票的需求,但是建议一般用户也能对系统进行访问,查看自己的订票。没有连到外网,只是在本机进行测试,建议在互联网进行功能等测试。
飞机订票系统测试小结
通过对QTP飞机订票系统从需求分析到执行测试,从录制脚本到脚本分析结果,使得我对以前所学习的软件测试方面的知识有了更好的理解,实践中才能更深入的理解掌握知识。在此期间我了解和认识了软件测试技术和QTP自动化测试工具,并且学习了QTP工具的使用。现在已经能很熟练的使用QTP测试工具。使用QTP可以加速测试的整个过程,并且建置完新版本的应用程序后网站后,可以重复使用测试脚本进行测试。
第三篇:4 飞机订票系统系统概要设计说明书
文档编号: 版本号:V1.0
概要设计说明书
项目名称
飞机订票系统 项目负责人
何柳青 本文档编写者 李欣纯 项目开发者 计算机081第二组
2010年11月7日 目录
1.引言.....................................................................1
1.1 编写目的......................................................................................................................................1 1.2 背景.............................................................................................................................................1 1.3 定义.............................................................................................................................................1 1.4参考资料.......................................................................................................................................1
2.任务概述...............................................................2
2.1目标...............................................................................................................................................2 2.2运行环境.......................................................................................................................................2
2.2.1设备........................................................................................................................2
2.2.2支持软件................................................................................................................2 2.3需求概要.......................................................................................................................................2 2.4条件与限制...................................................................................................................................2 3.总体设计.................................................................3
3.1处理流程.......................................................................................................................................3 3.2总体结构和模块外部设计...........................................................................................................4
4.接口设计.................................................................4
4.1 硬件接口......................................................................................................................................4 4.2 软件接口......................................................................................................................................4
5.数据结构设计.............................................................5
5.1 逻辑结构设计..............................................................................................................................5 5.2 物理结构设计..............................................................................................................................5 5.3 数据结构与程序的关系..............................................................................................................5
6.运行设计.................................................................5
6.1 运行模块的组合..........................................................................................................................5 6.2 运行控制......................................................................................................................................5 6.3 运行时间......................................................................................................................................5
7.出错处理设计.............................................................6
7.1 出错输出信息..............................................................................................................................6 7.2 出错处理对策..............................................................................................................................6
8.安全保密设计.............................................................6 9.维护设计.................................................................6
1.引言
1.1 编写目的
从该阶段正式进入软件的实际开发阶段,本文档将对《飞机订票系统》的软件功能进行描述。本阶段的主要任务是把系统的功能需求分配给软件结构,形成软件的系统结构图。本概要设计说明书的目的就是进一步细化软件设计阶段得出的软件总体概貌,把它加工成在程序细节上非常接近于源程序的软件表示。本文档的读者是项目策划、设计和评审人员。
1.2 背景
开发软件名称:飞机票订系统。
//(1)项目任务提出者:中国民航及中国国际旅游开发公司。(2)项目开发者:何柳靑,陆银琳,李欣纯,单国英,阿依古丽
(3)项目与其他软件,系统的关系:本项目采用客户机/服务器原理,客户端的程序是建立在Windows NT 系统上以Microsoft Visual C++为开发软件的应用程序,服务器端采用Linux 为操作系统的工作站,是采用Oracle 8的为开发软件的数据库服务程序。
1.3 定义
概要设计说明书中的专门术语有:数据结构设计,总体设计,接口设计,运行设计,系统出错处理设计。
1.4参考资料
《软件工程导论》 清华大学出版社 张海藩 编著 《实用软件工程》 清华大学出版社 郑人杰 等 编著
《数据库系统概论(第三版)》 高等教育出版社 萨师煊 王珊等编著 《实用软件文档写作》 清华大学出版社 肖刚等 编著 《软件工程》第3版 人民邮电出版社 张海藩等 编著 2.任务概述
2.1目标
该阶段目的在于明确系统的数据结构和软件结构,此外总体设计还将给出内部软件和外部系统部分之间的接口定义,各个软件模块的功能说明,数据结构的细节以及具体的装配要求。
2.2运行环境
2.2.1设备
硬件最低要求:内存128MB,硬盘20G以上PC机
2.2.2支持软件
vc++.net 传感器windows系列os 如 win98/me/2000pro server/xp/server2003/win7 2.3需求概要
系统主要的输入输出:
1.乘客通过登录用户界面输入姓名和密码,进行登录,查询信息等; 2.操作人员根据乘客的要求输入信息到数据库中进行相应的查询及修3.4.5.改;
操作人员或用户登录相应的界面输入基本信息,例如姓名,性别,年龄,身份证号等;
公告信息的输出,公告信息的回复;
航班具体情况的输出,剩余票数的输出,及临时调整的输出。
2.4条件与限制
为了评价该设计阶段的设计表示的“优劣程度”,必须遵循以下几个准则:
(1)软件设计应当表现出层次结构,它应巧妙地利用各个软件部件之间的控制关系;
(2)设计应当是模块化的,即该软件应当从逻辑上被划分成多个部件,分别实现各种特定功能和子功能;(3)设计最终应当给出具体的模块(例如子程序或过程),这些模块就具有独立的功能特性;
(4)应当应用在软件需求分析期间得到的信息,采取循环反复的方法来获得设计。
3.总体设计
3.1处理流程
系统的总体处理流程如下图:
开始进入用户登录界面是否为后台数据管理员NO YES是否订票NOYES查看航班信息YESNO是否改签NOYES查询显示航班信息YES是否修改退票改签订票修改信息NO结束图3.1 流程图 3.2总体结构和模块外部设计
模块是软件是软件结构的基础,软件结构的好坏完全由模块的属性体现出来,把软件模块化的目的是为了降低软件复杂性,使软件设计、测试、调试、维护等工作变得简易,但随着模块数目的增加,通过接口连接这些模块的工作量也随之增加。
从系统的层次图中可以看出,订票以及退票的信息输入输出功能是由航班数据管理系统进行的。
飞机订票系统登录验证乘客信息修改订票管理航班信息查询航班信息调整后台管理员验证用户身份验证乘客基本信息录入乘客基本信息修改乘客票务信息修改乘客订票改签退票按时间查询按目的地查询按航班号查询增加新航班修改原有航班删除航班图3.2系统层次图
4.接口设计
4.1 硬件接口
本软件不需要特定的硬件或硬件接口进行支持。
4.2 软件接口
可以运行于Windows等操作系统之上。5.数据结构设计
5.1 逻辑结构设计
1.航空公司表:AIRLINE 2.客户表CUSTOMER 3.飞机表PLANE 4.航线表LINE 5.航班表FLIGHT 6.订票表BOOKTICKET 5.2 物理结构设计
系统的物理结构具体由数据库来设计与生成的。
5.3 数据结构与程序的关系
系统的数据结构由标准数据库语言SQL生成。
6.运行设计
6.1 运行模块的组合
具体软件的运行模块组合为程序多窗口的运行环境,各个模块在软件运行过程中能较好的交换信息,处理数据。
6.2 运行控制
软件运行时有较友好的界面,基本能够实现用户的数据处理要求。
6.3 运行时间
系统的运行时间基本可以达到用户所提出来的要求。7.出错处理设计
7.1 出错输出信息
用户使用错误的数据或访问没有权限的数据后,系统给出提示:“对不起,你无法使用数据,没有权限!”而且用户的密码管理可以允许用户修改自己的密码,不允许用户的匿名登录。
7.2 出错处理对策
由于数据在数据库中已经有备份,故在系统出错后可以依靠数据库恢复功能,并且依靠日志文件使系统再启动,就算系统崩溃用户的数据也不会丢失或遭到破坏。但有可能占用更多的数据存储空间,权衡措施由用户来决定。
8.安全保密设计
系统的系统用户管理保证了只有授权的用户才能进入系统进行数据操作,而且对一些重要的数据,系统设置为只有最高权限的人员方可读取或是操作。系统安全保密性较高。
9.维护设计
由于系统较小没有加外加维护模块,因为系统维护工作比较简单,仅靠数据库的一些基本维护。
第四篇:qtp测试飞机订票使用DataTable参数化(实验3
飞机订票使用DataTable参数化(实验III)
原理:通过关键字视图可观察到自动化测试脚本是由操作步骤与数据构成的。如测试脚本在某个变量中重复使用,而该变量的值经常需要根据具体测试需求进行变更。QT参数化可以实现无须打开测试脚本,直接改变量的值,提供了高效的维护测试脚本方式。主要过程包括:录制实验程序,使用DataTable进行参数化,同时使用RandomNumber实现参数化的正常运行和测试。初步掌所握QuickTest Professional的环境变量的使用,同时对Data Driver了解其概念。
一: 实现步骤
1.1:点击安装并QuickTest安装步骤完成后,运行QuickTest Professional,出现如下界面,点击Automation->Record and Run Setting,选择红框中的内容。
1.2:将flight4b.exe打开,运行至此界面,确保录制从这个阶段开始
1.3插入一条订票的记录,注意记好num号,生成如下的测试过程,并运行回放该测试的结果,点击run验证“仅录制预定机票的过程”
1.4:要求测试过程为全部pass
II.对预定机票中的数据进行参数化 2.1:在test用例中选中Fly From这个项
2.2:命名为Fly_from,点击确定
2.3:,以此类推,对Fly_to进行参数化,命名后点击OK
2.4参数如下红框所示,手动添加进参数,London Denver;London Frankfurt;也可以自已多添几条,前提是机票预定系统里有这些地点即可。
2.5:出错信息如附,因为手工添加参数后,QT并没有识别到,所以我们下一步采用RandomNumber来实现
2.6:选择Flight Table下的From,点击# 5 2.7:选择random Number
2.8:测试完成,参数化自动执行Data table表中的参数。III:环境变量的使用
3.1使用正常的录制过程,机票录入系统界面弹出即可。点击File-setting 6
3.2选择用户自定义
3.3按+号将用户名添加入
3.4按下图操作,选择Environment
3.5选RUN验证吧
要求:主要完成I、II部分,III部分作为体验
完成将调试PASS的界面截图,同时将测试脚本用例保存打包 班级+姓名+学号.RAR方式提交,同时将实验报告(可以打印)方式上交课代表。
第五篇:数据结构课程设计 飞机订票系统
飞机订票系统
1.需求分析
描述要求编程解决的问题。以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:
(a)输入的形式和输入值的范围;
(b)输出的形式;
(c)程序所能达到的功能;
(d)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
2.概要设计
给出程序要达到的具体的要求。描述解决相应问题算法的设计思想。描述所设计程序的各个模块(即函数)功能。说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
3.详细设计
实现概要设计中定义的所有数据类型,对每个操作只需要写出流程或伪码算法;对主程序和其他模块也都需要写出流程或伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义的抽象数据类型。设计出良好的输入输出界面(清晰易懂)。
4.调试分析 内容包括:
(a)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;
(b)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;
(c)经验和体会等。
5.用户使用说明
说明如何使用你编写的程序,详细列出每一步的操作步骤。
6.测试结果
设计测试数据,或具体给出测试数据。要求测试数据能全面地测试所设计程序的功能。列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。
7.测试情况:给出程序的测试情况,并分析运行结果
附录(非必须,按照需要添加)
带注释的源程序。可以只列出程序文件名的清单。
需求分析
任务:通过此系统可以实现如下功能: 录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况;
订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
概要设计
详细设计
详列函数 void list(){
struct airline *info;
int i=0;
info=start;
printf(“起点城市t终点城市t航班号t起飞时间t降落时间t总票数t余票数n”);
while(i { display(info); info++; i++; } printf(“nn”);} 查询函数 void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“请输入要起飞城市的名称:”); scanf(“%s”,qiname); printf(“请输入要抵达城市的名称:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“没有这条航线!n”); } else { printf(“起飞城市t降落城市t航班号t起飞时间t降落时间t总票数t余票数n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“请输入航班号:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“没有这条航线!n”); return NULL;} 订票函数 void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“请输入您的起飞城市:”); scanf(“%s”,qiname); printf(“请输入您的降落城市:”); scanf(“%s”,jiangname); printf(“请输入您需要的票数:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“请输入您的姓名:”); scanf(“%s”,name); printf(“请输入您的身份证号:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息为:n”); display(info); for(i=0;i { printf(“%s的座位号是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“订票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } 退票函数 void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“请输入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您没有订过票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} 存储结构 typedef struct passenger { char name[10]; int tickets; char id[30]; struct passenger *next;} linklist;typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo;调试分析 查看航线信息 查询航线 ① 输入起飞城市 ② 输入抵达城市 ③ 输出航班信息 办理订票业务 ① 查询符合的航班 ② 查询余票量 ③ 输出航班信息 办理退票业务 源代码 #include char name[10]; int tickets; char id[30]; struct passenger *next;} linklist; typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo; struct airline *start; void display(struct airline *info){ printf(“%st %10st %10st %10st %10st %5dt %5dn”,info->qi_name,info->jiang_name,info->air_num,info->qi_time,info->jiang_time,info->ticket_all,info->ticket_left);} void list(){ struct airline *info; int i=0; info=start; printf(“起点城市t终点城市t航班号t起飞时间t降落时间t总票数t余票数n”); while(i { display(info); info++; i++; } printf(“nn”);} void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“请输入要起飞城市的名称:”); scanf(“%s”,qiname); printf(“请输入要抵达城市的名称:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“没有这条航线!n”); } else { printf(“起飞城市t降落城市t航班号t起飞时间t降落时间t总票数t余票数n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“请输入航班号:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“没有这条航线!n”); return NULL;} linklist *insertlink(linklist *head,int amount,char name[],char id[]){ linklist *p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist)); strcpy(new1->name,name); new1->tickets=amount; new1->next=NULL; strcpy(new1->id,id); if(head==NULL) { head=new1; new1->next=NULL; } else { while(p1->next!=NULL) p1=p1->next; p1->next=new1; } return head;} void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“请输入您的起飞城市:”); scanf(“%s”,qiname); printf(“请输入您的降落城市:”); scanf(“%s”,jiangname); printf(“请输入您需要的票数:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“请输入您的姓名:”); scanf(“%s”,name); printf(“请输入您的身份证号:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息为:n”); display(info); for(i=0;i { printf(“%s的座位号是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“订票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“请输入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您没有订过票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} int menu_select(){ int c; char s[20]; printf(“ 订票系统n”); printf(“-------------n”); printf(“ 1.查看航线信息 printf(” 2.查询航线 printf(“ 3.办理订票业务 printf(” 4.办理退票业务 printf(“ 5.退出系统 printf(”-------------n“); do { printf(”请选择(1-5):“); scanf(”%s“,s); c=atoi(s); } while(c<1||c>6); return c; n”);n“);n”);n“); n”); } int main(){ struct airline air[MAXSIZE]= { {“harbin”,“beijing”,“1”,“12:00”,“14:00”,30,30},{“harbin”,“shanghai”,“2”,“10:00”,“13:00”,20,20},{“harbin”,“beijing”,“3”,“13:30”,“10:00”,50,50},{“harbin”,“guangzhou”,“4”,“17:00”,“21:00”,50,50},{“harbin”,“dalian”,“5”,“14:00”,“17:00”,40,40} }; start=air; while(1) { system(“cls”); switch(menu_select()) { case 1: list(); break; case 2: search(); break; case 3: order(); break; case 4: returnticket(); break; case 5: exit(0); } getch(); } } 经验体会 1、通过设计飞机订票系统,加深了对链表的运用和理解。 2、通过多组测试数据,发现了程序的问题,并做了调整、3、通过设计选择菜单,对选择结构有更深刻的了解。