C语言—航班订票系统

   航空订票系统

第一章  绪    论

任务:通过此系统可以实现如下功能:

1)、录入:

可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)

2)、查询:

可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);

可以输入起飞抵达城市,查询飞机航班情况;

3)、订票:(订票情况可以存在一个数据文件中,结构自己设定)

可以订票,如果该航班已经无票,可以提供相关可选择航班;

4)、退票: 可退票,退票后修改相关数据文件;

客户资料有姓名,证件号,订票数量及航班情况,订单要有编号(不能重复)。

5)、修改航班信息:

当航班信息改变可以修改航班数据文件

要求:

根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

存储结构:学生自己根据系统功能要求自己设计。请在最后的上交资料中指明你用到的存储结构;

测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;

第二章  航空订票系统的需求分析

功能需求

 功能模块图

本系统的主要的功能包括:

1、航班信息录入功能(航班信息用文件保存)

      包括航班号、起始站、终点站、机票数等;

   2、航班信息浏览功能;

   3、按航班号排序;

   4、查询航线:按航班号查询;

   5、订票和退票业务 。

功能模块图如下图2-1所示:

航空订票系统

录入航班信息

以链表形式存储航班信息

修改航班信息

查询航班信息

办理定票业务

办理退票业务

#TODO   

 

图2-1 功能模块图

  录入航班信息功能

航班的基本信息,对它们输入后,要存进原文件再用户输入完成后,程序会询问是否继续输入,这个功能更具人性化,可以省去返回到主函数在进入这个函数的麻烦。

  存储航班信息功能

单用户输入航班信息后该功能自动存储航班信息,以备用户查询调用。

 修改航班信息功能

当用户需要修改航班信息时,可以选择需要修改的航班号,然后再重新输入航班的详细信息。

查询航班信息功能

基本信息的查询按查询可供选择的方式比较丰富,可按航班号查询,也可以按出发地降落地查询。

 订票功能

在该功能模块中输入需要订票的航班。然后在输入乘客的各种信息,比如:姓名,证件号,订票数,航班号等。并且该功能可以自动给定好的票标识订单号。

 退票功能

在该功能中,程序代码原理和订票系统相类似,退票时要求客户输入姓名,证件号以及航班号。当客户信息的票存在时则显示退票成功,否则则显示“该顾客信息不存在,单击任意键退出”。

 退出系统功能

当用户希望结束程序时,只需要返回操作界面选择该功能即可退出程序。

    非功能需求

要求系统界面美观﹑易于操作和升级,能够承受大规模的数据库操作,执行效率高,尽可能降低内存消耗。

第三章  关键技术

 C语言

C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出。1978后,C语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。

  链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。

第四章  航空订票系统的设计

 系统流程图

系统流程图(System Flowchart)是描绘系统物理模型的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文件、数据库、表格、人工过程等),表达信息在各个部件之间流动的情况。

 航班信息录入流程图

输入航班信息,程序自动存储信息,并且会弹出是否需要继续输入航班,是按Y继续输入,否则按任意键返回主菜单。如图4-1所示。

主菜单

是否为Y

输入航班信息

存储航班信息

输入选择

#TODO   

                                 图 4-1

 修改航班信息流程图

在主页面选择修改航班信息,选择航班号,错误时显示航班不存在,正确则输入新的航班信息,并且系统提示修改成功。如图4-2所示。

主菜单

输入航班信息

存储航班信息

是否有该航班

没有该航班

修改成功

输入航班号

#TODO   

                                  图 4-2

 查询航班信息流程图

从主界面选择进入该模块,会有俩种查询方式,分别为航班号查询方式及起始地查询方式,选择一种查询,若无相应的航班信息则弹出无该航班,否则弹出该航班详细信息。如图4-3所示。

主菜单

请输入选择

输入数是?

按地址查询

输入航班号

输入起始地

输出航班信息

按航班号查询

#TODO   

                             图 4-3

 订票流程图

从主界面进入订票模块,输入客户信息姓名,证件号,订票数然后再输入航班号,如果该航班不存在则会显示是否继续订票,输入Y则可继续订票,并输入客户信息;输入其他字符则返回主菜单界面。如图4-4所示。

                          

                                                  

主菜单

输入客户信息及航班号

航班存在?

成功订票

航班不存在

是否继续

输入选择

是否为Y?

输入客户信息及航班号

#TODO   

                              图 4 -4                                                             

 退票流程图

进入该退票模块,输入客户信息,系统分析有无该信息,若有,则弹出退票成功;如果无该信息怎显示“该客户信息不存在”,回到主菜单。如图4-5所示。

主菜单

姓名

存在该信息?

证件号

订单号

不存在

退票成功

#TODO   

                           图4-5

第五章  航空订票系统的实现

客户订票事件的实现

void dingpiao()   //订票

{

    long length=0;

    p_inf * head_p=NULL;

    c_inf *p, *p1, *head_c;

    char choice;

    FILE * fp; // fp是顾客信息文件指针

    head_p=read_p(); //读取航班信息文件并初始化链表

    if(head_p==NULL)

    {

        return;

    }

    head_c=read_c(); //读取顾客信息文件并初始化链表

    p1=head_c;

   

    if((fp=fopen("d:\\customer.dat","ab"))==NULL)  /*打开顾客信息文件*/

    {

        fp=fopen("d:\\customer.dat","wb");

    }

    else

    {

        if(p1!=NULL)

        {

            while(p1!=NULL) //找出最后一个结点

            {

                p1=p1->next;

                length++;

            }

        }

    }

    do

    {

        printf("请输入订票者信息,各项内容之间以空格键分开\n\n");

        printf("姓名,证件号,数量,航班号\n");

        p=(c_inf *)malloc(sizeof(c_inf));

        fflush(stdin); //清除系统缓冲区

        scanf("%s%d%d%d",CS);

        p->numb_ord=length+1;

        if(xg_hb(p->numb_p,p->amount_t,head_p))//实现对航班信息链表的修改

        {

            length++;

            printf("**************************************************************");

            printf("提示:您已成功订票\n订单号是:%d",p->numb_ord);

            printf("\n************************************************************");

            fwrite(p,sizeof(c_inf),1,fp);

        }

        else

        {

            free(p);

        }

        printf("\n继续订票请输入Y,否则返回上一级菜单\n");

        fflush(stdin);

        choice=getch();

    }while(choice=='Y');

    fclose(fp);

    write_p(head_p); //将修改后的航班信息链表写入到航班信息文件中

    free_p(head_p);

    free_c(head_c);

}

客户退票事件的实现

void tuipiao()  //退票

{

    char name[20];

    int numb_ord, numb_id;

    p_inf *head_p, *p_p;

    c_inf *head_c, *p_c, *p1_c=NULL;

    head_p=read_p();

    head_c=read_c();

    p_p=head_p;

    p_c=head_c;

    if(p_c==NULL)

    {

        printf("单击任意键退出");

        getch();

        return;

    }

    printf("请输入客户姓名:\n");

    scanf("%s",name);

    printf("请输入证件号:\n");

    scanf("%d",&numb_id);

    printf("请输入订单号:\n");

    scanf("%d",&numb_ord);

    while(p_c!=NULL)

    {

        if(strcmp(name, p_c->name)==0&&numb_ord==p_c->numb_ord&&p_c->numb_id

==numb_id)

        {

            break;

        }

        p1_c=p_c;

        p_c=p_c->next;

    }

    if(p_c==NULL)

    {

        printf("该顾客信息不存在,单击任意键退出");

        getch();

    }

    else // 将链表信息重新写到文件中

    {

        while(p_p!=NULL)

        {

            if(p_p->number==p_c->numb_p)

            {

                break;

            }

            p_p=p_p->next;

        }

        write_p(head_p);

        write_c(head_c);

        printf("退票成功,单击任意键退出");

        getch();

    }

    free_p(head_p);

    free_c(head_c);

    //system("cls");

}

 系统界面的实现

 系统登录界面

                         #TODO   

                                    

 系统录入航班信息页面

#TODO   

                                   

在该实验中输入的航班信息为:

航班号  起飞时间  抵达时间   始发地  目的地  票价  折扣  座位总数  剩余票数

1234     12:30   14:25     枫林     广兰   1200   3      120       34

 系统修改航班信息页面

    修改后的航班信息如下:

航班号  起飞时间  抵达时间   始发地  目的地  票价  折扣  座位总数  剩余票数

1234     09:20   12:20    枫林     广兰  1200   3      120       34

 系统查询航班信息页面

在本实验中选择的是航班号查询航班信息,查询的航班号是:1234

#TODO                     

系统订票页面

#TODO   

                                     

在试验中输入的客户信息是:

姓名              证件号             票数       航班号

cga           342427199811132354        1         1234

系统退票页面

#TODO              

在实验中输入的信息为:

姓名              证件号             订单号

cga           342427199811132354         3

总结

在近半个月的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很多问题。经过这次实习,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序语言的规范性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。 

你可能感兴趣的:(c语言,开发语言)