数据结构设计火车票销售Word格式.docx

上传人:b****5 文档编号:19458606 上传时间:2023-01-06 格式:DOCX 页数:14 大小:198.61KB
下载 相关 举报
数据结构设计火车票销售Word格式.docx_第1页
第1页 / 共14页
数据结构设计火车票销售Word格式.docx_第2页
第2页 / 共14页
数据结构设计火车票销售Word格式.docx_第3页
第3页 / 共14页
数据结构设计火车票销售Word格式.docx_第4页
第4页 / 共14页
数据结构设计火车票销售Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构设计火车票销售Word格式.docx

《数据结构设计火车票销售Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构设计火车票销售Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构设计火车票销售Word格式.docx

七、心得体会……………………………………………..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模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1