数据结构 公交路线管理模拟系统_第1页
数据结构 公交路线管理模拟系统_第2页
数据结构 公交路线管理模拟系统_第3页
数据结构 公交路线管理模拟系统_第4页
数据结构 公交路线管理模拟系统_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选文档数 据 结 构课 程 设 计 报 告一、课程设计名称公交线路管理模拟系统二、实用工具软件Microsoft visual C+ 6.0三、课程设计内容简介1、 实践目的 1)、掌握图的概念、图的两种存储结构(邻接矩阵和邻接表)的存储思想及其存储实现;2)、掌握上机实现图的基本方法;3)、掌握有关图的操作并用高级语言编程实现;4)、熟练掌握图的深度、广度优先遍历算法思想及其程序实现;5)、掌握图的常见应用算法的思想及其程序实现。2、 实践要求1)、掌握本章实践的算法;2)、上机运行本章的程序,保存和打印出程序的运行结果,并结合程序进行分析;3)、按照你对图的操作需要,重新改写程序并运行,

2、打印出文件清单和运行结果;4)、注意理解各算法实现时所采用的存储结构;5)、注意正、逆邻接表。3、 系统简介及设计思路本项目是对公交车路线信息的简单模拟,以完成建立公交路线信息、修改公交路线信息和删除公交路线信息等功能。本项目的实质是完成对公交路线信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。公交站点之间的关系可以是任意的,任意两个站点之间都可能相关。而在图形结构中,结点之间的关系可以是任意的,图中任意两个数据之间都可能相关。所以可以用图形结构来表示n个公交站点之间及站点之间可

3、能设置的公交路线,其中网的顶点表示公交站点,边表示两个站点之间的路线,赋予边的权值表示相应的距离。因为公交路线是有一定的连续关系的,如果想输出从某一个起始点开始到某一终点结束的公交路线,就需要找到从某一点开始的第一个邻接点和下一个邻接点。因为在邻接表中容易找到任一顶点的第一个邻接点和下一个邻接点,所以本项目使用了图的邻接表存储结构。4、 程序设计流程为了创建公交路线,首先建立结构体载入公交车的相关信息:名称、司机、起始站、终点站、站数以及距离。利用邻接表把站点与站点之间的信息储存起来。用文件详细记载了路线信息,便于管理者初始化公交路线信息。再构造子函数来创建、及时修改、插入、删除公交信息、以及

4、查询公交路线是否出错,各站点之间的距离。用主函数来调用子函数,进入导航系统而进行操作。主函数(main)流程导航查询(initial)流程 汽车查询(包含车号、站台查询)流程新建(newb)流程修改路线(Modifyr)流程修改汽车(modifyb)流程删除汽车(delb)流程5、运行环境代码用C语言完成,布置在Microsoft visual C+ 6.0运行。Microsoft visual C+ 6.0具有集成开发环境,可提供编辑C语言,C+以及C+/CLI等编程语言。整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Micro

5、soft .NET框架。输入如下公交线路信息121141362734101716155891路 津A10001 司机1 6:00 1>2>3>4>52路 津A10002 司机2 6:15 6>7>4>8>17>123路 津A10003 司机3 6:00 9>7>3>10>124路 津A10004 司机4 6:30 6>13>1>12>14>175路 津A10005 司机5 7:00 15>5>8>16>10>2>13创建示意图(1路)创建结束选择N回到

6、主菜单,再选择A(导航查询)主菜单下选择B(公汽查询)就可以查询已有的公交信息,查询方式有公汽号查询、站台查询两种查询方式我们以公汽号查询(查询 津A10001)为例:返回到主菜单,选择D进入系统管理我们以修改路线为例(修改 津A10001)最后在主菜单下选择E(清空数据)最后选择F即可退出程序。四、 得意与不足之处:1、得意之处:1)、可以根据题目需要翻阅图书馆资料自学C+程序,完成代码。2)、完成过程中思路清晰,可以根据实际进行分析设计、编程调试,能够熟练应用软件的分析方法和工程设计方法。3)、够按要求编写课程设计报告书,能正确阐述设计和实验结果便于管理者自由创建公交车的相关信息2、 不足

7、之处:1)、程序太过繁琐,采用了一些不常用的语句2)、不能简易地查询任意两站之间的距离3)、不能查询任意的站点,只能查询起点和终点4)、不能任意输入两个站点,给出最优的乘车路线五、 自我感受:课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。 在这次课程设计中我遇到许多问题和麻烦,得到了老师的帮助和指导,才能够使得这次课程设计顺利的进行下去,另外,在程序调试过程中,也得到很多同学的帮助,给我及时指出错误,提出许多宝贵意见。在

8、此对老师和同学们表示感谢!八、参考文献:数据结构实践训练教程 刘光然 主编 南开大学出版社数据结构 严蔚敏 主编 清华大学出版社C语言程序设计 谭浩强 主编 清华大学出版社附录:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>struct bus char num30;/车号char driver50;/司机char stime30;/发车时间char start30;/起始站char end30;/终点站int z;/站数char *pr;/指向

9、路线的首指针 struct bus *next;/下一辆车的结构体;struct bus *bhead=NULL;/放公汽信息的头指针struct bus *bi=NULL;/放公汽信息的最后的指针void initial() FILE *fp; fp=fopen("bus.txt","r"); if(fp=NULL)printf("nn无公汽信息文件!");return; fseek(fp,0,SEEK_END); int i,n; n=ftell(fp)/sizeof(struct bus); /printf("nnnn

10、一共有%d辆公汽!",n); rewind(fp); struct bus *p;/for for(i=0;i<n;i+) p=(struct bus *)malloc(sizeof(struct bus ); fseek(fp,i*sizeof(struct bus),0); fread(p,sizeof(struct bus),1,fp);/写入信息,其中地址是无用的信息 p->next=NULL;/初始化时下一个指向空,都是一个个单独的 p->pr=NULL;/让路线为空/路线信息存放在文件名为” 车号 “的文件中;车号是唯一的 FILE *fp1; fp1=

11、fopen(p->num,"r"); if(!fp1) printf("n%s号车无初始路线!",p->num); else char * p1; p1=(char *)malloc(p->z*40*sizeof(char) ); fread(p1,p->z*50*sizeof(char),1,fp1);/将路线写入内存 p->pr=p1; fclose(fp1); / printf("nnnn初始化%s号车路线成功!",p->num); /路线信息 if(bhead=NULL) bhead=bi=

12、p; else bi->next=p; bi=p; /for结尾/printf("nnnn初始化%d辆车成功!",n);fclose(fp);void newb()loop1: printf("nnnn创建新公汽nn"); struct bus *p; p=(struct bus *)malloc(sizeof(struct bus ); p->next=NULL; p->pr=NULL;loop2: printf("n请输入新公汽号:nn"); scanf("%s",p->num); st

13、ruct bus *pj=bhead; while(pj) if(strcmp(pj->num,p->num)=0)printf("nn错误,该公汽号已经存在!nn"); goto loop2; pj=pj->next; printf("n请输入新公汽司机姓名:n"); scanf("%s",p->driver); printf("n请输入新路线发车时间nn"); scanf("%s",p->stime); loop3: printf("nnn请输入新路线

14、总站台数(>=2)nn"); scanf("%d",&p->z); if(p->z>=2) p->pr=(char *)malloc( p->z*50*sizeof(char) ); p->pr0='0' int i;char cc40; for(i=1;i<=p->z;i+) printf("n请输入公汽第%d站台名称:",i); scanf("%s",cc); if(i=1)strcat(p->pr,cc);strcpy(p->st

15、art,cc); elsestrcat(p->pr,"->");strcat(p->pr,cc); strcpy(p->end,cc); printf("nn自动生成公汽路线%s",p->pr); else printf("nn错误,该公汽站台数小于2,请重新输入!nn"); goto loop3;if(bhead=NULL)bi=bhead=p;elsebi->next=p;bi=p; printf("nn%s号公汽创建成功!",p->num); printf("

16、;nnn您想 继续新建(A) 退出创建(N)-请选择 A 或 N nn "); char c;c=getch(); if(c='a'|c='A') goto loop1; else return;void modifyr() char c,b20; printf("nnnn 修改路线nn"); loop: printf("n请输入要修改路线的公汽号:nn"); scanf("%s",b); struct bus *p=bhead; int n=1; while(p) if(strcmp(p-&

17、gt;num,b)=0)printf("nn司机姓名: %s",p->driver);n=0;break; p=p->next; if(n) printf("nn错误,公汽号不存在!nn重新修改(A) 退出修改(N)-请选择 A 或 N nn "); char c; c=getch(); if(c='a'|c='A') goto loop; else return; loop1: printf("nnn请修改路线总站台数(>=2)nn"); int nn; scanf("%d

18、",&nn); if(nn>=2) p->pr=(char *)malloc( p->z*50*sizeof(char) ); p->pr0='0' p->z=nn; int i;char cc40; for(i=1;i<=p->z;i+) printf("n请输入公汽第%d站台名称:",i); scanf("%s",cc); if(i=1)strcat(p->pr,cc);strcpy(p->start,cc); elsestrcat(p->pr,"

19、->");strcat(p->pr,cc); strcpy(p->end,cc); printf("nn自动生成修改后的路线%s",p->pr); else printf("nn错误,该公汽站台数小于2,请重新输入!nn"); goto loop1; printf("nnn%s号公汽修改成功!",p->num);printf("nnn您想 继续修改(A) 退出修改(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A

20、') goto loop; FILE *fp; fp=fopen(p->num,"w"); fwrite(p,nn*50*sizeof(char),1,fp); fclose(fp); /保存线路信息 void modifyb() char c,b20; printf("nnnn 修改公汽nn"); loop:printf("n请输入要修改路线的公汽号:nn"); scanf("%s",b); struct bus *p=bhead; int n=1; while(p) if(strcmp(p->

21、;num,b)=0)printf("nn司机姓名: %s 发车时间: %s AM",p->driver,p->stime );n=0;break; p=p->next; if(n) printf("nn错误,公汽号不存在!nn重新修改(A) 退出修改(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop; else return; printf("n请输入要修改%s公汽的新司机:nn",p->num); scanf(&q

22、uot;%s",p->driver); printf("n请输入要修改%s公汽的发车时间:nn",p->num); scanf("%s",p->stime); printf("nnn%s号公汽修改成功!",p->num);printf("nnn您想 继续修改(A) 退出修改(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop;void showb()struct bus *p=bhead;

23、if(!p)printf("nn公汽线路信息数据库为空!"); return; elseprintf("nnn 公汽信息数据库 ");printf("n|-|"); int n=1;while(p)printf("n| 公汽号:%s 站数:%d 发车时间:%s AM 司机:%s ",p->num, p->z, p->stime,p->driver);printf("n| 路线: %s",p->pr);printf("n|-|"); n=0;p=p

24、->next;if(n)printf("nn公汽线路信息数据库为空!"); void lookb() char c,b20; /printf("nnnn 查询路线nn"); loop: printf("n请输入要查询的公汽号:nn"); scanf("%s",b); struct bus *p=bhead; int n=1; while(p) if(strcmp(p->num,b)=0)n=0;break; p=p->next; if(n) printf("nn错误,公汽号不存在!nn重

25、新输入(A) 退出查询(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop; else return;printf("n|-|"); printf("n| 公汽号:%s 站数:%d 发车时间:%s AM 司机:%s ",p->num, p->z, p->stime,p->driver);printf("n| 路线: %s",p->pr);printf("n|-|"); printf(

26、"nnn%s号公汽查询成功!",p->num);printf("nnn您想 继续查询(A) 退出查询(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop;void lookr()/ printf("nnnn 查询公汽nn"); char c,b40;loop:/printf("n 查询公汽菜单");/printf("n|-|"); printf("n n n n 请选择查询方式: &qu

27、ot;); printf("n|-|"); printf("n| A 起始站查询 |"); printf("n|-|"); printf("n| B 终点站查询 |"); printf("n|-|"); printf("n| C 退出 |"); printf("n|-|"); c=getch();if(c='B'|c='b')printf("n请输入要查询的终点站:nn"); scanf("%s

28、",b); struct bus *p=bhead; int n=1; printf("n 您可以乘坐以下公汽到达%s",p->end); printf("n|-|"); while(p) if(strcmp(p->end,b)=0) n=0; printf("n|公汽号:%s 路线: %s" ,p->num,p->pr); printf("n|-|"); p=p->next; if(n) printf("nn错误,终点站不存在!nn重新输入(A) 退出查询(N)-

29、请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop; printf("nn您想 继续查询(A) 退出查询(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop;if(c='A'|c='a') printf("n请输入要查询的起始站:nn"); scanf("%s",b); struct bus *p=bhead; i

30、nt n=1; printf("n 您可以乘坐以下公汽起始站为%s",p->start); printf("n|-|"); while(p) if(strcmp(p->start,b)=0) n=0; printf("n|公汽号:%s 路线: %s" ,p->num,p->pr); printf("n|-|"); p=p->next; if(n) printf("nn错误,起始站不存在!nn重新输入(A) 退出查询(N)-请选择 A 或 N nn "); c=get

31、ch(); if(c='a'|c='A') goto loop; printf("nn您想 继续查询(A) 退出查询(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop;void delb() char b20; printf("nnnn 删除公汽nn"); loop:printf("n请输入要删除路线的公汽号:nn"); scanf("%s",b); struct bus *p=bhead

32、; struct bus *p1=bhead; int n=1,y=0; while(p) if(strcmp(p->num,b)=0)n=0;break; y+; if(y>1) p1=p1->next; p=p->next; char c; if(n) printf("nn错误,公汽号不存在!nn重新输入(A) 退出删除(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop; else return; if(p=bhead)bhead=bhead->

33、next; else p1->next=p->next; printf("n删除路线的公汽成功!nn"); printf("nn您是 继续删除(A) 退出删除(N)-请选择 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop;void save() FILE *fp; fp=fopen("bus.txt","w"); struct bus *p; p=bhead; int n=0; while(p) /第一个while fs

34、eek(fp,n*sizeof(struct bus),0); fwrite(p,sizeof(struct bus ),1,fp); n+; FILE *fp1; fp1=fopen(p->num,"w"); fwrite(p->pr,p->z*50*sizeof(char),1,fp1); fclose(fp1); p=p->next; fclose(fp); /printf("nnnn保存%d辆车成功!",n);void release()bhead=bi=NULL;printf("nnn数据清空成功!"

35、);void show1() printf("nnnnn |-|");printf("n | 主 菜 单 |"); printf("n |-|");printf("n | A 导 航 查 询 |"); printf("n |-|"); printf("n | B 公 汽 查 询 |"); printf("n |-|"); printf("n | C 新 建 公 汽 |"); printf("n |-|"); prin

36、tf("n | D 系 统 管 理 |"); printf("n |-|"); printf("n | E 清 空 数 据 |");printf("n |-|");printf("n | F 退 出 程 序 |"); printf("n |-|");printf("n | 请您选择一个任务 |"); printf("n |-|nnn");void show2()printf("n |-|");printf("

37、;n | 管 理 菜 单 |"); printf("n |-|");printf("n | A 修 改 路 线 |"); printf("n |-|"); printf("n | B 修 改 公 汽 |"); printf("n |-|"); printf("n | C 删 除 公 汽 |"); printf("n |-|"); printf("n | D 退 出 程 序 |"); printf("n |-|"); printf("n | 请您选择一个任务 |");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论