当前位置:文档之家› 校园导航系统源代码

校园导航系统源代码

数据结构-校园导航系统简介:本系统采用C语言编写,运行环境为Dev-C++;容以电子科技大学南校区为例;主要功能有:1.查询景点信息;2.查询两景点间最短距离;3.查询两景点间所有路线;4.查询西电校园地图;5.修改景点和路径信息.注意事项:在进行修改景点和路径信息操作前,请在可执行文件目录下用记事本创建”superUser.CODE”文件来存放用户名与密码(中间以空格隔开),否则无法进入.源代码:#include <string.h>#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <ctype.h>#define Max 20000typedef struct ArcCell{int adj; //两个景点间的距离}ArcCell;typedef struct VertexType{int number; //景点编号char sight[100]; //景点名称char description[1000]; //景点简介char particular1[1000];char particular2[1000];char particular3[1000]; //景点详情}VertexType;typedef struct{VertexType vex[20]; //最多存放20个景点信息ArcCell arcs[20][20]; //两个景点间的距离int vexnum,arcnum;}MGraph;MGraph G;char nameofschool[100]; //学校名称int NUM=9;int P[20][20];int p[20];int visited[20];int a=0;long int D[20];int x[20]={0};//函数声明void CreateUDN(int v,int a);void narrate();void ShortestPath(int num);void output(int sight1,int sight2);char Menu();void search();char SearchMenu();void HaMiTonian(int);void Searchpath1(MGraph g);void disppath(MGraph g,int i,int j);void path(MGraph g,int i,int j,int k);void NextValue(int);void display();int Addnewsight(int n);int Deletesight(int n);void Changesight();char Changemenu();char Sightmenu();int Maintain(void);int VerificatianIdentity(void);void map();//主函数int main(){int v0,v1;int MaintainFlag;char ck;system("color 0F");CreateUDN(NUM,11);do{ck=Menu();switch(ck){case '1':search();break;case '2':system("cls");narrate();printf("\n\n\t\t\t请选择起点景点(0~%d):",NUM-1);scanf("%d",&v0);printf("\t\t\t请选择终点景点(0~%d):",NUM-1);scanf("%d",&v1);ShortestPath(v0);output(v0,v1);printf("\n\n\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'3':system("cls");narrate();x[0]=1;Searchpath1(G);printf("\n\n\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'4':system("cls");map();printf("\n\n\t\t\t\t\t请按任意键继续...\n");getchar();getchar();break;case'5':system("cls");narrate();MaintainFlag = Maintain();switch(MaintainFlag){case'1':system("cls");narrate();NUM=Addnewsight(NUM);system("cls");narrate();break;case'2':NUM=Deletesight(NUM);break;case'3':Changesight();break;}break;};}while(ck!='e');return 0;}//主菜单char Menu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┃1、查询景点信息┃\n");printf("\t\t\t┃2、查询两景点间最短路径┃\n");printf("\t\t\t┃3、查询两景点间所有路线┃\n");printf("\t\t\t┃4、查看西电校园地图┃\n");printf("\t\t\t┃5、修改景点和路径信息┃\n");printf("\t\t\t┃e、退出┃\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')flag=0;}while(flag);return c;}//查询菜单char SearchMenu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┃1、按照景点编号查询┃\n");printf("\t\t\t┃2、按照景点名称查询┃\n");printf("\t\t\t┃e、返回┃\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}//查询信息void search(){int num;int i;char c;char name[20];do{system("cls");c=SearchMenu();switch (c){case '1':system("cls");narrate();printf("\n\n\t\t请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){printf("\n\t\t您要查找景点信息如下:");printf("\n\t\t(%d)%-5s:%-25s\n\n",i,G.vex[i].sight,G.vex[i].description);printf("\t\t\t\t\t详情介绍:\n\t\t%-s\n",G.vex[i].particular1);printf("\t\t%-s\n",G.vex[i].particular2);printf("\t\t%-s\n",G.vex[i].particular3);printf("\n\t\t按任意键返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按任意键返回...");getchar();getchar();}break;case '2':system("cls");narrate();printf("\n\n\t\t请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){printf("\n\t\t您要查找景点信息如下:");printf("\n\t\t(%d)%-5s:%-25s\n\n",i,G.vex[i].sight,G.vex[i].description);printf("\t\t\t\t\t详情介绍:\n\t\t%-s\n",G.vex[i].particular1);printf("\t\t%-s\n",G.vex[i].particular2);printf("\t\t%-s\n",G.vex[i].particular3);printf("\n\t\t按任意键返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按任意键返回...");getchar();getchar();}break;}}while(c!='e');}//构造图形void CreateUDN(int v,int a) {int i,j;strcpy(nameofschool,"电子科技大学");G.vexnum=v;G.arcnum=a;for(i=0;i<20;++i) G.vex[i].number=i;strcpy(G.vex[0].sight,"东门");strcpy(G.vex[0].description,"学校正门,可乘坐公交车,出租车等交通工具. ");strcpy(G.vex[0].particular1," 作为学校的正门,门外的交通系统非常发达,常年有出租车"); strcpy(G.vex[0].particular2,"经过,还有916路,173路等众多公交车线路在此设立站牌,所以"); strcpy(G.vex[0].particular3,"完全没必要担心坐不到车,出行非常方便!");strcpy(G.vex[1].sight,"图书馆");strcpy(G.vex[1].description,"馆藏文纸质献约270万余册,种类丰富,环境优美. ");strcpy(G.vex[1].particular1," 南校区图书馆2005年7月1日奠基,主要服务于新校区2万余"); strcpy(G.vex[1].particular2,"名本科生.地上建筑面积4万平方米,总框架五层,地下一层,地面"); strcpy(G.vex[1].particular3,"四层.拥有先进的设施、优雅温馨的阅读环境.");strcpy(G.vex[2].sight,"北门");strcpy(G.vex[2].description,"西电南校区的另外一个出入口,备有一个停车场. ");strcpy(G.vex[2].particular1," 北门日常的人流量不亚于东门,在这里有一个停车场,而且"); strcpy(G.vex[2].particular2,"这里还是西电的快递接收点,可以供广大师生在此寄取快递,非"); strcpy(G.vex[2].particular3,"常方便.而且临近综合楼,较为繁华.");strcpy(G.vex[3].sight,"海棠区");strcpy(G.vex[3].description,"2017级大一萌新即将入住的宿舍区. >o< ");strcpy(G.vex[3].particular1," 海棠宿舍位于学校西北面,所以距离北操,新综,北门较近,"); strcpy(G.vex[3].particular2,"准大一的学弟学妹们将会主要居住在5.6号楼(还有一部分会在");strcpy(G.vex[3].particular3,"9.10号楼).海棠宿舍为两室一厅,每室各四人.");strcpy(G.vex[4].sight,"大活");strcpy(G.vex[4].description,"大学生活动中心的简称,小剧场就在这里. ");strcpy(G.vex[4].particular1," 大活建设在学校人工湖旁边,里面有实验室、舞蹈室等专用"); strcpy(G.vex[4].particular2,"教室,也是学校举办室大型活动的常用地点,曾经一冰,周鸿"); strcpy(G.vex[4].particular3,"祎,黄晓明等人在此与同学们见面.");strcpy(G.vex[5].sight,"北操");strcpy(G.vex[5].description,"跑步踢球狼人杀...等等有趣的活动,超热闹. ");strcpy(G.vex[5].particular1," 北操基础设施齐全,有足球场跑道观众台羽毛球场等,是"); strcpy(G.vex[5].particular2,"学校举行大型体育赛事的场地,例如:运动会足球赛等.每天晚上"); strcpy(G.vex[5].particular3,"也会有许多同学在此运动玩耍,非常有趣.");strcpy(G.vex[6].sight,"观光塔");strcpy(G.vex[6].description,"南校区最显眼的建筑物,可以俯视整个校园. ");strcpy(G.vex[6].particular1," 观光塔是西电南校区最负盛名的建筑物,位处南校区最为中"); strcpy(G.vex[6].particular2,"间的位置,走在校园里,总是能够看到观光塔,到了晚上塔上的时"); strcpy(G.vex[6].particular3,"钟会亮起,很远都能看到,在月光下特别的漂亮.");strcpy(G.vex[7].sight,"体育馆");strcpy(G.vex[7].description,"今年刚刚建成,外观融合了\"天圆地方\"的思想. ");strcpy(G.vex[7].particular1," 考虑到学校的所在地是十三朝古都,亦应融入中国传统"); strcpy(G.vex[7].particular2,"文化的理念,以及体育馆主馆和训练馆的功能需求,最终决定以中"); strcpy(G.vex[7].particular3,"国传统文化的\"天圆地方\"为设计思路.美观大气.");strcpy(G.vex[8].sight,"行政楼");strcpy(G.vex[8].description,"可以进行盖章,补办一卡通等众多操作. ");strcpy(G.vex[8].particular1," 从东门进入学校,左手边的那栋楼就是行政楼,往后稍小一点"); strcpy(G.vex[8].particular2,"的就是行政辅楼.教务处、学工处、电院办公室在行政楼,一卡通"); strcpy(G.vex[8].particular3,"中心、户籍管理、财务处、一些学院的办公室在行政辅楼.");for(i=0;i<20;++i)for(j=0;j<20;++j)G.arcs[i][j].adj=Max;G.arcs[0][8].adj=G.arcs[8][0].adj=150;G.arcs[0][1].adj=G.arcs[1][0].adj=600;G.arcs[1][7].adj=G.arcs[7][1].adj=800;G.arcs[1][6].adj=G.arcs[6][1].adj=50;G.arcs[1][4].adj=G.arcs[4][1].adj=600;G.arcs[3][2].adj=G.arcs[2][3].adj=300;G.arcs[6][2].adj=G.arcs[2][6].adj=350;G.arcs[3][5].adj=G.arcs[5][3].adj=300;G.arcs[4][5].adj=G.arcs[5][4].adj=400;G.arcs[8][7].adj=G.arcs[7][8].adj=250;}//导图模块void narrate(){int i,k=0;printf("\n\t******************欢迎使用%s校园导游程序*****************\n\n",nameofschool);printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n");printf("\t* 景点名称|\t\t\t景点描述\t\t *\n");printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n");for(i=0;i<NUM;i++){printf("\t* (%d)%-15s|\t%-43s *\n",i,G.vex[i].sight,G.vex[i].description);k=k+1;}printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n"); }//迪杰斯特拉算法void ShortestPath(int num){int v,w,i,t;int final[20];int min;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])){D[w]=min+G.arcs[v][w].adj;for(t=0;t<NUM;t++)P[w][t]=P[v][t];P[w][w]=1;}}}//输出函数void output(int sight1,int sight2){int a,b,c,d,q=0;a=sight2;if(a!=sight1){printf("\n\t\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.)\n\n\t",D[a]);printf("\t\t%s",G.vex[sight1].sight);d=sight1;for(c=0;c<NUM;++c){gate:;P[a][sight1]=0;for(b=0;b<NUM;b++){if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0) printf("\n");goto gate;}}}}}//查询所有路径void Searchpath1(MGraph g){int l=0;int k=0;int i,j;printf("\t选择出发景点:");scanf("%d",&i);printf("\t选择目地景点:");scanf("%d",&j);for(;k<g.vexnum;k++)if(i==g.vex[k].number)i=k;for(;l<g.vexnum;l++)if(j==g.vex[l].number) j=l;printf("\n\t从%s到%s的所有游览路径有:\n\n",g.vex[i].sight,g.vex[j].sight);disppath(g,i,j);}void disppath(MGraph g,int i,int j){int k;p[0]=i;for(k=0;k<g.vexnum;k++)visited[i]=0;a=0;path(g,i,j,0);}void path(MGraph g,int i,int j,int k){int s;if(p[k]==j){a++;printf("\t第%d条:\t",a);for(s=0;s<=k-1;s++){printf("%s",g.vex[p[s]].sight);printf("->");}printf("%s\n",g.vex[p[s]].sight);}s=0;while(s<g.vexnum){if(s!=i){if(g.arcs[p[k]][s].adj!=Max&&visited[s]==0){visited[s]=1;p[k+1]=s;path(g,i,j,k+1);visited[s]=0;}}s++;}}//添加模块int Addnewsight(int n){int i;char sight[100],description[1000],particular1[1000];char particular2[1000],particular3[1000];int length;printf("\t请输入新景点的名称:\n\t");scanf("%s",&sight);printf("\t请输入新景点的相关信息:\n\t");scanf("%s",&description);printf("\t请输入新景点的详细介绍(每行不超过25字,且不超过3行):\n\t");scanf("%s",particular1);getchar();scanf("%S",particular2);getchar();scanf("%s",particular3);strcpy(G.vex[n].sight,sight);strcpy(G.vex[n].description,description);strcpy(G.vex[n].particular1,particular1);strcpy(G.vex[n].particular2,particular2);strcpy(G.vex[n].particular3,particular3);G.vex[n].number=n;for(i=0;i<n;i++){system("cls");narrate();printf("\t请输入此景点到第%d个景点的距离(单位:m)(同一景点或不可到达用20000表示):\n\t",i);scanf("%d",&length);if(length!=20000)G.arcnum++;G.arcs[n][i].adj=G.arcs[i][n].adj=length;}n++;G.vexnum++;return n;}//删除模块int Deletesight(int n){int i;int j;char c;int num;char name[20];system("cls");c=SearchMenu();switch (c){case '1':system("cls");narrate();printf("\n\n\t\t请输入您要删除景点的编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){for(j=0;j<NUM;j++){if(G.arcs[i][j].adj!=20000)G.arcnum--;G.arcs[i][j].adj=G.arcs[j][i].adj=20000;}}}for(;num<NUM;num++){strcpy(G.vex[num].sight,G.vex[num+1].sight);strcpy(G.vex[num].description,G.vex[num+1].description);}n--;printf("\n\t\t\t按任意键返回...");getchar();getchar();break;if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按任意键返回...");getchar();getchar();}break;case '2':system("cls");narrate();printf("\n\n\t\t请输入您要删除景点的名称:");scanf("%s",name);for(i=0;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){num=i;for(j=0;j<NUM;j++){if(G.arcs[i][j].adj!=20000)G.arcnum--;G.arcs[i][j].adj=G.arcs[j][i].adj=20000;}}}for(;num<NUM;num++){strcpy(G.vex[num].sight,G.vex[num+1].sight);strcpy(G.vex[num].description,G.vex[num+1].description);}n--;printf("\n\t\t\t按任意键返回...");getchar();getchar();break;if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按任意键返回...");getchar();getchar();}break;}return n;}//修改主菜单char Changemenu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┃1、修改景点信息┃\n");printf("\t\t\t┃2、修改道路信息┃\n");printf("\t\t\t┃e、返回┃\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}//修改景点信息char Sightmenu(){char c;int flag;do{flag=1;system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┃1、修改景点名称┃\n");printf("\t\t\t┃2、修改景点描述┃\n");printf("\t\t\t┃e、返回┃\n"); printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}//修改道路信息void Changesight(){int a,b,length;char sight[100];char description[1000];char p;char q;int i;int num;p=Changemenu();switch(p){case'1':system("cls");narrate();printf("\n\n\t\t请输入您要修改的景点编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(G.vex[i].number==num){q=Sightmenu();if(q=='1'){printf("\t请输入修改后的景点名称:\n\t");scanf("%s",&sight);strcpy(G.vex[num].sight,sight);printf("\t\t\t\t修改成功!\n");}else if(q=='2'){printf("\t请输入修改后的景点信息:\n\t");scanf("%s",&description);strcpy(G.vex[num].description,description);printf("\t\t\t\t修改成功!\n");}else if(q=='e')p=Changemenu();}}printf("\n\t\t按任意键返回...");getchar();getchar();break;if(i==NUM){printf("\n\n\t\t\t\t没有找到!");printf("\n\n\t\t\t按任意键返回...");getchar();getchar();}break;case '2':printf("\t\t请输入道路一侧的景点序号:");scanf("%d",&a);printf("\t\t请输入道路另一侧的景点序号:");scanf("%d",&b);printf("\t\t请输入修改后的道路长度:");scanf("%d",&length);G.arcs[a][b].adj=G.arcs[b][a].adj=length;printf("\t\t\t\t修改成功!\n");printf("\t\t");getchar();system("PAUSE");break;}}//维护人员权限校验int VerificationIdentity(void){char userID[20],passWord[20];char superUID[20],passWD[20];int i,legalUser;char ch;FILE *fp;legalUser = 0;fp = fopen("superUser.CODE","r");if(fp == NULL){printf("\n\t\t\t权限文件不存在!按任意键继续......\n");getch();}else{do{printf("\n\t\t\t\t 用户登录\n");printf("\n\t\t\t请输入用户名(<15个字符):");i = 0;while(isalpha(ch = getch())&&(i<15)){putchar(ch);userID[i] = ch;i++;}userID[i] = '\0';printf("\n\t\t\t请输入密码(<10个数字):");i = 0;while(isdigit(ch = getch())&&(i<10)){putchar('*');passWord[i] = ch;i++;}passWord[i] = '\0';rewind(fp);while(!feof(fp)){fscanf(fp,"%s\t%s\t\n",superUID,passWD);if((strcmp(userID,superUID) == 0)&&(strcmp(passWord,passWD) == 0)){ legalUser = 1;break;}}if(legalUser) break;else{printf("\n\n\t\t\t用户名或密码错误!!");printf("\n\t\t\t是否重新输入用户名和密码?(y/n)");ch = getche();}}while((ch == 'y')||(ch == 'Y'));}return legalUser;}//维护模块int Maintain(void){int success;char c;int flag;flag=1;system("cls");narrate();success = VerificationIdentity();if(success == 0){printf("\n您是无权用户!!");}else{do{system("cls");narrate();printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");printf("\t\t\t┃┃\n");printf("\t\t\t┃1、添加新的景点和路径┃\n");printf("\t\t\t┃2、删除已有景点和路径┃\n");printf("\t\t\t┃3、修改已有景点和路径┃\n");printf("\t\t\t┃e、退出┃\n");printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='e')flag=0;}while(flag);return c;}}//地图void map(){printf(" 西电校园地图\n\n");printf(" 北┏━━━┑┏━━━┑┏━━━┑\n");printf(" ┃┃北操┃━━━┃海棠区┃━━━┃北门┃\n");printf(" ┃┗━━━┛┗━━━┛┗━━━┛\n");printf(" ┗━━东┃┃\n");printf(" ┃┃\n");printf(" ┃┃\n");printf(" ┃┏━━━┑\n");printf(" ┃┃观光塔┃\n");printf(" ┃┗━━━┛\n");printf(" ┃┃\n");printf(" ┏━━━┑┏━━━┑┏━━━┑\n");printf(" ┃大活┃━━━━━━━━━━┃图书馆┃━━━━━━━━━━┃东门┃\n");printf(" ┗━━━┛┗━━━┛┗━━━┛\n");printf(" ┃┃\n");printf(" ┃┃\n");.printf(" ┃┏━━━┑\n");printf(" ┃┃行政楼┃\n");printf(" ┃┗━━━┛\n");printf(" ┃┃\n");printf(" ┃┃\n");printf(" ┃┏━━━┑┃\n");printf(" ┗━━━━┃体育馆┃━━━━━┛\n");printf(" ┗━━━┛\n"); }资料.。

相关主题