版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告书课程名称:数据结构课程设计题目:列车运行查询程序的设计与实现系名:专业班级:姓名:学号:指导教师:年月日课程设计任务书学生姓名:专业班级:指导教师:—工作单位:题目:列车运行查询程序的设计与实现初始条件:理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算法;实践:信息工程系实验室提供计算机及软件开发环境。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、系统应具备的功能:(1)输入列车时刻表(2)按各种查询条件对列车时刻2、数据结构设计;3、主要算法设计;4、编程及上机实现;5、撰写课程设计报告,包括:(1)设计题目;(2)摘要和关键字;(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试等;(4)结束语;(5)参考文献。时间安排:2011年6月27日一2011年7月1日(第19周)星期一查阅资料星期二系统设计,数据结构设计,算法设计星期三-星期四编程并上机调试星期五撰写报告星期五验收程序,提交设计报告书。指导教师签名系主任(或责任教师)签名:2011年6月27日2011年6月27日目录TOC\o"1-5"\h\z1引言12需求分析13数据结构设计54算法设计55程序实现及测试96不足之处137设计体会13148结束语指导教师签名系主任(或责任教师)签名:2011年6月27日2011年6月27日14列车运行查询程序的设计与实现摘要现要设计列车运行查询系统,使乘客通过各种查询方式得到所要查询列车的基本信息,该信息包括列车号、始发地点、始发时间、抵达地点、抵达时间、票价等。如何用数据结构中的算法来实现呢?我们知道,在数据结构中有一种存储结构叫链式存储,链表的结点正好可以用来存储每辆列车的基本信息,结点的指针域能对该链表存储的信息进行查找、删除,而查找方式又有两种方式,一是基于列车编号的查找,二是根据抵达城镇的查找。关键字:结点、指针、单链表的插入、列车查询、单链表的查找1引言链式存储结构是用一组任意的存储单元来存储表的结点。也就是说,链式存储结构中,存储单元可以是相邻的,也可以是不相邻的;同时,相邻的存储单元中的数据,不一定是相邻的结点,因为结点存储的不连续性,因而它为没有顺序存储列车信息提供的方便,能随时将安排运行的列车添加到链表中,又链表中的每一个结点还包含一个指针域,它保存了在逻辑上相邻的结点的地址信息,该指针域中的指针,将线性表的n个结点按其逻辑顺序连接在一起。因此查询某辆列车的基本信息就要用到该指针域,因而单链表的结点结构非常适合来存储列车的基本信息。列车作为现代社会出门旅行的重要工具,要怎样不用出门就能了解到列车的具体开往时间,进而为自己的行程做好安排。因此网上列车查询系统的建立为人们的出行提供了轻松与便捷,这种查询系统也为车站的售票员提供了便利。结合实际,我想通过自己的知识尝试着去编写一个这样的系统,一来可以完成课程设计,二来可以加深自己的数据结构知识,锻炼自己的同时也提升了自己。2需求分析2.1提出需求在日常生活中,对于出行,人们最关心的就是列车的始发时间,到站时间以及票价,要满足人们的需求,故本系统将包括以下几个方面1.列车基本信息的建立。用单链表的结点来存储列车的基本信息,也可以用结点的插入来添加新增的列车班次或更新列车班次。2.按不同的查询条件来查询列车的信息。通过列车的编号或者通过列车的始发地和目的地两种方式查询列车,方便找到适合自己的。通过将用户输入信息与链表存储的相应信息一一做比较找到所需的列车信息并输出,利用指针的移动来查找该信息。2.2开发计划更具所学课程的只是,结合实际情况,本系统开发的计划表如下:
开发计划表第1阶段:查阅资料时间:6月27日工作内容和工作成果:用户需求调研与分析,查阅资料第2阶段:系统设计时间:6月28日工作内容和工作成果:系统设计,数据结构设计,算法设计第3阶段:系统测试时间:6月29日〜6月30日工作内容和工作成果:编程并上机调试第4阶段:课程报告时间:7月1日工作内容和工作成果:撰写实验报告第5阶段验收程序时间:7月1日工作内容和工作成果:验收程序,提交设计报告书开发进度表i查阅资料i系统设计i系统测试i:课程报告,i验收程序i:1IL4J11!i111■T1I111116月27日6月28日6月29日6月30日\7月1日,b月1日!2.3列车运行查询程序待发计划的模块划分根据任务书中的设计要求,对该模拟进行如下划分:
主菜单查询列车按列车编号查询退出系统输入列车基本信息按始发地和目主菜单查询列车按列车编号查询退出系统输入列车基本信息按始发地和目的地查询2.4系统流程图3数据结构设计3.1程序所需结构体定义结构体train,用来存储列车信息typedefstructtrain/*定义存储列车信息的结构体*/{charnum[10];/*列车号*/charstartcity[10];/*出发城市*/charreachcity[10];/*目的城市*/chartakeofftime[10];/*发车时间*/charreceivetime[10];/*到达时间*/intprice;/*票价*/}lieche;typedefstructnode/*定义列车信息链表的结点结构*/{liechedata;/*数据域*/structnode*next;/*指针域*/}Node,*Link;3.2程序中,列车的链表操作模块voidmenu()/*定义菜单选择界面函数*/voidTraininfo(Linkl)/*定义列车信息链表函数*searchtrain(Linkl)/*定义查询列车信息的函数*/main()/*定义主函数*/3.3引用库函数及变量的定义#include<conio.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#defineDATEp->data.num,p->data.startcity,p->data.reachcity,p->data.takeofftime,p->data.receivetime,p->data.price,p->data.ticketnumintc;/*定义全局变量,用来控制输入列车信息的辆数*/4算法设计4.1列车信息链表的操作模块这个模块主要是实现列车链表的初始化、插入、以及各种查询的操作,在进行列车信息的存储时,系统一边为结点分配内存,一边将该结点插入到链表中后。在查询时,查询按照画面的提示,选择不同的查询方式进行查询,然后便显示出了查询结果。在本程序中是最基础,最基本的操作,但也是最主要的。4.2主菜单主菜单界面函数,为用户显示该系统的功能,方便用户进行操作voidmenu(){puts("\n\n");puts("\t\tl1");puts("\t\tlTheinformationofthetrainl");/*列车信息*/puts("\t\tl1");puts("\t\t|0:quitthesystem|");/*退出该程序*/puts("\t\t|1:Insertatraininformation|");/*输入列车信息*/puts("\t\t|2:Searchatraininformation|");/*查询列车信息*/}4.3列车信息输入自定义Traininfo()函数,作用是添加列车信息voidTraininfo(Linkl){structnode*p,*r,*s;/*定义链表指针*/charnum[10];inti;r=l;/*让r指向头结点*/s=l->next;/*让s指向头结点的下一个结点*/while(r->next!=NULL)/*链表没有存储任何信息*/r=r->next;/*r后移,r指向头结点的下一个结点*/for(i=1;i<=c;i++)/*控制输入列车信息的辆数*/{printf("Pleaseinputthenumberofthetrain(0-return):");scanf("%s”,num);/*输入列车编号*/if(strcmp(num,"0")=0)/*检索输入的列车编号是否为字符0*/break;while(s){if(strcmp(s->data.num,num)==0)/*检测链表中是否已有该列车的基本信息*/{printf("thetrain'%s'isexisting!\n",num);/*输出该列车信息已存在于链表中*/return;}s=s->next;*s后移指向下一个结点*}p=(structnode*)malloc(sizeof(structnode));/*申请新结点*/strcpy(p->data.num,num);/*输入车号*/printf("Inputthecitywherethetrainwillstart:");scanf("%s”,p->data.startcity);/*输入出发城市*/printf("Inputthecitywherethetrainwillreach:");scanf("%s”,p->data.reachcity);/*输入到站城市*/printf("Inputthetimewhichthetraintakeoff:");scanf("%s",p->data.takeofftime);/*输入出发时间*/printf("Inputthetimewhichthetrainreceive:");scanf("%s",p->data.receivetime);/*输入到站时间*/printf("Inputthepriceofticket:");scanf("%d”,p->data.price);/*票价*/p->next=NULL;r->next=p;r=p;/*插入到链表中*/}clrscr();/*清屏*/menu();/*调用主菜单界面函数*/}4.4列车查询自定义searchtrai()函数,实现列车信息查询,程序代码如下searchtrain(Linkl){Node*r,*t;/*定义链表指针*/intsel,k,flat=0;charstr1[5],str2[10],str3[10];if(!l->next){printf("Thereisnotreceord!");/*链表为空*/return;}printf("choosetheway:\n1:accordingtothenumberoftrain;\n2:accordingtothecity:\n");scanf("%d”,&sel);/*从两种查询方式中选择一种*/if(sel==1)/*选择按列车编号查询*/{printf("Inputthenumberoftrain:");scanf("%s",str1);/*输入要查找的列车编号*/r=l->next;/*让s指向头结点的下一个结点*/while(r!=NULL)/*当r指向的结点不为空*/if(strcmp(r->data.num,str1)==0)/*检索是否有与输入的车编号相匹配的*/{t=r;/*让t指向查找到的结点*/printf("Theinformationofthetrain\n");printf("Inumber|startcityIreachcityItakeofftimeIreceivetimeIpriceI\n");printf("IIIIII——I\n");printf("I%-10sI%-10sI%-10sI%-10sI%-10sI%5dI\n");printf("%-10s”,t->data.num);printf("%-10s”,t->data.startcity);printf("%-10s”,t->data.takeofftime);printf("%-10s”,t->data.receivetime);printf("%5d",t->data.price);/*输出查找到的列车信息*/flat=1;break;}elser=r->next;/*r后移,r指向头结点的下一个结点*/}elseif(sel==2)/*选择按目的地进行查询*/{printf("Inputthecityyouwanttostart:");scanf("%s",str2);/*输入要查询的始发地*/printf("Inputthecityyouwanttogo:");scanf("%s”,str3);/*输入要查询的目的地*/r=l->next;while(r!=NULL)if(strcmp(r->data.takeoffcity,str2)==0&&strcmp(r->data.reachcity,str3)==0)/*检索是否有与输入的始发地和目的地相匹配的*/{t=r;/*让t指向查找到的结点*/printf("Theinformationofthetrain\n");printf("numberstartcityreachcitytakeofftimereceivetimeprice\n");printf("IIIIII——I\n");printf("I%-10sI%-10sI%-10sI%-10sI%-10sI%5dI\n");printf("%-10s",t->data.num);printf("%-10s",t->data.startcity);printf("%-10s",t->data.takeofftime);printf("%-10s",t->data.receivetime);printf("%5d”,t->data.price);/*输出查寻到的列车信息*/flat=1;break;}elser=r->next;/*r后移,r指向头结点的下一个结点*/}if(flat)printf(“notcanfind");/*flat等于0,表示没有查找到*/clrscr();/*清屏*/menu();/*调用主菜单界面函数*/}主函数将系统的数据输入部分以及查询部分联系起来。用户先对列车时刻表进行初始化,然后就可以按照相应的查询条件对列车信息进行查询。通过循环语句,用户可以重复的查询直到选择退出程序。main(){Linkl;intsel;l=(Link)malloc(sizeof(Node));/*为l申请结点*/l->next=NULL;/*让l作为头结点,并让l的下一个结点为空*/printf("Howmanytrainsyouwantinput:\n");scanf("%d",&c);/*给出用户要存入列车信息的辆数*/clrscr();/*清屏*/menu();/*调用主菜单界面函数*/while(1)/*无限循环,不断对列车的信息进行输入与查找*/{printf("\tpleasechoose(0-2):");scanf("%d",&sel);/*选择所要进行的操作*/switch(sel){case1:Traininfo(l);/*选择1,调用Traininfo()函数进行添加列车信息的*/break;case2:searchtrain(l);/*选择2,调用searchtrai()函数,进行列车信息查询的操作*/break;case0:return0;/*选择0,退出该程序*/}printf("\npleasepressanykeytocontinue>、、、、、");getchar();}}5程序实现及测试5.1功能选择Theinfomationofthe!6:quitthesystem1:Insertati'aininfoi'nation2:Searchati'aininfornationchoose<8~2>=15.2列车时刻表输入uumanytrainsyouuantinput■LLLLLLLLppppnnnnllllllllllpppppnnnnn_LLLLLLLLppppnnnninputthenu.mbepofthethethethethethe_inputthenumberoftK,thethethethetheinputthenu.mber-of之hrthethethethethecitywher-ethetcity'linepri.ceoftlgket:1^9uhepei?hichuhichuherethethethetheyaa.ntpaintraJ.ntpaincitycitywherethettlinetlr»eppj.ceofticket:200whichwhzLchthethetrai.nr-aintpai.nti?aincitycitytimetimepr-i.cethethethethetpai.ntrainty-ai.ntrainuhepewhereuhichuhichofti.cket>350tpainCQ-petu.pii>:awi.llstar-t:uu.hanwillpeach:sichu.nmkeqff:6:&9peceiue:9:00tp-ain(0-r-etu.r-n):bwi.llstart:xia.nenwi.lLr-eacIt:haijingrtakeoff:7:3r-ecelue>13:。建tmin<0-retu.r-n〉:cwi.llstapt:sa:id.on?wi.l]_rea.ch:xia.ntakeoff:7:'ti0receiue-17:0?choosetheuap:toOrtingtotbcnunheroftrain;2■accordingtuthecits?;1inputthtinumberoftrain:bTheinformationofthetrainnumbeFstartcityreachcitytakeofftimcreceiuetimepricehxiamenhaijingf7:002丽tocontinue.pleasepressan^key6不足之处由于所学知识有限,难免会有许多不足之处,这里把这些无法改进和编写想法列出,希望以后在不断学习新知识的过程中能将这些一一解决。首先该系统没有显示出每辆列车目前最多可容量的人数以及乘客进行预定票,退票。根据实际我们可以知道现实的列车时刻表数据量是庞大的,除了以上的几个基本部分外,还有途径站点、到站时间、途经站点发车时间、有无空调、硬座硬卧、座位号等等信息。其次所有的列车信息都只是存储在链表中,并没有保存与文件中,一旦选择退出该系统后,所保留在链表中的数据信息都会丢失,再次进入该系统,又要重新输入,这样非常麻烦。而且列车时刻表都存储于相应的数据库之中,除了输入数据还应当由修改和删除数据等等功能。7设计体会上周刚做完C语言的课程设计报告,余温尚在,这周又要做课程设计的报告,本以为有了做C程序设计的基础,再将C语言的知识与数据结构的知识相结合就会顺利完成这次的课程设计,结果事实并不是这样,在这次的设计过程中仍遇到许多意想不到的困难与挫折。在设计的过程中,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。要想完成这一列车查询系统,首先必须规划出整个程序模块,这是完成一个项目的流程以及核心思想,但要实现各个模块也不是一件容易的事,通过上网查询和查阅书籍,再加上自己所学的知识,将各个问题用算法基本实现。即使程序编写出来,上机调试成功仍是一大阻碍,首先程序中出现的错误看都无法看懂更别说修改了,请同学帮忙将错误一一纠正,接着在输入列车信息后无法查询出列车信息,这下不止难住了自己,连同学都被难住了,最后只好救助于老师。在老师的指导下,终于将程序调试成功。编写该程序,使我熟悉了单向在实际运用问题中的操作,以前在学习数据结构中的单链表时,只知道将书本上单链表的建立,插入,删除,查找等算法掌握,通过这次的课程设计,使我明白书本上的任何知识都可以运用于实际,就像这次列车查询系统的的设计,我根据实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年专用版:临时设施转租合同协议
- 大班主题活动教案:时光隧道
- 2024年企业融资中介协议
- 大班安全上学期教案及教学反思《打电话要小心》
- 中班语言详案教案《瞧这一家子》
- 2024年区块链应用合作框架
- 健身赛事组织与运营方案
- 2024年历史文化街区保护开发合同
- 2024年初级保育员应知应会试题(含答案)
- 中班健康教案:避暑好方法
- 人教版七年级数学上册期中测试卷-附带有答案
- 道路旅客运输企业双体系建设的政策法规与标准培训
- DB3714-T 0004-2021 肉种鸭强制换羽技术规程
- 概率论与数理统计考试卷题库2 (七)
- 【制药废水预处理技术的发展综述报告6000字(论文)】
- 树立信心主题班会课件1
- 危险化学品从业人员安全培训考试试卷及答案
- 临床医学中的病患随访与健康教育
- 量子天线技术初探
- 冰箱温度监测登记表
- 拆除学校施工方案
评论
0/150
提交评论