毕业设计电脑存储结构设计与实现课程设计报告.docx

上传人:b****6 文档编号:2987533 上传时间:2022-11-16 格式:DOCX 页数:23 大小:573.19KB
下载 相关 举报
毕业设计电脑存储结构设计与实现课程设计报告.docx_第1页
第1页 / 共23页
毕业设计电脑存储结构设计与实现课程设计报告.docx_第2页
第2页 / 共23页
毕业设计电脑存储结构设计与实现课程设计报告.docx_第3页
第3页 / 共23页
毕业设计电脑存储结构设计与实现课程设计报告.docx_第4页
第4页 / 共23页
毕业设计电脑存储结构设计与实现课程设计报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

毕业设计电脑存储结构设计与实现课程设计报告.docx

《毕业设计电脑存储结构设计与实现课程设计报告.docx》由会员分享,可在线阅读,更多相关《毕业设计电脑存储结构设计与实现课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。

毕业设计电脑存储结构设计与实现课程设计报告.docx

毕业设计电脑存储结构设计与实现课程设计报告

《数据结构》

课程设计报告

 

课题名称:

电脑存储结构设计与实现

一、课题名称

电脑存储结构的设计与实现

二、主要内容

电脑存储结构设计与实现主要是模拟“我的电脑”中硬盘信息的建立、查找、插入、修改、删除等功能。

可。

基本功能如下:

(1)硬盘初始化信息:

我的电脑(根结点)。

(2)硬盘格式化:

为我的电脑分区,分区的个数由后台终端输入决定,每个硬盘分区信息包括卷名、文件系统类型、容量等。

(3)文件或文件夹的添加:

即创建某个分区的孩子结点信息(文件(夹)),孩子结点的数目由控制台端给出,信息包括文件(夹)名,文件(夹)大小,所有文件(夹)的文件名此处不能重复。

创建好的文件夹中还能创建其孩子结点信息(文件(夹))。

(4)文件或文件夹信息的修改:

可以修改某一文件或文件夹的信息,包括名字和大小。

(5)文件或文件夹的查询:

查询某一文件或文件夹的具体路径。

(从我的电脑开始)

(6)文件或文件夹的删除:

删除此文件,如果是文件夹,若其有后代,将删除其所有后代成员(文件或文件夹)。

三、课题设计的基本思想,原理和算法描述

首先,设计的电脑存储结构是一个非线性结构,因此不能用线性结构来做,要用树或是图。

而,文件与文件之间的关系是一对多,所以,用树结构来描述。

在确定了使用树结构之后,接着就是设计函数以及函数的各功能的实现了。

然后,基本思路为:

1、总程序包含了三个部分,有头文件,各个功能函数和主函数。

头文件包含的是函数的外部声明,结构体的定义,以及符号常量的定义。

各个功能函数就是通过设计代码,实现程序所需的各个功能的实现。

主函数用于设计显示界面和调用各个功能函数。

接着,根据题目要求可知,需要实现的功能函数包括创建结点函数,查找函数,添加函数,修改函数和删除函数。

设计的流程图:

程序中包含的各个功能函数的流程:

首先是初始化函数:

接着的是格式化函数:

文件的添加函数:

添加函数的开始部分需要判断flat是否等于1;来判断是否已经格式化。

然后:

文件的修改流程:

文件的查询流程:

 

四、运行示例及结果分析

图1将硬盘进行初始化

图2将硬盘进行格式化,分成了两个区c和d.

图3在c区内添加文件夹1和2.

图4查询硬盘中的文件,并且输出它的路径

图5修改文件名以及文件的容量

图6再次查询是否修改成功

图7通过删除操作删除了文件夹1,仍可点击查询文件夹2

五、调试和运行程序过程中产生的问题及采取的措施

1、在进行编写输出路径函数的时候,最初的程序中添加了指针parent,但是这样编写起来觉得很复杂了,于是取消了这个指针,这时没办法找到双亲结点,Path功能无法实现,查找资料,得到了path函数。

首先通过判断被查询结点的层数,然后利用for循环中,从该层开始赋值到一个一维数组中,然后利用FindMother函数找到双亲结点,继续赋值给这个一维数组。

最后,再通过for循环将数组反向输出,则可得到路径的输出。

2、由于每次运行一项选择之后,初始界面总是会再次的出现一遍,导致运行窗口显得杂乱,通过查询网上资料,得知使用头文件,可以使用system(“cls”);来进行清屏处理,显得整洁了不少,同时利用system(“pause”);也有效的使得在清屏前运行程序得到缓冲,不会一下子就进行清屏,让人反应不及。

3、运行调试的时候经常会出现如下图的情况,这时候重新查看代码,一点点的修改,尤其是把一些有可能错误的代码先注释掉,然后换一种表达方式进行调试。

这样能更好的快速找到错误的语句在哪里。

六、总结

这四天左右的课程设计可以说让我学到很多东西,而且也让我在实际操作中掌握了更多的课程知识。

感觉用一两句真的是不能概括总结的。

这已经是第二次的计算机课程设计了,同样是c语言的运用,大一时候的c语言还处于基础的阶段,现在这学期又学了不少的运用c语言编程的知识,包括链表,栈的建立,队列的使用,二叉树,图的编写等等,写程序能力进一步提高了些,但还是遇到了不少的问题。

题目是电脑存储结构的设计与实现,是利用树来实现的,如果利用二叉树来做,显然这样每个文件夹里只能够添加两个文件,不合理,于是我采用了的是孩子兄弟链来实现程序的主体结构。

同时在程序的初始阶段我也特别注意了在结构体中,添加了每个结点的所代表的文件或是文件夹的类型的判断,这样在每次添加新的结点的时候都可以判断是否为文件夹,是否可以继续添加结点,然而随着对于查询某一个结点的函数的编写,添加判断文件的类型,加大了难度,我只能舍弃了对于文件类型的判断,这算是整个程序的最大的缺陷了。

不过,在编写别的函数的时候,也有很多的收获,比如对于递归函数的调用,好几个函数都是通过递归来实现的,这也大大加深了我对于递归调用的理解。

尤其是查找双亲结点的递归调用,通过查找资料得到之后,理解后豁然开朗。

在我看来,读懂递归程序不是难事,而递归调用的编写则是一大挑战,我在今后的学习中,要多多注意在这方面锻炼自己的编写能力。

另外,在编写程序的时候的一大感受是千万不能够浮躁,看到别人编写完程序交作业,自己的心里就开始慌了,是不是做的不够好,怎么他这么快就完成了呢,这个一大忌。

这种情况不要急躁,定下心来,钻研好自己的题目,把自己的做好,知道了与别人的差距就好,自己再继续努力就行。

总之,我要努力,继续保持自己的信心,改进自己的不足,在这学期学习的基础和经验上,在下学期把知识好好领悟透彻,争取在以后的课程设计中有更大的进步!

七、参考文献

[1]李建学等著.《数据结构课程设计案例精编》清华大学出版社(2007)

[2]唐宁九等主编《数据结构与算法(C++版)》实验和课程设计教程.清华大学出版社,(2008)

[3]谭浩强等编著《C语言教程》清华大学出版社(2009年)

 

程序如下:

#include

#include

#include

#defineMAX30

typedefstructData

{

charname[MAX];

chartype[MAX];

intvol;

}ElemType;

typedefstructtnode

{

ElemTypedata;

ElemTypedate[MAX];

structtnode*child;

structtnode*brother;

}TreeNode;

intflat=0;

voidDisplay(TreeNode*q)

{

printf("文件(夹)名:

%s\n",q->data.name);

printf("容量:

%d\n",q->data.vol);

}

intGeneration(TreeNode*t,TreeNode*q)

{

if(t==NULL)

return0;

else

{

if(strcmp(t->data.name,q->data.name)==0)

return1;

else

{

if(Generation(t->brother,q)!

=0)

returnGeneration(t->brother,q);

else

{

if(Generation(t->child,q)!

=0)

return(Generation(t->child,q)+1);

else

return0;

}

}

}

}

TreeNode*FindMother(TreeNode*t,TreeNode*q)

{

TreeNode*p;

if(t!

=NULL)

{

p=t->child;

while(p!

=NULL)

{

if(p==q)returnt;

p=p->brother;

}

p=FindMother(t->child,q);

if(p!

=NULL)

returnp;

else

returnFindMother(t->brother,q);

}

returnNULL;

}

TreeNode*FindNode(TreeNode*t,charname[])

{

TreeNode*p;

if(t==NULL)

returnNULL;

elseif(strcmp(t->data.name,name)==0)

returnt;

else

{

p=FindNode(t->child,name);

if(p!

=NULL)

returnp;

else

returnFindNode(t->brother,name);

}

}

voidPath(TreeNode*t,TreeNode*q)

{

TreeNode*m;

m=q;

if(Generation(t,q)==0)

printf("无路径!

");

else

{

intj;

j=Generation(t,q);

for(inti=1;i

{

strcpy(t->date[i].name,FindMother(t,q)->data.name);

q=FindMother(t,q);

}

printf("该文件(夹)路径为:

");

for(i=j-1;i>=1;i--)

{

printf("%s-->",t->date[i].name);

}

printf("%s\n",m->data.name);

}

}

voidCreate(TreeNode*&t)

{

t=NULL;

t=(TreeNode*)malloc(sizeof(TreeNode));

if(flat==1)

printf("已经格式化了!

\n");

else

{

printf("请输入主盘的名字:

\n");

scanf("%s",&t->data.name);

t->child=t->brother=NULL;

printf("硬盘初始化成功!

\n");

}

system("pause");

system("cls");

}

voidCleNode(TreeNode*&t)

{

TreeNode*p[MAX],*q;

intchildnum;

charname1[MAX];

charname[MAX];

if(flat==1)

printf("已经格式化了!

\n");

else

{

printf("请输入主盘的名字:

\n");

scanf("%s",&name1);

q=FindNode(t,name1);

while(q==NULL)

{

printf("不存在此盘,请重新输入:

");

scanf("%s",&name);

q=FindNode(t,name);

}

printf("请输入分区的数目:

");

scanf("%d",&childnum);

for(inti=1;i<=childnum;i++)

{

p[i]=(TreeNode*)malloc(sizeof(TreeNode));

p[i]->child

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1