收藏 分销(赏)

软件课程设计--C语言.docx

上传人:二*** 文档编号:4540907 上传时间:2024-09-27 格式:DOCX 页数:22 大小:29.52KB
下载 相关 举报
软件课程设计--C语言.docx_第1页
第1页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

2、座位号)为客户办理退票手续,然后查 询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办 理订票手续,否则依次询问其他排队候补的客户。 登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。 统计功能:将每次车的订票,退票结果统计出来。 管理功能:列车管理员可以通过调用函数来查看车票极其用户情况. .查询功能:用户可以查询自己需要的车辆信息.二.总体设计1.程序流程图:是否是需要的车次 是While循环是否已到头指针否是否是需要的车站名是输出所需的信息是是错误移动指针否否程序代码:void inquire。struct ticket *p;struct

3、station *q;int t;in+ *o *s;printffplease enter the number:); scanf(”d”,&f);/*输入需要的车次*/printfCplease 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=!headl)if(q-name=h)s=q;/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p

4、=p-next;/*横向链表移针*/printf(,%d,;,%d,;%d,/o-nurn/o-nurn2,o-time); /*输出横向链表的数据*/printf(%s,%d,%d,%d,“%d”,s-name,&s-time,&s-money,&s-seat,&s-mak); /* 输 出纵向链表的数据*/goto first;功能说明:本函数主要提供查询功能.用户输入需要查询的车次和需要到车站名,程序首先遍历横向链表查 找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.最后输出所有关于本 车次的所有信息.4. Cancel()函数: 程序流程图:输入需要的车次号输入需要

5、到达的车站名While循环是否需要的车次横向结点值给。While循环是否是需要的车站名是使mark的值为0纵向结点值给s纵向链表移针横向链表移针当横向链表卜一个指针为空时输出s点的数据输出。点的数据程序代码;void cancel()struct ticket *p;struct station *q;int t;int *o *s;printfCplease enter the number*:); scanf(%d,&f);/*输入需要的车次*/printfCplease enter the station:);scanf(%d,&h);/*输入需要到达的车站名*/p=t; /*初始化p的

6、值*/while(p =!null)if(p-number=t)(q=p-down;0=p;/*把符合条件的横向链表结点的数据给0*/while(q-next=!headl)if(q-name=h)(q-mark=0; /*修改 mark 标记*/s=q;/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p=p-next;/*横向链表移针*/printfCyour ticket has already cancel!);pintf(”d”,“d“,”d”,o-num,o-num2,otime); /*输出横向链表的数据*/ printf(%s,“d,%d,%d,“%d

7、”,s-name,&s-time,&s-money,&s-seat,&s-mak); /* 输 出纵向链表的数据*/goto first;功能说明:本函数主要提供退票功能.用户输入需要退票的车次和需要到车站名,程序首先遍历横向 链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.修改其mark标 识是其为0.最后输出所有关于本车次的所有信息.5. you。函数: 程序代码:void you()struct you *head;struct you *p;p=(struct you *)malloc(len);scanf(%d,&p-name,&p-num,&p-numl,

8、&p-fime,&p-timel);goto First; 用户查询代码:(注:本函数用于管理人员查询用户)void find()struct you *head;struct you *p;int u;scanf(%d,&u);while(p=!null)if(p-num=u)s=p;)p=p-next; 功能说明:本函数用于用户输入个人信息,以便管理人员管理.而管理函数只面对管理人员使用,因 此未在用户界面上显示出来.6. 统计模块:void total() int *p*q;int n;P”;while(p=!null)(while(q-next=!headl)if (mark= 1)(

9、n=n+l;)q=q-next;p=p-next;printffthe number of the booked ticket are :, printf(%d,n);6.所用变量声明: 横向链表结点的结构体:struct ticketint num;int numl;int time;struct ticket *next;struct station *down;;int t;纵向链表结点的结构体:struct stationint name;int time;int money;int mark;struct station *next; 用户信息链表结点的结构体:struct you(

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

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

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

13、tion *next;struct you(int name;int num;int numl;int time;int timel;struct you *next;struct ticket *in()struct ticket *in()/* 一个返回指针形的函数*/struct ticket *head;/*头结点*/struct ticket *pl *p2;struct station *sl *s2;int m,n;int i;pl=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*7scanf(”d”,&m);/*输入一共所需的车票信息

14、总数*/scanf(%d,&n);/*输入从始发站到终点站共有几站*/head=null;for(i=0;inext=pl;P2印1;pl二(struct ticket )*malloc(len);sl=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/headl=sl=s2;pl-down=sl=s2;/*指向纵向链表的头结点*/scanf(”dL”d”,”d”,&pl-num,&pl-num2,&pl-time); /*输入横向链表的数据*/ for i=0;inext=s2;s2=sl;sl=(struct ticket )*malloc(le

15、n);/*建立纵向链表*/scanf(%s,%d,%d,%d,%d”,sl-name,&sl-time,&sl-money,&sl-seat,&sl-mark);/*输入纵向链表的数据*/sl-next=headl; /*纵向链表为循环链表*/按1键按2键按3键按4键进入in函数进入book函数进入inquire函数进入cancel函数按5键进入you函数2.总体设计说明:.数据结构设计:程序二数据结构+算法,一个好的程序必定有一个好的数据结构.本设计主要考虑车票信息和用户信 息的数据结构.车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下 一个结点的指

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

17、信息链表示意图:车次起始站发车时间downn nextp2-next=null;return(head);/*返回头指针*/goto first;/*返回头指针*/void book()(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,&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/while(p=!null)if(p-numb

18、er=t)(q=p-down;o=p; /*把符合条件的横向锥表结点的数据给0*/while(q-next=!headl)(if(q-name=h)(if (q-mark=l)printfCyour ticket is unused);elseq-mark=l;/*修改 mark 标记*/s=q:s=q:/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p=p-next;/*横向链表移针*/printfCyour ticket has already booked!);printfC,%d,/%d,7,%d,o-num/o-num2/o-time); /*输出横向链表

19、的数据*/ printf(%s,%d,%d,%d,“%d,s-nQme,&s-汁 ime,&s-money,&s-seat,&s-mark); /* 输 出纵向链表的数据*/goto first;void inquire()struct ticket *p;struct station *q;int t;int *o *s;printffplease enter the number;);scanf(%d,&f);/*输入需要的车次*/printfCplease enter the station:);scanf(%d,&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/while

20、(p=!null)(if(p-number=t)(q=p-down;o=p;/*把符合条件的横向链表结点的数据给。*/while(q-next=!headl)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*7%dwname,&stime,&smoney,&sseat,&smQrk); /* 输出纵向链表的数据*/goto first;void canc

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

22、q;/*把符合条件的纵向链表的数据给s*/q=q-next; /*纵向链表移针*/p=p-next;/*横向链表移针*/printfCyour 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-mak); /* 输出纵向链表的数据*/goto first;void you()struct you *head;struct you *p;p=(struct you

23、 *)malloc(len);scanf(%cr,&p-name,&p-num,&p-numl,&p-fime,&p-timel);goto First;void find() struct you *head; struct you *p;int u;scanfC%dw,&u); while(p=!null)if(p-num=u)s=p;)p=p-next;void total()int *p,*q;int n;Pfwhile(p =!null)(while(q-next=!headl)(if (mark=l)(n=n+l;)q=q-next;p=p-next; printffthe num

24、ber of the booked ticket are :M); printfC%dn);Main()(int *t;int c;First: printffwelcome to our ticket system!nH);printfCl.intput the data.nM); /*按 1 键输入数据*/ printfC2.book the ticket.n);/*按 2 键订车票*/printf(n3.inquire the ticketAn); /*按 3 键查询车票*/ printfC4.cancel the ticket.nH);/*按 4 键退车票*/printf(H5.inp

25、ut your own data.nn); /*按 5 谜输入个人信息*/ scanf(%d,&c);switch(c)(case T: t=in(); break;case 2: book(); break;case 3: inquire。; break;case 4: cancel(); break;case 5: you() ; break;default : printfCyou enter an error numbernM);)八.结束语:课程设计使我们通过解决一个实际问题,巩固和加深所学课程,提高了我们分析和编写程序的能 力,为我们以后的学习提供了很好的帮助,更为毕业设计和毕业以

26、后从事计算机方面的工作奠定 了基础。通过两周的学习,我们对已学的专业知识有了比较深刻的认识,同时在查找资料或和其他同学交 流的过程中,发现了一些问题,所以在设计的时候,遇到了很多困难。在对所学的有限知识的理 解和掌握下,在查找资料以及大家共同努力学习和讨论后终于把课题做完。但因为对专业知识没 有很深的认识,所以其中难免有一些是错误的或者是不合理的,希望老师多指教。在课程设计的过程中,老师的指导对我起了非常大的帮助,在此表示感谢,谢谢各位老师的辛勤 工作!更多内容:C+Pimer第四版部分习题解答麻省理工算法导论翻译浙江大学ACM试题解答(四月)浙江大学ACM试题解答(三月)华容道游戏与算法中国

27、象棋对战程序C语言源代码三维建筑物图像的二维建模分段线性骨架基于图论的图像分割技术Linux文件系统分层模型汉语编程企业管理应用软件可行性研究报告汉语编程企业管理应用软件需求说明书计算机专业操作系统课程设计报告软件可行性报告软件需求分析报告两种计算Ack(m,n)的非递归算法浙江大学计算机复试解答1浙江大学计算机复试解答2浙江大学计算机复试解答3Trackback: http:下一站名到站时间票价marknext座位号未购票用户信息队列:用户姓名购票的车次起始站要到的站达到时间用户姓名购票的车次起始站要到的站达到时间注:座位号包含在车次号中己购票用户信息链表示意图:用户姓名身份证号码已购车票的

28、车次号出发时间 到达时间注:座位号包含在车次号中算法的设计:主函数:利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函 数,实现相应的功能。在主函数开始处做下First标识,以便在其他函数中使用9oto ig句返回 主函数的用户界面。In()函数:In()函数负责输入各种信息,链表中车票信息的初始值.Book。函数:Book。函数负责订票功能.主要是遍历整个链表,查找到需要订票的结点后修改其mark 值.Inquire。函数:Inquire。函数主要负责查询功能.主要是遍历整个链表查找到需要的结点,然后输出.Cancel。函数:Cancel()函数主要负责退票功能

29、.主要是遍历整个链表查找到需要的结点,然后修改 mark的值.you。函数:you()函数主要负责输入用户信息,主要是创建-个单链表,将用户信息放入.并提供管 理人员的查询功能.Find。函数:Find()函数主要负责查询用户信息,遍历整个单链表后,输出需要的信息.TotalQ 函数:Total()函数主要负责统计整个订票系统的情况.三.详细设计:1. 主函数: 程序代码:Main()(int *t;int c;First: printfCwelcome to our ticket system!nH);printfCl.intput the data.); /*按 1 键输入数据*/ pri

30、ntf(tt2.book the ticket.nH);/*按 2 键订车票*/printfC3.inquire the ticket.nH); /*按 3 键查询车票*/ printfC4.cancel the ticketAn);/*按 4 键退车票*/printf(5.input your own data.n); /*按 5 键输入个人信息*/ scanf(%d,&c);switch(c)(case T: t=in(); break;case 2: book(); break;case 3: inquire。; break;case 4: cancel(); break;case 5:

31、 you() ; break;default : printffyou enter an error numbern); 功能说明:通过printf语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入 实现该功能函数完成用户所需要的功能.2. In()函数:程序流程图:建立横向链表头结点输入m,n的值For循环,m是否为0建立结点 向结点输入数据For循环,n是否为0否建立纵向结点向结点输入数据是返回头指针Goto到用户界面程序代码:struct ticket *in()/*一个返回指针形的函数*/(struct ticket *head; /*头结点*/struct

32、 ticket *pl *p2;struct station *sl *s2;int m,n;int i;pl=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*/ scanf(”d”,&m);/*输入一共所需的车票信息总数*/scanf(%d,&n);/*输入从始发站到终点站共有几站*/head=null;for(i=0;inext=pl;P2=pl;pl=(struct ticket )*malloc(len);sl=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/ headl=sl=s2;pl-dow

33、n=sl=s2;/*指向纵向链表的头结点*/scanf(”d”,”d”,”d“,&pl-num,&pl-num2,&pl-time); /*输入横向链表的数据*/ for(i=0;inext=s2;s2=sl;sl=(struct ticket )*malloc(len); /*建立纵向链表*/scanf(%s,%d,%d%d,“%d,sl-name,&sl-time,&sl-money,&sl-seat,&sl-mark);/*输入纵向链表的数据*/sl-next=headl; /*纵向链表为循环链表*7p2-next=null;return(head);/* 返回头指针*/goto fir

34、st;/*返回头指针*/功能说明:通过用户输入的数值,建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针指向空,纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面.3. Book ()函数:程序流程图:输入需要的车次号输入需要到达的车站名While循环是否需要的车次是横向结点值给。While循环是否是需要的车站名是 使mark的值为1纵向结点值给s 纵向链表移针横向链表移针当横向链表下一个指针为空时输出S点的数据输出。点的数据Mark是否为1错误否是程序代码:void book()(struct ticket *p;struct station *q;int t;int

35、 *o *s;printfCplease enter the number:);scanf(%d,&f);/*输入需要的车次*/printfCplease enter the station:);scanf(%d,&h);/*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null)if(p-number=t)(q=p-down;o=p;/*把符合条件的横向链表结点的数据给0*/while(q-next=!headl) if(q-name=h)(if (q-mark=l)printfCyour ticket is unused);elseq-mark=l;/*修改 ma

36、rk 标记*/s=q;/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p=p-next;/*横向链表移针*/printfCyour ticket has already booked!);printfC,%d,;,%d;%d,/o-num/o-num2,o-time); /*输出横向链表的数据*/printf(%s,%d,%d,%d,%d”,s-name,&s-time,&s-money,&s-seat,&s-mak); /* 输 出纵向链表的数据*/goto first; 功能说明:本函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到符合条件的结点,读出需要的数据.并且修改mark标记,使其成为己定车票.如果mark己经为1则 输出错误信息.3.inquire。函数:程序流程图:输入需要的车次号输入需要到达的车站名While循环是否已到空

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服