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

📄 feijidingpiaoxitong.txt

📁 一段关于飞机订票系统的程序。我们做软件工程的作业。
💻 TXT
📖 第 1 页 / 共 2 页
字号:
/* Please run Chinese a system, then you can read the comment. */
/* 文件名:datatype.h
   说明:所有用到的数据类型及其基本操作*/
#define TRUE  1
#define FALSE 0
typedef int BOOL;
#define NEW(type, size) (type*)malloc(sizeof(type) * size)
typedef struct _date { /* 日期 */
  int m_year;
  int m_month;
  int m_day;
} DATE;
typedef struct _time { /* 时间 */
  int m_hour;
  int m_min;
} TIME;
typedef struct _flight { /* 航班数据 */
  int m_fltno; /* 航班号,若此成员为-1,则表示此航班未使用 */
  char m_szFrom[30]; /* 起飞港 */
  char m_szPass[30]; /* 途经港 */
  char m_szTo[30]; /* 到达港 */
  TIME m_start; /* 起飞时间 */
  TIME m_arrive; /* 到达时间 */
  TIME m_fly; /* 飞行固定时间 */
  int m_people; /* 乘客限额 */
} FLIGHT, *PFLIGHT;
typedef struct _passengernode { /* 乘客数据 */
  char m_szName[20]; /* 姓名 */
  char m_szCorp[30]; /* 单位 */
  char m_szNumber[19]; /* 身份证号,考虑到字母的情况,故使用字符串 */
  DATE m_Date; /* 订票日期 */
  int m_fltno; /* 航班号 */
  int m_seatno; /* 座位号 */
} PASSENGER, *PPASSENGER;
typedef struct _psgnode { /* 乘客结点 */
  PASSENGER m_psg;
  struct _psgnode *next;
} NODE, *PNODE;
/* 清空键盘缓冲区 */
void ClearBuffer(void);
/* 读取航班数据 */
void ReadFlight(FLIGHT fltlist[]);
/* 读取乘客数据 */
void ReadPassenger(PNODE psglist);
/* 添加航班 */
BOOL AddFlight(FLIGHT fltlist[], PFLIGHT fltdata);
/* 删除航班 */
void DelFlight(FLIGHT fltlist[], int index);
/* 添加乘客 */
void AddPassenger(PNODE psglist, PPASSENGER psgdata);
/* 删除乘客 */
BOOL DelPassenger(PNODE psglist, int index);
/* 清空乘客链表 */
void ClearPsgList(PNODE psglist);
/* 取得乘客总数 */
unsigned int GetPsgCount(PNODE psglist);
/* Please run Chinese a system, then you can read the comment. */
/* 文件名:datatype.c
   说明:datatype.h中的函数实现*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

BOOL datecmp(DATE* date1, DATE* date2)
{
  return (date1->m_year == date2->m_year && date1->m_month == date2->m_month
    && date1->m_day == date2->m_day);
}
BOOL timecmp(TIME* time1, TIME* time2)
{
  return (time1->m_hour == time2->m_hour && time1->m_min == time2->m_min);
}
void ClearBuffer(void)
{
  getchar();
}
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].m_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 psg;
      fread(&psg, sizeof(PASSENGER), 1, fp);
      AddPassenger(psglist, &psg);
    }
  }
}
BOOL AddFlight(FLIGHT fltlist[], PFLIGHT fltdata)
{
  int i;
  BOOL bResult = FALSE;
  for (i = 0; i < 40; i++)
  {
    if (fltlist[i].m_fltno == -1)
    {
      memcpy(&fltlist[i], fltdata, sizeof(FLIGHT));
      bResult = TRUE;
      break;
    }
  }
  return bResult;
}
void DelFlight(FLIGHT fltlist[], int index)
{
  fltlist[index].m_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->m_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 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;
}
/*Please run Chinese a system,then you can read the comment. */
/* 文件名: book.c
   说明: 订票系统模块 */
#include <stdio.h>
#include <stdlib.h>


void Book(FLIGHT fltlist[], PNODE psglist)
{
  char c = 'y';
  BOOL b;
  while (c == 'y' || c == 'Y')
  {
    int i;
    PASSENGER psg;
    printf("请输入航班号:");
    scanf("%d", &psg.m_fltno);
    while (psg.m_fltno >= 10000 || psg.m_fltno < 0)
    {
      printf("请重新输入:");
      scanf("%d", &psg.m_fltno);
    }
    for(i = 0; i < 40; i++)
    {
      if(fltlist[i].m_fltno == psg.m_fltno)
      {
	PNODE p;
	BOOL *q;
	int j;
	printf("请输入订票日期:(yyyy,mm,dd)");
	scanf("%d,%d,%d", &psg.m_Date.m_year, &psg.m_Date.m_month,
	  &psg.m_Date.m_day);
	q = NEW(int, fltlist[i].m_people);
	for (j = 0; j < fltlist[i].m_people; j++)
	  q[j] = FALSE;
	for (p = psglist->next; p != NULL; p = p->next)
	{
	  if(datecmp(&p->m_psg.m_Date, &psg.m_Date) &&
	    psg.m_fltno == p->m_psg.m_fltno)
	  q[p->m_psg.m_seatno - 1] = TRUE;
	}
	printf("以下座位尚未有人订:");
	for (j=0; j < fltlist[i].m_people; j++)
	{
	  if (!q[j])
	    printf("%d ", j + 1);
	}
	printf("\n请输入订票座位号:");
	scanf("%d", &psg.m_seatno);
	b = FALSE;
	do
	{
      /*	  int k;    */
	  if (psg.m_seatno > 0 && psg.m_seatno <= fltlist[i].m_people + 1)
	  {
	    if (!q[psg.m_seatno - 1])
	    {
	      b = TRUE;
	      break;
	    }
	    else
	      printf("这个座位有人了!");
	  }
	  else
	    printf("数据非法!");
	  scanf("%d", &psg.m_seatno);
	} while (!b);
	printf("请输入乘客姓名:") ;
        scanf("%s", psg.m_szName);
        printf("请输入乘客单位:");
	scanf("%s", psg.m_szCorp);
        printf("请输入乘客身份证号:");
	scanf("%s", psg.m_szNumber);
        AddPassenger(psglist, &psg);
	printf("您的订票已成功。");
	free(q);
      }
    }
    c = getchar();
  }
}
/* Please run Chinese a system, then you can read the comment. */
/* 文件名:manage.c
   说明:航班管理模块函数声明 */
/* 显示界面菜单 */
void Manage(FLIGHT fltlist[], PNODE psglist);
/* Please run Chinese a system, then you can read the comment. */
/* 文件名:manage.c
   说明:航班管理模块*/
#include <stdio.h>
#include <stdlib.h>

void Add(FLIGHT fltlist[])
{
  char c = 'y';
  while (c == 'y' || c == 'Y')
  {
    FLIGHT flt;
  /*    BOOL b;*/
    printf("请输入航班号(1 - 10000):");
    scanf("%d", &flt.m_fltno);
    printf("请输入起飞港:");
    scanf("%s", flt.m_szFrom);
    printf("请输入途经港:");
    scanf("%s", flt.m_szPass);
    printf("请输入到达港:");
    scanf("%s", flt.m_szTo);
    printf("请输入起飞时间(hh:mm):");
    scanf("%d:%d", &flt.m_start.m_hour, &flt.m_start.m_min);
    printf("请输入到达时间(hh:mm):");
    scanf("%d:%d", &flt.m_arrive.m_hour, &flt.m_arrive.m_min);
    printf("请输入飞行固定时间(hh:mm):");
    scanf("%d:%d", &flt.m_fly.m_hour, &flt.m_fly.m_min);
    printf("请输入乘客限额:");
    scanf("%d", &flt.m_people);
    ClearBuffer();
    if (AddFlight(fltlist, &flt))
      printf("添加成功,");
    else
      printf("添加失败,");
    printf("继续添加航班吗(Y/N)?");
    c = getchar();
  }
}
void Del(FLIGHT fltlist[])
{
  BOOL b = FALSE;
  int i, fltno;
  char c = 'y';
  while (c == 'y' || c == 'Y')
  {
    printf("可以取消的航班号:");
    for (i = 0; i < 40; i++)
    {
      if (fltlist[i].m_fltno != -1)
      {
	b = TRUE;
	printf("%d ", fltlist[i].m_fltno);
      }
    }
    if (!b)
    {
      printf("无\n按任意键返回。");
      getchar();
      return;
    }
    printf("\n请输入要取消的航班号:");
    scanf("%d", &fltno);
    for (i = 0; i < 40; i++)
    {
      if (fltlist[i].m_fltno == fltno)
      {
	DelFlight(fltlist, i);
	break;
      }
    }
    printf("继续删除吗(y/n)?");
    ClearBuffer();
    c = getchar();
  }
}
void Query(FLIGHT fltlist[])
{
  char c = 'y';
  while (c == 'y' || c == 'Y')
  {
    BOOL b = FALSE;
    int i, fltno;
    printf("可以查询的航班号:");
    for (i = 0; i < 40; i++)
    {
      if (fltlist[i].m_fltno != -1)
      {
	b = TRUE;
	printf("%d ", fltlist[i].m_fltno);
      }
    }
    if (!b)
    {
      printf("无\n按任意键返回。");
      getchar();
      return;
    }
    printf("\n请输入要查询的航班号:");
    scanf("%d", &fltno);
    for (i = 0; i < 40; i++)
    {
      if (fltlist[i].m_fltno == fltno)
      {
	printf("%s--%s--%s 乘客限额:%d\n", fltlist[i].m_szFrom,
	  fltlist[i].m_szPass, fltlist[i].m_szTo, fltlist[i].m_people);
	printf("起飞时间:%2d:%02d 到达时间:%2d:%02d 飞行固定时间:%2d:%02d\n",
	  fltlist[i].m_start.m_hour, fltlist[i].m_start.m_min,
	  fltlist[i].m_arrive.m_hour, fltlist[i].m_arrive.m_min,
	  fltlist[i].m_fly.m_hour, fltlist[i].m_arrive.m_min);
	break;
      }
    }
    printf("继续查询吗(y/n)?");
    ClearBuffer();
    c = getchar();
  }
}
void OneDay(FLIGHT fltlist[], PNODE psglist)
{
  char c = 'y';
  while (c == 'y' || c == 'Y')
  {
    DATE date;
    int people[40], i;
    PNODE p;
    for (i = 0; i < 40; i++)
      people[i] = 0;
    printf("请输入您要管理的日期(yyyy,mm,dd):");
    scanf("%d,%d,%d", &date.m_year, &date.m_month, &date.m_day);
    for (p = psglist->next; p != NULL; p = p->next)
    {
      if (datecmp(&p->m_psg.m_Date, &date))
      {
	for (i = 0; i < 40; i++)
	{
	  if (fltlist[i].m_fltno == p->m_psg.m_fltno)
	    people[i]++;
	}
      }
    }
    for (i = 0; i < 40; i++)
    {
      if (fltlist[i].m_fltno != -1)
      {
	printf("%d %s--%s--%s 人数:%d\n", fltlist[i].m_fltno,
	  fltlist[i].m_szFrom, fltlist[i].m_szPass, fltlist[i].m_szTo,
	  people[i]);
      }
    }
    printf("继续管理吗?(y/n)");
    ClearBuffer();
    c = getchar();
  }
}
void MultiDay(FLIGHT fltlist[], PNODE psglist)
{
  char c = 'y';
  while (c == 'y' || c == 'Y')
  {
    DATE date[7];
    int n, i, j;
    int people[40][7];
    PNODE p;
    printf("请输入要查询的天数(1-7):");
    do
    {
      scanf("%d", &n);
      if (n > 7 || n < 1)
	printf("输入非法,请重新输入:");
    } while (n > 7 || n < 1);
    for (i = 0; i < n; i++)
    {
      printf("请输入第%d个日期(yyyy,mm,dd):", i);
      scanf("%d,%d,%d", &date[i].m_year, &date[i].m_month, &date[i].m_day);
    }
    for (i = 0; i < 40; i++)

⌨️ 快捷键说明

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