1. 程式人生 > 程式設計 >C語言實現簡單航班管理系統

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,int i);//列印航班乘客

void InitPerson(Person** person);//初始化乘客資訊記憶體
void BookAirPlane(Plane* p,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,int i);
void CheckPersonNoTicket(Plane* p,Person* person_noticket);//檢視候補名單
///////////////////////////////////////

void home(Plane* p,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_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",(p + i)->ID);
    printf("始發地:%s\n",((p + i)->Max_num - (p + i)->Buy_num));
    printf("買票人資訊:"); PrintPerson(p,i);
  }
}
void PrintPerson(Plane* p,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_noticket);
  }
  system("pause");
  return 0;
}

更多學習資料請關注專題《管理系統開發》。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。