一、概述课程设计目的、意义:课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。主要任务:模拟文件系统设计是设计和实现一个简单的文件系统。内容包括:1.建立文件存储介质的管理机制2.建立目录(采用一级目录结构)3.文件系统功能(显示目录、创建、删除、打开、关闭、读、写)4.文件操作接口(显示目录、创建、删除、打开、关闭、读、写)二、系统设计课程设计的系统设计:本系统模拟一个文件管理系统,要完成对文件的基本操作,文件的基本操作有文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。系统建立了文件目录树,存储文件系统中的所有文件。对于用户名下的文件,用文件目录树的分枝来存贮。采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作就行了。整体设计框架:系统初始化界面是由创建用户存储空间,管理文件,退出系统三个模块组成。用户创建由创建用户存储空间,进入目录,删除用户存储空间,显示所有用户存储空间,等模块组成。然后各个模块再由一些小模块组成。其中创建文件,打开关闭文件,读写文件等文件操作模块包括在进入目录模块里面。三、系统实现课程设计主要内容的实现程序代码:#includestdio.h#includestring.h#includestdlib.htypedefstructfile{charname[10];structfile*next;}File;typedefstructcontent{charname[10];File*file;intf_num;structcontent*next;}Content;typedefstructuser{charname[10];charpsw[10];Content*con;structuser*next;}User;charcur_user[20];User*user;intuser_num=0;voidwrite(charname[]){FILE*p;charch;p=fopen(name,w);ch=getchar();while(1){fputc(ch,p);ch=getchar();if(ch=='#')break;}fclose(p);}voidread(charname[]){FILE*p;inti=0;p=fopen(name,r);while(!feof(p)){i++;printf(%c,fgetc(p));}if(i==0)printf(文件是空的!\n);fclose(p);}intdisplay_files(Content*con){inti=0;File*file;file=con-file;file=file-next;while(file!=NULL){i++;printf(文件%d:%s\n,i,file-name);file=file-next;}printf(文件总数:%d\n,i);returni;}intis_exist_file(File*f,charname[]){intexist=0;File*file=f-next;while(file!=NULL){if(strcmp(file-name,name)==0){exist=1;break;}file=file-next;}returnexist;}voidadd_file(Content*con){intexist;charf_name[10];chartail[]=.txt;FILE*q;File*file=con-file;File*new_f;if(con-f_num==10){printf(已存在10个文件!\n);return;}do{exist=0;printf(输入新文件名:);scanf(%s,f_name);strcat(f_name,tail);if(is_exist_file(con-file,f_name))exist=1;if(exist==1)printf(文件已存在!\n);}while(exist==1);q=fopen(f_name,w);fclose(q);while(file-next!=NULL)file=file-next;new_f=(File*)malloc(sizeof(File));strcpy(new_f-name,f_name);new_f-next=NULL;file-next=new_f;con-f_num++;printf(添加文件%s成功!\n,f_name);}voidread_file(Content*con){charname[10];chartail[]=.txt;intfind=0;File*file=con-file-next;printf(输入需要读取的文件名:);scanf(%s,name);strcat(name,tail);while(file!=NULL){if(strcmp(name,file-name)==0){find=1;break;}file=file-next;}if(find==0){printf(读取错误或文件不存在!---ReadFile\n);return;}printf(文件已打开...\n);read(name);printf(\n文件%s读取成功!\n,name);}voidwrite_file(Content*con){charname[10];chartail[]=.txt;intfind=0;File*file=con-file-next;printf(输入需要编辑的文件名:);scanf(%s,name);strcat(name,tail);while(file!=NULL){if(strcmp(name,file-name)==0){find=1;break;}file=file-next;}if(find==0){printf(写入错误或文件不存在!---WriteFile\n);return;}printf(文件被打开...\n);printf(结尾输入#完成输入\n);write(name);printf(\n文件%s写入成功!\n,name);}voiddelete_file(Content*con){intexist;charname[10];File*file,*f;chartail[]=.txt;if(display_files(con)==0)printf(无内容!\n);else{do{exist=1;printf(输入需要删除的文件名:);scanf(%s,name);strcat(name,tail);if(!is_exist_file(con-file,name))exist=0;if(exist==0)printf(文件不存在!\n);}while(exist==0);printf(文件正在删除...);file=con-file;f=file-next;while(f!=NULL){if(strcmp(f-name,name)==0)break;file=f;f=f-next;}file-next=f-next;printf(文件删除成功!\n);}}voidmove_file(User*u,Content*con){intexist;charname[10];charc_name[10];chartail[]=.txt;File*file,*f,*temp_f;Content*c;do{exist=1;printf(输入需要移动文件名:);scanf(%s,name);strcat(name,tail);if(!is_exist_file(con-file,name))exist=0;if(exist==0)printf(此文件不存在!\n);}while(exist==0);printf(移动中...\n);file=con-file;f=file-next;while(f!=NULL){if(strcmp(f-name,name)==0)break;file=file-next;f=f-next;}temp_f=f;file-next=f-next;printf(输入目标存储空间名:);scanf(%s,c_name);c=u-con;while(c-next!=NULL){if(strcmp(c-name,c_name)==0)break;c=c-next;}f=c-file;while(f-next!=NULL)f=f-next;f-next=temp_f;temp_f-next=NULL;printf(移动成功!\n);}intdisplay_contents(User*u){inti=0;Content*con;con=u-con-next;while(con!=NULL){i++;printf(存储空间%d:%s\n,i,con-name);con=con-next;}printf(显示存储空间为%d\n,i);returni;}intis_exist_con(Content*c,charname[]){intexist=0;Content*con=c-next;while(con!=NULL){if(strcmp(con-name,name)==0){exist=1;break;}con=con-next;}returnexist;}voidadd_content(User*u){charname[10];intexist=0;Content*con,*c;File*file;do{exist=0;printf(输入存储空间名称:);scanf(%s,name);if(is_exist_con(u-con,name))exist=1;if(exist==1)printf(此存储空间已存在!\n);}while(exist==1);printf(新建中...\n);con=u-con;while(con-next!=NULL)con=con-next;c=(Content*)malloc(sizeof(Content));c-next=NULL;file=(File*)malloc(sizeof(File));file-next=NULL;c-file=file;strcpy(c-name,name);c-f_num=0;con-next=c;printf(\n新建成功!\n);}voiddel_content(User*u){intexist;charname[10];Content*con,*c;if(display_contents(u)==0)printf(无内容!\n);else{do{exist=1;printf(输入删除存储空间名称:);scanf(%s,name);if(!is_exist_con(u-con,name))exist=0;if(exist==0)printf(TheContentNotExist!\n);}while(exist==0);printf(文件夹删除中...);con=u-con;c=con-next;while(c!=NULL){if(strcmp(c-name,name)==0)break;con=c;c=c-next;}con-next=c-next;printf(删除成功!\n);}}voidinto_content(User*u){intchoice;intexist;charname[10];Content*con;do{exi