数据结构课程设计飞机订票系统(共27页).doc
精选优质文档-倾情为你奉上订票系统1.需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2.概要设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。主菜单0123456789输入航班的信息列出航班的信息按航班号查询航班信息按城市来查询航班订票程序退票系统修改飞机航班的信息保存文件读取文件 、下载文件退出0.输入航班的信息航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣1.列出航班的信息继续 y退出 n2.按航班号查询航班信息输入所需要查询的航班号显示这个航班的的信息3.按城市来查询航班输入起飞城市输入降落城市显示这个航班的信息4.订票程序输入号码输入名字输入ID需要定的票数航班号5.退票系统输入航班号输入你ID确定退票 1否定 06.修改飞机航班的信息输入要修改的航班号重新输入新的航班信息7.保存文件显示保存成功详细设计3.源程序/*头文件(.h)*/#include <stdio.h> /*I/O函数*/#include <stdlib.h> /*其它说明*/#include <string.h> /*字符串函数*/#include <conio.h> /*屏幕操作函数*/#include <ctype.h> /*字符操作函数*/#define N 20#define Q 40 /*定义常数表示记录数*/ /*定义数据结构*/*乘客信息*/typedef struct char number10;/*编号*/ char name10; /*姓名*/ char id20; /*证件号*/ int count; /*订票数*/ char flightname10;/*乘坐航班号*/GUEST; /*航班信息*/typedef structchar planenumber10;/*航班号*/ char city120; /*起飞城市*/ char city220; /*抵达城市*/ char time120; /*起飞时间*/ char time220; /*降落时间*/ int room; /*舱位数*/ char price5; /*票价*/ char discount5; /*折扣*/ GUEST guest25; int sit;FLY;/*菜单函数,函数返回值为整数,代表所选的菜单项*/menu_select() char s80; int c; gotoxy(1,25);/*将光标定为在第25行,第1列*/ printf("press any key enter menu.n");/*提示压任意键继续*/ getch(); /*读入任意字符*/ clrscr(); /*清屏*/ gotoxy(1,1); printf(" Welcome tonn"); printf(" Tickets Booking Systemnn"); printf(" *MENU*nn"); printf(" 0. Enter flight recordn"); printf(" 1. List the flight informationn"); printf(" 2. Search flightnumbern"); printf(" 3. Search cityn"); printf(" 4. Book the ticketn"); printf(" 5. Quit the ticketn"); printf(" 6. Channge the flight informationn"); printf(" 7. Save the filen"); printf(" 8. Load the filen"); printf(" 9. exitn"); printf(" *n"); do printf("n Enter you choice(09):"); /*提示输入选项*/ scanf("%s",s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整型数*/ while(c<0|c>9); /*选择项不在09之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/*输入函数*/int enter(FLY t) int i,k,n,m,w,j; char *s; clrscr(); /*清屏*/ printf("input the flight's count(n<=40):");/*输入航线总数*/ scanf("%d",&n); while(n>40|n<0) clrscr(); printf("input error!input again(0<n<=40):");/*输入航线总数*/ scanf("%d",&n); printf(" input the flight's informationnn");/*提示信息*/ printf("flightname start-city end-city start-time end-time room price discountn"); printf("-n"); for(i=0;i<n;i+) scanf("%s",ti.planenumber);/*输入姓名*/ gotoxy(13,6+i);/*光标跳到地址栏*/ scanf("%s",ti.city1);/*输入起飞城市*/ gotoxy(25,6+i); scanf("%s",ti.city2);/*输入降落城市*/ gotoxy(36,6+i); scanf("%s",ti.time1);/*输入起飞时间*/ gotoxy(47,6+i); scanf("%s",ti.time2);/*输入降落时间*/ gotoxy(57,6+i); scanf("%d",&ti.room);/*输入舱位数*/ gotoxy(64,6+i); scanf("%s",ti.price);/*输入票价*/ gotoxy(73,6+i); scanf("%s",ti.discount);/*输入折扣*/ printf("-n"); for(i=0;i<n;i+)ti.sit=0; return n; /*返回记录条数*/*显示记录,参数为记录数组和记录条数*/void list(FLY t,int n) int i; clrscr(); printf("flightname start-city end-city start-time end-time room price discountn"); printf("-n"); for(i=0;i<n;i+) printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.city1,ti.city2,ti.time1,ti.time2,ti.room,ti.price,ti.discount); printf(" *end*n");/*按航班号查找记录*/void search1(FLY t,int n) char s20; /*保存待查找航班名字符串*/ int i; clrscr(); /*清屏*/ printf("please input the flightname that you want to search:"); scanf("%s",s); /*输入待查找航班名*/ for(i=0;i<n;i+)/*从第一条记录开始,直到最后一条*/ if(strcmp(s,ti.planenumber)=0) /*记录中的航班名和待比较的是否相等*/ break; /*相等,则返回该记录的下标号,程序提前结结束*/ if(i>n-1) /*如果整数i值大于n-1,说明没找到*/ printf("not foundn"); else printf("flightname start-city end-city start-time end-time room price discountn"); /*显示记录*/ printf("-n"); printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.city1,ti.city2,ti.time1,ti.time2,ti.room,ti.price,ti.discount); /*按起降城市查找记录*/void search2(FLY t,int n) char s120; char s220; int i; clrscr(); /*清屏*/ printf("please input the start-city:"); scanf("%s",s1); /*输入起飞城市名*/ printf("please input the end-city:"); scanf("%s",s2); /*输入降落城市名*/ for(i=0;i<n;i+)/*从第一条记录开始,直到最后一条*/ if(strcmp(s1,ti.city1)=0)&&(strcmp(s2,ti.city2)=0) /*记录中的城市和待比较的是否相等*/ break; /*相等,则返回该记录的下标号,程序提前结结束*/ if(i>n-1) /*如果整数i值大于n-1,说明没找到*/ printf("not foundn"); else printf("flightname start-city end-city start-time end-time room price discountn"); /*找到,显示记录*/ printf("-n"); printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.city1,ti.city2,ti.time1,ti.time2,ti.room,ti.price,ti.discount); /*订票*/void book(FLY t,int n) char s20,number110,name110,id120,flightname110; int i,j=0,m,k,count1; clrscr(); /*清屏*/ printf("How many tickets do you want to book:"); scanf("%d",&m); printf("number name ID book-count flightnamen"); /*提示信息*/ printf("-n"); for(k=0;k<m;k+) scanf("%s",number1); gotoxy(13,4+k);/*光标跳到地址栏*/ scanf("%s",name1);/*输入订票客户姓名*/ gotoxy(25,4+k); scanf("%s",id1);/*输入证件号*/ gotoxy(43,4+k); scanf("%d",&count1);/*输入订票票数*/ gotoxy(53,4+k); scanf("%s",flightname1);/*输入航班号*/ for(i=0;i<n;i+)/*从第一条记录开始,直到最后一条*/ if(strcmp(flightname1,ti.planenumber)=0) /*记录中的航班名和待比较的是否相等*/ j=ti.sit; strcpy(ti.guestj.number,number1); strcpy(ti.guestj.name,name1); strcpy(ti.guestj.id,id1); ti.guestj.count=count1; strcpy(ti.guestj.flightname,flightname1); ti.room=ti.room-count1; ti.sit+; break; /*相等,则返回该记录的下标号,程序提前结结束*/ if(i>n-1) /*如果整数i值大于n-1,说明没找到*/ printf("Sorry!No this flightn"); m=m+2; k+; /*退票*/void quit(FLY t,int n) char s120,s220; /*保存待查找航班名和证件号字符串*/ int i,k,j,h,l,ch; clrscr(); /*清屏*/ printf("please input the flightname that you want to quit:"); scanf("%s",s1); /*输入待查找航标名*/ printf("please input the your id:"); scanf("%s",s2); /*输入待查找证件号*/ printf("number name ID book-count flightnamen"); /*显示提示*/ printf("-n"); for(i=0;i<n;i+)/*从第一条记录开始,直到最后一条*/ for(j=0;j<ti.sit;j+) if(strcmp(s1,ti.guestj.flightname)=0)&&(strcmp(s2,ti.guestj.id)=0) printf("%-11s%-16s%-16s%-14d%-10sn",ti.guestj.number,ti.guestj.name,ti.guestj.id,ti.guestj.count,ti.guestj.flightname); ti.room=ti.room+ti.guestj.count; l=j; h=i; break; i=h; if(i>n-1) /*如果整数i值大于n-1,说明没找到*/ printf("not foundn"); else printf("Are you sure delete it(1/0)n"); /*确认是否要删除*/ scanf("%d",&ch); /*输入一个整数0或1*/ if(ch=1) /*如果确认删除整数为1*/ for(k=l+1;k<ti.sit;k+) strcpy(ti.guestk-1.number,ti.guestk.number); /*将后一条记录的姓名拷贝到前一条*/ strcpy(ti.guestk-1.name,ti.guestk.name); strcpy(ti.guestk-1.id,ti.guestk.id); ti.guestk-1.count=ti.guestk.count; strcpy(ti.guestk-1.flightname,ti.guestk.flightname); ti.sit-; printf("quit success!n");/*提示退票成功*/ /*修改航班信息*/void channge(FLY t,int n) char s20; /*要删除记录的姓名*/ int i,j; clrscr(); /*清屏*/ printf("please input the flightname that you want to channge:"); /*提示信息*/ scanf("%s",s);/*输入航班名*/ for(i=0;i<n;i+)/*从第一条记录开始,直到最后一条*/ if(strcmp(s,ti.planenumber)=0) /*记录中的航班名和待比较的是否相等*/ break; /*相等,则返回该记录的下标号,程序提前结结束*/ if(i>n-1) /*如果整数i值大于n-1,说明没找到*/ printf("not foundn"); else printf("flightname start-city end-city start-time end-time room price discountn"); /*找到,显示原先记录*/ printf("-n"); printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.city1,ti.city2,ti.time1,ti.time2,ti.room,ti.price,ti.discount); printf("please input the new information:n"); scanf("%s",ti.planenumber);/*输入航班名*/ gotoxy(13,6+i);/*光标跳到地址栏*/ scanf("%s",ti.city1);/*输入起始城市*/ gotoxy(25,6+i); scanf("%s",ti.city2);/*输入终点城市*/ gotoxy(35,6+i); scanf("%s",ti.time1);/*输入起飞时间*/ gotoxy(47,6+i); scanf("%s",ti.time2);/*输入降落时间*/ gotoxy(57,6+i); scanf("%d",ti.room);/*输入座位号*/ gotoxy(64,6+i); scanf("%s",ti.price);/*输入票价*/ gotoxy(71,6+i); scanf("%s",ti.discount);/*输入折扣*/ /*保存资料*/void save(FLY t,int n) int i,j; FILE *fp; /*指向文件的指针*/ if(fp=fopen("record1.txt","wb")=NULL) /*打开文件,并判断打开是否正常*/ printf("can not open filen");/*没打开*/ exit(1); /*退出*/ printf("nSaving filen"); /*输出提示信息*/ fprintf(fp,"%d",n); /*将记录数写入文件*/ fprintf(fp,"rn"); /*将换行符号写入文件*/ for(i=0;i<n;i+) fprintf(fp,"%s %s %s %s %s %d %s %s",ti.planenumber,ti.city1,ti.city2,ti.time1,ti.time2,ti.room,ti.price,ti.discount); fprintf(fp,"rn"); /*将换行符号写入文件*/ fprintf(fp,"%d",ti.sit); /*将记录数写入文件*/ fprintf(fp,"rn"); /*将换行符号写入文件*/ for(j=0;j<ti.sit;j+) fprintf(fp,"%s %s %s %d %s",ti.guestj.number,ti.guestj.name,ti.guestj.id,ti.guestj.count,ti.guestj.flightname);/*格式写入记录*/ fprintf(fp,"rn"); /*将换行符号写入文件*/ fclose(fp);/*关闭文件*/ printf("*save success*n"); /*显示保存成功*/*读入函数,参数为结构体数组*/int load(FLY t) int i,n,j; FILE *fp; /*指向文件的指针*/ if(fp=fopen("record1.txt","rb")=NULL)/*打开文件*/ printf("can not open filen"); /*不能打开*/ exit(1); /*退出*/ fscanf(fp,"%d",&n); /*读入记录数*/ for(i=0;i<n;i+) fscanf(fp,"%s %s %s %s %s %d %s %s",ti.planenumber,ti.city1,ti.city2,ti.time1,ti.time2,&ti.room,ti.price,ti.discount); fscanf(fp,"%d",&ti.sit); /*读入记录数*/ for(j=0;j<ti.sit;j+) fscanf(fp,"%s %s %s %d %s",ti.guestj.number,ti.guestj.name,ti.guestj.id,&ti.guestj.count,ti.guestj.flightname); /*按格式读入记录*/ fclose(fp); /*关闭文件*/ printf("You have success read data from file!nnnn"); /*显示保存成功*/ return n; /*返回记录数*/*主函数*/main() int i; FLY flightQ; int length; /*保存记录长度*/ clrscr(); /*清屏*/ textcolor(YELLOW); /*字体颜色*/ textbackground(BLUE);/*背景颜色*/ for(;)/*无限循环*/ switch(menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ case 0:length=enter(flight);break;/*输入记录*/ case 1:list(flight,length);break; /*显示全部记录*/ case 2:search1(flight,length);break; /*查找记录*/ case 3:search2(flight,length);break; /*查找记录*/ case 4:book(flight,length);break; /*订票*/ case 5:quit(flight,length);break; /*退票*/ case 6:channge(flight,length);break; /*修改航班信息*/ case 7:save(flight,length);break; /*保存文件*/ case 8:length=load(flight); break; /*读文件*/ case 9:exit(0); /*如返回值为9则程序结束*/ 4.菜单窗口订票系统菜单窗口0.输入航班的信息1.列出航班的信息2.按航班号查询航班信息3.按城市来查询航班4.订票程序5.退票系统6.修改飞机航班的信息7.保存文件8.读取文件 、下载文件专心-专注-专业