数据结构习题集实习之航空客运订票系统(示意系统,全部数据放在内存)

航空客运订票系统
1、系统名称:航空客运订票系统
    航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。要求在TC或VC环境下设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
2、要求:
(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、 飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。
(2)作为模拟系统,全部数据可以只存放在内存中。
(3)通过此系统可以实现如下功能:
①录入功能:可以录入航班情况
②查询功能:根据客户提供的终点站名进行查询,可以输出以下信息:航班号、飞机号、星期几飞行和余票量等。也可以根据航班号,查询飞机某个航线的情况。
③订票功能:根据客户提出的要求(姓名、终点站名、订票数量)查询该航班的余票量情况。如尚有足够的余票,则为客户办理订票手续;若已满员或余票量少于订票数量,则需要重新询问客户要求,如需要,可登记排队候补。
④退票功能:根据客户提供的情况(姓名、日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,若有人排队首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则询问其他排队候补的客户

体会心得:

  1. 写这个程序并自己的难点不在于程序语法和算法,而是在于对整个程序架构的把握,如何摆布函数
  2. 通过这个实验我主要学会了如何布置整个程序的头文件和c文件,更加模块化,之前的程序写的不规范,现在悔恨
  3. 这个课程设计考察的内容是线性表,线性链表,以及队列的综合应用,这几个知识点于我并没有难点
  4. 这个课程设计是用内存保存数据的,真正的运行应该保存在文件里面进行很多读取操作,这里根据题目要求只作为了示意
  5. 思路决定出路,一开始自己的思路并不正确,一边想要通过文件实现,另一边在进行内存操作
  6. 人需要人点拨开化,不然会跟我像独行侠一样跌跌撞撞,困苦挣扎,虽然也能最后实现目标,但时间花得相对要多,显得比较笨拙,但是记忆或许来得深刻,轻易得到的东西往往并不能深刻,这未尝不是一种办法

 代码如下:

 main.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "struct.h"
#include "Airline.h"
#include "Query.h"
#include "Booking.h"
#include "Refund.h"
int main()
{
    system("Color 1e");//系统背景颜色变化
    Today();
    AirlineReady();
    Head();
    Home();
    End();
    system("pause");
    return 0;
}

void Today()
{
    int CurYear,CurMonth,CurDay,CurDate,CurHour,CurMin,CurSec;
    time_t  T;
    time(&T);
    struct tm *Now;
    Now=localtime(&T);
    CurYear=Now->tm_year+1900;
    CurMonth=Now->tm_mon+1;
    CurDay=Now->tm_mday;
    CurDate=Now->tm_wday;
    CurHour=Now->tm_hour;
    CurMin=Now->tm_min;
    CurSec=Now->tm_sec;
    printf("\n当前时间是北京时间:");
    printf("【%d年%d月%d日星期%d   %d时%d分%d秒】\n",CurYear,CurMonth,CurDay,CurDate,CurHour,CurMin,CurSec);
    return ;
}
void Head()
{
    printf("<<<<<<<<<<---------------------------------------------------->>>>>>>>>>\n");
    printf("                欢迎使用中国航空客运订票系统                 \n");
    printf("<<<<<<<<<<---------------------------------------------------->>>>>>>>>>\n");
    printf("\n\n<<<<<<<<<<<<----功能选择---->>>>>>>>>>>>>>>\n\n");
    printf("-------------1.查询航线\n");
    printf("-------------2.客户订票\n");
    printf("-------------3.客户退票\n");
    printf("-------------0.退出系统\n\n\n");
    return;
}

void Home()
{
    while(1)
    {
        printf("请输入选择的功能:");
        int K;
        scanf("%d",&K);
        if(K!=0&&K!=1&&K!=2&&K!=3)//判读输入选择是否正确,只能是特定选择
        {
                printf("输入有误!!\n");
                continue;//输入有误需要重新输入
        }
        if(K==0)//不断循环,直到t=0退出循环
            break;
        else
            Run(K);//不退出的话就进入功能函数
    }
    return;
}
void Run(int K)//功能选择
{
   switch(K)//switch语句根据传入的值选择功能函数
   {
          case 1:    Query();break;//查询航线
          case 2:    Booking();break;//订票
          case 3:    Refund();break;//退票
   }
    return;
}
void End()                       //退出系统
{
     printf("\n\t\t>>>>>>>>Welcome back!!<<<<<<<<<\n");
     exit(0);
}

main.h头文件

#ifndef STRUCT_H_INCLUDED
#define STRUCT_H_INCLUDED
void Today();
void Head();
void Home();
void Run(int K);
void End();
#endif // STRUCT_H_INCLUDED

Query.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Query.h"
#include "Airline.h"
void  Query() //航线查询
{
    printf("\n|1.抵达地|2.起飞地|3.航班号|4.起飞日期|5.有余票|\n");
    while(1)
    {
        printf("选择查询航班的关键字:");
        int  Choose;
        scanf("%d",&Choose);
        switch(Choose)
        {
            case 1:SearchForDestination();break;
            case 2:SearchForDepature();break;
            case 3:SearchForFlightNumber();break;
            case 4:SearchForDate();break;
            case 5:SearchForTickets();break;
        }
        char Choice;
        printf("是否继续查询(Y|N):");
        scanf(" %c",&Choice);
        if(Choice=='Y')
            continue;
        else
            break;
    }
    return ;
}

void SearchForDestination()
{
    char Place[15];
    printf("请输入航班抵达点:");
    scanf("%s",Place);
    printf("出发\t\t抵达\t\t航班号\t飞机号\t日期\t时间\t头等舱\t商务舱\t经济舱\t起步价\t余票量\tDate\t\n");
    int  Count=0;
    for(int i=0;i<10;i++)
    {
        if(strcmp(Place,A[i].Destination)==0)
        {
               PrintAirline(&A[i]);
               Count++;
        }
    }
    if(Count>0)
        printf("最近一个月共有%d趟航班飞往%s\n\n",Count,Place);
    else
        printf("最近一个月没有飞往%s的航班",Place);
    return ;
}

void SearchForDepature()
{
    char Place[15];
    printf("请输入航班起飞点:");
    scanf("%s",Place);
    printf("出发\t\t抵达\t\t航班号\t飞机号\t日期\t时间\t头等舱\t商务舱\t经济舱\t起步价\t余票量\tDate\t\n");
    int  Count=0;
    for(int i=0;i<10;i++)
    {
        if(strcmp(Place,A[i].Departure)==0)
        {
               PrintAirline(&A[i]);
               Count++;
        }
    }
    if(Count>0)
        printf("最近一个月共有%d趟航班从%s出发\n\n",Count,Place);
    else
        printf("最近一个月没有从%s出发的航班",Place);
    return ;
}

void SearchForFlightNumber()
{
    char Flight[10];
    printf("请输入需要查询的航班号:");
    scanf("%s",Flight);
    printf("出发\t\t抵达\t\t航班号\t飞机号\t日期\t时间\t头等舱\t商务舱\t经济舱\t起步价\t余票量\tDate\t\n");
    int  Count=0;
    for(int i=0;i<10;i++)
    {
        if(strcmp(Flight,A[i].FlightNum)==0)
        {
               PrintAirline(&A[i]);
               Count++;
        }
    }
    if(Count>0)
        printf("最近一个月共有%d趟该航班\n\n",Count);
    else
        printf("最近一个月没有执飞的该航班");
    return ;
}
void SearchForDate()
{
    printf("请输入需要查询的日期:");
    int M,N;
    scanf("%d%d",&M,&N);
    printf("出发\t\t抵达\t\t航班号\t飞机号\t日期\t时间\t头等舱\t商务舱\t经济舱\t起步价\t余票量\tDate\t\n");
    int  Count=0;
    for(int i=0;i<10;i++)
    {
        if(M==A[i].Mon&&N==A[i].Day)
        {
               PrintAirline(&A[i]);
               Count++;
        }
    }
    if(Count>0)
        printf("%d月%d日共有%d趟航班执飞\n\n",M,N,Count);
    else
        printf("当天没有执飞的航班");
    return ;
}

void SearchForTickets()
{
    printf("出发\t\t抵达\t\t航班号\t飞机号\t日期\t时间\t头等舱\t商务舱\t经济舱\t起步价\t余票量\tDate\t\n");
    int  Count=0;
    for(int i=0;i<10;i++)
    {
        if(A[i].F>0||A[i].C>0||A[i].Y>0)
        {
               PrintAirline(&A[i]);
               Count++;
        }
    }
    if(Count>0)
        printf("还有%d趟航班有余票\n\n",Count);
    else
        printf("所有航班机票售尽");
    return;
}

Query.h

#ifndef QUERY_H_INCLUDED
#define QUERY_H_INCLUDED
void  Query();
void SearchForDestination();
void SearchForDepature();
void SearchForFlightNumber();
void SearchForDate();
void SearchForTickets();
#endif // QUERY_H_INCLUDED

Booking.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Booking.h"
void Booking()
{
    printf("<<<<<<<<<<<<<<<您正在办理订票业务>>>>>>>>>>>");
    Airline *B;
    char Flight[10];
    New:printf("\n输入航班号:");
    scanf("%s",Flight);
    printf("该航班余票情况:\n");
    printf("出发\t\t抵达\t\t航班号\t飞机号\t日期\t时间\t头等舱\t商务舱\t经济舱\t起步价\t余票量\tDate\t\n");
    int Count=0;
    for(int i=0;i<10;i++)
    {
        if(strcmp(Flight,A[i].FlightNum)==0)
        {
            B=&A[i];
            PrintAirline(B);
            Count++;
        }
    }
    if(Count>0)
    {
        if(Count==1)
        {
            if(One(B)==1);
            return;
        }
        else
        {
            if(OnePlus(Count,Flight)==1)
                return;
        }
    }
    else
        printf("最近没有该%s航班",Flight);
    printf("是否退出订票(Y|N):");
    char C;
    scanf(" %c",&C);
    if(C=='N')
        goto New;
   return;
}
int OnePlus(int Count,char Flight[])
{
        char Choice;
        printf("最近一个月有%d趟%s航班\n",Count,Flight);
        Airline *B=NULL;
        while(1)
        {
            int M,N;
            printf("请输入选择的航班日期:");
            scanf("%d%d",&M,&N);
            for(int i=0;i<10;i++)
            {
                if(strcmp(Flight,A[i].FlightNum)==0)
                {
                    if(A[i].Mon==M&&A[i].Day==N)
                    {
                        B=&A[i];
                        break;
                    }
                }
            }
            printf("%d月%d日的该航班剩余:|头等舱%d席|商务舱%d席|经济舱%d席|\n",B->Mon,B->Day,B->F,B->C,B->Y);
            printf("是否下单(Y|N):");
            scanf(" %c",&Choice);
            if(Choice=='Y')
            {
                if(PlaceOrder(B)==1)
                    return 1;
                else
                    printf("未成功订票!\n");
            }
            printf("是否愿意选择其他日期的该航班(Y|N):");
            scanf(" %c",&Choice);
            if(Choice=='Y')
                continue;
            else
                break;
        }
        return 0;
}

int One(Airline *B)
{
        printf("最近一个月只有一趟%s航班\n",B->FlightNum);
        printf("%d月%d日的该航班剩余:|头等舱%d席|商务舱%d席|经济舱%d席|\n",B->Mon,B->Day,B->F,B->C,B->Y);
        printf("是否下单(Y|N):");
        char Choice;
        scanf(" %c",&Choice);
        if(Choice=='Y')
        {
            if(PlaceOrder(B)==1)
                return 1;
            else
                printf("未成功订票!\n");
        }
        return 0;
}

void FillBlank(Client *C)
{
    printf("请输入您的姓名:");
    scanf("%s",C->Name);
    printf("请输入您的护照号码:");
    scanf("%s",C->PassPort);
    printf("请输入您的电话号码:");
    scanf("%s",C->Phone);
    printf("请输入您的性别:");
    scanf("%d",&C->Sex);
    return;
}
int PlaceOrder(Airline *B)
{
    char Choice;
    Client C;
    while(1)
    {
        int flag=0;
        printf("请输入你想预订的舱位等级:");
        scanf(" %c",&C.SpaceClass);
        switch(C.SpaceClass)
        {
            case  'F':  if(B->F==0) printf("当前以及没有头等舱席位\n");else {B->F--;flag=1;}break;
            case  'C': if(B->C==0) printf("当前以及没有商务舱席位\n");else {B->C--;flag=1;}break;
            case  'Y': if(B->C==0) printf("当前以及没有经济舱席位\n");else {B->Y--;flag=1;}break;
        }
        if(flag==1)
        {
            printf("请填写个人信息:\n");
            FillBlank(&C);
            OrderInSert(B->L,C);
            printf("您成功订票!\n");
            return 1;
        }
        else
        {
            printf("是否继续愿意登记候补(Y|N):");
            scanf(" %c",&Choice);
            if(Choice=='Y')
            {
                printf("请填写登记信息:\n");
                FillBlank(&C);
               //EnQueue(&(B->Q),C);
               printf("您目前在排队候补!\n");
               return 1;
            }
            else
            {
                printf("是否重新选择席位(Y|N):");
                scanf(" %c",&Choice);
                if(Choice=='Y')
                    continue;
                else
                    break;
          }
      }
   }
   return  0;
}

Booking.h

#ifndef BOOKING_H_INCLUDED
#define BOOKING_H_INCLUDED
#include "Airline.h"
void Booking();
int One(Airline *B);
int OnePlus(int Count,char Flight[]);
int PlaceOrder(Airline *B);
void FillBlank(Client *C);
#endif // BOOKING_H_INCLUDED

 Refund.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Refund.h"
#include "Airline.h"
#include "Booking.h"
#include "BookingList.h"
#include "WaitingQueue.h"
void Refund()
{
    printf("<<<<<<<<<<<<<<<您正在办理退票业务>>>>>>>>>>>");
    printf("\n请输入航班号:");
    char Flight[10];
    scanf("%s",Flight);
    int M,N;
    printf("请输入航班日期:");
    scanf("%d%d",&M,&N);
    Airline *B=NULL;
    for(int i=0;i<10;i++)
    {
        if(strcmp(A[i].FlightNum,Flight)==0)
        {
            if(A[i].Mon==M&&A[i].Day==N)
            {
                B=&A[i];
                break;
            }
        }
    }
    printf("请输入您的护照号码:");
    char Pass[12];
    Client C;
    while(1)
    {
        scanf("%s",Pass);
        if(Search(B->L,Pass,&C)==1)
                break;
        else
            printf("请重新输入:");
    }
    printf("是否确认退票,请输入您的姓名确认:");
    char YourName[12];
    while(1)
    {
        scanf("%s",YourName);
        if(strcmp(C.Name,YourName)==0)
        {
            printf("请您稍等!正在为您办理退票!\n");
            Delete(B->L,C);
            if(!QueueEmpty(&(B->Q)))
            {
                Client E;
                if(Check(&(B->Q),C.SpaceClass,&E)==0)
                    AirlineBack(B,C.SpaceClass);
                else
                    OrderInSert(B->L,E);
            }
            else
            {
                AirlineBack(B,C.SpaceClass);
                return;
            }
        }
        else
        {
            printf("输入错误,是否重新输入(Y\\N):");
            char Choice;
            scanf(" %c",&Choice);
            if(Choice=='Y')
            {
                printf("请重新输入:");
                continue;
            }
            else
                break;
        }
    }
    printf("未成功退票!\n");
    return;
}

Refund.h

#ifndef REFUND_H_INCLUDED
#define REFUND_H_INCLUDED
void Refund();
#endif // REFUND_H_INCLUDED

Airline.c

#include <stdio.h>
#include <stdlib.h>
#include "Airline.h"
char *X[7]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};//星期
 Airline A[10]={
                { "Hangzhou","Sydney","MU711","B737",2000,8,2,13,30,2,20,3,7,10},
             { "Shanghai ","NewYork ","CA436","A321",2500,8,3,14,20,6,30,5,0,10},
             { "Beijing","London","HU7751","C929",3000,8,10,20,30,6,20,0,5,8},
             { "Nanjing","Tokyo","ZH9045","C919",2600,8,15,22,10,4,15,0,0,0},
             { "HongKong","Hawaii","CZ6083","B747",3500,8,20,15,40,2,20,1,4,10},
             { "Beijing","Washington","CA3767","B787",4000,8,1,8,30,4,30,10,2,15},
             { "Shanghai","Paris","AK1521","A380",4500,8,5,12,30,1,50,0,0,0},
             { "Hangzhou","LosAngeles","ZU760","A310",3800,8,10,23,30,6,30,0,0,0},
             { "Guangzhou","Singapore","AK1521","C929",2000,8,8,22,10,4,20,0,0,0},
             { "Guangzhou","Munich","CA3345","C919",4000,8,29,19,40,4,25,5,0,10}
 };
Status PrintAirline(Airline *A)
{
    printf("%-8s\t%-8s\t%-s\t%-s\t",A->Departure,A->Destination,A->FlightNum,A->PlaneNum);
    printf("%-d月%-d号\t%-d:%02d\t",A->Mon,A->Day,A->Hour,A->Min);
    printf("%-d\t%-d\t%-d\t",A->F,A->C,A->Y);
    printf("%-d元\t%d\t",A->Price,A->F+A->C+A->Y);
    int i=A->Date;
    printf("%-s\t\n",X[i]);
    return  OK;
}
Status AirlineReady()
{
    for(int i=0;i<10;i++)
    {
         Create(&(A[i].L));
         InitQueue(&(A[i].Q));
    }
    return OK;
}
Status AirlineBack(Airline *B,char C)
{
    switch(C)
    {
        case 'F':B->F++;break;
        case 'C':B->C++;break;
        case 'Y':B->Y++;break;
    }
    return OK;
}

Airline.h

#ifndef AIRLINE_H_INCLUDED
#define AIRLINE_H_INCLUDED
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#include "WaitingQueue.h"
#include "BookingList.h"
typedef int Status;
typedef struct Airline{
    char Departure [15];//始发站
    char Destination[15]; //目的地
    char FlightNum[10];//航班号
    char PlaneNum[10];//飞机号
    int Price;//经济舱基础票价(头等舱价格为基础票价150%,商务舱价格为基础票价的130%)
    int Mon;
    int  Day;
    int Hour;
    int Min;
    int Date;//随机生成航班起飞日期(一般在只能提前30天售票)
    int Capacity;//载客量
    int F;
    int C;
    int Y;//各舱位的余票量
    BookingList  L;//乘客名单域
    WaitingQueue Q;//等候替补队列
}Airline;//一条航线的舱位中有0.1的头等舱,0.2的商务舱,其余为经济舱
extern Airline A[10];
Status PrintAirline(Airline *A);
Status AirlineReady();
Status AirlineBack(Airline *B,char C);
#endif // AIRLINE_H_INCLUDED

Client.h

#ifndef CLIENT_H_INCLUDED
#define CLIENT_H_INCLUDED
typedef struct Passenger{
    char Name [12]; //乘客姓名
    char PassPort [12];//乘客护照号
    char Phone [12];//乘客电话
    char SpaceClass;//舱位等级 F头等舱 C商务舱 Y经济舱
    int Sex;//性别 1表示男性 0表示女性
}Client;//乘客结构体
#endif // CLIENT_H_INCLUDED

BookingList.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "BookingList.h"
Status Create(BookingList *B)
{
    (*B)=(BookingList)malloc(sizeof(PNode));
    (*B)->next=NULL;
    return OK;
}

Status OrderInSert(BookingList B,Client P)
{
    BookingList L=B;
    while(L->next!=NULL)
    {
        BookingList Q=L->next;
        if(strcmp(Q->P.Name,P.Name)<0)
            L=L->next;
        else
            break;
    }
    BookingList S=(BookingList)malloc(sizeof(PNode));
    S->P=P;
    S->next=L->next;
    L->next=S;
    return OK;
}
Status  Search(BookingList H,char Pass[],Client *C)
{
    BookingList L=H->next;
    int flag=0;
    while(L!=NULL)
    {
        if(strcmp(L->P.PassPort,Pass)==0)
        {
            *C=L->P;
            flag=1;
            break;
        }
    }
    if(flag==0)
    {
            printf("该航班没有该护照的订票信息!");
            return ERROR;
    }
    return OK;
}

Status Delete(BookingList H,Client C)
{
    BookingList L=H;
    while(L->next!=NULL)
    {
        BookingList Q=L->next;
        Client P=Q->P;
        if(strcmp(C.PassPort,P.PassPort)==0&&strcmp(C.Name,P.Name)==0)
        {
            L->next=Q->next;
            free(Q);
            printf("成功办理退票!\n");
            break;
        }
        L=L->next;
    }
    return OK;
}

BookingList.h

#ifndef BOOKINGLIST_H_INCLUDED
#define BOOKINGLIST_H_INCLUDED
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#include "Client.h"
typedef int Status;
typedef struct PNode{
    Client P;
    struct PNode *next;
}PNode,*BookingList;
Status Create(BookingList *B);
Status OrderInSert(BookingList B,Client P);
Status  Search(BookingList H,char Pass[],Client *C);
Status Delete(BookingList H,Client C);
#endif // BOOKINGLIST_H_INCLUDED

WaitingQueue.c

#include <stdio.h>
#include <stdlib.h>
#include "WaitingQueue.h"
#include "BookingList.h"
Status InitQueue(WaitingQueue *Q)
{
    Q->front=(ClientPtr)malloc(1*sizeof(CNode));
    if(!Q->front)
        exit(OVERFLOW);
    Q->rear=Q->front;
    Q->front->next=NULL;
    return OK;
}//客户进入队列

Status EnQueue(WaitingQueue*Q,Client E)
{
    ClientPtr New=(ClientPtr)malloc(sizeof(CNode));
    if(!New)
        exit(OVERFLOW);
    New->C=E;
    New->next=NULL;
    Q->rear->next=New;
    Q->rear=New;
    return OK;
}
//客户出队列
Status DeQueue(WaitingQueue *Q,Client *E)
{
    if(Q->front==Q->rear)
        return ERROR;
    ClientPtr Head=Q->front->next;
    *E=Head->C;
    Q->front->next=Head->next;
    if(Q->rear==Head)
        Q->rear=Q->front;
    free(Head);
    return OK;
}

Status DestroyQueue(WaitingQueue *Q)
{
    while(Q->front)
    {
        Q->rear=Q->front->next;
        free(Q->front);
        Q->front=Q->rear;
    }
    return OK;
}
Status QueueHead(WaitingQueue *Q,Client *D)
{
     if(Q->front==Q->rear)
        return ERROR;
    ClientPtr Head=Q->front->next;
    *D=Head->C;
    return OK;
}
Status QueueEmpty(WaitingQueue *Q)
{
    if(Q->front==Q->rear)
        return TURE;
    return FALSE;
}
Status Check(WaitingQueue *Q,char Space,Client *E)
{
    WaitingQueue W;
    InitQueue(&W);
    int flag=0;
    while(!QueueEmpty(Q))
    {
        Client C;
        DeQueue(Q,&C);
        if(C.SpaceClass==Space)
        {
            *E=C;
            flag=1;
            Space='\0';
        }
        else
            EnQueue(&W,C);
    }
    *Q=W;
    if(flag==0)
        return ERROR;
    return OK;
}

WaitingQueue.h

#ifndef WAITINGQUEUE_H_INCLUDED
#define WAITINGQUEUE_H_INCLUDED
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#include "Client.h"
typedef int Status;
typedef struct CNode{
    Client C;
    struct CNode *next;
}CNode,*ClientPtr;

//队列结构体
typedef struct{
    ClientPtr front;
    ClientPtr  rear;
}WaitingQueue;

Status InitQueue(WaitingQueue *Q);
Status EnQueue(WaitingQueue*Q,Client E);
Status DeQueue(WaitingQueue *Q,Client *E);
Status DestroyQueue(WaitingQueue *Q);
Status QueueHead(WaitingQueue *Q,Client *D);
Status QueueEmpty(WaitingQueue *Q);
Status Check(WaitingQueue *Q,char Space,Client *E);
#endif // WAITINGQUEUE_H_INCLUDED

首先给大家看我的这个工程的文件布局:

  • 由图可以看出每一个.C文件都有几乎对应同名的.h文件
  • Client.h是一个需要公用的结构体
  • 所有的头文件和源文件都应当包含在工程内

规范化的书写方式应当为:

  1. .h文件中主要是.C中所实现了的函数的声明,变量的声明,宏定义,结构体类型  .C文件中主要是函数和变量的定义
  2. 在.C文件中include 相应的同名的.h文件,避免.C中函数顺序带来的影响。因为C语言规定在甲函数调用乙函数时,乙函数必须在甲函数前有定义或者声明。
  3. 甲.C文件需要用到乙.C文件中的函数时需要 在甲.C中include "乙.h"文件才能调用
  4. .h文件就像是一个管子,在定义函数的.C文件中和调用这个函数的.C文件中都应该Include,这个include就像是连接出水口和管子以及 用水口和管子的接口,而函数调用的过程就像是引水,你在不同的.C文件中通过include "xxx.h"调用里面声明的函数就像是 从出水口引出不同的管子到数个用水口!够形象了吧!
  5. .c中如果要定义全局变量,则在其.h中声明中加关键字extern ,函数都是默认为extern全局的

看一下运行结果示意一下操作吧:可以看出在经过订票操作后航班余票减1,退票操作余票后加1。

 

写在最后的总结:

有大部分注释没有,现在是深夜我有点累!可能以后会更新,如果有困惑记得联系我!1594047159@qq.com

其实有没有人看并没有关系,重要的是这是我最近的努力的产出,知识的输出和总结,在于自己,而不在于他人,共勉!

  • 39
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
问题描述:航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。 (1) 每条航线所设计的信息有:终点站名、航班、航班号、飞机号、飞行周日(星期几)、成员定额、余票量。已订票的客户名单(包括姓名、订票量、舱位等级1.2.3)以及等候替补的客户名单(包括姓名,所需票量); (2) 作为示意系统,全部数据可以只放在内存中; (3) 系统能实现的操作和功能如下: ① 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额。 ② 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需要重新询问客户要求,若需要,可登记排队候补 ③ 承办退票业务:根据客户提供的情况(日期。航班)为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则,依次询问其他排队候补的客户。 (4) 测试数据 (5) 选做内容,当客户所要订的航班票额不足的时候,系统会根据目的地,输出目的地相同的航线,询问客户是否要订票。 完美代码+完美课设报告+可执行文件(编译软件wintc)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值