1、C语言飞机订票系统飞机订票系统一、课程设计目的(1)了解并掌握算法的设计方法,具备初步的独立分析和设计能力;(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;二、课程设计的内容和要求本程序主要用于机票的管理,甩以提供了以下功能,行班信息输入输出保存、航线查询、订票,退票,和修改航班信息。创建航班信息:包括航班号、起飞时间、降落时间、起飞抵达城市、航班票价、及票价的折扣,票数等信息.录入的信息应该保存在一个文件里。 浏览航班信息:通过浏览系统,客户可以根据自己时间、金钱等多方面的因素选择适合自己的航班。
2、修改航班信息:当航班信息改变可以修改航班数据文件。查询航班信息:可通过航班号查询,可通过飞机终点站查询,也可以按航线查询。删除航班信息:可通过航班号删除,也可以按航线删除。添加航班信息:按添加的航班数量依次添加航班信息订票:可以订票,如果该航班已经无票,可以推荐相关航班退票:不满意所订的票时可进行退票三、算法的基本思想1.涉及到的数据结构typedef struct flightnode /定义结构体数组 int num; /航班号 char start20; /起始城市 char over20; /终点城市 char Stime10; /起始时间 har Etime10; int Price
3、; int Discount; /折扣 int count; /机票数struct flightnode *next; NODE;2.基本功能模块主函数模块。1)函数原形:void main();2)功能:调用initlist(&h) 函数和menu()函数,初始化函数和显示主界面创建航班信息模块1)函数原形:void creat();2)功能:本模块是对程序中的create()函数和save()函数的详细说明链表的存储结构,对该创建的链表调用save()函数,存储到数据文件中去浏览航班信息模块1) 函数原形: void print();2) 功能:输出航班信息修改航班信息模块1)函数原形:
4、void change() 2) 功能:当航班信息改变可以修改航班数据文件3主要功能模块流程图 四、系统测试1.选择1,运行界面如下:2选择2,运行界面如下:3选择3,运行界面如下:4选择4,运行界面如下:5选择5,运行界面如下:6.选择6,运行界面如下:7.选择7,运行界面如下: 8.选择8,运行界面如下:9.选择0,运行界面如下:五结论 本次程序设计主要用到了结构体、调用函数、文件的保存、输入以及输出等功能。使我对数据结构有了更深一层的认识,特别是对动态链表和文件的运用得到了很大的提高。在本次实验中程序曾多次编译、运行出错,多亏了王帅老师的指导才将错误找出并改正,通过本次实验,我认识到实践
5、和动手的重要性。六源程序及系统文件使用说明程序清单#include /标准输入、输出头文件#include /包含字符串函数处理头文件#include /包含动态存储与释放函数头文件typedef struct flightnode /定义结构体数组 int num; /航班号 char start20; /起始城市 char over20; /终点城市 char Stime10; /起始时间 char Etime10; int Price; float Discount; /折扣 int count; /机票数 struct flightnode *next; NODE;#define PR
6、INT %4d %9.6s %9.6s %9.6s %9.6s %9d %.1f %9d n,p-next-num,p-next-start,p-next-over,p-next-Stime,p-next-Etime,p-next-Price,p-next-Discount,p-next-count /定义输出格式void creat(); /创建航班信息文件void print(); /输出航班信息void save(); /保存航班信息 int read(); /读取航班信息NODE *search(); /查找航班信息void del(); /删除航班信息int book_tickets
7、(); /订票信息int tuipiao(); /退票信息void change(); /修改信息void menu(); /菜单void initlist(NODE *); /初始化函数void add(); /添加信息函数NODE *h=NULL; /建立全局变量,存链表头指针int m=0; /航班数量void initlist(NODE *h) *h=(NODE *)malloc(sizeof(NODE); (*h)-next=NULL;void creat() /打印模块程序 FILE *fp; NODE *p=NULL; /定义移动指针 int i,flightnum; char
8、y; p=h; if(fp=fopen(air.dat,rb)!=NULL)/打开文件,并判断是否出错 printf( 信息文件已经存在,不必创建!按任意键后回车返回nnn);/打印出错提示 fclose(fp); fflush(stdin); getchar(); return ; p=h; printf(请输入要输入的航班数量:); fflush(stdin); /清除文件缓冲区 scanf(%d,&flightnum); /读取航班数 system(cls); /清屏 printf( 请依次输入航班信息:nn); /打印提示信息 printf(-n); for(i=0;inext=(NO
9、DE *)malloc(sizeof(NODE); p-next-next=NULL; printf(航班号:); fflush(stdin); scanf(%d,&p-next-num); /读取航班号 printf(起始站:); fflush(stdin); scanf(%10s,&p-next-start);/读取起飞城市 printf(终点站:); fflush(stdin); scanf(%10s,&p-next-over);/读取抵达城市 printf(起始时间:); fflush(stdin); scanf(%10s,&p-next-Stime);/读取起飞时间 printf(抵
10、达时间:); fflush(stdin); scanf(%10s,&p-next-Etime);/读取抵达时间 printf(航班票价:); fflush(stdin); scanf(%d,&p-next-Price);/读取航班票价 printf(票价折扣:); fflush(stdin); scanf(%10f,&p-next-Discount);/读取票价折扣 printf(机票数:,m); fflush(stdin); scanf(%d,&p-next-count);/读取机票数 printf( 第%d个信息已经输完n,i+1); p=p-next; m+; printf(信息输入完毕
11、,是否存盘:存盘按0,不存盘按其他任意键); fflush(stdin); y=getchar(); if(y=0) save();/将结构体信息存盘 print();/输出输入的航班信息 void save()/保存模块程序 NODE *p=NULL;/定义移动指针 FILE *fp,*fp1;/定义指向文件指针 p=h; if(fp=fopen(air.dat,wb)=NULL)/打开文件并判断是否出错 printf( 创建文件失败!nnn);/打印出错提示 fflush(stdin); getchar(); return; if(fp1=fopen(num.dat,wb)=NULL)/打
12、开文件并判断是否出错 printf( 创建文件失败!nnn);/打印出错提示 fflush(stdin); getchar(); return; while(p-next!=NULL) if(fwrite(p-next,sizeof(NODE),1,fp)=0)/向文件写入数据,并判断是否出错 printf( 向文件输入数据失败!nnn); break; else p=p-next; fprintf(fp1,%d,m); /按指定的格式输出到fp1所指定的文件中 fclose(fp);/关闭文件 fclose(fp1);/关闭文件int read()/从文件读取信息模块 FILE *fp,*f
13、p1;/定义文件指针 NODE *p=NULL; int i; initlist(&h); p=h; if(fp=fopen(air.dat,rb)=NULL)/打开文件,并判断是否出错 printf(出错,请检查信息文件是否存在,按任意键后回车返回住菜单nnn);/打印出错提示 fflush(stdin); getchar(); return 0; if(fp1=fopen(num.dat,rb)=NULL)/打开文件并判断是否出错 printf( 创建文件失败!nnn);/打印出错提示 fflush(stdin); getchar(); return 0; fscanf(fp1,%d,&m
14、); /从fp1所指定的文件中按给定的格式将输入数据送内存中 fclose(fp1);/关闭文件 printf(n 总共%d个航班信息n,m); for(i=0;inext=(NODE *)malloc(sizeof(NODE); p-next-next=NULL; fread(p-next,sizeof(NODE),1,fp);/从文件中读取信息 p=p-next; fclose(fp);/关闭文件 return 1; void print()/打印模块 NODE *p=NULL; if(read()=0)return;/调用读取文件函数,并判断是否文件存在。 p=h; printf(n);
15、 printf(航班号 起始站 终点站 起始时间 抵达时间 航班票价 票价折扣 票数 n); while(p-next!=NULL) printf(PRINT);/打印信息 p=p-next; printf(); printf(nnnnnn请按任意键后回车结束返回上层菜单:n); fflush(stdin); getchar();NODE *search()/查询模块 NODE *p=NULL; NODE *x=NULL; /*用于记录查询到的记录*/ char name120; char name220; char ii10; int n,no; int flag=0; if(read()=
16、0)return 0; p=h; do printf( 请选择查找方式:nn); /打印查询方式菜单 printf(-n); printf( 1.按航班号查找nn 2.按终点站查找nn 3.按航线查找nn 0.返回nn); printf( 请在0-3中选择:nn 按其他键后回车返回主菜单:nnnnn); fflush(stdin); scanf(%d,&n);/读取查找方式 if(n=0) break; switch(n) case 1: printf( 请输入航班号:n); fflush(stdin); scanf(%d,&no);/航班号 break; case 2: printf( 请输
17、入终点站名称:n); fflush(stdin); scanf(%10s,name2);/读取终点站 break; case 3: printf( 请输入起始站名称:n); fflush(stdin); scanf(%10s,name1);/读取起始站 printf( 请输入终点站名称:n); fflush(stdin); scanf(%10s,name2);/终点站 break; default: printf( 请选择有效查询方式!nnn); while(p-next!=NULL) if(strcmp(p-next-start,name1)=0|strcmp(p-next-over,nam
18、e2)=0) /按终点站起始站判断输出条件 printf( n查找航班信息成功!nnn); printf(航班号 起始站 终点站 起始时间 抵达时间 航班票价 票价折扣 票数n); printf(PRINT);/打印信息 x=p-next; flag=1; break; if(p-next-num=no)/按航班号判断输出条件 printf( n查找航班信息成功!nnn); printf(航班号 起始站 终点站 起始时间 抵达时间 航班票价 票价折扣 票数n); printf(PRINT);/打印信息 x=p-next; flag=1; break; p=p-next; if(!flag) p
19、rintf(查找失败!:nnnnn); printf ( nnn 是否重新查找?n 请键入yes或non 后回车键结束 n - nnnnn); no=0;/将航班号赋值为0 p=h; flag=0; fflush(stdin); scanf(%10s,ii); while(strcmp(ii,yes)=0);/判断结束 return(x);void add() int flightnum; int i,y; NODE*p=NULL; i=read(); if(i=0)return; p=h; while(p-next!=NULL)p=p-next; printf(请输入要输入的航班数量:);
20、fflush(stdin); scanf(%d,&flightnum); /读取航班数 system(cls); printf( 请依次输入航班信息:nn); /打印提示信息 printf(-n); for(i=0;inext=(NODE *)malloc(sizeof(NODE); p-next-next=NULL; printf(航班号:); fflush(stdin); scanf(%d,&p-next-num); /读取航班号 printf(起飞城市:); fflush(stdin); scanf(%10s,&p-next-start);/读取起飞城市 printf(抵达城市:); f
21、flush(stdin); scanf(%10s,&p-next-over);/读取抵达城市 printf(起飞时间:); fflush(stdin); scanf(%10s,&p-next-Stime);/读取起飞时间 printf(抵达时间:); fflush(stdin); scanf(%10s,&p-next-Etime);/读取抵达时间 printf(航班票价:); fflush(stdin); scanf(%d,&p-next-Price);/读取航班票价 printf(票价折扣:); fflush(stdin); scanf(%10f,&p-next-Discount);/读取票
22、价折扣 printf(机票数:,m); fflush(stdin); scanf(%d,&p-next-count);/读取机票数 printf( 第%d个信息已经输完n,i+1); p=p-next; m+; printf(信息输入完毕,是否存盘:存盘按0,不存盘按其他任意键后回车); fflush(stdin); scanf(%d,&y); if(y=0) save();/将结构体信息存盘 print();/输出输入的航班信息 void del()/删除模块 NODE *p=NULL; NODE *temp=NULL; char name120; char name220; char ii
23、10; int no,n; int flag=0; if(read()=0)return;/调用读取函数 do printf( 请选择删除以方式回车键结束:nn); printf( *1.按航班号删除nn *2.按航线删除nn *0.返回nn); printf( 请在0-2中选择以回车键结束:nnn); fflush(stdin); scanf(%d,&n);/读取删除方式 if(n=0) break; /跳出循环 switch(n) case 1: printf( 航班号:n); fflush(stdin); scanf(%d,&no); /读取航班号 p=h; break; /跳出循环 c
24、ase 2: printf( 起始站名称:n); fflush(stdin); scanf(%10s,name1);/读取起始站 printf( 终点站名称:n); fflush(stdin); scanf(%10s,name2); /读取终点站 p=h; break; /跳出循环 default: printf( 请选择有效的选项:n); continue; while(p-next!=NULL) if(p-next-num=no|(strcmp(p-next-start,name1)=0&strcmp(p-next-over,name2)=0) ./判断输入信息是否存在 temp= p-next-next; p-next=temp; m-; flag=1; printf( 删除成功!剩余%d条信息nnnnn,m); break; p= p-next; if(!flag)printf( 没有这个信息!nnnnn); printf( 是否继续删除n 请键入yes或no以回车键结束n); fflush(stdin); scanf(%10s,ii); /读取是否继续信息 save(); /调用存储函数 if(!strcmp(ii,yes) /判断是否继续删除 printf( 请按任意键后回车结束返回上层菜单:nnnnnn); break; whi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1