📄 feijidingpiaoxitong.txt
字号:
/* 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 + -