xxxxxxxxxxx姓名-芝罘区主要景点公交车查询
学院________________专业_________________班级_____________本专 学号_________________姓名__________________
                                                        密封线    学生须将文字写在此线以下
台湾风景名胜鲁东大学  数学与信息学院 20092010学年第1学期
《数据结构专题设计》课程论文
课程号:2102791 
任课教师 陈军          成绩         
论文题目:(可指定题目,也可说明题目范围。)
从给出的参考选题中选(或自选)一个能体现数据结构课程特点的课题,用C语言(TC/VC++)编程实现所述功能,用论文形式描述整个工作。详见《数据结构专题设计 课程任务和要求》文档。
论文要求:(对论文题目、内容、行文、字数等作出判分规定。)
按右边给定的模板要求写作,字数4000字以上(不含附录)。
评分采用五级制:优秀、良好、中等、及格、不及格。
评分依据包括题目难易程度、程序运行情况、数据结构和算法设计合理与否、算法注释的清晰程度;论文的规范程度、撰写质量(条理清晰,内容充实,文字通顺,图表恰当);总结的深刻程度、工作量和创新性;交作业的及时程度、独立完成情况,以及其它参考因素。
不同同学可以选择同类题目,但在具体功能、程序代码、论文写作上都要有所不同,若发现雷同,均判为不及格。
教师评语:
                                教师签字:
                                    2009 11 2
芝罘区主要景点公交车查询
1、引言
随着新学期的开始,鲁东大学又迎来了新一届同学。为了大一新生能够迅速熟悉烟台芝罘区,适应烟台生活,本文在所学图论知识的基础上建立了一个芝罘区主要景点公交查询程序。因为主要是为鲁东大学的同学服务,公交路线的起始点都是鲁东大学。并给出了相关景点的粗略信息,以及从鲁东大学到景点的站点数。新同学可以通过此程序查询芝罘区主要景点信息及可以乘坐哪路公交车、及到达该景点经过车站数最少的公交车。
2、需求分析
    1.根据学生平日出游参观景点的特点,主要选取了芝罘区六个主要景点区。此外考虑经过鲁东大学的公交车主要有33路、46路、50路、52路公交车,将各路公交车在鲁东大学的起点及六个主要景区的代表景点,抽象成一个无向带权图。图中分别顶点表示33路、46路、50路、52路公交车在鲁东大学东门、南门或是西门起始站点;并且顶点存放起始站点和景点的编号、名称、简介等信息,图中的边表示分别从起始站点到所去景点乘不同公交车经过的站点数,并作为路径长度。
2.本程序的目的是为来鲁东大学新生提供烟台芝罘区主要景点相关信息及公交车的查询,通过程序可以查询:
1)从鲁东大学到某一景点所需要乘坐的公交车,及经过的站点数。
2)查询各个景点的信息。
3)到达某一景点最优公交线路。
4)查询经过鲁东大学的不同公交车的公交线路。
3 经过鲁东大学的公交路线及主要景点图如下。
3、概要设计
3.1抽象数据类型图的定义
本论文的程序设计,主要是在图论知识的基础上进行设计,因此首先给出抽象类型图的定义,以便结合实际情况进行图的构造。
ADT Graph {
  数据对象VV是具有相同特性的数据元素的集合,称为顶点集。
  数据关系R
        R={VR}
        VR={(v,w)|vwV,(v,w)表示vw之间存在路径}
  基本操作P
    CreatGraph(&G,V,VR)
      初始条件:V是图的顶点集,VR是图中边的集合。
      操作结果:按VVR的定义构造图G
    DestroyGraph(&G)
      初始条件:图G存在。
      操作结果:销毁图G
  LocateVex(G,u)
      初始条件:图G存在,uG中顶点有相同特征。
      操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其它信息。
    GetVex(G,v)
      初始条件:图G存在,vG中某个顶点。
      操作结果:返回v的信息。
  FirstEdge(G,v)
      初始条件:图G存在,vG中某个顶点。
      操作结果:返回依附于v的第一条边。若该顶点在G中没有邻接点,则返回“空”。
    NextEdge(G,v,w)
乳胶漆排名      初始条件:图G存在,vG中某个顶点,wv的邻接顶点。
      操作结果:返回依附于v的(相对于w的)下一条边。若不存在,则返回“空”。
  InsertVex(&G,v)
      初始条件:图G存在,,v和图中顶点有相同特征。
      操作结果:在图G中增添新顶点v
    DeleteVex(&G,v)
      初始条件:图G存在,vG中某个顶点。
      操作结果:删除G中顶点v及其相关的边。
    InsertEdge(&G,v,w)
      初始条件:图G存在,vwG中两个顶点。
      操作结果:在G中增添边(v,w)
    DeleteEdge(&G,v,w)
      初始条件:图G存在,vwG中两个顶点。
      操作结果:在G中删除边(v,w)
    GetShortestPath(G,st,nd,&Path)
      初始条件:图G存在,stndG中两个顶点。
      操作结果:若stnd之间存在路径,则以Path返回两点之间一条最短路径,否则返回其它信息。
} ADT Graph
3.2模块设计
3.2.1本程序包含的模块
(1)主程序模块
void 太乙真人出装main( )
{
  初始化;
do {
    接受命令(输入景点信息或输出公交路线);
    处理命令;
  } while(命令!=退出);
}
(2)景点信息模块;
    将经过鲁东大学的公交车50路、52路、33路、46路公交车分别编号为0123。对景点进行编号,构成无向图的顶点,并将起始站点和景点的编号、名称、简介等信息存放在顶点。将两景点之间公交车所经过的站点数作为边的赋权值。
(3)景点公交路线选择模块
    约定两景点之间公交车经过的车站数越少,两景点之间越近。根据图的最短路径算法,求出两景点之间的最少车站数。如果两景点之间不能通过经过鲁东大学的公交车到达,为方便编程,不考虑乘坐其他公交车,而且根据学生的出游特点,到达某一景点时不考虑步行所经过的路程只考虑公交车经过的车站数。
(4)输出模块
    输出符合查询的条件的公交路线或是景点信息。
3.2.2程序流程图
   
4、详细设计及实现
4.1主程序模块
void main()                                           
{  do
    {  ck=Menu();
        switch(ck)
        {  case '1':
                中考满分多少分Path();                   
                break;
            case '2':
search();
                break;
            case '3':
                narrate();
case '4':
                ShortestPath();               
break;
        }
    }
}
4.2景点信息模块
构造无向图:
  顶点、边和图的类型如下:
    typedef struct ArcCell
{
      int adj;                                    //相邻接的景点之间的站点数
}ArcCell;                                    //定义边的类型
typedef struct VertexType
{
      int number;                                //景点编号
      char *sight;                                //景点名称
      char *description;                            //景点描述
}VertexType;                                //定义顶点的类型
古诗咏柳的意思
typedef struct
{
    VertexType vex[NUM];                        //图中的顶点,即为景点
    ArcCell arcs[NUM][NUM];                    //图中的边,即为景点间的站点数
    int vexnum,arcnum;                            //顶点数,边数
}MGraph;                                    //定义图的类型
4.3 景点公交路线选择模块
迪杰斯特拉伪码算法:
Void shortestPath(int num)
{//迪杰斯特拉算法最短路径函数num为入口点的编号
for(v=0;v<NUM;v++)
{ final[v]=0;                               
        D[v]=G.arcs[num][v].adj;               
        for(w=0;w<NUM;w++)                               
P[v][w]=0;
        if(D[v]<20000)                       
        {  P[v][num]=1;                       
            P[v][v]=1;                       
        }
    }
    D[num]=0;
    final[num]=1;                               
      for(i=0;i<NUM;++i)                       
      { min=Max;                           
        for(w=0;w<NUM;++w)
            if(!final[w])                       
                if(D[w]<min)                   
                {  v=w;
                    min=D[w];
                }
        final[v]=1;                           
        for(w=0;w<NUM;++w)                   
            if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))   
            {//不在s集合,并且比以前所到的路径都短就更新当前路径
                D[w]=min+G.arcs[v][w].adj;
                for(t=0;t<NUM;t++)
                    P[w][t]=P[v][t];
                P[w][w]=1;
            }
    }
}
4.4 公交路线输出模块
利用switch函数、及调用满足查询条件的各个函数,输出公交路线或是景点信息。
    例如:当查询经过鲁东大学主要有哪些公交路线时,输出函数如下所示。
void display() 
    printf("  \t\t\t※主要有以下公交路线:");   
printf("\n  50路公交路线:鲁东大学东门---烟台汽车站---火车站---虹口宾馆---山东工商学院;\n");
printf("  52路公交路线:鲁东大学---中心广场  ---建设银行---山东工商学院;\n");
printf("  41路公交路线:鲁东大学 - - - 烟台汽车站;\n");
printf("  33路公交路线:鲁东大学南门 --山东工商学院;\n");
printf("  46路公交路线:鲁东大学反义词成语- - 烟台毓璜顶医院-- 滨海广场。\n");     
}
5、调试分析
5.1调试分析
1.本题主要是在图论知识的基础上进行设计,由于在学习图论知识时,只掌握了图论的理论知识,了解图论的有关算法思想而对算法的实现未进行上机实际操作,因此在进行本程序设计过程当中走了很多弯路。对例如混淆了.->”的用法,在初始化景点的信息时,导致了大量错误。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。