数据结构设计火车票销售Word格式.docx
- 文档编号:19458606
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:14
- 大小:198.61KB
数据结构设计火车票销售Word格式.docx
《数据结构设计火车票销售Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构设计火车票销售Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
七、心得体会……………………………………………..13
八、参考文献……………………………………………..14
正文
一、需求分析
编制一个简单的火车票销售系统,可完成售票、退票、车票剩余情况查询等功能。
每张车票包含车次、座位信息。
二、设计要求
在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、座位情况。
为简单起见,在此假设所有出售的车票均为同一车次的车票。
退票时,必须是车站售出的列车票才能退(这里以同一车次的为例),否则视为无效票,不能办理退票业务。
三、概要设计
整个车票销售系统实际上可以看作对链式基本线性表的操作过程。
为每张车票建立一个结点,则所有出售的车票共同建立起一个销售链表。
当售出一张票,从销售链表中删除1个结点,为提高效率,每售1张票时,删除链表最前面的结点。
而退回1张票时,如果为有效票,而在销售链表中插入1个结点,否则不能退票。
而查询剩余票情况时,则将销售链表中所有结点的信息输出,并统计销售链表中的结点数即可。
根据上述分析,可以给车票构造一个结构体类型如下:
typedefstructnode
{
chartr_no[4];
/*车次*/
elemtypeseat;
/*座位号*/
structnode*next;
}ticket;
则所有车票构成的销售链表如下图:
车票销售链表初始状态和备份链表
而每售1张票则是将链表最前面的结点删除,退回1张有效票,则在链表最前面插入1个结点。
整个链表由指针sale指向。
为检查退票的有效时,即检查退票是否为销售出去的票,可以将销售前所有票构成的链表进行备份,由指针back指向。
每次退回的票都与指针back指向的链表中的每个结点进行比较,如果能在back链表中找到,则为有效票,可以办理退票业务。
四、火车票销售系统流程图
五、详细设计
#definenull0
#defineelemtypeint
typedefstructnode
ticket*sale,*back;
/*sale为售票链表指针,back为备份链表指针*/
intcount()/*查询车票剩余情况模块*/
ticket*q;
intn=0;
/*车票计数器*/
q=sale;
while(q)/*统计车票数*/
n++;
q=q->
next;
}
return(n);
voidabort_ticket(elemtypex,chart[])/*办理退票模块*/
ticket*s,*q;
q=back;
/*q指向备份链表*/
s=(ticket*)malloc(sizeof(ticket));
/*需要办理退回的车*/
s->
seat=x;
strcpy(s->
tr_no,t);
while(strcmp(s->
tr_no,q->
tr_no)&
&
(s->
seat!
=q->
seat)&
q)/*检查是否为有效车票*/
if(!
q)
printf("
对不起!
你所退的不是本列车的车票!
\n"
);
else/*为有效票办理退回业务*/
next=sale;
sale=s;
voidsale_ticket()/*购票模块*/
ticket*t;
if(sale)
t=sale;
sale=sale->
/*从销售链表中删除已售票所在的结点*/
你购买车票的车次为:
%s,座位号为%d\n"
t->
tr_no,t->
seat);
free(t);
else
车票已售完\n"
voiddisplay()
ticket*p;
p=sale;
if(p==null)
列车票已售完!
"
elsewhile(p!
=null)/*输出所有剩余车票的车次,座位情况*/
%3d,%5s"
p->
seat,p->
tr_no);
p=p->
if(p)
"
main()
ticket*q,*p;
chart1[4];
intd,i,n,select,k,flag=1;
clrscr();
sale=null;
/*销售链表指针初始化*/
back=null;
/*备份链表指针初始化*/
请输入列车座位数:
scanf("
%d"
&
n);
for(i=1;
i<
=n;
i++)/*建立所有车票构成的销售链*/
q=(ticket*)malloc(sizeof(ticket));
p=(ticket*)malloc(sizeof(ticket));
请输入车次:
%s%s"
q->
tr_no,p->
请输入车票座位号:
d);
q->
seat=d;
sale=q;
p->
next=back;
back=p;
列车座位情况为:
display();
while(flag)
1--查询剩票数\n"
2--购票\n"
3--退票\n"
4--退出\n"
inputyourselect:
select);
switch(select)
case1:
{d=count();
\n剩余的车票数为:
d);
\n座位剩余情况为:
break;
case2:
{printf("
\购买车票:
sale_ticket();
case3:
{printf("
\n退票:
请输入退票的车次:
%s"
\n请输入退票的座位号"
abort_ticket(d,t1);
case4:
flag=0;
六、测试结果
1、以车次为a,5个座位的车票销售情况为例,建立销售链表的初始过程如图(a)
图(a)
2、查询剩余票操作结果如图(b)
图(b)
3、购票的操作结果如图:
(1)购得票时如图(c):
图(c)
(2)列车票售完时如图(d):
图(d)
4、退票的操作结果如图
(1)当退的是有效票时如图(e):
图(e)
(2)当退的是无效票时图(f):
图(f)
5、退出操作结果如下图(g):
图(g)
七、心得体会
(1)这是一类基本线性表应用的典型设计,一般在利用基本线性表解决动态变化的过程时,常常选用链式存储结构作为基本线性表的存储方式,而在数据变化不大的情况下,即很少进行插入和删除运算的情况下,则选用顺序存储结构则更有优势,在直接存取上更容易。
(2)在解决问题的过程中选用何种存储更好,并没有明确的界线。
有时同一个问题中可能选用两种存储结构都可以,此时就没有必要过分强调选择哪种存储结构,如果一定要选一种更好的存储结构,则看选哪种存储结构对所有运算更容易实现、更容易操作。
(3)这个设计的思想与59页的成绩管理系统有同样的设计思路。
在考虑这个设计的时候,主要是要先将火车票销售的操作过程了解清楚,剩下的就是设计了。
通过这个设计让我熟悉了线性表的应用,特别是在设计的测试部分的时候,常会遇到编译的错误问题,但是经过了耐心的纠正,最终设计成功。
八、参考文献
【1】数据结构田鲁怀编著电子工业出版社
【2】数据结构习题解析与上机指导周云静编著冶金工业出版社
【3】数据结构陈雁主编高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构设计 火车票 销售