航空订票系统课程设计说明书

更新时间:2023-05-12 01:59:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

航空订票系统课程设计说明书

闽江学院

课程设计说明书

题目: 订票系统

院 系: 计算机科学系

专业班级: 学 号: 学生姓名:

指导教师: 2008 年 12月 27日

航空订票系统课程设计说明书

闽江学院课程设计(论文)任务书

计算机科学 院系 软件 教研室

航空订票系统课程设计说明书

2008年 12 月28日

一、问题分析和任务定义

1.航空客运订票的业务包括:查询航班、客票订购和办理退票等。所设计航空

客运订票系统,使上述业务可以借助计算机完成。

2.演示程序以用户和计算机的对话方式执行,本系统能够实现对航班信息的输

入、输出、保存、读取、查询和删除以及订票、退票和修改的信息。

3.系统整体框架图:

4.项目实现的功能:

(1)查询:可以查询航班情况及订票客户情况(数据可以存储在一个数据文

件中,数据结构、具体数据自定)

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

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

客户资料有姓名、订票数量及所订航班号,订单有编号。

(4)修改航班信息:当航班信息改变可以修改航班数据文件

二、概要设计

(1)主程序,其中主函数为:

void main(){ 进入主界面 };

主界面有航班查询、客户查询、订票、退票及修改航班信息可供选择。

(2)航班结构

typedef struct Flight {

航空订票系统课程设计说明书

char flightNo[NUMLENGTH]; //航班号----关键字 char start[PLACELENGTH]; //起点

char end[PLACELENGTH]; //终点

int price; //票价

int capacity; //载客量

int currently; //当前乘客数 }Flight; };

(3)客户结构

typedef struct Passenger {

int bookNo; //订票编号----关键字 char name[NAMELENGTH]; //客户姓名

char flightNo[NUMLENGTH]; //航班号

int tickets; //订票数量

}Passenger;

(4)节点及链表

1、航班节点

typedef struct FlightNode { //航班节点

Flight data; //数据,保存航班信息 struct FlightNode *next; //指向下一个航班节点; }FlightNode, *ptrFlightNode;

2、客户节点

typedef struct PassengerNode {

Passenger data; //数据,保存客户信息 struct PassengerNode *next; //指向下一个客户节点 }PassengerNode, *ptrPassengerNode;

3、航班链表

typedef struct FlightLinkList{

ptrFlightNode head; //头指针,指向一个航班节点,头指针不存储数据

ptrFlightNode tail; //尾指针,指向链表中最后一个节点

int length; //保存当前航班总数量 }FlightLinkList;

4、客户链表

typedef struct PassengerLinkList{

ptrPassengerNode head; //头指针,指向一个客户节点,头指针不存储数据

ptrPassengerNode tail; //尾指针,指向链表中最后一个节点

int length; //保存当前客户总数量

int bookNoCur; //指示下一个客户编号,只能递增 }PassengerLinkList;

三、详细设计

航空订票系统课程设计说明书

功能实现

ptrFlightNode GetNewFlightNode(Flight); //产生一个新航班 ptrPassengerNode GetNewPassengerNode(Passenger); //产生一个新客户

bool FlightInit(FlightLinkList &); //初始化航班链表

bool PassengerInit(PassengerLinkList &); //初始化客户链表

bool FlightDestroy(FlightLinkList &); //销毁航班链表

bool PassengerDestroy(PassengerLinkList &); //销毁客户链表

bool FlightClear(FlightLinkList &); //清空航班列表

bool PassengerClear(PassengerLinkList &); //清空客户链表

int FlightLength(FlightLinkList); //返回航班数量

int PassengerLength(PassengerLinkList); //返回客户数量

bool FlightEmpty(FlightLinkList); //判断是否没有航班

bool PassengerEmpty(PassengerLinkList); //判断是否没有客户

bool FlightInsert(FlightLinkList &, ptrFlightNode); //增加一个航班节点

bool PassengerInsert(PassengerLinkList &, ptrPassengerNode); //增加一个客户节点

ptrFlightNode FlightLocate(FlightLinkList, Flight); //在航班链表中定位符合条件的节点

ptrPassengerNode PassengerLocate(PassengerLinkList, Passenger); //在客户链表中定位符号条件的节点

bool FlightDelete(FlightLinkList &, ptrFlightNode); //在航班链表中删除一个节点

bool PassengerDelete(PassengerLinkList &, ptrPassengerNode); //在客户链表中删除一个节点

bool FlightTraver(FlightLinkList, bool (*visite)(ptrFlightNode, FILE* fp = stdout), FILE* fp = stdout); //遍历航班链表

bool PassengerTraver(PassengerLinkList, bool (*visite)(ptrPassengerNode, FILE* fp = stdout), FILE* fp = stdout);//遍历客户链表

bool FlightPrint(ptrFlightNode, FILE *fp = stdout); //打印一个航班记录

bool PassengerPrint(ptrPassengerNode, FILE *fp = stdout); //打印一个客户记录

航空订票系统课程设计说明书

bool FlightShowAll(FlightLinkList); //显示所以航班记录 bool PassengerShowAll(PassengerLinkList); //显示所以客户记录

bool FlightSaveAsText(FlightLinkList); //保存航班到文件中

bool PassengerSaveAsText(PassengerLinkList); //保存客户到文件中

bool FlightLoad(FlightLinkList &); //从文件中读取航班记录 bool PassengerLoad(PassengerLinkList &); //从文件中读取客户记录

bool GetRemain(FlightLinkList &, PassengerLinkList); //获取剩余票数

//bool GetPerRemain(Flight &, PassengerLinkList); //获取没个航班剩余票数

部分伪码如下:

bool FlightLoad(FlightLinkList &FL){

//从文件中读取航班记录

FILE *fp = fopen("Flight.txt", "r");

if(fp == NULL) exit(1);

FlightInit(FL);

Flight tempData;

ptrFlightNode tempNode;

while(fscanf(fp, "%s%s%s%d%d%d",

tempData.flightNo,

tempData.start,

tempData.end,

&tempData.price,

&tempData.capacity,

&tempData.currently) !=EOF)

{//读取记录、创建节点、链接到表中

tempNode = GetNewFlightNode(tempData);

FlightInsert(FL, tempNode);

}

fclose(fp);

return true;

}

bool PassengerLoad(PassengerLinkList &PL){

//从文件中读取客户记录

FILE *fp = fopen("Passenger.txt", "r");

if (fp == NULL) exit(1);

PassengerInit(PL);

Passenger tempData;

ptrPassengerNode tempNode;

while (fscanf(fp, "%d%s%s%d",

&tempData.bookNo,

,

航空订票系统课程设计说明书

tempData.flightNo,

&tempData.tickets) != EOF)

{//读取记录、创建节点、链接到表中

tempNode = GetNewPassengerNode(tempData); PassengerInsert(PL, tempNode);

}

fclose(fp);

return true;

}

bool PassengerLoad(PassengerLinkList &PL){

//从文件中读取客户记录

FILE *fp = fopen("Passenger.txt", "r");

if (fp == NULL) exit(1);

PassengerInit(PL);

Passenger tempData;

ptrPassengerNode tempNode;

while (fscanf(fp, "%d%s%s%d",

&tempData.bookNo,

,

tempData.flightNo,

&tempData.tickets) != EOF)

{//读取记录、创建节点、链接到表中

tempNode = GetNewPassengerNode(tempData); PassengerInsert(PL, tempNode);

}

fclose(fp);

return true;

}

bool GetRemain(FlightLinkList &FL, PassengerLinkList PL){

//获取剩余票数

ptrFlightNode tempPtrFlight = FL.head;

while (tempPtrFlight->next != NULL)

{

tempPtrFlight = tempPtrFlight->next;

tempPtrFlight->data.currently = 0;

ptrPassengerNode tempPtrPassenger = PL.head; while (tempPtrPassenger->next != NULL)

{

tempPtrPassenger =

tempPtrPassenger->next;

if

(strcmp(tempPtrFlight->data.flightNo, tempPtrPassenger->data.flightNo) == 0) { tempPtrFlight->data.currently +=

航空订票系统课程设计说明书

tempPtrPassenger->data.tickets;

}

}

}

FlightSaveAsText(FL);

PassengerSaveAsText(PL);

return true;

}

四、程序调试与测试

程序调试另外用了些代码,以方便出现问题找出错误的所在

部分代码如下:

FlightInit(FL);

测试数据 Load

FlightLoad(FL);

PassengerLoad(PL);

PassengerInit(PL);

测试数据,测试clearList 和 destroy

ptrFlightNode ptrflNode, ptrflNode2, ptrflNode3,

ptrflNodeTemp;

Flight tempFlight, tempFlight2, tempFlight3;

测试数据,测试GetNewNode

tempFlight.capacity = 1;

tempFlight2.capacity = 2;

tempFlight3.capacity = 3;

strcpy(tempFlight.flightNo, "123455");

strcpy(tempFlight2.flightNo, "123456");

strcpy(tempFlight3.flightNo, "123457");

ptrflNode = GetNewFlightNode(tempFlight);

ptrflNode2 = GetNewFlightNode(tempFlight2); ptrflNode3 = GetNewFlightNode(tempFlight3); ptrflNode->next = ptrflNode2;

ptrflNode2->next = NULL;

FL.head->next = ptrflNode;

FL.length = 2;

试数据,测试Insert

FlightInsert(FL, ptrflNode);

FlightInsert(FL, ptrflNode2);

FlightInsert(FL, ptrflNode3);

测试数据,测试Locate

航空订票系统课程设计说明书

ptrflNodeTemp = FlightLocate(FL, tempFlight); printf("%s\n", ptrflNodeTemp->data.flightNo); 测试数据,测试Delete 和 travel 和 SaveAsText

FlightSaveAsText(FL); FlightPrint(ptrflNodeTemp); FlightDelete(FL, ptrflNodeTemp); FlightTraver(FL, FlightPrint); FlightDelete(FL, ptrflNodeTemp); ptrflNodeTemp = FlightLocate(FL, tempFlight2); printf("%s\n", ptrflNodeTemp->data.flightNo); FlightDelete(FL, ptrflNodeTemp); FlightTraver(FL, FlightPrint); FlightClear(FL);

五、结果分析

1

.主界面:

2.进入用户平台:

(1)查看航班信息:

航空订票系统课程设计说明书

(2)查看客户信息:

(3)订票界面

(4)订票成功

(5)退票信息

航空订票系统课程设计说明书

(6)退票成功

(7)修改航线

1、修改航线

航空订票系统课程设计说明书

2

、增设航线

3、删除航线

航空订票系统课程设计说明书

4

、修改后查询

六、实验体会。

1、 明白了写程序不是一天两天的事,这次就是由于动手的时间太晚,导

致没有用文件的形式进行记录,保存和读取,真的是个遗憾。

2、 程序多了自己都会乱,所以写的时候养成好的书写习惯事第一步。

3、 由于基础的不扎实,导致写的时候遇到诸多的问题,得到了同学的大

力帮助,明白团结的重要性。

4、 要用愉悦的心情去编程,从编程的过程中体会乐趣,兴趣是最好的老

师。

5、 态度决定一切

本文来源:https://www.bwwdw.com/article/yuae.html

Top