++j>
{
G.arcs[i][j].adj=Max。
G.arcs[i][j].info=NULL。
}
}
//下边是可直接到达的景点间的距离,由于两个景点间距离是互相的
//,所以要对图中对称的边同时赋值。
G.arcs[1][2].adj=G.arcs[2][1].adj=200。
G.arcs[1][3].adj=G.arcs[3][1].adj=200。
G.arcs[1][10].adj=G.arcs[10][1].adj=1000。
G.arcs[1][13].adj=G.arcs[13][1].adj=1600。
G.arcs[2][3].adj=G.arcs[3][2].adj=400。
G.arcs[2][6].adj=G.arcs[6][2].adj=100。
G.arcs[3][4].adj=G.arcs[4][3].adj=100。
G.arcs[3][7].adj=G.arcs[7][3].adj=200。
G.arcs[4][7].adj=G.arcs[7][4].adj=300。
G.arcs[5][6].adj=G.arcs[6][5].adj=60。
G.arcs[6][7].adj=G.arcs[7][6].adj=200。
G.arcs[6][8].adj=G.arcs[8][6].adj=100。
G.arcs[7][10].adj=G.arcs[10][7].adj=300。
G.arcs[7][11].adj=G.arcs[11][7].adj=200。
G.arcs[8][10].adj=G.arcs[10][8].adj=200。
G.arcs[9][10].adj=G.arcs[10][9].adj=100。
G.arcs[9][12].adj=G.arcs[12][9].adj=200。
G.arcs[10][11].adj=G.arcs[11][10].adj=100。
G.arcs[10][13].adj=G.arcs[13][10].adj=600。
G.arcs[11][14].adj=G.arcs[14][11].adj=200。
G.arcs[12][13].adj=G.arcs[13][12].adj=100。
G.arcs[13][14].adj=G.arcs[14][13].adj=100。
G.arcs[14][15].adj=G.arcs[15][14].adj=100。
}
该模块是对图的建立及使用邻接矩阵存储顶点信息以及权值,而邻接矩阵特点是:
邻接矩阵来表示一个具有n个顶点的有向图时需要n^2个单元来存储邻接矩阵;对有n个顶点的无向图则只存入上<下)三角阵中剔除了左上右下对角线上的0元素后剩余的元素,故只需1+2+...+(n-1>=n(n-1>/2个单元。
5调试分析和测试结果
(1)先是进入身份验证界面,如图所示5-1
图5-1身份验证界面
(2)验证成功后进入副界面,如图所示5-2
图5-2身份验证成功界面
(3)输入数字2,进入万科大导航系统主界面,如图所示5-3
图5-3万科大导航系统主界面
(4)输入数字1,进入万科大学校简介,如图所示5-4
图5-4万科大学校简介界面
(5)退出图5-5学校平面展示界面
(6)退出图5-6景点展示界面
(7)退出图5-7景点查询界面
(8)输入数字1,进入按景点编号查询,如图所示5-8
图5-8景点编号查询
(9)输入1-15任何数字查看景点介绍,如图所示5-9
图5-9查看景点介绍界面<数字)
(10)按回车键返回,输入数字2进入按景点名称进行查询,如图所示5-10
图5-10景点名称进行查询界面
(11)按回车键返回到主界面,输入数字5进入计算最短路径算法查询,如图所示5-11
图5-11最短路径算法查询界面
6心得体会
通过此次设计,明白了很多。
首先要从设计的思路入手,思路决定出路,一个好的算法可以使工作量简化达到事半功倍的目的。
平时生活更应该留心观察,多去想,多去做,好的程序是从历练中做出来的。
其次,应该多去交流,去查阅资料,一个程序的产生不是那么容易的,更应该知难而进,积极进取。
参考文献<至少两个)
[1]《数据结构》[2]《C语言程序设计教程》杨路明编
[3]《java开发实战经典》李兴华编
[4]《c语言程序设计》<第四版)谭浩强编
附:
源程序<可运行无误的代码)
//---------------------------------------------------------------
//校园导航系统
//校园导航系统包括:
学校简介,场所信息,计算路径
//所使用的文件:
CampusNavigation.cpp,用户信息.text
//程序编写人员:
胡鹏
//编写程序时间:
2018年10月30日20:
56:
51
//修改程序时间:
2018年11月30日14:
38:
32
//代码规范时间:
2018年12月10日16:
38:
55
//---------------------------------------------------------------
//预处理命令
#include
#include//使用system函数
#include
#include
voidinsert(>。
#defineN10
intn。
#defineMax32767
#defineNUM16
typedefstructArcCell
{intadj。
//相邻接的景点之间的路程
char*info。
}
ArcCell。
//定义边的类型
typedefstructVertexType
{intnumber。
//景点编号
char*sight。
//景点名称
char*description。
//景点描述
}
VertexType。
//定义顶点的类型
typedefstruct
{
VertexTypevex[NUM]。
//图中的顶点,即为景点
ArcCellarcs[NUM][NUM]。
//图中的边,即为景点间的距离
intvexnum,arcnum。
//顶点数,边数
}
MGraph。
//定义图的类型
MGraphG。
//把图定义为全局变量
intP[NUM][NUM]。
//
longintD[NUM]。
//辅助变量存储最短路径长度
voidCreateUDN(intv,inta>。
//创建图的函数
voidpingmu(>。
//屏幕输出函数
voidintroduce(>。
//输入介绍内容,但不输出
voidShortestPath(intnum>。
//最短路径函数
voidoutput(intsight1,intsight2>。
//输出函数
charMenu(>。
//主菜单
voidsearch(>。
//查询景点信息
charSearchMenu(>。
//查询子菜单
voidNextValue(int>。
voiddisplay(>。
//显示遍历结果
voidshow(>。
//显示校园平面图
voidmainn(>。
//---------------------初始系统------------------
structstudent
{
charname[20]。
charsecret[20]。
}。
structstudentstu[N]。
voidpf(>
{
printf("\n\n\t\t******信息工程与科学系数据结构课程设计******">。
printf("\n\n\n\t\t--------------------------------------">。
printf("\n\t\t|\t名称:
万科大校园导航系统\t|">。
printf("\n\t\t|\t姓名:
胡鹏\t|">。
printf("\n\t\t|\t班级:
1101网工\t|">。
printf("\n\t\t|\t指导老师:
方瑞英\t|">。
printf("\n\t\t|\t作者:
万科大校园\t|">。
printf("\n\t\t--------------------------------------">。
}//\t表示的是向后空出8个空格,可以使自己输出字符更规范。
//------------------------身份验证------------------------------
voidmain(>//主函数
{
chars2[10],s3[10],s4[10],s5[10],s6[10],s1[10],s7[10]="\0"。
inti=0,a,j。
FILE*fp。
//定义的fp是指向FILE类型结构体的指针。
可以使他指向某个文件的结构体变量/,从而通过该结构体变量中的文件信息能够访问该文件。
if((fp=fopen("用户信息.txt","r">>==NULL>//“r”为输出打开一个文本文档
{
printf("找不到用户信息.txt文件!
\n">。
system("pause">。
//从程序里调用“pause”命令。
exit(0>。
}
else
{
fscanf(fp,"\t%d\n",&n>。
//fscanf(文件指针,格式字符串,输入文件表列>
for(i=0。
ii++>
fscanf(fp,"\t%s\t%s\n",stu[i].name,stu[i].secret>。
}//从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。
//fscanf(文件指针,格式字符串,输入列表>。
fclose(fp>。
printf("\n\n\n\n\n\n\n\n\t\t保存在用户信息.txt文件中的所有信息已经读入程序中!
\n\n\t\t\t">。
system("pause">。
system("cls">。
for(i=0。
i<3。
i++>
{pf(>。
printf("\n\n\t\t用户登陆">。
printf("请输入用户名,你还有%d次机会。
\n\t\t\t",3-i>。
gets(s3>。
if(!
strcmp(s3,s7>>//strcmp比较两个字符串的大小
{printf("用户名不能空格,谢谢!
!
!
">。
printf("用户名不正确,请从新输入。
\n">。
system("pause">。
//从程序里调用“pause”命令。
system("cls">。
//从程序里调用“clear”命令。
if(i==2>
{printf("\n\n\t\t\t用户名不正确,按任意键退出。
\n\n\n\t\t\t">。
exit(0>。
}
continue。
}
for(j=0。
jj++>
{
if(!
strcmp(stu[j].name,s3>>
{
printf("用户名正确\n">。
strcpy(s1,stu[j].name>。
strcpy(s2,stu[j].secret>。
system("cls">。
//从程序里调用“clear”命令。
break。
}
}
if(!
strcmp(s1,s3>>
break。
printf("用户名不正确,请从新输入。
\n">。
system("pause">。
//从程序里调用“pause”命令。
if(i==2>
{
printf("用户名和密码不匹配,按任意键退出。
\n">。
system("pause">。
//从程序里调用“pause”命令。
exit(0>。
}
system("cls">。
//从程序里调用“clear”命令。
}
for(i=0。
i<3。
i++>
{
pf(>。
printf("\n\n\t用户登陆">。
printf("\n\n用户名正确\n">。
printf("\n请输入用户密码,你还有%d次机会。
\n",3-i>。
printf("密码正确,登陆成功时,系统将自动跳转\n">。
gets(s4>。
if(!
strcmp(s2,s4>>
{
system("cls">。
//从程序里调用“clear”命令。
break。
}
Else
if(i==2>
{
system("cls">。
//从程序里调用“clear”命令。
printf("\n\n\n\t\t\t用户名和密码不匹配,按任意键退出。
\n\n\n\t\t\t">。
exit(0>。
}
else
{
system("cls">。
//从程序里调用“clear”命令。
printf("输入错误,请从新输入:
\n">。
}
}
for(i=0。
。
i++>
{
pf(>。
printf("\n\t\t***********************************\n">。
printf("\t\t*1.退出系统*\n">。
printf("\t\t**\n">。
printf("\t\t*2.进入万科大导航系统*\n">。
printf("\t\t**\n">。
printf("\t\t*3.新增用户信息*\n">。
printf("\t\t**\n">。
printf("\t\t*0.修改密码*\n">。
printf("\t\t********************************\n">。
printf("请选择功能\n">。
scanf("%d",&a>。
if(a==1>
{
printf("按任意键退出\n">。
break。
}
getchar(>。
if(a==2>
mainn(>。
if(a==3>
insert(>。
if(a==0>
{
for(i=0。
i<3。
i++>
{
system("cls">。
//从程序里调用“clear”命令。
pf(>。
printf("\n\n请输入原密码\n">。
printf("两次不正确,系统将自动返回,你还有%d次机会。
\n",3-i-1>。
gets(s3>。
if(!
strcmp(s2,s3>>
{for(i=0。
。
i++>
{
printf("\n请输入新密码\n">。
gets(s6>。
printf("\n请在此输入新密码\n">。
gets(s5>。
if(!
strcmp(s5,s6>>
{
system("cls">。
//从程序里调用“clear”命令。
printf("新密码为:
%s\n",s5>。
strcpy(s2,s5>。
strcpy(stu[j].secret,s2>。
if((fp=fopen("用户信息.txt","w">>==NULL>
{
printf("\n保存失败!
">。
exit(0>。
}
else
{
for(i=0。
ii++>
fprintf(fp,"\t%s\t%s\n",stu[i].name,stu[i].secret>。
}
fclose(fp>。
printf("新用户信息已保存在用户信息.txt中!
\n">。
system("pause">。
//从程序里调用“pause”命令。
system("cls">。
//从程序里调用“clear”命令。
break。
}
else
system("cls">。
//从程序里调用“clear”命令。
printf("\n\n两次输入密码不一样,密码修改失败\n">。
break。
}
break。
}
else
{
printf("原密码输入错误\n">。
printf("请珍惜机会,从新输入。
">。
system("pause">。
//从程序里调用“pause”命令。
system("cls">。
//从程序里调用“clear”命令。
}
if(i==2>
{exit(0>。
//已经是第三次了,哈哈!
}
}
}
}
}
voidinsert(>
{inti。
FILE*fp。
n++。
printf("\n\t\t输入新插入用户信息\n">。
printf("\n输入新用户名:
">。
scanf("%s",stu[n].name>。
fflush(stdin>。
//清空输入缓冲区,通常是为了确保不影响后面的数据读取
printf("\n输入新用户密码:
">。