胡鹏《数据结构》课程方案报告Word格式.docx
- 文档编号:19027633
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:23
- 大小:273.90KB
胡鹏《数据结构》课程方案报告Word格式.docx
《胡鹏《数据结构》课程方案报告Word格式.docx》由会员分享,可在线阅读,更多相关《胡鹏《数据结构》课程方案报告Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
charMenu(>
//主菜单
(2>
charSearchMenu(>
//查询子菜单
(3>
voidsearch(>
//查询景点信息
(4>
voidCreateUDN//采用数组<
邻接矩阵)表示法,构造无向图G
(5>
voidintroduce(>
//介绍函数
(6>
voidpingmu(>
//屏幕输出函数
(7>
voidShortestPath//迪杰斯特拉算法最短路径函数
(8>
voidoutput//输出函数
3.3函数主要调用关系图
图3-2主要函数调用关系图
4详细设计
4.1数据类型定义
整型类型:
adj。
n。
P[NUM][NUM]。
D[NUM]。
i=0,a,j。
i。
v0,v1,i。
flag。
i,j。
v,w,i,t。
a,b,c,d,q=0。
final[NUM]。
字符串类型:
name[20]。
c。
ck。
secret[20]。
sight。
description。
info。
4.2各个模块的程序流程图
图4-1查询模块流程图
图4-2迪杰斯特拉算法流程
4.3关键代码分析说明
voidCreateUDN(intv,inta>
//采用数组<
邻接矩阵)表示法,构造无向图G。
{inti,j。
G.vexnum=v。
//初始化结构中的景点数!
!
!
G.arcnum=a。
//初始化结构中的边数!
for(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="
东区宿舍楼"
//这里把所有的边假定为32767(2^32次方>
,含义是这两个景点之间是不可到达。
{
for(j=1。
j<
++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)退出<
ENTER),输入数字2,进入学校平面展示,如图所示5-5
图5-5学校平面展示界面
(6)退出<
ENTER),输入数字3,进入景点展示界面,如图所示5-6
图5-6景点展示界面
(7)退出<
ENTER),输入数字4,进入景点查询界面,如图所示5-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]《数据结构》<
C语言版)严蔚敏吴伟民编
[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:
55
//预处理命令
#include<
stdio.h>
#include<
stdlib.h>
//使用system函数
conio.h>
string.h>
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]。
//辅助变量存储最短路径长度
//创建图的函数
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******信息工程与科学系数据结构课程设计******"
>
\n\n\n\t\t--------------------------------------"
\n\t\t|\t名称:
万科大校园导航系统\t|"
printf("
\n\t\t|\t姓名:
胡鹏\t|"
\n\t\t|\t班级:
1101网工\t|"
\n\t\t|\t指导老师:
方瑞英\t|"
\n\t\t|\t作者:
万科大校园\t|"
\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”为输出打开一个文本文档
找不到用户信息.txt文件!
\n"
system("
pause"
//从程序里调用“pause”命令。
exit(0>
}
else
{
fscanf(fp,"
\t%d\n"
&
n>
//fscanf(文件指针,格式字符串,输入文件表列>
for(i=0。
N。
i++>
fscanf(fp,"
\t%s\t%s\n"
stu[i].name,stu[i].secret>
}//从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。
//fscanf(文件指针,格式字符串,输入列表>
fclose(fp>
\n\n\n\n\n\n\n\n\t\t保存在用户信息.txt文件中的所有信息已经读入程序中!
\n\n\t\t\t"
system("
cls"
for(i=0。
3。
{pf(>
printf("
\n\n\t\t用户登陆"
请输入用户名,你还有%d次机会。
\n\t\t\t"
3-i>
gets(s3>
if(!
strcmp(s3,s7>
//strcmp比较两个字符串的大小
{printf("
用户名不能空格,谢谢!
"
用户名不正确,请从新输入。
//从程序里调用“pause”命令。
//从程序里调用“clear”命令。
if(i==2>
{printf("
\n\n\t\t\t用户名不正确,按任意键退出。
\n\n\n\t\t\t"
exit(0>
}
continue。
for(j=0。
j++>
if(!
strcmp(stu[j].name,s3>
{
用户名正确\n"
strcpy(s1,stu[j].name>
strcpy(s2,stu[j].secret>
break。
strcmp(s1,s3>
break。
system("
用户名和密码不匹配,按任意键退出。
pf(>
\n\n\t用户登陆"
\n\n用户名正确\n"
\n请输入用户密码,你还有%d次机会。
密码正确,登陆成功时,系统将自动跳转\n"
gets(s4>
strcmp(s2,s4>
Else
if(i==2>
{
\n\n\n\t\t\t用户名和密码不匹配,按任意键退出。
exit(0>
}
else
{
system("
printf("
输入错误,请从新输入:
pf(>
\n\t\t***********************************\n"
\t\t*1.退出系统*\n"
\t\t**\n"
\t\t*2.进入万科大导航系统*\n"
\t\t*3.新增用户信息*\n"
\t\t*0.修改密码*\n"
\t\t********************************\n"
请选择功能\n"
scanf("
%d"
a>
if(a==1>
{
printf("
按任意键退出\n"
break。
getchar(>
if(a==2>
mainn(>
if(a==3>
insert(>
if(a==0>
pf(>
\n\n请输入原密码\n"
两次不正确,系统将自动返回,你还有%d次机会。
3-i-1>
gets(s3>
if(!
strcmp(s2,s3>
{for(i=0。
{
\n请输入新密码\n"
gets(s6>
\n请在此输入新密码\n"
gets(s5>
strcmp(s5,s6>
{
printf("
新密码为:
%s\n"
s5>
strcpy(s2,s5>
strcpy(stu[j].secret,s2>
if((fp=fopen("
w"
{
\n保存失败!
}
for(i=0。
fprintf(fp,"
fclose(fp>
新用户信息已保存在用户信息.txt中!
//从程序里调用“clear”命令。
break。
}
else
system("
\n\n两次输入密码不一样,密码修改失败\n"
原密码输入错误\n"
请珍惜机会,从新输入。
{exit(0>
//已经是第三次了,哈哈!
}
{inti。
n++。
\n\t\t输入新插入用户信息\n"
\n输入新用户名:
scanf("
%s"
stu[n].name>
fflush(stdin>
//清空输入缓冲区,通常是为了确保不影响后面的数据读取
\n输入新用户密码:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 胡鹏 课程 方案 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)