1、 int Discount; /折扣 int count; /机票数struct flightnode *next; NODE;2.基本功能模块主函数模块。1)函数原形:void main();2)功能:调用initlist(&h) 函数和menu()函数,初始化函数和显示主界面创建航班信息模块void creat();本模块是对程序中的create()函数和save()函数的详细说明链表的存储结构,对该创建的链表调用save()函数,存储到数据文件中去浏览航班信息模块1) 函数原形: void print();2) 功能:输出航班信息修改航班信息模块1)函数原形: void change()
2、 当航班信息改变可以修改航班数据文件20查找航班信息模块 NODE *search():查找航班信息数据由于航班的录入和保存是由链表存储结构进行的,所以此查询就可通过链表对该文件进行查看或者查询,查询我们可根据航班号和航班抵达的城市和航线匹配查询,在查询中将需要查询的航班号 no和文件阅读时指针所指的值num进行比较,而按抵达城市查找则利用函数strcmp(p-next-start,name1)若匹配则输出;删除航班信息模块 void del()选择按什么方式删除,然后按该方式删除添加航班信息模块 void add();订票信息模块 int book_tickets()先根据search()函
3、数查询要订票的航班,在订票时应先按乘客想要定的航班号或者抵达城市或航线查询,并按乘客欲定的票的数目与查询数目进行比较,若订票的票数小于该航班票数,则输出订票成功,且在整个定票系统中,所有的定票都用链表进行存储管理退票信息模块 int tuipiao()在退票系统中即对航班票的数据文件进行管理,所以可先按照查询航班票的方法,若查询到的票的信息和乘客此时要求退票的信息相匹配,则在该定票数据文件中删除相应的该票的节点,再修改其航班信息。3主要功能模块流程图四、系统测试1.选择1,运行界面如下:2选择2,运行界面如下:3选择3,运行界面如下:4选择4,运行界面如下:5选择5,运行界面如下:6.选择6,
4、运行界面如下:7.选择7,运行界面如下:8.选择8,运行界面如下:9.选择0,运行界面如下:五结论 本次程序设计主要用到了结构体、调用函数、文件的保存、输入以及输出等功能。使我对数据结构有了更深一层的认识,特别是对动态链表和文件的运用得到了很大的提高。在本次实验中程序曾多次编译、运行出错,多亏了王帅老师的指导才将错误找出并改正,通过本次实验,我认识到实践和动手的重要性。六源程序及系统文件使用说明程序清单#include /标准输入、输出头文件string.h /包含字符串函数处理头文件stdlib.h /包含动态存储与释放函数头文件 char Stime10; char Etime10; fl
5、oat Discount; struct flightnode *next;#define PRINT %4d %9.6s %9.6s %9.6s %9.6s %9d %.1f %9d n,p-num,p-start,p-over,p-Stime,p-Etime,p-Price,p-Discount,p-count /定义输出格式 /创建航班信息文件void print(); /输出航班信息void save(); /保存航班信息 int read(); /读取航班信息NODE *search(); /查找航班信息void del(); /删除航班信息int book_tickets(); /
6、订票信息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 y; p=
7、h; if(fp=fopen(air.dat,rb)!=NULL)/打开文件,并判断是否出错 printf( 信息文件已经存在,不必创建!按任意键后回车返回nnn);/打印出错提示 fclose(fp); fflush(stdin); getchar(); return ; printf(请输入要输入的航班数量: fflush(stdin); /清除文件缓冲区 scanf(%d,&flightnum); /读取航班数 system(cls /清屏 请依次输入航班信息:nn /打印提示信息-n for(i=0;inext=(NODE *)malloc(sizeof(NODE);航班号: scan
8、f(p-num); /读取航班号起始站:%10sstart);/读取起飞城市终点站:over);/读取抵达城市起始时间:Stime);/读取起飞时间抵达时间:Etime);/读取抵达时间航班票价:Price);/读取航班票价票价折扣:%10fDiscount);/读取票价折扣机票数:,m);count);/读取机票数 第%d个信息已经输完n,i+1); p=p-next; m+; 信息输入完毕,是否存盘:存盘按0,不存盘按其他任意键 y=getchar(); if(y=0) save();/将结构体信息存盘 print();/输出输入的航班信息 void save()/保存模块程序/定义移动指
9、针 FILE *fp,*fp1;/定义指向文件指针wb)=NULL)/打开文件并判断是否出错 创建文件失败!nnn return; if(fp1=fopen(num.dat 创建文件失败! while(p-next!=NULL) if(fwrite(p-next,sizeof(NODE),1,fp)=0)/向文件写入数据,并判断是否出错 printf( 向文件输入数据失败! break; else p=p- fprintf(fp1, /按指定的格式输出到fp1所指定的文件中 fclose(fp);/关闭文件 fclose(fp1);int read()/从文件读取信息模块/定义文件指针 int
10、 i; initlist(&h);)=NULL)/打开文件,并判断是否出错出错,请检查信息文件是否存在,按任意键后回车返回住菜单nnn return 0;nnn fscanf(fp1,m); /从fp1所指定的文件中按给定的格式将输入数据送内存中n 总共%d个航班信息nm; fread(p-next,sizeof(NODE),1,fp);/从文件中读取信息 return 1;void print()/打印模块 if(read()=0)return;/调用读取文件函数,并判断是否文件存在。n航班号 起始站 终点站 起始时间 抵达时间 航班票价 票价折扣 票数 n printf(PRINT);/打
11、印信息nnnnnn请按任意键后回车结束返回上层菜单:n getchar();NODE *search()/查询模块 NODE *x=NULL; /*用于记录查询到的记录*/ char name120; char name220; char ii10; int n,no; int flag=0; if(read()=0)return 0; do 请选择查找方式: /打印查询方式菜单 1.按航班号查找nn 2.按终点站查找nn 3.按航线查找nn 0.返回nn 请在0-3中选择: 按其他键后回车返回主菜单:nnnnnn);/读取查找方式 if(n=0) switch(n) case 1: 请输入航
12、班号: fflush(stdin); scanf(no);/航班号 case 2: 请输入终点站名称:,name2);/读取终点站 case 3: 请输入起始站名称:,name1);/读取起始站/终点站 default: 请选择有效查询方式! while(p- if(strcmp(p-start,name1)=0|strcmp(p-over,name2)=0) /按终点站起始站判断输出条件 printf( n查找航班信息成功!航班号 起始站 终点站 起始时间 抵达时间 航班票价 票价折扣 票数n printf(PRINT); x=p- flag=1; break; if(p-num=no)/按
13、航班号判断输出条件 p=p- if(!flag) printf(查找失败!: printf ( 是否重新查找? 请键入yes或non 后回车键结束 n- nnnnn no=0;/将航班号赋值为0 p=h; flag=0;,ii); while(strcmp(ii,yes)=0);/判断结束 return(x);void add() int flightnum; int i,y; NODE*p=NULL; i=read(); if(i=0)return;=NULL)p=p-起飞城市:抵达城市:起飞时间: 存盘按0,不存盘按其他任意键后回车y); if(y=0) save(); print();void del()/删除模块 NODE *temp=NULL; int no,n; if(read()=0)return;/调用读取函数 do 请选择删除以方式回车键结束: *1.按航班号删除nn *2.按航线删除nn *0.返回nn 请在0-2中选择以回车键结束:/读取删除方式 if(n=0) /跳出循环 switch(n) case 1: 航班号: fflush(stdin); scanf( p=h; case 2: 起始站名称: 终点站名称: /读取终点站 bre
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1