版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构集中上机设计报告(订票系统)目录第一部分: . 报告的基本要求第二部分: . 程序源代码及运行结果第三部分: . 心得体会第一部分:报告的基本要求1:简述题目要解决的问题是什么,并说明输入和输出数据的形式。 该系主要是为客户提供多种航班选择,当客户选择某种航班2保存相应的客户信息,并能随时 航班信息和客户信息做出一定的修改。2:简述存储结构和算法的基本思想。 本程序主要是以建立单链表的形式将相应的数据存储在文件中,算法的基本思想是:主函数控制程序的执行流程,将该系统要完成的各个功能用不同的子函数写出,建立两个文件(文本文档的形式)分别保存航班信息和订票信息。3:分析程序的优缺点、时空性
2、能以及改进思想。 该程序执行过程清晰,并附带详细的提示信息,能让用户清楚的知道下一步应该怎么做,不过程序不够精炼,还有待优化。该程序主要是用单链表存储结构来存储各项数据,里边用到了建立单链表(时间复杂度为o(n)),单链表的插入(时间复杂度为o(n)),链表的删除(时间复杂度为o(n))。改进思想:可以用二叉树及图等存储结构来存储相应的信息,建立哈希表,二叉平衡树等来进行查找。第二部分: 程序源代码及运行结果源代码:#include#include#include#include#include#include#define null 0/-定义结构体表示航班情况-typedef struct
3、 dateint hour;int minute;date;typedef struct flightlong number; /航班号 date strat; /起飞时间date end; /降落时间char city20; /起飞抵达城市float price; /票价float discount; /票价折扣char a5; /确定航班是否仓满,yes表示已满,no未满struct flight *next;flight;/-/-定义结构体表示客户订票情况-typedef struct dingpiaoint num; /订单编号 char name10; /客户姓名long id; /
4、客户证件号int amount; /订票数量long number; /航班情况 struct dingpiao *next;dingpiao;/-/-录入函数-/思想:建立一个单链表将需要录入的航班情况保存在里面,然后再将单链表中的所有数据存储在航班情况的文件里面。void luru() flight *head,*p;flight *p1,*p2;file *fp; /文件定义fp=fopen(航班情况.txt,a+); /文件打开int i,n=0; /定义整形变量i,n用作记录链表结点的个数printf(请输入一个整数,当输入为0时结束录入:);scanf(%d,&i); p2=p1=
5、(flight *)malloc(sizeof(flight);while(i!=0)n+;printf(请输入航班号:);scanf(%ld,&p1-number);printf(n请输入起飞时间(时,分):);scanf(%d,%d,&p1-strat.hour,&p1-strat.minute);printf(n请输入降落时间(时,分):);scanf(%d,%d,&p1-end.hour,&p1-end.minute);printf(n请输入起飞抵达城市:);scanf(%s,p1-city);printf(n请输入票价和折扣:);scanf(%f,%f,&p1-price,&p1-d
6、iscount);printf(n请输入是否满仓:);scanf(%s,p1-a);if(n=1) head=p1;elsep2-next=p1;p2=p1;p1=(flight *)malloc(sizeof(flight);printf(请输入一个整数,当输入为0时结束录入:);scanf(%d,&i); p2-next=null;/-保存录入的航班信息-p=head;while(p!=null) fwrite(p,sizeof(flight),1,fp);p=p-next;/-fclose(fp); /-关闭文件-/-/-查询函数-/思想:先读取已存储的航班情况文件,然后再按两种不同的方
7、式查询相应的信息void chaxun()int a,num,i=0;char city20; /-/下面部分是读取已存储的航班情况文件file *fp;flight *head,*p,*s;head=(flight *)malloc(sizeof(flight);s=head;if(fp=fopen(航班情况.txt,r)=null)printf(error!n);exit(0);elsewhile(!feof(fp)p=(flight *)malloc(sizeof(flight);fread(p,sizeof(flight),1,fp);s-next=p;s=p;s-next=null;
8、/-printf(请选择是n 1: 按航班号查询n 2: 按抵达城市查询n);printf(请输入你的选择:);scanf(%d,&a);switch(a) case 1: printf(请输入你要查询的航班号:); scanf(%ld,&num); s=head; while(s!=null) if(s-number=num) printf(起飞时间:%d:%d,s-strat.hour,s-strat.minute); printf(n降落时间:%d:%d,s-end.hour,s-end.minute); printf(n起飞抵达城市:%s,s-city); printf(n票价和折扣:
9、%f,%f,s-price,s-discount); printf(n是否满仓:%s,s-a); printf(n); break; else s=s-next; if(s=null) printf(没有找到你想要查询的航班n); break; case 2: printf(请输入你要查询的起飞抵达城市:); scanf(%s,city); s=head; while(s!=null) if(strcmp(s-city,city)=0) printf(航班号:%ld,s-number); printf(n起飞时间:%d:%d,s-strat.hour,s-strat.minute); prin
10、tf(n降落时间:%d:%d,s-end.hour,s-end.minute); printf(n票价和折扣:%f,%f,s-price,s-discount); printf(n是否满仓:%s,s-a); printf(n); break; else s=s-next; if(s=null) printf(没有找到你想要查询的航班n); break; fclose(fp); /关闭打开的文件/-/-订票函数-/思想:建立一个单链表将订票客户的相应资料保存在里面,然后再将单链表中的所有数据存储在订票情况的文件里面。 void dingpiao() dingpiao *head,*p;dingp
11、iao *p1,*p2;file *fp; /文件定义fp=fopen(订票情况.txt,a+); /文件打开int i,n=0; /定义整形变量i,n用作记录链表结点的个数printf(请输入一个整数,当输入为0时结束订票:);scanf(%d,&i); p2=p1=(dingpiao *)malloc(sizeof(dingpiao);while(i!=0)p1-num=n+;printf(请输入客户姓名:);scanf(%s,p1-name);printf(n请输入客户证件号码:);scanf(%ld,&p1-id);printf(n请输入订票数量:);scanf(%d,&p1-amou
12、nt);printf(n请输入订单编号:);scanf(%d,&p1-num); printf(n请输入客户订的航班号:);scanf(%ld,&p1-number);if(n=1) head=p1;elsep2-next=p1;p2=p1;p1=(dingpiao *)malloc(sizeof(dingpiao);printf(请输入一个整数,当输入为0时结束订票:);scanf(%d,&i); p2-next=null;/-保存客户的订票信息-p=head;while(p!=null) fwrite(p,sizeof(dingpiao),1,fp);p=p-next;/-fclose(f
13、p); /-关闭文件-/-/-退票函数-/思想:先读取已存储的订票情况文件,然后再找到相应客户资料并删除void tuipiao()char name10,a5;dingpiao *q,*r; /-/下面部分是读取已存储的订票情况文件file *fp;dingpiao *head,*p,*s;head=(dingpiao *)malloc(sizeof(dingpiao);s=head;if(fp=fopen(订票情况.txt,r+)=null)printf(error!n);exit(0);elsewhile(!feof(fp)p=(dingpiao *)malloc(sizeof(ding
14、piao);fread(p,sizeof(dingpiao),1,fp);s-next=p;s=p;s-next=null;/-/-/-找到相应客户资料并删除(单链表的删除)- there: printf(请输入需要退票的客户姓名:); scanf(%s,name); getchar(); s=head; while(s!=null) if(strcmp(s-name,name)=0) break; else q=s; s=s-next; if(s=null)printf(没有找到该客户的姓名,请确认该客户是否已订票n);printf(是否继续退票(yes or no):);gets(a);i
15、f(strcmp(a,yes)=0) goto there;else if(s=head)head=s-next; /删除结点/将该删除结点后面的客户订票编号依次减一s=head;while(s!=null) s-number-=1;s=s-next; elseq-next=s-next; /删除结点/将该删除结点后面的客户订票编号依次减一 s=q-next; while(s!=null) s-number-=1;s=s-next;printf(是否继续退票(yes or no):);gets(a);if(strcmp(a,yes)=0) goto there;/-/-保存修改后的文件-r=h
16、ead;while(r!=null) fwrite(r,sizeof(dingpiao),1,fp);r=r-next;/-fclose(fp); /-关闭文件-/-/-修改航班信息函数-/思想:先读取已存储的航班情况文件,然后再修改相应的航班信息void xiugai()long number;char a5,b,c5;float price,discount;int hour,minute;flight *r; /-/下面部分是读取已存储的航班情况文件file *fp;flight *head,*p,*s;head=(flight *)malloc(sizeof(flight);s=hea
17、d;if(fp=fopen(航班情况.txt,r+)=null)printf(error!n);exit(0);elsewhile(!feof(fp)p=(flight *)malloc(sizeof(flight);fread(p,sizeof(flight),1,fp);s-next=p;s=p;s-next=null;/- where: printf(请输入你要修改该的航班的航班号:); scanf(%ld,&number); getchar(); s=head; while(s!=null) if(s-number=number) man: printf(请输入你要修改的航班信息类型n
18、); printf(s(起飞时间),e(降落时间),d(折扣),p(票价),a(是否仓满):);gets(&b);getchar();switch(b) case s: printf(n请输入你要修改的起飞时间(时,分之间用逗号间隔):); scanf(%d,%d,&hour,&minute); s-strat.hour=hour; s-strat.minute=minute; printf(n是否继续修改其他类型的航班信息(yes or no):); getchar(); gets(c); if(strcmp(c,yes)=0) goto man; else break; case e: p
19、rintf(n请输入你要修改的降落时间(时,分之间用逗号间隔):); scanf(%d,%d,&hour,&minute); s-end.hour=hour; s-end.minute=minute; printf(n是否继续修改其他类型的航班信息(yes or no):); getchar(); gets(c); if(strcmp(c,yes)=0) goto man; else break; case d: printf(n请输入你要修改的机票折扣:); scanf(%f,&discount); s-discount=discount; printf(n是否继续修改其他类型的航班信息(y
20、es or no):); getchar(); gets(c); if(strcmp(c,yes)=0) goto man; else break; case p: printf(n请输入你要修改的机票票价:); scanf(%f,&price); s-price=price; printf(n是否继续修改其他类型的航班信息(yes or no):); getchar(); gets(c); if(strcmp(c,yes)=0) goto man; else break; case a: printf(n请输入你要修改的是否仓满:); scanf(%s,a); strcpy(s-a,a);
21、printf(n是否继续修改其他类型的航班信息(yes or no):); getchar(); gets(c); if(strcmp(c,yes)=0) goto man; else break; default: printf(n你的输入有错,请重新选择n); printf(是否继续修改其他类型的航班信息(yes or no):); getchar(); gets(c); if(strcmp(c,yes)=0) goto man; else break;break;elses=s-next;if(s=null) printf(没有找到你要修改的航班); printf(是否继续修改其他航班的
22、信息(yes or no):); gets(c);getchar(); if(strcmp(c,yes)=0) goto where;/-保存修改后的文件-r=head;while(r!=null) fwrite(r,sizeof(flight),1,fp);r=r-next;/-fclose(fp); /-关闭文件-/-/-主函数-void main() int a; here: printf(-n); printf( 1: 录入n 2: 查询n 3: 订票n 4: 退票n 5: 修改航班信息n 6: 退出n); printf(-n); printf(请选择服务项目:n); scanf(%d,&a); switch(a) case 1: luru(); system(pause); /暂停函数,按任意键解除暂停 / sleep(10000); /暂停函数,以毫秒为单位 system(cls); /清屏函数 goto here; case 2: chaxun(); system(pause);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山西警官职业学院单招职业适应性考试题库附答案详解(考试直接用)
- 2026年广州城市职业学院单招综合素质考试题库附参考答案详解(巩固)
- 2026年山西药科职业学院单招职业技能考试题库及一套参考答案详解
- 2026年广东茂名农林科技职业学院单招职业适应性考试题库附答案详解(能力提升)
- 2026年广东食品药品职业学院单招职业技能考试题库含答案详解
- 2026年广东省汕尾市单招职业倾向性测试题库及答案详解(各地真题)
- 2026年广州番禺职业技术学院单招职业技能考试题库附参考答案详解(研优卷)
- 2026年广西城市职业大学单招综合素质考试题库及答案详解一套
- 2026年广东省汕尾市单招职业适应性考试题库带答案详解(黄金题型)
- 2026年广州民航职业技术学院单招职业技能测试题库含答案详解(满分必刷)
- 2026春统编版三年级下册道德与法治每课知识点清单
- 2025中国国新控股有限责任公司招聘7人笔试历年常考点试题专练附带答案详解
- 2026秋招:平安银行笔试题及答案
- 2026贵州毕节织金县部分县直单位公开考调工作人员47人实施笔试参考题库及答案解析
- 2026年六安职业技术学院单招职业适应性考试题库附参考答案详解ab卷
- 2026陕煤集团榆林化学有限责任公司招聘(162人)考试备考题库及答案解析
- GB/T 27664.3-2026无损检测仪器超声检测设备的性能与检验第3部分:组合设备
- 2026广东江门职业技术学院管理教辅人员招聘4人备考题库带答案详解(基础题)
- GB/T 46977-2026铸造用再生砂氮、硫、磷含量测定方法
- 突发事件创伤伤员医疗救治规范2025年版
- 2026年跨境电商平台合同
评论
0/150
提交评论