




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《数据结构》课程设计报告课题名称:电脑存储结构设计与实现
一、课题名称电脑存储结构的设计与实现二、主要内容电脑存储结构设计与实现主要是模拟“我的电脑”中硬盘信息的建立、查找、插入、修改、删除等功能。可。基本功能如下:(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>#defineMAX30typedefstructData{ charname[MAX]; chartype[MAX]; intvol;}ElemType;typedefstructtnode{ ElemTypedata;ElemTypedate[MAX];structtnode*child; structtnode*brother;}TreeNode;intflat=0;voidDisplay(TreeNode*q){ printf("文件(夹)名:%s\n",q->); printf("容量:%d\n",q->data.vol);}intGeneration(TreeNode*t,TreeNode*q){ if(t==NULL) return0; else { if(strcmp(t->,q->)==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->,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<j;i++) { strcpy(t->date[i].name,FindMother(t,q)->); q=FindMother(t,q); } printf("该文件(夹)路径为:"); for(i=j-1;i>=1;i--) { printf("%s-->",t->date[i].name); } printf("%s\n",m->); }}voidCreate(TreeNode*&t){ t=NULL;t=(TreeNode*)malloc(sizeof(TreeNode)); if(flat==1) printf("已经格式化了!\n"); else { printf("请输入主盘的名字:\n"); scanf("%s",&t->);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=p[i]->brother=NULL; printf("请输入第%d个分区的信息:\n",i); printf("卷名:"); scanf("%s",&p[i]->); 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");}voidAdd(TreeNode*&t){ TreeNode*p[MAX],*q; intchildnum; charname[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(inti=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]->); 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");}voidchange(TreeNode*t){ if(flat==0) printf("硬盘还未进行格式化!\n"); else { TreeNode*q; charname[MAX]; printf("请输入需要修改文件(夹)名:"); scanf("%s",&name);q=FindNode(t,name); while(q==NULL) { printf("不存在此文件(夹),请重新输入:"); scanf("%s",&name); q=FindNode(t,name); } printf("请输入修改后的文件(夹)名为:"); scanf("%s",&q->); printf("请输入修改后的容量:"); scanf("%d",&q->data.vol); } system("pause"); system("cls");}voidsearch(TreeNode*t){ if(flat==0) printf("硬盘还未进行格式化!\n"); else { TreeNode*q; charname[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->,name)) returnTreeFront(t->brother,name); else returnt; } if(t->child!=NULL&&t->brother==NULL) { if(strcmp(t->child->,name)) returnTreeFront(t->child,name); else returnt; } if(t->child!=NULL&&t->brother!=NULL) { if(strcmp(t->child->,name)==0||strcmp(t->brother->,name)==0) { returnt; } else { if(TreeFront(t->brother,name)==NULL) returnTreeFront(t->child,name); else returnTreeFront(t->brother,name); } } if(t->brother==NULL&&t->child==NULL) returnNULL;}voidDelTreeNode(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); } }}voidDelete(TreeNode*t){ if(flat==0) printf("\t对不起,电脑硬盘还未格式化!\n\n\n"); else { charname[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"); }}voidmain(){TreeNode*t;intn; 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) { case1: Create(t);break; case2:CleNode(t);break; case3:Add(t);break; case4:change(t);break; case5:search(t);break; case6:Delete(t);break; case0:return;break; default:printf("输入无效!重新输入!\n"); } }}基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究基于双单片机冲床数控系统的研究与开发基于Cygnal单片机的μC/OS-Ⅱ的研究基于单片机的一体化智能差示扫描量热仪系统研究基于TCP/IP协议的单片机与Internet互联的研究与实现变频调速液压电梯单片机控制器的研究基于单片机γ-免疫计数器自动换样功能的研究与实现基于单片机的倒立摆控制系统设计与实现单片机嵌入式以太网防盗报警系统基于51单片机的嵌入式Internet系统的设计与实现单片机监测系统在挤压机上的应用MSP430单片机在智能水表系统上的研究与应用基于单片机的嵌入式系统中TCP/IP协议栈的实现与应用单片机在高楼恒压供水
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 增强班级合作意识的工作措施计划
- 业务扩展策略计划
- 班主任的育人之路计划
- 一个数除以分数(教案)-六年级上册数学青岛版
- 制定班级年度工作计划的步骤
- 面向未来的保安工作提升计划
- 财务领域跨部门合作的工作安排计划
- 演唱会广播电视转播合同(2025年版)
- 测量不规则物体体积练习(教案)青岛版五年级下册数学
- 四年级下册数学教案-1.3 小数的意义(三)|北师大版
- DB11∕T 3010-2018 冷链物流冷库技术规范
- 农商银行客户经理工作总结
- 公司解散清算的法律意见书、债权处理法律意见书
- 马克思主义中国化的历史进程
- 仓储物流中心总体规划设计方案
- 生活垃圾焚烧电厂钢结构施工方案
- (必会)企业人力资源管理师(二级)近年考试真题题库(含答案解析)
- 2024年苏州农业职业技术学院单招职业适应性测试题库各版本
- 测速记载及流量计算表二
- 壳管式换热器设计说明书
- 颈椎病知识课件
评论
0/150
提交评论