航班查询系统

合集下载

航班信息查询系统

航班信息查询系统

《数据结构》课程设计书---飞机订票系统班级:完成人:指导老师:开始时间:完成时间:一、任务内容制作一个简单的飞机订票系统二、功能要求1.录入.可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2.查询.(1)可以查询某个航线的情况(如,输入航班号,查询抵达城市,航班票数信息,是否满仓);(2)可以输入起飞抵达城市,查询飞机航班情况;(3)订票:(订票情况可以存在一个数据文件中,结构自己设定)(4)退票:可退票,退票后修改相关数据文件;(5)修改航班信息:当航班信息改变可以修改航班数据文件四、源程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#define FLIGHTAMOUNT 200//最大航班数#define SEATAMOUNT 500//最大座位数struct flightstruct{char flightnumber[20];//航班号char finishingline[20];//终点站char date[20]; //日期unsigned maxamount;//总票数unsigned remainders;//剩余票数unsigned seatstate[SEATAMOUNT];//座位数组,贮存座位信息}flight[FLIGHTAMOUNT];void main(){char flag;//提供选择菜单的变量void open(FILE *fp);//打开文件函数void save(FILE *fp);//保存信息函数void built(FILE *fp);//建立文件函数void manage();//输入、管理信息函数void insert(FILE *fp);//插入信息函数void remend(FILE *fp);//修改信息函数void delet(FILE *fp);//删除信息函数void delet_all(FILE *fp);//删除所有信息函数void scan();//浏览信息函数void select();//查询信息函数void booktickets();//订票函数void print_info(unsigned);//输出打印信息函数void sendbacktickets();//退票函数do{printf("\n\t************************飞机订票系统****************************\n");printf("\n\t----------------------------主菜单-------------------------------\n");printf("\t**************-1--信息管理信息浏览--2-****************\n");printf("\t**************-3--信息查询订票系统--4-****************\n");printf("\t**************-5--退票系统退出系统--0-****************\n");p rintf("\n\t-----------------------------------------------------------------\n");do{scanf("%c",&flag);}while(flag!='1'&&flag!='2'&&flag!='3'&&flag!='4'&&flag!='5'&&flag!='0');switch(flag){case '1':manage();break;case '2':scan();break;case '3':select();break;case '4':booktickets();break;case '5':sendbacktickets();break;case '0':;break;}}while(flag!='0');}/**********打开文件 "flightinfomaition.dat"***********/void open(FILE *fp){unsigned i;if((fp=fopen("flightinfomaition.dat","r"))==NULL)//以只读方式打开{printf(" 打开文件失败!\n");exit(0);}for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++) if(fread(&flight[i],sizeof(struct flightstruct),1,fp)!=1){printf(" 文件读取错误!\n");exit(0);}fclose(fp);}/***********************保存设置*******************/void save(FILE *fp){unsigned i;char incept;printf("是否保存?(Y/N):");do{incept=getchar();}while(!(incept=='Y'||incept=='y'||incept=='N'||incept=='n'));if(incept=='Y'||incept=='y'){if((fp=fopen("flightinfomaition.dat","r+"))==NULL)//以读写方式打开{printf(" 打开文件失败!\n");exit(0);}for(i=0;i<FLIGHTAMOUNT;i++)if(fwrite(&flight[i],sizeof(struct flightstruct),1,fp)!=1){printf(" 保存失败!\n");exit(0);}printf(" 保存成功!\n");}fclose(fp);}/*********************管理信息*********************/void manage(){FILE* fp=NULL;char incept;printf("**************************欢迎进入信息管理系统*********************\n");do{p rintf("\n--------------------------------------------------------------------\n");printf("请选择:\n\t 1--建立新文件\n\t 2--插入信息\n\t 3--修改信息\n\t 4--删除信息\n\t 5--删除全部\n\t 0--退出\n");p rintf("--------------------------------------------------------------------\n");do{incept=getchar();}while(incept!='1'&&incept!='2'&&incept!='3'&&incept!='4'&&incept!='5'&&incept!='0');switch(incept){case '1':built(fp);break;case '2':insert(fp);break;case '3':remend(fp);break;case '4':delet(fp);break;case '5':delet_all(fp);break;case '0':return;}printf("继续进行管理?(Y/N)");do{incept=getchar();}while(!(incept=='Y'||incept=='y'||incept=='N'||incept=='n'));}while(incept=='Y'||incept=='y');}/**********建立一个名为"flightinfomaition.dat"的文件************/void built(FILE*fp){unsigned i,j;//建立一个名为"flightinfomaition.dat"文件,用于存贮航班信息if((fp=fopen("flightinfomaition.dat","w"))==NULL){printf(" 文件建立失败!\n");exit(0);}elseprintf("文件建立成功!\n");//文件信息初始化for(i=0;i<FLIGHTAMOUNT;i++){ //将所有信息内容置为0strcpy(flight[i].flightnumber,"0");strcpy(flight[i].finishingline,"0");strcpy(flight[i].date,"0");flight[i].maxamount=0;for(j=0;j<flight[i].maxamount;j++)flight[i].seatstate[j]=0;}save(fp);//保存所改变的信息insert(fp);//插入航班信息}/***********************插入信息************************/ void insert(FILE *fp){unsigned i;char flightnumber[20];open(fp);//在系统可容纳的数据范围之内循环for(i=0;i<FLIGHTAMOUNT;i++)//当所循环到的位置为空时写入新信息if(strcmp(flight[i].flightnumber,"0")==0){printf("请输入航班号(输入“0”结束):");scanf("%s",flightnumber);if(strcmp(flightnumber,"0")==0)break;else{strcpy(flight[i].flightnumber,flightnumber);printf("请输入终点站 :");scanf("%s",flight[i].finishingline);printf("请输入日期 :");scanf("%s",flight[i].date);printf("请输入总票数 :");do{scanf("%d",&flight[i].maxamount);if(flight[i].maxamount<0||flight[i].maxamount>SEATAMOUNT)printf(" 输入错误!\n 请输入正确的数字:");}while(flight[i].maxamount<0||flight[i].maxamount>SEATAMOUNT);flight[i].remainders=flight[i].maxamount;}}save(fp);}/*******************************修改信息*****************************/void remend(FILE *fp){unsigned i,j,maxamount;char flag;char flightnumber[20],finishingline[20],date[20];open(fp);do{printf("查询航班号?(Y/N):");do{scanf("%c",&flag);}while(!(flag=='y'||flag=='Y'||flag=='N'||flag=='n'));if(flag=='y'||flag=='Y')select(fp);printf("请输入航班号:");scanf("%s",flightnumber);f or(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0")&&strcmp(flight[i].flightnumber, flightnumber);i++);if(!strcmp(flight[i].flightnumber,flightnumber)){printf("输入“0”将不做修改\n");printf("请输入新的航班号:");scanf("%s",flightnumber);if(strcmp(flightnumber,"0"))strcpy(flight[i].flightnumber,flightnumber);printf("请输入新的终点站:");scanf("%s",finishingline);if(strcmp(finishingline,"0"))strcpy(flight[i].finishingline,finishingline);printf("请输入新的时间:");scanf("%s",date);if(strcmp(date,"0"))strcpy(flight[i].date,date);printf("请输入新的票数:");do{scanf("%d",&maxamount);if(maxamount<0||maxamount>SEATAMOUNT){printf("输入错误!请重新输入票数:");}}while(maxamount<0||maxamount>SEATAMOUNT);if(maxamount!=0)flight[i].maxamount=maxamount;flight[i].remainders=flight[i].maxamount;for(j=0;j<flight[i].maxamount;j++)flight[i].seatstate[j]=0;save(fp);}elseprintf("没有找到“%s”次航班!",flightnumber); printf("是否继续?(Y/N):");do{scanf("%c",&flag);}while(!(flag=='y'||flag=='Y'||flag=='N'||flag=='n'));}while(flag=='y'||flag=='Y');}/************************************删除信息***********************************/ void delet(FILE *fp){unsigned i;char flag;char flightnumber[20];open(fp);do{printf("查询航班号?(Y/N):");do{scanf("%c",&flag);}while(!(flag=='y'||flag=='Y'||flag=='N'||flag=='n'));if(flag=='y'||flag=='Y')select(fp);printf("请输入航班号:");scanf("%s",flightnumber);f or(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0")&&strcmp(flight[i].flightnumber, flightnumber);i++);if(!strcmp(flight[i].flightnumber,flightnumber)){for(;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++){strcpy(flight[i].flightnumber,flight[i+1].flightnumber);strcpy(flight[i].finishingline,flight[i+1].finishingline);strcpy(flight[i].date,flight[i+1].date);flight[i].maxamount=flight[i+1].maxamount;flight[i].remainders=flight[i+1].remainders;}printf("删除成功!\n");save(fp);}elseprintf("删除是败!没有找到“%s”航班!",flightnumber);printf("是否继续?(Y/N):");do{scanf("%c",&flag);}while(!(flag=='y'||flag=='Y'||flag=='N'||flag=='n'));}while(flag=='y'||flag=='Y');}/*****************删除所有信息**********************/void delet_all(FILE *fp){char incept;unsigned i,j;printf(" 这个操作将删除所有信息!\n");printf("是否继续?(Y/N)");do{incept=getchar();}while(!(incept=='Y'||incept=='y'||incept=='N'||incept=='n'));if(incept=='Y'||incept=='y'){open(fp);for(i=0;i<FLIGHTAMOUNT;i++){strcpy(flight[i].flightnumber,"0");strcpy(flight[i].finishingline,"0");strcpy(flight[i].date,"0");flight[i].maxamount=0;for(j=0;j<flight[i].maxamount;j++)flight[i].seatstate[j]=0;}save(fp);}}/***************************浏览信息*****************************/void scan(){FILE *fp=NULL;unsigned i;open(fp);printf("***********************欢迎进入信息浏览系统************************************\n\n");printf("序号| 航班号 | 终点站 | 时间 |票数|剩余|\n");for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++){p uts("------------------------------------------------------------------------------");p rintf("%4d|%-20s|%-20s|%-20s|%-4d|%-4d|\n",i+1,flight[i].flightnumber,flight[i].finishing line,flight[i].date,flight[i].maxamount,flight[i].remainders);}puts("------------------------------------------------------------------------------\n");}/*********************查询信息************************************/void select(){FILE *fp=NULL;unsigned i;int j;char incept;char flightnumber[20],finishingline[20],date[20];open(fp);printf("\n*************************欢迎进入信息查询系统*************************\n");do{j=0;p uts("----------------------------------------------------------------------\n");printf("请选择一种查询方式:\n");printf("\t 1--航班号\n\t 2--终点站\n\t 3--时间\n\t 4--浏览全部\n\t 0--退出\n");p uts("----------------------------------------------------------------------\n");do{incept=getchar();}while(!(incept=='1'||incept=='2'||incept=='3'||incept=='4'||incept=='0'));switch(incept){case '1':{printf("请输入航班号:");scanf("%s",flightnumber);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0")!=0;i++)if(strcmp(flight[i].flightnumber,flightnumber)==0){print_info(i);j=1;}if(j==0)printf("对不起!没有找到“%s”航班.\n",flightnumber);}break;case '2':{printf("请输入终点站:");scanf("%s",finishingline);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++) if(!strcmp(flight[i].finishingline,finishingline)){print_info(i);j=1;}if(j==0)printf("对不起!飞往“%s”的航班没有找到.\n",finishingline);}break;case '3':{printf("请输入日期:");scanf("%s",date);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,"0");i++) if(!strcmp(flight[i].date,date)){print_info(i);j=1;}if(j==0)printf("对不起!“%s”的航班没有找到.\n",date);};break;case '4':scan();break;case '0':return;}printf("是否继续查询?(Y/N)");do{incept=getchar();}while(!(incept=='Y'||incept=='y'||incept=='N'||incept=='n'));}while(incept=='Y'||incept=='y');}/*****************用于select函数输出打印提示信息*********************/void print_info(unsigned i){puts("------------------------------------------------------------------------------");printf("序号| 航班号 | 终点站 | 时间 |票数|剩余|\n");puts("------------------------------------------------------------------------------");printf("%4d|%-20s|%-20s|%-20s|%-4d|%-4d|\n",i+1,flight[i].flightnumber,flight[i].finishingline,flight[i].date,flight[i].maxamount,flig ht[i].remainders);puts("------------------------------------------------------------------------------");}/****************************订票函数****************************/void booktickets(){FILE *fp=NULL;unsigned amount,i,j;char flag,flightnumber[20];printf("****************************欢迎进入订票系统******************************\n");do{open(fp);printf("输入“s”查询(任意键跳过):");getchar();//接收上面语句的回车scanf("%c",&flag);if(flag=='s')select(fp);printf("输入“y”退出订票(任意键继续):");getchar();scanf("%c",&flag);if(flag=='y')break;printf("请输入航班号:");scanf("%s",flightnumber);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,flightnumber);i++);if(!strcmp(flight[i].flightnumber,flightnumber)){if(flight[i].remainders==0)printf("对不起!没有票.\n");else{printf("请输入订票数量:");do{scanf("%d",&amount);if(amount<0||amount>flight[i].remainders)printf(" 输入错误!\n 请输入正确的数据:");}while(amount<0||amount>flight[i].remainders);for(j=0;j<flight[i].maxamount&&(amount--)>0;j++)if(flight[i].seatstate[j]==0){flight[i].seatstate[j]=1;flight[i].remainders--;}save(fp);}}elseprintf("没有找到“%s”航班!\n",flightnumber);printf("是否继续订票?(Y/N):");do{flag=getchar();}while(!(flag=='Y'||flag=='y'||flag=='N'||flag=='n'));}while(flag=='y'||flag=='Y');}/****************************退票函数******************************/void sendbacktickets(){FILE *fp=NULL;unsigned i,j,seatnumber;char flag,flightnumber[20];printf("****************************欢迎进入退票系统***********************\n");do{open(fp);printf("请输入航班号:");scanf("%s",flightnumber);for(i=0;i<FLIGHTAMOUNT&&strcmp(flight[i].flightnumber,flightnumber);i++);if(!strcmp(flight[i].flightnumber,flightnumber)){printf("请输入座位号:");do{scanf("%d",&seatnumber);if(seatnumber<0||seatnumber>flight[i].maxamount)printf("输入错误!\n请重新输入座位号:");}while(seatnumber<0||seatnumber>flight[i].maxamount);for(j=0;j<flight[i].maxamount&&seatnumber!=j+1;j++);if((seatnumber==j+1)&&(flight[i].seatstate[j]==1)){flight[i].seatstate[j]=0;flight[i].remainders++;save(fp);}elseprintf(" 输入错误!\n");}elseprintf(" 没有找到“%s”航班!\n",flightnumber);printf("是否继续退票?(Y/N):");do{flag=getchar();}while(!(flag=='Y'||flag=='y'||flag=='N'||flag=='n'));}while(flag=='y'||flag=='Y');}五、效果图1.主菜单以及信息管理界面2.信息浏览界面3订票系统界面.4.退票系统界面六、总结和体会通过本次实践我们收获颇多。

航班信息查询系统

航班信息查询系统

某公司每天有10航班(航班号、价格),每个航班的飞机,共有80个坐位,分20排,每排4个位子。

编号为A,B,C,D。

如座位号:10D表示10排D座。

设计一程序,完成以下功能:1)1)订票:输入乘客的姓名、身份证号、航班号、乘坐日期,座位号,完成订票功能(一次只能预定一张机票)。

需要判断航班号是否存在,身份证号的长度是否为15位或18位,判断座位号是否为航班上正确的座位号,座位号是否已经被其他顾客预定,乘坐日期格式是否合法(格式为:YYYY-MM-DD,如2009-01-02)))2)2)退票:输入乘客的姓名、航班号、日期,完成退票功能。

需要判断该乘客是否已经订购了该日期的该航班)(不考虑航班飞机是否已经起飞,认为任何时候都可以退票)3)3)查询指定航班、指定日期的乘客信息4)4)查询指定航班的飞机票的销售额5)5)查询指定身份证号的顾客的乘坐飞机历史。

提示:●l定义一个日期结构体保存日期,具体信息为:年、月、日●l判断乘坐日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。

判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。

●l定义一个结构体数组保存航班信息,具体为:航班号、价格●l定义一个结构体保存座位号,具体为:排,座●l定义一个订票链表,保存订票信息,具体为:乘客的姓名、身份证号、航班号、乘坐日期,座位号。

输入时,判断排号是否大于0 小于等于20 ,座号是否为A、B、C、D, 同时需要查询订票链表,是否存在相同乘坐日期、相同航班、相同座位号的记录,如果有则表示已经预定,如果没有则插入订票链表●l退票时,需要从输入身份证号、航班号、乘坐日期,查询订票链表,如果在该记录,则删除,#include <stdio.h>#include <string.h>#include <stdlib.h>#include <conio.h>#define N 10typedef struct{int year;int month;int day;}DATE;typedef struct{char no[5];int price;}FLUG;FLUGflug[N]={{"A01",100},{"A02",100},{"A03",120},{"A04",120},{"A05",150}, {"A06",150},{"A07",180},{"A08",180},{"A09",200},{"A10",200}};typedef struct{int row;char col;}SEAT;typedef struct node{char name[20];char id[20];char flugNo[5];DATE date;SEAT seat;struct node *next;}TICKET;TICKET *head=NULL;//将日期字符串转换为日期型数据DATE strToDate(char strDate[]){DATE date;date.year=atoi(&strDate[0]);date.month=atoi(&strDate[5]);date.day=atoi(&strDate[8]);return date;}//检查日期是否合法int checkDate(char strDate[]){DATE date;if(strlen(strDate)!=10||strDate[4]!='-'||strDate[7]!='-')return 0;date=strToDate(strDate);if(date.month<1||date.month>12)return 0;if((date.year%4==0&&date.year%100!=0)||(date.year%400==0)){if(date.month==2&&date.day>29)return 0;}else{if(date.month==2&&date.day>28)return 0;}switch(date.month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(date.day>31) return 0;case 4:case 6:case 9:case 11:if(date.day>30) return 0;}return 1;}void printMenu(){//clrsrc();printf("\n\n\n");printf("--------------------------------------------------------------\n");printf(" 1、订票\n");printf(" 2、退票\n");printf(" 3、查询指定航班、指定日期的乘客信息\n");printf(" 4、查询指定航班的飞机票的销售额\n");printf(" 5、查询指定身份证号的顾客的乘坐飞机历史\n");printf(" 6、退出系统\n");printf("--------------------------------------------------------------\n");printf("请选择(1~5):");}TICKET *insert(TICKET *t){TICKET *p;if(head==NULL){head=t;t->next=NULL;}else{p=head->next;head=t;t->next=p;}return head;}TICKET *delete(TICKET *t){TICKET *p;for(p=head;p->next!=t;p=p->next);p->next=t->next;free(t);return head;}void booking(){TICKET *ticket,*p;int i;char strDate[20],str[10];ticket=(TICKET *)malloc(sizeof(TICKET));printf("输入姓名:");scanf("%s",ticket->name);do{printf("输入身份证号:");scanf("%s",ticket->id);if(strlen(ticket->id)==15||strlen(ticket->id)==18)break;printf("身份证位数错误!");}while(1);do{printf("输入航班号:");scanf("%s",ticket->flugNo);for(i=0;i<N;i++){if(strcmp(flug[i].no,ticket->flugNo)==0)break;}if(i<N)break;printf("指定航班号不存在!");}while(1);do{printf("输入乘坐日期:");scanf("%s",strDate);if(checkDate(strDate)==1)break;printf("日期格式错误!");}while(1);ticket->date=strToDate(strDate);do{printf("输入座位号(如:10D):");scanf("%s",str);ticket->seat.row=atoi(str);if(ticket->seat.row<0||ticket->seat.row>20){printf("排数错误!");continue;}ticket->seat.col=str[strlen(str)-1];if('A'>ticket->seat.col||'D'<ticket->seat.col){printf("列数错误!");continue;}for(p=head;p!=NULL;p=p->next){if(ticket->date.year==p->date.year&&ticket->date.month==p->da te.month&&ticket->date.day==p->date.day){if(strcmp(ticket->flugNo,p->flugNo)==0){if(ticket->seat.row==p->seat.row&&ticket->seat.col==p->seat.c ol){printf("座位已被预订!");continue;}}}}insert(ticket);printf("订票成功!");break;}while(1);}void refund(){TICKET *ticket,*p;int i;char strDate[20],str[10];ticket=(TICKET *)malloc(sizeof(TICKET));printf("输入姓名:");scanf("%s",ticket->name);do{printf("输入航班号:");scanf("%s",ticket->flugNo);for(i=0;i<N;i++){if(strcmp(flug[i].no,ticket->flugNo)==0)break;}if(i<N)break;printf("指定航班号不存在!");}while(1);do{printf("输入乘坐日期:");scanf("%s",strDate);if(checkDate(strDate)==1)break;printf("日期格式错误!");}while(1);ticket->date=strToDate(strDate);for(p=head;p!=NULL;p=p->next){if(strcmp(ticket->name,p->name)==0){if(strcmp(ticket->flugNo,p->flugNo)==0){if(ticket->date.year==p->date.year&&ticket->date.month==p->da te.month&&ticket->date.day==p->date.day){delete(p);}}}}printf("无此订票信息!");return;}void passenger(){TICKET *p;for(p=head;p!=NULL;p=p->next){printf("%s,",p->name);printf("%s,",p->id);printf("%d-%d-%d,",p->date.year,p->date.month,p->date.day);printf("%s,",p->flugNo);printf("%d%c",p->seat.row,p->seat.col);}}void main(){char strDate[20];DATE date;int c;do{printMenu();scanf("%d",&c);if(c==1){booking();}if(c==2){refund();}if(c==3){passenger();}if(c==6){exit(0);}}while(1);}#include <stdio.h> #include <string.h>#include <stdlib.h>#include <conio.h>#define N 10typedef struct{int year;int month;int day;}DATE;typedef struct{char no[5];int price;}FLUG;FLUGflug[N]={{"A01",100},{"A02",100},{"A03",120},{"A04",120},{"A05",150}, {"A06",150},{"A07",180},{"A08",180},{"A09",200},{"A10",200}};typedef struct{int row;char col;}SEAT;typedef struct node{char name[20];char id[20];char flugNo[5];DATE date;SEAT seat;struct node *next;}TICKET;TICKET *head=NULL;//将日期字符串转换为日期型数据DATE strToDate(char strDate[]){DATE date;date.year=atoi(&strDate[0]);date.month=atoi(&strDate[5]);date.day=atoi(&strDate[8]);return date;}//检查日期是否合法int checkDate(char strDate[]){DATE date;if(strlen(strDate)!=10||strDate[4]!='-'||strDate[7]!='-')return 0;date=strToDate(strDate);if(date.month<1||date.month>12)return 0;if((date.year%4==0&&date.year%100!=0)||(date.year%400==0)){if(date.month==2&&date.day>29)return 0;}else{if(date.month==2&&date.day>28)return 0;}switch(date.month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(date.day>31) return 0;case 4:case 6:case 9:case 11:if(date.day>30) return 0;}return 1;}void printMenu(){//clrsrc();printf("\n\n\n");printf("--------------------------------------------------------------\n");printf(" 1、订票\n");printf(" 2、退票\n");printf(" 3、查询指定航班、指定日期的乘客信息\n");printf(" 4、查询指定航班的飞机票的销售额\n");printf(" 5、查询指定身份证号的顾客的乘坐飞机历史\n");printf(" 6、退出系统\n");printf("--------------------------------------------------------------\n");printf("请选择(1~5):");}TICKET *insert(TICKET *t){TICKET *p;if(head==NULL){head=t;t->next=NULL;}else{p=head->next;head=t;t->next=p;}return head;}TICKET *delete(TICKET *t){TICKET *p;for(p=head;p->next!=t;p=p->next);p->next=t->next;free(t);return head;}void booking(){TICKET *ticket,*p;int i;char strDate[20],str[10];ticket=(TICKET *)malloc(sizeof(TICKET));printf("输入姓名:");scanf("%s",ticket->name);do{printf("输入身份证号:");scanf("%s",ticket->id);if(strlen(ticket->id)==15||strlen(ticket->id)==18)break;printf("身份证位数错误!");}while(1);do{printf("输入航班号:");scanf("%s",ticket->flugNo);for(i=0;i<N;i++){if(strcmp(flug[i].no,ticket->flugNo)==0)break;}if(i<N)break;printf("指定航班号不存在!");}while(1);do{printf("输入乘坐日期:");scanf("%s",strDate);if(checkDate(strDate)==1)break;printf("日期格式错误!");}while(1);ticket->date=strToDate(strDate);do{printf("输入座位号(如:10D):");scanf("%s",str);ticket->seat.row=atoi(str);if(ticket->seat.row<0||ticket->seat.row>20){printf("排数错误!");continue;}ticket->seat.col=str[strlen(str)-1];if('A'>ticket->seat.col||'D'<ticket->seat.col){printf("列数错误!");continue;}for(p=head;p!=NULL;p=p->next){if(ticket->date.year==p->date.year&&ticket->date.month==p->da te.month&&ticket->date.day==p->date.day){if(strcmp(ticket->flugNo,p->flugNo)==0){if(ticket->seat.row==p->seat.row&&ticket->seat.col==p->seat.c ol){printf("座位已被预订!");continue;}}}}insert(ticket);printf("订票成功!");break;}while(1);}void refund(){TICKET *ticket,*p;int i;char strDate[20],str[10];ticket=(TICKET *)malloc(sizeof(TICKET));printf("输入姓名:");scanf("%s",ticket->name);do{printf("输入航班号:");scanf("%s",ticket->flugNo);for(i=0;i<N;i++){if(strcmp(flug[i].no,ticket->flugNo)==0)break;}if(i<N)break;printf("指定航班号不存在!");}while(1);do{printf("输入乘坐日期:");scanf("%s",strDate);if(checkDate(strDate)==1)break;printf("日期格式错误!");}while(1);ticket->date=strToDate(strDate);for(p=head;p!=NULL;p=p->next){if(strcmp(ticket->name,p->name)==0){if(strcmp(ticket->flugNo,p->flugNo)==0){if(ticket->date.year==p->date.year&&ticket->date.month==p->da te.month&&ticket->date.day==p->date.day){delete(p);}}}}printf("无此订票信息!");return;}void passenger(){TICKET *p;for(p=head;p!=NULL;p=p->next){printf("%s,",p->name);printf("%s,",p->id);printf("%d-%d-%d,",p->date.year,p->date.month,p->date.day);printf("%s,",p->flugNo);printf("%d%c",p->seat.row,p->seat.col);}}void main(){char strDate[20];DATE date;int c;do{printMenu();scanf("%d",&c);if(c==1){booking();}if(c==2){refund();}if(c==3){passenger();}if(c==6){exit(0);}}while(1);}。

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

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

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

二、基本要求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.航班信息录入:系统操作员可以录入航班信息,包括出发地、目的地、起飞时间、到达时间、航班号、机型等。

录入信息时要求填写必要的信息,并对信息进行有效性检查。

2.航班信息查询:系统用户可以通过航班号、出发地、目的地、起飞时间等关键字进行航班信息查询。

查询结果包括航班详情、机型、座位数、预计到达时间等。

3.航班信息统计:系统能够根据时间段、航班号等维度进行航班信息统计和分析。

统计结果可以通过图表和报表的形式展示,方便航空公司管理层对航班数据进行分析和决策。

4.航班状态更新:系统能够及时更新航班的状态信息,如航班延误、取消等。

系统会自动发送通知给相关人员,如机组人员、地面服务人员以及乘客。

5.乘客信息管理:系统可以管理乘客的个人信息、预订记录和乘坐航班的记录。

乘客可以通过系统进行航班预订、座位选择和票务管理。

6.机组信息管理:系统可以管理机组人员的信息和排班情况。

系统可以根据航班计划自动生成机组排班,并实时更新机组人员的航班信息。

四、系统设计与实现航空公司航班信息管理系统采用客户端-服务器架构进行设计与实现。

具体实现方式可以采用Java或C#等编程语言开发,使用MySQL等数据库存储航班信息和乘客信息。

系统的客户端包括操作员端和乘客端。

操作员端提供录入、查询和统计分析等功能;乘客端提供航班查询、订票、座位选择、退票等功能。

掌上东航项目介绍流程

掌上东航项目介绍流程

掌上东航项目介绍流程掌上东航是中国东方航空公司推出的一款手机应用程序,旨在为乘客提供更便捷、高效的航空服务体验。

通过掌上东航,乘客可以实现在线选座、值机、订餐、查询航班信息等多种功能,极大地提升了乘客出行的便利性和舒适度。

下面我们将介绍掌上东航的使用流程,帮助大家更好地了解和使用这款应用程序。

1. 下载与注册首先,乘客需要在手机应用商店中搜索“掌上东航”,并下载安装到手机中。

安装完成后,打开应用程序,按照提示进行注册和登录。

注册时需要填写个人信息和联系方式,并设置登录密码,注册完成后即可登录掌上东航。

2. 查询航班信息登录后,乘客可以在首页上方的搜索栏中输入航班号或航线信息,即可查询到所需航班的详细信息,包括起降时间、舱位情况、机型等。

乘客还可以通过“我的航班”功能添加关注的航班,方便随时了解航班动态。

3. 在线选座在航班信息页面,乘客可以选择“在线选座”功能,根据自己的喜好和需求,在机舱平面图上选择合适的座位。

选择完成后,系统会自动为乘客预留所选座位,方便乘客在值机时快速取得登机牌。

4. 值机与电子登机牌乘客可以在航班起飞前24小时内进行在线值机,选择座位并支付相应费用后,系统会生成电子登机牌,乘客可以通过掌上东航保存和查看电子登机牌,方便快捷地完成登机手续。

5. 订餐服务在航班信息页面,乘客可以选择“订餐服务”,根据航班时间和个人口味,预订喜欢的餐食。

支付完成后,系统会将订餐信息同步到航班服务系统中,乘客在飞行途中即可享用到订购的美食。

6. 积分查询与兑换通过掌上东航,乘客可以方便地查询自己的东方万里行会员积分,并进行积分兑换。

在“我的账户”页面,乘客可以查看积分明细和兑换记录,并进行相应的积分兑换操作。

7. 客户服务与反馈在使用过程中,如果乘客遇到问题或有意见建议,可以通过掌上东航的客户服务功能进行咨询和反馈。

客户服务人员会及时处理乘客的问题和意见,并提供相应的帮助和解决方案。

总结通过上述流程的介绍,我们可以看到,掌上东航为乘客提供了多种便捷的航空服务功能,极大地提升了乘客的出行体验。

中航信三大系统:ICS、CRS和DCS

中航信三大系统:ICS、CRS和DCS

中航信的ICS、CRS和DCS系统什么是GDS,全称是Global Distribution System,即全球分销系统,是基于计算机技术支持下的大规模销售网络。

目前国际上的GDS分二类:1.既可以销售航空公司的产品(机票)也可以销售酒店的产品(客房),如SABRE、GALILEO、AMADEUS、WORLDSPAN和中国民航GDS系统(中航信Travelsky)。

2.只可以销售酒店产品,如:UTELL、ACCOR和一些酒店集团自己的销售网络,如:假日集团、喜来登、希尔顿。

中航信GDS系统的运行方式说明CRS全称是Computer Reservation System,即计算机分销系统。

CRS主要功能是为代理人提供航班可利用情况查询、航段销售、订座记录、电子客票预订,旅游产品等服务。

ICS全称是Inventory Control System,即航空公司人员使用的航空公司订座系统。

ICS是一个集中式、多航空公司的系统。

每个航空公司享有自己独立的数据库、独立的用户群、独立的控制和管理方式,各种操作均可以加以个性化,包括航班班期、座位控制、运价及收益管理、航空联盟、销售控制参数等信息和一整套完备的订座功能引擎。

DCS全称是Departure Control System,即机场人员使用的离港控制系统。

DCS 是为机场提供旅客值机、配载平衡、航班数据控制、登机控制联程值机等信息服务,可以满足值机控制、装载控制、登机控制以及信息交换等机场旅客服务所需的全部功能。

根据上面图示,一名旅客来代理处购机票。

1.此时机票代理处首先要做的就是在CRS系统为旅客查询航班信息,那么CRS系统的航班信息是从何而来的呢。

CRS系统航班信息是由ICS系统得来,ICS系统的主要功能就是建立,控制和销售航班,所以航空公司就会把所建立好的航班信息传送到CRS以便代理人查询销售航班。

2.旅客这时要购票,代理处需要在CRS系统为其建立旅客订座信息,当我们建立好记录并封口后,旅客的订座信息会传送到ICS系统,告知航空公司有旅客订取了某某航班的某某舱位。

C++航班查询系统

C++航班查询系统
void p_query(struct plane *hd)
{
int q_choise;
system("cls");
printf("\t\t*****************************************\n");
printf("\t\t* 1.航班号查询 2.起点站查询 *\n");
{
int i;
struct plane *head,*temp,*p;
head=NULL;
head=(struct plane*)malloc(sizeof(struct plane));
p=head;
for(i=1;i<=n;i++)//n为所要创建的节点数,由主函数传递
printf("起飞时间:%s\n",p->starttime);
printf("到达时间:%s\n",p->arrivingtime);
printf("====================\n");
}
p=p->next;
}
system("pause");
}
p=p->next;
}
system("pause");
system("cls");
main();
}
//终点站查询
void pq3(struct plane *hd)
{
struct plane *p;
char arrive[10];

航班管理系统

航班管理系统

NO.1航班管理系统•一、题目内容的描述1.航班查询系统飞机航班信息包括:航班号、起点站、终点站、起飞时间、到达时间、机型以及票价,实例如下:设计航班查询系统要求能对飞机航班信息进行增加、删除、排序和查找。

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

•二、应用程序功能的详细说明通过建立一个链表来实现航班信息储存功能,每个结点的信息包括航班号、出发地、目的地、出发时间、到达时间、是否经停、价格,并编写功能函数使系统具有插入、查询、删除、更新、排序的功能。

•三、主要模块的算法描述菜单选项菜单选项图航班信息的建立插入信息查询航班:•四、结束语通过此程序的编写我熟悉了链表的运用,链表是本学期学习的重点,灵活性比栈好,可以通过指针实现插入删除等功能,但要注意移动指针的逻辑关系,如果不注意很容易指向了不是你要的地方。

•五、程序的源代码清单#include "stdio.h"#include "stdlib.h"#include "ctype.h"#include "process.h"#include "string.h"#include<iostream>using namespace std;struct flight //定义航班信息结构体{char flight_num[10];char flight_start[20];char flight_destination[20];char flight_takeoff_time[10];char flight_arrive_time[10];char flight_isStop[5];int flight_price;struct flight *next;};void welcome()//显示程序菜单{printf("************************欢迎使用航班管理系统**********************\n");printf("******************************************************************\n");printf("******************************************************************\n"); printf("**********************按下对应数字实现相应功能********************\n");printf("**************************1.创建航班信息**************************\n");printf("**************************2.增加航班信息**************************\n");printf("**************************3.查询航班信息**************************\n");printf("**************************4.删除航班信息**************************\n");printf("**************************0.退出管理系统**************************\n");printf("******************************************************************\n");printf("******************************************************************\n"); printf("************************CopyRight ByKobeLee**********************\n");printf("******************************************************************\n"); }struct flight * InitSystem(int n)//建立航班信息链表{int i;struct flight * head,* p,*s;for(i=1;i<=n;i++){printf("请输入第%d次航班信息:\n",i);if(i==1){p=(struct flight *)malloc(sizeof(struct flight));printf("航班号:");scanf("%s",&p->flight_num);printf("出发地:");scanf("%s",&p->flight_start);printf("目的地:");scanf("%s",&p->flight_destination);printf("起飞时间:");scanf("%s",&p->flight_takeoff_time);printf("到达时间:");scanf("%s",&p->flight_arrive_time);printf("经停:");scanf("%s",&p->flight_isStop);printf("价格:");scanf("%d",&p->flight_price);head->next=p;}else{s=(struct flight * )malloc(sizeof(struct flight));printf("航班号:");scanf("%s",&s->flight_num);printf("出发地:");scanf("%s",&s->flight_start);printf("目的地:");scanf("%s",&s->flight_destination);printf("起飞时间:");scanf("%s",&s->flight_takeoff_time);printf("到达时间:");scanf("%s",&s->flight_arrive_time);printf("经停:");scanf("%s",&s->flight_isStop);printf("价格:");scanf("%d",&s->flight_price);s->next=head->next;head->next=s;}printf("\n");}return head;}int Insert(struct flight *head)//添加航班信息,头插法;{struct flight * p,*pi;pi=(struct flight *)malloc(sizeof(struct flight));//为新添加的航班开辟空间p=head;printf("请输入新添加的航班信息:\n\n");printf("航班号:");scanf("%s",&pi->flight_num);printf("出发地:");scanf("%s",&pi->flight_start);printf("目的地:");scanf("%s",&pi->flight_destination);printf("起飞时间:");scanf("%s",&pi->flight_takeoff_time);printf("到达时间:");scanf("%s",&pi->flight_arrive_time);printf("经停:");scanf("%s",&pi->flight_isStop);printf("价格:");scanf("%d",&pi->flight_price);if(head==NULL){head->next=pi;pi->next=NULL;}else{pi->next=p->next;p->next=pi;}return 0;}void SearchByFlightNum(flight * head){char num[10];printf("请输入航班号:");scanf("%s",&num);if(head->next==NULL){printf("没有航班信息,不能查询,请先创建信息。

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

航班查询系统一、背景、目的和意义二、主要功能描述三、软/硬件环境四、数据库设计五、界面设计六、编程过程中所遇难题七、分工协作八、收获一、背景:学习了数据库软件SQL 2005和Microsoft Visual Studio 2008后想到了用这2个软件做这个航班查询系统,通过ASP做出SQL的界面并导入存储过程对功能进行实现!目的和意义:机票查询系统是为机场工作人员和客户提供机票信息查询等与机票相关内容和管理的系统,它具有开放体系结构的、易扩充的、易维护的、具有良好人机界面的优点.它除克服了存储乘客信息少,查询效率低下等问题外,更重要的是其安全性,可靠性。

它为企业的决策层提供准确、精细、迅速的机票销售信息,为乘客出行提供方便,便于机场工作人员对机票信息进行管理,提高了机场工作人员对机票管理的工作效率。

为便于旅客通过代售点查询航班信息,要求系统能有效、快速、安全、可靠和无误的完成上述操作。

并要求客户机的界面要简单明了,易于操作,服务器程序利于维护。

航班查询系统需要完成功能主要有:(1)管理员对航班信息的输入、修改和查询,对用户信息的查询。

(2)旅客信息的注册和登录及对航班信息的查询。

数据分析航班信息(航班号,机型,航空公司,起飞城市,到达城市,起飞时间,到达时间,总票数,剩余票数)旅客信息(用户名,密码,性别,年龄)用户活动分析用户通过系统查询航班信息。

用户活动图:二、主要功能描述航班信息维护模块提供航班信息的录入、删除、修改。

可以录入航班情况。

机型,航空公司,起飞城市,到达城市,起飞时间,到达时间,总票数,剩余票数。

当航班信息改变时可以修改航班信息数据库。

航班业务处理模块提供查询航班剩余票数功能。

客户可以登录航班购票系统进行查询;如果该航班已经无票,可以换乘。

系统功能图系统流程图数据流图1:三、软/硬件环境:使用Microsoft Visual Studio 2008和Microsoft SQL Server 2005电脑是windows7 64bit操作系统。

4、数据字典1)数据项表2-1数据项名含义说明数据类型长度说明航班号机型航班信息航班信息varcharvarchar5010航班号码航班所属机型航空公司航线信息char10航班所属公司起飞城市到达城市起飞时间到达时间总票数剩余票数UsernamePswSexAge ulevel 航线信息航线信息航班信息航班信息航班信息航班信息用户信息用户信息用户信息用户信息用户信息charcharcharcharvarcharvarcharcharcharcharcharchar1010101050501010101010飞机起飞城市飞机到达城市飞机起飞时间飞机到达时间航班的总票数航班的剩余票数用户名密码性别年龄用户等级2)数据结构表2-2名称简述组成company ticket 定义公司相关信息定义机票相关信息公司名,公司地址,公司代码,公司电话机票号,座位,票价,航班号Flight air 定义航班相关信息定义飞机相关信息航班号,出发地,到达地,出发时间,到达时间,公司代码,航班号航程,飞机号,票价3) 数据流4) 数据存储表2-3名称简述组成Company Flight ticket 定义公司相关信息定义机票相关信息CID,Cname, Caddress, CphoneticketID,price,seat number,Flight numberCustomer Air 定义旅客相关信息定义飞机相关信息ID number,name,Pnumber,AddressAir number, Voyage, price5)处理过程5、概念结构设计概念结构设计的方法概念设计阶段采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。

对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。

概念结构设计的步骤第一步是进行局部视图的设计:由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。

因此我们们先逐一的设计分E-R图。

第二步是进行视图的集成:各子系统的E-R图设计好之后,下一步就是要将所有的分E-R 图合成一个系统的总E-R图,一般有两个方式,多个分E-R图一次集成,另一种是一次集成两个分E-R图。

概念模型设计E—R图逻辑设计将ER图转换为关系模式顾客(用户名,密码,性别,年龄)。

航班(航班号,机型,航班公司,起飞城市,到达城市,起飞时间,到达时间,总票数,剩余票数)。

Customer(Username,psw,sex,age,ulevel)Flight(航班号,机型,航班公司,起飞城市,到达城市,起飞时间,到达时间,总票数,剩余票数)下划线标注的属性为主码。

以上关系模式均为BCNF。

物理设计一、为了提高在表中搜索元祖的速度,在实际实现的时候应该基于码机建立索引。

各表中简历索引的表项:(1)Customer(Username)(2)Flight(航班号)二、[用SQL实现设计]1、建立Customer表CREATE TABLE [dbo].[用户表]([username] [char](10)COLLATE Chinese_PRC_CI_AS NOT NULL,[psw] [char](10)COLLATE Chinese_PRC_CI_AS NULL,[sex] [char](10)COLLATE Chinese_PRC_CI_AS NULL,[age] [char](10)COLLATE Chinese_PRC_CI_AS NULL,[ulevel] [char](10)COLLATE Chinese_PRC_CI_AS NULL,CONSTRAINT [PK_用户表] PRIMARY KEY CLUSTERED([username] ASC)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY])ON [PRIMARY]2、建立Airplane表CREATE TABLE [dbo].[Airplane]([航班号] [varchar](50)COLLATE Chinese_PRC_CI_AS NOT NULL,[机型] [varchar](10)COLLATE Chinese_PRC_CI_AS NULL,[航空公司] [char](10)COLLATE Chinese_PRC_CI_AS NULL,[起飞城市] [char](10)COLLATE Chinese_PRC_CI_AS NULL,[到达城市] [char](10)COLLATE Chinese_PRC_CI_AS NULL,[起飞时间] [char](10)COLLATE Chinese_PRC_CI_AS NULL,[到达时间] [char](10)COLLATE Chinese_PRC_CI_AS NULL,[总票数] [varchar](50)COLLATE Chinese_PRC_CI_AS NULL,[剩余票数] [varchar](50)COLLATE Chinese_PRC_CI_AS NULL,CONSTRAINT [PK_Airplane] PRIMARY KEY CLUSTERED([航班号] ASC)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY])ON [PRIMARY]3、顾客操作(1) 注册 (register)INSERT INTO 用户表(Username,psw,sex,age,ulevel)VALUES(#Username,#psw,#sex,#age,#ulevel);(2) 注销 (unregister)DELETE CustomerWHERE(Username=#Username);本系统涉及到的存储过程:这是注册界面,代码如下:using System;using ;using ;using ;using ;using ;using partial class Default2 : protected void Page_Load(object sender, EventArgs e) {();}protected void Button2_Click(object sender, EventArgs e){("");}protected void Button1_Click(object sender, EventArgs e){string Add = "注册";string constr = ["sss"].ToString();SqlConnection conn = new SqlConnection();= constr;if !={();}SqlCommand cmd = new SqlCommand(Add, conn);= ; 注册](@username char(10),@psw char(10),@sex char(10),@age char(10),@ulevel char(10))asbegininsert into用户表(username,psw,sex,age,ulevel)values(@username,@psw,@sex,@age,@ulevel)endGOSET ANSI_NULLS OFFGOSET QUOTED_IDENTIFIER OFFGO这是登录界面登录时必须选对用户等级,不然会报错,登录界面代码如下:using System;using ;using ;using ;using ;using partial class_Default : protected void Page_Load(object sender, EventArgs e) {();}protected void Button2_Click(object sender, EventArgs e){("");}protected void Button1_Click(object sender, EventArgs e){string Add = "CheckUser";string constr = ["sss"].ToString();SqlConnection conn = new SqlConnection();= constr;if !={();}SqlCommand cmd = new SqlCommand(Add, conn);= ;SqlParameter Parameter1 = new SqlParameter("@username", , 10);SqlParameter Parameter2 = new SqlParameter("@psw", , 10);SqlParameter Parameter3 = new SqlParameter("@ulevel", , 10);= ;= ;= ;DataTable table = new DataTable();SqlDataAdapter adapter = new SqlDataAdapter(cmd);(table);SqlDataReader dr = (); CheckUser]@username char(10),@psw char(10),@ulevel char(10)ASBEGINselect*from用户表where username=@username and psw=@psw and ulevel=@ulevel END管理员进去之后可以查询航班表,用户表和管理航班,对信息进行添加修改这里是通过拉控件方式做的,如下图:通过拉FormView和SqlDataSource两个控件,用FormView绑定SqlDataSource,然后在SqlDataSource中配置数据源,然后新建连接如下图:选择存储过程点击完成即可,用户表则是GridView和SqlDataSource控件,方法类似就不再列举!管理员界面这里涉及到2个存储过程:dbo.查看航班表dbo.查看用户表航班表的程序:<asp:SqlDataSource ID="SqlDataSource1"runat="server"ConnectionString="<%$ ConnectionStrings:AirplaneConnectionString %>"SelectCommand="查看航班表" SelectCommandType="StoredProcedure"></asp:SqlDataSource>用户表的程序:<asp:SqlDataSource ID="SqlDataSource2"runat="server"ConnectionString="<%$ ConnectionStrings:AirplaneConnectionString %>"SelectCommand="查看用户表" SelectCommandType="StoredProcedure"></asp:SqlDataSource>这是航班管理界面通过新建可以插入新的信息!管理航班的程序:<asp:SqlDataSource ID="SqlDataSource1"runat="server"ConflictDetection="CompareAllValues"ConnectionString="<%$ ConnectionStrings:AirplaneConnectionString %>"DeleteCommand="DELETE FROM [Airplane] WHERE [航班号] = @original_航班号 AND (([机型] = @original_机型) OR ([机型] IS NULL AND @original_机型 IS NULL)) AND (([航空公司] =@original_航空公司) OR ([航空公司] IS NULL AND @original_航空公司 IS NULL)) AND (([起飞城市] = @original_起飞城市) OR ([起飞城市] IS NULL AND @original_起飞城市 IS NULL)) AND (([到达城市] = @original_到达城市) OR ([到达城市] IS NULL AND @original_到达城市 IS NULL)) AND (([起飞时间] = @original_起飞时间) OR ([起飞时间] IS NULL AND @original_起飞时间 IS NULL)) AND (([到达时间] = @original_到达时间) OR ([到达时间] IS NULL AND @original_到达时间 IS NULL)) AND (([总票数] = @original_总票数) OR ([总票数] IS NULL AND @original_总票数 IS NULL)) AND (([剩余票数] =@original_剩余票数) OR ([剩余票数] IS NULL AND @original_剩余票数 IS NULL))"InsertCommand="INSERT INTO [Airplane] ([航班号], [机型], [航空公司], [起飞城市], [到达城市], [起飞时间], [到达时间], [总票数], [剩余票数]) VALUES (@航班号, @机型, @航空公司, @起飞城市, @到达城市, @起飞时间, @到达时间, @总票数, @剩余票数)"OldValuesParameterFormatString="original_{0}"SelectCommand="查看信息"UpdateCommand="UPDATE [Airplane] SET [机型] = @机型, [航空公司] = @航空公司, [起飞城市] = @起飞城市, [到达城市] = @到达城市, [起飞时间] = @起飞时间, [到达时间] = @到达时间, [总票数] = @总票数, [剩余票数] = @剩余票数 WHERE [航班号] = @original_航班号 AND (([机型] =@original_机型) OR ([机型] IS NULL AND @original_机型 IS NULL)) AND (([航空公司] = @original_航空公司) OR ([航空公司] IS NULL AND @original_航空公司 IS NULL)) AND (([起飞城市] = @original_起飞城市) OR ([起飞城市] IS NULL AND @original_起飞城市 IS NULL)) AND (([到达城市] = @original_到达城市) OR ([到达城市] IS NULL AND @original_到达城市 IS NULL)) AND (([起飞时间] = @original_起飞时间) OR ([起飞时间] IS NULL AND @original_起飞时间 IS NULL)) AND (([到达时间] = @original_到达时间) OR ([到达时间] IS NULL AND @original_到达时间 IS NULL)) AND (([总票数] = @original_总票数) OR ([总票数] IS NULL AND @original_总票数 IS NULL)) AND (([剩余票数] = @original_剩余票数) OR ([剩余票数] IS NULL AND @original_剩余票数 IS NULL))"SelectCommandType="StoredProcedure"><DeleteParameters><asp:Parameter Name="original_航班号"Type="String"/><asp:Parameter Name="original_机型"Type="String"/><asp:Parameter Name="original_航空公司"Type="String"/><asp:Parameter Name="original_起飞城市"Type="String"/><asp:Parameter Name="original_到达城市"Type="String"/><asp:Parameter Name="original_起飞时间"Type="String"/><asp:Parameter Name="original_到达时间"Type="String"/><asp:Parameter Name="original_总票数"Type="String"/><asp:Parameter Name="original_剩余票数"Type="String"/></DeleteParameters><UpdateParameters><asp:Parameter Name="机型"Type="String"/><asp:Parameter Name="航空公司"Type="String"/><asp:Parameter Name="起飞城市"Type="String"/><asp:Parameter Name="到达城市"Type="String"/><asp:Parameter Name="起飞时间"Type="String"/><asp:Parameter Name="到达时间"Type="String"/><asp:Parameter Name="总票数"Type="String"/><asp:Parameter Name="剩余票数"Type="String"/><asp:Parameter Name="original_航班号"Type="String"/><asp:Parameter Name="original_机型"Type="String"/><asp:Parameter Name="original_航空公司"Type="String"/><asp:Parameter Name="original_起飞城市"Type="String"/><asp:Parameter Name="original_到达城市"Type="String"/><asp:Parameter Name="original_起飞时间"Type="String"/><asp:Parameter Name="original_到达时间"Type="String"/><asp:Parameter Name="original_总票数"Type="String"/><asp:Parameter Name="original_剩余票数"Type="String"/></UpdateParameters><InsertParameters><asp:Parameter Name="航班号"Type="String"/><asp:Parameter Name="机型"Type="String"/><asp:Parameter Name="航空公司"Type="String"/><asp:Parameter Name="起飞城市"Type="String"/><asp:Parameter Name="到达城市"Type="String"/><asp:Parameter Name="起飞时间"Type="String"/><asp:Parameter Name="到达时间"Type="String"/><asp:Parameter Name="总票数"Type="String"/><asp:Parameter Name="剩余票数"Type="String"/></InsertParameters></asp:SqlDataSource>这里是系统自动生成的导入存储过程的代码有Update,Delete,Insert插入,删除,修改这些功能的代码这是用户登陆后的界面,,输入条件后会成功显示如下图:按机型查询的过程:<asp:SqlDataSource ID="SqlDataSource1"runat="server"ConnectionString="<%$ ConnectionStrings:AirplaneConnectionString %>"SelectCommand="机型"SelectCommandType="StoredProcedure"><SelectParameters><asp:ControlParameter ControlID="TextBox1"Name="机型"PropertyName="Text"Type="String"/></SelectParameters></asp:SqlDataSource>按航班号查询的过程<asp:SqlDataSource ID="SqlDataSource2"runat="server"ConnectionString="<%$ ConnectionStrings:AirplaneConnectionString %>"SelectCommand="航班号"SelectCommandType="StoredProcedure"><SelectParameters><asp:ControlParameter ControlID="TextBox2"Name="航班号"PropertyName="Text"Type="String"/></SelectParameters></asp:SqlDataSource>按目的地查询的过程<asp:SqlDataSource ID="SqlDataSource3"runat="server"ConnectionString="<%$ ConnectionStrings:AirplaneConnectionString %>"SelectCommand="目的地"SelectCommandType="StoredProcedure"><SelectParameters><asp:ControlParameter ControlID="TextBox3"Name="到达城市"PropertyName="Text"Type="String"/></SelectParameters></asp:SqlDataSource>这3个过程涉及到3个存储过程:机型的存储过程:create proc [dbo].[机型](@机型char(10))asselect*from Airplane where(机型=@机型)return航班号的存储过程:create proc [dbo].[航班号](@航班号char(10))asselect*from Airplane where(航班号=@航班号)return目的地的存储过程:create proc [dbo].[目的地](@到达城市char(10))asselect*from Airplane where(到达城市=@到达城市)return六、编程过程中所遇难题:编程过程中遇到各种各样的问题,其中有3个大问题:1、导入数据库后连接不上数据库,查了1个小时的网,对远程连接做了修改并将regedit中star的键值修改为2才解决。

相关文档
最新文档