C++实现简单校园导游系统

本文实例为大家分享了C++实现校园导游系统的具体代码,供大家参考,具体内容如下

#include 
#include 
#include 
#include 
#include 
#include 
#define INF 32767
int visited[100],password;  //password为后台管理的登录密码
FILE *fp;
char na[100];
char str1[100],str3[100];
int N,M;
int a[100][100];
using namespace std;
typedef struct
{
    int num;
    char name[100];
    char introduction[100];
} VertexType;
typedef struct
{
    int edges[100][100];
    int n,e;
    VertexType vex[100];
} MGraph;
typedef struct ANode
{
    int adjvex;
    struct ANode *nextarc;
} ArcNode;
typedef struct Vnode
{
    ArcNode *firstarc;
} VNode;
typedef VNode AdjList[100];
typedef struct
{
    AdjList adjlist;
    int n,e;
} ALGraph;
MGraph g;
//将文本文件打开并输出文件中的内容
void ReadData1(MGraph &g)
{
    M=N;
    FILE *fp;
    int i = 0,j;
    if ((fp=fopen("path.txt", "r"))==NULL)
    {
        printf("error open!");
        exit(0);
    }
    for(i=0; iadjlist[i].firstarc=NULL;
    for(i=0; i=0; j--)
        {
            if(g.edges[i][j]!=INF)
            {
                p=(ArcNode *)malloc(sizeof(ArcNode));
                p->adjvex=j;
                p->nextarc=G->adjlist[i].firstarc;
                G->adjlist[i].firstarc=p;
            }
        }
    G->n=g.n;
    G->e=g.e;
}
//查找相应景点的介绍
void FindIntroduction(MGraph &g)
{
    int x,d;
    while(1)
    {
        printf("请输入要查询的景点的编号:");
        scanf("%d",&x);
        ReadData(g);
        printf("景点的名称:%s\n",g.vex[x].name);
        printf("景点的简介:");
        printf("%s\n",g.vex[x].introduction);
        printf("是否要继续查询(0.继续  1.不继续):");
        scanf("%d",&d);
        while(1)
        {
            if(d==0||d==1)
                break;
            else
            {
                printf("输入的数据不合理,请重新输入:");
                scanf("%d",&d);
            }
        }
        if(d==0)
            continue;
        else
            break;
    }
}
//输出两个顶点间的最短路径
void Dispath(MGraph &g,int A[][100],int path[][100])
{
    int i,j,k,s,u,v;
    printf("请输入你所在位置的编号:");
    scanf("%d",&u);
    printf("请输入你要去位置的编号:");
    scanf("%d",&v);
    int apath[100],d;
    for(i=0; i=0; s--)
                    printf("->%s",g.vex[apath[s]].name);
                printf("\n");
                printf("  路径长度为:%d",A[i][j]);
                printf("\n");
            }
        }
    }
}
//查找两顶点间的最短路径
void FindMinPath(MGraph &g)
{
    int A[100][100],path[100][100];
    int i,j,k;
    for(i=0; iA[k][j]+A[i][k])
                {
                    A[i][j]=A[k][j]+A[i][k];
                    path[i][j]=path[k][j];
                }
            }
        }
    }
    Dispath(g,A,path);
}
//查找两顶点间的所有路径
void FindaPath(MGraph &g,ALGraph *G,int u,int v,int path[],int d)
{
    int w,i;
    ArcNode *p;
    visited[u]=1;
    d++;
    path[d]=u;
    if(u==v&&d>=1)
    {
        printf(" ");
        for(i=0; i",g.vex[path[i]].name);
        printf("%s",g.vex[path[d]].name);
        printf("\n");
    }
    p=G->adjlist[u].firstarc;
    while(p!=NULL)
    {
        w=p->adjvex;
        if(visited[w]==0)
            FindaPath(g,G,w,v,path,d);
        p=p->nextarc;
    }
    visited[u]=0;
}
//删除景点简介信息
void delete_str(char str1[], char str2[],int len,char str3[])
{
    int num=0,k=0,i=0,j=0;   //num用来记录子串的个数 k用来记录子串的位置
    char *p=str2;             //使用p还原str到初始位置
    while(str1[i]!='\0')
    {
        if(str1[i]!=str2[j])
        {
            str3[k++]=str1[i++];  //当str1中的字符与str的首字符不相同时
        }
        else
        {
            char *temp=str2;
            for(; (str1[i]==str2[j])&&str2[j]!='\0'; j++)
            {
                i++;
            }
            if(j==len)
            {
                num++;           //出现重复子串,num加一
            }
            else
            {
                //主字符串中存在和子串前几个字符相同的一段字符
                //退出循环并将这段字符写进新的字符数组中
                for(int m=0; m='0'&&a[i]<='9')
                pass=pass*10+a[i]-'0';
            else if(a[i]=='\b')         //当遇到退格键不做处理
            {
                printf("\b \b");
                i--;
            }
            else
            {
                pass=0;
                break;   //退出for循环后,再次接受
            }
        }
        fflush(stdin);  //清除键盘缓存区中已经有的输入
        printf("\n");
        if(pass==0)    //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
        {
            printf("密码要求全为数字,且不能全0!\n");
            printf("请重新输入密码: ");
        }
        else
            break;
    }
    return pass;
}
//在图中增加一个顶点
void add_point(MGraph &g)
{
    int i,d;
    N++;
    g.vex[N-1].num=N-1;
    printf("%d\n",N);
    printf("请输入要增加景点的名称:");
    scanf("%s",g.vex[N-1].name);
    printf("%s\n",g.vex[N-1].name);
    printf("请输入该景点与其它景点间的路径长度:");
    for(i=0; i=0&&i<=N-1&&j>=0&&j<=N-1&&j>=0)
        {
            if(g.edges[i][j]!=INF&&g.edges[j][i]!=INF)
            {
                printf("该两点之间已存在路径,是否进行修改(0.修改 1.不修改):");
                scanf("%d",&k);
                if(k==0)
                {
                    printf("请输入要修改的路径的长度:");
                    scanf("%d",&length);
                    g.edges[j][i]=g.edges[i][j]=length;
                    printf("修改成功!");
                }
                else
                    g.edges[j][i]=g.edges[i][j];
            }
            else
            {
                printf("请输入要增加的路径的长度:");
                scanf("%d",&length);
                g.edges[j][i]=g.edges[i][j]=length;
                printf("添加成功!\n");
            }
            break;
        }
        else
        {
            printf("输入的顶点在原图中不存在!\n");
            continue;
        }
    }
    while(1);
}
//删除图中的一个顶点
void delete_point(MGraph &g)
{
    int i,j,m;
    printf("%d\n",N);
    printf("请输入要删除景点的编号:");
    scanf("%d",&m);
    do
    {
        if(m>=0&&m<=N-1)
            break;
        else
        {
            printf("请输入要删除景点的编号:");
            scanf("%d",&m);
        }
    }
    while(1);
    for(i=0; in; i++)
        visited[i]=0;
    system("color F0");
    printf("\t\t     *******************************\n");
    printf("\t\t     *       1.用户                *\n");
    printf("\t\t     *       2.管理人员            *\n");
    printf("\t\t     *******************************\n");
    printf("请选择相应的编号进行下一步操作:");
    scanf("%d",&k);
    do
    {
        if(k==1||k==2)
            break;
        else
        {
            printf("输入数据不合理,请重新输入:");
            scanf("%d",&k);
        }
    }
    while(1);
    if(k==1)
    {
        system("title 校园景点介绍及路径查询系统");
        system("color F0");
        printf("\n\n\n\n\n\n\n\n\n\n\n\n");
        printf("\t\t\t欢迎进入校园景点介绍及路径查询系统!\n\n\n\n\n\n\n\n\n\n\n\n\n");
        printf("正在进入,请稍后...\n");
        printf("===============================================================================\r");
        for(j=0; j<80; j++)
        {
            Sleep(50);
            printf(">");
        }
        system("cls");
        do
        {
            printf("\t\t     *******************************\n");
            printf("\t\t     *       1.景点简介            *\n");
            printf("\t\t     *       2.两景点间最短路径    *\n");
            printf("\t\t     *       3.两景点间所有路径    *\n");
            printf("\t\t     *       4.退出系统            *\n");
            printf("\t\t     *******************************\n");
            printf("请输入要进行的操作的编号:");
            scanf("%d",&x);
            do
            {
                if(x>=1&&x<=4)
                    break;
                else
                {
                    printf("输入数据不合理,请重新输入:");
                    scanf("%d",&x);
                }
            }
            while(1);
            if(x>=1&&x<=3)
            {
                printf("\t\t     *******************************\n");
                if(N%2!=0)
                {
                    for(i=0; i 
 

需要的文件:

C++实现简单校园导游系统_第1张图片

path.txt的内容:

0 20 60 150 32767 60 32767 100 300 150 
20 0 50 100 32767 32767 32767 32767 32767 32767 
60 50 0 32767 32767 300 40 32767 32767 32767 
150 100 32767 0 32767 32767 32767 100 32767 32767 
32767 32767 32767 32767 0 50 32767 32767 32767 30 
60 32767 300 32767 32767 0 200 32767 32767 50 
32767 32767 40 32767 32767 200 0 32767 32767 32767
100 32767 100 32767 32767 32767 0 50 32767 32767 
300 32767 32767 32767 32767 32767 32767 50 0 350
50 32767 32767 32767 30 50 32767 32767 350 

password.txt的内容:

pass 123456

data.txt的内容:

0 三元湖 烟大的一道靓丽的风景
1 钟楼 配备有专业设备的实验综合楼
2 八景园 休息和聊天的好去处
3 小树林 各种社团的活动场所,
4 九龙广场 海豚雕塑加上美丽的喷泉很漂亮
5 八餐 美味的饭菜让人回味无穷
6 一餐 豪华的装修,美味的饭菜
7 体育场 锻炼和饭后散步的好去处
8 七餐 全亚洲最大的学生餐厅
9 新图 藏书丰富,安静的环境让人很舒服

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

你可能感兴趣的:(C++实现简单校园导游系统)