欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构课程设计 火车订票系统.docx

    • 资源ID:14361291       资源大小:22.78KB        全文页数:35页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程设计 火车订票系统.docx

    1、数据结构课程设计 火车订票系统软件课程设计-C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析+可行性分析)设计题目:火车订票系统小组成员:指导教师: 完成时间:一.需求设计: 1.每条线路所涉及的信息有:起点、终点、站名、车次、票价、时间、座位号。2.作为示意系统,全部数据可以只放在内存中。 3.系统能实现的功能和操作如下:.查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。.承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排队候补。.承办退票业务:根据客户提

    2、供的情况(车次、时间、座位号)为客户办理退票手续,然后查询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。统计功能:将每次车的订票,退票结果统计出来。管理功能:列车管理员可以通过调用函数来查看车票极其用户情况.查询功能:用户可以查询自己需要的车辆信息.二总体设计1程序流程图:按1键按2键按3键按4键进入in函数进入book函数进入inquire函数进入cancel函数按5键进入you函数2总体设计说明:.数据结构设计:程序=数据结构+算法,一个好的程序必定

    3、有一个好的数据结构.本设计主要考虑车票信息和用户信息的数据结构.车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下一个结点的指针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次到站,票价,到达时间,是否已被购买标识,才用mark标识,当mark为1时车票已售出,当mark为0时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针.未购票用户信息使用队列来保存,因为考虑到用户会预订票,所以把用户以来订票的时间早晚排在队中.先来先买,后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码,想要购票的车次

    4、,起始站,要到的站,时间.已经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号码,已购车票的车次,出发时间,到达时间. 车票信息链表示意图: 车次起始站发车时间downnnext下一站名到站时间票价marknext座位号未购票用户信息队列:用户姓名购票的车次起始站要到的站达到时间用户姓名购票的车次起始站要到的站达到时间注:座位号包含在车次号中 已购票用户信息链表示意图: 用户姓名身份证号码已购车票的车次号出发时间到达时间注:座位号包含在车次号中算法的设计:主函数: 利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函数,实现相应的功

    5、能。在主函数开始处做下First标识,以便在其他函数中使用goto语句返回主函数的用户界面。In()函数: In()函数负责输入各种信息,链表中车票信息的初始值.Book()函数: Book()函数负责订票功能.主要是遍历整个链表,查找到需要订票的结点后修改其mark值.Inquire()函数: Inquire()函数主要负责查询功能.主要是遍历整个链表查找到需要的结点,然后输出.Cancel()函数: Cancel()函数主要负责退票功能.主要是遍历整个链表查找到需要的结点,然后修改mark的值.You()函数: You()函数主要负责输入用户信息,主要是创建一个单链表,将用户信息放入.并提

    6、供管理人员的查询功能.Find()函数: Find()函数主要负责查询用户信息,遍历整个单链表后,输出需要的信息.Total()函数: Total()函数主要负责统计整个订票系统的情况.三.详细设计:1. 主函数:程序代码:Main() int *t;int c;First: printf(“welcome to our ticket system!n”);printf(“1.intput the data.n”); /*按1键输入数据*/printf(“2.book the ticket.n”); /*按2键订车票*/printf(“3.inquire the ticket.n”); /*按

    7、3键查询车票*/printf(“4.cancel the ticket.n”); /*按4键退车票*/printf(“5.input your own data.n”); /*按5键输入个人信息*/scanf(“%d”,&c);switch(c)case 1: t=in(); break; case 2: book(); break; case 3: inquire(); break; case 4: cancel(); break; case 5: you() ; break;default : printf(“you enter an error numbern”);功能说明:通过prin

    8、tf语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入实现该功能函数完成用户所需要的功能.2. In()函数:程序流程图: 建立横向链表头结点输入m,n的值For循环,m是否为0否建立结点向结点输入数据For循环,n是否为0否建立纵向结点向结点输入数据是返回头指针Goto到用户界面程序代码:struct ticket *in() /*一个返回指针形的函数*/ struct ticket *head; /*头结点*/struct ticket *p1,*p2;struct station *s1,*s2;int m,n;int i;p1=p2=(struct tick

    9、et *)malloc(len); /*建立横向链表的头结点*/scanf(%d,&m); /*输入一共所需的车票信息总数*/scanf(“%d”,&n); /*输入从始发站到终点站共有几站*/head=null;for(i=0;inext=p1;p2=p1;p1=(struct ticket )*malloc(len); s1=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/head1=s1=s2;p1-down=s1=s2; /*指向纵向链表的头结点*/scanf(%d,%d,%d,&p1-num,&p1-num2, &p1-time); /*

    10、输入横向链表的数据*/for(i=0;inext=s2;s2=s1;s1=(struct ticket )*malloc(len); /*建立纵向链表*/scanf(“%s”,“%d”,“%d”,“%d”,“%d”,s1-name,&s1-time,&s1-money,&s1-seat,&s1-mark); /*输入纵向链表的数据*/s1-next=head1; /*纵向链表为循环链表*/p2-next=null;return(head); /*返回头指针*/goto first; /*返回头指针*/功能说明:通过用户输入的数值,建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针

    11、指向空,纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面.3.Book()函数:程序流程图:输入需要的车次号输入需要到达的车站名While循环是否需要的车次是横向结点值给oWhile循环是否是需要的车站名是使mark的值为1纵向结点值给s纵向链表移针横向链表移针当横向链表下一个指针为空时输出 s点的数据输出 o点的数据Mark是否为1错误否是程序代码:void book() struct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f); /*输

    12、入需要的车次*/printf(“please enter the station:”); scanf(“%d”,&h); /*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null)if(p-number=t) q=p-down; o=p; /*把符合条件的横向链表结点的数据给o*/while(q-next=!head1)if(q-name=h)if (q-mark=1)printf(“your ticket is unused”);elseq-mark=1; /*修改mark标记*/s=q; /*把符合条件的纵向链表的数据给s*/q=q-next; /*纵向链表移针

    13、*/p=p-next; /*横向链表移针*/ printf(“your ticket has already booked!”);printf(%d,%d,%d,o-num,o-num2, o-time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s-name,&s-time,&s-money,&s-seat,&s-mark); /*输出纵向链表的数据*/goto first;功能说明:本函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到符合条件的结点,读出需要的数据.并且修改mark标记,使其成为已定车票.如果

    14、mark已经为1则输出错误信息.3.inquire()函数: 程序流程图:输入需要的车次号输入需要到达的车站名While循环是否已到空否是否是需要的车次是While循环是否已到头指针否是否是需要的车站名是输出所需的信息是是错误移动指针否否程序代码:void inquire() struct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f); /*输入需要的车次*/printf(“please enter the station:”); scanf(“%d”,

    15、&h); /*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null)if(p-number=t) q=p-down; o=p; /*把符合条件的横向链表结点的数据给o*/while(q-next=!head1)if(q-name=h) s=q; /*把符合条件的纵向链表的数据给s*/q=q-next; /*纵向链表移针*/p=p-next; /*横向链表移针*/ printf(%d,%d,%d,o-num,o-num2, o-time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s-name,&s-time,&s-m

    16、oney,&s-seat,&s-mark); /*输出纵向链表的数据*/goto first;功能说明:本函数主要提供查询功能.用户输入需要查询的车次和需要到 车站名,程序首先遍历横向链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.最后输出所有关于本车次的所有信息.4.Cancel()函数:程序流程图:输入需要的车次号输入需要到达的车站名While循环是否需要的车次是横向结点值给oWhile循环是否是需要的车站名是使mark的值为0纵向结点值给s纵向链表移针横向链表移针当横向链表下一个指针为空时输出 s点的数据输出 o点的数据程序代码;void cancel()str

    17、uct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f); /*输入需要的车次*/printf(“please enter the station:”); scanf(“%d”,&h); /*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null)if(p-number=t) q=p-down; o=p; /*把符合条件的横向链表结点的数据给o*/while(q-next=!head1)if(q-name=h)q-mark=0; /

    18、*修改mark标记*/s=q; /*把符合条件的纵向链表的数据给s*/q=q-next; /*纵向链表移针*/p=p-next; /*横向链表移针*/ printf(“your ticket has already cancel!”);printf(%d,%d,%d,o-num,o-num2, o-time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s-name,&s-time,&s-money,&s-seat,&s-mark); /*输出纵向链表的数据*/goto first;功能说明: 本函数主要提供退票功能.用户输入需要退票的车次和需要

    19、到车站名,程序首先遍历横向链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.修改其mark标识是其为0.最后输出所有关于本车次的所有信息.5. You()函数:程序代码:void you() struct you *head;struct you *p;p=(struct you *)malloc(len);scanf(%d,&p-name,&p-num,&p-num1,&p-time,&p-time1);goto First; 用户查询代码: (注:本函数用于管理人员查询用户)void find()struct you *head;struct you *p;int

    20、u;scanf(“%d”,&u);while(p=!null) if(p-num=u)s=p;p=p-next;printf(“%s”,”%d”,”%d”,”%d”,”%d”,p-name,p-num,p-num1,p-time,p-time1);功能说明: 本函数用于用户输入个人信息,以便管理人员管理.而管理函数只面对管理人员使用,因此未在用户界面上显示出来.6.统计模块:void total() int *p,*q;int n;p=t;while(p=!null)while(q-next=!head1)if (mark=1) n=n+1;q=q-next; p=p-next;printf(

    21、“the number of the booked ticket are :”);printf(“%d”,n); 6.所用变量声明:横向链表结点的结构体:struct ticketint num;int num1; int time; struct ticket *next; struct station *down; int t;纵向链表结点的结构体: struct station int name; int time; int money; int mark; struct station *next;用户信息链表结点的结构体: struct you int name; int num;

    22、int num1; int time; int time1; struct you *next; 四.程序说明书: 本系统用于火车站的车票管理.主要方便用户订票,也可方便管理人员管理车票.当用户看到用户界面时,可以根据提示选择自己想要的服务,选择后按下回车键,程序便会转到相应的函数进行.完成后,程序会显示您已经成功的订票或退票.完成后程序会自动回到起始位置. 管理人员也可以很方便的调用本系统包含的查询和统计函数,管理车票情况. 具体说明: 1.提示程序操作者输入预设的数据. 2.提示用户进行订票操作.3.提示用户进行查询自己需要的车票的操作.4.提示用户进行退票操作.5.提示用户输入自己的相关

    23、信息.五.程序调试: 本程序分为多模块,为的是方便小组合作.所以各个功能都由函数调用来实现.组员在各自的编制和调试中基本都实现所需的功能.但在联调的过程中,由于我们使用了大量的传递指针形的函数,所以在数值的传递上问题很多.分步执行的时候指针的位置很乱!所以让我们遗憾的是联调并没有成功.我们也会吸取教训,在函数编制时注意数值的传递.六.运行结果:输入: 2 3 K717,Beijing,11:00 Yuci,12:00,10,0,56 Yangyuan,1:00,20,0,56 Shijiazhuang,2:00,30,56 输入:k717 shijiazhuang输出:you have alr

    24、eady booked the ticket! K717,shijiazhuang,11:00,3:00,30,56七.程序源代码: #include #include #define null 0#define len sizeof(struct ticket)struct ticketint num;int num1; int time; struct ticket *next; struct station *down; int t;struct station /*公共变量声明*/ int name; int time; int money; int mark; struct stat

    25、ion *next;struct you int name; int num; int num1; int time; int time1; struct you *next; struct ticket *in() /*一个返回指针形的函数*/ struct ticket *head; /*头结点*/struct ticket *p1,*p2;struct station *s1,*s2;int m,n;int i;p1=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*/scanf(%d,&m); /*输入一共所需的车票信息总数*/scanf(“%d”,&n); /*输入从始发站到终点站共有几站*/head=null;for(i=0;inext=p1;p2=p1;p1=(struct ticket )*malloc(len); s1=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/head1=s1=s2;p1-


    注意事项

    本文(数据结构课程设计 火车订票系统.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开