⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 航空订票系统注释.txt

📁 这是一个简单航空订票系统,在TurbleC集成环境中运行.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include "stdio.h"
#include "stdlib.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#ifndef  datatype_h
#define datatype_h    
#define TRUE  1
#define FALSE 0
int n=20401;
typedef int BOOL;
#define NEW(type, size) (type*)malloc(sizeof(type) * size)
typedef struct _date {  /* 日期 */
  int year;
  int month;
  int day;
}DATE;
typedef struct _time {  /* 时间 */
  int hour;
  int min;
} TIME;
typedef struct _flight { /* 航班数据 */
  int fltno; /* 航班号,若此成员为-1,则表示此航班未使用 */
  char from[30]; /* 起飞港 */
  char to[30]; /* 到达港 */
  TIME start; /* 起飞时间 */
  TIME arrive; /* 到达时间 */
  int price; /*航班票价*/
  int discount; /*票价折扣*/
  float price2;/*打折后的票价*/
  int people; /* 乘客限额 */
  int surplus;/*剩余可订票数*/
  } FLIGHT, *PFLIGHT;
typedef struct _passengernode { /* 乘客数据 */
  char name[20]; /* 姓名 */
  char number[19]; /* 身份证号 */
  DATE date; /* 订票日期 */
  int fltno; /* 航班号 */
  int seatno; /* 座位号 */
  int id; /*订单编号*/
} PASSENGER, *PPASSENGER;  

typedef struct _psgnode { /* 乘客结点 */
  PASSENGER psg;
  struct _psgnode *next;
} NODE, *PNODE;
#endif

extern BOOL datecmp(DATE* date1, DATE* date2)
{
  return (date1->year == date2->year && date1->month == date2->month
    && date1->day == date2->day);
}
BOOL timecmp(TIME* time1, TIME* time2)
{
  return (time1->hour == time2->hour && time1->min == time2->min);
}
BOOL AddFlight(FLIGHT fltlist[], PFLIGHT fltdata)
{
  int i;
  BOOL b = FALSE;
  for (i = 0; i < 40; i++)
  {
    if (fltlist[i].fltno == -1)
    {
      memcpy(&fltlist[i], fltdata, sizeof(FLIGHT));
      b = TRUE;
      break;
    }
  }
  return b;
}
void DelFlight(FLIGHT fltlist[], int index)
{
  fltlist[index].fltno = -1;
}
void AddPassenger(PNODE psglist, PPASSENGER psgdata)
{
  PNODE p, q;
  for (p = psglist; p->next != NULL; p = p->next)
   ;
  q = NEW(NODE, 1);
  memcpy(&q->psg, psgdata, sizeof(PASSENGER));
  q->next = NULL;
  p->next = q;
}
BOOL DelPassenger(PNODE psglist, int index)
{
  int i = 0;
  PNODE p, q;
  for (p = psglist->next; p->next != NULL; p = p->next)
    i++;
  if (p != NULL && i == index - 1)
  {
    q = p->next;
    p->next = q->next;
    free(q);
    return TRUE;
  }
  else
    return FALSE;
}
void ReadFlight(FLIGHT fltlist[])
{
  FILE *fp;
  if ((fp = fopen("flight.dat", "rb")) != NULL)
    fread(fltlist, sizeof(FLIGHT), 40, fp);
  else
  {
    int i;
    for (i = 0; i < 40; i++)
      fltlist[i].fltno = -1;
  }
  fclose(fp);
}
void ReadPassenger(PNODE psglist)
{
  FILE *fp;
  if ((fp = fopen("psg.dat", "rb")) == NULL)
    psglist->next = NULL;
  else
  {
    int i, n;
    fread(&n, sizeof(int), 1, fp);
    for (i = 0; i < n; i++)
    {
      PASSENGER a_psg;
      fread(&a_psg, sizeof(PASSENGER), 1, fp);
      AddPassenger(psglist, &a_psg);
    }
  }
}
void ClearPsgList(PNODE psglist)
{
  PNODE p = psglist->next, q;
  while (p != NULL && p->next != NULL)
  {
    q = p;
    p = p->next;
    free(q);
  }
}
unsigned int GetPsgCount(PNODE psglist)
{
  PNODE p;
  unsigned int s = 0;
  for (p = psglist->next; p != NULL; p = p->next)
    s++;
  return s;
}

void Book(FLIGHT fltlist[], PNODE psglist)
{
  char c = 'y';
  BOOL b;
  while (c == 'y' || c == 'Y')
  {
    int i;
    PASSENGER b_psg;
    printf("  请输入航班号:");
    scanf("%d", &b_psg.fltno);
    while (b_psg.fltno >= 10000 || b_psg.fltno < 0)
    {
      printf(" 数据非法,请重新输入:");
      scanf("%d", &b_psg.fltno);
      continue;  
    }
    for(i = 0; i < 40; i++)
    {
      if(fltlist[i].fltno == b_psg.fltno)
      {
    PNODE p;
    BOOL *q;
    int j;
    printf("  请输入订票日期:(yyyy,mm,dd)");
    scanf("%d,%d,%d", &b_psg.date.year, &b_psg.date.month,
      &b_psg.date.day);
    q = NEW(int, fltlist[i].people);
    for (j = 0; j < fltlist[i].people; j++)
      q[j] = FALSE;
    for (p = psglist->next; p != NULL; p = p->next)
    {
      if(datecmp(&p->psg.date, &b_psg.date) &&
        b_psg.fltno == p->psg.fltno)
      q[p->psg.seatno - 1] = TRUE;
    }
    printf("以下座位尚未有人订:\n");
    for (j=0; j < fltlist[i].people; j++)
    {
      if (!q[j])
        printf("%d ", j + 1);
    }   
    printf("\n剩余可订票数:%d",fltlist[i].surplus);
    printf("\n  请输入订票座位号:");
    scanf("%d", &b_psg.seatno);
    b = FALSE;
    do
    {
      int k;
      if (b_psg.seatno > 0 && b_psg.seatno <= fltlist[i].people + 1)
      {
        if (!q[b_psg.seatno - 1])
        {
          b = TRUE;
          break;
        }
        else
          printf("  这个座位有人了!");
      }
      else
        printf("  数据非法!");
        scanf("%d", &b_psg.seatno);
    } while (!b);
    printf("  请输入乘客姓名:") ;
        scanf("%s",&b_psg.name);
        printf("  请输入乘客身份证号:");
    scanf("%s",&b_psg.number);

        AddPassenger(psglist, &b_psg); /*添加乘客*/
       
        fltlist[i].surplus--;  /*剩余票数减1*/
    free(q);
    printf("\n  您的订票已成功。");
    printf("\n\n\t\t=====订票信息=====");
    printf("\n\t------------------------------------");
    printf("\n\t === 订单编号:%d",n++);
    printf("\n\t === 航班号:%d 座位号:%d",fltlist[i].fltno,b_psg.seatno);
    printf("\n\t------------------------------------");
    printf("\n\t === 订票者姓名:%s",b_psg.name);
    printf("\n\t === 订票日期:%d-%d-%d", 
      b_psg.date.year, b_psg.date.month,b_psg.date.day);
    printf("\n\t === 航线:%s>>-->>%s", fltlist[i].from,fltlist[i].to);
    printf("\n\t === 起飞时间:%2d:%02d 到达时间:%2d:%02d \n",
      fltlist[i].start.hour, fltlist[i].start.min,
      fltlist[i].arrive.hour, fltlist[i].arrive.min); 
    printf("\t------------------------------------- "); 
      }
    }
    printf("\n继续订票(y/n)");
    getchar();
    c = getchar();
  }
}

void Add(FLIGHT fltlist[])  /*添加航班信息*/
{
  char c = 'y';
  while (c == 'y' || c == 'Y')
  {
    FLIGHT flt;
    BOOL b;
    printf("请输入航班号(1 - 10000):");
    scanf("%d", &flt.fltno);
    printf("请输入起飞港:");
    scanf("%s", flt.from);
    printf("请输入到达港:");
    scanf("%s", flt.to);
    printf("请输入起飞时间(hh:mm):");
    scanf("%d:%d", &flt.start.hour, &flt.start.min);
    printf("请输入到达时间(hh:mm):");
    scanf("%d:%d", &flt.arrive.hour, &flt.arrive.min);
    printf("请输入航班票价(RMB):");
    scanf("%d", &flt.price);    
    printf("请输入票价折扣(X%):");
    scanf("%d", &flt.discount);   
    printf("请输入乘客限额:");
    scanf("%d", &flt.people);
    flt.surplus=flt.people;/*初始化剩余票数,开始时候剩余票数对于总票数*/
    getchar();
    if (AddFlight(fltlist, &flt))
      printf("添加成功,");
    else
      printf("添加失败,");
    printf("继续添加航班吗(Y/N)?");
    getchar();
    c = getchar();
  }
}
void Del(FLIGHT fltlist[])  /*删除航班信息*/
{
  BOOL b = FALSE;
  int i, d_fltno;
  char c = 'y';
  while (c == 'y' || c == 'Y')
  {
    printf("可以取消的航班号:");
    for (i = 0; i < 40; i++)
    {
      if (fltlist[i].fltno != -1)
      {
    b = TRUE;
    printf("%d ", fltlist[i].fltno);
      }
    }
    if (!b)
    {
      printf("无\n按任意键返回。");
      getch();
      return;
    }
    printf("\n请输入要取消的航班号:");
    scanf("%d", &d_fltno);
    for (i = 0; i < 40; i++)
    {
      if (fltlist[i].fltno == d_fltno) 
      {
    DelFlight(fltlist, i);
    break;
      }
    }
    printf("继续删除吗(y/n)?");
    getchar();
    c = getchar();
  }
}
void Manage(FLIGHT fltlist[])
{
  for (;;)
  {
    char c;
    clrscr();
    printf("\n\t\t航班管理\n");
    printf("==========================================\n");
    printf("\t\t1.新增航班\n");
    printf("\t\t2.取消航班\n");
    printf("\t\t3.返回\n");
    printf("\n\t请选择:");
    c = getchar();
    switch (c)
    {
      case '1':Add(fltlist);break;
      case '2':Del(fltlist);break;
      case '3':
    break;
      default:
    continue;
    }
    if (c == '3')
      break;
  }
}

void Cancel(FLIGHT fltlist[], PNODE psglist)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -