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

本文实例为大家分享了C语言实现航班管理系统的具体代码,供大家参考,具体内容如下

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

#define PERSON_MAXNUM 100
#define PERSONNOTICKET_MAX 10
#define MAX_SIZE 10
int _size = 0;
int _person_size = 0;
int _personnoticket_size = 0;

//定义航班信息结构体
typedef struct plane
{
  char ID[10];
  char Start_Place[10];
  char End_Place[10];
  float price;
  int Buy_num;
  int Max_num;
  char time[20];
}Plane;

//定义乘客信息结构体
typedef struct Person
{
  int AirPlane_Num;
  char person_name[20];

}Person;

void home(Plane* p,Person* person, Person* person_noticket);//初始页面
void InitAirPlane(Plane** p);//初始化航班信息内存
void InputAirPlane(Plane* p);//输入航班信息
void CheckAirPlane(Plane* p);//查看航班信息
void DelAirPlane(Plane* p);//删除航班信息
void CheckAirPlaneOrder(Plane* p,Person* person);//查看航班订单
void PrintPerson(Plane* p, Person* person, int i);//打印航班乘客

void InitPerson(Person** person);//初始化乘客信息内存
void BookAirPlane(Plane* p, Person* person,Person* person_noticket);//预定航班
int CheckPerson(Plane* p, Person* person);//查看乘客订单信息
void ChangeAirPlane(Plane* p, Person* person);//改签
void ReturnTicket(Plane* p, Person* person);//退票

void PrintPerson(Plane* p, Person* person, int i);
void CheckPersonNoTicket(Plane* p, Person* person_noticket);//查看候补名单
///////////////////////////////////////

void home(Plane* p, Person* person, Person* person_noticket)
{
  int a, i, j;
  printf("\n*****************************欢迎进入飞机票务系统*****************************\n");
  printf("\n*************您好,现在要确认您的身份!票务人员请按 1 ,旅客请按 0 ***********\n");
  printf("请选择:");
  scanf("%d", &a);
  //航班管理人员操作
  if (a == 1)
    do{
      printf("\n****************** 1.输入航班信息 *******************\n");
      printf("\n****************** 2.删除航班信息 *******************\n");
      printf("\n****************** 3.浏览航班信息 *******************\n");
      printf("\n****************** 4.浏览目前已订票信息 *************\n");
      printf("\n****************** 5.查看候补名单 *******************\n");
      printf("\n****************** 0.退出    ********************\n");
      printf("请选择:");
      scanf("%d", &i);
      switch (i)
      {
        case 0: break;
        case 1:InputAirPlane(p);break;
        case 2:DelAirPlane(p);break;
        case 3:CheckAirPlane(p);break;
        case 4:CheckAirPlaneOrder(p, person); break;
        case 5:CheckPersonNoTicket(p, person_noticket); break;
        default:
          printf("输入错误!\n");
          break;
      }
    } while (i != 0);
  //乘客操作
  if (a == 0)
    do{

      printf("\n*********************** 1.订票 **********************\n");
      printf("\n*********************** 2.改签 **********************\n");
      printf("\n*********************** 3.退票 **********************\n");
      printf("\n*********************** 4.浏览航班信息 **************\n");
      printf("\n*********************** 5.查询个人订票信息 **********\n");
      printf("\n*********************** 0.退出 **********************\n");
      printf("请选择:");
      scanf("%d", &j);
      switch (j)
      {
        case 0:break;
        case 1:BookAirPlane(p, person,person_noticket);break;
        case 2:ChangeAirPlane(p, person);break;
        case 3:ReturnTicket(p, person);break;
        case 4:CheckAirPlane(p);break;
        case 5:CheckPerson(p, person); break;
      }
    } while (j != 0);
}

//初始化
void InitAirPlane(Plane** p)
{
  assert(p);

  //申请空间
  *p = (Plane*)malloc(sizeof(Plane)*MAX_SIZE);
  if (NULL == *p)
  {
    printf("开辟空间失败!\n");
    return;
  }
  (*p)->Buy_num = 0;
}
//输入航班信息
void InputAirPlane(Plane* p)
{
  if (_size <= MAX_SIZE)
  {
    printf("航班编号:%d\n", _size);
    printf("输入航班ID:");
    scanf("%s", (p+_size)->ID);
    printf("输入始发地:");
    scanf("%s", (p + _size)->Start_Place);
    printf("输入目的地:");
    scanf("%s", (p + _size)->End_Place);
    printf("输入航班起飞时间:");
    scanf("%s", (p + _size)->time);
    printf("输入价格:");
    scanf("%f", &(p + _size)->price);
    printf("输入航班可乘坐最大人数:");
    scanf("%d", &(p + _size)->Max_num);
    do
    {
      printf("目前卖出机票数量:");
      scanf("%d", &(p + _size)->Buy_num);
      if ((p + _size)->Buy_num > (p + _size)->Max_num)
      {
        printf("输入已卖出机票数量错误!\n");
        printf("请重新输入!\n\n");
      }
    } while ((p + _size)->Buy_num > (p + _size)->Max_num);
    _size++;
    printf("添加航班信息完成!\n\n");
  }
  else
  {
    printf("内存已满!\n");
    return;
  }
}

//浏览航班信息
void CheckAirPlane(Plane* p)
{
  int i = 0;
  printf("目前在售的航班信息:\n\n");
  for (i = 0; i < _size; i++)
  {
    printf("航班编号:%d\n", i);
    printf("ID:%s\n", (p+i)->ID);
    printf("始发地:%s\n", (p + i)->Start_Place);
    printf("目的地:%s\n", (p + i)->End_Place);
    printf("起飞时间:%s\n", (p + i)->time);
    printf("机票价格:%2f\n", (p + i)->price);
    printf("剩余机票:%d\n", ((p + i)->Max_num - (p + i)->Buy_num) );
    printf("\n");
  }
}

//删除航班信息
void DelAirPlane(Plane* p)
{
  int j = 0;
  int i = -1;
  assert(p);
  printf("请输入要删除的航班编号:");
  scanf("%d", &i);
  for (j = i; j < _size; j++)
  {
    strcpy((p + j)->ID, (p + j + 1)->ID);
    strcpy((p + j)->Start_Place, (p + j + 1)->Start_Place);
    strcpy((p + j)->End_Place, (p + j)->End_Place);
    strcpy((p + j)->time, (p + j + 1)->time);
    (p + j)->price = (p + j + 1)->price;
    (p + j)->Max_num = (p + j + 1)->Max_num;
    (p + j)->Buy_num = (p + j + 1)->Buy_num;
  }
  _size--;
}

//初始化订票信息
void InitPerson(Person** person)
{
  assert(person);
  *person = (Person*)malloc(sizeof(Person)*PERSON_MAXNUM);
  if (NULL == *person)
  {
    printf("开辟空间失败!\n");
    return;
  }
}

//订票
void BookAirPlane(Plane* p, Person* person, Person* person_noticket)
{
  int i = -1;
  CheckAirPlane(p);
  printf("请选择你要预定的航班编号:");
  scanf("%d", &i);
  if ((p + i)->Max_num == (p + i)->Buy_num)
  {
    printf("对不起,该航班机票已售完!\n");
    printf("请输入您的姓名(我们将把您添加进候补名单):");
    scanf("%s", (person_noticket+_personnoticket_size)->person_name);
    (person_noticket + _personnoticket_size)->AirPlane_Num = i;
    _personnoticket_size++;
    printf("添加候补名单成功!\n\n");
    return;
  }
  else
  {
    if (_person_size > PERSON_MAXNUM)
    {
      printf("存储容量不足!\n");
      return;
    }
    printf("请输入姓名:");
    scanf("%s", (person + _person_size)->person_name);
    (person + _person_size)->AirPlane_Num = i;
    _person_size++;
    (p + i)->Buy_num++;
    printf("预定成功!\n");
  }

}

//查看个人订票信息
int CheckPerson(Plane* p, Person* person)
{
  int flag = 0;
  int i = 0;
  char _name[20] = { 0 };
  printf("请输入您的姓名:");
  scanf("%s", &_name);
  printf("您的个人订票信息:\n\n");
  for (i = 0; i < _person_size; i++)
  {
    if (0 == strcmp(_name, (person + i)->person_name))
    {
      flag = 1;
      printf("订单编号:%d\n", i);
      printf("姓名:%s\n", (person + i)->person_name);
      printf("航班编号:%d\n", (person + i)->AirPlane_Num);
      printf("航班ID:%s\n", (p + (person + i)->AirPlane_Num)->ID);
      printf("始发地:%s\n", (p + (person + i)->AirPlane_Num)->Start_Place);
      printf("目的地:%s\n", (p + (person + i)->AirPlane_Num)->End_Place);
      printf("起飞时间:%s\n", (p + (person + i)->AirPlane_Num)->time);
      printf("机票价格:%f\n", (p + (person + i)->AirPlane_Num)->price);
      printf("\n");
    }
  }
  if (0 == flag)
  {
    printf("未找到该乘客订票信息!\n");
    return 0;
  }
  return 1;
}

//改签
void ChangeAirPlane(Plane* p, Person* person)
{
  int i = -1;
  int j = -1;
  if (0 == CheckPerson(p, person))
  {
    return;
  }
  printf("请输入要改签的订单编号:");
  printf("\n");
  scanf("%d", &i);
  (p + i)->Buy_num--;
  CheckAirPlane(p);
  do
  {
    printf("请输入要改签的航班编号:");
    scanf("%d", &j);
    if ((p + j)->Buy_num >= (p + j)->Max_num)
    {
      printf("该次航班已满员,请重新选择!\n");
    }
  } while ((p + j)->Buy_num >= (p + j)->Max_num);
  (person + i)->AirPlane_Num = j;
  (p + j)->Buy_num++;
  printf("改签成功!\n\n");
}

//删除订单
void ReturnTicket(Plane* p, Person* person)
{
  int i = -1;
  int j = 0;
  CheckPerson(p, person);
  printf("请输入要删除的订单编号:");
  scanf("%d", &i);
  for (j = i; j < _person_size; j++)
  {
    (person + j)->AirPlane_Num = (person + j + 1)->AirPlane_Num;
    strcpy((person + j)->person_name, (person + j + 1)->person_name);
  }
  printf("退票成功!\n");
}

//查看目前订票信息
void CheckAirPlaneOrder(Plane* p, Person* person)
{
  int i = -1;
  for (i = 0; i < _size; i++)
  {
    printf("航班编号:%d\n", i);
    printf("ID:%s\n", (p + i)->ID);
    printf("始发地:%s\n", (p + i)->Start_Place);
    printf("目的地:%s\n", (p + i)->End_Place);
    printf("起飞时间:%s\n", (p + i)->time);
    printf("机票价格:%2f\n", (p + i)->price);
    printf("剩余机票:%d\n", ((p + i)->Max_num - (p + i)->Buy_num));
    printf("买票人信息:"); PrintPerson(p,person, i);
  }
}
void PrintPerson(Plane* p, Person* person,int i)
{
  int ticket_num = 0;
  int j = 0;
  for (j = 0; j < _person_size; j++)
  {
    if ((person + j)->AirPlane_Num == i)
    {
      printf("%s ,", (person + j)->person_name);
      ticket_num++;
    }
  }
  printf("\n\n");
}

//候补名单初始化
void InitPersonNoTicket(Person** person_noticket)
{
  assert(person_noticket);
  *person_noticket = (Person*)malloc(sizeof(Person)*PERSONNOTICKET_MAX);
  if (NULL == *person_noticket)
  {
    printf("开辟空间失败!\n");
    return;
  }
}

//查看候补名单
void CheckPersonNoTicket(Plane* p, Person* person_noticket)
{
  int i = 0;
  printf("候补名单:\n\n");
  if (0 == _personnoticket_size)
  {
    printf("候补名单为空!\n\n");
    return;
  }
  for (i = 0; i < _personnoticket_size; i++)
  {
    printf("姓名:%s\n", (person_noticket + i)->person_name);
    printf("所需要航班编号:%d\n", (person_noticket + i)->AirPlane_Num);
    printf("航班ID:%s\n", (p + ((person_noticket + i)->AirPlane_Num))->ID);
    printf("始发地:%s\n", ((p + ((person_noticket + i)->AirPlane_Num))->Start_Place));
    printf("目的地:%s\n", (p + ((person_noticket + i)->AirPlane_Num))->End_Place);
  }
}
//主函数
int main()
{
  Plane* p=NULL;
  Person* person=NULL;
  Person* person_noticket = NULL;
  InitPersonNoTicket(&person_noticket);
  InitAirPlane(&p);
  InitPerson(&person);
  while (1)
  {
    home(p, person, person_noticket);
  }
  system("pause");
  return 0;
}

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 学生成绩管理系统C语言代码实现

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct person //定义结构体 { char num[10]; //学号 char name[20]; //姓名 float cyuyan; //C语言成绩 float en; //物理学成绩 float ji; //原子物理成绩

  • C语言学生管理系统源码分享

    本文实例为大家分享了C语言学生管理系统源码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> //结构体可以存放的学生信息最大个数,不可变变量 int const MAX_LENGTH=100; //学生信息结构体数组,最多可以存放100个学生信息 struct student{ int id; //学号 char *name; //姓名 int age; //年龄 float c_score; //C语言成绩 float engl

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • 基于C语言航班信息查询与检索

    本文实例为大家分享了航班信息查询与检索的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #define MaxSpace 100 #define keylen 7 #define RADIX_n 10 #define RADIX_c 26 typedef char KeyType; typedef struct{ char start[7]; //起点站 char end[7]; //终点站 char sche[12];

  • C语言实现航班管理系统

    本文实例为大家分享了C语言实现航班管理系统的具体代码,供大家参考,具体内容如下 /*.航班管理系统 主界面以菜单的形式展现,用户可以按不同的键执行不同的操作,即调用不同的函数: ...... 用不同的函数实现,除以下模块,还可设计其他功能模块: 1)输入记录:输入录入航班信息,包括:航班号,起降时间,起飞抵达城市,航班票价,票价折扣,航班是否满仓等: 2)输出记录:输出信息: 3)查询记录:可根据航班号查找记录: 4)删除记录:指定航班号删除该条记录: 5)插入记录:在指定位置插入新的记录. *

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

  • C语言实现航班售票系统 C语言实现航班管理系统

    本文实例为大家分享了C语言航班售票系统的具体代码,供大家参考,具体内容如下 题目描述:实现一个航班售票系统,每个航班应包括以下信息:航班号.起飞地.目的地.总座位数.余票数.乘客名单等:每个乘客的信息有:乘客姓名.证件号码.座位号等. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MaxFlight 32 //最大的航班数 #define MaxPassenger 1000 //最大

  • C语言学生成绩管理系统源代码

    大学C语言实训课,C语言学生成绩管理系统,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<math.h> struct student { int num; char name[20]; float pingshi; float shiyan; float kaoshi; double zongping; }stu[4]; void main() { void a(); void b(); void

  • C语言图书管理系统简洁版

    DOS界面的图书管理系统,具体内容如下 程序分为两块:管理员操作(收录图书.删除图书等)和会员操作(注册.借书.还书等): 1.管理员操作界面 2.会员操作界面 global.h头文件:(程序中只使用了一个编写的头文件,在这里存放了所有的接口函数以及需要使用到的头文件,还有结构体的定义) #include "iostream" #include "string" #include "fstream" #include "conio.h&

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

随机推荐