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="综合文体馆";
     
     /**
     先将所有顶点之间的距离设置为INFINITY 
     **/
     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("无路径");
            
        /**
        利用循环将最短路径中的各节点存入apath数组 
        **/
        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 综合文体馆:上室内体育课的地方,是新建成的较为气派

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

(0)

相关推荐

  • C++基于Floyd算法实现校园导航系统

    本文实例为大家分享了C++基于Floyd算法实现校园导航系统的具体代码,供大家参考,具体内容如下 首先是配置文件 //文件名'MGraph.h' //用途:创建邻接矩阵 #include<iostream> #include<stdlib.h> using namespace std; /* *author:xcy  *date:2019.6.1  */ #define MaxInt 32767 //表示极大值 #define MaxNum 100  //表示最大顶点数 typed

  • 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;//顶点的类型     t

  • React-intl 实现多语言的示例代码

    最近在项目中添加了语言国际化的功能. 语言国际化,也有人说成是语言本地化,其实就是为Web App添加多语言,我们的项目当前包含了中文版和英文版,按理来说『逐字替换』也不是多大事儿,但是,这么Low的做法,有钱途吗? 一开始的时候,我考虑的是传统的为整个项目添加config文件,根据不同的语言和地区,加载不同的config文件,就能够达到界面语言切换的目的.当然,也正是因为这个想法太过于幼稚,所以才被称为『一开始』的想法.语言的国际化不仅仅是将界面上的UI文字翻译成另一种语言,还包括了日期&时间

  • 详解React-Native全球化多语言切换工具库react-native-i18n

    开篇啰嗦–阶段感悟 最近2 -3个月基本都因为一些私事没怎么系统的工作和学习,途中看了几天Kotlin的东西写了些demo并且整了个小项目,但是整体状态不是很好,这些天看到些95后码农的强势细思极恐. 现在大多数醒来就已经是中午,起得早去一下健身房,起的晚就家里宅一天.公司有事或者有其他家事就去协调/沟通/处理下,整个人感觉都提前进入养老状态(当然这个锅有一半是沉迷王者荣耀不可自拔,不太好) 最近项目上基本没啥事情了,然后让手下的小伙伴们对之前做的一些内容进行二次封装,然后他们引用了一个第三方国

  • Go语言程序查看和诊断工具详解

    想必Java 的开发者没有不知道或者没用过 jps 这个命令的,这个命令是用来在主机上查看有哪些 Java 程序在运行的. 我刚用 Go 语言程序的时候也很苦恼,我部署在公司服务器上的 Go 程序,其他的同事由于不清楚就经常找不到. 那么 Go 语言有没有像 jps 这样的工具呢?当然有,不仅有,而且还是 Google 自己出品的,官方认证(这种问题 Google 不可能自己想不到啊).名称也跟 jps 很像,叫 gops. 安装 gops 并不包含在官方安装包中,不属于标准工具.需要手动获取.

  • 谷歌Sky语言怎么样?什么是Dart编程语言?

    Q:谷歌Sky语言怎么样?Sky编程语言有哪些优势? A:Sky语言是谷歌近期推出的一款全新的自主网页编程语言Dart,谷歌推出Dart编程语言的目的是为了提升Android应用的流畅度.Sky语言的主要优势在于:可兼容iOS,为Android应用带来120fps的超级流畅体验. 作为当前市占率最高的智能手机操作系统,Android平台正在吸引着越来越多的开发者.不过,对用户而言,Android的体验还不够完善,卡顿的情况时有发生.再深入点理解,许多应用的帧率达不到普遍意义上流畅的标准60fps

  • Go语言中的延迟函数defer示例详解

    前言 大家都知道go语言的defer功能很强大,对于资源管理非常方便,但是如果没用好,也会有陷阱哦.Go 语言中延迟函数 defer 充当着 try...catch 的重任,使用起来也非常简便,然而在实际应用中,很多 gopher 并没有真正搞明白 defer.return.返回值.panic 之间的执行顺序,从而掉进坑中,今天我们就来揭开它的神秘面纱!话不多说了,来一起看看详细的介绍吧. 先来运行下面两段代码: A. 匿名返回值的情况 package main import ( "fmt&qu

  • 我放弃Python转Go语言的9大理由(附优秀书籍推荐)

    前言 Go大概2009年面世以来,已经8年了,也算是8年抗战.在这8年中,已经有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer.k8s等,很多的大公司也在用,比如google(作为开发Go语言的公司,当仁不让).Facebook.腾讯.百度.阿里.京东.小米以及360,当然除了以上提到的,还有很多公司也都开始尝试Golang,这其中是什么原因呢?让我们来一起分析分析. 原因 1:性能 Go 极其地快.其性能与 Java 或 C++

  • Swift语言与Applescript的区别?AppleScript的发展状况?

    本人为非开发人员(科研工作者),使用Mac,最近了解到Applescript对提高工作效率有很多帮助,希望学一下Applescript.不过最近10.10系统将发布,新的swift语言据说也能实现AppleScript的功能.我希望能了解Applescript最近的发展状况(Apple是否会逐渐淘汰这门语言),以及学习了swift是不是就不用学AppleScript了.希望高人解答,感谢大家 1.什么是applescript AppleScript是用在MacOSX上的脚本语言,和操作系统结合的

  • less简单入门(CSS 预处理语言)

    Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. Less 可以运行在 Node.浏览器和 Rhino 平台上.网上有很多第三方工具帮助你编译 Less 源码. 官网地址 http://lesscss.org/ less手册 www.lesscss.net/ bootstrap官网less介绍 http://less.bootcss.com/ 一.浏览器端环境搭建 github下载地址:htt

  • 举例简介AngularJS的内部语言环境

    AngularJS支持内置的国际化三种类型的过滤器货币,日期和数字.只需要根据国家的区域纳入相应的JS.默认情况下它处理浏览器的语言环境.例如,要使用丹麦语的语言环境,使用下面的脚本 <script src="https://code.angularjs.org/1.2.5/i18n/angular-locale_da-dk.js"></script> 使用丹麦语的语言环境实例 testAngularJS.html <html> <head&g

随机推荐