数据结构航空订票系统(数据结构航班订票系统)
【 xiumi360.com - 旅游百宝箱 】
本文目录一览:
- 1、数据结构课程设计——航空订票系统(C语言)
- 2、数据结构 航空客运订票的业务活动包括
- 3、数据结构实习 C语言 航空订票系统
数据结构课程设计——航空订票系统(C语言)
1、任务:航空客运定票的业务活动包括:查询航线、客票预定和办理退票等。试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。2、功能要求:1) 录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2) 查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3) 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4) 退票: 可退票,退票后修改相关数据文件;5) 客户资料:有姓名,证件号,订票数量及航班情况,订单要有编号;6) 修改航班信息:当航班信息改变可以修改航班数据文件。 3、要有一个好的界面~~~~~~~~~~~~~~~~~~~~~~~~4、需求分析系统需求(系统要求实现的功能的具体情况)5、 概要设计系统分析(分析系统的功能和具体模块的划分)系统流程(系统的流程图)程序详细代码:
数据结构 航空客运订票的业务活动包括
#include stdio.h
#include string.h
#include conio.h
#include ctype.h
#include stdlib.h
#include malloc.h
#include math.h//overflow
#define ok 1
typedef struct Yidingkehu{//单链表
char name[15];//已订票的客户姓名
int dingpiaoshu;//已订票数量
struct Yidingkehu *next1;//
}Yidingkehu,*Link;
typedef struct Weidingkehu{//单链队
char name[15];//预订票的客户姓名
int yudingpiao;// 要订票数量
struct Weidingkehu *next2;//下一个链队结点指针
}Weidingkehu,*Qptr;
typedef struct {
Qptr front;//单链队头结点
Qptr rear;//单链队尾结点
}linkQueue;
typedef struct Hangxian{//创建一个含有六个信息的结构体
char hangbanhao[15];//航班号-
char feijihao[15];//飞机号
int feixingriqi;//起飞时间
int chenkerenshu;//座位数
int yupiao;//余票
char zhongdianzhai[15];//降落城市
struct Hangxian *next;//指向下一个链结点的指针
struct Yidingkehu *yiding;//定义一个指向已订票客户的头结点指针
struct Weidingkehu *yudingqueue;
}Hangxian,*Linklist;
struct Hangxian *L=NULL;//
struct Yidingkehu *H;//为已订票客户链队来申请空间
linkQueue Q;//linkQueue类型的来申请空间
Linklist InitLinklist();//01
int InsertLinklist(Linklist head1);//02
void hbhchaxun();//通过航班号查询
void mddchaxun();//通过目的地查询
void lurugongneng();//初始化录入功能
void chaxungongnen();//查询功能
void dingpiaogongnen();//订票功能
void tuipiaogongnen();//退票功能
void main()
{
H=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));
Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));
InitLinklist();
int n;
do{ //打印主界面
printf("/t 欢迎使用航空客运订票系统/n");
printf("/t+++++++++++++++++++++++++++++/n");
printf("/t==1. 录入功能 ==/n");
printf("/t==2. 查询功能 ==/n");
printf("/t==3. 订票功能 ==/n");
printf("/t==4. 退票功能 ==/n");
printf("/t==5. 退出 ==/n");
printf("/t+++++++++++++++++++++++++++++/n");
printf("/t请选择:");
scanf("%d",n);printf("/n");
switch(n)
{
case 1: lurugongneng();//录入功能
break;
case 2: chaxungongnen();//查询功能
break;
case 3: dingpiaogongnen();//订票功能
break;
case 4:tuipiaogongnen();//退票功能
break;
default :exit(0);//退出
}
}while(n==1||n==2||n==3||n==4);
}
void lurugongneng()//初始化的单链表*********************************************************录入功能
{
int j=1,m;
do{
if(!InsertLinklist((Linklist) L)) //向其中加入航班信息
{
printf("内存已满/n"); exit(OVERFLOW);
}//向链表中加一结点
printf("/t是否要输入下一个航线记录?/n");
printf("/t是请输入1/n");
printf("/t否请输入2/n/t");
scanf("%d",m); //在这里依靠人来决定是否输入下一条航线记
}while(m==1);
}
Linklist InitLinklist(){//01
L=(Linklist)malloc(sizeof(Hangxian));
if(!L) exit(OVERFLOW);
L-next=NULL;//建立一个带有头结点的单链表
return (L);
}
int InsertLinklist(Linklist L)//02向航线链表添加新的结点
{
Linklist p;
//int m,n;
p=(Linklist)malloc(sizeof(Hangxian));//为一个新的结点分配空间
if(!p) exit(OVERFLOW);
printf("/t请依次输入下面几项内容:/n/n");//这里的输入采用一个个单独输入,避免了乱赋值的现象
printf("航班号/n");
gets(p-hangbanhao);//这里的二个gets主要是因为在回车键的输入,其中的第一个是来接收上次的回车
gets(p-hangbanhao);
printf("飞机号/n");
gets(p-feijihao);
printf("终点站/n");
gets(p-zhongdianzhai);
printf("飞行日期/n");
scanf("%d",p-feixingriqi);
printf("乘客总数/n");
scanf("%d",p-chenkerenshu);
printf("余票数/n");
scanf("%d",p-yupiao);
p-yiding=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));//为它申请空间
p-yudingqueue=Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));//为它申请空间
p-next=L-next;//
L-next=p;//这二句是链表中的头插法插入一个结点
return (ok);
}
void chaxungongnen()//******************************************************************查询功能
{
int n;
printf("/t 查 找 航 线 信 息 /n");
printf("/t+++++++++++++++++++++++++++++/n");
printf("/t==1. 通过目的地查询 ==/n");
printf("/t==2. 通过航班号查询 ==/n");
printf("/t+++++++++++++++++++++++++++++/n");
printf("/t请选择:");
scanf("%d",n);
printf("/n");//格式化
switch(n)
{
case 1:mddchaxun();
break;
case 2:hbhchaxun();
break;
default :break;
}
}
void mddchaxun()//通过目的地查询
{
char c[15];
int m;
Linklist p=L;
printf("/t请输入要查询的目的地:");
gets(c);
gets(c);//原因同上
do{
p=p-next;
if(p)
{
m=strcmpi((*p).zhongdianzhai,c);//如果==的话则m=0;
if(m==0)
{
printf("/t航班信息:/n");
printf("/t航班号:%s/n",p-hangbanhao);
printf("/t飞机号:%s/n",p-feijihao);
printf("/t飞行时间:周%d/n",p-feixingriqi);
printf("/t余票量:%d/n",p-yupiao);
}
}
else
{//如果不匹配的话就做
printf("/t对不起没有你要找的目的地:/n/n"); m=0;
}
}while(m!=0);
}
void hbhchaxun()//通过目的地查询
{
char c[15];
int m;
Linklist p=L;
printf("/t请输入要查询的航班号:");
gets(c); gets(c);printf("/n");
do{
p=p-next;
if(p)
{
m=strcmpi((*p).hangbanhao,c);//如果==的话则m=0;这里的(*p).与p-的作用是一样的
if(m==0)
{
printf("/t航班信息:/n");
printf("/t航班号:%s/n",p-hangbanhao);
printf("/t飞机号:%s/n",p-feijihao);
printf("/t飞行时间:周%d/n",p-feixingriqi);
printf("/t余票量:%d/n/n",p-yupiao);
}
}
else
{//如果不匹配的话就做
printf("/t对不起没有你要找的航班号:/n"); m=0;
}
}while(m!=0);
}
void dingpiaogongnen()//***************************************************************订票功能
{
Linklist p=L;//Linklist类型的L来指向链表头
Yidingkehu *h=H,*h1;//Yidingkehu 定义客户的结点,方便插入与删除
linkQueue q=Q;//linkQueue类型的来 ,方便插入与删除
char c[15];
int m=1,piao,ydpiao=0,yd=0,n;//
gets(c);
printf("请输入终点站名:"); gets(c); printf("/n");
p=L-next;
if(p) {
do{//查找一下,是否有这个航班
if(!p)
{
printf("对不起,没有你要找的航班:/n/n");
goto loop1;
}
m=strcmpi(p-zhongdianzhai,c);
if(m==0)
{
printf("航班信息:/n");
printf("航班号:%s/n",p-hangbanhao);
printf("飞机号:%s/n",p-feijihao);
printf("飞行时间:周%d/n",p-feixingriqi);
printf("余票量:%d/n",p-yupiao);}
else p=p-next;
}while(m!=0);
if(m==0)
{
do{
printf("/n请输入你要订的票数:"); scanf("%d",piao);
if(piao=p-yupiao)
{
h=p-yiding;
if(h)
{
h1=h;
h=h-next1;
h=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));
printf("请输入你的名字:");
gets(h-name);gets(h-name);
h-dingpiaoshu=piao;
h-next1=h1-next1;
h1-next1=h;
p-yupiao=p-yupiao-piao;
printf("订票成功:/n"); m=2;
}
}
else
{ printf("余票量:%d/n",p-yupiao);
printf("对不起,余票 %d 张不足,不能完成订票/n/n",p-yupiao);
printf(" 是否要重新订票?/n");
printf("需要请输入1 否则请按2 预订请输入3 : ");
scanf("%d",m);
printf("/n");
if(m==3) goto loop3;
}
}while(m==1);
}
}
else if(!p) {
loop3: struct Weidingkehu *q3;
printf("对不起,该航班的票已售完/n");
q.front=p-yudingqueue;
if(q.front==q.rear) printf("没有人预订票,是否要预订?/n");
else if(q.front!=q.rear) printf("已有人预订票,是否要预订?/n");
printf("预订请输入1 否则输入2 : ");
scanf("%d",n);
printf("/n");
if(n==1)
{
q3=(Qptr)malloc(sizeof(Weidingkehu));
printf("请输入你的姓名"); gets(q3-name); gets(q3-name);//q3不能指向name???
printf("请输入订票数"); scanf("%d",q3-yudingpiao);
q3-next2=NULL;
q.rear-next2=q3;
q.rear=q3;
printf(" 你已经预订了 !/n");
}
}
loop1:;
}
void tuipiaogongnen()//***************************************************************退票功能
{
Linklist p=L;
Yidingkehu *h=H,*h1,*h2;
linkQueue q=Q;
char c[15],name1[15];
int m=1,piao,n;//
gets(c);
printf("请输入航班号:"); gets(c);
p=L;//-next;
if(p)
{
do{ //使用do while来查找是否有此航班
if(!p)
{//如果是到了表尾且没有匹配,goto至再输入航班号
printf("/n对不起,没有你要找的航班:/n");
goto loop1;
}
m=strcmpi(p-hangbanhao,c);//如果匹配的话,m=0
if(m==0)
{
printf("/t航班信息:/n");
printf("航班号:%s/n",p-hangbanhao);
printf("飞机号:%s/n",p-feijihao);
printf("飞行时间:周%d/n",p-feixingriqi);
printf("余票量:%d/n",p-yupiao);}
else p=p-next;
}while(m!=0);
if(m==0)
{//如果找到了,就来给他退票
do{
h=p-yiding;
if(h)
{
printf("请输入你的姓名:");
gets(name1);//gets(name1);
printf("请输入你订的票数:");
scanf("%d",piao);
printf("/n");
h1=h;
h=h-next1;
if(strcmpi(h-name,name1)==0h-dingpiaoshu==piao)//如果名字和订的票数相等,则就给他取消订票
{
p-yupiao+=h-dingpiaoshu;
h2=h;
h1-next1=h-next1;
free(h2);
printf("你取消订票成功:/n/n");
struct Weidingkehu *q3;
q.front=p-yudingqueue;
if(q.front==q.rear) {printf("没有人预订票:/n"); goto loop1;}
if((p-yupiao)=(q.front-next2-yudingpiao))
{
h2=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));
strcpy(h2-name,q.front-next2-name);
h2-dingpiaoshu=q.front-next2-yudingpiao;
n=p-yupiao-q.front-next2-yudingpiao;
p-yupiao=n;
q3=Q.front-next2;//
q.front-next2=q3-next2;//这二语句来删除结点
if(q.rear==q3) q.rear=q.front;
free(q3);//释放空间
printf("链队中删除成功/n");
h2-next1=h-next1;
h-next1=h2;//为之插入进已订票客户链表中
printf("为预订的客户订票成功/n");
}
else printf("余票数不够,不能为预订客户订票!/n");
}
else
{ //如果没有找到,即系统中没有该人的信息,提示是否来重新查找
printf("对不起,该航班没有人订票或者是你没有订该航班的票/n");
printf("是否要重新查找并取消订票?/n");
printf("需要请输入1 否则请按2 ");
scanf("%d",m);
printf("/n");
}
}
}while(m==1);
}
}
loop1: ;
}
数据结构实习 C语言 航空订票系统
代码如下:(但是不是跟你的要求完全相同,你改改吧!)
#include stdio.h
#include string.h
#include stdlib.h
#define NAME_MAX 100//书的名字的最长字数
#define WRITER_MAX 100//作者名字的最长
#define PUB_MAX 100//出版单位最长名字
#define TIME 100//出版时间
typedef struct books
{
int loading;
char name[NAME_MAX];
char writer[WRITER_MAX];
int identify;
char pub[PUB_MAX];
char time[TIME];
int price;
struct books * next;
}book;
//头结点不存储信息
void Init(book * head)
{
head-next=NULL;
}
//打印一些欢迎词之类的。。。。。
void welcome()
{
printf("******欢迎使用@@@@图书馆,哈哈*********/n");
printf("/n/n");
printf("1:图书信息录入功能/n");
printf("2:图书信息浏览功能,显示该书的所有信息/n");
printf("3:图书信息查询功能:按书名查询与按作者名查询/n");
printf("4:图书信息的修改和删除,可对相应数据进行修改和删除/n");
}
//显示一本书的信息
void print_the_book(book * p1)
{
printf("loading number:%d /n",p1-loading);
printf("name: ");
puts(p1-name);
printf(" /n");
printf("writer: ");
puts(p1-writer);
printf(" /n");
printf("identify:%d ***/n",p1-identify);
printf(" /n");
printf("pub: ");
puts(p1-pub);
printf(" /n");
printf("time: ");
puts(p1-time);
printf(" /n");
printf("price:%d ***/n",p1-price);
}
int chongfu(book * head,book * p)
{
book * p1=head-next;
int a=0;
while(p1!=NULL)
{
if(strcmp(p1-name,p-name)==0)
{
if(strcmp(p1-writer,p-writer)==0)
{
a=1;
break;
}
}
else
p1=p1-next;
}
return a;
}
//录入一些信息。。。。
void luru(book * head)
{
book * p1=head;
book * p2;
//寻找NULL前的那个点
while(p1-next!=NULL)
{
p1=p1-next;
}
int a;
do
{
p2=(book *)malloc(sizeof(book));
printf("输入书本信息/n");
printf("登录号/n");
fflush(stdin);
scanf("%d",p2-loading);
printf("书名/n");
fflush(stdin);
gets(p2-name);
fflush(stdin);
printf("作者/n");
gets(p2-writer);
fflush(stdin);
printf("分类号/n");
scanf("%d",p2-identify);
fflush(stdin);
printf("出版社/n");
gets(p2-pub);
fflush(stdin);
printf("出版时间/n");
gets(p2-time);
fflush(stdin);
printf("价格/n");
scanf("%d",p2-price);
p2-next=NULL;
fflush(stdin);
//加入链表
if(chongfu(head,p2))
printf("录入信息重复/n");
else
{
p1-next=p2;
p1=p2;
}
printf("还想继续录入信息吗?/n(1:继续 0:停止)/n");
scanf("%d",a);
}while(a==1);
}
void liulan(book * head)
{
book * p1=head-next;
int i=1;
while(p1!=NULL)
{
printf("*********第%d本书***********/n",i++);
print_the_book(p1);
p1=p1-next;
}
}
//查询。。。。
void chaxun(book * head)
{
printf("按书名查询还是按作者名查询?/n(1:按书名查询 0:按作者名查询)/n");
book * p=head-next;
int a;
scanf("%d",a);
int num=0;
char cha[NAME_MAX];
switch(a)
{
case 1:
printf("输入书名:/n");
gets(cha);
while(p!=NULL)
{
if(strcmp(p-name,cha)==0)
{
num++;
print_the_book(p);
}
p=p-next;
}
break;
case 2:
printf("输入作者名:/n");
gets(cha);
while(p!=NULL)
{
if(strcmp(p-writer,cha)==0)
{
num++;
print_the_book(p);
}
p=p-next;
}
}
if(num==0)
printf("无符合书本/n");
}
//修改信息
void xiugai(book * head)
{
printf("输入需要修改书本的名称和作者:/n");
char name_book[NAME_MAX];
char writer_book[WRITER_MAX];
printf("书本名称:");
gets(name_book);
gets(writer_book);
book * p1=head-next;
int a=0;
while(p1!=NULL)
{
if(strcmp(p1-name,name_book)==0)
{
if(strcmp(p1-writer,writer_book)==0)
{
a=1;
break;
}
}
}
if(a==0)
printf("没有这本书。。。/n");
else
{
print_the_book(p1);
printf("输入新信息/n");
scanf("%d",p1-loading);
gets(p1-name);
gets(p1-writer);
scanf("%d",p1-identify);
gets(p1-pub);
gets(p1-time);
scanf("%d",p1-price);
}
}
void main()
{
book * head;
head=(book *)malloc(sizeof(book));
Init(head);
int contin=1;
while(contin)
{
welcome();
printf("想进行哪项操作?/n");
int a;
scanf("%d",a);
switch(a)
{
case 1:
luru(head);
break;
case 2:
liulan(head);
break;
case 3:
chaxun(head);
break;
case 4:
xiugai(head);
}
printf("继续使用图书馆还是退出?/n(1:continue 0:exit)/n");
scanf("%d",contin);
}
}
免责声明:本文内容源自网络,由用户上传,版权归原作者所有,本站不存储mp3等牵扯版权的文件,文字如有侵权请联系删除!
本文地址:http://www.xiumi360.com/lvyou/10282.html