我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言实现导航功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言实现导航功能

本文实例为大家分享了C语言实现导航功能的具体代码,供大家参考,具体内容如下

#include<stdio.h>
#include<string.h>

#define NUM 25
#define INFINITY 32767
#define False 0
#define True 1

typedef struct
{
    int number;//顶点的编号 
    const char *sight;//顶点的信息 
 } VertexType;//顶点的类型 
 
 typedef struct
 {
     VertexType vex[NUM];//存放顶点信息
     int arcs[NUM][NUM];//邻接矩阵数组
     int vexnum;//顶点个数 
 }MGraph;
 
MGraph G;
 
  
 void GreateMGraph(int v) 
 {
     G.vexnum=v;//传入节点个数 
     for(int i=1;i<G.vexnum;i++){
         G.vex[i].number=i;
     }//配置顶点编号 
     
      
     G.vex[0].sight="各景点名字";
     G.vex[1].sight="大门口";
     G.vex[2].sight="行政办公楼";
     G.vex[3].sight="北区教室实训中心";
     G.vex[4].sight="一号教学楼";
     G.vex[5].sight="二号教学楼";
     G.vex[6].sight="实验楼";
     G.vex[7].sight="三号教学楼";
     G.vex[8].sight="图书馆";
     G.vex[9].sight="开水房";
     G.vex[10].sight="超市";
     G.vex[11].sight="榴馨苑";
     G.vex[12].sight="洗浴中心";
     G.vex[13].sight="骊秀苑";
     G.vex[14].sight="综合楼";
     G.vex[15].sight="游泳池";
     G.vex[16].sight="主田径场";
     G.vex[17].sight="综合文体馆";
     
     
     for(int i=1;i<=G.vexnum;i++)
     {
         for(int j=1;j<=G.vexnum;j++)
         {
             G.arcs[i][j]=INFINITY;
         }
     }
     
     
     G.arcs[1][2]=G.arcs[2][1]=255;
     G.arcs[1][4]=G.arcs[4][1]=501;
     G.arcs[1][5]=G.arcs[5][1]=535;
     G.arcs[1][6]=G.arcs[6][1]=705;
     G.arcs[1][7]=G.arcs[7][1]=722;
     G.arcs[1][8]=G.arcs[8][1]=790;
     G.arcs[2][3]=G.arcs[3][2]=530;
     G.arcs[2][4]=G.arcs[4][2]=450;
     G.arcs[2][5]=G.arcs[5][2]=484;
     G.arcs[2][6]=G.arcs[6][2]=654;
     G.arcs[2][7]=G.arcs[7][2]=663;
     G.arcs[2][8]=G.arcs[8][2]=748;
     G.arcs[3][8]=G.arcs[8][3]=1054;
     G.arcs[3][17]=G.arcs[17][3]=713;
     G.arcs[4][5]=G.arcs[5][4]=436;
     G.arcs[4][6]=G.arcs[6][4]=158;
     G.arcs[4][7]=G.arcs[7][4]=527;
     G.arcs[4][8]=G.arcs[8][4]=534;
     G.arcs[5][6]=G.arcs[6][5]=688;
     G.arcs[5][7]=G.arcs[7][5]=561;
     G.arcs[5][8]=G.arcs[8][5]=603;
     G.arcs[6][7]=G.arcs[7][6]=428;
     G.arcs[6][8]=G.arcs[8][6]=329;
     G.arcs[6][9]=G.arcs[9][6]=547;
     G.arcs[7][8]=G.arcs[8][7]=254;
     G.arcs[8][11]=G.arcs[11][8]=421;
     G.arcs[8][17]=G.arcs[17][8]=879;
     G.arcs[9][10]=G.arcs[10][9]=178;
     G.arcs[10][11]=G.arcs[11][10]=213;
     G.arcs[10][12]=G.arcs[12][10]=114;
     G.arcs[12][13]=G.arcs[13][12]=415;
     G.arcs[13][14]=G.arcs[14][13]=104;
     G.arcs[13][16]=G.arcs[16][13]=427;
     G.arcs[13][15]=G.arcs[15][13]=576;
     G.arcs[14][17]=G.arcs[17][14]=688;
     G.arcs[15][16]=G.arcs[16][15]=213;
     G.arcs[16][17]=G.arcs[17][16]=214;
 }
 
 
 void Map()
 {
  printf("\n\n\n");
  printf("  **************************河南财经政法大学*******************************");
  printf("\n\n\n");
  printf("                               ------------------------15游泳池        \n");
  printf("                               |                          |            \n");
  printf("                               |                          |            \n");
  printf("   12洗浴中心----------------13骊绣苑---------------------16主田径场   \n");
  printf("       |                       |                          |            \n");
  printf("   10超市----11榴馨苑          14综合楼                   |            \n");
  printf("    |          |                |----------------------17综合文体馆    \n");
  printf("   9开水房     |                                            |          \n");
  printf("    |          ------------8图书馆--------------------------|          \n");
  printf("    |                          |                            |          \n");
  printf("    |-------------6实验楼------|--------7三号教学楼         |          \n");
  printf("                     |         |              |             |          \n");
  printf("                     |         |              |             |          \n");
  printf("              4一号教学楼------|--------5二号教学楼         |          \n");
  printf("                               |                            |          \n");
  printf("                               |                            |          \n");
  printf("                               |---2行政楼---------------3北区         \n");
  printf("                               |                                       \n");
  printf("                               |                                       \n");
  printf("                              1大门口                                  \n"); 
}

 
 void Info(int sight_num,char data[][200])
{
    if(sight_num==1)
        puts(data[1]);
    if(sight_num==2)
        puts(data[2]);
    if(sight_num==3)
        puts(data[3]);
    if(sight_num==4)
        puts(data[4]);
    if(sight_num==5)
        puts(data[5]);
    if(sight_num==6)
        puts(data[6]);
    if(sight_num==7)
        puts(data[7]);
    if(sight_num==8)
        puts(data[8]);
    if(sight_num==9)
        puts(data[9]);
    if(sight_num==10)
        puts(data[10]);
    if(sight_num==11)
        puts(data[11]);
    if(sight_num==12)
        puts(data[12]);
    if(sight_num==13)
        puts(data[13]);
    if(sight_num==14)
        puts(data[14]);
    if(sight_num==15)
        puts(data[15]);
    if(sight_num==16)
        puts(data[16]);
    if(sight_num==17)
        puts(data[17]);
    if(sight_num==18)
        puts(data[18]);
    if(sight_num==19)
        puts(data[19]);
    if(sight_num==20)
        puts(data[20]);
    if(sight_num==21)
        puts(data[21]);
    if(sight_num==22)
        puts(data[22]);
    if(sight_num==23)
        puts(data[23]);
    if(sight_num==24)
        puts(data[24]);
    if(sight_num==25)
        puts(data[25]);
}


int Menu()
{
    int c;
    Map();
    printf("\t\t欢迎使用河南财经政法大学导航图系统\n");
    printf("\t\t 1.查询地点路径 \n");
    printf("\t\t 2.地点信息简介 \n");
    printf("\t\t 3.退出 \n");
    printf("  **************************河南财经政法大学*******************************\n");
    printf("请输入您的选择:");
    scanf("%d",&c);
    return c;
}



 
 void guide_Dispath_two(MGraph g,int dist[],int path[],int S[],int v,int i)//v为起点,i为终点 
 {
     int apath[NUM],d=0;             //存放一条最短的路径以及顶点个数(路径中终点为首)
    int j,k;                          //k用来存放终点的前面的节点 
    
    if(S[i]==1 && i!=v)
    {
        printf("从顶点%d到顶点%d的路径长度为:%d\t路径为:",v,i,dist[i]);
        apath[d]=i;                //把终点放在数组中的首位
        k=path[i];
        
        if(k==-1)
            printf("无路径");
            
        
        else
        {
            while(k!=v)
            {
                d++;
                apath[d]=k;
                k=path[k];
            }
        }
        d++; apath[d]=v;         //将起点添加进去
        printf("%d",apath[d]);   //输出起点
        for(j=d-1;j>=0;j--)
        {
            printf("->%d",apath[j]); //循环输出最短路径中的各节点 
        }            
    } 
 }

//以编号为v的顶点为起点,w为终点 
void guide_Dijkstra(MGraph g,int v,int w)
{
    int dist[NUM],path[NUM];
    int S[NUM];                         //S[i]=1表示顶点i在S中,S[i]=0表示顶点i在U中
    int MINdis,i,j,u;
    for(i=1;i<=g.vexnum;i++)
    {
        dist[i]=g.arcs[v][i];           //距离初始化(距顶点v的距离) 
        S[i]=0;                         //S[]置空
        if(g.arcs[v][i]<INFINITY)       //路径初始化
            path[i]=v;                  //顶点v到顶点i有边时,置顶点i的前一个顶点为顶点v 
        else
            path[i]=-1;                 //顶点v到顶点i没边时,置顶点i的前一个顶点为-1 
     }
     S[v]=1;path[v]=0;                  //源点编号v放入S中
     for(i=1;i<=g.vexnum-1;i++)          //循环直到所有顶点的最短路径都求出 
     {
         MINdis=INFINITY;                //MINdis置最大长度初值
         for(j=1;j<=g.vexnum;j++)       //选取不在S中(即U中)且具有最小最短路径长度的顶点u 
         {
             if(S[j]==0 && dist[j]<MINdis)
             {
                 u=j;
                 MINdis=dist[j];
             }
         }
             S[u]=1;                   //顶点u加入S中
             for(j=1;j<=g.vexnum;j++)  //修改不在S中(即U中)的顶点的最短路径 
             {
                 if(S[j]==0)
                     if(g.arcs[u][j]<INFINITY && dist[u]+g.arcs[u][j]<dist[j])
                     {
                         dist[j]=dist[u]+g.arcs[u][j];
                         path[j]=u;
                     }
              }  
      }
      
      guide_Dispath_two(g,dist,path,S,v,w); //输出最短路径 
 }
 
 void load_sight_data(char data[][200],MGraph g)
{
    FILE *fp;
    int i;
    
    if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","r"))==NULL){
        printf("File can't open");
        return;
    }

    for(i=1;i<=g.vexnum;i++)
    {
        fgets(data[i],200,fp);
    }
    fclose(fp);
}


void change_sight_data(char user_change_data[200],MGraph g)
{
    FILE *fin,*ftp;
    int i;
    fin=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","r");//读打开原文件 
    ftp=fopen("C:\\Users\\admin\\Desktop\\导航\\temp.txt","w");//写打开临时文件
    if(fin==NULL || ftp==NULL)
    {
        printf("打开文件失败");
        return; 
     }
     
    for(i=1;i<=g.vexnum;i++)
    {
        char change_data[200];
        fgets(change_data,200,fin);
        if(change_data[0]==user_change_data[0] && change_data[1]==user_change_data[1])
        {
            fputs(user_change_data,ftp);//而用fputs直接将user_change_data直接写入文件没有换行符,需要添加换行符 
            fprintf(ftp,"\n");
        }
        else
        {
            fputs(change_data,ftp);//在使用fgets函数得到change_data数组时换行符会被保存,此处不需要加换行符 
        }
    }
    fclose(fin);
    fclose(ftp);
    remove("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt");
    rename("C:\\Users\\admin\\Desktop\\导航\\temp.txt","C:\\Users\\admin\\Desktop\\导航\\sight_data.txt");
}


void add_sight_data(char change_data[200],MGraph g)
{
    FILE *fp;
    if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","a"))==NULL){
        printf("File can't open");
        return;
    }
    fprintf(fp,"\n");
    fputs(change_data,fp);
    fprintf(fp,"\n");
    rewind(fp);
    
    fclose(fp);
 }
 
 
 void change_password(char password[30])
 {
     FILE *fp;
     fp=fopen("C:\\Users\\admin\\Desktop\\导航\\password_temp.txt","w");
    if(fp==NULL)
    {
        printf("打开文件失败");
        return; 
     }
     
     fputs(password,fp);
     fclose(fp);
     remove("C:\\Users\\admin\\Desktop\\导航\\password.txt");
     rename("C:\\Users\\admin\\Desktop\\导航\\password_temp.txt","C:\\Users\\admin\\Desktop\\导航\\password.txt");
  }
  
  
 void load_password(char password[30])
  {
      FILE *fp;
      if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\password.txt","r"))==NULL){
        printf("File can't open");
        return;
    }
    
    fgets(password,30,fp);
    
    fclose(fp);
 } 
 
 int admin_Menu()
 {
     int c;
    printf("**************管理系统****************\n"); 
    printf("\t\t欢迎使用管理员操作系统\n");
     printf("1.修改登录密码\n");
    printf("2.添加新景点\n");
    printf("3.修改景点信息\n");
    printf("4.新建景点路径\n");
    printf("5.退出\n");
    printf("**************************************\n");
    printf("请输入您的选择:");
    scanf("%d",&c);
    return c; 
     
 }
 
int main()
{
    GreateMGraph(17);
    char sight_data[NUM][200];
    char password[30];
    int choice;
    int Menu_choice;
    int start,end;
    do
    {
        printf("欢迎使用河南财经政法大学导航系统\n");
        printf("请问您的身份是:1.管理员  2.游客  3.退出\n");
        scanf("%d",&choice);
        if(choice==2)
        {
            do
            {    
                Menu_choice=Menu();
                if(Menu_choice==1)
                {
                    printf("请输入您现在的位置:");
                    scanf("%d",&start);
                    printf("\n");
                    printf("请输入您想要到达的位置:");
                    scanf("%d",&end);
            
                    guide_Dijkstra(G,start,end); 
                }
                if(Menu_choice==2)
                {
                    int sight_num;
                    load_sight_data(sight_data,G);
                    printf("请输入您要查询的景点编号:");
                    scanf("%d",&sight_num);
                    Info(sight_num,sight_data);
                }
                if(Menu_choice==3)
                {
                    break;
                }
            
            }while(1);
        }
    
        if(choice==1)
        { 
            getchar();
            load_password(password);
            char user_input_psw[30];
            printf("请输入管理员登录密码:");
            gets(user_input_psw);
            if(strcmp(password,user_input_psw)==0)
            {
                 printf("密码正确!\n"); 
                int admin_choice;
                 do
                 {
                     admin_choice=admin_Menu();
                     
                     if(admin_choice==1)
                     {
                        getchar();
                        char user_change_psw[30];
                        printf("请输入新的密码:\n"); 
                         gets(user_change_psw);
                        change_password(user_change_psw);
                        load_password(password);
                        printf("密码修改成功!\n"); 
                     }
                     if(admin_choice==2)
                     {
                         getchar();
                         char uadd_sight_data[200];
                        printf("请输入您要添加的景点以及该景点信息:\n");
                        gets(uadd_sight_data);
                        add_sight_data(uadd_sight_data,G);
                        load_sight_data(sight_data,G);
                        G.vexnum++;
                        
                        char *p;
                        p=strtok(uadd_sight_data," ");
                        p=strtok(NULL," ");
                        G.vex[G.vexnum].number=G.vexnum;
                        G.vex[G.vexnum].sight=p;
                        
                        printf("添加成功!\n"); 
                     }
                     if(admin_choice==3)
                     {
                         getchar();
                         char user_sight_data[200];
                         printf("请输入您要修改的景点信息:\n");
                         gets(user_sight_data);
                         change_sight_data(user_sight_data,G);
                         load_sight_data(sight_data,G);
                         printf("修改成功!\n");
                     }
                     if(admin_choice==4)
                     {
                         int new_start,new_end;
                         int length;
                         printf("请输入您想要在哪两点之间添加路线:\n");
                         printf("起点:");
                        scanf("%d",&new_start);
                        printf("\n");
                        printf("终点:");
                        scanf("%d",&new_end);
                        printf("请输入两顶点之间的距离:\n");
                        scanf("%d",&length);
                        printf("\n");
                        
                        G.arcs[new_start][new_end]=G.arcs[new_end][new_start]=length;
                        printf("路线添加成功!\n"); 
                     }
                     if(admin_choice==5)
                     {
                         break;
                     }
                 }while(1);
             }
         
             if(strcmp(password,user_input_psw)!=0)
             {
                 printf("密码错误! \n"); 
              } 
         }
         
         if(choice==3)
         {
             break;
          } 
    }while(1);
    
    return 0; 
 } 

password.txt文件用来存放密码
sight_data.txt文件用来存放景点信息:

1 大门口 出入学校的必经之路
2 行政办公楼 学校最气派的建筑之一
3 北区 金工实训中心,还有几排具有历史沧桑感的教室
4 一号教学楼 主要有小教室,用来上英语课和专业课
5 二号教学楼 主要用来上专业课,五六楼有语音室
6 实验楼 学生上各种实验课的地点
7 三号教学楼 有大教室,一般安排用来上基础课
8 图书馆 学校为同学们提供学习和自习的地方,也是学校的藏书最多的地方
9 开水房 学校唯一一个为同学提供热水的地点
10 超市 学校唯一一个中型超市,在这里可以买到各种生活用品
11 榴馨苑 环境较好的学生食堂,这里因为离女生公寓较近,所以这个食堂女生较多
12 洗浴中心 环境还行就是规模太小,每天都是供不应求
13 骊秀苑 主要经营面食。我校的物美价廉的食堂,位于男生公寓区,大部分男生在此就餐
14 综合楼 历史较为悠久的一栋教学楼,旁边有学生第二俱乐部,学校的晚会都在这里举行
15 游泳池 大一学生上游泳课的地点
16 主田径场 标准的400m跑道,学生上室外体育课的地点
17 综合文体馆:上室内体育课的地方,是新建成的较为气派

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言实现导航功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

c语言怎么实现功能选择

在 c 语言中,可以使用 switch-case 语句实现功能选择。它允许根据提供的表达式(称为选择器)的值来执行不同的代码块。结构如下:switch (选择器) {}case 值1: 执行代码块 1break;case 值2: 执行代码块
c语言怎么实现功能选择
2024-05-13

c语言怎么实现登录功能

在C语言中实现登录功能需要以下步骤:1. 在程序中定义一个用户名和密码的数据库,可以使用数组或者结构体数组来存储。2. 提示用户输入用户名和密码。3. 使用`scanf`函数接收用户输入的用户名和密码。4. 遍历用户名和密码的数据库,逐个与
2023-08-15

C语言怎么实现删除功能

在C语言中,可以通过以下步骤实现删除功能:1. 首先,定义一个数组或链表存储要删除的元素。2. 从用户输入中获取要删除的元素。3. 遍历数组或链表,查找要删除的元素。4. 如果找到了要删除的元素,将其从数组或链表中删除。5. 如果没有找到要
2023-08-31

Android实现底部导航栏功能(选项卡)

现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能。 我们先看下该demo实例的框架图:其中各个类的作用以及资源文件就不详细解释了,
2022-06-06

小程序地图导航功能怎么实现

今天小编给大家分享一下小程序地图导航功能怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。微信小程序的地址管理中,经常需
2023-06-26

怎么用c语言实现删除功能

在C语言中,要实现删除功能,可以通过以下步骤:创建一个数组来存储元素。提示用户输入要删除的元素。遍历数组,找到要删除的元素所在的位置。如果找到了要删除的元素,将其后面的元素逐个向前移动一个位置。更新数组的长度。打印删除元素后的数组
2023-10-23

linux下C语言实现写日志功能

先上程序,该程序经过测试能够很好的实现写日志要求/*************************************************************************>
2022-06-04

html+css怎么实现简易导航栏功能

小编给大家分享一下html+css怎么实现简易导航栏功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二话不说直接上代码
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录