C语言数据结构课程设计航空订票实验报告(含源代码)

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

数据结构课程设计实验报告
设计题目__________________________________________________________________ 设计者__________________________________________________________________ 指导老师__________________________________________________________________ 班级___________________________________________________________________ 学号____________________________________________________________________
一、设计要求
任务通过此系统可以实现如下功能:
1.录入航班信息:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据定)
2.查询航班:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓);
3.订票:
(订票情况可以存在一个数据文件中,结构自己设定);
4.退票:
可退票,退票后修改相关数据文件;
5.修改航班信息
6.退出程序
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
二、设计概要
主界面
选择操作项目
1.录入航班信息
通过单链表这种数据结构,设置了剩余票数,航班号,出发地点,到达地点,起飞日期,出发时间,到达时间,票价。

2.订票
输入旅客的姓名,证件号,航班号,和订票张数。

程序中自动查询输入要定的航班号,如果没有则叫其重新输入,有则执行:票数足够则订票成功,票数不充足叫其选择其它航班。

此也采用单链表的数据结构。

3.退票
要旅客输入订单号,查询航班号,没有此航班号则叫旅客核对。

有则执行:
1)查询旅客的航班
2)修改航班的剩余票数。

3)删除旅客订票信息。

4)退票成功,显示剩余票数。

4.查询
输入航班号,有与之匹配的航班则输出之,没有则说没有此航班
5.修改航班信息
查询到要修改的航班,然后直接进行修改
6.退出程序
三、设计中主要用到的结构体typedef struct P//旅客机票信息
{
char name[10];//姓名
int ordernum;//机票编号
char num[10];//旅客证件号
struct P *next;
int ticketnum;//订票张数
int flightn;//航班号
}person;
typedef struct node//航班信息
{ int ticket;//剩余票数
int flightnum;//航班号
char startadd[20];//出发地点
char arriveadd[20];//到达地点
char startdate[20];//出发日期
char starttime[10];//出发时间
char arrivetime[10];//到达时间
int price;//票价
struct node *next;
}LinkList;
四、主要函数
void dingpiao(LinkList *&L,person *&p)//订票函数
void write(LinkList *&L)//航班信息录入函数
void showF(LinkList *fn)//展示航班信息的函数
void showT(LinkList *L1,person *p1)//展示机票信息的函数void tuipiao(LinkList *&L,person *p)//退票函数
void xiugai(LinkList *&L)//修改航班信息的函数
void scr()//主界面函数
void chaxun(LinkList *&L)//查询函数
int main()//主函数,定义为int型
五、变量说明
1.在主函数中
LinkList *h 表示航班节点
person *p 表示机票信息节点
2.在其他函数中
一般也用 r,p,f等表示链表指针
i j m等表示int变量
六、演示截图
1.航班信息录入
2.订票
3.退票
4.查询
5.修改航班信息
6.主界面、
七、实验心得体会
1.巩固和加深了对数据结果的理解,提高综合运用本课程所学知识的能力
2.培养了我选用参考书,查阅手册及及文献资料的能力。

培养独立思考,深入研究,分析问题,解决问题的能力。

3.通过设计编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。

4.通过可看成设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。

根据我在设计中遇到的问题,我将在以后的学习过程中注意一下几点:
1.认真上好专业课,多在实践中锻炼自己;
2.写程序的过程中要考虑周到,严密
3.在做设计的时候要有信心,有耐心,切勿浮躁。

4.认真学习课本知识,掌握课本中的知识点,并在此基础上学会灵
活运用。

5.在课余时间多写程序,熟练掌握在调试程序的过程中所遇到的常
见错误,以便能节省调试程序的时间。

附:源代码
//#include"stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define M 50
int j=1;//航班编号初始化typedef struct P//旅客jipiao信息{
char name[10];//姓名
int ordernum;//机票编号
char num[10];//旅客证件号
struct P *next;
int ticketnum;//订票张数
int flightn;//航班号
}person;
typedef struct node//航班信息{
int ticket;//剩余票数
int flightnum;//航班号
char startadd[20];//出发地点
char arriveadd[20];//到达地点
char startdate[20];
char starttime[10];//出发时间
char arrivetime[10];//到达时间
int price;//票价
//float discount=1;//折扣
struct node *next;
}LinkList;
void showF(LinkList *fn)
{
LinkList *f;
f=fn->next;
printf("剩余票数\t航班号\t出发地点\t到达地点\n");
while(f)
{
printf("%d\t%d\t%s\t%s\n",f->ticket,f->flightnum,f->startadd,f->arrivead d);
f=f->next;
}
f=fn->next;
printf("出发时间\t到达时间\t票价\n");
while(f)
{
printf("%s\t%s\t%d\n",f->startdate,f->starttime,f->price); f=f->next;
}
}
void dingpiao(LinkList *&L,person *&p)//头插法
{
person *r;
r=(person *)malloc(sizeof(person));
int n;//要定的航班号
char t;//重新订票选择项
LinkList *q=L->next;//航班
printf("输入乘客姓名(例如zhang) ");
scanf("%s",&r->name);
printf("证件号:");
scanf("%s",&r->num);
printf("输入订票航班号和订票张数");
scanf("%d,%d",&n,&r->ticketnum);
while(q!=NULL&&q->flightnum!=n)//查询是否有此航班
{
q=q->next;
}
if(q->flightnum==n&&q->ticket-r->ticketnum>=0)//有且票量充足{
q->ticket-=r->ticketnum;
r->ordernum=j;
r->flightn=n;
printf("订票成功!订票编号为%d,剩余票数:%d\n",j,q->ticket);
j++;
}
else
{
if(q->flightnum==n&&q->ticket-r->ticketnum<0)//有,但无票
{
printf("该航班已经满,请选择其他航班\n");
}
else
{
printf("没有该航班号!是否需要重新订票y?n");//无此航班
scanf("%c",&t);
if(t=='y')
{
dingpiao(L,p);
}
}
}
r->next=p->next;
p->next=r;
}
void showT(LinkList *L1,person *p1)
{
person *p2;
p2=p1->next;
printf("机票编号\t旅客姓名\t旅客证件号\t旅客航班号\t旅客订票张数\n");
while(p2)
{
printf("%d\t%s\t%s\t%d\t%d\n",p2->ordernum,p2->name,p2->num,p2->flightn,p2->ticketnum);
p2=p2->next;
}
}
void tuipiao(LinkList *&L,person *p)
{
int m;
LinkList *r=L->next;//查询航班,修改剩余票数时用
person *pf=p;//查询编号
printf("请输入订单号:");
scanf("%d",&m);
person *w=p->next;//查询编号
while(w!=NULL&&w->ordernum!=m)//查询订单
{
w=w->next;
}
if(w==NULL)
{
printf("无该订单号,请再次核对!");
}
else
{
while(r!=NULL&&r->flightnum!=w->flightn)//修改航班剩余票数{
r=r->next;
}
if(!r)
{
printf("error!");
}
else
{
r->ticket=r->ticket+w->ticketnum;
while(pf->next!=w&&pf->next!=NULL)//删除节点
{
pf=pf->next;
}
pf->next=w->next;
free(w);
printf("退票成功!该航班剩余票数%d\n",r->ticket);
}
}
}
void xiugai(LinkList *&L)
{
int x;
printf("请输入你要修改航班号:");
scanf("%d",&x);
LinkList *r=L;
while(r!=NULL&&r->flightnum!=x)
{
r=r->next;
}
if(!r)
{
printf("error!");
}
else
{
printf("请重新输入它的起点城市");
scanf("%s",&r->startadd);
printf("请重新输入它的终点城市");
scanf("%s",&r->arriveadd);
printf("请重新输入它的起飞日期");
scanf("%s",&r->startdate);
printf("请重新输入它的起飞时间");
scanf("%s",&r->starttime);
printf("请重新输入它的单价");
scanf("%d",&r->price);
printf("请重新输入它的剩余票数");
scanf("%d",&r->ticket);
}
}
void write(LinkList *&L)
{
LinkList *p=L;
p=(LinkList *)malloc(sizeof(LinkList));
printf("请输入你要航班号:");
scanf("%d",&p->flightnum);
printf("请输入它的起点");
scanf("%s",&p->startadd);
printf("请输入它的终点");
scanf("%s",&p->arriveadd);
printf("输入它的起飞日期");
scanf("%s",&p->startdate);
printf("输入它的起飞时间");
scanf("%s",&p->starttime);
printf("输入它的到达时间");
scanf("%s",&p->arrivetime);
printf("输入它的单价");
scanf("%d",&p->price);
printf("请输入它的剩余票数");
scanf("%d",&p->ticket);
p->next=L->next;
L->next=p;
}
void scr()
{
printf("----------------订票系统--------------\n");
printf(" 数据结构课程设计\n");
printf("1.航班信息录入\n");
printf("2.订票\n");
printf("3.退票\n");
printf("4.航班信息查询\n");
printf("5.航班信息修改\n");
printf("6.退出\n");
}
void chaxun(LinkList *&L)
{
LinkList *p=L;
int m;
printf("请输入你要航班号:");
scanf("%d",&m);
while(p!=NULL&&p->flightnum!=m)
{
p=p->next;
}
if(!p)
{
printf("error!");
}
else
{
printf("该航班起点:%s\n终点:%s\n起飞日期:%s\n起飞时间:%s\n到达时间:%s\n票价:%d\n剩余票数:%d\n"
,p->startadd,p->arriveadd,p->startdate,p->starttime,p->arrivetime,p->price,p->ticket);
}
}
int main()
{
LinkList *h;//航班
person *p;//旅客
p=(person *)malloc(sizeof(person));
h = (LinkList *) malloc (sizeof(LinkList));
p->next=NULL;
h->next = NULL;
int ch=1;
scr();
while(ch!=6)
{
printf("请选择你要进行的操作:");
scanf("%d",&ch);
switch(ch)
{
case 1:
write(h);
showF(h);
break;
case 2:
dingpiao(h,p);
showT(h,p);
break;
case 3:
tuipiao(h,p);
showT(h,p);
break;
case 4:
chaxun(h);break;
case 5:
xiugai(h);
showF(h);
break;
case 6:
break;
default:
printf("输入有误请重新选择:"); }
}
system("pause");
return 0;
}。

相关文档
最新文档