文件目录管理与显示

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

文件目录管理与显示学号:118532010042专业:10计算机科学与技术姓名:陈德本时间:2012.05.051、题目的内容和要求给出目录和文件信息,要求编程实现将其排列成一棵有一定缩进的树。(1)设计文件和目录信息树的存储结构。(2)从文件或键盘输入目录和文件信息,输入格式采用绝对路径法,即:\A\A\AA1\A\AA1\aa1.doc…创建时要检查同一路径下不能有同名的目录或文件名。(3)设计文件和目录信息树的输出格式(以凹入表的形式显示)。(4)查找指定目录和文件。(5)添加新目录或新文件。(6)删除指定目录或文件,子目录能够被删除的前提是其为空,既不包含任何子目录和文件;根目录不能删除。(7)扩充目录或文件信息,如创建时间、读写权限、文件长度或子目录包含的子目录和文件数等。(8)对同一层次下的子目录或文件按创建时间有序输出。选做内容:(1)如何实现相对路径表示法。(2)通配符的使用。如用“?”代表任意一个字符,用“*”表示任意多个多个任意字符。2、设计2.1设计思想(1)数据结构设计:本体由于要对文件目录的处理,在一个文件中可以存放多个文件,所以用树,并且用孩子兄弟表示法,表示该树。(2)算法设计:当在该目录下添加,查找,删除子目录时,相当于在该目录下对其孩子结点的处理,根据树建立和结点的孩子兄弟结点的处理来实现。2.2设计表示设计结构体:typedefstructinfo{intflag;intcf;charname[20];charfiletype[10];creat_timetime;structinfo*parent,*firstchild,*brother;intn;intcenci;intsize;}info;文件创建时间信息结构:typedefstructcreat_time{intyear;intmonth;intdate;}creat_time;1、创建根目录S1.申请结点,输入基本信息;S2.所有指针置空;2、结点创建S1.判断所给结点是否为目录。不是,则给出失败信息;if(p-cf){printf(Can'taddthefileinfile!\n);return;}S2.查看是否在同一层有重名,若有,给出失败信息;if(p-firstchild)w=Compare(q-name,p-firstchild);if(w){if(strcmp(q-filetype,w-filetype))printf(exist,can'tadd\n);S3.申请结点,完善基本信息;printf(0.menu\t1.file\n);scanf(%d,&q-cf);printf(Inputthename:);scanf(%s,q-name);getchar();if(q-cf){printf(Inputthefiletype:);scanf(%s,q-filetype);printf(Inputthesize:);scanf(%d,&q-size);getchar();}S4.结点父指针指向母目录;p-firstchildS5根据母目录确定是否为孩子或孩子兄弟成员,建立链接关系;if(!p-firstchild){p-firstchild=q;}else{p=p-firstchild;while(p-brother){p=p-brother;}p-brother=q;}printf(addsucess!\n);S6结点孩子指针及兄弟指针置空q-firstchild=NULL;q-brother=NULL;根据所给名称与同级存在的名称进行比较,定位到所需的结点;S1判断是否为根节点if(!p-parent){i=Strcmp(ch,p-name);if(i)returnp;returnNULL;}S2回到该层次的第一节点p=p-parent;p=p-firstchild;S3进行比较,找到及所在的位置,如不存在,则返回NULLwhile(p-brother){p=p-brother;if(Strcmp(p-name,ch))returnp;}returnNULL;根据绝对路径法提取目录名及文件名S1根据该层用户给出的结点名称,提取相应的字符段S2根据该段字符在层次内进行查找,定位到存在的结点,如不存在,给出失败的提示S3提取下一字符,返回到S2,直到字符为#结束while(d!='#'&&d!='.'){if(d=='\\'){c[i]='\0';scanf(%c,&d);i=0;p=Compare(c,p);if(!p){printf(xx路径错误1!\n);returnNULL;}p=p-firstchild;}c[i]=d;i++;scanf(%c,&d);}if(d=='.'){i=0;scanf(%c,&d);while(d!='#'){t[i]=d;i++;scanf(%c,&d);}t[i]='\0';}if(d=='#'){c[i]='\0';p=Compare(c,p);if(!p){printf(ccpatherror!\n);returnNULL;}if(t[0]!='\0'&&p-filetype[0]!='\0'){if(!Strcmp(p-filetype,t)){printf(ddpatherror!\n);returnNULL;}returnp;}elseif(t[0]=='\0'&&p-filetype[0]=='\0')returnp;}printf(eepatherror!\n);树形展开目录voidtraverser(Node*p){Node*q=p;if(!p)return;for(intj=0;jp-cengci;j++)printf();nodeshow(q);traverser(p-firstchild);traverser(p-brother);}展开目录下的所有信息voidunfold(info*p){NodeShow(p);printf(contains:\n);if(!p-firstchild){printf(Nodirectoryorfile\n);return;}p=p-firstchild;if(p){printf(\t);NodeShow(p);printf(\n);while(p-brother){p=p-brother;printf(\t);NodeShow(p);printf(\n);}}}删除目录或文件遍历目录,查找所需的文件或目录,删除文件。voidDELETE(info*p){info*q;q=p-parent;if(p-firstchild)Delete(p-firstchild);if(q-firstchild==p){q-firstchild=p-brother;free(p);}else{q=q-firstchild;while(q-brother!=p&&q-brother)q=q-brother;q-brother=p-brother;free(p);}}intDelete(info*p){if(p){Delete(p-brother);Delete(p-firstchild);free(p);}return0;}系统菜单显示charmenu(){chara;printf(|--------------------------------|\n);printf(|1.Addthecontentorfile|\n);printf(|2.Displaythecontent|\n);printf(|3.Unfoldthecontent|\n);printf(|4.Searchthecontentorfile|\n);printf(|5.Deletethecontentorfile|\n);printf(|0.Exit|\n);printf(|--------------------------------|\n);printf(Pleasechoose:);scanf(%c,&a);getchar();returna;}建立主函数,根据需要,输入自己的选择,完成相应的功能switch(choice){case'1':printf(Inputdirectorypath(endof'#'):);p=locate(root);if(!p)break;Creat(p);break;case'2':Traverser(root);break;case'3':printf(Inputdirectorypath(endof'#'):);p=locate(root);if(p)unfold(p);getchar();break;case'4':printf(Inputdirectoryroute(endof'#'):);p=locate(root);if(p){printf(Findit!\n);printf(Lookoverthecharacter(Y\\N)?);c=getche();printf(\n);if(c=='y'||c=='Y')Information(p);}getchar();break;case'5':printf(Inputdirectoryroute(endof'#'):);p=locate(root);if(p){if(p==root){printf(Rootcan'tbedelete!\n);getchar();break;}DELETE(p);}getchar();break;case'0':return;default:printf(“selecterror!”);}程序测试:1、主界面:2、增加目录及文件:3、显示4、展开显示目录5、查找6、删除C语言源代码:#includestdio.hintdate=0;typedefstructcreat_time{intyear;intmonth;intdate;}creat_time;typedefstructinfo{intflag;intcf;charname[20];charfiletype[10];creat_timetime;structinfo*parent,*firstchild,*brother;intn;intcenci;intsize;}info;voidNodeShow(info*q){if(q){printf(%s,q-name);if(q-cf)printf(.%s,q-filetype);}}info*Compare(char*ch,info*p){inti;if(!p)returnNULL;if(!p-parent){i=strcmp(ch,p-name);if(!i)returnp;returnNULL;}p=p-parent;p=p-firstchild;i=strcmp(ch,p-name);if(!i)returnp;else{while(p-brother){p=p-brother;if(!strcmp(ch,p-name))returnp;}returnNULL;}}voidunfold(info*p){NodeShow(p);printf(contains:\n);if(!p-firstchild){printf(Nodirectoryorfile\n);return;}p=p-firstchild;if(p){printf(\t);NodeShow(p);printf(\n);while(p-brother){p=p-brother;printf(\t);NodeShow(p);printf(\n);}}}voidCreat(info*p){info*q=NULL;info*w=NULL;if(p-cf){printf(Can'taddthefile!\n);return;}

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功