版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学与技术系课程设计任务书20 17 20 18学年第 一 学期课程C 语言课程设计课 程 设计 名 称公交路线管理系统学生姓名学号专业班级指导教师20 181 年8 月一、需求分析本系统主要功能是实现对公交路线的管理和维护。我们都知道,每个城市都会有公交路线的改动,如果使用这个系统,就可以及时的对路线信息进行修改和保存,是非常方便的,而且该系统使用起来也很方便。用户只需根据显示的提示信息进行选择和输入就可以实现你要求的功能。该系统具有添加,查询,删除,修改和显示所有记录的功能。用户可以根据实际情况进行相应的功能选择。其具体功能简单描述如下:(1)保存:即将信息存入指定文件中。当用户对原
2、始数据进行相关的改动(主要是对路线信息进行增加、删除、修改)之后,用户可以根据自己的选择判断是否要保存到文件中,这样就实现了信息的记录功能,以方便用户随时进行查看。(2)添加:即添加一条新的公交路线或者是某一条路线上的站点。每次可以添加一条路线信息,若用户想添加多条路线信息的话可以重复执行该功能,同样的,添加站点的话也是每一次添加一个站点,若用户想添加多条路线信息的话也只需要重复执行该功能即可。这样,就实现了对公交路线的添加信息管理。(3)查询:即能够查找出你要的公交路线信息和总共有多少站。简单地说,就是用户先选择你要查询的公交路线号,在输入起点站和终点站名称,然后系统就会自动显示出起点站和终
3、点站之间共有多少站点,以及起点站和终点站之间所有站点的序号和名称,从而使用户一目了然的知道站点信息,而不需要像看地图那样一个站点一个站点的用肉眼进行查找,这就为用户节省了很多时间。(4)删除:即能删除掉一条你所不需要的公交路线信息和某一条路线上的站点。若要删除路线时只需要输入你要删除的公交路线号即可,若要删除站点也只需输入你要删除的站点序号,不需要输入该站点名称。5) 修改:即能修改一条你需要该的路线信息。 修改内容包括:修改该条公交路线号、修改站点名称(输入新的信息时该条路线的站点长度不能改变,若要改变站点长促可以选择增加和删除功能,即可实现) 。6) 显示路线信息 : 即将路线信息显示到屏
4、幕中,供用户查看。该功能比较简单,在这里不具体说明。(7)二、算法设计1、设计思想:本系统的设计流程简单比较简单,原始数据全部都保存在文件中,用户就不必自己一个一个的输入信息。程序执行时从文件中读出,文件的读取操作在下文中我会详细说明,这里就不做具体说明了。创建动态链表和结构体数组对路线信息进行存储,因为使用链表时对程序的插入、删除会比较方便,那么插入和删除就相当于对链表节点的删除和插入。写无返回值的主函数void main()对系统的功能进行显示,每次用户选择某一功能时都可以看到路线的大致信息,以便于用户更准确的选择功能。其中利用switch条件分支语句进行子函数功能的选择和调用。并且使用w
5、hile 循环语句进行多次循环执行,就可以实现对信息的多次删除、增加、修改,知道达到用户满意时由用户自己选择退出系统。通同时使用了清屏函数,对上一次程序运行的结果清楚只显示本次运行的相关信息,这样的话就做到了界面的友好化,简单明了,不冗杂,更方便观看。当用户对信息进行有关的改动之后,用户根据自己的选择是否保存入文件中,就可以保存他所要的信息了。2其主要流程图如下:开始路线信息输入选择信息 nnnext 指向新建立的节点,新节点的下一结点赋值为空,从而完成了增加路线信息的功能。如果是添加路线站点,先确定要在哪条路线上添加,所以要先找到该条路线,并用指针指向该节点,然后找该站点将要插入的位置,找到
6、后,将其后面的站点依次后移, 把那个空的位置空间腾出来, 用来置放添加的节点的信息,这样就实现了对站点的添加。模块六:删除线路信息。该函数返回的是头指针 head,所以该函数是一个指针函数, 也是作为子函数的形式出现。可以删除整条路线,也可以删除线路上的某一个站点,删除一整条路线时,就相当于删除链表中的某一个节点,先确定你要删除的线路号,找到后,只需要将其前一个节点指向其后一个节点,所以删除时还需要考虑到删除的是首节点还是末节点还是中间节点,若删除首节点只需将 head 指向 head 的下一个节点,若删除末节点,将倒数第二个节点之后赋值为空即可,因此对线路的删除还是相对比较简单的,但是要求我
7、们对链表的相关操作熟练掌握。删除站点时,先确定你要删除的是哪条路线上的站点,找到后一个指针会指向该节点,再确定你要删除的站序号,确定后将其后一个站名称移到当前删除节点的位置,就可以将该站名覆盖,从而实现站点的删除。模块七:修改线路信息。同上分析,该子函数也是一个指针函数,修改时,先确定你要修改哪条路线,指针指向该节点,在重新输入新的信息即可,新输入的信息会覆盖原有节点信息,所以可以实现对线路进行修改,但是修改时需要注意的是,修改时新输入的站点数目不能改变模块八:查询路线信息。该子函数是一个无返回值的函数。使用时先输入你要找的路线号,再输入你要经历的起点站和终点站,程序就会为你显示出起点站和终点
8、站之间共有多少站,并且输出起点站和终点站之间所有站序号和站点名称。模块九:将信息保存到文件中。当用户对原始路线信息进行改动之后,或许要将修改过后的信息保存起来,此时用户就可以自己选择是否要将信息保存起来,保存的位置是本系统实现设定好的,保存之后的信息在 D 盘根目录下,也方便用户的查看。模块十:主函数。构建无返回值的主函数,主函数用来实现对子模块的调用功能,用 while 循环语句来控制循环次数,用户可以根据自己的需求选择任何时候退出系统。对子模块的调用主要使用 switch 开关控制语句,根据选择实现用户要求的功能。3、实现注释:本系统对于菜单显示表上的功能基本上都能实现,但是不是很完善,很
9、多地方我还没有考虑到,或许是考虑的不够周全,但是有些不足的地方,是我的能力所不能达到的,还望老师体谅,不过等以后学过新的知识用新的方法或许就能将系统做进一步的改进。4、算法设计中一些新的想法:我觉得本系统很不完善,很多功能虽然能实现,但是实现的不够完美,很多细节我都没有考虑到,比如查询路线时,不能大致故略出起点站和终点站需要的时间;修改路线信息时,重新输入该条路线的信息时,路线上站点的个数不能改变,要改变的话还得选择增加或删除功能;还有就是用户将改动过后的信息保存到文件中后,以后该文件中的数据用户如果要使用的话,不能从文件中读取显示到屏幕上。这些都是我的系统一些不完善的地方, 希望以后有能力的
10、时候, 能进一步对系统进行修改和完善。三、用户手册用户在适用本系统时, 我在这里有几点说明要解释一下。 以便用户更好的使用本系统。(1)路线号整形数据,站序号是整形数据,站名时字符串。(2)输入路线信息时,站的序号是有次序的,从 1 开始依次往后增加。如果你要结束站点的输入,只需要在最后一个站点后在输入下一个站的序号,但是本站的站名一定要是 end,用来表示站点录入结束的结束标志。(3)保存信息的文本文档,一点要放入G 盘根目录下,因为我在写本程序时就规定了将文本文档置于G 盘根目录下,所以以后用户查看数据信息时可以从G 盘根目录下查找。四、调试及测试本程序的运行结果如下所示:5( 1)( 2
11、)6( 3)( 4)7( 5)五、课程小结通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,但从 C 语言这门课程开始,已发现程序设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计算机的机体也有了一个大体的了解。这次实训是老师给了题目,经过自己的努力,实现要求。先做简单的输出,一步步的再做其它要求,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。在具体操作中对这学期所学的 C 语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。发现上
12、机实训的重要作用,特别是对数组和循环有了深刻的理解。通过实际操作,学会C 语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。深刻体会到“没有做不到的,只有想不到的” ,“团结就是力量”,“实践是检验真理的标准”的寓意。在此希望以后应多进行这样的实训,加长设间,培养我们独立思考问题的能力,提高实际操作水平。六、参考资料81、 谭浩强编著, C 程序设计 1991 年 7 月2、 裘宗燕 著,从问题到程序科学出版社,北京大学出版社,1999 年 4 月。3、 刘瑞挺主编,计算机二级教程,南开大学出版社,1996 年 10 月。4、 陈朔鹰等编著, C语言程
13、序设计基础教程,兵器工业出版社,1994 年 9 月5、 姜仲秋等主编, C语言程序设计,南京大学出版社,1998 年 1 月。6、C程序设计(第二版),谭浩强编,清华大学出版社, 1999 年 12 月。 本书以初学者为读者对象,要求的起点低,详细而透彻地讲述了C语言各个语句的语法规则,通过典型的简单的例题,引领初学者进入C 语言的世界。7、C 语言程序设计题解与上机指导 ,谭浩强编,清华大学出版社, 2000 年 11 月。 与教材配套的上机指导。附录:1、源程序清单:#include stdio.h #include malloc.h #include string.h #include
14、 stdlib.h struct stationint num;char name20; stop50;/* 公交站 */typedef struct buslineint busnum;struct station stop50;struct busline *next;BL;BL *head;/* 菜单 */void Menu() printf(*n);printf(*欢迎进入公交信息管理系统*n);printf(*n);printf(*);9printf(*n);printf(*0.退出系统 *n);printf(*n);printf(*1.显示公交车线路信息 *n);printf(*n
15、);printf(*2.增加公交车线路信息 *n);printf(*n);printf(*3.删除公交车线路信息 *n);printf(*n);printf(*4.修改公交车线路信息 *n);printf(*n);printf(*5.查询公交车线路信息 *n);printf(*n);printf(*6.保存公交车线路信息 *n);printf(*n);/* 函数功能:删除 */BL *Delete() BL *q,*p=head;int key,r,j=1,x,choise,k; char ch5=end;printf( 您是要删除公交路线还是线路站点: n); printf(1- 删除公交路
16、线 2- 删除站点 n); printf( 你的选择: ); scanf(%d,&choise);switch(choise)case 1:printf( 请输入你要删除的公交路线号 ); scanf(%d,&key);while(key!=p-busnum & p!=NULL) q=p;p=p-next;if(p-busnum=key) if(p=head)10head=p-next;elseq-next=p-next;elseprintf( 没有找到你要删除的公交路线! ); return head;case 2:printf( 选择线路: ); scanf(%d,&key);while(
17、key!=p-busnum & p!=NULL) q=p;p=p-next;printf( 输入你要删除的站点序号: ); scanf(%d,&x);for(j=1;jstopj.num)break;j+;r=j; for(k=r;strcmp(,ch)!=0;k+)strcpy(,p-stopk+1.name); strcpy(,);return head;BL *Correct() BL *p=head,*q; int key,j=1;char ch5=end; printf( 选择你要修改
18、的路线号 :); scanf(%d,&key);while(p!=NULL) if(p-busnum=key) break;11q=p; p=p-next;printf(重新输入该条路线信息(包括路线号、站序号、站名称,各个站的站数不变):n); scanf(%d,&p-busnum); doscanf(%d%s,&(p-stopj.num),); j+;while(strcmp(,ch)!=0); return head;/* 函数功能:添加路线 */BL *Add()BL *p=head,*q,*t; char nme20;int j,c
19、hoise,k,r,key,x,c; char ch5=end;printf( 您要添加公交路线还是公交站点? n); puts(1- 添加公交路线 2- 添加公交站点 n); printf( 请选择: );scanf(%d,&choise);switch(choise)case 1:j=1;t=(BL *)malloc(sizeof(BL); printf( 输入你要添加的公交路线信息: n); scanf(%d,&(t-busnum);doscanf(%d%s,&(t-stopj.num),); j+;while(strcmp(,ch)!
20、=0); while(p!=NULL)12q=p;p=p-next;q-next=t; t-next=NULL; return head;case 2:j=1; printf( 选择你要添加站点的公交路线: );scanf(%d,&key);while(p!=NULL)q=p;if(p-busnum=key) break; p=p-next;printf( 输入你要添加的站序号及站名称: ); scanf(%d,&x);scanf(%s,nme); while(strcmp(,ch)!=0)if(x=(p-stopj.num)r=j;break;j+;r=j;c=j;
21、while(strcmp(,ch)!=0)c+; for(k=c;k=r;k-)strcpy(p-stopk+1.name,); strcpy(,nme);return head;13/* 函数功能:查找路线 */void Search() BL *p=head,*q; int key,j=1,c,d;char str120,str220,ch5=end; printf( 输入公交车号: ); scanf(%d,&key);printf(n 输入起始站和终点站名称: ); scanf(%s%s,str1,str2);whi
22、le(p!=NULL) if(p-busnum=key) break; q=p;p=p-next;while(strcmp(,ch)!=0) if(strcmp(,str1)=0)c=j; if(strcmp(,str2)=0)d=j;j+;printf( 起始站和终点站之间共有 %d站n,d-c-1); printf( 各个站的序号及名称为: n); for(j=c;jstopj.num,); printf(n);/* 函数功能:保存数据 */Save()FILE *fp;BL *t;14int
23、j;char ch5=end; t=head;fp=fopen( 保存的数据 .txt,w+); if(fp=NULL)printf(File can not open!n); exit(0);while(t!=NULL) fprintf(fp,%dt,t-busnum); j=1;dofprintf(fp,%d%s-,t-stopj.num,); j+;while(strcmp(,ch)!=0); fprintf(fp,n);t=t-next;fclose(fp);/* 函数功能:读取数据 */BL *Creat() BL *p,*q; int
24、 j=1;char ch5=end; FILE *fp;fp=fopen(busline.txt,r+);if(fp=NULL)printf(不能打开此文件! );exit(0);p=(BL *)malloc(sizeof(BL);head=p;q=p;15fscanf(fp,%d,&(p-busnum); dofscanf(fp,%d %s,&(p-stopj.num),); j+;while(strcmp(,ch)=1); while(!feof(fp)j=1;p=(BL *)malloc(sizeof(BL); q-next=p;q=p; fscanf(fp,%d,&(p-busnum); dofscanf(fp,%d %s,&(p-stop
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB11∕T 446-2015 建筑施工测量技术规程
- 废油回收供销合同(2篇)
- 2024商家合作协议合同范本
- 沪粤版初中物理八下期中测试卷(二)(解析版)
- 简支钢桁桥课程设计
- 手术室护士小儿先天性巨结肠根治术护理配合常规
- 2024域名出售转让合同范本
- 2024建筑石材供货合同范本
- 数字影视综合课程设计
- 流速控制器设计课程设计
- 人才引进考核评分表
- 压力管道安装许可规则-TSG D3001-2021
- 煤气中毒事故应急演练预案方案
- 体检科医疗质量控制工作计划
- 国有公司总部礼品管理办法 模版
- 口腔颌面部检查课件
- 2020年重症医学科病人呼吸心跳骤停演练方案及脚本
- 平衡记分卡应用流程
- 呼吸道感染病毒培训课件
- 重症超声课件
- 物联网信息安全知识考核试题与答案
评论
0/150
提交评论