简易飞机订票系统实现(C语言)

本文描述了一个航班信息管理和顾客订票的程序,包括管理员的功能(如航班添加、删除、查看订票信息)和用户功能(查看航班、购票、退票)。程序使用C语言实现,涉及航班信息结构、日期和时间处理以及订单管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该程序实现航班信息的管理和顾客订票功能,分管理员和顾客两种角色。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
 
/*************************************************************************/
/* 登陆分管理员和用户                                                    */
/* 管理员功能:                                                          */ 
/*            1.管理航班信息(如增加、删除、修改航班信息)               */
/*            2.查看订票信息(如查看所有航班的售票情况、查询某次航班信息)*/
/* 用户功能:                                                            */
/*            1.查看所有航班信息(根据航班号、出发地、目的地等)         */
/*            2.订票                                                     */
/*            3.退票                                                     */
/*************************************************************************/
 
//机票实际上应够由航班号、日期来共同确定其唯一性,这里为了简便,不再做具体处理
 
 
 
//定义日期结构体
struct Date
{
    int year;
    int month;
    int day;
};
 
//定义时间
struct StTime 
{
    int hour;
    int mint;
    int sec;
};
 
 
//定义购票信息结构体
struct StTickInfo
{
    char id[16];     //订单号(根据时间生成,或者随机生成,这里这个这个字段可以没有,实际系统中肯定是要有的)
    Date date;       //订票日期
    char hangban[16];//航班号,通过航班号,可以查询航班信息
    char guest[20];  //订票人名
    char guId[20];   //订票人身份证号
    char phone[12];  //订票人电话
};
 
//航班信息
struct StHangbanInfo 
{
    char hangban[16];//航班号
    char name[16];   //航空公司名称
    char src[16];    //出发地
    char dst[16];    //目的地
    Date date;       //航班日期
    StTime tm;       //起飞时间
    int nmbZw;       //座位数量
    int nmbUse;      //已售票数
    int price;       //票价
};
 
//定义全局变量,管理航班和订票信息
struct StHangbanInfo g_allHb[100]; //保存当前所有航班信息
int g_nmbHb=0; //实际航班数量
 
struct StTickInfo g_allTicks[200]; //保存当前所有的订单信息
int g_nmbTicks=0; //当前系统中实际购票数量
 
//根据航班号查询航班信息
struct StHangbanInfo searchById(char* id)
{
    int i;
    struct StHangbanInfo stnull;
    memset(&stnull.hangban,0,16);
    for (i=0;i<g_nmbHb;i++)
    {
        if(strcmp(g_allHb[i].hangban,id)==0)
            return g_allHb[i];
    }
    printf("未找到航班信息\n");
    return stnull;
}
 
//根据时间生成订单编号
void getId(char buf[])
{
    time_t t;
    struct tm * lt;
    time (&t);//获取时间戳
    lt = localtime (&t);//转为时间结构
    //sprintf不安全,可以更换为sprintf_s
    sprintf(buf,"%d%02d/%02d%02d%02d%02d",lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);//输出结果
}
 
//获取当前时间
struct Date getCurrentDate()
{
    Date oo;
    time_t t;
    struct tm * lt;
    time (&t);//获取时间戳
    lt = localtime (&t);//转为时间结构
    //sprintf不安全,可以更换为sprintf_s
    //sprintf(buf,"%d%02d/%02d%02d%02d%02d",lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);//输出结果
    oo.year = lt->tm_year+1900;
    oo.month = lt->tm_mon;
    oo.day = lt->tm_mday;
    return oo;
}
 
//显示航班信息标题
void showHbTitle()
{
    printf("航班号  航空公司  起始地  目的地  起飞日期及时间  价格  座位数  剩余票数\n");
}
 
//显示单条航班信息
void showSingleHbInfo(struct StHangbanInfo st)
{
    printf("%s  %s  %s  %s  %d-%02d-%02d %02d:%02d  %d  %d  %d\n",st.hangban,st.name,st.src,st.dst,
        st.date.year,st.date.month,st.date.day,st.tm.hour,st.tm.mint,st.price,st.nmbZw,st.nmbZw-st.nmbUse);
}
 
//查询航班-管理员和用户通用
void search()
{
    int opt,i;
    char ch;
    char id[16]={0};
    char start[16]={0},end[16]={0};
    struct StHangbanInfo hb;
    int nmb=0;
    system("cls");
    if(g_nmbHb==0)
    {
        printf("目前暂无航班信息,请先添加航班\n");
        system("pause");
        return;
    }
    while (1)
    {
        system("cls");
        printf("1.根据航班号查询\n");
        printf("2.根据出发地、目的地查询\n");
        while(1)
        {
            scanf("%d",&opt);
            if(opt ==1 || opt ==2) break;
        }
        fflush(stdin); //清空输入缓存
        switch(opt)
        {
        case 1:
            printf("请输入航班号:");
            scanf("%s",id);
            hb = searchById(id);
            if(strlen(hb.hangban) > 0)
            {
                showHbTitle();
                showSingleHbInfo(hb);
            }
            break;
        case 2:
            printf("请输入起始地、目的地:");
            scanf("%s %s",start,end);
            showHbTitle();
            for (i=0;i<g_nmbHb;i++)
            {
                if(strcmp(g_allHb[i].src,start)==0 && strcmp(g_allHb[i].dst,end)==0)
                    showSingleHbInfo(g_allHb[i]);
            }
            break;
        }
        printf("是否继续查询(Y/N)?");
        fflush(stdin);
        ch = getchar();
        if(ch=='N' || ch=='n')
            break;
    }
 
}
 
 
//----------------管理员功能------------------//
//新增航班
void addHangban()
{
    struct StHangbanInfo st;
    system("cls");
    fflush(stdin);
    printf("请输入航班号:");
    scanf("%s",st.hangban);
    printf("请输入航班公司名称:");
    scanf("%s",st.name);
    printf("请输入起始地:");
    scanf("%s",st.src);
    printf("请输入目的地:");
    scanf("%s",st.dst);
    printf("请输入起飞日期(YYYY-M-D):");
    scanf("%d-%d-%d",&st.date.year,&st.date.month,&st.date.day);
    printf("请输入起飞时间(H:M):");
    scanf("%d:%d",&st.tm.hour,&st.tm.mint);
    printf("请输入票价:"); //这里不再区分头等舱和经济舱
    scanf("%d",&st.price);
    printf("请输入座位数量:");
    scanf("%d",&st.nmbZw);
    st.nmbUse = 0;
    g_allHb[g_nmbHb++] = st; //保存数据
    printf("添加航班成功\n");
    system("pause");
}
 
 
//从订单信息中删除某航班的所有订票信息
void delSpecHb(char* id)
{
    int i,j;
    for (i=0;i<g_nmbTicks;i++)
    {
        if(strcmp(g_allTicks[i].hangban,id)==0)
        {
            for(j=i;j<g_nmbTicks-1;j++)
            {
                g_allTicks[j] = g_allTicks[j-1];
            }
            g_nmbTicks--;
            i--; //i回退一下,for循环i++后,仍指向该删除元素的位置,并开始判断
        }
    }
}
 
 
//删除航班(航班也需要从订票信息中删除)
void delHb()
{
    int i;
    char id[16]={0};
    fflush(stdin);
    system("cls");
    printf("请输入要删除的航班号:");
    scanf("%s",id);
    for (i=0;i<g_nmbHb;i++)
    {
        if (strcmp(id,g_allHb[i].hangban)==0)
        {
            //从订票信息中删除该航班的所有订票信息(退费、短信通知等功能这里就不写了)
            delSpecHb(g_allHb[i].hangban);
            printf("删除成功\n");
            g_nmbHb--;
            system("pause");
            return ;
        }
    }
    printf("未找到该航班号\n");
    system("pause");
}
 
 
//管理员功能入口
void deal_manager()
{
    int opt;
    while(1)
    {
        system("cls");
        printf("1.查询航班\n");
        printf("2.添加航班\n");
        printf("3.删除航班\n");
        printf("4.退出\n");
        printf("请选择:");
        scanf("%d",&opt);
        switch(opt)
        {
        case 1:
            search();
            break;
        case 2:
            addHangban();
            break;
        case 3:
            delHb();
            break;
        case 4:
            return;
        }
    }
}
 
 
//----------------客户功能------------------//
//购票
void gouPiao()
{
    struct StTickInfo tk;
    int i,flag=0;
 
    system("cls");
    fflush(stdin);
    printf("请输入航班号:");
    while(1)
    {
        scanf("%s",tk.hangban);
        //这里最好对航班进行处理,比如查看航班是否存在,票是否已经售完
        for (i=0;i<g_nmbHb;i++)
        {
            if (strcmp(g_allHb[i].hangban,tk.hangban)==0 )
            {
                if( g_allHb[i].nmbZw-g_allHb[i].nmbUse == 0)
                    flag = 1;
                break;
            }
        }
        if(i==g_nmbHb)
        {
            printf("未找到该航班,请重新输入航班号:");
        }else
        {
            if(flag==1)
                printf("该航班机票已售罄,请选择其他航班:\n");
            else
            {
                g_allHb[i].nmbUse+=1; //将该航班的已售票数+1
                break;
            }
        }
 
    }
 
    printf("请输入订票人姓名"); 
    scanf("%s",tk.guest);
    printf("请输入订票人身份证号:");
    scanf("%s",tk.guId);
    printf("请输入订票人手机号:");
    scanf("%s",tk.phone);
    //生成订单号
    getId(tk.id);
    //填充购票时间
    tk.date = getCurrentDate();
    //保存
    g_allTicks[g_nmbTicks++] = tk;
    printf("购票成功\n");
    system("pause");
}
//退票(通过身份证退票,限定一人只能买一张票)
void tuiPiao()
{
    char buf[16];
    int i,j;
    fflush(stdin);
    printf("请输入退票人的身份证号:");
    scanf("%s",buf);
    for (i=0;i<g_nmbTicks;i++)
    {
        if(strcmp(g_allTicks[i].guId,buf)==0)
        {
            //修改该航班的已售票数
            for (j=0;j<g_nmbHb;j++)
            {
                if(strcmp(g_allHb[j].hangban,g_allTicks[i].hangban)==0)
                {
                    g_allHb[j].nmbUse-=1;
                    break;
                }
            }
            //删除该订票信息
            for (j=i;j<g_nmbTicks-1;j++)
            {
                g_allTicks[j] = g_allTicks[j+1];
            }
            g_nmbTicks--;
            printf("退票成功\n");
            break;
        }
    }
    if(i==g_nmbTicks)
        printf("没有此人的购票信息\n");
    system("pause");
}
//客户功能入口
void deal_customer()
{
    int opt;
    while(1)
    {
        system("cls");
        printf("1.查询航班\n");
        printf("2.购票\n");
        printf("3.退票\n");
        printf("4.退出\n");
        printf("请选择:");
        scanf("%d",&opt);
        switch(opt)
        {
        case 1:
            search();
            break;
        case 2:
            gouPiao();
            break;
        case 3:
            tuiPiao();
            break;
        case 4:
            return;
        }
    }
}
 
 
 
 
int main(void)
{
    int opt;
    while(1)
    {
        system("cls");
        printf("----------订票管理系统-----------------|\n");
        printf("|         1.管理员登陆                 |\n");
        printf("|         2.客户登陆                   |\n");
        printf("|         9.退出系统                   |\n");
        printf("---------------------------------------|\n");
        printf("请选择:");
        scanf("%d",&opt);
        switch(opt)
        {
        case 1:
            deal_manager();
            break;
        case 2:
            deal_customer();
            break;
        case 9:
            return 0;
        }
    }
 
    return 0;
}
 
 

课程设计 航空订票系统,共44页,9150字。    目录    一、 航空订票系统………………………………………………………………2.    需求分析…………………………………………………………………2.    概要设计…………………………………………………………………2.    详细设计…………………………………………………………………8.    调试分析…………………………………………………………………20.    二、运动会分数统计 ……………………………………………………………25.    需求分析…………………………………………………………………26.    概要设计…………………………………………………………………26.    详细设计…………………………………………………………………29.    调试分析…………………………………………………………………35.    三、 参考资料……………………………………………………………………44.    四、 心得总结……………………………………………………………………44.       设计内容    1、 订票系统    任务:通过此系统可以实现如下功能:    录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)    查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);    可以输入起飞抵达城市,查询飞机航班情况;    订票:(订票情况可以存在一个数据文件中,结构自己设定)    可以订票,如果该航班已经无票,可以提供相关可选择航班;    退票: 可退票,退票后修改相关数据文件;    客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。    修改航班信息:当航班信息改变可以修改航班数据文件
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值