Advertisement

航班管理系统(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)

还没有任何评论哟~