课程设计说明书格式.docx
- 文档编号:4390102
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:15
- 大小:107.72KB
课程设计说明书格式.docx
《课程设计说明书格式.docx》由会员分享,可在线阅读,更多相关《课程设计说明书格式.docx(15页珍藏版)》请在冰点文库上搜索。
课程设计说明书格式
课程设计说明书
课程名称:
数据结构课程设计
专业:
班级:
设计人:
学号:
山东科技大学
年月日
山东科技大学
课程设计任务书
一、课程设计题目:
二、设计原始资料:
三、设计应解决下列各主要问题:
1、
2、
3、
4、
四、设计说明书应附有下列图纸:
五、小组分工说明:
六、命题发出日期:
设计完成日期:
指导教师评语
成绩:
指导教师(签章):
年 月 日
目录
1需求分析说明…………………………………………………………1
1.1XXXXX…………………………………………………………1
1.2XXXXX……………………………………………………………1
1.3XXXXX……………………………………………………………1
1.4XXXXX…………………………………………………………2
2概要设计说明…………………………………………………………2
2.1XXXXX……………………………………………………………2
2.2XXXXX…………………………………………………………3
2.3XXXXX…………………………………………………………5
2.4XXXXX…………………………………………………………5
3详细设计说明…………………………………………………………6
3.1XXXXX………………………………………………………7
3.2XXXXX………………………………………………………7
3.3XXXXX…………………………………………………………7
3.4XXXXX……………………………………………………………8
3.5XXXXX…………………………………………………………8
3.6XXXXX…………………………………………………………8
4调试分析…………………………………………………………19
4.1XXXXX……………………………………………………19
4.2XXXXX…………………………………………………………20
4.3XXXXX………………………………………………………30
5用户使用说明………………………………………………………30
5.1XXXXX…………………………………………………………30
5.2XXXXX…………………………………………………………31
5.3XXXXX…………………………………………………………31
6课程设计总结……………………………………………………31
1需求分析说明
内部排序教学软件的总体目标:
在*****的开发环境下,利用所学C语言和数据结构的相关知识,开发一个具有良好人机界面的内部排序教学软件,实现各种内部排序,并能使用户通过其显示结果对每种排序方法的性能有一个直观的了解,从而达到教学的目的。
基本功能如下:
(1)界面友好,易与操作。
采用菜单或其它人机对话方式进行选择。
(2)实现各种内部排序。
包括冒泡排序,直接插入排序,直接选择排序,希尔排序,快速排序,堆排序。
(3)待排序的元素的关键字为整数。
可用随机数据和用户输入数据作测试比较。
比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换以3次计)。
(4)演示程序以人机对话的形式进行。
每次测试完毕显示各种比较指标
的列表,以便比较各种排序的优劣。
以下是各功能模块的功能描述:
1.主函数模块
本模块的主要功能是初始化图形界面,调用各模块,实现软件功能。
2.排序功能及输出子模块
本模块的主要功能是根据用户的选择进行数组的创建,并对输入数据或者随机产生的数据使用六种排序方法进行排序并统计每种方法的移动次数和比较次数,然后输出以表格形式输出。
3.封面和结束画面子模块
本模块的主要功能是当用户打开本软件时模拟软件加载,延时数秒后关闭,并进入图形界面,在用户退出软件时显示结束画面,延时数秒后关闭程序。
4.图形界面子模块
本模块的主要功能是根据用户的选择显示不同的画面,引导用户使用软件所提供的各种功能,并在用户提供必要数据,并选择排序功能时调用排序模块,并显示结果画面。
5.输入子模块
本模块的主要功能是进行光标定位,输出提示文字,并对用户输入数据进行处理,创建数组。
6.鼠标实现模块
本模块的主要功能是为用户提供鼠标操作支持,使用户能使用鼠标进行功能的选择。
测试数据:
1:
随机数若干组
2:
升序数组{1,2,3,4,5,6,7,8,9,10}
3:
降序数组{9,8,7,6,5,4,3,2,1,0}
2概要设计说明
2.1模块调用图
模块调用图如图1所示。
图1模块调用图
可排序表的抽象数据类型定义为:
ADTOrderablelist{数据对象:
D={A[i]|A[i]∈Integer,i=1,2,…,n,n>=0}数据关系:
R={|A[i-1],A[i]∈D,i=1,2,…,n}基本操作:
}
#defineMAXSIZE200
/*数组最大长度*/
intMOV_CNT;/*移动次数*/
intCMP_CNT;/*比较次数*/
voidExchange(intnum[],inti,intj)/*交换数组元素i,j*/voidShellSort(intnum[],intn)/*希尔排序*/voidQuickSort(intp[],intc,intd)/*快速排序*/
voidSIFT(intnum[],ints,intn)/*调整建堆函数*/voidHeapSort(intnum[],intn)/*堆排序*/voidChooseSort(intnum[],intn)/*选择排序*/voidBubbleSort(intnum[],intn)/*冒泡排序*/voidInsertsort(intnum[],intn)/*插入排序*/voidSort(intarray[],intn)/*调用六种排序方法并输出移动次数和比较次数*/
voidCreatRan(intarray[],intn)/*建立随机数组*/
voidCreatUp(intarray[],intn)/*建立升序数组*/
voidCreatDown(intarray[],intn)/*建立降序数组*/
intInputLen()/*输入数组长度*/
voidInputArray(intarray[],intn)/*建立人工输入的数组*/
voidLocate(introw,intcol)/*光标定位*/
voidMouseMath()/*计算鼠标的样子*/
voidMouseOn(intx,inty)/*鼠标光标显示*/
voidMouseSetX(intlx,intrx)/*设置鼠标左右边界*/
voidMouseSetY(intuy,intdy)/*设置鼠标上下边界*/
voidMouseSetXY(intx,inty)/*设置鼠标当前位置*/
intMouseStatus(int*x,int*y,int*state)/*鼠标坐标及按键情况*/
intStartScreen()/*开始界面的进度条*/
intMainWin(intx1,inty1,intx2,inty2)/*主窗口*/
intCloseButton(inty1,intx2,intclose)/*关闭按钮*/
voidButton(intbuttonx1,intbuttony1,intbuttonx2,intbuttony2,char*name,intstate)/*功能按钮*/
voidClear()/*清屏*/
voidScreen(intsn)/*界面*/
voidCloseScreen()/*结束画面*/
intMouse()/*鼠标事件处理*/
intRun(intbn,intsn)/*功能调用*/
3详细设计说明
1.主函数模块
首先调用initgraph函数进行图形驱动的初始化,然后调用StartScreen函数显示进度条,模拟软件加载,然后调用Mouse函数,再调用closegraph函数关闭图形模式。
2.排序功能及输出子模块
在实现排序功能时,每调用一种排序方法前首先应该把原始数组array[]复制到num[] ,把移动次数MOV_CNT和比较次数CMP_CNT置零,然后对num进行一种排序,同时进行记数,最后进行光标定位,输出次数。
这样进行六次,就可以把六种排序方法的移动次数和比较次数统计出来。
再这里,光标的定位是利用软中断方式实现的,这样做可以直接利用scanf和printf进行输入输出,而不必进行数字和字符串之间的转化。
3.封面和结束画面子模块
软件的封面是一个模拟软件加载的一个进度条。
其设计思路是,先利用bar函数画出一个浅蓝色的矩形条,然后进行光标定位,输出“Loading…”字符串,然后将分十段将矩形条用蓝色填充,同时在字符串同一行的右边几个字符的距离输出百分数。
由于输出的是利用字符函数,而非图形函数,字符的背景色会覆盖上一次的数字,造成百分数不断增加,进度条不断前进的动画效果。
4.图形界面子模块
这个模块是软件最为复杂,开发时间最长,修改次数最多的一个模块。
这个界面主要是仿照传统的WINDOWS界面。
主窗口是由四部分组成,蓝色的屏幕背景、灰色的窗体、蓝色的标题栏和关闭按钮。
窗口和按钮的突起效果是现在屏幕上画一浅色形状,再将纵横坐标增加一两点,画深色形状,从而造成突起效果。
为了体现动画的效果,按钮分三种状态,突起状态,平面状态和凹陷状态。
凹陷效果可由深色形状在浅色形状的大小基础上缩小一两个像素点得到。
一个界面包括提示文字和功能按钮。
软件一共有6个界面,其中界面0是用户一开始看到的界面,界面1,2,3,4分别对应于功能按钮1,2,3,4,界面5是显示结果的界面。
这个模块的关键在于鼠标控制。
鼠标状态state为0时,没有鼠标键按下,为1时鼠标左键被按下。
鼠标在哪个按钮上是利用鼠标的坐标值是否在按钮的坐标范围内进行判断的。
判断用户是否选择了某一功能是利用鼠标在哪个按钮上同时state==1进行判断的。
当鼠标在非按钮区域按下左键时程序会直接进入下一个循环。
界面0的四个功能按钮名为:
“Random”,”OrderUp”,”OrderDn”,”Input”,代表产生数组的四种方式——随机、升序、降序、人工输入。
界面1,2,3,4的两个功能按钮名为:
”Input”,”Static”,代表确定数组长度的方式——人工输入、默认。
界面5包含一个“Restart”按钮,用来返回到界面0。
5.输入子模块
当选择好功能以后,分4种情况,随机数组、升序数组、降序数组、人工输入的数组。
长度分两种,Input是先进行光标定位,然后输出提示文字,当用户输入长度后,把值赋给n,而Static是直接把10赋给n。
6.鼠标实现模块
软件的鼠标最初使用的系统自带的样式,通过BIOS中断INT33H实现。
Mouse()流程图如图2所示。
4调试分析
遇到的问题:
●同一数组排序六次
由于要对同一数组排序六次,必须在排序前先将数组保存起来,每次排序
只对数组副本进行操作。
●鼠标在WIN2000,XP下不能正常显示
鼠标使用软中断方式在WIN98下能正常工作,但是更高版本如WIN2000,XP下都不能显示鼠标,即鼠标处于隐形状态。
经过思考和查找资料,我决定用自已画一个鼠标指针形状,并根据中断提供的坐标值绘制在屏幕的相应坐标上。
当鼠标移动时,先将原始位置的鼠标消去,然后在新的位置绘制出指针形状。
●屏幕和按钮不停闪烁
经过检查,发现是屏幕重绘频率过快引起的,在每次绘图以后加上一定延时,在有意识的控制循环的频率即可解决。
●图形界面下输入数据
图形界面下的输入一般为字符串,为了不进行数字和字符串之间的转化,我利用了中断定位光标,直接利用scanf进行输入。
●在程序显示结果后无法返回界面0
在结果界面上增加一个按钮Restart,利用goto语句即可返回到界面0。
测试结果
下面对几组数据进行测试。
数组:
19,65,85,79,62,33,55,44,77,11
排序方法
移动次数
比较次数
堆排序
27
13
冒泡排序
135
45
插入排序
18
9
快速排序
27
45
选择排序
27
9
希尔排序
36
18
数组:
8,84,86,21,32,54,65,98,75
排序方法
移动次数
比较次数
堆排序
24
11
冒泡排序
108
36
插入排序
16
8
快速排序
24
36
选择排序
24
8
希尔排序
32
16
数组:
1,2,3,4,5,6,7,8,9
排序方法
移动次数
比较次数
堆排序
60
37
冒泡排序
0
36
插入排序
16
8
快速排序
24
36
选择排序
24
8
希尔排序
32
18
数组:
9,8,7,6,5,4,3,2,1,0
排序方法
移动次数
比较次数
堆排序
51
31
冒泡排序
135
45
插入排序
63
54
快速排序
27
45
选择排序
27
9
希尔排序
63
45
对六种排序的性能分析:
测试
冒泡排序
插入排序
选择排序
快速排序
希尔排序
堆排序
比较次数
第二多,越乱越多。
第三多,越乱越多。
最多,与乱否无关。
较多,乱否差别小。
最少,乱否差别小。
第二少,乱否差别小。
移动次数
最多,越乱越多。
第二多,越乱越多。
最少,正或逆序少。
第二少,乱否差别小。
比快排约快2.5倍。
较多,乱否差别小。
5用户使用说明
用户打开软件后,首先见到的是进度条屏幕,如图3所示,随后进入了如图4所示的界面0。
图3进度条界面
图4界面0
界面0的四个功能按钮名为:
“Random”,”OrderUp”,”OrderDn”,”Input”,代表产生数组的四种方式——随机、升序、降序、人工输入。
点选任意一个功能按钮,将会进入如图5所示界面。
Input按钮是人工输入数组长度,Static按钮是使用默认长度10。
当用户点选Input按钮时,进入输入长度的界面。
当用户点选Static按钮时,进入界面5或输入数据界面然后进入界面5。
图5输入数据界面
图6输入长度界面
图7输入数组元素界面
用户在看到输入长度界面界面后,即可使用键盘输入长度,但要求长度不超过200,按回车键确认。
同理,用户在看到输入数组元素界面后,即可输入元素,元素之间用空格隔开。
最后是结果界面。
点击Restart按钮可回到界面0。
点击关闭按钮即可退出。
图8结果界面
6课程设计总结
通过这次数据结构课程设计,使我对软件的界面设计有了一个比较深刻的了解,对各种内部排序方法的性能有了清晰的认识,使我感觉到到,一个优秀的软件,不仅仅是可以运行的,更应该具有人性化的界面,协调的布局,合理的结构,良好的性能和一定的容错性。
一个人要完成所有的工作是非常困难和耗时的。
在以后的学习中我会更加注意各个方面的能力的协调发展,选择一两门技术进行深入研究,成为一个既可以统筹全局,又有一定技术专长的优秀的程序开发人员。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 说明书 格式