数据结构课程设计——飞机航线查询系统

合集下载

数据结构课程设计--航班信息查询与检索系统

数据结构课程设计--航班信息查询与检索系统

一、设计题目设计一个航班信息查询与检索系统。

二、基本要求1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。

2、要有输入模块3、对航班信息进行排序与查找。

三、运行环境CPU:奔腾3;操作系统:Windows 98;编程工具:TC2.0。

四、算法设计思想1、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。

程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。

在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。

2、流程图3、各函数说明(1)、一趟数字字符分配函数void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e)(2)、一趟数字字符收集函数void collect(slnode *sl,int i,arrtype_n f,arrtype_n e)(3)、一趟字母字符分配函数void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e)(4)、一趟字母字符收集函数void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e)(5)、链式基数排序函数void radixsort(sllist &l)(6)、按指针链重新整理静态链表void arrange(sllist &l)//重新整理(7)、二分查找函数int binsearch(sllist l,keytype key[]) (8)、顺序查找函数void seqsearch(sllist l,keytype key[],int i) (9)、查询检索菜单控制程序void searchcon(sllist l)(10)、录入航班数据函数void inputdata(sllist &l)(11)、主函数void main()五、源代码#include "stdafx.h"#include <stdio.h>#include <string.h>#define maxspace 100#define keylen 7#define radix_n 10#define radix_c 26typedef char keytype;typedef struct{char start[6];char end[6];char sche[10];char time1[5];char time2[5];char model[4];int price;}infotype;typedef struct{keytype keys[keylen];infotype others;int next;}slnode;typedef struct{slnode sl[maxspace];int keynum;int length;}sllist;typedef int arrtype_n[radix_n];typedef int arrtype_c[radix_c];void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) {int j,p;for(j=0;j<radix_n;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%48;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}void collect(slnode *sl,int i,arrtype_n f,arrtype_n e) {int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<radix_n-1){for(j=j+1;j<radix_n-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,p;for(j=0;j<radix_c;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%65;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<radix_c-1){for(j=j+1;j<radix_c-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}void radixsort(sllist &l)//链式{int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i<l.length;i++)l.sl[i].next=i+1;l.sl[l.length].next=0;for(i=l.keynum-1;i>=2;i--){distribute(l.sl,i,fn,en);collect(l.sl,i,fn,en);}for(i=1;i>=0;i--){distribute_c(l.sl,i,fc,ec);collect_c(l.sl,i,fc,ec);}}void arrange(sllist &l) //重新整理{int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<i)p=l.sl[p].next;q=l.sl[p].next;if(p!=i){temp=l.sl[p];l.sl[p]=l.sl[i];l.sl[i]=temp;l.sl[i].next=p;}p=q;}}int binsearch(sllist l,keytype key[]){int low,high,mid;low=1;high=l.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,l.sl[mid].keys)==0)return mid;else if(strcmp(key,l.sl[mid].keys)<0)high=mid-1;elselow=mid+1;}return 0;}void seqsearch(sllist l,keytype key[],int i){int j,k,m=0;printf("*************************************************************\n"); printf("* 航班号起点站终点站航班期起飞时间到达时间机型票价*\n"); for(j=1;j<=l.length;j++){switch(i){case 2:k=strcmp(key,l.sl[j].others.start);break;case 3:k=strcmp(key,l.sl[j].others.end);break;case 4:k=strcmp(key,l.sl[j].others.time1);break;case 5:k=strcmp(key,l.sl[j].others.time2);break;}if(k==0){m=1;printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[j].keys,l.sl[j].others.start,l.sl [j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others.time2,l.sl[j].others.model,l.sl[j].others.price);}}if(m==0)printf("* 无此航班信息,可能是输入错误!*\n");printf("*************************************************************\n"); }void searchcon(sllist l){keytype key[keylen];int i=1,k;while(i>=1&&i<=5){printf("\********************\n");printf(" * 航班信息查询系统*\n");printf(" ********************\n");printf(" * 1.航班号*\n");printf(" * 2.起点站*\n");printf(" * 3.终点站*\n");printf(" * 4.起飞时间*\n");printf(" * 5.到达时间*\n");printf(" * 0.退出系统*\n");printf(" ********************\n");printf(" 请选择(0-5):");scanf("%d",&i);printf("\n");switch(i){case 1:printf("输入要查询的航班号(字母要大写):");scanf("%s",key);k=binsearch(l,key);printf("*************************************************************\n"); if(k==0)printf("* 无此航班信息,可能是输入错误!*\n");else{printf("* 航班号起点站终点站航班期起飞时间到达时间机型票价*\n"); printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l.sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price);}printf("*************************************************************\n"); break;case 2:printf("输入要查询的航班起点站名:");scanf("%s",key);seqsearch(l,key,i);break;case 3:printf("输入要查询的航班终点站名:");scanf("%s",key);seqsearch(l,key,i);break;case 4:printf("输入要查询的航班起飞时间:");scanf("%s",key);seqsearch(l,key,i);break;case 5:printf("输入要查询的航班到达时间:");scanf("%s",key);seqsearch(l,key,i);break;case 0:printf("\n\n\n 再见\n\n\n");}}}void inputdata(sllist &l){int i=++l.length;char yn='y';while(yn=='y'||yn=='Y'){printf("航班号起点站终点站航班期起飞时间到达时间机型票价\n"); scanf("%s%s%s%s%s%s%s%d",l.sl[i].keys,l.sl[i].others.start,l.sl[i].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&l.sl[i].others.price);++i; getchar();radixsort(l);arrange(l);printf("继续输入吗?y/n:");scanf("%c",&yn);}l.length=i-1;}void main(){sllist l;l.keynum=6;l.length=0;inputdata(l);searchcon(l);}六、运行结果1、录入航班信息编译后运行,显示:航班号起点站终点站航班期起飞时间到达时间机型票价录入:MU4594昆明西安 1.3.5.6 10151140 3281160↙显示:继续输入吗?y/n:录入:y↙显示:航班号起点站终点站航班期起飞时间到达时间机型票价录入:SC7425青岛海口 1.3.6 19202120 DH41630↙显示:继续输入吗?y/n:录入:n↙2、航班信息查询录入航班信息后,屏幕显示:********************* 航班信息查询系统********************** 1.航班号** 2.起点站** 3.终点站** 4.起飞时间** 5.到达时间** 0.退出系统*********************请选择(0-5):录入:1↙显示:输入要查询的航班号(字母要大写):录入:MU4594↙显示:航班号起点站终点站航班期起飞时间到达时间机型票价MU4594-昆明-西安-1.3.5.6 -1015 -1140 -328 -1160 录入:2↙显示:输入要查询的航班起点站名:录入:青岛↙显示:航班号起点站终点站航班期起飞时间到达时间机型票价SC7425-青岛-海口-1.3.6 -1920-2120 -DH4-1630↙录入:2↙显示:输入要查询的航班起点站名:录入:广州↙显示:* 无此航班信息,可能是输入错误!*七、收获与体会本设计的重点和难点是在于对航班数据的排序和查找,以链式基数排序为主线,用到了二分查找和顺序查找等知识,还有建立静态链表等。

航班信息查询与检索系统

航班信息查询与检索系统

课程设计报告课程设计名称:数据结构课程设计题目:设计并实现一个航班信息查询与检索系统院系:计算机学院专业:班级:学号:姓名:指导教师:学术诚信声明本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。

尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。

与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。

报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。

本人签名: 日期:年月日目录1 题目介绍 (5)2 课程设计要求 (5)2.1课程设计内容 (5)2.2课程设计目标 (5)3 概要设计 (5)3.1设计思路 (5)3.2流程图 (5)4 算法概述 (6)4.1定义数据类型 (6)4.2函数描述 (7)5 测试数据 (10)附录(关键部分程序清单) (12)1、题目介绍设计一个航班信息查询与检索系统。

可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。

2、课程设计要求1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。

如下表所示:2、对航班信息进行排序与查找。

3、概要设计3.1、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。

程序首先定义了一个储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。

在查询设计中,使用折半查找法对排好序的航班号数据实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。

3.2、流程图4、算法实现4.1 . 定义数据类型根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:typedef struct {char start[6]; //起点站char end[6]; //终点站char sche[10]; //班期char time1[5]; //起飞时间char time2[5]; //到达时间char model[4]; //机型int price; //票价}info; //航班记录类型typedef struct{char keys[keylen]; //关键字info others;int next;}slnode; //表结点typedef struct{slnode sl[maxspace];int keynum; //关键字长int length; //当前表长}sllist; //静态链表类型为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:typedef int arrtype_n[10]; //十进制数字指针数组typedef int arrtype_c[26]; //26个字母指针数组4.2 . 函数描述void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e){int j,p;for(j=0;j<10;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%48; //将数字字符转化为对应的数值型数字if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p; //将p指向的结点插入到第j个结点}}void collect(slnode *sl,int i,arrtype_n f,arrtype_n e){int j,t;for(j=0;!f[j];j++); //找第一个非空子表sl[0].next=f[j];t=e[j];while(j<10-1){for(j=j+1;j<10-1&&!f[j];j++); //找下一个非空子表if(f[j]){sl[t].next=f[j];t=e[j];} //链接两个非空子表}sl[t].next=0;}链式基数排序算法void radixsort(sllist &l){int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i<l.length;i++)l.sl[i].next=i+1;l.sl[l.length].next=0; //将普通的线性表改为静态链表for(i=l.keynum-1;i>=2;i--) //按最低位优先依次对各关键字进行分配和收集{distribute(l.sl,i,fn,en);collect(l.sl,i,fn,en);}for(i=1;i>=0;i--){distribute_c(l.sl,i,fc,ec);collect_c(l.sl,i,fc,ec);}}void arrange(sllist &l) //按指针链表整理静态链表{int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<i)p=l.sl[p].next;q=l.sl[p].next;if(p!=i){temp=l.sl[p];l.sl[p]=l.sl[i];l.sl[i]=temp; //交换记录l.sl[i].next=p;}p=q;}}折半查找函数定义int binsearch(sllist l,char key[]){int low,high,mid;low=1;high=l.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,l.sl[mid].keys)==0)return mid;else if(strcmp(key,l.sl[mid].keys)<0)high=mid-1;elselow=mid+1;}return 0;}5、测试数据编译后运行,显示:录入信息^_^航班号起点站终点站班期起飞时间到达时间机型票价录入:CA1544合肥北京 1.2.4.5 1055 1240 733 960显示:是否继续?y/n:录入:y显示:航班号起点站终点站班期起飞时间到达时间机型票价录入:MU5341 上海广州每日1420 1615 M90 1280显示:是否继续?y/n:录入:y显示:航班号起点站终点站班期起飞时间到达时间机型票价录入:CZ3869 重庆深圳 2.4.6 0855 1035 733 1010显示:是否继续?y/n:录入:n录入航班信息后,屏幕显示:-------------------------------* 航班信息查询系统 *-------------------------------* 1.航班号 ** 2.起点站 ** 3.终点站 ** 4.起飞时间 ** 5.到达时间 ** 0.退出 *-----------------------------(0-5)号服务项目:录入:1显示:输入要查询的航班号(字母要大写):录入:CA1544显示:航班号起点站终点站班期起飞时间到达时间机型票价CA1544合肥北京 1.2.4.5 1055 1240 733 960录入:2显示:输入要查询的航班起点站:录入:合肥显示:航班号起点站终点站班期起飞时间到达时间机型票价显示:CA1544合肥北京 1.2.4.5 1055 1240 733 960录入:2显示:输入要查询的航班起点站:录入:广州显示:附录源程序:#include <stdio.h>#include <string.h>#define max 100#define keylen 7typedef struct{char start[6];char end[6];char sche[10];char time1[5];char time2[5];char model[4];int price;}info;typedef struct{char keys[keylen];info others;int next;}slnode;typedef struct{slnode sl[max];int keynum;int length;}sllist;typedef int arrtype_n[10];typedef int arrtype_c[26];void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) {int j,p;for(j=0;j<10;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%48;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}void collect(slnode *sl,int i,arrtype_n f,arrtype_n e){int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<10-1){for(j=j+1;j<10-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,p;for(j=0;j<26;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%65;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<26-1){for(j=j+1;j<26-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}void radixsort(sllist &l){int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i<l.length;i++)l.sl[i].next=i+1;l.sl[l.length].next=0;for(i=l.keynum-1;i>=2;i--){distribute(l.sl,i,fn,en);collect(l.sl,i,fn,en);}for(i=1;i>=0;i--){distribute_c(l.sl,i,fc,ec);collect_c(l.sl,i,fc,ec);}}void arrange(sllist &l){int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<i)p=l.sl[p].next;q=l.sl[p].next;if(p!=i){temp=l.sl[p];l.sl[p]=l.sl[i];l.sl[i]=temp;l.sl[i].next=p;}p=q;}}int binsearch(sllist l,char key[]){int low,high,mid;low=1;high=l.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,l.sl[mid].keys)==0)return mid;else if(strcmp(key,l.sl[mid].keys)<0)high=mid-1;elselow=mid+1;}return 0;}void seqsearch(sllist l,char key[],int i){int j,k,m=0;printf("------------------------------------------------------------\n");printf(" 航班号起点站终点站班期起飞时间到达时间机型票价 \n");for(j=1;j<=l.length;j++){switch(i){case 2:k=strcmp(key,l.sl[j].others.start);break;case 3:k=strcmp(key,l.sl[j].others.end);break;case 4:k=strcmp(key,l.sl[j].others.time1);break;case 5:k=strcmp(key,l.sl[j].others.time2);break;}if(k==0){m=1;printf(" %-8s%-7s%-7s%-11s%-6s%-6s%5s%4d\n",l.sl[j].keys,l.sl[j].others.start,l.sl[j].others.end,l.sl[j].others.sche,l. sl[j].others.time1,l.sl[j].others.time2,l.sl[j].others.model,l.sl[j].others.pri ce);}}if(m==0)printf(" 无此航班信息,可能是输入错误! \n");printf("-------------------------------------------------------\n");}void searchcon(sllist l){char key[keylen];int i=1,k;while(i>=1&&i<=5){printf("----------------------\n");printf(" * 航班信息查询系统 *\n");printf("----------------------\n");printf(" * 1.航班号 *\n");printf(" * 2.起点站 *\n");printf(" * 3.终点站 *\n");printf(" * 4.起飞时间 *\n");printf(" * 5.到达时间 *\n");printf(" * 0.退出 *\n");printf(" ----------------------\n");printf(" (0-5)号服务项目:");scanf("%d",&i);printf("\n");switch(i){case 1:printf("输入要查询的航班号(字母要大写):");scanf("%s",key);k=binsearch(l,key);printf("--------------------------------------------------------------\n");if(k==0)printf(" 无此航班信息,可能是输入错误! \n");else{printf(" 航班号起点站终点站班期起飞时间到达时间机型票价 \n");printf(" %-8s%-7s%-7s%-11s%-6s%-6s%-5s%4d\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l. sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.pri ce);}printf("--------------------------------------------------------------\n");break;case 2:printf("输入要查询的航班起点站:");scanf("%s",key);seqsearch(l,key,i);break;case 3:printf("输入要查询的航班终点站:");scanf("%s",key);seqsearch(l,key,i);break;case 4:printf("输入要查询的航班起飞时间:");scanf("%s",key);seqsearch(l,key,i);break;case 5:printf("输入要查询的航班到达时间:");scanf("%s",key);seqsearch(l,key,i);break;case 0:printf("\n\n宝宝走了\n\n");}}}void inputdata(sllist &l){int i=++l.length;char yn='y';while(yn=='y'||yn=='Y'){printf("信息录入^_^\n\n");printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");scanf("%s %s %s %s %s %s %s %d",l.sl[i].keys,l.sl[i].others.start,l. sl[i].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2, l.sl[i].others.model,&l.sl[i].others.price);++i;getchar();radixsort(l);arrange(l);printf("是否继续?\ny/n:");scanf("%c",&yn);}l.length=i-1;}void main(){sllist l;l.keynum=6;l.length=0;inputdata(l);searchcon(l);}。

数据结构课程设计航班信息查询与检索

数据结构课程设计航班信息查询与检索
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:
问题描述:该设计要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
slnode sl[maxspace];//静态链表,s1[0]为头结点
int keynum;//关键字长
int length;//当前表长
}sllist;//静态链表类型
为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:
typedef int arrtype_n[10];//十进制数字指针数组
char time2[5];//到达时间
char model[4];//机型
int price;//票价
}infotype;//航班记录类型
typedef struct{
keytype keys[keylen];//关键字
infotype others;
int next;
}slnode;//表结点
typedef struct{
2.算法实现………………………………………………………8
五、测试数据………………………………………………………10
六、收获与体会……………………………………………………13
七、参考文献………………………………………………………13
八、附录……………………………………………………………14
一、 概述
课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计(航空系统)

数据结构课程设计(航空系统)
char time_down[20];//到达时间
char end_place[20];//目的地
int price;//票价
int discount;//折扣
int total;//座位总数
int left;//剩余座位
struct airline *next;//下一个结点
printf("| 航班号 | 起飞时间 | 到达时间 | 目的地 | 票价 | 折扣 |座位总数|剩余座位|\n");
printf("+--------+------------+------------+----------+------+------+--------+--------+\n");
printf("请选择:");
scanf("%d",&d);
if(d==1)
{printf("请输入您所需要的航班号:");
scanf("%s",a);
p=A;
while(p!=NULL)
{if(strcmp(p->line_num,a)==0)
printf("\t3.订票\n");
printf("\t4.退票\n");
printf("\t5.修改航班信息\n");
printf("\t6.退出系统\n");
printf("==============================================\n");

航班信息查询与检索系统

航班信息查询与检索系统

.课程设计报告课程设计名称:数据结构课程设计题目:设计并实现一个航班信息查询与检索系统院系:计算机学院专业:班级:学号:姓名:指导教师:学术诚信声明本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。

尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。

与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。

报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。

本人签名: 日期:年月日目录1 题目介绍 (5)2 课程设计要求 (5)2.1课程设计内容 (5)2.2课程设计目标 (5)3 概要设计 (5)3.1设计思路 (5)3.2流程图 (5)4 算法概述 (6)4.1定义数据类型 (6)4.2函数描述 (7)5 测试数据 (10)附录(关键部分程序清单) (12)1、题目介绍设计一个航班信息查询与检索系统。

可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。

2、课程设计要求1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。

如下表所示:2、对航班信息进行排序与查找。

3、概要设计3.1、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。

程序首先定义了一个储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。

在查询设计中,使用折半查找法对排好序的航班号数据实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。

3.2、流程图4、算法实现4.1 . 定义数据类型根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:typedef struct {char start[6]; //起点站char end[6]; //终点站char sche[10]; //班期char time1[5]; //起飞时间char time2[5]; //到达时间char model[4]; //机型int price; //票价}info; //航班记录类型typedef struct{char keys[keylen]; //关键字info others;int next;}slnode; //表结点typedef struct{slnode sl[maxspace];int keynum; //关键字长int length; //当前表长}sllist; //静态链表类型为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:typedef int arrtype_n[10]; //十进制数字指针数组typedef int arrtype_c[26]; //26个字母指针数组4.2 . 函数描述void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e){int j,p;for(j=0;j<10;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%48; //将数字字符转化为对应的数值型数字if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p; //将p指向的结点插入到第j个结点}}void collect(slnode *sl,int i,arrtype_n f,arrtype_n e){int j,t;for(j=0;!f[j];j++); //找第一个非空子表sl[0].next=f[j];t=e[j];while(j<10-1){for(j=j+1;j<10-1&&!f[j];j++); //找下一个非空子表if(f[j]){sl[t].next=f[j];t=e[j];} //链接两个非空子表}sl[t].next=0;}链式基数排序算法void radixsort(sllist &l){int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i<l.length;i++)l.sl[i].next=i+1;l.sl[l.length].next=0; //将普通的线性表改为静态链表for(i=l.keynum-1;i>=2;i--) //按最低位优先依次对各关键字进行分配和收集{distribute(l.sl,i,fn,en);collect(l.sl,i,fn,en);}for(i=1;i>=0;i--){distribute_c(l.sl,i,fc,ec);collect_c(l.sl,i,fc,ec);}}void arrange(sllist &l) //按指针链表整理静态链表{int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<i)p=l.sl[p].next;q=l.sl[p].next;if(p!=i){temp=l.sl[p];l.sl[p]=l.sl[i];l.sl[i]=temp; //交换记录l.sl[i].next=p;}p=q;}}折半查找函数定义int binsearch(sllist l,char key[]){int low,high,mid;low=1;high=l.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,l.sl[mid].keys)==0)return mid;else if(strcmp(key,l.sl[mid].keys)<0)high=mid-1;elselow=mid+1;}return 0;}5、测试数据编译后运行,显示:录入信息^_^航班号起点站终点站班期起飞时间到达时间机型票价录入:CA1544合肥北京 1.2.4.5 10551240 733960显示:是否继续?y/n:录入:y显示:航班号起点站终点站班期起飞时间到达时间机型票价录入:MU5341上海广州每日14201615 M901280显示:是否继续?y/n:录入:y显示:航班号起点站终点站班期起飞时间到达时间机型票价录入:CZ3869 重庆深圳 2.4.6 0855 1035 733 1010显示:是否继续?y/n:录入:n录入航班信息后,屏幕显示:-------------------------------* 航班信息查询系统*-------------------------------* 1.航班号** 2.起点站** 3.终点站** 4.起飞时间** 5.到达时间** 0.退出*-----------------------------(0-5)号服务项目:录入:1显示:输入要查询的航班号(字母要大写):录入:CA1544显示:航班号起点站终点站班期起飞时间到达时间机型票价CA1544合肥北京1.2.4.5 10551240 733960录入:2显示:输入要查询的航班起点站:录入:合肥显示:航班号起点站终点站班期起飞时间到达时间机型票价显示:CA1544合肥北京 1.2.4.5 10551240 733960录入:2显示:输入要查询的航班起点站: 录入:广州显示:附录源程序:#include <stdio.h>#include <string.h>#define max 100#define keylen 7typedef struct{char start[6];char end[6];char sche[10];char time1[5];char time2[5];char model[4];int price;}info;typedef struct{char keys[keylen];info others;int next;}slnode;typedef struct{slnode sl[max];int keynum;int length;}sllist;typedef int arrtype_n[10];typedef int arrtype_c[26];void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) {int j,p;for(j=0;j<10;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%48;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}void collect(slnode *sl,int i,arrtype_n f,arrtype_n e) {int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<10-1){for(j=j+1;j<10-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,p;for(j=0;j<26;j++){f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%65;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<26-1){for(j=j+1;j<26-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}void radixsort(sllist &l){int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i<l.length;i++)l.sl[i].next=i+1;l.sl[l.length].next=0;for(i=l.keynum-1;i>=2;i--){distribute(l.sl,i,fn,en);collect(l.sl,i,fn,en);}for(i=1;i>=0;i--){distribute_c(l.sl,i,fc,ec);collect_c(l.sl,i,fc,ec);}}void arrange(sllist &l){int p,q,i;slnode temp;p=l.sl[0].next;for(i=1;i<l.length;i++){while(p<i)p=l.sl[p].next;q=l.sl[p].next;if(p!=i){temp=l.sl[p];l.sl[p]=l.sl[i];l.sl[i]=temp;l.sl[i].next=p;}p=q;}}int binsearch(sllist l,char key[]){int low,high,mid;low=1;high=l.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,l.sl[mid].keys)==0)return mid;else if(strcmp(key,l.sl[mid].keys)<0)high=mid-1;elselow=mid+1;}return 0;}void seqsearch(sllist l,char key[],int i){int j,k,m=0;printf("------------------------------------------------------------\n");printf(" 航班号起点站终点站班期起飞时间到达时间机型票价\n");for(j=1;j<=l.length;j++){switch(i){case 2:k=strcmp(key,l.sl[j].others.start);break;case 3:k=strcmp(key,l.sl[j].others.end);break;case 4:k=strcmp(key,l.sl[j].others.time1);break;case 5:k=strcmp(key,l.sl[j].others.time2);break;}if(k==0){m=1;printf(" %-8s%-7s%-7s%-11s%-6s%-6s%5s%4d\n",l.sl[j].keys,l.sl[j].others.start,l.sl[j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others. time2,l.sl[j].others.model,l.sl[j].others.price);}}if(m==0)printf(" 无此航班信息,可能是输入错误!\n");printf("-------------------------------------------------------\n");}void searchcon(sllist l){char key[keylen];int i=1,k;while(i>=1&&i<=5){printf("----------------------\n");printf(" * 航班信息查询系统*\n");printf("----------------------\n");printf(" * 1.航班号*\n");printf(" * 2.起点站*\n");printf(" * 3.终点站*\n");printf(" * 4.起飞时间*\n");printf(" * 5.到达时间*\n");printf(" * 0.退出*\n");printf(" ----------------------\n");printf(" (0-5)号服务项目:");scanf("%d",&i);printf("\n");switch(i){case 1:printf("输入要查询的航班号(字母要大写):");scanf("%s",key);k=binsearch(l,key);printf("--------------------------------------------------------------\n");if(k==0)printf(" 无此航班信息,可能是输入错误!\n");else{printf(" 航班号起点站终点站班期起飞时间到达时间机型票价\n");printf(" %-8s%-7s%-7s%-11s%-6s%-6s%-5s%4d\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l.sl[k].others.time1,l.sl[k].oth ers.time2,l.sl[k].others.model,l.sl[k].others.price);}printf("--------------------------------------------------------------\n");break;case 2:printf("输入要查询的航班起点站:");scanf("%s",key);seqsearch(l,key,i);break;case 3:printf("输入要查询的航班终点站:");scanf("%s",key);seqsearch(l,key,i);break;case 4:printf("输入要查询的航班起飞时间:");scanf("%s",key);seqsearch(l,key,i);break;case 5:printf("输入要查询的航班到达时间:");scanf("%s",key);seqsearch(l,key,i);break;case 0:printf("\n\n宝宝走了\n\n");}}}void inputdata(sllist &l){int i=++l.length;char yn='y';while(yn=='y'||yn=='Y'){printf("信息录入^_^\n\n");printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");scanf("%s %s %s %s %s %s %s %d",l.sl[i].keys,l.sl[i].others.start,l.sl[i].others.e nd,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&l.sl[i].others.price );++i;getchar();radixsort(l);arrange(l);printf("是否继续?\ny/n:");scanf("%c",&yn);}l.length=i-1;}void main(){sllist l;l.keynum=6;l.length=0;inputdata(l);searchcon(l);}。

(完整版)数据结构毕业课程设计(C语言版)飞机订票系统

(完整版)数据结构毕业课程设计(C语言版)飞机订票系统

———C语言版课题:飞机订票系统和图的遍历的动态演示姓名:学号:班级:指导教师:订票系统1.需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2:主要设计思路:1)算法构造流程图:A:主菜单:B:各分块模板的构造流程图:3:功能函数设计:(1):订票系统主菜单函数menu_select()本函数主要构造系统的主菜单,系统需要实现很多功能,并且各个功能需要各自的函数支持,所以通过主菜单可以轻松的进入各个函数下实现各自的功能,故主菜单显得尤为重要。

其实就是通过键盘输入选择项,然后通过scanf接受,在通过swtich判断进入各个选择项。

(2):工作人员管理函数enter()&change()系统需要各个航班的详细信息,所以需要工作人员把信息输入系统里,以供乘客查询订票。

enter()函数的构造就是为了解决这个问题。

而有可能航班线路更改或由于天气等原因飞机的起飞时间发生了更改,故工作人员需要及时更改信息,所以需要构造change()函数。

(3):列出航班信息的函数list()乘客需要查询各个航班的信息,所以通过系统要能调出上面工作人员已经录入好的航班信息,所以构造本函数来实现这个功能。

(4)乘客具体查询函数search()本函数分两个分函数:search1()和search2(),它们分别实现乘客的按航班查询和按出发及抵达城市的两种查询方案。

数据结构课程设计---航空订票系统

数据结构课程设计---航空订票系统

数据结构课程设计报告1.航空订票系统1.需求分析试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。

采用链式存储结构。

系统能实现的操作和功能如下:(1)航班信息管理。

(2)查询航线,按以下几种方式查询:①按航班号查询;②按起点站查询;③按终点站查询;④按日期查询;每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。

(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。

若需要,可登记排队候补。

(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

2.设计2.1 设计思想(1)数据结构设计typedefstruct keHu//客¨户信息{char nameofKeHu[20];//客户名字int numofPiao;//客¨户需要票的数量int type;//仓位等级1:头等Ì舱2:公务舱3:经济舱struct keHu* next;/下个客户};typedefstruct hangBan{int numofHangBan;//航班号char typeofHB[20];//航班机型¨char startFly[20];//起飞¦机场char endFly[20];//降¦落机场char DataofHB[20];//日期格式为(20120312星期¨一)char startTime[20];//起飞¦时间char endTime[20];//到达时À间float flyTime;//飞行时长float prise;//价格int largeNum;//成员定额int leaveNum;//余票数量keHu *custemer;//乘客信息名单keHu *orderofKeHu;//替补客户};typedefstruct Node{hangBan *exam;//航班信?息¡éint numofN;//航班数量struct Node *next;};(2)算法设计总体设计:在Fly.h文件中设计舱位的信息处理以及订票退票和对舱位信息的管理方面的功能然后在main,h中设计用户界面功能部分。

数据结构课程设计-航班的信息系统

数据结构课程设计-航班的信息系统

数据结构课程设计-航班的信息系统目录1、需求分析 11.1系统主要功能 11.2系统要求 12.概要设计 22.1系统功能模块图 22.2算法设计: 22.2.1录入模块 22.2.2 订票退票模块 22.2.3查询修改模块 32.3 存储结构设计 42.4 C语言描述 53.详细设计 63.1录入航班信息模块 63.2订票模块 63.3退票模块 63.4查询航班模块 63.5查询订单模块 63.6修改航线模块 63.7保存退出模块 64.调试分析75.用户说明136.收获及体会137.源代码141、需求分析1.1系统主要功能(1)录入:可以录入航班情况。

(数据可以存储在一个数据文件中,数据结构、具体数据自定)(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况。

(3)订票:可以订票,如果该航班已经无票,可以提供相关可选择航班。

(订票情况可以存在一个数据文件中,结构自己设定)(4)退票:可以退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

(5)修改航班信息:当航班信息改变可以修改航班数据文件。

1.2系统要求首先录入航班的信息:包括航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓。

根据提示完成相应的要求如:查询航班、订票、退票、修改航班等。

航班信息如表1.1所示。

订票客户的信息也录入其中如:姓名,证件号,订票数量及航班情况。

所有信息根据数据可以存储在一个数据文件中,数据结构、具体数据自定。

客户信息如表1.2所示。

表1.2 客户信息航班号姓名证件号订票数票价 MU5138张三 7>201314 1 375表1.1航班信息航班号起飞时间降落时间起飞城市降落城市票价折扣是否满仓CN8963 12:00 13:00 郴州长沙125 7.5 否MU4567 14:00 15:00 北京上海355 3.3 否CN1234 9:00 11:00 武汉长沙215 3.5 是2.概要设计2.1系统功能模块图图2.1 主程序流程图2.2算法设计:2.2.1录入模块查找单链表的链尾,在链尾插入一个“航班信息”的新结点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:飞机航班信息系统功能:能够实现航班信息的查询、修改、退票等操作具体要求:1)界面简洁美观。

2)查询航班信息的至少两种方式:1、按航班号查询2、按照航线查询3)用户订票或者退票之后,与之对应的相关航班信息要跟着改变。

4)当没有乘客要乘坐的航班时,系统能够智能提示用户的其他路线选择。

具体的代码实现:#include"stdio.h"#include"stdlib.h"#include<string.h> //包含字符串函数处理头文件#define N 50#define M 50struct air//定义结构体数组{char number[10];char start[10];char end[10];char time1[8];char time2[8];int price;int count;int num;}s[N];int m;struct{char name[20];char ID[7];int t;int co;}c[M];void save()//保存模块程序{ int i;FILE *fp;//定义文件指针if((fp=fopen("info.txt","wb"))==0)//打开文件并判断是否出错{printf("创建文件失败!\n");//打印出错提示exit (0);}for(i=0;i<m;i++)if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件写入数据,并判断是否出错printf("向文件输入数据失败!\n\n");fclose(fp);//关闭文件}void read()//从文件读取信息模块{int i;FILE *fp;//定义文件指针if((fp=fopen("info.txt","rb"))==0)//打开文件,并判断是否出错{printf("出错,请检查文件是否存在\n");//打印出错提示exit (0);}for(i=0;i<m;i++){fread(&s[i],sizeof(struct air),1,fp);//从文件中读取信息}fclose(fp);//关闭文件}void menu(){printf(" ★---您好,欢迎进入中国民航管理系统!---★\n");printf("============================================================\ n");printf(" -------- ☆ 1.输入航班信息☆-------- \n");printf(" -------- ☆ 2.浏览航班信息☆-------- \n");printf(" -------- ☆ 3.修改航班信息☆-------- \n");printf(" -------- ☆ 4.查找航班信息☆-------- \n");printf(" -------- ☆ 5.删除航班信息☆-------- \n");printf(" -------- ☆ 6.订票信息☆-------- \n");printf(" -------- ☆ 7.退票信息☆-------- \n");printf(" -------- ☆ 0.退出☆-------- \n");printf("============================================================\ n");}void Input(){int i;printf("你需要输入多少个航班信息?\n");scanf("%d",&m);printf("请依次输入航班信息:\n") ;printf("航班号起点站终点站起飞时间抵达时间票价折扣总票数\n");for(i=0;i<m;i++){scanf("%s",s[i].number); //读取航班号scanf("%s",s[i].start);//读取起始站scanf("%s",s[i].end);//读取终点站scanf("%s",s[i].time1);//读取时间scanf("%s",s[i].time2);scanf("%d",&s[i].price);scanf("%d",&s[i].count);//读取机票数scanf("%d",&s[i].num);}save();printf("输入后的航班信息如下\n");read();printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数\n"); for(i=0;i<m;i++){printf("%3s ",s[i].number);printf("%8s ",s[i].start);printf(" %8s",s[i].end);printf(" %8s ",s[i].time1);printf("%8s ",s[i].time2);printf("%8d",s[i].price);printf("%7d折",s[i].count);printf("%8d",s[i].num);printf("\n");}}void Display(int m){ int i;read();printf("*********************** 【航班信息】**********************************\n");printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数\n"); printf("************************************************************************* *\n");for(i=0;i<m;i++){printf("%3s ",s[i].number);printf("%8s ",s[i].start);printf("%8s",s[i].end);printf("%8s ",s[i].time1);printf("%8s ",s[i].time2);printf("%8d",s[i].price);printf("%8d",s[i].count);printf("%8d",s[i].num);printf("\n");}printf("********************************************************************* *****\n");}void Print(int i){printf("%-6s %8s %8s %8s %8s %6d %6d %6d \n",s[i].number,s[i].start,s[i].end,s[i].time1,s[i].time2,s[i].price,s[i].count,s[i].num);printf("--------------------------------------------------------------------\n");}void search()//查询模块{char name1[10];char name2[10];char code[10];int i,k;read();printf("请选择查找方式:\n");//打印查询方式菜单printf("1.按航班号查找\n");printf("2.按航线查找\n");printf("0.返回\n");printf("请在0-2中选择:\n");scanf("%d",&k);//读取查找方式if(k>0){switch(k){case 1: printf("请输入航班号:\n");scanf("%s",code);break;case 2: printf("请输入起始站名称:\n");scanf("%s",name1);//读取起始站printf("请输入终点站名称:\n");scanf("%s",name2);break;}}read();//调用读取函数for(i=0;i<m;i++){ if(strcmp(s[i].number,code)==0){ printf("查找航班信息成功");Print(i);break;}if(strcmp(s[i].start,name1)==0&&strcmp(s[i].end,name2)==0)//按终点站起始站判断输出条件{ printf("查找航班信息成功!\n");Print(i);break;}else if(strcmp(s[i].start,name1)==0||strcmp(s[i].end,name2)==0){ printf("查找信息失败!没有您要查询的航线,您还可以考虑乘坐以下航班\n");Print(i);}}}void Modify() //修改模块{struct //定义结构体{char ch[10];char name1[10];char name2[10];char time1[8];char time2[8];int price;int count;int num;}mo;char a;int i,n;read();//调用读取模块//Display(m);do{printf("请选择修改方式:\n");printf("*1,按航班号修改:\n");printf("*2,按航线修改: \n");printf("请选择1或2,按回车键确认:\n");scanf("%d",&n);//读取修改方式switch(n){case 1:printf("请输入航班号:\n");scanf("%s",mo.ch);//读取航班号break;case 2:printf("请输入起始站:\n");scanf("%s",1);//读取起始站printf("请输入终点站:\n");scanf("%s",2);//读取终点站break;}for(i=0;i<m;i++){if(strcmp(s[i].start,1)==0&&strcmp(s[i].end,2)==0)//判断输出条件{Print(i);break;}if(strcmp(s[i].number,mo.ch)==0)//判断输出条件{Print(i);break;}}printf("请输入新航班号、起始站、终点站、起飞时间、抵达时间、价格、折扣、机票数:\n"); scanf("%s",mo.ch); //读取航班号scanf("%s",1);//读取起始站scanf("%s",2);//读取终点站scanf("%s",mo.time1);//读取时间scanf("%s",mo.time2);scanf("%d",&mo.price);scanf("%d",&mo.count);//读取机票数scanf("%d",&mo.num);strcpy(s[i].number,mo.ch);strcpy(s[i].start,1);//替换其始站strcpy(s[i].end,2);//替换终点站strcpy(s[i].time1,mo.time1);//替换时间strcpy(s[i].time2,mo.time2);s[i].price=mo.price;s[i].count=mo.count;//替换机票数s[i].num=mo.num;save();//调用保存模块printf("修改信息成功!\n");read();printf("修改后的航班信息为\n");printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数\n");for(i=0;i<m;i++)Print(i);printf("是否继续?请键入Y或N以回车键结束:\n");scanf(" %c",&a);}while(a=='Y'); //判断结束}void Book() //实现用户订票功能{ char ch[10];int d,i=0,t;Display(m);printf("请输入您要订的航班号码\n");scanf("%s",ch);while(i<m&&(strcmp(s[i].number,ch)!=0))i++;if(i>m){printf("没有找到您所要订的航班!请重新输入\n");scanf("%s",ch);}else if(strcmp(s[i].number,ch)==0)t=i;printf("请输入你要订的票数\n");scanf("%d",&d);if(d<0){printf("请输入有效的机票数!\n");//判断机票数是否出错scanf("%d",&d);}H:i=0;do{if(s[i].num!=0&&s[i].num>=d)//判断是否出错{ s[i].num=s[i].num-d;c[i].t=d;c[i].co=t;printf("请输入您的姓名:");scanf("%s",c[i].name);printf("请输入您的证件号码(6位数字)\n");scanf("%s",c[i].ID);system("cls");//save();//调用保存函数printf("订票成功!\n\n");break;}if(s[i].count<d)//判断是否出错{printf("对不起,您所订的航班剩余机票不够,请重新输入机票数量:\n");scanf("%d",&d);goto H;}i++;}while(i<m);//read();printf("下面是已订机票的顾客的相关信息:\n");printf("--------------------------------------------------------------------\n");printf("姓名证件号码订票数量订单编号\n");printf("--------------------------------------------------------------------\n");printf("%-6s %6s %6d %6d\n",c[i].name,c[i].ID,c[i].t,c[i].co);Print(c[i].co);}void Back()//退票模块{char p[10];int n,i=0;read();//调用查询模块printf("请输入您要退订的航班号\n");scanf("%s",p);while(i<m&&strcmp(s[i].number,p)!=0)i++;if(i<m){printf("请输入您要退的机票数目:\n");scanf("%d",&n);//输入所退票数}if(n<0) //判断票数是否有效{printf("请输入有效的机票数:");scanf("%d",&n);}s[i].num=s[i].num+n;printf("退票成功!\n");//save(); //调用保存模块}void Delet(int &m)//删除模块{char a;char city1[20],city2[20],no[10];int k,i,j;read();do{printf("请选择删除以方式回车键结束:\n");//打印删除方式菜单printf("*1.按航班号删除\n" );printf("*2.按航线删除\n" );printf("*0.返回\n" );printf("请输入您的选项(0-2):\n");scanf("%d",&k);//读取删除方式switch(k){case 1: printf("请输入您要删除的航班号:\n");scanf("%s",no);//读取航班号for(i=0;i<m;i++)if(strcmp(s[i].number,no)==0){ for(j=i;j<m;j++)s[j]=s[j+1];m--;save();//调用读取函数printf("删除信息成功,剩余航班信息如下\n");read();printf("************************************************************************* *\n");printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数(张)\n");printf("************************************************************************* *\n");for(i=0;i<m;i++)Print(i);printf("**************************************************************************\n");}break;//跳出循环case 2: printf("请输入要删除的航班起始站名称:\n");scanf("%s",city1);//读取起始站printf("请输入要删除的航班终点站名称:\n");scanf("%s",city2);//读取终点站for(i=0;i<m;i++)if(strcmp(s[i].start,city1)==0&&strcmp(s[i].end,city2)==0){for(j=i;j<m;j++)s[j]=s[j+1];m--;save();//调用读取函数printf("删除信息成功,剩余航班信息如下\n");read();printf("********************************************************************* *****\n");printf("|航班号| 起点站| 终点站| 起飞时间| 抵达时间| 票价| 折扣| 剩余票数(张)\n");printf("************************************************************************* *\n");for(i=0;i<m;i++)Print(i);printf("********************************************************************* *****\n");break;}break;//跳出循环case 0:break;}printf("是否继续删除?(Y or N):\n");scanf(" %c",&a);}while(a=='Y');}void main(){int j;menu();printf("请在0-7中选择以回车键结束:\n\n");scanf("%d",&j);switch(j){case 1:system("cls");Input();//调用输入模块break;case 2:system("cls");Display(m);//调用打印模块break;case 3:system("cls");Modify();//调用修改模块break;case 4:system("cls");search();//调用查找模块break;case 5:Delet(m); //调用删除模块break;case 6:system("cls");Book();//调用订票模块break;case 7:system("cls");Back();//调用退票模块break;case 0: break;}}11。

相关文档
最新文档