数据结构课程设计实验报告--机票管理系统_第1页
数据结构课程设计实验报告--机票管理系统_第2页
数据结构课程设计实验报告--机票管理系统_第3页
数据结构课程设计实验报告--机票管理系统_第4页
数据结构课程设计实验报告--机票管理系统_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计实验报告 目录一.设计要求及分析2二.数据结构设计3三.主要功能函数设计4四.源代码4五.运行与测试30六.实验小结35七.参考文献36一.设计要求及分析: 首先建立1个航班信息表,乘客信息表在程序运行过程中建立。 在飞机航班数据的信息模型中,航班号是主关键字,例如CZ3869,其中CZ是航空公司的别称,用两个大写字母表示,后4位为航班编号。设计要求 (1)建立飞机航班信息表,按航班号有序,用文件保存; 乘客信息表按航班号和姓名有序,用文件保存;每个航班记录包括十项,分别是:航班号、起点、终点、班期、起飞时间、到达时间、飞机型号、票价、总票、余票等,例如航班信息表如下表所示。

2、航班号 起点 终点班 期起飞时间到达时间机 型票 价总票余票CA1544 合肥 北京1,2,4,5 1055 1240 733 960 200 MU5341 上海 广州 每 日 1420 1615 M901280 160 CZ3869 重庆 深圳 2,4,6 0855 1035 7331010 200 MU3682 桂林 南京2,3,4,6,7 2050 2215 M901380 160 HU1836 上海 北京 每 日 0940 1120 7381250 230 CZ3528 成都 厦门1,3,4,5,7 1510 1650 CRJ1060 130 MU4594 昆明 西安1,3,5,6 1

3、015 1140 3281160 100 SC7425 青岛 海口 1,3,6 1920 2120 DH41630 180 其中余票字段可定义为数组int yp8;yp0不用, yp1存放班期1(星期一)的余票数,类推,无班期则放0。每个航班可按如下格式显示:航班号 起点 终点 班期 起飞时间 到达时间 飞机型号 票价 总票 余票CA1544 合肥 北京 1,2,4,5 1055 1240 733 960 200 1-60 2-80 4-56 5-66每个乘客记录包括:身份证、姓名、性别、航班号、班期、手机号等。 (2)程序运行后,出现登录界面,(参考通讯录管理系统)选择管理者和普通乘客; (

4、3)选择普通乘客需要输入身份证号和登录密码,只能做查询类工作和购票、退票操作; (4)选择管理者需要输入登录密码,如连续输错3次密码,则被退出系统;管理员可做所有操作。 菜单设计可分航班信息管理和乘客信息管理(可参考图书管理系统), (a) 航班信息管理可实现: 1. 增加航班记录 2. 查询航班信息- a.按航班号查询 b. 按起点和终点查询 3. 删除航班记录 4. 修改航班信息 5. 显示全部航班信息 0. 返回上层菜单 (b) 乘客信息管理可实现: 1. 查询乘客信息- a.按身份证号查询 b.按姓名查询 c.按航班号查询 2. 购票(增加乘客记录) 3. 退票(删除乘客记录) 4.

5、修改乘客信息 5. 显示全部乘客信息 0. 返回上层菜单根据以上菜单项设计相应的功能函数。每次执行完相应的功能后能返回主菜单。分析:购票需要输入身份证号,姓名、性别、航班号、班期、手机号等,先判断相应航班号的班期的 余票数, 不为0则增加一条乘客记录,并修改相应航班号的班期的余票数,否则不能购票; 退票时需要输入身份证号,可得到乘客信息,修改相应航班号的班期的余票数,并删除该乘客信息记录。2. 数据结构设计struct air /定义航班结构体数组char num20; /定义航班号char start20;/定义起点char over20;/定义终点char banqi20; /定义班期ch

6、ar time120; /定义起飞时间char time220; /定义到达时间char type20; /机ú型íchar price20; /价?格?int xcl; /票数struct air *next;lineinfo;struct guest /定义乘客结构体数组int idnum;/身份证号char gname20; /名字char gender20;/定义机票结构体数组 int pnum; /定义机票结构体数组char num20; /定义机票结构体数组 char banqi20; /定义机票结构体数组 struct guest *next; / 定义机票结

7、构体数组;三.主要功能函数设计 1. 增加航班记录 void addair() 添加(增加航班信息) 2. 查询航班信息- a.按航班号查询 b. 按起点和终点查询 void chaxunts() 查询函数,可以按航班号查询 及按起点和终点查询 3. 删除航班记录 void shanchu() 删除航班信息 4. 显示全部航班信息 void xianshixinxi() 显示全部航班信息 0. 返回上层菜单 (b) 乘客信息管理可实现: 1. 查询乘客信息- a.按身份证号查询 b.按姓名查询 c.按航班号查询 void xianshixinxi2() 可实现按身份证号查询和按姓名查询及按航班

8、号查询 2. 购票(增加乘客记录) void dingpiao() 3. 退票(删除乘客记录) void tuipiao() 4. 显示全部乘客信息 void lvke() 0. 返回上层菜单四.源代码:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include <math.h>#define LEN sizeof(struct air)#define LEN1 sizeof(struct guest)#define NULL 0

9、int chcode();struct air /定义结构体数组char num20; /定义航班号char start20;/航班起始站char over20;/终点站char banqi20; /班期char time120; /起飞时间char time220; /到达时间char type20; /机型char price20; /价格int xcl; /票数struct air *next;struct guest /定义结构体数组int idnum;/身份证号char gname20; /名字char gender20;/性别 int pnum;char num20;char ba

10、nqi20; struct guest *next;void mainmenu() /显示主菜单 system ("cls"); printf(" "); printf("tttt 1.航班信息管理系统nn"); printf("tttt 2.旅客订退票系统nn"); printf("tttt 3.退出系统nn"); printf("ttt 请按键选择,回车确定n"); printf(" ");printf("=");return ;v

11、oid menu1() /显示航班信息菜单 system ("cls");printf("="); printf(" "); printf("tttt 1.增加航班信息nn"); printf("tttt 2.删除航班信息nn"); printf("tttt 3.航班查询nn"); printf("tttt 4.航班信息一览nn"); printf("tttt 5.返回上一层nn"); printf("ttt 请按键选择,回车

12、确定n"); printf(" ");printf("="); return ;void menu2() /显示航班查询菜单 system ("cls");printf("="); printf(" "); printf("tttt 1.航班号查询nn"); printf("tttt 2.起点和终点查询nn"); printf("ttt 请按键选择,回车确定n"); printf(" ");printf(&

13、quot;="); return ;void menu7() /显示航班查询菜单 system ("cls");printf("="); printf(" "); printf("tttt 1.身份证号查询nn"); printf("tttt 2.姓名查询nn"); printf("tttt 3.航班号查询nn"); printf("ttt 请按键选择,回车确定n"); printf(" ");printf("=&q

14、uot;); return ;void main()/主函数,调用main1void main1();main1();void main1()/main1函数void tsgxx();/声明 void dingpiaoxitong();/声明 char choose; mainmenu(); scanf("%c",&choose); switch(choose)/功能函数选择 case '1': int login; login = chcode(); tsgxx();break; case '2':dingpiaoxitong();

15、break; case '3':system ("cls"); printf("nnnnnnnnntttt 已退出系统"); getch();exit(0);system ("cls");break; int chcode() char pw50,ch;char *syspw = "abc" / 原始密码int i,m = 0; printf("请输入密码:"); while(m < 3) i = 0;while(ch = _getch() != 'r')

16、if(ch = 'b' && i > 0) printf("b b");-i;else if(ch != 'b') pwi+ = ch;printf("*");pwi = '0'printf("n");if(strcmp(pw,syspw) != 0) printf("密码错误,请重新输入!n");m+;else printf("密码正确!n");system("pause");return 1;print

17、f("连续3次输入错误,已经退出!n");system("pause");return 0; void tsgxx()/航班信息函数 void addair(); void shanchu(); void chaxunts(); void xianshixinxi();/函数声明 char choose; menu1();/调用菜单函数 scanf("%c",&choose); scanf("%c",&choose); for (;) switch(choose)/功能函数选择 case '

18、1':addair();break; case '2':shanchu();break; case '3':chaxunts();break; case '4':xianshixinxi();break; case '5':main1();break; int tjzs()/统计文本个数函数 FILE *fp; int txcl=0,n; char tnum20='0',tstart20='0',tover20='0',tbanqi20='0',time120

19、='0',time220='0',ttype20='0',tprice20='0' fp=fopen("air.txt","r");/打开文件 for (n=1;!feof(fp);n+)/逐个读文件 fscanf(fp,"%s %s %s %s %s %s %s %s %d ",tnum,tstart,tover,tbanqi,time1,time2,ttype,tprice,&txcl);/ n-; fclose(fp);/关闭文件 return (n);/返

20、回个数int tjdzzs()/统计文本个数函数 FILE *fp; int idnum=0,n; char gname20='0',num20='0',gender20='0',banqi20='0',pnum20='0' fp=fopen("guest.txt","r");/打开文件 for (n=0;!feof(fp);n+)/逐个读文件 fscanf(fp,"%d %s %s %s %s %d ",&idnum,&gname,&am

21、p;gender,&num,&banqi,&pnum); fclose(fp);/关闭文件 return (n);/返回个数void addair()/增加航班信息 FILE *fp; int xcl=0,n=0;char num20='0',start20='0',over20='0',banqi20='0',time120='0',time220='0',type20='0',price20='0' char hitkey='0&#

22、39; system ("cls"); if (fp=fopen("air.txt","r")=NULL)/打开航班文件,不存在此文件则新建 fp=fopen("air.txt","w"); fclose(fp); fp=fopen("air.txt","a"); printf("nt请按以下格式输入航班信息: n航班号 起点 终点 班期 起飞时间 到达时间 飞机型号 票价 余票:n");/按格式输入航班信息 for (;hitkey!

23、=27;)/循环输入 if (n!=0) printf("请输入:"); scanf("%s%s%s%s%s%s%s%s%d",num,start,over,banqi,time1,time2,type,price,&xcl);fprintf(fp,"%s %s %s %s %s %s %s %s %dn",num,start,over,banqi,time1,time2,type,price,xcl); printf("继续输入请按回车,结束输入请按escn"); n+; hitkey=getch();

24、for (;hitkey!=13&&hitkey!=27;) hitkey=getch(); fclose(fp);fp=fopen("air.txt","r"); printf("nnnnnnttt保存成功,按任意键返回上一层!"); getch(); tsgxx();/返回上一层void shanchu()/删除航班信息函数 struct air *head=NULL; struct air *p,*p1,*p2; int txcl=0,n=0,j,i;char num20='0',ttnum20=

25、'0',tnum20='0',tstart20='0',tover20='0',tbanqi20='0',ttime120='0',ttime220='0',ttype20='0',tprice20='0' char hitkey='0' FILE *fp; if (fp=fopen("air.txt","r")=NULL)/打开文件 system ("cls"); print

26、f("nnnnnnnnnttt记录文件不存在!按任意键返回."); getch(); tsgxx(); else system ("cls"); printf("nnnnnnnntt请输入你要删除的航班号:");/输入删除航班号 scanf("%s",&ttnum); printf("tt确认删除请回车,取消请按escn"); hitkey=getch(); for (;hitkey!=13&&hitkey!=27;) hitkey=getch(); if (hitkey

27、=27) tsgxx(); fp=fopen("air.txt","r"); for (j=0;!feof(fp);)/读文件夹信息,统计个数 j+;fscanf(fp,"%s%s%s%s%s%s%s%s%d",tnum,tstart,tover,tbanqi,ttime1,ttime2,ttype,tprice,&txcl); fclose(fp); fp=fopen("air.txt","r"); for (i=1;i<j;i+) fscanf(fp,"%s%s%s%

28、s%s%s%s%s%d",tnum,tstart,tover,tbanqi,ttime1,ttime2,ttype,tprice,&txcl); if (strcmp(ttnum,tnum)/比较名字,将不同航班号的信息复制到链表 n+; if (n=1)/建立链表 p1=p2=(struct air*)malloc(LEN); head=p1; else p2->next=p1; p2=p1; p1=(struct air*)malloc(LEN);/新建链表 strcpy(p1->num,num);/复制航班号strcpy(p1->start,tstar

29、t);/复制strcpy(p1->over,tover);/复strcpy(p1->banqi,tbanqi);/复strcpy(p1->time1,ttime1);/复 strcpy(p1->time2,ttime2);/复 strcpy(p1->type,ttype);/复 strcpy(p1->price,tprice);/复 p1->xcl=txcl;/复制个数 if (n=0) head=NULL; else p2->next=p1; p1->next=NULL; fclose(fp); fp=fopen("air.tx

30、t","w");/清空文件 fclose(fp); fp=fopen("air.txt","a");/追加文件 p=head; for (;p!=NULL;)/把链表内容覆盖到文件 fsntf(fp,"%s %s %s %s %s %s %s %s %d n",p->num,p->start,p->over,p->banqi,p->time1,p->time2,p->type,p->price,p->xcl); p=p->next; fclose

31、(fp);/关闭文件 system ("cls"); printf("nnnnnnnntt 删除成功 ntt按任意键返回上一层n"); getch();/返回上一层 tsgxx();void chaxunts()/查询航班信息函数 FILE *fp; char choose; int txcl=0,n=0,k=0,i,l; char tnum20='0',tstart20='0',tover20='0',tbanqi20='0',ttime120='0',ttime220=&

32、#39;0',ttype20='0',tprice20='0',ttnum20='0',ttstart20='0',ttover20='0',ttbanqi20='0',tttime120='0',tttime220='0',tttype20='0',ttprice20='0' if (fp=fopen("air.txt","r")=NULL)/打开文件 system ("cls

33、"); printf("nnnnnnnnnttt记录文件不存在!按任意键返回."); getch(); tsgxx(); l=tjzs();/获得文件个数 menu2();/调用菜单函数 scanf("%c",&choose);scanf("%c",&choose);/选择查询方式 if (choose='5') return; else if (choose='1')/航班号查询 system ("cls"); printf("请输入航班号:&q

34、uot;); scanf("%s",ttnum); else if (choose='2')/起点终点查询 system ("cls"); printf("请输入起点和终点:"); scanf("%s%s",ttstart,ttover); system ("cls"); for (i=0;i<l;i+) fscanf(fp,"%s %s %s %s %s %s %s %s %d n",tnum,tstart,tover,tbanqi,ttime1,tt

35、ime2,ttype,tprice,&txcl);/读文件信息 if (!strcmp(ttnum,tnum)|!strcmp(ttstart,tstart)|!strcmp(ttover,tover)|!strcmp(ttbanqi,tbanqi)|!strcmp(tttime1,ttime1)|!strcmp(tttime2,ttime2)|!strcmp(tttype,ttype)|!strcmp(ttprice,tprice)/输出查询信息 if (k=0) printf("tttt查询结果:nn"); printf("航班号 起点 终点 班期 起

36、飞时间 到达时间 飞机型号 票价 余票 n"); printf("%-8s %-8s %-8s %-8s %-10s %-10s %-8s %-8s %-4d n",tnum,tstart,tover,tbanqi,ttime1,ttime2,ttype,tprice,txcl); k+; if (k=0)/文件夹为空则输出无记录 system ("cls"); printf("nnnnnnntttt无符合记录!n"); getch(); tsgxx(); fclose(fp); getch();/返回 tsgxx();vo

37、id xianshixinxi()/显示航班信息 FILE *fp; int xcl=0,n=0,i=0,j=0; char num20='0',start20='0',over20='0',banqi20='0',time120='0',time220='0',type20='0',price20='0' if (fp=fopen("air.txt","r")=NULL)/打开文件夹 system ("cls&quo

38、t;); printf("nnnnnnnnnttt记录文件不存在!"); n= tjzs(); if (n=0) system ("cls"); printf("nnnnnnnnnttt无任何记录!"); fp=fopen("air.txt","r"); system ("cls");printf("*"); printf("航班号 起点 终点 班期 起飞时间 到达时间 飞机型号 票价 余票 n"); printf("*&qu

39、ot;); for (i=0;i<n;i+)/输出信息 fscanf(fp,"%s%s%s%s%s%s%s%s%d",num,start,over,banqi,time1,time2,type,price,&xcl); printf("%-8s %-8s %-8s %-8s %-10s %-10s %-8s %-8s %-4d n",num,start,over,banqi,time1,time2,type,price,xcl); fclose(fp); printf("tttt按任意键返回n"); getch();/返

40、回 tsgxx();void menu3() /显示订票系统主菜单 system ("cls"); printf(" ");printf("="); printf("tttt 1.订票nn"); printf("tttt 2.退票nn"); printf("tttt 3.订票情况查询n"); printf("tttt 4.订票一览n"); printf("tttt 5.航班信息一览nn"); printf("tttt 6.返回

41、上一层菜单nn"); printf("ttt 请按键选择,回车确定n"); printf(" ");printf("="); return ;void dingpiaoxitong()/订票系统函数 void dingpiao();void xianshixinxi2(); void tuipiao(); void chaxunts2(); void lvke();/函数声明 char choose; menu3(); scanf("%c",&choose); scanf("%c&quo

42、t;,&choose);/选择功能 for (;) switch(choose)/调用函数 case '1':dingpiao();break; case '2':tuipiao();break; case '3':chaxunts2();break; case '4':lvke();break; case '5': xianshixinxi2();break; case '6':main1();break; void dingpiao()/订票函数 FILE *fp,*fp3; struc

43、t air *head=NULL; struct air *p,*p1,*p2; int txcl=0,i,loop,idnum=0,n=0,k=0,t=0,flag=0,pnum; char tnum20='0',ttnum20='0',tstart20='0',tover20='0', tbanqi20='0',ttime120='0',ttime220='0',ttype20='0',tprice20='0'char gname20='0

44、',gender20='0',banqi20='0',num20='0' char hitkey20='0' system ("cls"); if (fp=fopen("air.txt","r")=NULL)/打开航班文件 system ("cls"); printf("nnnnnnnnntt 无航班信息!按任意键退出!"); getch(); exit (0); else printf("nnnnnnttt请输入

45、航班号:tttttt n请输入:");/输入航班号 scanf("%s",tnum); k= tjzs();/统计航班文件个数 for (i=0;i<k;i+)/读入航班信息,存储到链表 fscanf(fp,"%s%s%s%s%s%s%s%s%d",tnum,tstart,tover,tbanqi,ttime1,ttime2,ttype,tprice,&txcl); n+; if (n=1) p1=p2=(struct air*)malloc(LEN); head=p1; else p2->next=p1; p2=p1; p

46、1=(struct air*)malloc(LEN);/新建链表 strcpy(p1->num,tnum); /复制航班号 strcpy(p1->start,tstart);/复制strcpy(p1->over,tover);/复strcpy(p1->banqi,tbanqi);/复 strcpy(p1->time1,ttime1);/复 strcpy(p1->time2,ttime2);/复 strcpy(p1->type,ttype);/复 strcpy(p1->price,tprice);/复 p1->xcl=txcl;/复 if (

47、n=0) head=NULL; else p2->next=p1; p1->next=NULL; fclose(fp); fclose(fp);fp=fopen("air.txt","r"); p=head; /printf("%s",p->num); for (;p!=NULL;)/读链表 if(!(strcmp(p->num,tnum)/航班号相同 flag=1;/标记取1 loop=p->xcl;/现存量减1 (p->xcl)-; p=p->next; if(flag&&

48、(loop>0)/存在航班名且现存量大于0 fp=fopen("air.txt","w"); fclose(fp); fp=fopen("air.txt","a"); p=head; for (;p!=NULL;) fprintf(fp,"%s %s %s %s %s %s %s %s %d n",p->num,p->start,p->over,p->banqi,p->time1,p->time2,p->type,p->price,p->

49、;xcl); p=p->next; free(p);/把链表内容覆盖文件 fclose(fp); if(flag&&(loop>0)/存航班名且现存量大于0 if (fp3=fopen("guest.txt","r")=NULL)/建读旅客件夹 fp3=fopen("guest.txt","w"); fclose(fp3); fp3=fopen("guest.txt","a"); if (n!=0) printf("nnnnnnttt请按以下格式输入旅客信息:ttt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论