机票退订
#include
#include
#include
#include
#include
#include
#include
#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);
BOOL datecmp(DATE* date1, DATE* date2);
void Book(FLIGHT fltlist[], PNODE psglist);
void query(FLIGHT fltlist[], PNODE psglist); void fltnumber(FLIGHT fltlist[]);
void psgname (PNODE psglist);
void fromto (FLIGHT fltlist[]);
void fltdat(FLIGHT fltlist[], PNODE psglist);
/* ???æº??àÊý?Ý */
void SaveFlight(FLIGHT fltlist[]);
/* ???æ?Ë?ÍÊý?Ý */
void SavePassenger(PNODE psglist);
/* ÍË?ö */
void Quit(FLIGHT fltlist[], PNODE psglist);
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;
}
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();
}
}
void query(FLIGHT fltlist[], PNODE psglist)
{
for (;;)
{
char c;
system("cls");
printf("º??à?éÑ?\n");
printf("~~~~~~~~\n");
printf("1.??º??àºÅ?éÑ?\n");
printf("2.??ÐÕÃû?éÑ??Ë?Í\n");
printf("3.??Æð?É??µ??ï?Û?éÑ?\n");
printf("4.??ÈÕÆÚ?éÑ?º??àÇé?ö\n");
printf("5.?µ?Ø\n");
printf("\nÇëÑ?Ôñ1-5?º");
c = getchar();
switch (c)
{
case '1':
fltnumber(fltlist);
break;
case '2':
psgname(psglist);
break;
case '3':
fromto(fltlist);
break;
case '4':
fltdat(fltlist, psglist);
break;
case '5':
break;
default:
continue;
}
if (c == '5')
break;
}
}
void fltnumber(FLIGHT fltlist[])
{
char c = 'y';
while (c == 'y' || c == 'Y')
{
BOOL b = FALSE;
int fltno, i;
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??ÈÎÒâ?ü?µ?Ø??");
getch();
return;
}
printf("\nÇëÊäÈëÒª?éÑ?µÄº??àºÅ?º");
scanf("%d", &fltno);
for(i = 0; i < 40; i++)
{
if (fltlist[i].m_fltno == fltno)
{
printf("%s--%s--%s\n", fltlist[i].m_szFrom, fltlist[i].m_szPass,
fltlist[i].m_szTo);
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_fly.m_min);
printf("?Ë?ÍÏÞ?î?º%d\n", fltlist[i].m_people);
break;
}
}
printf("?ÌÐø?éÑ?Âð??(y/n)");
ClearBuffer();
c = getchar();
}
}
void psgname(PNODE psglist)
{
char c = 'y';
while (c == 'y' || c == 'Y')
{
char name[20];
PNODE p;
BOOL b = FALSE;
printf("ÇëÊäÈë?Ë?ÍÐÕÃû?º");
scanf("%s",name);
for (p = psglist->next; p != NULL; p = p->next)
{
if(strcmp(p->m_psg.m_szName, name) == 0)
{
b = TRUE;
printf("ÐÕÃû?º%s µ?Î??º%s Éí?ÝÖ?ºÅ?º%s\n", p->m_psg.m_szName,
p->m_psg.m_szCorp, p->m_psg.m_szNumber);
printf("??Æ?ÈÕÆÚ?º%d-%d-%d ", p->m_psg.m_Date.m_year,
p->m_psg.m_Date.m_month, p->m_psg.m_Date.m_day);
printf("º??àºÅ?º%d ×ùÎ?ºÅ?º%d", p->m_psg.m_fltno,
p->m_psg.m_seatno); break;
}
}
if (!b)
{
printf("?éÎÞ?ËÈË????ÈÎÒâ?üÍË?ö");
getch();
return;
}
printf("ÊÇ?ñ?ÌÐø?éÑ???(y/n)");
ClearBuffer();
c = getchar();
}
}
void fromto (FLIGHT fltlist[])
{
char c = 'y';
while (c == 'y' || c == 'Y')
{
BOOL b = FALSE;
char from[30], to[30];
int i;
printf("ÇëÊäÈëÆð?É?Û?º");
scanf("%s", from);
printf("ÇëÊäÈëµ??ï?Û?º");
scanf("%s", to);
for(i = 0; i < 40; i++)
{
if(strcmp(fltlist[i].m_szFrom,from)==0)
{
if(strcmp(fltlist[i].m_szTo,to)==0)
{
b=TRUE;
break;
}
}
}
if(b)
{
printf("%s--%s--%s\n",fltlist[i].m_szFrom,fltlist[i].m_szPass,fltl
ist[i].m_szTo);
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_fly.m_min);
printf("?Ë?ÍÏÞ?î?º%d",fltlist[i].m_people);
}
else
printf("ÎÞ?Ë?É?ú");
getch();
printf("ÊÇ?ñ?ÌÐø?éÑ???");
ClearBuffer();
c = getchar();
}
}
void fltdat(FLIGHT fltlist[], PNODE psglist) {
int people[40], i;
DATE date;
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(&date, &p->m_psg.m_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 (people[i] > 0)
{
printf("%d %s--%s--%s ÈËÊý?º%d", fltlist[i].m_fltno,
fltlist[i].m_szFrom,
fltlist[i].m_szPass, fltlist[i].m_szTo, people[i]);
}
}
getch();
}
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??ÈÎÒâ?ü?µ?Ø??");
getch();
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??ÈÎÒâ?ü?µ?Ø??");
getch();
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++)
for (j = 0; j < 7; j++)
people[i][j] = 0;
for (p = psglist->next; p != NULL; p = p->next)
{
for (j = 0; j < n; j++)
{
if (datecmp(&date[j], &p->m_psg.m_Date))
{
for (i = 0; i < 40; i++)
{
if (fltlist[i].m_fltno == p->m_psg.m_fltno)
people[i][j]++;
}
}
}
}
for (i = 0; i < 40; i++)
{
if (fltlist[i].m_fltno != -1)
{
printf("%d %s--%s--%s ", fltlist[i].m_fltno, fltlist[i].m_szFrom,
fltlist[i].m_szPass, fltlist[i].m_szTo);
for (j = 0; j < n; j++)
printf("%d ", people[i][j]);
printf("\n");
}
}
printf("?ÌÐø?éÑ?Âð??(y/n)");
ClearBuffer();
c = getchar();
}
}
void Manage(FLIGHT fltlist[], PNODE psglist)
{
for (;;)
{
char c;
system("cls");
printf("º??à?ÜÀí\n");
printf("~~~~~~~~\n");
printf("1.?éÑ?º??à?ù??Çé?ö\n");
printf("2.?ÔÄ?Ììº??à?ÉÐÐÇé?ö?ÜÀí\n");
printf("3.?üÆÚº??à?ÉÐÐÇé?ö?ÜÀí\n");
printf("4.È?Ïûº??à\n");
printf("5.ÐÂÔöº??à\n");
printf("6.?µ?Ø\n");
printf("\nÇëÑ?Ôñ1-6?º");
c = getchar();
switch (c)
{
case '1':
Query(fltlist);
break;
case '2':
OneDay(fltlist, psglist);
break;
case '3':
MultiDay(fltlist, psglist);
break;
case '4':
Del(fltlist);
break;
case '5':
Add(fltlist);
break;
case '6':
break;
default:
continue;
}
if (c == '6')
break;
}
}
void SaveFlight(FLIGHT fltlist[])
{
FILE *fp;
if ((fp = fopen("flight.dat", "wb")) == NULL)
{
printf("??ÄÜ?ò?ªflight.datÎÄ?þ??º??àÊý?ÝÎÞ?????æ??\n");
fclose(fp);
return;
}
fwrite(&fltlist[0], sizeof(FLIGHT), 40, fp);
fclose(fp);
printf("º??àÊý?ÝÒÑ???æÖÁflight.datÎÄ?þ??\n"); }
void SavePassenger(PNODE psglist)
{
FILE *fp;
PNODE p;
int n = GetPsgCount(psglist);
unlink("psg.dat");
if (n == 0)
return;
if ((fp = fopen("psg.dat", "wb")) == NULL)
{
printf("??ÄÜ?ò?ªpsg.datÎÄ?þ???Ë?ÍÊý?ÝÎÞ?????æ??\n");
fclose(fp);
return;
}
fwrite(&n, sizeof(int), 1, fp);
for (p = psglist->next; p != NULL; p = p->next)
fwrite(&p->m_psg, sizeof(PASSENGER), 1, fp);
fclose(fp);
printf("?Ë?ÍÊý?ÝÒÑ???æÖÁpsg.datÎÄ?þ??\n"); }
void Quit(FLIGHT fltlist[], PNODE psglist) {
SaveFlight(fltlist);
SavePassenger(psglist);
}
void main(void)
{
FLIGHT fltlist[40];
NODE psglist;
ReadFlight(fltlist);
ReadPassenger(&psglist);
for (;;)
{
char c;
system("cls");
printf("?É?ú??Æ?ϵÍ?\n");
printf("~~~~~~~~~~~~\n");
printf("---Ö??˵?---\n");
printf("1.??Æ?\n");
printf("2.ÍËÆ?\n");
printf("3.º??à?ÜÀí\n");
printf("4.?éÑ?\n");
printf("5.ÍË?ö\n");
printf("\nÇëÑ?Ôñ1-5?º");
c = getchar();
switch (c)
{
case '1':
Book(fltlist, &psglist);
break;
case '2':
/*c_ticket(fltlist, &psglist);*/
break;
case '3':
Manage(fltlist, &psglist);
break;
case '4':
query(fltlist, &psglist);
break;
case '5':
Quit(fltlist, &psglist);
break;
default:
continue;
}
if (c == '5')
break;
}
ClearPsgList(&psglist); }