1、据数结构课程设计方案说明文本公交乘车大学论文数据结构与算法设计课程设计任务书题 目公交咨询程序学生姓名孙宝琳学号200701030124专业班级数学0701设计内容与要求【问题描述】 利用图实现公交咨询系统,包括公交线路查询、站点查询以及最优乘车方案的查询。【软件功能】1 从文件中接收图和公交车信息;2 可实现确定公交线路查询,即输出该车的所有站点;3 可以对某一个站点进行查询输出该站点的所有下一站;4 可以对乘车方案进行查询,即输出确定起点,终点的最优乘车方案,换车输出换车次数及换车站点;【算法思想】设计公交车类(车号,路程长度,终点站)、图类(站点名,公交车类,现有路线条数,现有站点数)、
2、Dijkstra算法类(最短路径上的最后一个站点,最短路径的站点数);从文件中接收内容并对图和公交车进行初始化,公交线路查询在图中找到起点站,按顺序输出所有公交车号相同的站点;乘车方案中利用Dijkstra算法算出最优路线,并有最短路径的最后一个站点将路径上的所有站点入栈,出站时判断是否换车并输出方案;【提交成果】1.“数据结构与算法设计课程设计任务书”一份,打印装袋;2.“数据结构与算法设计课程设计报告”一份,打印装袋;3、上面两项内容的word文档,通过电子邮件交到指导教师。起止时间2009 年 6 月 8 日 至 2009 年6月 19 日指导教师签名年 月 日系(教研室)主任签名年 月
3、 日学生签名孙宝琳 2009年 6月18 日数据结构与算法设计课程设计 专业 数学与应用数学 班级 数学0701 学号 200701030124 姓名 孙宝琳 完成日期 6.18 指导教师(签名)1、 程序设计说明书【设计题目】公交咨询程序【问题描述】利用图实现公交咨询系统,包括公交线路查询、站点查询以及最优乘车方案的查询。【软件功能】1 从文件中接收图和公交车信息;2 可实现确定公交线路查询,即输出该车的所有站点;3 可以对某一个站点进行查询输出该站点的所有下一站;4 可以对乘车方案进行查询,即输出确定起点,终点的最优乘车方案,换车输出换车次数及换车站点;【算法思想】 设计公交车类(车号,路
4、程长度,终点站),图类(站点名,公交车类,现有路线条数,现有站点数),Dijkstra算法类(最短路径上的最后一个站点,最短路径的站点数);从文件中接收内容并对图和公交车进行初始化,公交线路查询在图中找到起点站,按顺序输出所有公交车号相同的站点;乘车方案中利用Dijkstra算法算出最优路线并有最短路径的最后一个站点输出乘车方案;【类的设计】 struct Bus /公交车类 int number; /公交车号 int length; /总站数 char bus_stateMaxstate20; /站点;class Graph /建立无向图 friend class Distance; /声明
5、友元类private: char statenameMaxstate20; /站点 int busnumberMaxstateMaxstate; /邻接矩阵,权值为这两个站点的公交车号 int currentstate; /当前站点数 int currentbus; /当前公交车数 Bus busesMaxbus; /公交车信息public: Graph() ; /无参构造函数,对成员变量初始化 void Insertstate(char state);/插入一个站点void Insertbusnumber(char V1,char V2,int busnum) ;/插入权值void Set_
6、graph() ; /图的建立bool IsGraphFull() ; /判断图是否已满void show_busmessage(int number); /输出公交信息int searchbusnumber(char v0,char v1) ; /查找指定站点的公交车号码void direction(char v0,char v1) ; /输出指定站点的公交车方向friend void busline(); /把外部函数定义为图的友元函数,以便使用图的私有成员变量 friend void searchstate(); friend void bestproject(); friend voi
7、d mainsurface();class StackNode /栈结点friend class Stack; /友元类private: char date20; /结点数据 StackNode *link; /结点链指针public: /构造函数:结点赋值 StackNode (char d =0,StackNode *l =NULL);;class Stack /定义栈private: StackNode *top; /栈顶指针public: Stack ( ) :top(NULL) /构造函数 Stack ( ); /析构 void Push(char item); /进栈 int Po
8、p(char x); /退栈 int GetTop(char x); /读取栈顶元素 void MakeEmpty (); /把栈置空 int IsEmpty() ;class Distance:public Graph /定义最短距离类private: char path20; /最短距离的前一站 int distanceMaxstate; /最短距离public: void bestchooce(char v0,char v1); /最优方案;【存储结构设计】 使用邻接矩阵int busnumberMaxstateMaxstate;存储图的信息;公交车信息采用结构体数组Bus busesM
9、axbus;存储;栈使用链表来实现;【模块划分及调用关系】 共有三个模块:公交线路查询Busline()、站点查询Searchstate()、最优方案Bestproject()【模块流程图】1. Busline(): 存 存在 2 searchstate():3 bestproject():【界面设计】 采用简单的人机会话,使操作简单明了;【用户手册】 在程序所在文件夹下建立“公交查询.txt”,并输入以下内容: 30世家星城-通讯学院-石油公寓-潘家庄-明德门-杨家村-城南客运站-西八里村-医学院-纬二街-雁南路-大雁塔-赛格电脑城-李家村-和平门-大差市-五路口-火车站;603电视塔-国展
10、中心-吴家坟-八里村-纬二街-小寨-长安立交-省体育场-草场坡-南稍门-南门-钟楼-北门-火车站;37城北客运站-公交六公司-方新村-龙首村-北关-钟楼-东门-兴庆路-建工路-幸福路南口;(每一个车的线路占一行); 编译运行程序,根据提示执行程序;要想有更为准确的方案,可以在“公交查询.txt”中加入公交车线路;2、 程序上机调试报告【语法错误及其排除】1 函数赋值时,将变量赋给了指针; 使用指针传值;2 在出栈时没有判断栈是否为空,导致top指空 在出栈前判断IsEmpty();【算法错误及其排除】1 在建立图中没有对a数组进行置空,导致数据混乱;在使用a之前对a数组赋空;2 在输出最优结果
11、时 没有保留前一站使程序无法判断是否换车加入b数组保留前一站;3、 程序测试结果【测试数据】30世家星城-通讯学院-石油公寓-潘家庄-明德门-杨家村-城南客运站-西八里村-医学院-纬二街-雁南路-大雁塔-赛格电脑城-李家村-和平门-大差市-五路口-火车站;603电视塔-国展中心-吴家坟-八里村-纬二街-小寨-长安立交-省体育场-草场坡-南稍门-南门-钟楼-北门-火车站;37城北客运站-公交六公司-方新村-龙首村-北关-钟楼-东门-兴庆路-建工路-幸福路南口;(每一个车的线路占一行);【输出结果】1公交线路查询: 2 站点查询:3 最优方案:【程序性能评价】 使用简单;结果正确、明了;【性能改进
12、方向】1. 将邻接矩阵改为三维,即在相同两站间由多个公交可以到达;2. 在站点里加入方位,即在寻找最优结果的时候可以不必将所有站点进行操作,加快运行速度;3. 在公交车类中加入收费,在最优结果输出时计算收费(有刷卡、投币、按站收费);【收获及体会】 通过这个程序的编写使我对c+中文件的操作、图的操作、栈的操作、查找等内容有了更深的理解,在编译的过程中也是我知道了自己的数据结构课程内容还很浅,还需要在努力;4、 源程序代码#include/文件库#include#include/字符串函数库const int Maxbus=100;/最大公交车数const int Maxstate=200;/最
13、大站点数const int MaxValue=999;/最大值struct Bus /公交车类 int number; /公交车号 int length; /总站数 char bus_stateMaxstate20; /站点;class Graph /建立无向图 friend class Distance; /声明友元类private: char statenameMaxstate20; /站点 int busnumberMaxstateMaxstate; /邻接矩阵,权值为这两个站点的公交车号 int currentstate; /当前站点数 int currentbus; /当前公交车数
14、Bus busesMaxbus; /公交车信息public: Graph() /无参构造函数,对成员变量初始化 for(int i=0;iMaxstate;i+) for(int j=0;jMaxstate;j+) if(i=j) busnumberij=-1; /自己到自己没有车 else busnumberij=MaxValue; currentstate=0; currentbus=0; for(i=0;iMaxbus;i+) busesi.number=-1; busesi.length=0; void Insertstate(char state) /插入一个站点 if(!IsGraphFull() /如果图没满 for(int
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1