收藏 分销(赏)

毕业论文-脑电存储结构设计与实现课程设计报告.doc

上传人:可**** 文档编号:2798648 上传时间:2024-06-06 格式:DOC 页数:21 大小:617KB
下载 相关 举报
毕业论文-脑电存储结构设计与实现课程设计报告.doc_第1页
第1页 / 共21页
毕业论文-脑电存储结构设计与实现课程设计报告.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述
《数据结构》 课程设计报告 课题名称:电脑存储结构设计与实现 一、课题名称 电脑存储结构的设计与实现 二、主要内容 电脑存储结构设计与实现主要是模拟“我的电脑”中硬盘信息的建立、查找、插入、修改、删除等功能。可。基本功能如下: (1)硬盘初始化信息:我的电脑(根结点)。 (2)硬盘格式化:为我的电脑分区,分区的个数由后台终端输入决定,每个硬盘分区信息包括卷名、文件系统类型、容量等。 (3)文件或文件夹的添加:即创建某个分区的孩子结点信息(文件(夹)),孩子结点的数目由控制台端给出,信息包括文件(夹)名,文件(夹)大小,所有文件(夹)的文件名此处不能重复。 创建好的文件夹中还能创建其孩子结点信息(文件(夹))。 (4)文件或文件夹信息的修改:可以修改某一文件或文件夹的信息,包括名字和大小。 (5)文件或文件夹的查询:查询某一文件或文件夹的具体路径。(从我的电脑开始) (6)文件或文件夹的删除:删除此文件,如果是文件夹,若其有后代,将删除其所有后代成员(文件或文件夹)。 三、课题设计的基本思想,原理和算法描述 首先,设计的电脑存储结构是一个非线性结构,因此不能用线性结构来做,要用树或是图。而,文件与文件之间的关系是一对多,所以,用树结构来描述。 在确定了使用树结构之后,接着就是设计函数以及函数的各功能的实现了。 然后,基本思路为:1、总程序包含了三个部分,有头文件,各个功能函数和主函数。头文件包含的是函数的外部声明,结构体的定义,以及符号常量的定义。各个功能函数就是通过设计代码,实现程序所需的各个功能的实现。主函数用于设计显示界面和调用各个功能函数。 接着,根据题目要求可知,需要实现的功能函数包括创建结点函数,查找函数,添加函数,修改函数和删除函数。 设计的流程图: 登陆界面 初始化我的电脑 格式化我的电脑 添加文件,查询文件路径,删除文件等操作 退出程序 程序中包含的各个功能函数的流程: 首先是初始化函数: 赋予初始化空间 输入初始化的主盘的名字 初始化成功 接着的是格式化函数: 输入需要添加的主盘名 判断是否存在该主盘 存在 输入分盘的数目以及名称等(for循环) 不存在 格式化成功! 文件的添加函数: 添加函数的开始部分需要判断flat是否等于1;来判断是否已经格式化。然后: 输入需要添加的文件的文件夹 判断是否已存在 存在 不存在 通过for循环,输入添加的各个文件信息 添加成功! 文件的修改流程: 输入需要修改的文件夹名 判断是否存在该文件夹 存在 不存在 输入修改后的文件夹名 修改成功! 文件的查询流程: 输入需要查询的文件夹 判断是否存在该文件夹 存在 不存在 输出所查询的文件信息与路径 四、运行示例及结果分析 图1 将硬盘进行初始化 图2 将硬盘进行格式化,分成了两个区c和d. 图3 在c区内添加文件夹1和2. 图4 查询硬盘中的文件,并且输出它的路径 图5 修改文件名以及文件的容量 图6 再次查询是否修改成功 图7 通过删除操作删除了文件夹1,仍可点击查询文件夹2 五、调试和运行程序过程中产生的问题及采取的措施 1、在进行编写输出路径函数的时候,最初的程序中添加了指针parent,但是这样编写起来觉得很复杂了,于是取消了这个指针,这时没办法找到双亲结点,Path功能无法实现,查找资料,得到了path函数。首先通过判断被查询结点的层数,然后利用for 循环中,从该层开始赋值到一个一维数组中,然后利用FindMother函数找到双亲结点,继续赋值给这个一维数组。最后,再通过for 循环将数组反向输出,则可得到路径的输出。 2、由于每次运行一项选择之后,初始界面总是会再次的出现一遍,导致运行窗口显得杂乱,通过查询网上资料,得知使用头文件<stdlib.h>,可以使用system(“cls”);来进行清屏处理,显得整洁了不少,同时利用system(“pause”);也有效的使得在清屏前运行程序得到缓冲,不会一下子就进行清屏,让人反应不及。 3、运行调试的时候经常会出现如下图的情况,这时候重新查看代码,一点点的修改,尤其是把一些有可能错误的代码先注释掉,然后换一种表达方式进行调试。这样能更好的快速找到错误的语句在哪里。 六、总结 这四天左右的课程设计可以说让我学到很多东西,而且也让我在实际操作中掌握了更多的课程知识。感觉用一两句真的是不能概括总结的。 这已经是第二次的计算机课程设计了,同样是c语言的运用,大一时候的c语言还处于基础的阶段,现在这学期又学了不少的运用c语言编程的知识,包括链表,栈的建立,队列的使用,二叉树,图的编写等等,写程序能力进一步提高了些,但还是遇到了不少的问题。 题目是电脑存储结构的设计与实现,是利用树来实现的,如果利用二叉树来做,显然这样每个文件夹里只能够添加两个文件,不合理,于是我采用了的是孩子兄弟链来实现程序的主体结构。同时在程序的初始阶段我也特别注意了在结构体中,添加了每个结点的所代表的文件或是文件夹的类型的判断,这样在每次添加新的结点的时候都可以判断是否为文件夹,是否可以继续添加结点,然而随着对于查询某一个结点的函数的编写,添加判断文件的类型,加大了难度,我只能舍弃了对于文件类型的判断,这算是整个程序的最大的缺陷了。。 不过,在编写别的函数的时候,也有很多的收获,比如对于递归函数的调用,好几个函数都是通过递归来实现的,这也大大加深了我对于递归调用的理解。尤其是查找双亲结点的递归调用,通过查找资料得到之后,理解后豁然开朗。在我看来,读懂递归程序不是难事,而递归调用的编写则是一大挑战,我在今后的学习中,要多多注意在这方面锻炼自己的编写能力。 另外,在编写程序的时候的一大感受是千万不能够浮躁,看到别人编写完程序交作业,自己的心里就开始慌了,是不是做的不够好,怎么他这么快就完成了呢,这个一大忌。这种情况不要急躁,定下心来,钻研好自己的题目,把自己的做好,知道了与别人的差距就好,自己再继续努力就行。 总之,我要努力,继续保持自己的信心,改进自己的不足,在这学期学习的基础和经验上,在下学期把知识好好领悟透彻,争取在以后的课程设计中有更大的进步! 七、参考文献 [1] 李建学等著.《数据结构课程设计案例精编》清华大学出版社(2007) [2] 唐宁九等主编《数据结构与算法(C++版)》实验和课程设计教程. 清华大学出版社,(2008) [3]谭浩强等编著 《 C语言教程 》清华大学出版社 (2009年) 程序如下: #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 30 typedef struct Data { char name[MAX]; char type[MAX]; int vol; }ElemType; typedef struct tnode { ElemType data; ElemType date[MAX]; struct tnode *child; struct tnode *brother; }TreeNode; int flat=0; void Display(TreeNode *q) { printf("文件(夹)名:%s\n",q->data.name); printf("容量:%d\n",q->data.vol); } int Generation(TreeNode *t,TreeNode *q) { if(t==NULL) return 0; else { if(strcmp(t->data.name,q->data.name)==0) return 1; else { if(Generation(t->brother,q)!=0) return Generation(t->brother,q); else { if(Generation(t->child,q)!=0) return (Generation(t->child,q)+1); else return 0; } } } } TreeNode *FindMother(TreeNode *t,TreeNode *q) { TreeNode *p; if(t!=NULL) { p=t->child; while (p!=NULL) { if (p==q) return t; p=p->brother; } p=FindMother(t->child,q); if(p!=NULL) return p; else return FindMother(t->brother,q); } return NULL; } TreeNode *FindNode(TreeNode *t,char name[]) { TreeNode *p; if(t==NULL) return NULL; else if(strcmp(t->data.name,name)==0) return t; else { p=FindNode(t->child,name); if(p!=NULL) return p; else return FindNode(t->brother,name); } } void Path(TreeNode *t,TreeNode *q) { TreeNode *m; m=q; if(Generation(t,q)==0) printf("无路径!"); else { int j; j=Generation(t,q); for(int i=1;i<j;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); } } void Create(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"); } void CleNode(TreeNode *&t) { TreeNode *p[MAX],*q; int childnum; char name1[MAX]; char name[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(int i=1;i<=childnum;i++) { p[i]=(TreeNode *)malloc(sizeof(TreeNode)); p[i]->child=p[i]->brother=NULL; printf("请输入第%d个分区的信息:\n",i); printf("卷名:"); scanf("%s",&p[i]->data.name); printf("容量:"); scanf("%d",&p[i]->data.vol); printf("类型:"); scanf("%s",&p[i]->data.type); if(i==1) q->child=p[i]; else p[i-1]->brother=p[i]; } flat=1; printf("硬盘格式化成功!\n"); } system("pause"); system("cls"); } void Add(TreeNode *&t) { TreeNode *p[MAX],*q; int childnum; char name[MAX]; if(flat==0) printf("\t对不起,电脑硬盘还未格式化!\n\n\n"); else { printf("请输入需要添加到分区或文件夹的名称:"); scanf("%s",&name); q=FindNode(t,name); while(q==NULL) { printf("不存在此文件,请重新输入:"); scanf("%s",&name); q=FindNode(t,name); } printf("请输入文件或文件夹的数目:"); scanf("%d",&childnum); for(int i=1;i<=childnum;i++) { p[i]=(TreeNode *)malloc(sizeof(TreeNode)); p[i]->child=p[i]->brother=NULL; printf("请输入第%d个文件或文件夹的信息:\n",i); printf("名字:"); scanf("%s",&p[i]->data.name); printf("容量:"); scanf("%d",&p[i]->data.vol); printf("类型:"); scanf("%s",&p[i]->data.type); if(i==1) q->child=p[i]; else p[i-1]->brother=p[i]; } } system("pause"); system("cls"); } void change(TreeNode *t) { if(flat==0) printf("硬盘还未进行格式化!\n"); else { TreeNode *q; char name[MAX]; printf("请输入需要修改文件(夹)名:"); scanf("%s",&name); q=FindNode(t,name); while(q==NULL) { printf("不存在此文件(夹),请重新输入:"); scanf("%s",&name); q=FindNode(t,name); } printf("请输入修改后的文件(夹)名为:"); scanf("%s",&q->data.name); printf("请输入修改后的容量:"); scanf("%d",&q->data.vol); } system("pause"); system("cls"); } void search(TreeNode *t) { if(flat==0) printf("硬盘还未进行格式化!\n"); else { TreeNode *q; char name[MAX]; printf("请输入你要查询的文件(夹)名:"); scanf("%s",&name); q=FindNode(t,name); while(q==NULL) { printf("不存在此文件(夹),请重新输入:"); scanf("%s",&name); q=FindNode(t,name); } printf("你要查询的文件(夹)的信息为:\n"); Display(q); printf("你要查询的文件(夹)的路径为:\n"); Path(t,q); } system("pause"); system("cls"); } TreeNode * TreeFront(TreeNode *&t,char *name) { if(t->brother!=NULL&&t->child==NULL) { if(strcmp(t->brother->data.name,name)) return TreeFront(t->brother,name); else return t; } if(t->child!=NULL&&t->brother==NULL) { if(strcmp(t->child->data.name,name)) return TreeFront(t->child,name); else return t; } if(t->child!=NULL&&t->brother!=NULL) { if(strcmp(t->child->data.name,name)==0||strcmp(t->brother->data.name,name)==0) { return t; } else { if(TreeFront(t->brother,name)==NULL) return TreeFront(t->child,name); else return TreeFront(t->brother,name); } } if(t->brother==NULL&&t->child==NULL) return NULL; } void DelTreeNode(TreeNode *t) { if(t->brother==NULL&&t->child==NULL) { free(t); } else { if(t->brother!=NULL) { DelTreeNode(t->brother); } if(t->child!=NULL) { DelTreeNode(t->child); } } } void Delete(TreeNode *t) { if(flat==0) printf("\t对不起,电脑硬盘还未格式化!\n\n\n"); else { char name[12]; printf("\t请输入您要删除的文件(夹)名称:"); scanf("%s",name); TreeNode *p=FindNode(t,name); if(p==NULL) printf("\t该文件夹里无此文件(夹)!\n\n"); else { if(p==t) { flat=0; if(p->child!=NULL) DelTreeNode(p->child); } else { TreeNode *q=TreeFront(t,name); if(p->brother==NULL) { if(q->child==p) { q->child=NULL; if(p->child!=NULL) DelTreeNode(p->child); free(p); } else { q->brother=NULL; if(p->child!=NULL) DelTreeNode(p->child); free(p); } } else { if(q->child==p) { q->child=p->brother; if(p->child!=NULL) DelTreeNode(p->child); free(p); } else { q->brother=p->brother; if(p->child!=NULL) DelTreeNode(p->child); free(p); } } printf("\t该文件夹信息已删除!\n\n\n"); } } system("pause"); system("cls"); } } void main() { TreeNode *t; int n; while(1) { printf(" 电脑存储结构设计与实现 \n"); printf("*****************************************************************\n"); printf(" 1.硬盘初始化信息\n"); printf(" 2.硬盘格式化\n"); printf(" 3.文件或文件夹的添加\n"); printf(" 4.文件或文件夹信息的修改\n"); printf(" 5.文件或文件夹的查询\n"); printf(" 6.文件或文件夹的删除\n"); printf(" 0.退出\n"); printf("*****************************************************************\n"); printf("\n请选择功能选项:"); scanf("%d",&n); switch(n) { case 1: Create(t);break; case 2: CleNode(t);break; case 3: Add(t);break; case 4: change(t);break; case 5: search(t);break; case 6: Delete(t);break; case 0: return;break; default:printf("输入无效!重新输入!\n"); } } } 21
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服