学计算机与信息学院
计算机类
课程设计报告
课程名称:
程序设计基础程序设计
课程设计题目:
校园导航系统
姓
名:
系:
专
年
学
业:
级:
号:
指导教师:
职
称:
计算机系
计算机科学与技术
2006 级
061150078
副教授
2008年 6 月 26 日
福建农林大学计算机与信息学院计算机类
课程设计结果评定
评语:
成绩:
指导教师签字:
任务下达日期:2008 年 3 月 15 日
评定日期:
目
录
1. 设计目的及要求…………………………………………………………… 1
2. 设计步骤…………………………………………………………………… 1
2.1 问题分析和任务定义…………………………………………………… 1
2.2 逻辑设计师……………………………………………………………… 2
2.3 详细设计师……………………………………………………………… 5
2.4 程序编码………………………………………………………………… 7
2.5 程序调试与测试………………………………………………………… 7
3. 源程序……………………………………………………………………… 8
4. 总结………………………………………………………………………… 16
3.附录………………………………………………………………………… 16
校园导航系统
一、 设计目的及设计要求
1. 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法
和技能;
3. 独立完成,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应
具备的科学的工作方法和作风。
二、 设计步骤
2.1问题分析与任务定义:
本课程设计的内容为“校园导航”,校园平面图中取福建农林大学的11
个常去地点,其略图如图 1,图中已标出主要路线,各路线的长度如表1中所示。
任务定义:找出从任意场所到达另一场所的最佳路径(最短路径)。显然要解决
这一问题要用“邻接矩阵”来存储各点间的距离,然后用Dijkstra 求出最短路径。
11博学楼
6图书馆
8
中
华
广
场
7
体
育
馆
9创新楼
1 昌 融
公寓
3拓荒广场
2映辉楼
4第八、
九、十堂
5校医院
10逸夫
图书馆
图1:校园平面图
1
1←→2:300
2←→6:400
3←→6:300
3←→4:80
4←→9:330
6←→11:110
7←→10:70
8←→11:120
2←→3:200
2←→5:220
3←→5:150
3←→8:350
4←→5:90
7←→9:80
8←→9:105
9←→10:50
表1:各景点距离
2.2 逻辑设计:
按所设想的功能,把程序化分为6个模块,各模块的名称和其数据类型如表
2所示:
源文件
函数名或其它成分
功能
main
menu
createadj
dijkstra
search
Exit
表2:各模块名称、功能
主函数
菜单函数
建立邻接表
建立最小生成树
多次查询函数
结束程序
guide.c
各模块的说明如下:
(1)Main 主函数
调用各函数,实现课程设计的目标。其中包含三个功能,一个是直接进入
导航系统,利用主函数中已有的数据,进行查询:一个是进行创建数据,本程序
中初始数据为农大的导航数据,如果需要也可以自己建立一个;最后一个是退出
功能。
2
(2)Menu 菜单函数
该函数用于显示初页面,列出两个功能的选择。一个是进入农大导航系
统,一个是进行自己创建一个导航系统。
(3)Createadj 创建邻接表,
其实该函数不仅是创建邻接表,把各景点间的距离输入其中;还有一个
功能,就是把各景点的名称也保存到一个链表中,这样在输出最短路径时就可以
用各地点的名称输出,以便浏览。
(4)dijkstra 建立最小生成树
这是本程序的中心,在众多路径中选出最短路径。基于对 dijkstra 求
最小生成树方法的应用。使整个程序显得极为简便。课本中的 dijkstra 函数只
是输入一个结点,然后输出从该结点出发到各结点的最短路径,为了使它更适用
于本课程设计,我将它改为“输入两个结点,输出这两点的最短路径”。
(5)search 查询函数
设计该函数的目的是为了能够多次得应用 dijkstra 函数进行查询最短
路径。同时该函数可以列出各景点的代号和对应的名称,这样大家只要输入代号
就行了。方便进行查询。
(6)exit 退出
在各贡功能运行完之后,只要输入相应的字符就能退出程序。
关于这些模块之间,它们的调用关系图如图2:
主函数
菜单函数
建邻接表
查询函数
退出
退出
退出
建最小生成树
退出
图2:调用关系图
3
下面分别描述这些函数,建立它们函数原型。
1、主函数
函数原型:void main(void)
功
参
能:控制程序。
数:void
返 回 值:void
要
求:管理菜单命令并完成初始化。
2、菜单选择和处理函数
函数原型:int menu()
功
参
能:处理选择的菜单命令并接收用户选择的命令代码。
数:int
返 回 值:int
工作方式:返回命令代码的整数值,根据命令,调用相应函数。
要
求:只允许选择规定键,如果输入不合要求,则提醒用户重新输入。
3、建立邻接矩阵函数
函数原型:void createadj()
功
参
能:重新建立一个学生信息的记录。
数:void
返 回 值:void
工作方式:在需要的时候就可以有主菜单中调用 void createadj()函数。
要
求:必需输入信息记录,然后才能调用出 search()函数进行查询。
4、dijkstra 函数
函数原型:void dijkstra(intx,inty)
功
参
能:求两点间的最短路径
数:void
返 回 值:void
工作方式: 该函数被其它一些函数调用。
5、结束程序
函数原型:int Exit()
4
功
参
能:使程序正常结束运行
数:int
返 回 值:1
工作方式:在操作都完成后,可以调用 int Exit()函数,使函数最终返回 1
运行 exit(1),程序正常结束。
要
求:运行 Exit()函数后可以选择是否要保存,选择 y 则先保存再返
回 1 值;如果选择 n 直接返回 1 值。
2.3 详细设计
详细的程序设计应从下到上,在本设计中就要先设计 createadj 函数;然
后设计 dijkstra 函数;接着是 search 函数;menu 函数;最后才是 main 函数。
如此设计能大大提升设计速度,因为从下往上使编程时的高试过程简单许多,而
做课程设计花费时间最多的就是调试过程。对于各函数的详细设计,各函数的N
—S图如下:
(1)Createadj 函数
(2)Dijkstra 函数
5