您的当前位置:首页正文

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

2022-06-16 来源:意榕旅游网


闽江学院 课程设计说明书

题目: 订票系统

院 系: 计算机科学系

专业班级: 07计本(2)班 学 号: 120071101215 刘思旭

学生姓名: 120071101224 郭冬盛

120071101207 张文洁

指导教师: 吴景岚 2008 年 12月 27日

1

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

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

120071101215 120071101207 120071101224 刘思旭 张文洁 郭冬盛 学 号 学生姓名 专业(班级) 07计本(2)班 设计题目 设 计 技 术 参 数 订票系统(A类) (1) 航班数据可以存储在一个数据文件中,数据结构、具体数据自定 (2) 查询航班信息可分别按航班号、航班日期,起飞地点和目的地查询 (3) 订票平台及系统管理员均需要密码方能进入,确保安全性 (1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) (2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 设 计 要 求 可以输入起飞抵达城市,查询飞机航班情况; (3)订票:(订票情况可以存在一个数据文件中,结构自己设定) 可以订票,如果该航班已经无票,可以提供相关可选择航班; (4)退票: 可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 (5)修改航班信息:当航班信息改变可以修改航班数据文件 (6)人机界面自定义,要友好。 (7)汉化人机界面 工 作 量 工 作 计 划 参 考 资 料 指导教师签字 课程设计报告(不附源程序),不得少于10页,源程序不等小于500行 整体设计和详细设计 2天 编代码 1天 调试和测试 1天 设计论文书写 半天 演示软件和答辩 半天 数据结构(C语言版)清华大学出版社 数据结构题集(C语言版)清华大学出版社 教研室主任签字 2

2008年 12 月28日

一、问题分析和任务定义

1.航空客运订票的业务包括:查询航班、客票订购和办理退票等。所设计航空客运订票系统,使上述业务可以借助计算机完成。

2.演示程序以用户和计算机的对话方式执行,本系统能够实现对航班信息的输入、输出、保存、读取、查询和删除以及订票、退票和修改的信息。 3.系统整体框架图:

主界面 查询(包括航班和客户) 订票、退票 修改航班信息 (修改、删除、增设)

4.项目实现的功能:

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

件中,数据结构、具体数据自定) (2)订票:(订票情况可以存在一个数据文件中,结构自己设定) (3)退票: 可退票,退票后修改相关数据文件;

客户资料有姓名、订票数量及所订航班号,订单有编号。 (4)修改航班信息:当航班信息改变可以修改航班数据文件

二、概要设计

(1)主程序,其中主函数为: void main(){ 进入主界面 };

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

typedef struct Flight {

3

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;

三、详细设计

4

功能实现

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); //打印一个客户记录

5

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\ 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\ if (fp == NULL) exit(1); PassengerInit(PL); Passenger tempData; ptrPassengerNode tempNode; while (fscanf(fp, \"%d%s%s%d\ &tempData.bookNo, tempData.name,

6

tempData.flightNo, &tempData.tickets) != EOF) {//读取记录、创建节点、链接到表中 tempNode = GetNewPassengerNode(tempData); PassengerInsert(PL, tempNode); } fclose(fp); return true; }

bool PassengerLoad(PassengerLinkList &PL){ //从文件中读取客户记录 FILE *fp = fopen(\"Passenger.txt\ if (fp == NULL) exit(1); PassengerInit(PL); Passenger tempData; ptrPassengerNode tempNode; while (fscanf(fp, \"%d%s%s%d\ &tempData.bookNo, tempData.name, 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 +=

7

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

8

ptrflNodeTemp = FlightLocate(FL, tempFlight); printf(\"%s\\n\

测试数据,测试Delete 和 travel 和 SaveAsText

FlightSaveAsText(FL);

FlightPrint(ptrflNodeTemp);

FlightDelete(FL, ptrflNodeTemp); FlightTraver(FL, FlightPrint);

FlightDelete(FL, ptrflNodeTemp);

ptrflNodeTemp = FlightLocate(FL, tempFlight2); printf(\"%s\\n\FlightDelete(FL, ptrflNodeTemp); FlightTraver(FL, FlightPrint); FlightClear(FL);

五、结果分析

1.主界面:

2.进入用户平台: (1)查看航班信息:

9

(2)查看客户信息:

(3)订票界面

(4)订票成功

(5)退票信息

10

(6)退票成功

(7)修改航线

1、修改航线

11

2、增设航线

3、删除航线

12

4、修改后查询

六、实验体会。

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

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

2、 程序多了自己都会乱,所以写的时候养成好的书写习惯事第一步。 3、 由于基础的不扎实,导致写的时候遇到诸多的问题,得到了同学的大

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

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

师。

5、 态度决定一切

13

因篇幅问题不能全部显示,请点此查看更多更全内容