航班管理系统(C语言——双向循环链表)
发布时间
阅读量:
阅读量
该系统使用双向循环链表实现,效果如下图所示。系统管理的信息有:航班号()、起点站()、终点站()、起飞时间()、到达时间()和票价()。系统实现的功能有:添加航班信息、根据航班号查找航班信息、根据航班号删除航班信息、根据航班号修改航班信息以及显示所有航班的信息。

航班信息结构体
typedef struct flight
{
char number[10]; //航班号
char staddress[10];//起点站
char arraddress[10];//终点站
char stime[10];//起飞时间
char atime[10];//到达时间
int value;//票价
}Data_type;
链表节点结构体
typedef struct link
{
Data_type info;
struct link *next,*prev;
}link_list,*plink_list;
1.flight.h
#ifndef __FLIGHT_H
#define __FLIGHT_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct flight
{
char number[10]; //航班号
char staddress[10];//起点站
char arraddress[10];//终点站
char stime[10];//起飞时间
char atime[10];//到达时间
int value;//票价
}Data_type;
typedef struct link
{
Data_type info;
struct link *next,*prev;
}link_list,*plink_list;
plink_list create_node(Data_type d);//创建节点
void insert(plink_list p,plink_list node);//添加逻辑
void del(plink_list node);//删除逻辑
void update(plink_list new,plink_list node);//修改逻辑
void find(plink_list p);
void link_add_head(plink_list p,Data_type d);//添加
void link_find(plink_list p,char *d);//查找
void link_delete(plink_list p,char *d);//删除
void link_update(plink_list p,char *d,Data_type new);//修改
void display(plink_list p);//遍历
#endif
2.flight.c
#include "flight.h"
plink_list create_node(Data_type d)//创建节点
{
plink_list p=(plink_list)malloc(sizeof(link_list));
if(p==NULL){
perror("error!\n");
return NULL;
}
p->info=d;
p->prev=p;
p->next=p;
return p;
}
//p后面添加node
void add(plink_list p,plink_list node)//添加逻辑
{
node->next=p->next;
node->prev=p;
p->next->prev=node;
p->next=node;
}
void del(plink_list node)//删除逻辑
{
node->prev->next=node->next;
node->next->prev=node->prev;
node->prev=node;
node->next=node;
free(node);
}
void update(plink_list new,plink_list node)//修改逻辑
{
new->next=node->next;
new->prev=node->prev;
new->prev->next=new;
new->next->prev=new;
node->prev=node;
node->next=node;
free(node);
}
void find(plink_list p)//查询
{
printf("航班号\t\t起点站\t\t终点站\t\t起飞时间\t到达时间\t票价\n");
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%d\n",p->info.number,p->info.staddress,p->info.arraddress,p->info.stime,p->info.atime,p->info.value);
}
void link_add_head(plink_list p,Data_type d)//添加
{
int a;
printf("请选择(1.头插 -1.尾插)");
scanf("%d",&a);
plink_list node=create_node(d);//创建节点
if(node==NULL){
return;
}
if(a>0){
add(p,node);
}else{
add(p->prev,node);
}
printf("信息录入成功!\n");
}
void link_find(plink_list p,char *d)//查找
{
plink_list head=p;//保存头节点的位置
while(p->next!=head){
p=p->next;
if(strcmp(p->info.number,d)==0){
find(p);
return;
}
}
printf("找不到该航班信息!\n");
}
void link_delete(plink_list p,char *d)
{
plink_list head=p;//保存头节点的位置
while(p->next!=head){
p=p->next;
if(strcmp(p->info.number,d)==0){
del(p);
printf("该航班信息已删除!\n");
return;
}
}
printf("找不到该航班信息!\n");
}
void link_update(plink_list p,char *d,Data_type new)//修改
{
plink_list head=p;//保存头节点的位置
while(p->next!=head){
p=p->next;
if(strcmp(p->info.number,d)==0){
plink_list new_node=create_node(new);
if(new_node==NULL){
return;
}
update(new_node,p);
return;
}
}
}
void display(plink_list p)//遍历
{
plink_list head=p;
printf("航班号\t\t起点站\t\t终点站\t\t起飞时间\t到达时间\t票价\n");
while(p->next!=head){
p=p->next;
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%d\n",p->info.number,p->info.staddress,p->info.arraddress,p->info.stime,p->info.atime,p->info.value);
}
}
3.main.c
#include "flight.h"
//使用双向循环链表完成增删改查
int main()
{
int n;
Data_type info;//功能1中用来存放数据
Data_type new;//功能4中用来存数据
char num[10];//用于存放航班号
//申请空间,创建头节点
plink_list head=(plink_list)malloc(sizeof(link_list));
head->next=head;
head->prev=head;
while(1)
{
printf("******欢迎来到航空管理系统******\n");
printf("********************************\n");
printf("*********请选择您的操作*********\n");
printf(" 1>录入航班信息 \n");
printf(" 2>查询航班信息 \n");
printf(" 3>删除航班信息 \n");
printf(" 4>修改航班信息 \n");
printf(" 5>显示所有航班信息 \n");
printf(" 0>退出 \n");
printf("================================\n");
printf("请选择您的功能:");
scanf("%d",&n);
switch(n)
{
case 0:
printf("已退出!\n");
return 0;
case 1:
printf("请输入航班号:");
scanf("%s",info.number);
printf("请输入起点站:");
scanf("%s",info.staddress);
printf("请输入终点站:");
scanf("%s",info.arraddress);
printf("请输入起飞时间:");
scanf("%s",info.stime);
printf("请输入到达时间:");
scanf("%s",info.atime);
printf("请输入票价:");
scanf("%d",&info.value);
link_add_head(head,info);
display(head);
break;
case 2:
printf("请输入想要查询的航班的航班号:");
scanf("%s",num);
link_find(head,num);
break;
case 3:
printf("请输入想要删除的航班的航班号:");
scanf("%s",num);
link_delete(head,num);
display(head);
break;
case 4:
printf("请输入想要修改的航班的航班号:");
scanf("%s",num);
if(strcmp(head->info.number,num)==0){
printf("请输入航班号:");
scanf("%s",new.number);
printf("请输入起点站:");
scanf("%s",new.staddress);
printf("请输入终点站:");
scanf("%s",new.arraddress);
printf("请输入起飞时间:");
scanf("%s",new.stime);
printf("请输入到达时间:");
scanf("%s",new.atime);
printf("请输入票价:");
scanf("%d",&new.value);
link_update(head,num,new);
display(head);
}else{
printf("没有找到该航班信息!\n");
}
break;
case 5:
display(head);
break;
}
}
return 0;
}
全部评论 (0)
还没有任何评论哟~
