订票系统课程设计报告书.docx
- 文档编号:5365966
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:35
- 大小:286.86KB
订票系统课程设计报告书.docx
《订票系统课程设计报告书.docx》由会员分享,可在线阅读,更多相关《订票系统课程设计报告书.docx(35页珍藏版)》请在冰豆网上搜索。
订票系统课程设计报告书
安徽建筑工业学院
课程设计报告
课程名称:
数据结构与算法课程设计
题目:
订票系统
院系:
数理系
专业:
信息与计算数学
班级:
一班
学号:
12207210148
姓名:
蔡会丽
时间:
2013.6
目录
1问题描述1
2基本功能要求1
3概要设计1
3.1程序设计思路2
3.2存储结构设计2
3.3主要算法设计2
3.3.1链表数据类型的定义3
3.3.2本程序的结构3
3.4测试用例设计6
4详细设计——原程序代码6
5调试分析20
6程序说明20
7经验和体会20
7.1经验20
7.2体会21
8程序结果21
9附录27
订票系统
1问题描述
设计一个模拟飞机订票系统,通过此系统可以录入、查询、修改航班情况,完成用户订票和退票功能,并且可以保存客户和航班的资料。
2基本功能要求
设计航班信息,订票信息的存储结构,设计程序完成如下功能:
1.录入航班信息。
可以录入航班情况:
航班号,起飞、抵达城市,座位总数,剩余座位数。
(数据可以存储在一个数据文件txt中,采用线性表的链式结构、具体数据用户输入)
2.加载航班与客户信息。
可以自动加载保存在txt文件中的航班与客户的信息。
3.查询航班信息。
可以输入航班号,查询该航线的情况(起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
4.订票。
客户资料包括:
姓名,证件号,订票数量及航班情况,座位号。
订单要有订单号。
用户输入要订票的航班号,如果该航班有余票,则订票成功,并记录客户的信息。
如果该航班已经无票,则订票失败。
输出所有有余票的航班信息,提供用户可以选择的航班。
5.退票
删除退票用户的订票信息,相应的航班的余票数量增加1。
6.修改航班信息
用户输入要修改的航班号,和要修改的内容,修改该航班的相应信息。
7.保存数据文件。
把当前的航班信息,和用户信息分别保存在txt文件中。
8.输出所有客户信息。
按一定的格式输出用户的姓名,证件号码,订票数量及航班情况,座位号。
9.输出所有航班信息。
按一定的格式输出所有的航班的航班号,起飞抵达城市,座位总数,剩余座位数。
1.退出系统
3概要设计
3.1程序设计说明图.
主菜单
1
2
3
4
5
6
7
8
9
0
录入航班的信息
加载航班与客户信息。
查询航班信息
订票
退票
修改航班信息
保存数据文件
输出所有客户信息
输出所有航班信息
退出
3.2程序设计思路.
对于航班和用户分别定义不同的数据结构,并且采用线性表的链式结构进行存储。
所用到的算法包括:
链表的创建,增加,遍历,插入和删除。
3.3存储结构设计
由于航空公司的航班保持基本不变,所以应该采用顺序存储结构将各条航线的基本情况登陆在一张线性表上,按照终点站名有序排列。
在客票预定这一环节里将出现两个客户名单:
已定票客户名单和需定票客户名单。
两客户名单可分别由线性表和队列实现。
为查找方便,已定票客户的线性表应按姓名有序,同时为了插入和删除方便,,应以链表作为存储结构。
由于无法知道预约的人数,队列也应该以链表作为存储结构。
我们需要做的是建立一个可以插入和删除节点的链表,并能检索这个链表,在必要的时候将链表的内容保存到文件中。
3.3主要算法设计
3.3.1链表数据类型的定义:
因为采用的逻辑结构是线性结构,存储结构是链式结构。
//航线结构体
typedefstructairline
{
charline_num[10];//航班号
charstart_place[20];//起飞地
charend_place[20];//目的地
inttotal;//座位总数
intleft;//剩余座位
structairline*next;//下一个节点
}airline;
//航线结构体的头结点
typedefstructairlinehead{
intcount;
airline*next;
}airlinehead;
//客户结构体
typedefstructclient{
charname[20];//乘客姓名
charid[10];//乘客证件号
charline_num;//航班号
intseat_num;//座位号
structclient*next;//下一个节点
}client;
//客户结构体的头结点
typedefstructclienthead{
intcount;
client*next;
}clienthead;
3.3.2本程序的结构
1)主程序模块:
voidmain()
{
初始化;
向屏幕输出输入提示;
选择输入要进行操作的菜单项(1,2,3,4,5,6,7,8,9,0);
1、输入录入的航班信息,输出航班信息录入成功。
2、加载航班与客户信息,加载成功。
3、查询航班信息, 输出显示航班信息。
4、订票, 输出订票成功
5、退票,输出退票成功。
6、修改航班信息,输出修改成功。
7、保存数据文件, 输出保存成功。
8、输出所有客户信息, 输出显示所有客户信息。
9、输出所有航班信息, 输出显示所有航班信息。
0、退出系统,退出界面。
}
2)对航班的操作;
airlinehead*import(intn,airlinehead*pheadline)//录入航班函数,n为所要录入航班的数量
{
airline*query(airlinehead*phead)//查询航班情况
voiddisplay_line(airline*node)//输出一个航班节点的所有信息到屏幕上
voiddisplay_all_line(airlinehead*headline)//输出所有航班的所有信息到屏幕上
intchange_line(airlinehead*headline)//修改航班的信息
}
3)对客户的操作
voiddisplay_client(client*node=null)//输出一个客户节点的信息到屏幕
voiddisplay_all_client(clienthead*headclient)//输出所有客户的信息到屏幕
intbookticket(airlinehead*headline,clienthead*headclient)//订票
intreturnticket(airlinehead*headline,clienthead*headclient)//退票
4)对文件的操作
intsavemessage(airlinehead*headline,clienthead*headclient)//保存航班和客户信息到相应的txt文件中
intloadmessage(airlinehead*headline,clienthead*headclient)//加载保存在文件中的信息
5)函数模块之间的调用图
6)程序流程图
3.4测试用例设计
航班号
起飞地
目的地
座位总数
123
China
America
30
456
Beijing
Shanghai
30
789
Japan
Beijing
30
101
Australia
Beijing
50
姓名
证件号码
航班
蔡会丽
2012
123
张长德
2013
456
李毓芬
2014
789
钱玉芬
2015
101
单丹宇
2016
123
4详细设计——原程序代码
#include
#include
usingnamespacestd;
#include
#include
typedefstructclient
{
charname[20];//乘客名
charid[10];//乘客证件号
charline_num[10];//航班号
intseat_num;//座位号
structclient*next;//下一个结点
}client;
typedefstructclienthead
{
intcount;
client*next;
}clienthead;
typedefstructairline
{
charline_num[10];//航班号
charstart_place[20];//起飞地
charend_place[20];//目的地
inttotal;//座位总数
intleft;//剩余座位
structairline*next;//下一个结点
}airline;
typedefstructairlinehead
{
intcount;
airline*next;
}airlinehead;
airlinehead*import(intn,airlinehead*pheadline)//录入航班函数,n为所要录入航班的数量;
{
airline*temp=newairline;
temp->next=NULL;
pheadline->next=temp;
pheadline->count=n;
for(inti=0;i { cout<<"请输入第"< "; cin>>temp->line_num; cout<<"请输入第"< "; cin>>temp->start_place; cout<<"请输入第"< "; cin>>temp->end_place; cout<<"请输入第"< "; cin>>temp->total; temp->left=temp->total; cout<<"第"< if(i { temp->next=newairline; if(temp->next==NULL) { cout<<"分配内存失败"< exit (1); } temp->next->next=NULL; temp=temp->next; } } returnpheadline; } airline*query(airlinehead*phead)//查询航班情况 { airline*find=NULL; airline*temp; cout<<"******************************************************"< cout<<"*1,按航线查询航班情况。 *"< cout<<"2,按起飞抵达城市查询航班情况。 *"< cout<<"******************************************************"< cout<<"请选择: "; intselect; cin>>select; cout< switch(select) { case1: { cout<<"请输入航班号: "; charline_num[10]; cin>>line_num; temp=phead->next; while(temp) { if(strcmp(temp->line_num,line_num)==0) { find=temp; //display—line(find); returntemp; break; } else { temp=temp->next; } } if(! temp) { cout<<"没有找到该航班的信息。 "< returnNULL; } break; } case2: { charstart_place[20];//起飞地 charend_place[20];//目的地 cout<<"请输入起飞地址: "; cin>>start_place; cout<<"请输入目的地: "; cin>>end_place; //airline*temp; temp=phead->next; while(temp) { if(strcmp(temp->start_place,start_place)==0&&strcmp(temp->end_place,end_place)==0) { find=temp; //returntemp; break; } temp=temp->next; } if(! temp) { cout<<"没有找到该航班的信息。 "< returnNULL; } break; } default: cout<<"输入错误。 "< break; } returnfind; } voiddisplay_line(airline*node)//输出一个航班结点的所有信息到屏幕 { if(node==NULL) { cout<<"参数为空,输出失败。 "< return; } cout< cout<<"航班号\t\t起飞地\t\t目的地\t\t座位总数\t剩余座位\t"< cout< < < < < < } voiddisplay_all_line(airlinehead*headline)//输出所有航班的信息到屏幕 { cout< airline*node; node=headline->next; if(! node) { cout<<"当前没有航班信息"< return; } cout<<"航班数目: "< while(node) { display_line(node); node=node->next; } } intchange_line(airlinehead*headline)//修改航班信息 { cout<<"当前所有航班的信息为: "< airline*temp; temp=headline->next; while(temp) { display_line(temp); temp=temp->next; } cout< cout<<"请选择你要进行的操作"< cout<<"1,增加航班。 "< cout<<"2,删除航班。 "< cout<<"3,修改当前航班的信息。 "< intselect; cin>>select; cout< if(select>3||select<1) { cout<<"输入错误。 "< return0; } switch(select) { case1: { //temp->next=(airline。 )malloc(sizeof(airline)) temp->next=newairline; temp=temp->next; cout<<"请输入要增加的航班号: "; cin>>temp->line_num; cout<<"请输入航班的起飞地: "; cin>>temp->start_place; cout<<"请输入航班的目的地: "; cin>>temp->end_place; cout<<"请输入航班的座位总数: "; cin>>temp->total; temp->left=temp->total; temp->next=NULL; headline->count++; cout<<"增加成功。 "< break; } case2: { cout<<"请输入您要删除的航班的航班号: "; charline_num[10]; cin>>line_num; airline*delline; delline=headline->next; while(delline) { if(strcmp(delline->next->line_num,line_num)==0) { airline*plink; plink=delline->next->next; //free(delline->next); deletedelline->next; delline->next=plink; headline->count--; } delline=delline->next; } if(delline==0) { cout<<"没有找到输入的航班号。 "< return0; } break; } case3: { cout<<"请输入您要修改的航班的航班号: "; charline_num3[10]; cin>>line_num3; temp=headline->next; while(temp) { if(strcmp(temp->next->line_num,line_num3)==0) { cout<<"请选择要修改的内容: "< cout<<"--1,座位总数。 --"< cout<<"--2,起始地址。 --"< cout<<"--3,目的地址。 --"< } temp=temp->next; } if(temp==0) { cout<<"没有找到输入的航班号。 "< return0; } break; } } return1; } voiddisplay_client(client*node=NULL)//输出一个客户节点的信息到屏幕。 { if(node==NULL) { cout<<"参数为空,输出失败。 "< return; } cout< cout<<"姓名\t\t"<<"证件号码\t"<<"座号\t"<<"航班\t\t"< cout< < < < < } voiddisplay_all_client(clienthead*headclient)//输出所有客户信息到屏幕 { client*node=headclient->next; if(! node) { cout<<"当前没有客户信息。 "< return; } while(node) { display_client(node); node=node->next; } } voiddisplay_left_airline(airlinehead*headline)//输出未售完票的航班的信息。 { airline*node=headline->next; if(! node) { cout<<"当前没有航班。 "< } for(;node->left! =node->total;node=node->next) { display_line(node); } } intbookticket(airlinehead*headline,clienthead*headclient)//订票 { //headclient->count=0; cout<<"请输入航班号: "; charline_num[10]; cin>>line_num; airline*temp; temp=headline->next; while(temp) { if(strcmp(temp->line_num,line_num)==0) { break; } temp=temp->next; } if(! temp) { cout<<"未找到该航班"< return0; } if(temp->left==0) { cout<<"对不起,该航班票已经售完。 "< cout<<"请选择其他合适的航班: "; } client*custom=newclient; cout<<"请输入你的证件号码: "; cin>>custom->id; cout< cout<<"请输入你的姓名: "; cin>>custom->name; cout< custom->seat_num=temp->total-temp->left+1; custom->next=NULL; strcpy(custom->line_num,line_num); /* client*clienttemp=NULL;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 订票 系统 课程设计 报告书
![提示](https://static.bdocx.com/images/bang_tan.gif)