软件课程设计报告(飞机票系统).doc_第1页
软件课程设计报告(飞机票系统).doc_第2页
软件课程设计报告(飞机票系统).doc_第3页
软件课程设计报告(飞机票系统).doc_第4页
软件课程设计报告(飞机票系统).doc_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件课程设计报告 班级: 光电0905班 姓名: 王伟 学号: 2011090102261软件设计11.1设计题目11.2设计要求11.3设计思想11.4流程图22软件测试92.1航班信息查询模块测试92.2订票模块测试142.3机票信息查询模块测试172.4退票模块测试183算法改进214开发体会22附录:源代码清单24参考文献421软件设计1.1设计题目飞机票销售系统。1.2设计要求 运用c语言基本知识,结合相关算法思想和数据结构,编写一个单微机系统下运行的飞机票销售系统。飞机票销售系统应实现航班信息查询、机票购买、机票信息查询、机票退购等功能。1.3设计思想 本程序分为四个模块,即航班信息查询模块、订票模块、机票信息查询模块和退票模块。程序中定义了三种结构为planes、book和tickets,分别用于航班信息、旅客信息和机票信息的存取和修改。为了储存航班信息、旅客信息和机票信息,程序中建立了三个文件分别为planes.txt、book.txt和tickets.txt。航班信息查询模块的功能主要由函数search1()实现,而航班信息查询模块中又分为按航班号查询航班信息模块、按目的地查询航班信息模块和按起飞时间查询航班信息模块三个小模块,因此search1()中分别调用函数search11()、search12()和search13()来实现每个小模块的功能。订票模块的功能由函数book(int *k,book *q,tickets *m)实现。机票信息查询模块功能由函数search2(int *n,tickets *w)实现。退票模块功能由函数refund(int *a,book *b,tickets *c)实现。每个模块的函数都通过对结构数组和文件的操作来实现对数据的存取和修改,从而实现各自的功能。程序中采用的查找数据方式为顺序查找。1.4流程图主函数流程图开始输入变量choicechoice=5?choice=1?否choice=2?choice=3?choice=4?否否否search1()book(int*k,book *q,tickets *m)search2(int*n,tickets *w)refund(int*a,book* b,tickets *c)是是是是结束是search1()为航班信息查询函数,book(int *k,book *q,tickets *m)为订票函数,search2(int *n,tickets *w)为机票信息查询函数,refund(int *a,book *b,tickets *c)为退票函数。航班信息查询函数search1()流程图开始输入变量choice1choice1=4?choice1=1?choice1=2?choice1=3?结束search13()search12()search11()是否否否是是是search11()为按航班号查询航班信息函数,search12()为按目的地查询航班信息函数,search13()为按起飞时间查询航班信息函数。按航班号查询航班信息函数search11()流程图开始输入航班号planenum17打开文件planes.txt并将航班信息读出到air110strcmp(air1i.planenum,planenum1)=0?否显示结果是结束search12()和search13()的流程图同理,仅需改变判断条件。订购机票函数book(int *k,book *q,tickets *m)流程图开始显示航班信息打开文件planes.txt并将航班信息读出到air110输入航班号planenum17strcmp(air1i.planenum,planenum1)=0?购票成功,显示结果否是将相应的旅客信息和机票信息储存到文件中结束将air110中的信息写入到文件planes.txt中并关闭文件air1i.tickets=0?是否机票信息查询函数search2(int *n,tickets *w)流程图开始输入机票编号ticketnum1打开文件tickets.txt并将机票信息读出到tickets t1400中ti.ticketnum=ticketnum1? 否显示结果将tickets t1400中的信息读入到文件tickets.txt中并关闭文件 是结束退票函数refund(int *a,book *b,tickets *c)流程图开始输入机票编号ticketnum2ci.ticketnum=ticketnum2?删除文件tickets.txt中相应的机票信息和book.txt中相应的旅客信息退票成功,显示结果结束否是2软件测试2.1航班信息查询模块测试运行程序,首先进入主菜单界面。选择1,进入航班信息查询模块。显示子菜单界面。选择1,按航班号查询航班信息。输入航班号“zh9658”。查找到相应航班信息如下:若在子菜单中选择2,按目的地查询航班信息,输入目的地“上海”。查找到相应航班信息如下:若在子菜单中选择3,按起飞时间查找航班信息。输入起飞时间“08:00”。查找到相应航班信息如下:2.2订票模块测试在主菜单中选择2,进行机票购买。显示购票界面。如要购买从武汉飞往深圳的航班机票,则输入相应航班号uk1266。系统将提示旅客输入姓名,性别和身份证号等旅客信息。如下图,输入姓名“张三”,性别“男”,身份证号。若该航班仍有剩余机票,则旅客购票成功,显示“购票成功”,同时生成机票编号并显示到屏幕上。回到主菜单,选择1进入航班信息查询模块,再选择1,输入张三购买机票对应的航班号。在显示的航班信息中,剩余机票数已由100变为99。2.3机票信息查询模块测试接着上次步骤,回到主菜单,选择3进入机票信息查询模块。系统提示输入机票编号。输入张三购买的机票的编号“51”。系统查询到相应的机票信息并显示到屏幕如下:2.4退票模块测试在主菜单中选择4,进入退票模块。系统提示输入需要退还的机票的编号,输入张三购买的机票的编号“51”。屏幕上显示“退票成功”字样,则表示旅客已成功退票。此时若回到主菜单中选择3进入机票信息查询模块,输入张三曾购买的机票的编号,则显示“对不起,该机票编号不存在”。在主菜单中选择1进入航班信息查询模块,按任意一种查找方式查找到张三曾购买的机票的航班信息,剩余机票数由99变回100。以上测试仅以单人次购买单张机票为例,对于多人次购买多张机票,该系统的测试结果仍正确无误。3算法改进改进一: 在主函数中定义的数组book a1400和tickets t1400用于临时存储旅客信息和机票信息,并可对其进行修改,同时也可以实现多次购票的功能。在经过认真思考后,我认为可以省去book a1400和tickets t1400。在购票函数、机票信息查询函数和退票函数中可以临时定义book型数组和tickets型数组,用追加方式打开book.txt和planes.txt并将文件中的信息读到相应数组中,如此一来也能实现对旅客信息和机票信息的修改、添加和删除,且能多次购票。改进二: 程序中10个航班信息和50个已售出机票信息均通过初始化方式赋给相应的结构数组,再储存到相应的文件中。这种方式处理信息不够灵活,也不便于管理。因此,程序中可以增加一个航班信息添加模块。4开发体会为了开发飞机票信息管理系统,我耗费了大量时间和精力,在开发的过程中,我遇到了许许多多的挫折,但也因此进行了反反复复的思考,从中得到了不少体会。 体会一:此次编程的内容较多,与以往的编程大不相同,因此刚开始设计软件时我有许多困惑,甚至无从下手。在后来的编程过程中,我深刻地体会到“模块化”这一设计思想的重要性。一个程序只有具备“模块化”这一特征才能有条不紊、条理清晰,否则会混乱不堪,可读性也受到影响。因此,要编写出一段正确且美观整洁的程序,必须先大致将程序划分为几个模块,然后再分别让每个模块实现各自的功能。在我所编写的程序中,我将它大致划分成了航班信息查询模块、订票模块、机票信息查询模块和退票模块四个模块,而在航班信息查询模块中,我又将其细分为按航班号查询航班信息模块、按目的地查询航班信息模块和按起飞时间查询航班信息模块三个更小的模块。如此一来,程序大致的框架便有了,我的思路也因此变得清晰明了,从而也就不会无从下手了。 体会二:在第一次编写购票函数时,函数中没有使用任何形参,也没有采用追加方式打开文件,这导致系统无法记录已售出机票数,也不能实现多次购票。为了解决这个问题,我在购票函数中添加了形参int *a,book *q和tickets *m,并在主函数中定义了整型变量j、tickets型数组和book型数组,从而使系统能记录已售出机票数并可以进行多次购票。 体会三:在完成任务的过程中,我深刻体会到软件的开发需要缜密的思维和一丝不苟的态度。一个不经意的小小的错误就可能导致程序错漏百出、面目全非,真可谓“失之毫厘,差之千里”。在编写退票函数时,我采用for循环记录机票信息和旅客信息,由于错将判断是否执行循环体的条件“k*a”写成“k*a+1”,导致信息录入不正确。因此每当我查询机票信息时总得不到正确的结果。经过多番的检查和思考,才发现这一错误。将错误纠正后,程序测试结果无误。这一纠错过程耗费了我大量时间,严重影响了效率。所以我觉得严谨的思维是一个优秀的程序员所应具备的。多从事编程活动有助于培养良好的思维习惯。 这次飞机票销售系统的开发虽经历了不少挑战,遭遇了许多的挫折和打击,但我凭着自己的努力最终克服困难,完成了任务。尽管软件中仍存在诸多不足,但它是我多日心血的结晶,它包含了我这一路走来的酸甜苦辣。 通过这次软件设计,我成功地把所学c语言和数据结构知识应用到实际软件开发中去,掌握了中小规模软件设计和开发的方法和步骤,也深深地领略到了软件设计的魅力。附录:源代码清单#include#include#include#includetypedef struct planes /储存航班信息的结构char planenum7;char start12;char destination12;char flytime6;int tickets;int people;int price;planes;typedef struct book /储存旅客信息的结构char name20;char sex8;char id20;int ticketnum;book;typedef struct tickets /储存机票信息的结构int ticketnum;char planenum7;char start12;char destination12;char flytime6;char name20;char sex8;tickets;void menu();void information1();void information2(tickets *x);void search1();void menu1();void search11();void search12();void search13();void book(int *k,book *q,tickets *m);void search2(int *n,tickets *w);void refund(int *a,book *b,tickets *c);void main()menu(); /显示主菜单information1(); /录入10个航班信息int choice=0;int j=50; /已售出机票数book a1400; /用于储存旅客信息的结构数组,最多有1400组tickets t1400; /用于储存机票信息的结构数组,最多有1400组information2(t); /录入50个已售出机票信息for(;choice!=5;)scanf(%d,&choice);switch(choice)case 1:search1(); break;case 2: book(&j,a,t);break;case 3:search2(&j,t);break;case 4:refund(&j,a,t);break;case 5:system(cls);break;default :break;system(color cf);printf( tt *n tt * 感谢您的使用,祝您旅途愉快,再见! *n tt *n);remove(planes.txt);remove(tickets.txt);remove(book.txt);void menu()system(color b4);printf( tt*n tt* 欢迎使用飞机票销售系统 *n tt*n tt*请选择服务: *n tt* 1.航班信息查询 *n tt* *n tt* 2.机票购买 *n tt* *n tt* 3.机票信息查询 *n tt* *n tt* 4.机票退购 *n tt* *n tt* 5.退出系统 *n tt*n);void information1()planes air10=zh9658,武汉,广州,09:00,200,200,900,gs7546,武汉,郑州,11:40,90,100,685,cz3445,武汉,重庆,17:35,91,100,885,kz5567,武汉,北京,08:00,200,200,790,dw4612,武汉,上海,14:25,200,200,356,mz5431,武汉,杭州,18:00,91,100,456,uk1266,武汉,深圳,12:45,100,100,800,ks3256,武汉,南宁,10:00,92,100,455,kz6532,武汉,天津,21:00,193,200,356,gm9825,武汉,香港,19:00,93,100,575;file *fp;planes *p=air;fp=fopen(planes.txt,w); /所有航班信息储存到文件planes.txt中fwrite(p,sizeof(planes),10,fp);rewind(fp);fclose(fp);void information2(tickets *x)tickets a50=1,gs7546,武汉,郑州,11:40,王大伟,男,2,gs7546,武汉,郑州,11:40,胡宾,男,3,gs7546,武汉,郑州,11:40,王玲,女,4,cz3445,武汉,重庆,17:35,许永宾,男,5,cz3445,武汉,重庆,17:35,王华,男,6,mz5431,武汉,杭州,18:00,刘春,女,7,ks3256,武汉,南宁,10:00,郑安,男,8,gm9825,武汉,香港,19:00,李明,男,9,kz6532,武汉,天津,21:00,杨向东,男,10,ks3256,武汉,南宁,10:00,胡华,男,11,ks3256,武汉,南宁,10:00,刘美,女,12,ks3256,武汉,南宁,10:00,江成,男,13,mz5431,武汉,杭州,18:00,黄龙,男,14,mz5431,武汉,杭州,18:00,刘小月,女,15,mz5431,武汉,杭州,18:00,刘亮,男,16,gs7546,武汉,郑州,11:40,李红,女,17,gs7546,武汉,郑州,11:40,王枫,男,18,gs7546,武汉,郑州,11:40,石江,男,19,cz3445,武汉,重庆,17:35,王明月,男,20,gm9825,武汉,香港,19:00,郑安,男,21,gm9825,武汉,香港,19:00,刘建国,男,22,gm9825,武汉,香港,19:00,胡太平,男,23,gs7546,武汉,郑州,11:40,王德,男,24,gs7546,武汉,郑州,11:40,张远,男,25,cz3445,武汉,重庆,17:35,陈梅,女,26,gs7546,武汉,郑州,11:40,苏红,女,27,gs7546,武汉,郑州,11:40,黄单,男,28,ks3256,武汉,南宁,10:00,苏非,女,29,kz6532,武汉,天津,21:00,欧平,男,30,cz3445,武汉,重庆,17:35,刘威,男,31,cz3445,武汉,重庆,17:35,黄依,女,32,gm9825,武汉,香港,19:00,王小明,男,33,kz6532,武汉,天津,21:00,张节,男,34,cz3445,武汉,重庆,17:35,刘南,男,35,gm9825,武汉,香港,19:00,付素,女,36,kz6532,武汉,天津,21:00,魏江,男,37,kz6532,武汉,天津,21:00,黄红,女,38,cz3445,武汉,重庆,17:35,刘辉,男,39,kz6532,武汉,天津,21:00,胡威,男,40,kz6532,武汉,天津,21:00,李鹏,男,41,ks3256,武汉,南宁,10:00,郭洋,男,42,gm9825,武汉,香港,19:00,刘玉,男,43,cz3445,武汉,重庆,17:35,白飞,男,44,ks3256,武汉,南宁,10:00,吴迪,男,45,mz5431,武汉,杭州,18:00,刘月,女,46,ks3256,武汉,南宁,10:00,江明,男,47,mz5431,武汉,杭州,18:00,郭辉,男,48,mz5431,武汉,杭州,18:00,朱红,女,49,mz5431,武汉,杭州,18:00,牛威,男,50,mz5431,武汉,杭州,18:00,马辉,男,;int i=0;for(i=0;i50;i+)xi=ai;file *fp;tickets *p=x;fp=fopen(tickets.txt,w);fwrite(p,sizeof(tickets),50,fp);rewind(fp);fclose(fp);void search1()/查询航班信息模块system(cls);menu1(); /显示子菜单int choice1;doscanf(%d,&choice1);switch(choice1)case 1:search11();break;case 2:search12();break;case 3:search13();break;case 4:system(cls);break;default:break;while(choice1!=4);menu();void menu1() /子菜单system(color 9f);printf(tt*n tt* 航班信息查询菜单 *n tt*n tt*请选择: *n tt* 1.按航班号查询 *n tt* *n tt* 2.按目的地查询 *n tt* *n tt* 3.按起飞时间查询 *n tt* *n tt* 4.返回上级菜单 *n tt*n);void search11() /按航班号查询航班信息模块system(cls);char planenum17;printf(请输入航班号:n);scanf(%s,planenum1);int i;int flag=0;file *fp1;planes air110;planes *p1=air1;fp1=fopen(planes.txt,r);fread(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);for(i=0;i10;i+)if(strcmp(air1i.planenum,planenum1)=0)system(cls);printf(您所查询的航班信息为nnn);printf(*n);printf(航班号t起始地t目的地t起飞时间t剩余票数t最大载客数t票价nn);printf(%st%st%st%stt%dtt%dtt%dn,air1i.planenum,air1i.start,air1i.destination,air1i.flytime,air1i.tickets,air1i.people,air1i.price);printf(*nn);printf(按任意键返回上级菜单n);getch();flag=1;break;if(flag=0)printf(对不起,您的输入有误,按任意键返回上级菜单n);getch();system(cls);menu1();p1=air1;fp1=fopen(planes.txt,w);fwrite(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);system(cls);menu1();void search12() /按目的地查询航班信息模块system(cls);char destination17;printf(请输入目的地:n);scanf(%s,destination1);int i;int flag=0;file *fp1;planes air110;planes *p1=air1;fp1=fopen(planes.txt,r);fread(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);for(i=0;i10;i+)if(strcmp(air1i.destination,destination1)=0)system(cls);printf(您所查询的航班信息为nnn);printf(*n);printf(航班号t起始地t目的地t起飞时间t剩余票数t最大载客数t票价nn);printf(%st%st%st%stt%dtt%dtt%dn,air1i.planenum,air1i.start,air1i.destination,air1i.flytime,air1i.tickets,air1i.people,air1i.price);printf(*nn);printf(按任意键返回上级菜单n);getch();flag=1;break;if(flag=0)printf(对不起,您的输入有误,按任意键回到上级菜单n);getch();system(cls);menu1();p1=air1;fp1=fopen(planes.txt,w);fwrite(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);system(cls);menu1();void search13() /按起飞时间查询航班信息模块system(cls);char flytime17;printf(请输入起飞时间:n);scanf(%s,flytime1);int i;int flag=0;file *fp1;planes air110;planes *p1=air1;fp1=fopen(planes.txt,r);fread(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);for(i=0;i10;i+)if(strcmp(air1i.flytime,flytime1)=0)system(cls);printf(您所查询的航班信息为nnn);printf(*n);printf(航班号t起始地t目的地t起飞时间t剩余票数t最大载客数t票价nn);printf(%st%st%st%stt%dtt%dtt%dn,air1i.planenum,air1i.start,air1i.destination,air1i.flytime,air1i.tickets,air1i.people,air1i.price);printf(*nn);printf(按任意键返回上级菜单n);getch();flag=1;break;if(flag=0)printf(对不起,您的输入有误,按任意键回到上级菜单n);getch();system(cls);menu1();p1=air1;fp1=fopen(planes.txt,w);fwrite(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);system(cls);menu1();void book(int *k,book *q,tickets *m) /订票模块system(cls);char planenum17;int i;int flag=0;book *p2=&q*k;tickets *p3=&m*k;q50.ticketnum=51;file *fp1,*fp2,*fp3;planes air110;planes *p1=air1;fp1=fopen(planes.txt,r);fread(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);printf(t*n);printf(t航班号t起始地t目的地t起飞时间t剩余票数t最大载客数n);for(i=0;i10;i+)printf(t%st%st%st%stt%dtt%dn,air1i.planenum,air1i.start,air1i.destination,air1i.flytime,air1i.tickets,air1i.people);printf(t*n);printf(请输入您要乘坐的飞机的航班号n);scanf(%s,planenum1);for(i=0;i10;i+)if(strcmp(air1i.planenum,planenum1)=0)flag=1;if(air1i.tickets=0)printf(对不起,机票已售完n);printf(按任意键返回上级菜单n);p1=air1;fp1=fopen(planes.txt,w);fwrite(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);getch();system(cls);menu();break;elseprintf(请输入您的姓名n); /输入订票时需要的旅客信息scanf(%s,q*);printf(请输入您的性别n);scanf(%s,q*k.sex);printf(请输入您的身份证号n);scanf(%s,q*k.id);printf(购票成功!n);printf(机票编号为:%dn,q*k.ticketnum);printf(按任意键返回上级菜单n);strcpy(m*k.start,air1i.start);/将信息记录到机票信息结构中strcpy(m*k.destination,air1i.destination); strcpy(m*k.flytime,air1i.flytime);strcpy(m*k.planenum,air1i.planenum);strcpy(m*,q*);strcpy(m*k.sex,q*k.sex);m*k.ticketnum=q*k.ticketnum;fp3=fopen(tickets.txt,a); /将机票信息储存到文件tickets.txt中fwrite(p3,sizeof(tickets),1,fp3);fclose(fp3);fp2=fopen(book.txt,a); /将旅客信息储存到文件book.txt中fwrite(p2,sizeof(book),1,fp2); fclose(fp2);*k=*k+1;q*k.ticketnum=q*k-1.ticketnum+1;air1i.tickets=air1i.tickets-1;p1=air1;fp1=fopen(planes.txt,w);fwrite(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);getch();system(cls);menu();break;if(flag=0)printf(对不起,您所输入的航班号有误n);printf(按任意键返回上级菜单n);p1=air1;fp1=fopen(planes.txt,w);fwrite(p1,sizeof(planes),10,fp1);rewind(fp1);fclose(fp1);getch();system(cls);menu();void search2(int *n,tickets *w) /机票信息查询模块system(cls);int ticketnum1;p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论