#include "flight.h"
//1>>>>>>>>>逻辑操作
//1.1插入逻辑,将node节点插在p节点的后面
void insert(plink_t p,plink_t node)
{
node->next=p->next;
node->prev=p;
p->next->prev=node;
p->next=node;
}
//1.2>删除逻辑:删除node节点
void delete(plink_t node)
{
node->prev->next=node->next;
node->next->prev=node->prev;
node->prev=node;
node->next=node;
free(node);
}
//1.3>更改逻辑
void update(plink_t new,plink_t node)
{
new->next=node->next;
new->prev=node->prev;
new->prev->next=new;
//if(new->next!=NULL)
new->next->prev=new;
node->next=node;
node->prev=node;
free(node);
}
//2>>>>>>>>函数操作
//2.1>创建节点,接收数据,并以这个传进来的数据作为数据域创建节点
/*
typedef struct flight{
char number[10]; //航班号
char staddress[10]; //离开地址
char arraddress[10]; //到达地址
char take_off_time[16]; //起飞时间
char arrival_time[16]; //到达时间
float price; //价格
int flight_sister; //空姐号
}Data_type;
typedef struct link{
Data_type info; //数据域
struct link *prev; //指针域: 保存上一个节点地址
struct link *next; //指针域:保存下一个节点地址
}link_t,*plink_t;
*/
plink_t create_node(Data_type d){
plink_t p=(plink_t)malloc(sizeof(link_t));
if(p==NULL){
printf("创建成功\n");
perror("error:");
return NULL;
}
p->info=d;
p->prev=p;
p->next=p;
return p;
}
//2.1>尾插函数
void link_insert_tail(plink_t p,Data_type d)
{
//通过传进来的数据域,创建节点
plink_t node=create_node(d);
if(node==NULL){
printf("创建失败\n");
return;
}
//将节点node插入到尾巴上
insert(p->prev,node);
printf("航班信息添加成功\n");
}
//2.2>遍历函数
void display(plink_t p)
{
plink_t head=p;//保存头结点的位置,作为循环判断的终止条件
printf("航班号\t出发地\t目的地\t起飞时间\t到达时间\t票价\t空姐编号\n");
while(p->next!=head){
p=p->next;//随着循环,一直往后走
printf("%s\t%s\t%s\t%s\t%s\t%.2f\t%d\n",p->info.number,
p->info.staddress,
p->info.arraddress,
p->info.take_off_time,
p->info.arrival_time,
p->info.price,
p->info.flight_sister);
}
}
//2.3>删除函数
void link_delete(plink_t p,char *d)
{
plink_t head=p;//保存头结点的位置,作为循环判断的终止条件
//1>判断数据域d的节点是否在链表中
while(p->next!=head){
p=p->next;
if(strcmp(p->info.number,d)==0){//条件成立则说明找到要删除的节点了
delete(p);
printf("航班信息删除成功\n");
return;
}
}
printf("没有找到该航班号的信息\n");
}
//2.4>更改节点中的信息
void link_update_number(plink_t p,char *d,float jiage)
{
plink_t head=p;//保存头结点的位置,作为循环判断的终止条件
//1>在整个链表中找到old
while(p->next!=head){
p=p->next;
if(strcmp(p->info.number,d)==0){//满足条件即为找到该航班号的节点
p->info.price = jiage;
printf("航班价格修改成功\n");
return;
}
}
printf("没有找到该航班的信息\n");
}
//2.5>替换整个节点
void link_update(plink_t p,Data_type new,char *d)
{
plink_t head=p;//保存头结点的位置,作为循环判断的终止条件
//1>在整个链表中找到old
while(p->next!=head){
p=p->next;
if(strcmp(p->info.number,d)==0){//满足条件即为找到该节点
plink_t new_node=create_node(new);
if(new_node==NULL){
return;
}
update(new_node,p);
printf("航班所有信息更改成功\n");
return;
}
}
printf("没有找到该航班\n");
}
//2.6>查询指定航班(节点)的信息
void single_query(plink_t p,char *d)
{
plink_t head=p;//保存头结点的位置,作为循环判断的终止条件
//1>在整个链表中找到该航班号的航班
while(p->next!=head){
p=p->next;
if(strcmp(p->info.number,d)==0){//满足条件即为找到该节点
printf("航班号\t出发地\t目的地\t起飞时间\t到达时间\t票价\t空姐编号\n");
printf("%s\t%s\t%s\t%s\t%s\t%.2f\t%d\n",p->info.number,
p->info.staddress,
p->info.arraddress,
p->info.take_off_time,
p->info.arrival_time,
p->info.price,
p->info.flight_sister);
return;
}
}
printf("没有找到该航班\n");
}
//2.7>系统界面显示
void interface_display(){
printf("****************************************\n");
printf("*** 航空信息查询系统 ***\n");
printf("****************************************\n");
printf("*** 1.录入航班信息 ***\n");
printf("*** 2.删除航班信息 ***\n");
printf("*** 3.修改航班票价 ***\n");
printf("*** 4.查询指定航班的信息 ***\n");
printf("*** 5.查询所有航班信息 ***\n");
printf("*** 6.修改航班所有信息 ***\n");
printf("*** 0.退出系统!!! ***\n");
printf("****************************************\n");
}
C语言之航空信息查询系统-使用双向循环链表实现系统的增删改查操作
需积分: 0 101 浏览量
2023-09-20
15:44:58
上传
评论
收藏 6KB 7Z 举报
鱼驭
- 粉丝: 5
- 资源: 2
最新资源
- 猫咪和汤58.apk
- 浏览器.apk
- 基于matlab实现是一个matlab中的power system 中搭建的一个模型
- 基于JSP毕业设计-教学管理系统(源代码+论文).zip
- 基于JSP毕业设计-家政管理系统-毕业设计.zip
- 基于Python实现淘宝商品评论采集(含逆向)源代码
- 基于matlab实现多目标进化算法NSGAⅡ&Matlab讲解.rar
- 基于matlab实现多车辆车辆路径问题,用遗传算法编程,保证可用.rar
- 基于matlab实现多层极限学习机实现手写体识别,准确率超过99%.rar
- 基于matlab实现电力系统最优潮流程序,可以应用于电力市场下的最优潮流计算 适合电力系统专业的同仁使用.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈