📄 航空订票系统注释.txt
字号:
#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 + -