航班管理系统
要求:
账号注册与登录
普通用户:查看航班信息,查看已购买的航班信息,退票
管理员:增、删、改、查 航班信息

航班信息:

起始点,目的地,航班时间,剩余票数,价格

已完成:

只能注册一个账号
普通用户:查看航班信息,查看已购买的航班信息,退票
管理员:增、删、改、查 航班信息

待完成:

多用户注册
管理员增加、修改航班信息时增加信息检验是否合法

使用数据结构:

单链表(增删改查)
结构体
指针

完成日期:
2021/09/12 18:00

历时10h
参考资料:
一、数据结构—单链表的基本操作(源代码)
二、C语言实现学生信息管理系统(单链表有错误,仅供参考!)

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h> #define ID 30
#define PW 30static char user_id[ID] = {0}; //账号
static  char user_pw[PW] = {0}; //密码char flight_name[10];    //航班名称
char flight_start[10];   //起始点
char flight_bourn[10];   //目的地
char flight_schedule[10];     //航班时间
char flight_s_votes[10];      //剩余票数
char flight_price[5];        //价格typedef struct Flight       //航班信息
{  char name[10];         //航班名称char start[10];         //起始点  char bourn[10];          //目的地char f_schedule[10];   //航班时间   char spare_votes[10];      //剩余票数 char price[5];               //价格
}flight;  typedef struct LNode        //节点
{  flight data;            //航班信息struct LNode *next;     //指针
}Node,*LinkList; void InitList(LinkList *pHead)  //初始化链表 //创建头结点
{*pHead=(LinkList)malloc(sizeof(Node));if(NULL!=pHead)(*pHead)->next=NULL;elseprintf("\n开辟内存失败\n");
}
//创建新结点
LinkList get_newNode(LinkList *L)
{LinkList newNode=(LinkList)malloc(sizeof(Node)); if(NULL!=newNode){printf("请输入要增加的航班名称:  \t");scanf("%s", flight_name);strcpy(newNode->data.name, flight_name);// newNode->data.name = flight_name;printf("请输入该航班的起始点:  \t");scanf("%s", flight_start);strcpy(newNode -> data.start, flight_start);printf("请输入该航班的目的地:  \t");scanf("%s", flight_bourn);strcpy(newNode -> data.bourn, flight_bourn);printf("请输入该航班的航班时间:\t");scanf("%s", flight_schedule);strcpy(newNode -> data.f_schedule, flight_schedule);printf("请输入该航班的价格:    \t");scanf("%s", flight_price);strcpy(newNode -> data.price, flight_price);printf("请输入该航班的剩余票数: \t");scanf("%s", flight_s_votes);strcpy(newNode -> data.spare_votes, flight_s_votes);// printf("%s,%s,%s,%s,%s,%s\n",// flight_name, flight_start, flight_bourn, // flight_schedule,flight_price,flight_s_votes);newNode->next=NULL;LinkList aa=(*L)->next;while( aa != NULL)  //判断添加的航班是否存在{if((strcmp(aa -> data.name, flight_name) == 0)&&strcmp(aa -> data.start, flight_start) == 0&&strcmp(aa -> data.bourn, flight_bourn) == 0&&strcmp(aa -> data.f_schedule, flight_schedule) == 0  ){printf("\n此航班已存在!请再次确认!\n");return 0;}aa  = aa -> next; }return newNode;}else{ printf("\n开辟内存失败\n");return 0;}
}
//打印
void print_List(LinkList *L)
{LinkList p;p=(*L)->next;if(p==NULL)printf("暂无航班!\n");else{int i =0;while(NULL!=p){printf("\n航班的名称:%s\n", p -> data.name);printf("航班的起始点:%s\n", p -> data.start);printf("航班的目的地:%s\n", p -> data.bourn);printf("航班的航班时间:%s\n", p -> data.f_schedule);printf("航班的剩余票数:%s\n", p -> data.spare_votes);printf("航班的价格:%s\n", p -> data.price);printf("\n");i++;p=p->next;}printf("共有%d个航班!\n",i); }
}
void addflight(LinkList *L)  //增航班信息
{int flag = 1;while(flag){//尾插char s[2];int ch;LinkList tail; tail=*L;while(NULL!=tail->next)     //让tail指向最后一个结点 tail = tail->next;tail->next = get_newNode(L);while(flag){printf("是否继续增加航班信息?是:1 否:0\n");scanf("%s",s);if (strspn(s, "01") == strlen(s)){ch = atoi(s);if(ch == 0){printf("已退出增加航班!\n");flag = 0;}else{continue;}}else{printf("请输入正确的序号!\n");}        }           }
}void deleteflight(LinkList *L)  //删航班信息
{printf("请输入要删除的航班信息:\t\n");printf("航班名称:\t");scanf("%s", flight_name);printf("航班起始点:\t");scanf("%s", flight_start);printf("航班目的地:\t");scanf("%s", flight_bourn);printf("航班时间:\t");scanf("%s",flight_schedule);LinkList p,q;for(p = *L; NULL != p -> next; p = p -> next){if((strcmp(p -> next -> data.name, flight_name) == 0)&&strcmp(p -> next -> data.start, flight_start) == 0&&strcmp(p -> next -> data.bourn, flight_bourn) == 0&&strcmp(p -> next -> data.f_schedule, flight_schedule) == 0  ){q = p -> next;     //因为最后要释放被删除的结点,所以先记录下来 p -> next = q -> next;free(q);q = NULL;printf("删除成功\n");return;}} printf("删除失败!,请检查此航班是否存在!\n"); }void findflight(LinkList *L)  //查航班信息
{char choose[5];int flag = 1, ch;while(flag){printf("\n\t** 请输入要查询的方式 **:\n");printf("\t**1.按航班的名称查询  **\n");printf("\t**2.按航班的起始点    **\n");printf("\t**3.按航班的目的地  **\n");printf("\t**4.按航班的航班时间  **\n");printf("\t**5.查询所有航班  **\n");     printf("\t**6.退出查询  **\n");scanf("%s",choose);if (strspn(choose, "0123456789") == strlen(choose)){ch = atoi(choose);switch(ch){case 1:printf("请输入要查询的航班名称:\t");scanf("%s", flight_name);int ii=0;LinkList q=(*L)->next;while(q != NULL){if(strcmp(q -> data.name, flight_name) == 0){printf("\n该航班的名称:%s\n", q -> data.name);printf("该航班的起始点:%s\n", q -> data.start);printf("该航班的目的地:%s\n", q -> data.bourn);printf("该航班的航班时间:%s\n", q -> data.f_schedule);printf("该航班的剩余票数:%s\n", q -> data.spare_votes);printf("该航班的价格:%s\n", q -> data.price);ii++;}q = q -> next;}if(ii == 0){printf("该航班不存在!\n");}else{printf("要查询的航班共有%d个\n",ii);}break;case 2:printf("请输入要查询的航班起始点:\t");scanf("%s", flight_start);int ai = 0;LinkList a=(*L)->next; while(a != NULL){if(strcmp(a -> data.start, flight_start) == 0){printf("\n该航班的名称:%s\n", a -> data.name);                         printf("该航班的起始点:%s\n", a -> data.start);printf("该航班的目的地:%s\n", a -> data.bourn);printf("该航班的航班时间:%s\n", a -> data.f_schedule);printf("该航班的剩余票数:%s\n", a -> data.spare_votes);printf("该航班的价格:%s\n", a -> data.price);ai++;}a = a -> next;}if(ai == 0){printf("该航班不存在!\n");}else{printf("要查询的航班共有%d个\n",ai);}break;case 3:printf("请输入要查询的目的地:\t");scanf("%s", flight_bourn);int bi=0;LinkList b=(*L)->next;while(b != NULL){if(strcmp(b -> data.bourn,flight_bourn) == 0){printf("\n该航班的名称:%s\n", b -> data.name);printf("该航班的起始点:%s\n", b -> data.start);printf("该航班的目的地:%s\n", b -> data.bourn);printf("该航班的航班时间:%s\n", b -> data.f_schedule);printf("该航班的剩余票数:%s\n", b -> data.spare_votes);printf("该航班的价格:%s\n", b -> data.price);bi++;}b = b -> next;}if(bi == 0){printf("该航班不存在!\n");}else{printf("要查询的航班共有%d个\n",bi);}break;case 4:printf("请输入要查询的航班时间:\t");scanf("%s", flight_schedule);int ci=0;LinkList c=(*L)->next;while(c != NULL){if(strcmp(c -> data.f_schedule,flight_schedule) == 0){printf("\n该航班的名称:%s\n", c -> data.name);printf("该航班的起始点:%s\n", c -> data.start);printf("该航班的目的地:%s\n", c -> data.bourn);printf("该航班的航班时间:%s\n", c -> data.f_schedule);printf("该航班的剩余票数:%s\n", c -> data.spare_votes);printf("该航班的价格:%s\n", c -> data.price);ci++;}c = c -> next;}if(ci == 0){printf("该航班不存在!\n");}else{printf("要查询的航班共有%d个\n",ci);}break;case 5:print_List(L);break;case 6:flag = 0;break;default:printf("请输入正确的序号!\n");break;}}else{printf("请输入正确的序号!\n");}        }printf("已退出查询!\n");
}void changeflight(LinkList *L)  //改航班信息
{int flag = 1;while(flag){//暂存修改后的数据char flight_name1[10];    //航班名称char flight_start1[10];   //起始点char flight_bourn1[10];   //目的地char flight_schedule1[10];     //航班时间 char flight_s_votes1[10];      //剩余票数char flight_price1[5];        //价格printf("请输入要修改的航班信息:\t\n");printf("航班名称:\t");scanf("%s", flight_name);printf("航班起始点:\t");scanf("%s", flight_start);printf("航班目的地:\t");scanf("%s", flight_bourn);printf("航班时间:\t");scanf("%s",flight_schedule);LinkList w = (*L)->next;int pp = 0;while(NULL != w){if((strcmp(w -> data.name, flight_name) == 0)&&strcmp(w -> data.start, flight_start) == 0&&strcmp(w -> data.bourn, flight_bourn) == 0&&strcmp(w -> data.f_schedule, flight_schedule) == 0  ){printf("\n修改后的航班名称:\n");scanf("%s", flight_name1);strcpy(w->data.name, flight_name1);printf("修改后的起始点:\n");scanf("%s", flight_start1);strcpy(w->data.start, flight_start1);printf("修改后的目的地:\n");scanf("%s", flight_bourn1);strcpy(w->data.bourn, flight_bourn1);printf("修改后的航班时间:\n");scanf("%s", flight_schedule1);strcpy(w->data.f_schedule, flight_schedule1);printf("修改后的剩余票数:\n");scanf("%s", flight_s_votes1);strcpy(w->data.spare_votes, flight_s_votes1);printf("修改后的价格:\n");scanf("%s", flight_price1);strcpy(w->data.price, flight_price1);pp = 1;}else{w = w -> next;}         }if( pp == 0){printf("修改失败!无此航班!\n");}else{printf("修改成功!");}while(flag){char n[5];int nn;printf("是否需要继续修改其他航班信息?继续:1 退出 :0\n");scanf("%s",n);if (strspn(n, "01") == strlen(n)){nn = atoi(n);if(nn == 0){flag = 0;}else{break;}              }else{printf("请正确输入!\n");}     }       }
}void admin(LinkList *L)      //管理员 增 删 查 改 航班信息
{char choose[10];int flag=1,ch;while(flag){printf("\n");printf("请输入你要进行的操作:\t\n\n");printf("\t***1.增加航班信息  ***\t\n");printf("\t***2.删除航班信息  ***\t\n");printf("\t***3.查找航班信息  ***\t\n");printf("\t***4.修改航班信息  ***\t\n");printf("\t***5.退出管理员操作***\t\n");scanf("%s",choose);if (strspn(choose, "0123456789") == strlen(choose)){ch = atoi(choose);switch(ch){case 1:addflight(L);break;case 2:deleteflight(L);break;case 3:findflight(L);break;case 4:changeflight(L);break;case 5:flag = 0;break;default:printf("请输入正确的序号!\n");break;}}else{printf("请输入正确的序号!\n");}}printf("已退出管理员操作!\n");
}void findownerflight(LinkList *z)  //查看自己的航班
{int flag = 1;while(flag){LinkList q = (*z) -> next;int i=1, aa = 0;while(q != NULL){printf("\n购买的第%d个航班信息:\n",i);printf("已购买航班的名称:%s\n", q -> data.name);printf("已购买航班的起始点:%s\n", q -> data.start);printf("已购买航班的目的地:%s\n", q -> data.bourn);printf("已购买航班的航班时间:%s\n", q -> data.f_schedule);printf("已购买航班的剩余票数:%s\n", q -> data.spare_votes);printf("已购买航班的价格:%s\n", q -> data.price);i++;aa = 1;q = q -> next;}if( aa == 0){printf("你未购买任何航班\n");}while(flag){char n[5];int nn;printf("是否退出?继续查看:1 退出 :0\n");scanf("%s",n);if (strspn(n, "01") == strlen(n)){nn = atoi(n);if(nn == 0){printf("退出成功!\n");flag = 0;}else{break;}             }else{printf("请正确输入!\n");}     }       }
}
LinkList buy(LinkList *L, LinkList *z)
{printf("\n请输入要购买的航班信息:\t\n");printf("航班名称:\t");scanf("%s", flight_name);printf("航班起始点:\t");scanf("%s", flight_start);printf("航班目的地:\t");scanf("%s", flight_bourn);printf("航班时间:\t");scanf("%s",flight_schedule);LinkList w = (*L)->next;LinkList u=(LinkList)malloc(sizeof(Node));int pp = 0;while(NULL != w){if((strcmp(w -> data.name, flight_name) == 0)&&strcmp(w -> data.start, flight_start) == 0&&strcmp(w -> data.bourn, flight_bourn) == 0&&(strcmp(w -> data.f_schedule, flight_schedule) == 0)&&(NULL != u)){strcpy(u->data.name, w->data.name);strcpy(u->data.start, w->data.name);strcpy(u->data.bourn, w->data.name);strcpy(u->data.f_schedule, w->data.name);strcpy(u->data.spare_votes, w->data.name);strcpy(u->data.price, w->data.name);printf("购买成功!\n");pp = 1;return u;}else{w = w -> next;}           }if( pp == 0){printf("够买失败!无此航班!\n");return 0;}
}
void buyticket(LinkList *L, LinkList *z)
{int flag = 1;while(flag){printf("\t**1.搜索航班信息 **\n");printf("\t**2.购买机票     **\n ");printf("\t**3.退出购票     **\n");char n[5];int nn;scanf("%s",n);if (strspn(n, "123") == strlen(n)){nn = atoi(n);LinkList tail1; switch(nn){case 1:findflight(L);break;case 2:                   tail1=*z;while(NULL!=tail1->next)      //让tail指向最后一个结点 tail1 = tail1->next;tail1->next = buy(L, z);                    break;case 3:printf("退出成功!");flag = 0;break;}}else{printf("请正确输入!\n");}}
}void Refund(LinkList *L)  //退票
{printf("请输入要退票的航班信息:\t\n");printf("航班名称:\t");scanf("%s", flight_name);printf("航班起始点:\t");scanf("%s", flight_start);printf("航班目的地:\t");scanf("%s", flight_bourn);printf("航班时间:\t");scanf("%s",flight_schedule);LinkList p,q;for(p = *L; NULL != p -> next; p = p -> next){if((strcmp(p -> next -> data.name, flight_name) == 0)&&strcmp(p -> next -> data.start, flight_start) == 0&&strcmp(p -> next -> data.bourn, flight_bourn) == 0&&strcmp(p -> next -> data.f_schedule, flight_schedule) == 0  ){q = p -> next;     //因为最后要释放被删除的结点,所以先记录下来 p -> next = q -> next;free(q);q = NULL;printf("退票成功\n");return;}} printf("退票失败!,请检查是否已购买此机票!\n");
}//     普通用户
//只查看航班信息,票的余数
//购买票的数量  可以查看自己的所购买的班次  退票
void common_user(LinkList *L, LinkList *z)   //普通用户
{int flag = 1, ch;while(flag){printf("\n\t***1.查找航班信息      ***\t\n");printf("\t***2.查看已购买航班    ***\t\n");printf("\t***3.购买航班    ***\t\n");       printf("\t***4.退票             ***\t\n");printf("\t***5.退出普通用户操作  ***\t\n");printf("\n请输入你要进行的操作:\t\n");char choose[10];scanf("%s",choose);if (strspn(choose, "0123456789") == strlen(choose)){ch = atoi(choose);switch(ch){case 1:findflight(L);break;case 2:findownerflight(z);break;case 3:buyticket(L, z);break;case 4:Refund(z);break;case 5:flag = 0;break;default:printf("请输入正确的序号!\n");break;}}else{printf("请输入正确的序号!\n");}}printf("退出普通用户操作成功!\n");
}void login(char *id, char *pw)  //注册
{int flag = 1,n;char input_num[10] = {0};while(flag){printf("\t**1.开始注册    2.返回主界面**\t\n");     scanf("%s",input_num);if (strspn(input_num, "0123456789") == strlen(input_num)){n = atoi(input_num);switch(n){case 1:printf("请输入账号: \n");scanf("%s", id);printf("请输入密码: \n");scanf("%s", pw);printf("\n注册成功!请返回登陆!\n");break;case 2:printf("退出注册成功!\n");flag = 0;break;case 0:flag = 0;break;default :printf("请输入正确的序号!\n");break;                 }}else{printf("请输入正确的序号!\n");}     }
}void sign(char *u_id, char *u_pw, LinkList *L, LinkList *z)
{char login_id[ID] = {0}; char login_pw[PW] = {0}; // printf("%s\t%s\n", u_id, u_pw);printf("请输入账号: \t");scanf("%s", login_id);printf("请输入密码: \t");scanf("%s", login_pw);// printf("\n%s\n%s\n", login_id, login_pw);if( (strcmp(login_id, "admin") == 0) && (strcmp(login_pw, "8888888") == 0)){printf("\n管理员账号登录成功!\n");admin(L);  //管理员}else if( (strcmp(login_id, u_id) == 0) && (strcmp(login_id, u_pw) == 0)){printf("\n普通用户登录成功!\n");common_user(L, z);;  //普通用户}else{printf("此账号未注册!请先注册!\n");}
}int main()
{LinkList L ,USER;  InitList(&L); InitList(&USER); printf("\n");int flag = 1, nu;while(flag){printf("\n");printf("\t***********************\t\n");printf("\t******航班购票系统******\t\n");printf("\t****1.注册    2.登录****\t\n");printf("\t*********0.退出*********\t\n");printf("\t***********************\t\n");char num[10];scanf("%s",num);if (strspn(num, "0123456789") == strlen(num)){nu = atoi(num);switch(nu){case 0:printf("已退出系统!\n");flag = 0;break;case 1:login(user_id, user_pw);  //注册break;case 2:sign(user_id, user_pw, &L, &USER);  //登录break;default :printf("请输入正确的序号!\n");break;}}else{printf("请输入正确的序号!\n");}    }
}

航班管理系统(C语言)相关推荐

  1. c语言航班管理系统报告,c航班管理系统课程设计报告.doc

    c航班管理系统课程设计报告 北华航天工业学院课程设计报告 PAGE 课程设计报告 报告(论文)题目: 1航班信息查询系统 2迷宫问题 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技 ...

  2. C语言实现简单的航班管理系统

    /*C语言实现简单的航班管理系统(单个文件)*/ #include <stdio.h> #include <string.h> #include<stdlib.h> ...

  3. 航班管理系统-机票预订

    摘要 该系统为航班管理系统,本系统是基于Python语言,通过对航班管理工作的日常分析,确定了具体的研究目标以及业务功能.采用了结构化的设计方法设计了一个简单的框架,通过编程实现了对航班信息的添加.修 ...

  4. c语言实验报告管理系统,C语言实验报告-学生信息资管理系统.doc

    C语言实验报告-学生信息资管理系统 C语言实验报告 院系: 数学与计算科学学院 班级: 信息与计算科学2班 姓名: 学号: 2011年12月21日 一.问题描述 编写一个信息管理系统,包括姓名.性别. ...

  5. c语言程序设计家庭收支类,家庭支出管理系统—c语言程序设计

    家庭支出管理系统-c语言程序设计 (38页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 程序设计报告( 2015 / 2016 学年 ...

  6. c语言编程员工信息排序,员工工资管理系统(c语言编程)

    <员工工资管理系统(c语言编程)>由会员分享,可在线阅读,更多相关<员工工资管理系统(c语言编程)(6页珍藏版)>请在人人文库网上搜索. 1.include #include# ...

  7. 用c语言编写图书成绩管理系统,学生成绩管理系统(c语言编写).doc

    学生成绩管理系统(c语言编写) C程序 学生管理系统 /* Note:Your choice is C IDE */ #include "stdio.h" #include&quo ...

  8. 管理系统模板c语言,管理系统c语言

    管理系统c语言Tag内容描述: 1.精品文档 作品名称 开发者 一 系统背景 本软件能减轻对货物数目管理及价格盈亏等信息处理的工作量以便能快捷及时准确的调整货物的仓储量达到最合理化 可以使店主不失效率 ...

  9. 教师查询系统C语言,教师管理系统c语言版

    <教师管理系统c语言版>由会员分享,可在线阅读,更多相关<教师管理系统c语言版(7页珍藏版)>请在人人文库网上搜索. 1.include/头文件#include/字符处理头文件 ...

最新文章

  1. java tessbaseapi,T+开发者社区
  2. Mysql多实例配置文档
  3. 私人仓库免费后本地git和远程github首次连接
  4. 一、Go语言环境搭建
  5. WdOS源码编译安装MySQL 5.5.25a
  6. SAP Spartacus里product code出现在url的几种场景
  7. esp32找不到com端口_玩转GPIO之ESP32点灯大法(MicroPython版)
  8. python 数组 元组 列表_python_Day_02[数组、列表、元组之篇]
  9. DB2数据库关于delete in id和batch delete的性能对比
  10. 算力单位TOPS,GPU处理能力(TFLOPS/TOPS),CPU能力MIPS ,片外内存与片内内存
  11. Android性能优化之图片优化
  12. 吴伯凡-认知方法论-我的休息
  13. Lifeline功能介绍03——课堂信息的查询
  14. 创意动手做:再也不用数据线,华为D1改装无线充电!
  15. 渲染02-内置Uniform
  16. 使用artisan命令创建控制器
  17. C语言高考志愿填报管理系统,高考志愿智能填报系统
  18. 将内容复制到剪切板兼容主流浏览器的解决方案
  19. 2008年奥巴马胜选演讲
  20. 电脑改完无线网密码怎么连接服务器,宽带密码改了无线路由器怎么设置上网

热门文章

  1. 三招让硬盘资料隐身 保护你的隐私
  2. [ISUX转译]iOS7人机界面指南
  3. 智能照明系统优势与特点
  4. Koch Curve
  5. Buuctf -web wp汇总(三)
  6. gis可达性分析步骤_消息速递 | 学院2017级城市管理本科班GIS课程作业成果汇报顺利进行...
  7. 苹果系统如何访问局域网中的计算机,mac前往mac共享-怎么让苹果机和普通pc在局域网里互相找到?我有一台苹果机和一台p 爱问知识人...
  8. 手把手教你如何在Facebook上找客户——实战分享
  9. Android 11.0 根据包名授予WRITE_SETTINGS权限
  10. Unity初探(光源类型与光照模式)