做一个校园导游系统,先做用户部分,之后再做管理员部分,那么运行之后再管理员处进行的修改,用户那部分会有变化吗?(用户那部分的地图使用printf打印出来的,景点简介也差不多) 具体代码(未完成,void AddPlace()这部分还不能运行) #include "string.h" #include "stdio.h" #include "malloc.h" #include "stdlib.h" #define Max 20000 #define NUM 9 typedef struct ArcCell { int adj; }ArcCell; typedef struct VertexType { int number; char sight; char description; }VertexType; typedef struct { VertexType vex[NUM]; ArcCell arcs[NUM][NUM]; int vexnum,arcnum; }MGraph; MGraph G; int P[NUM][NUM]; long int D[NUM]; int x[9]={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 NextValue(int); void display(); int display_1(); int map(); int denglu(); void AddPlace(); void main() { printf("欢迎使用某某大学的景点导游系统"); printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n"); printf("\t\t\t┃ 0.进入管理员更改界面 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┃ 1.进入游客使用界面 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n"); printf("请输入你的选择:"); int v0,v1; char ck; int y; scanf("%d",&y); switch(y) { case 0: denglu(); break; case 1: CreateUDN(NUM,11); do { ck=Menu(); switch(ck) { case '1': printf("\n\n\t\t\t请选择起点景点(0~8):"); scanf("%d",&v0); printf("\t\t\t请选择终点景点(0~8):"); scanf("%d",&v1); ShortestPath(v0); output(v0,v1); printf("\n\n\t\t\t\t请按任意键继续...\n"); getchar(); getchar(); break; case '2':search(); break; case '3': system("cls"); //narrate(); x[0]=1; HaMiTonian(1); printf("\n\n\t\t\t\t请按任意键继续...\n"); getchar(); getchar(); break; case '4': system("cls"); printf("\n\n\t\t景点地图:\n"); map(); break; } }while(ck!='e'); } } 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┃ e、退出 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n"); printf("\t\t\t输入您的选择:"); scanf("%c",&c); if(c=='1'||c=='2'||c=='3'||c=='4'||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┃ ┃\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=='e') flag=0; }while(flag); return c; } void search() { int num; int i; char c; 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\n\t\t\t您要查找景点信息如下:"); printf("n\n\t\t\t%-25snn",G.vex[i].description); 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; } }while(c!='e'); } void CreateUDN(int v,int a) { int i,j; G.vexnum=v; G.arcnum=a; for(i=0;i<G.vexnum;++i) G.vex[i].number=i; G.vex[0].sight="行政楼"; G.vex[0].description="学校领导,办公室之地。"; G.vex[1].sight="大礼堂"; G.vex[1].description="业余活动,举办各种晚会。"; G.vex[2].sight="教学楼"; G.vex[2].description="教室,自习室"; G.vex[3].sight="体育馆"; G.vex[3].description="教室,自习室"; G.vex[4].sight="图书馆"; G.vex[4].description="阅览,借阅图书"; G.vex[5].sight="食堂"; G.vex[5].description="餐饮休闲"; G.vex[6].sight="学生公寓"; G.vex[6].description="休闲,放松心情"; G.vex[7].sight="游泳馆"; G.vex[7].description="餐饮休闲"; G.vex[8].sight="美术馆"; G.vex[8].description="休息"; for(i=0;i<G.vexnum;++i) for(j=0;j<G.vexnum;++j) G.arcs[i][j].adj=Max; G.arcs[0][1].adj=G.arcs[1][0].adj=12; G.arcs[0][2].adj=G.arcs[2][0].adj=6; G.arcs[0][3].adj=G.arcs[3][0].adj=5; G.arcs[1][4].adj=G.arcs[4][1].adj=11; G.arcs[2][4].adj=G.arcs[4][2].adj=2; G.arcs[3][5].adj=G.arcs[5][3].adj=4; G.arcs[5][7].adj=G.arcs[7][5].adj=9; G.arcs[4][6].adj=G.arcs[6][4].adj=2; G.arcs[4][7].adj=G.arcs[7][4].adj=14; G.arcs[6][8].adj=G.arcs[8][6].adj=7; G.arcs[7][8].adj=G.arcs[8][7].adj=3; } int map() { printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); printf("\t\t┃ ┏━━━━━━━┓ ┃\n"); printf("\t\t┃ ━━━┫1.大礼堂 ┣━ ┃\n"); printf("\t\t┃ ┗━━━━━━━┛ ┃\n"); printf("\t\t┃ ┃\n"); printf("\t\t┃ ┏━━━━━┓ ┃\n"); printf("\t\t┃ ┃ 4. ┃ ┏━━━━┓ ┃\n"); printf("\t\t┃ ┃ 图书馆 ┃ ┃2. 教 ┃ ┃\n"); printf("\t\t┃ ┗━━━━━┛ ┃ 学 ┃ ┃\n"); printf("\t\t┃ ┃ 楼 ┃ ┃\n"); printf("\t\t┃ ┃ ┃ ┏━━━━━━┓ ┃\n"); printf("\t\t┃ ┏━━━━━━━━━┓ ┗━━━━┛ ┃ 0. ┃ ┃\n"); printf("\t\t┃ ┃ 6.学生公寓 ┃ ┃ 行政楼 ┃ ┃\n"); printf("\t\t┃ ┃━━━━━━━━━┃ ┗━━━━━━┛ ┏━━┓┃\n"); printf("\t\t┃ ┃ 一号楼 ┃ ┃ 学 ┃┃\n"); printf("\t\t┃ ┃ ┃ ┏━━━━━━┓ ┃ 校 ┃┃\n"); printf("\t\t┃ ┃━━━━━━━━━┃ ┃ 3.体育馆 ┃ ┃ 出 ┃┃\n"); printf("\t\t┃ ┃ 二号楼 ┃ ┗━━━━━━┛ ┃ 口 ┃┃\n"); printf("\t\t┃ ┃ ┃ ┃ ┃┃\n"); printf("\t\t┃ ┃━━━━━━━━━┃ ┃ ┃┃\n"); printf("\t\t┃ ┃ 三号楼 ┃ ┏━━━━━━┓ ┗━━┛┃\n"); printf("\t\t┃ ┃ ┃ ┃ 5. 食堂 ┃ ┃\n"); printf("\t\t┃ ┃━━━━━━━━━┃ ┗━━━━━━┛ ┃\n"); printf("\t\t┃ ┃ 四号楼 ┃ ┃\n"); printf("\t\t┃ ┃ ┃ ┃\n"); printf("\t\t┃ ┃━━━━━━━━━┃ ┃\n"); printf("\t\t┃ ┃ 五号楼 ┃ ┃\n"); printf("\t\t┃ ┗━━━━━━━━━┛ ┏━━━━━━┓ ┃\n"); printf("\t\t┃ ┃ ┃ ┃\n"); printf("\t\t┃ ┃7.游泳馆 ┃ ┃\n"); printf("\t\t┃ ┃ ┃ ┃\n"); printf("\t\t┃ ┗━━━━━━┛ ┃\n"); printf("\t\t┃ ┃\n"); printf("\t\t┃ ┃\n"); printf("\t\t┃ ┏━━━━━━━━━┓ ┃\n"); printf("\t\t┃ ┃ 8.美术馆 ┃ ┃\n"); printf("\t\t┃ ┃ ┃ ┃\n"); printf("\t\t┃ ┗━━━━━━━━━┛ ┃\n"); printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"); system("pause"); system("cls"); return 1; } void narrate() { int i,k=0; printf("\n\t\t\t\t****************欢迎使用校园导游程序************\n"); printf("\n\t\t\t\t**********************某某大学********************\n"); printf("\t\t景点名称\t\t|\t景点描述\n"); printf("\t________________________________|____________________________\n"); for(i=0;i<NUM;i++) { printf("\t (%2d)%-10s\t\t\t|\t%-25s\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[NUM]; 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从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight); printf("\t(最短距离为 %dm.)\n\n\t",D[a]); printf("\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 HaMiTonian(int m) { if(m>8) return; L: NextValue(m); if(x[m]==0) return; if(m==7&&G.arcs[0][x[8]-1].adj!=20000) display(); else HaMiTonian(m+1); goto L; } void NextValue(int k) { int j; l:x[k]=(x[k]+1)%10; if(x[k]==0) return; if(G.arcs[x[k-1]-1][x[k]-1].adj!=20000) { for(j=0;j<k;j++) if(x[j]==x[k]) goto l; return; } else goto l; } void display() { int i=0; printf("\n\n\t"); for(i=0;i<8;i++) printf("%s->",G.vex[x[i]-1].sight); printf("出口"); printf("\n"); } int display_1()//管理员界面 { int command; int i; printf("----------------------------------------\n"); printf("----------------------------------------\n"); printf("|| 管理员系统说明:本系统可实现如下功能: ||\n"); printf("|| 0 返 回 主 菜 单 ||\n"); printf("|| 2 录 入 路 径 ||\n"); printf("|| 3 添 加 景点 ||\n"); printf("|| 4 删 除 路 径 ||\n"); printf("|| 5 修 改 路 径 ||\n"); printf("|| 6 显 示 路 径 ||\n"); printf("|| 7 查 询 两 点 间 最 短 路径 ||\n"); printf("|| ||\n"); printf("----------------------------------------\n"); printf("----------------------------------------\n"); printf("请选择您要进行的操作..."); scanf("%d",&command); for(i=0;i<350;i++) { if(command<0||command>7) { printf(" 输入错误!!!\n"); printf(" 请重新输入:\n"); scanf("%d",&command); } else switch(command) { case 3: AddPlace(); break; } } return command; } int denglu() { int zh,mm; printf("请输入管理员账号:"); printf("请输入管理员密码:"); scanf("%d",&zh); scanf("%d",&mm); if(zh==0&&mm==0) display_1(); else printf("账号密码错误!你还有两次机会!"); scanf("%d",&zh); scanf("%d",&mm); if(zh==0&&mm==0) display_1(); else printf("账号密码错误!你还有一次机会!"); scanf("%d",&zh); scanf("%d",&mm); if(zh==0&&mm==0) display_1(); else printf("账号密码错误!你没有机会了!请退出\n"); exit(0); return 0; } void AddPlace() { //增加景点函数 int i,j,k; char c='y'; while(c=='y') { system("cls"); printf("\n\t\t\t输入要添加的景点编号:"); scanf("%d",&i); if(i>G.vexnum) { i-=1; printf("n\n\t\t\t\t输入要添加的景点名称:"); G.vex[i].sight=(char *)malloc(50); flushall(); gets(G.vex[i].sight); printf("\n\n\t\t\t输入节点的简介:\n"); G.vex[i].description=(char *)malloc(1000); flushall(); gets(G.vex[i].description); printf("\n\n\t\t\t\t\输入他的权值:\n"); scanf("%d",&k); G.arcs[i][j]=G.arcs[j][i]=k; printf("\n\n\t\t\t\增加成功!\n"); printf("n\n\t\t\t按任意键继续...."); getch(); } else { printf("\n\t\t\t\t您输入的景点编号已经存在!\n"); printf("n\n\t\t\t按任意键继续...."); c= getchar(); getchar(); } system("cls"); }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。