数据结构CAI系统项目手册_系统数据结构实现方案

2020-02-28 其他范文 下载本文

数据结构CAI系统项目手册由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“系统数据结构实现方案”。

数据结构

项目书

项目经理: 产品经理: 测试经理:

北京工业大学数据结构课程设计项目书

一、问题描述:

以数据结构教材中树和图的内容为例,设计数据结构的CAI(计算机辅助教学)系统,用菜单的形式选择各项功能。用图形化界面的形式显示算法的执行过程。

二、程序分析:

二叉树的遍历算法演示中,首先定义一个TREE的结构体,里面存放的数据类型分别是char,两个TREE类型指针*lchild(左孩子),*rchild(右孩子),两个int分别是x和y,分别代表了树的x坐标和y坐标。再建立一个名称为OUTPUT的结构体里面存放了三种遍历的x坐标和y坐标。通过对Tree *CreatTree();函数的调用生成二叉树再通过void Preorder(Tree *t);void Midorder(Tree *t);void Posorder(Tree *t);这三个函数进行前中后的遍历来判断左右孩子是否存在。

三、程序设计:

1、结构化函数设计

北京工业大学数据结构课程设计项目书

2、设计工具

Win-TC, c文件

3、编码

头文件:

#include #include #include #include #include

结构体:

typedef struct TREE {

char data;

/*树的结点数据*/

struct TREE *lchild;

struct TREE *rchild;

int x;

/*树的x坐标*/

int y;

/*树的y坐标*/ }Tree;

struct OUTPUT {

int x;

/*三种遍历的x坐标*/

int y;

/*三种遍历的y坐标*/

int num;}s;

函数:

·函数名称:void DrawTree(Tree *t);·函数描述:用图形显示创建好的树

·函数名称:void Preorder(Tree *t);·函数描述:前序遍历

·函数名称:void Midorder(Tree *t);·函数描述:中序遍历

·函数名称:void Posorder(Tree *t);·函数描述:后序遍历

北京工业大学数据结构课程设计项目书

·函数名称:void DrawNode(Tree *t,int color);

·函数描述:遍历时显示每个结点的过程

·函数名称:void ClrScr();

·函数描述:清空树的区域

·函数名称:void Close(void);·函数描述:图形模式结束

四、测试与调试:

1、调试报告

一开始的调试中,我们就碰到了很严重的问题,图形化的界面一直无法正常的显示出来,运行之后,都是一闪即逝,为此,我们上网查阅了很多信息。加了getch(); 也加了system(“plause”);,这些基本的解决方法毫无用处;又有说要把Egavga.bgi这个文件和生成的exe文件放在一起,起初使用TC3.0时也无法正常显示图形界面。多番尝试无果之后打算试试Win-TC,结果莫名其妙的成功了。并且发现Egavga.bgi的确要和exe文件放在同一个文件夹,不在一起时无法进入图形界面,这是在一次另存为把文件保存到其他文件夹时发现的。还有最开始时,对于一些需要用到的函数所需的头文件不是很了解,不过通过网络的搜索之后,都一一得到解答。但是直到目前为止,依然有个比较大的问题,就是系统自动生成二叉树的时候,经常会出现重复字母的结点,我们想的是能不能一个节点之后就在26个字母之中把这个结点用到的字母抽出去,然后剩下的位置就从剩下的字母中选取,可是二叉树是一下子全部显示出来,好像没有明显的先后顺序,最后还是不会。

2、测试结果

A:主界面---选择生成树的方式(自动/手动)

北京工业大学数据结构课程设计项目书

B:选择1后

C:选择2后

D:按任意键后,进入二叉树的演示初始界面---图形化界面的初始化

北京工业大学数据结构课程设计项目书

E:按任意键后开始遍历,并输出遍历结果

五、主要算法分析:

(一)二叉树的生成Tree *InitTree(int h,int t,int w){

char ch;

int n;

/*自动建立时随机赋值判断是否是NULL的标志*/

Tree *node;

if(way=='2')

/*手动建立需要自己输入*/

scanf(“%c”,&ch);

else

/*自动建立的赋值*/

{

n=random(5);

if(n==0&&nodeNUM>=3)

/*随机赋值时候确保自动建立的二叉树有三个结点*/

ch=' ';

else

ch=65+random(25);

}

if(ch==' ')

/*输入空格代表NULL*/

return NULL;

北京工业大学数据结构课程设计项目书

else

{

if(h==6||nodeNUM==26)/*如果树的层次已经到5或者结点树到达26个就自动返回NULL*/

return NULL;

node=(Tree*)malloc(sizeof(Tree));

node->data=ch;

node->x=t;

/*树的x坐标是传递过来的横坐标*/

node->y=h*50;/*树的y坐标与层次大小有关*/

nodeNUM++;

node->lchild=InitTree(h+1,t-w,w/2);

node->rchild=InitTree(h+1,t+w,w/2);

}

return node;} 功能:实现二叉树的生成功能,用于构建二叉树

(二)图形化显示二叉树

void DrawTree(Tree *t){ if(t!=NULL){ setcolor(BLACK);setfillstyle(SOLID_FILL,BLACK);fillellipse(t->x,t->y,9,9);setcolor(WHITE);circle(t->x,t->y,10);/*画圆*/ sprintf(str,“%c”,t->data);/*将内容转换成字符串输出*/ outtextxy(t->x-3,t->y-2,str);if(t->lchild!=NULL)

/*左子树*/ { line(t->x-5,t->y+12,t->lchild->x+5,t->lchild->y-12);DrawTree(t->lchild);} if(t->rchild!=NULL)

/*右子树*/ { line(t->x+5,t->y+12,t->rchild->x-5,t->rchild->y-12);DrawTree(t->rchild);} } } 功能:利用坐标实现图形化输出二叉树的功能,用于图形化演示

北京工业大学数据结构课程设计项目书

六、心得体会:

项目经理-肖毅:

刚开始拿到课设的题目时,浏览一遍之后发现毫无头绪,不知从何下手。从大一接触C语言开始,到后来学习C++,到现在的数据结构,学到现在,面对大型完整程序的编写,依然感觉很是无力。最后我们选择了数据结构CAI系统,因为觉得可以直接从所学的一些算法中直接完成,已经学过现成的算法,有了明确的目标,我们要做的就是将这些算法图形化的演示出来,不会毫无思路。虽然的确有些思路了,但是也并没有我们想象的那么简单,从最开始的计划完成3个算法的演示到最后只完成了一个二叉树的三种遍历的演示。另外我们觉得选择这个也能够帮助我们复习数据结构的一些知识,对于即将到来的数据结构考试也是有所帮助的,虽然查找和排序并没有完成,但是我们也翻阅数据结构课本仔细研究了书上关于那些部分的算法,这也是一种复习,排序和查找也是数据结构中很重要的一部分。

确定完题目之后,就要开始着手编写了,我们组成员的整体水平虽然不是很高,但我们依然能够凭借自己的努力来完成程序,遇到不会的问题,我们会向其他同学请教,并且自己上网搜索相关信息,不得不再次感叹网络的强大,网络确实是现代生活中不可缺少的一部分。这次课设中我和池璐主要负责程序的编写,我们也是边写程序边学习,我主要负责程序中二叉树图形化输出和二叉树的生成等部分,图形化输出需要用到坐标,我们要将想要输出的东西放到屏幕上正确的部分,需要经过多次尝试之后才能最后确定坐标。同时也让其他几位成员参与编写并学习,对于一些我会的地方,也会跟他们讲解,为了让他们更好的理解程序,并完成后期PPT的制作。团队协作能力也是考校一个计算机专业学生的一个很重要的因素。

通过这次课设,对于数据结构基本功的知识是一种强化,更扎实了数据结构的基本功,并学习到了很多课堂上没有学到过的知识,对于计算机知识的学习之路,光靠课堂所学是远远不够的。实际程序的编写也是很重要的,每一个完整的程序对于自己都是一次历练,这对于以后的学习和未来的工作都是很有帮助的。

项目经理-池璐:

在忙碌了一个星期之后,课设终于结束了。“实践出真知”,编出一些有用的程序更是对数据结构这门课程学习的最好检验。正是这次的检验,让我受益良多。

我们设计的是一款教学CAI辅助程序,用直观便于理解的动态图示为学生展现的是二叉树的3种遍历方式。我主要负责的是界面设计和3种遍历。界面上我设计的比较简洁,用一些特殊符号构成了框架。为了方便老师,我设计了2种方式,一种为计算机自动分配二叉树,另一种是认为输入。3种不同的遍历方式主要看的是根节点的位置。例如先序遍历的根节点最先被访问。在算法的设计中我也参与了进去,与项目经理进行了探讨,最终完成了整个程序。

当然,编程之路并非一帆风顺。其间我们也遇到了许多问题。比如菜单的编程问题,编程环境的影响一记图形函数的应用。在查阅资料后,大部分问题得到了解决,我也学到了之前不太了解的问题。另外,我计划还设计一款二分法的CAI程序,由于知识水平有限,我便看书试图解决这个问题。但是最后没有能够解决。课设虽然结束了,但是学习的脚步还没有就此停下。更多的实践等着我把

北京工业大学数据结构课程设计项目书

数据结构这么课在学习生活中运用的更加娴熟,理解的更加透彻。这才是学好这门课的意义。

产品经理-黄友鹏:

通过本次课设,我学到很多。首先必须承认,我的基础很差,本来对编一大段程序就很头疼,但是这次以小组方式进行,使我能够向他人学习,就算是大家都不会的问题我们也可以分工上网寻找解决的办法,总之,第一次觉得学习也可以变得很轻松。

而且,通过这次课设,我也懂得了好多专业的名词,如路演,CAI系统...这些都是我以前没有接触过的。

本次课设我担任产品经理的职位,这不只是一个小小的虚衔,这是让我们提早感受社会,事实上我也是这么努力的,我自己做了路演PPT,而且目的就是让别人接收我们的产品,虽然还有很多的不足,但我们努力了,我也很有成就感。

总之,在这次课设中我学到了很多,也感觉进步了很大。

测试经理-于连明:

这次课设给了我很大的锻炼,使我进一步理解数据结构的重要性。我们小组设计的是CAI(Computer Aisted Instruction),也就是计算机辅助教学。目前我们所学的数据结构计算机专业一门重要的专业技术基础课程,有人概括过这样一个公式:程序=算法+数据结构,要设计好的程序,除了要设计好的算法之外,还必须采用合适的数据结构。所以数据结构的知识对设计和实现计算机系统软件如操作系统、编译程序和数据库管理系统等是十分重要的;它对于编写应用软件的人来说也是必不可少的。

然而学习这门课程有一些困难:

(1)内容丰富,学习量大,给学习带来困难。

(2)贯穿的动态链表存储结构和递归技术是学习中的重点也是难点;

(3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度;在解答问题时出会因此而困难重重。

因此我们小组为了解决数据结构学起来困难的麻烦,设计了CAI系统。这是一种崭新的教学方式,它可以代替教师模拟教学过程,是通过学生与计算机之间的交互活动达到教学的目的。其图文并茂,灵活方便的众多特点,可以激发我们学生的学习兴趣,且发挥学生的学生积极性,提高教学质量。CAI可以将某些非顺序信息呈现出来,可以包括一门课程或与某个对象有关的全部知识。我们即可以浏览所有知识,也可以按自己的需要获取其中任意所感兴趣的一部分,学生可以控制学习内容和进度。

但是我们设计的CAI系统缺乏网络支持。它是运行在单机下环境下的。无法利用网络在知识更新上的方便与快捷的优势。这样的CAI课件一旦生产完成就再也无法对教学的内容进行更新和维护,因而是没有生命力的,将随着时间的发展而逐步被淘汰。这类弊端有待研究解决。

这次课设也使我明白团队的合作是非常重要的,团结就是胜利。

北京工业大学数据结构课程设计项目书

七、分工协作:

项目经理:肖毅 池璐

职责:负责整个项目小组的人员管理、进度管理,主要攻克软件产品技术环节的问题,负责路演环节技术问题的答辩,负责项目手册中的核心算法部分的书写及整个项目手册的整理定稿。负责进行项目中期汇报及与指导教师的沟通。

产品经理:黄友鹏

职责:负责整个产品的框架设计、外观设计和功能模块的升级设计,主要负责产品的需求分析及性能改良,负责手册中产品外观和框架及需求的书写,负责路演环节PPT的制作。

测试经理:于连明

职责:负责整个产品的功能模块部分的设计与最终产品测试环节,建立产品所需的数据资源库,负责路演环节产品使用的答辩,负责项目手册中功能模块及算法的书写。

八、附录:源代码

/********二叉树的三种遍历算法演示********/ #include #include #include #include #include

typedef struct TREE {

char data;

/*树的结点数据*/

struct TREE *lchild;

struct TREE *rchild;

int x;

/*树的x坐标*/

int y;

/*树的y坐标*/ }Tree;

struct OUTPUT {

int x;

/*三种遍历的x坐标*/

int y;

/*三种遍历的y坐标*/

int num;}s;

int nodeNUM=0;/*统计当前的结点数字,最多26个*/ char way;

/*自动建立树和手动建立树的标志,2手动,1自动*/ char str[3];

/*显示结点数据的字符串*/

北京工业大学数据结构课程设计项目书

void Init();

/*图形初始化*/ void Close();/*图形关闭*/ Tree *CreatTree();

/*文本模式下创建树的过程*/ Tree *InitTree(int h,int t,int w);/*创建树,h层次,t横坐标,w树之间的宽度,n树的建立方式*/ void DrawTree(Tree *t);/*用图形显示创建好的树*/ void Preorder(Tree *t);/*前序遍历*/ void Midorder(Tree *t);/*中序遍历*/ void Posorder(Tree *t);/*后序遍历*/ void DrawNode(Tree *t,int color);

/*遍历时显示每个结点的过程*/ void ClrScr();

/*清空树的区域*/

void main(){

Tree *root;

randomize();

root=CreatTree();/*创建树*/

Init();

DrawTree(root);

/*每次遍历前显示白色的树*/

sleep(1);

s.x=100;s.y=300;s.num=1;/*每次遍历前设置显示遍历顺序显示的x,y坐标*/

Preorder(root);

/*前序遍历*/

getch();

ClrScr();

DrawTree(root);

sleep(1);

s.x=100;

s.y=350;

s.num=1;

Midorder(root);

/*中序遍历*/

getch();

ClrScr();

DrawTree(root);

sleep(1);

s.x=100;

s.y=400;

s.num=1;

Posorder(root);

/*后序遍历*/

Close();}

/*清空树的区域*/ void ClrScr(){

setcolor(BLACK);

北京工业大学数据结构课程设计项目书

setfillstyle(SOLID_FILL,BLACK);

bar(0,20,640,280);}

/*树的创建*/ Tree *CreatTree(){

Tree *root;

clrscr();

printf(“n”);

printf(“n”);

printf(“

Binary tree traversal

n”);

printf(“

----------------------------n”);

printf(“

**********Please input '1' OR '2' to choose********** n”);

printf(“

*

* n”);

printf(“

*

1.Computer creat

* n”);

printf(“

*

* n”);

printf(“

*

2.People creat

* n”);

printf(“

*

* n”);

printf(“

***************************************************** n”);

way=getch();/*输入创建树的方法,1电脑自动建立,2人工手动建立*/

if(way!='2')

way='1';

/*其他数字默认自动建立*/

if(way=='2')/*手动建立提示输入结点,例abc de f g

*/

printf(“

Please creat the tree:

n”);

root=InitTree(1,320,150);

system(“pause”);

return root;}

/*生成二叉树,h表示层次,t表示横坐标,w表示结点左右子树的宽度,随机数n确定结点是空或非空,如n为0,则为空,但要限定确保结点数不少于三个*/ Tree *InitTree(int h,int t,int w){

char ch;

int n;

/*自动建立时随机赋值判断是否是NULL的标志*/

Tree *node;

if(way=='2')

/*手动建立需要自己输入*/

scanf(“%c”,&ch);

else

/*自动建立的赋值*/

{

n=random(5);

if(n==0&&nodeNUM>=3)

/*随机赋值时候确保自动建立的二叉树有三个结点*/

ch=' ';

北京工业大学数据结构课程设计项目书

else

ch=65+random(25);

}

if(ch==' ')

/*输入空格代表NULL*/

return NULL;

else

{

if(h==6||nodeNUM==26)/*如果树的层次已经到5或者结点树到达26个就自动返回NULL*/

return NULL;

node=(Tree*)malloc(sizeof(Tree));

node->data=ch;

node->x=t;

/*树的x坐标是传递过来的横坐标*/

node->y=h*50;/*树的y坐标与层次大小有关*/

nodeNUM++;

node->lchild=InitTree(h+1,t-w,w/2);

node->rchild=InitTree(h+1,t+w,w/2);

}

return node;}

/*用图形显示创建好的树*/ void DrawTree(Tree *t){

if(t!=NULL)

{

setcolor(BLACK);

setfillstyle(SOLID_FILL,BLACK);

fillellipse(t->x,t->y,9,9);

setcolor(WHITE);

circle(t->x,t->y,10);/*画圆*/

sprintf(str,“%c”,t->data);/*将内容转换成字符串输出*/

outtextxy(t->x-3,t->y-2,str);

if(t->lchild!=NULL)

/*左子树*/

{

line(t->x-5,t->y+12,t->lchild->x+5,t->lchild->y-12);

DrawTree(t->lchild);

}

if(t->rchild!=NULL)

/*右子树*/

{

line(t->x+5,t->y+12,t->rchild->x-5,t->rchild->y-12);

DrawTree(t->rchild);

}

}

北京工业大学数据结构课程设计项目书

}

/*遍历时显示每个结点的过程*/ void DrawNode(Tree *t,int color){

setcolor(RED);

setfillstyle(SOLID_FILL,RED);

fillellipse(t->x,t->y,10,10);

setcolor(YELLOW);

sprintf(str,“%c”,t->data);/*将内容转换成字符串输出*/

outtextxy(t->x-3,t->y-2,str);

setcolor(color);

outtextxy(s.x,s.y,str);

setcolor(YELLOW);

sprintf(str,“%d”,s.num);

/*将遍历次序用数字显示在树的结点上*/

outtextxy(t->x-3,t->y-20,str);

s.num++;

sleep(1);}

/*前序遍历*/ void Preorder(Tree *t){

if(t!=NULL)

{

s.x+=15;

DrawNode(t,YELLOW);

Preorder(t->lchild);

Preorder(t->rchild);

} }

/*中序遍历*/ void Midorder(Tree *t){

if(t!=NULL)

{

Midorder(t->lchild);

s.x+=15;

DrawNode(t,WHITE);

Midorder(t->rchild);

} }

北京工业大学数据结构课程设计项目书

/*后序遍历*/ void Posorder(Tree *t){

if(t!=NULL)

{

Posorder(t->lchild);

Posorder(t->rchild);

s.x+=15;

DrawNode(t,GREEN);

} }

/*图形初始化*/ void Init(){

int gd=DETECT,gm;

initgraph(&gd,&gm,“c: c”);

cleardevice();/*清除图形屏幕*/

setcolor(YELLOW);

outtextxy(225,10,“Pre anykey to continue”);

setcolor(RED);

outtextxy(20,300,“preorder”);

outtextxy(20,350,“midorder”);

outtextxy(20,400,“posorder”);

getch();}

/*关闭图形*/ void Close(){

getch();

closegraph();}

九、参考书目

《数据结构(c语言版)》.The Internet.

《数据结构CAI系统项目手册.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
数据结构CAI系统项目手册
点击下载文档
相关专题 系统数据结构实现方案 数据结构 手册 项目 系统数据结构实现方案 数据结构 手册 项目
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文