数据结构课程设计_校园导航系统 _课程设计报告

时间:2024.4.20

 

南京工程学院

课程设计说明书(论文)

题       目    校园导航系统            

课 程 名 称                  

院       系    通信工程学院              

专       业    信息工程                  

班       级                              

学 生 姓 名                             

学       号                               

设 计 地 点                               

指 导 教 师                                  

设计起止时间:2008 年12月29  日至    年  月  日

 

1.课程设计题目... 1

2.软件功能描述... 1

3.软件总体设计... 1

3.1数据结构描述与定义... 1

3.2模块设计... 3

4.测试结果与分析... 4

5.课程设计总结... 5

附录:源程序清单... 6


1.课程设计题目

校园导航系统

2.软件功能描述

在近一个星期的努力下,我编写的校园导航系统软件终于能够成功完成。采用工程思想,将系统共分一下几个模块:数据结构定义模块、导航图建立模块、求最短路径模块、主菜单;

下面是具体各功能简单的实际应用:

Ø  数据结构定义模块:模块定义了导航图中各个节点的基本结构类型,主要采用邻接矩阵的存储结构来真实反映各节点到其他所有节点的路径长度(权值大小)。

Ø  导航图建立模块:采用上述结构体类型对导航图中每个节点进行赋值。包括:各定点的名称(地点名),各个节点到其他所有节点的真实路径长度(赋权值)。

Ø  求最短路径模块: 本模块的基本思想是采用迪杰斯特拉算法求最短路径。次模块是本校园导航系统的核心模块,求两点间的最短路径与求一点到其他所有点最短路径两个子功能均是在最短路径算法模块的基础上进行调用,进而实现导航功能。

Ø  主菜单:主菜单中主要是显示导航图中的所有导航节点,能够快速方便的对各个地点进行导航。

   以上程序的几个模块,构成了校园导航系统的基本组成部分,程序运行良好,达到了课程设计的基本要求。由于所学知识有限,功能各个方面还有欠妥之处,希望得到指出与改正。

3.软件总体设计

3.1数据结构描述与定义

1.  节点数据结构类型:


#define MAX_V 30         //最大顶点个数

typedef struct

{

    char* vexs[MAX_V];       //顶点向量

    int arcs[MAX_V][MAX_V];//邻接矩阵

    int vexnum,arcnum;//图的当前顶点数和弧数

}MGraph;

2.  创建导航图函数:

int CreateUDN(MGraph &G)

函数描述:主要将每个节点进行命名、每个顶点到其他所有定点的路径值用邻接矩阵进行存储。

例:

G.vexs[0] = "小北门";

作用:使0号定点命名为“小北门”;

G.arcs[0][1] = G.arcs[1][0] =550;

作用:使0号节点到1号节点的路径赋值为550,应为是无向图,所以1号节点到0号节点的路径长度也应赋值为550;

3.  最短路径导航函数:

void ShortPath(MGraph &G,int v0,int p[MAX_V][MAX_V],int d[])

函数描述:用Dijkstra算法求无向网G的V0定点到其余定点V的最短路径P[v]及其带权长度D[v]。

若P[v][w]为True,则w是从V0到V当前求得最短路径上的顶点。

Final[v]为True当且仅当V∈S,即已经求得从V0到V的最短路径。

4.  导航菜单函数声明

void menu()

函数描述:输出各个节点的编号,放便导航。

3.2模块设计

以下为迪杰斯特拉算法流程图:

4.测试结果与分析

很高兴,这次自己设计的校园导航系统能够按照预先的设想正常运行,经过反复的调试和优化程序,使得程序的源代码更规范且易于理解,程序的输出界面更为友好,操作更简便易行。

测试内容:

Ø  系统登陆界面:

Ø  导航功能1——两点最短距离导航测试结果如下

Ø  导航功能2——某点到其他所有点的距离

5.课程设计总结

经过一个学期对数据结构课程的学习,我能够掌握数据结构所教会我的对待问题的方法,以及遇到问题时如何抽象出一个合理的数据结构类型。数据结构教会我的不但是每一个算法,更多的是如何解决问题的方法。例如,在本次课程设计中我做的是校园导航系统,对于校园导航问题的关键是最短路径的问题,在教材中有算法——迪杰斯特拉求最短路径问题,在花了几天时间后,终于能够将算法的整个流程弄清楚,在对各个定点的存储上采用邻接矩阵的方法,在寻找各个点到其他所有点的关系的时候更为方便直观。在课程设计中遇到的一系列问题都能够在老师和同学的指导下及时解决。

最后,感谢一年来为我们付出努力的老师们,感谢给过我指导意见的同学们,在这一年对数据结构的学习中,真的收获颇多,为我以后继续学习计算机的基础课程打下了坚实的基础。

附录:源程序清单

type.h        //定义每个顶点的结构类型

#include<stdio.h>

#define MAX_V 30         //最大顶点个数

#define INFINITY 32767   //最大值

typedef struct

{

    char* vexs[MAX_V];       //顶点向量

    int arcs[MAX_V][MAX_V];//邻接矩阵

    int vexnum,arcnum;//图的当前顶点数和弧数

}MGraph;

Creat.cpp           //创建无向图

#include"type.h"

int CreateUDN(MGraph &G)

{//采用数组(邻接矩阵)表示法,构造无向网G.

    int i = 0,j=0;

    G.vexnum = 27;  

    G.arcnum = 51;

   

    G.vexs[0] = "小北门";    G.vexs[1] = "大北门";      G.vexs[2] = "东区田径场";

    G.vexs[3] = "东区宿舍楼";G.vexs[4] = "北区宿舍楼";  G.vexs[5] = "北区田径场";

    G.vexs[6] = "北区超市";  G.vexs[7] = "北区食堂";    G.vexs[8] = "基础实验楼";

    G.vexs[9] = "东西教学楼";G.vexs[10] = "文理楼";     G.vexs[11] ="医务室";

    G.vexs[12] = "亿恒酒店"; G.vexs[13] = "艺术楼";     G.vexs[14] = "南教学楼";

    G.vexs[15] = "自动化学院"; G.vexs[16] = "图书馆";   G.vexs[17] = "学海湾";

    G.vexs[18] = "东区食堂"; G.vexs[19] = "东区超市";   G.vexs[20] = "东门";

    G.vexs[21] = "经管楼";   G.vexs[22] = "信息楼";     G.vexs[23] = "天印湖";

    G.vexs[24] = "西门";     G.vexs[25] = "行政楼";     G.vexs[26] = "南门";

   

    for(i=0;i<G.vexnum;i++)   //初始化路径长度

       for(j=0;j<G.vexnum;j++)

       {

           if(i==j)

              G.arcs[i][j]=0;

           else

              G.arcs[i][j]=INFINITY;

       }

       //为每一条边赋权

       G.arcs[0][1]  = G.arcs[1][0] =550;

       G.arcs[0][4]  = G.arcs[4][0] =160 ;

       G.arcs[0][5]  = G.arcs[5][0] =600;

       G.arcs[1][2]  = G.arcs[2][1] =80;

       G.arcs[2][3]  = G.arcs[3][2] =100;

       G.arcs[2][11] = G.arcs[11][2]=110;

       G.arcs[2][10] = G.arcs[10][2] =130;

       G.arcs[3][11] = G.arcs[11][3] = 100;

       G.arcs[3][12] = G.arcs[12][3] = 220;

       G.arcs[4][5]  = G.arcs[5][4] = 300;

       G.arcs[4][7]  = G.arcs[7][4] = 300;

       G.arcs[4][6]  = G.arcs[6][4] = 210;

       G.arcs[5][7]  = G.arcs[7][5] = 300;

       G.arcs[5][15] = G.arcs[15][5] = 500;

       G.arcs[6][7]  = G.arcs[7][6] = 60;

       G.arcs[6][9]  = G.arcs[9][6] = 170;

       G.arcs[7][8]  = G.arcs[8][7] = 230;

       G.arcs[8][9]  = G.arcs[9][8] = 35; 

       G.arcs[8][14] = G.arcs[14][8] = 35;

       G.arcs[8][15] = G.arcs[15][8] = 350; 

       G.arcs[8][16] = G.arcs[16][8] = 200;

       G.arcs[9][10] = G.arcs[10][9] = 200; 

       G.arcs[9][14] = G.arcs[14][9] = 100;

       G.arcs[10][11]= G.arcs[11][10] = 50;

       G.arcs[10][13]= G.arcs[13][10] = 50;

       G.arcs[11][12]= G.arcs[12][11] = 85;

       G.arcs[12][13]= G.arcs[13][12] = 160;

       G.arcs[12][18]= G.arcs[18][12] = 20;

       G.arcs[12][19]= G.arcs[19][12] = 130;

       G.arcs[13][17]= G.arcs[17][13] = 100;

       G.arcs[13][18]= G.arcs[18][13] = 230; 

       G.arcs[14][17]= G.arcs[17][14] = 100;

       G.arcs[15][16]= G.arcs[16][15] = 310; 

       G.arcs[15][21]= G.arcs[21][15] = 250;

       G.arcs[15][24]= G.arcs[24][15] = 400;

       G.arcs[16][17]= G.arcs[17][16] = 160;

       G.arcs[16][22]= G.arcs[22][16] = 200; 

       G.arcs[16][21]= G.arcs[21][16] = 100;

       G.arcs[16][23]= G.arcs[23][16] = 200;

       G.arcs[16][24]= G.arcs[24][16] = 400;

       G.arcs[17][23]= G.arcs[23][17] = 140;

       G.arcs[18][19]= G.arcs[19][18] = 90;

       G.arcs[18][20] = G.arcs[20][18] = 320;

       G.arcs[19][20] = G.arcs[20][19] = 350; 

       G.arcs[20][26] = G.arcs[26][20] = 570;

       G.arcs[21][24] = G.arcs[24][21] = 260; 

       G.arcs[22][23] = G.arcs[23][22] = 85;

       G.arcs[22][25] = G.arcs[25][22] = 190; 

       G.arcs[23][25] = G.arcs[25][23] = 100;

       G.arcs[23][26] = G.arcs[26][23] = 620;

       G.arcs[24][25] = G.arcs[25][24] = 130;

      

       return 1;

}

Short_path.cpp        //采用迪杰斯特拉算法,求最短路径

#include"type.h"

extern have[30];

void ShortPath(MGraph &G,int v0,int p[MAX_V][MAX_V],int d[])

{   //迪杰斯特拉发求最短路径

    int v,w,i,j,min;

    int final[MAX_V];

    int k=1;

    for(v=0;v<G.vexnum;++v)

    {//初始化

       final[v]=0;

       d[v]=G.arcs[v0-1][v];

       for(w=0;w<G.vexnum;++w)

           p[v][w]=0;

       if(d[v]<INFINITY)

       {

           p[v][v0-1]=1;

           p[v][v]=1;

       }

    }

    d[v0-1]=0;

    final[v0-1]=1;

    have[0]=v0-1;

    for(i=1;i<G.vexnum;++i)

    {//其余的vexnum-1个顶点

       min=INFINITY;

       for(w=0;w<G.vexnum;++w)

           if(!final[w])

              if(d[w]<min) //如有W点离更近

              {

                  v=w;

                  min=d[w];

              }

       final[v]=1;

       have[k]=v;

       k++;

       for(w=0;w<G.vexnum;++w)//更新当前最短路径及距离

           if(!final[w]&&(min+G.arcs[v][w]<d[w]))

           {

              d[w]=min+G.arcs[v][w];

              for(j=0;j<G.vexnum;j++)

                  p[w][j]=p[v][j];

              p[w][w]=1;

           }

    }

}

Menu.cpp        //程序登陆界面

#include<stdio.h>

void menu()

{

    printf("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆  导航主菜单  ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ \n");

    printf("☆ (1)  小北门          (2)  大北门             (3)  东区田径场    ☆ \n");

    printf("☆ (4)  东区宿舍楼      (5)  北区宿舍楼         (6)  北区田径场    ☆ \n");

    printf("☆ (7)  北区超市        (8)  北区食堂           (9)  基础实验楼    ☆ \n");

    printf("☆ (10) 东西教学楼      (11) 文理楼             (12) 医务室        ☆ \n");

    printf("☆ (13) 亿恒酒店        (14) 艺术楼             (15) 南教学楼      ☆ \n");

    printf("☆ (16) 自动化学院      (17) 图书馆             (18) 学海湾        ☆ \n");

    printf("☆ (19) 东区食堂        (20) 东区超市           (21) 东门          ☆ \n");

    printf("☆ (22) 经管楼          (23) 信息楼             (24) 天印湖        ☆ \n");

    printf("☆ (25) 西门            (26) 行政楼             (27) 南门          ☆ \n");

    printf("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆  ☆ \n\n");

   

    printf("请选择导航功能:\n");

    printf("≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");

    printf("≈   (1) 两点最短距离导航             ≈\n");

    printf("≈   (2) 某点到其他所有点的最短距离   ≈\n");

    printf("≈   (3) 退出导航系统                 ≈\n");

    printf("≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");

}

Main.cpp         //主函数文件

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "type.h"

int have[30];

int CreateUDN(MGraph &G);       //创建导航图函数声明

void ShortPath(MGraph &G,int v0,int p[MAX_V][MAX_V],int d[]);//最短路径导航函数声明

void menu();         //导航菜单函数声明

void main()

{  

    MGraph G;

    int v0,i,end,j;

    int P[MAX_V][MAX_V];

    int D[MAX_V];

    int choice,choice1; 

    printf("≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");

    printf("\n≈≈         欢迎光临南京工程学院,祝旅程愉快!         ≈≈\n");

    printf("\n≈≈           南京工程学院校园导游系统为你服务!         ≈≈\n");

    printf("\n≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n\n");      CreateUDN(G);

    while(1)

    {

       menu();

       scanf("%d",&choice);

       switch(choice)

       {

       case 1:

           {

              while(1)

              {

                  printf("分别输入起点和终点代号以空格分开\n");

                  scanf("%d%d",&v0,&end);

                  ShortPath(G,v0,P,D);

                  printf("最短路径:\n ");

                  for(i=0;i<G.vexnum;i++)

                  { 

                     if(P[end-1][have[i]]==1)

                         printf("-->%s",G.vexs[have[i]]);

                  }

                  printf("\n路径长度:%d\n",D[end-1]);

                  printf("^_^ 本次导航结束:\n1.继续导航      2.返回主菜单\n");

                  scanf("%d",&choice1);

                  if(choice1==2)  

                     break;

              }

           }

           break;

       case 2:

           {

              printf("请输入出发点:");

              scanf("%d",&v0);

              ShortPath(G,v0,P,D);

              printf("v0到其他所有点的最短路径为:\n");

              for(i=0;i<G.vexnum;i++)

              {

                  for(j=0;j<G.vexnum;j++)

                     if(P[i][have[j]]==1)

                         printf("-->%s",G.vexs[have[j]]);                    

                     printf("\n路径长度:%d\n",D[i]);

              }

           }

           break;

       case 3:

           break;

       default:

           printf("选择错误,请重新输入!\n");          

       }

       if(choice==3)

       {

           printf("欢迎再次使用校园导航系统,回车键退出。^_^\n");

           getchar();

           getchar();

           break;

       }

    }  

}

更多相关推荐:
数据结构课程设计报告模板

课程设计说明书课程名称:数据结构与算法专业:计算机科学与技术班级:103013姓名:XXX学号:03指导教师:XXX完成日期:20XX年1月12日任务书题目:黑白棋系统设计内容及要求:1.课程设计任务内容通过玩…

数据结构课程设计报告(含代码)

西安郵電學院数据结构课程设计报告题目校园导航系统院系名称计算机学院专业名称计算机科学与技术班级学生姓名学号8位指导教师设计起止时间20xx年12月11日20xx年12月15日一设计目的1通过本次课程设计巩固数据...

《数据结构课程设计报告》

安徽省巢湖学院计算机与信息工程学院课程设计报告课程名称课题名称用三元组实现稀疏矩阵的转置相加相乘专业计算机科学与技术班级学号AA姓名AAA联系方式136XXXXXXXX指导教师武彬20年月日目录1数据结构课程设...

数据结构课程设计报告

扬州大学信息工程学院数据结构课程设计报告题目井字棋小游戏班级学号姓名指导教师一课程题目井字棋小游戏二需求分析计算机和人对弈问题计算机之所以能和人对弈是因为有人将对弈的策略事先已存入计算机由于对弈的过程是在一定规...

数据结构课程设计报告(模版)

攀枝花学院学生课程设计论文题目学生姓名学号20xx108010所在院系数学与计算机学院专业计算机科学与技术专业班级20xx级计算机科学与技术1班指导教师蒋斌职称讲师20xx年12月19日数据结构课程设计任务书攀...

数据结构课程设计报告

数据结构课程设计报告撰写要求(一)纸张与页面要求1.采用国际标准A4型打印纸或复印纸,纵向打印。2.封页和页面按照下面模板书写(正文为:小四宋体1.5倍行距)。3.图表及图表标题按照模板中的表示书写。(二)课设…

数据结构课程设计报告

CENTRALSOUTHUNIVERSITY数据结构课程设计报告题目学生姓名指导教师学院专业班级完成时间交通旅游图的最短路径问题摘要数据结构主要是一门研究非数值计算的程序设计问题中的计算机操作对象以及它们之间的...

数据结构课程设计报告(最小生成树)

数据结构课程设计报告课程名称最小生成树课题负责人名学号同组成员名单角色指导教师评阅成绩评阅意见提交报告时间20xx年12月19日最小生成树计算机科学与技术专业学生指导老师摘要选择一颗生成树使之总的消费最少也就是...

数据结构课程设计报告

课程设计报告课程设计名称数据结构系计算机科学系学生姓名班级13計算機科學與技術1班学号成绩指导教师肖錦輝老師开课时间学年数据结构课程设计报告一设计题目算术表达式求值二主要内容所选课题的需求分析实现功能等1程序能...

数据结构C++版课程设计报告

数据结构课程设计报告姓名学号专业联系电话Email1目录报告一拼写检测器31实验题目32问题描述33概要设计34详细设计45测试结果及分析66源代码82报告一拼写检测器1实验题目拼写检测器Spellerchec...

数据结构课程设计报告哈希表设计

哈希表设计专业班级XXX学号XXX姓名XXX指导教师XXX课程设计时间XXX专业数据结构课程设计任务书1需求分析1用户可以根据自己的需求输入一个顺序表哈希表2通过用除留余数法构造哈希函数并用开放地址的二次探测再...

《数据结构》课程设计报告

20xx20xx学年第一学期数据结构课程设计报告题目二叉排序树调整为平衡二叉树专业网络工程班级二姓名汪杰指导教师刘义红成绩计算机与信息工程系20xx年1月2日计算机与信息工程系数据结构课程设计报告目录1问题描述...

数据结构课程设计报告(34篇)