操作系统-文件系统课程设计报告(附源码)_第1页
操作系统-文件系统课程设计报告(附源码)_第2页
操作系统-文件系统课程设计报告(附源码)_第3页
操作系统-文件系统课程设计报告(附源码)_第4页
操作系统-文件系统课程设计报告(附源码)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计题目文件系统学院计算机学院专业计算机科学与技术年级班别10级7班学号3110006154学生姓名 指导教师刘老师20年月日文件系统课程设计的内容:模拟文件系统实现的根本功能,了解文件系统的根本结构和管理方法,加深理解文件系统的内部功能及内部实现。通过用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比拟深入的了解。二、可行性分析:可行性分析是通过对工程的主要内容和配套条件,并通过对各方面进行调查研究和分析比拟,并对工程建成以后所带来的影响,从而提出该工程是否值得投资和如何进行建设的咨询意见,是一种综合性的系统分析方法。可行性分析应具有预见性、公正性、可靠性、科学性的特点。这里以三个方面来分析此次设计:经济可行性、技术可行性、法律可行性。1、经济可行性:编写该文件系统,只需要用到PC机和VC++6.0编程软件,不需要花费金钱,所以,在经济方面,这个课程设计适合做。2、技术可行性:在做这个课程设计,事先需要掌握的知识有C/C++语言,数据结构,操作系统,PC机的根本操作和VC++6.0软件的使用方法等。目前,这些知识都已经学习并掌握了,所以在技术方面,这个课程设计也适合做。3、法律可行性:做这个课程设计,只是为了掌握文件系统的根本内容,提升自己的编程能力,没有违反法律法规,所以,在法律方面,这个课程设计也适合做。三、需求分析1.设计一个多用户多级目录文件管理系统。2.要设计多个实用命令并设置文件保护措施。3.设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入冗长的命令4.功能简介:①多用户管理,多级目录形式。②根本的文件操作功能,如新建文件、翻开文件、写入文件、关闭文件、读取文件等。③用户间文件的共享功能四、概要设计(逻辑图)系统结构图:开始开始新用户注册读入文件新用户注册读入文件用户登录用户登录用户不存在MFD中找到该用户?用户不存在MFD中找到该用户?显示该用户目录下的所有文件管理信息显示该用户目录下的所有文件管理信息输入操作命令输入操作命令是什么命令?是什么命令?删除文件创立文件删除文件创立文件复制文件写出文件显示目录共享文件平安退出查找文件关闭文件翻开文件复制文件写出文件显示目录共享文件平安退出查找文件关闭文件翻开文件自动保存目录自动保存目录结束结束2、界面简单说明该系统主要分为两个界面,用户操作界面及文件操作管理界面。用户操作界面可进行创立用户、删除用户、登陆用户、查看用户等操作,登陆用户后将进入文件操作管理界面,可以对文件〔夹〕进行简单的操作,包括:创立、删除、翻开、读出、写入、关闭、修改、共享等操作,根据用户命令执行不同功能。五.详细的设计〔重要函数、数据结构乃其详细说明〕1、设计方案数据结构:structfcb{ charfcbname[10];//文件名 inttype;//文件类型,0为文件,1为文件夹 intlength;//文件长度 intprotect;//保护码,0为只读,1为可读写 intflag;//文件状态,0为关闭状态,1为翻开状态 char*content;//文件内容 intshare;//文件共享状态,0为不共享状态,1为共享状态 structfcb*parent; structfcb*child; structfcb*next; structjiedian*jdparent;//指向该文件的索引结点 structjiedian*jdnext;//用来链接共享索引结点};structuser{charusername[10];//用户名FCB*fcb;//该用户下的目录文件 structuser*parent;structuser*next;};structjiedian//索引结点,可为文件共享所使用{charfilename[10];//索引结点所指的文件名称 charrename[10];FCB*fcb;//索引结点指向的文件 intshare;//0表示该结点没有共享,1表示共享 structjiedian*sharenext;//链接共享索引结点 structjiedian*front;structjiedian*next;};主要的函数说明:createfile—在用户当前目录下创立一个文件〔夹〕,该文件的管理信息登录到用户文件信息管理模块中。deletefile—删除当前用户当前目录下的一个文件〔夹〕。openfile—在当前用户目录翻开某个文件并修改标志位,对文件读、写操作都需先翻开。closefile—关闭用户翻开的文件。执行该命令后,用户在系统中运行文件状态位被修改为关闭。readfile—从用户已翻开文件读信息,将文件内容读出,未翻开文件无法读取。writefile-向用户已翻开文件写入信息,未翻开文件无法写入操作。share-共享文件,文件共享后各用户可以对共享文件进行访问。file_menu-用户当前目录文件列表显示。search-在所有用户中查找所需要的文件back-返回上一级目录quit用户注销命令。当使用该命令时,用户退出系统。copyfile-在当前目录下,复制一个文件或文件夹rename-对一个文件或文件夹进行重命名源代码〔局部〕:voidcreatefile(FCB*f,intflag)//新建文件(夹){FCB*temp; FCB*p=f->child;FCB*q; JD*jdtemp,*jdp;temp=get(FCB); q=f->child; if(flag==0){printf("\t\t\t************\n"); printf("\t\t\t*新建文件*\n"); printf("\t\t\t************\n");printf("请输入文件名:");//输入文件名 scanf("%s",temp->fcbname); while(q!=NULL) { if(strcmp(temp->fcbname,q->fcbname)==0&&(q->type==flag)) { printf("该目录下已有该名字的文件,请重新输入。"); scanf("%s",temp->fcbname); q=f->child; } q=q->next; } } else { printf("\t\t\t**************\n"); printf("\t\t\t*新建文件夹*\n"); printf("\t\t\t**************\n");printf("请输入文件夹名:");//输入文件〔夹〕名 scanf("%s",temp->fcbname); while(q!=NULL) { if(strcmp(temp->fcbname,q->fcbname)==0&&(q->type==flag)) { printf("该目录下已有该名字的文件,请重新输入。"); scanf("%s",temp->fcbname); q=f->child; } q=q->next; } } temp->content=NULL; printf("\n\t文件属性:0、只读\t1、可写");//设置保护模式 printf("\n请选择:"); scanf("%d",&temp->protect); while(temp->protect!=0&&temp->protect!=1) { printf("输入错误,请重新输入。"); scanf("%d",&temp->protect); } if(flag==0) { printf("该文件的长度为:");//设置文件大小 scanf("%d",&temp->length); }if(flag==0) temp->type=0;//0为文件 elsetemp->type=1;//1为文件夹 temp->flag=0;//文件默认为关闭状态,以后需要时再翻开 temp->share=0;//文件默认为不共享状态 temp->child=NULL; temp->next=NULL; temp->jdnext=NULL; temp->parent=currentfcb; if(p==NULL)//该目录下还没有文件〔夹〕{f->child=temp;} else{ while(p->next!=NULL) {p=p->next;} p->next=temp; } jdtemp=get(JD);//建立该文件〔夹〕的索引结点 temp->jdparent=jdtemp; strcpy(jdtemp->filename,temp->fcbname);//取相同的文件名 jdtemp->fcb=temp; jdtemp->share=0;//索引结点默认不共享 jdtemp->sharenext=NULL; jdtemp->next=NULL; if(head==NULL) { head=jdtemp; head->front=NULL; } else { jdp=head; while(jdp->next!=NULL) jdp=jdp->next; jdp->next=jdtemp; jdtemp->front=jdp; }getchar(); file_menu();}voidopenfile(FCB*f,intflag)//翻开文件(夹){ charn[10]; intflag1=0; FCB*p=f->child; if(flag==0) { printf("\t\t\t**************\n"); printf("\t\t\t*翻开文件*\n"); printf("\t\t\t**************\n");printf("请输入文件名:"); } else { printf("\t\t\t**************\n"); printf("\t\t\t*翻开文件夹*\n"); printf("\t\t\t**************\n");printf("请输入文件夹名:"); } scanf("%s",n); if(f->jdnext!=NULL) { JD*j=f->jdnext; while(j!=NULL) { if(j->share==1) if(strcmp(j->rename,n)==0)//找到要翻开的共享文件 { if(j->share==1) { j->fcb->flag=1; printf("文件%s成功翻开。\n",n); flag1=1; } else printf("共享文件不存在,请确认文件没有被删除。\n",n); getchar(); break; } j=j->sharenext; } }while(p!=NULL&&flag1==0) { if((strcmp(p->fcbname,n)==0)&&(p->type==flag))//找到要翻开的文件〔夹〕 { if(p->type==0) { p->flag=1; printf("文件%s成功翻开。\n",n); getchar(); break; } else { p->flag=1; currentfcb=p; printf("文件夹%s已经翻开。\n",n); break; } }p=p->next; } if(p==NULL&&flag1==0) { if(flag=1) printf("该文件夹不存在。\n"); else printf("该文件不存在。\n"); getchar(); } getchar(); file_menu();}voidsearch(intflag)//查找文件〔夹〕{ charn[10],filename[10][10]; inti,flag1=0; JD*p=head; FCB*q; if(flag==0) { printf("\t\t\t**************\n"); printf("\t\t\t*查找文件*\n"); printf("\t\t\t**************\n");printf("请输入文件名:"); } else { printf("\t\t\t**************\n"); printf("\t\t\t*查找文件夹*\n"); printf("\t\t\t**************\n");printf("请输入文件夹名:"); } scanf("%s",n);while(p!=NULL) { if((strcmp(p->filename,n)==0)&&(p->fcb->type==flag))//找到对应的文件〔夹〕 { q=p->fcb; for(i=0;q!=NULL;i++,q=q->parent) strcpy(filename[i],q->fcbname); if(flag==0) printf("\n文件%s所在的位置是:",p->fcb->fcbname); else printf("\n文件夹%s所在的位置是:",p->fcb->fcbname); for(i=i-1;i>=0;i--)//显示文件路径 printf("%s/",filename[i]); printf("\n"); flag1=1; }p=p->next; } printf("\n查找结束。\n",n); if(flag1==0) { if(flag==0) printf("该文件不存在。\n"); else printf("该文件夹不存在。\n"); } getchar(); getchar(); file_menu();}voidshare()//共享文件{ charn[10]; FCB*p=currentfcb->child; printf("\t\t\t************\n"); printf("\t\t\t*共享文件*\n"); printf("\t\t\t************\n");printf("请输入文件名:"); scanf("%s",n);while(p!=NULL) { if((strcmp(p->fcbname,n)==0)&&(p->type==0))//找到要共享的文件 { USER*q=user; JD*j; p->share=1; p->jdparent->share=1; strcpy(p->jdparent->rename,p->jdparent->filename); while(q!=NULL)//共享索引结点 { if(q!=currentuser) { j=q->fcb->jdnext; if(j==NULL) { q->fcb->jdnext=p->jdparent; p->jdparent->sharenext=NULL; }else { while(j->sharenext!=NULL) j=j->sharenext; j->sharenext=p->jdparent; p->jdparent->sharenext=NULL; } } q=q->next; } printf("文件%s已经共享。\n",n); break; }p=p->next; } if(p==NULL) { printf("该文件不存在。\n"); } getchar(); getchar(); file_menu();//返回文件管理操作菜单}voidcancleshare()//撤消共享文件{ charn[10]; FCB*p=currentfcb->child; printf("\t\t\t****************\n"); printf("\t\t\t*撤消共享文件*\n"); printf("\t\t\t****************\n");printf("请输入文件名:"); scanf("%s",n);while(p!=NULL) { if((strcmp(p->fcbname,n)==0)&&(p->type==0))//找到要撤消共享的文件 { p->share=0; p->jdparent->share=0; printf("撤消共享成功。\n",n); break; }p=p->next; } if(p==NULL) { printf("该共享文件不存在。\n"); } getchar(); getchar(); file_menu();//返回文件管理操作菜单}voidrename(FCB*f,intflag)//重命名文件〔夹〕{ charn[10],temp[10]={0}; FCB*p=f->child; intflag1=0; if(flag==0) { printf("\t\t\t**************\n"); printf("\t\t\t*重命名文件*\n"); printf("\t\t\t**************\n");printf("请输入文件名:"); } else { printf("\t\t\t**************\n"); printf("\t\t\t*重命名文件夹*\n"); printf("\t\t\t**************\n");printf("请输入文件夹名:"); } scanf("%s",n); if(f->jdnext!=NULL) { JD*j=currentfcb->jdnext; while(j!=NULL) { if(j->share==1) if(strcmp(j->rename,n)==0&&flag==0)//找到要重命名的共享文件 { if(j->share==1) { printf("\n请输入新文件名:"); scanf("%s",n); strcpy(j->rename,temp); strcpy(j->rename,n); printf("\n重命名成功。\n"); flag1=1; break; } getchar(); break; } j=j->sharenext; } }while(p!=NULL&&flag1==0) { if((strcmp(p->fcbname,n)==0)&&p->type==flag)//找到要重命名的文件〔夹〕 { if(flag==0) printf("\n请输入新文件名:"); else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论