第一篇: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可以加速测试的整个过程,并且建置完新版本的应用程序后网站后,可以重复使用测试脚本进行测试。
第二篇: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测试飞机订票使用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、通过设计选择菜单,对选择结构有更深刻的了解。 飞机订票系统 1.概述(设计题目与可行性分析) 1.1设计题目:飞机订票系统 1.2可行性分析 飞机订票系统是为机场工作人员和客户提供订票退票等与机票相关内容的管理系统,方便机场工作人员对机票的管理,以提高机场工作人员对机票管理工作的效率。当前飞机订票问题:手工订票所产生的客座率低。而我们的目标是:建立一个飞机订票系统数据库。 1.2.1研究现有系统,画现有系统的流程图 了解当前系统能够完成的功能及组成 航班管理:票据管理 售票点:直接面向用户 航班管理 票据管理 票库 订票库 订票管理 出售管理 打印机票 售票点1 售票点n 现有系统:票据都分布在各个售票点 1.2.2导出新系统的高层逻辑结构 数据流图的基本符号: 数据源/终点(人机界面): 加工处理: 文件名 文件: 数据流名 数据流: 票价信息 机票 查订票号 订票处理 客户信息 出票处理 订票记录 顾客 订票信息 订票号 库存信息 票价信息 票价管理 航班管理 航班信息 操作员 航班信息 保存 新系统的数据流图: 说明:流向文件的数据流的名可以省略 1.2.3可行性分析报告 随着Internet的迅速发展和用户数量的急剧增加,互联网对于企业和事业单位的运营和发展日益重要,网上交易也逐渐被人们认可,并成为未来交易的发展方向。在这种情况下,很多原有的C/S模式的系统也逐步向B/S模式靠拢,飞机订票系统也不例外。 飞机订票系统是飞机旅游服务信息系统的一个重要组成部分。为旅客提供优质便捷的服务,为了提高飞机客运的售票效率,丰富飞机客运的营销手段,飞机售票总站的下属代售点可以通过公用的互联网资源,建立数据库,实现网上的售票,查询及管理工作。 2.系统目标和设计原则 2.1系统目标: 建立一个飞机订票系统数据库。 2.1.1系统简介: 本系统是专为乘坐飞机的旅客准备的,旅客只需把自己的信息(姓名.性别.工作单位.身份证号.旅行时间.旅行目的地)预先交给旅行社,旅行社就可以将信息输入本系统,系统就可以为旅客安排航班,打印出取票通知和帐单。旅客只要在飞机起飞的前一天凭取票通知单和帐单交款取单,系统校对无误即印出机票给旅客。 2.2设计原则 2.2.1根据实际情况考虑三种可行性 技术可行性、经济可行性、操作可行性 2.2.2提出侯选方案、提出各种各样的实现方案 主机(纯主机型、C/S型)、开发环境、网络方案、对提出的每个方案进行成本估计 硬件、软件费用投资(根据各公司的报价)开发成本估计(任务估算法) 运行费用、投资回收期 纯收入:通过本系统的运行、投资回收后的收入 3、描述推荐理由:分别从技术、经济、用户、投资方的不同角度考虑 3.支撑环境规划 3.1整体系统运作图 3.2运行环境 服务器:硬件配置:CPU Intel P4 1.2G以上 内存256 硬盘 80G以上 软件配置:Windows 2000/2003 SERVER SQL SERVER 2000 4.系统功能结构 1、录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) 2、查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况; 3、订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班; 4、退票:可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 5、修改航班信息:当航班信息改变可以修改航班数据文件。 5.数据库设计 5.1概念结构设计 E-R图如下: 5.2逻辑结构设计 1.航空公司表:AIRLINE 2.客户表CUSTOMER 3、飞机表PLANE 4.航线表LINE 5.航班表FLIGHT 6.订票表BOOKTICKET 5.3实现设计 实现以下操作: 1、注册航空公司: 2、增加飞机: 3、增加航线: 4、增加航班: 5、增加客户: 6、建立一个订票的存储过程,存储过程名为Book_Ticket,请完成以下存储过程,实现订票的操作: a)指定要订的航班号(HID)及客户的编号(KID); b)先查看客户是否为特殊客户,如果不是,票价不打折扣; c)否则如果客户航程超过5万公里,票价7折,超过15万公里,票价打5折; d)查看客户订票以后,所有乘客的票数是否超过总的座位数,如果超过,回滚订票操作; e)要求在操作过程中使用到事务技术。 CREATE PROCEDURE Book_ticket @HID VARCHAR(20) @HID VARCHAR(20) AS DECLARE @TRANS_NAME VARCHAR(20)select @TRANS_NAME=’ ’ BEGIN TRANSACTION DECLARE @Bookid int,@seats int,@IsSpec char(1)/*定义订票里程DIST、折扣率discount、总的订票里程distance、票价PRICE(实型)*/ select @Isspec=Isspec,@distance=Points FROM Customer where select @discount=1 IF @ BEGIN END /*选择出票价*/ SELECT @PRICE=PRICE FROM FLIGHT WHERE /*加入客户订票信息*/ /*将客户新订票里程的信息累计到用户信息里面*/ UPDATE SET WHERE /*查看客户订票后,是否超过可容纳的座位数目,如果超过,取消所有操作*/ SELECT booked=count(*)FROM WHERE FID= /*查看额定座位容量*/ SELECT @seats=seatsnum FROM WHERE IF @BOOKED>@SEATS ELSE COMMIT TRANSACTION GO 7.运行这个订票操作的存储过程(自己设定客户及航班) book_ticket , 8.事务运行成功后,再显示各表的数据,按表分别写出来。 6.总体实施计划 6.1可行性研究: 研究现有系统,画现有系统的流程图,编写可行性分析报告 6.2进行数据库设计: 概念结构设计,逻辑结构设计,实现设计 6.3概要设计: 从数据流图导出初始结构图,设计优化 6.4详细设计: 结构化的程序设计,采用流程图的形式 6.5保密设计 1.每个用户需要注册才能进入航空订票信息系统,并进行网上订票的。用户必须 用自己真实的身份进行注册。 2.系统要另外在备一份数据库,防止系统出现错误而使数据信息丢失的可能性。 3.系统要安装防火墙,防止黑客入侵破坏系统。还有就是安装杀毒软件,防止 病毒入侵而导致系统瘫痪。 6.6维护设计 系统设置提供管理员操作页面: 1.提供管理员密码,方便维护操作.2.固定时间对系统进行维护和检测.3.若系统出现瘫痪时,可出动备用系统维持运转.4.定期对系统进行更新整顿清空.7.总结 这次数据库课程设计的“飞机订票系统”,通过近一周的上机操作,充分应用了所学的数据库的知识,并去图书馆查阅了一些书集和上网搜索一部分相当资料,粗略设计出该系统。总体上来说,这次课程设计还是比较成功的,充分运用了所学的软件工程设计、数据库的设计,设计出E-R图、流程图、数据库基本表,从整体规划出了系统的运行环境和系统实现的功能。 当然,由于学艺不精,在课程设计的过程也碰到的一些问题。其中,画E-R图时,各实体中的关系的确定,由于对系统还不够了解而找不到一个准确的词来形容;总体规划时,材料太多,不易整理;相关数据库技术方面没有多注意,这次课程设计的重点只在对整个系统的总体思路设计。 其实这些通过最近的课程设计觉得最重要一点就是:我们一定要自己动手,这样才能真正的学到东西。书本知识固然重要,但我们更要学会将书本知识应用到实际的工作中。实践中才会发现错误,也才能改进,才能达到学习的最终目的。 最后感谢在这次课程设计中帮助过我的老师,同学!8.参考文献 物流信息系统 赵刚 四川大学人民出版社 2002/9 物流信息管理 尹涛 东北财经大学出版社 2005/1 数据库系统概论 王珊 萨师煊 高等教育出版社 2006/5 数据库技术与应用-Access2000篇 郭力平人民邮电出版社 2002/8 软件设计师教程 陈平禇华 清华大学出版社 2006/6 文章引用自:第五篇:数据库课程设计+飞机订票系统