;一、概述课程设计目的、意义:课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。
通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。
同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
主要任务:模拟文件系统设计是设计和实现一个简单的文件系统。
内容包括:1.建立文件存储介质的管理机制2.建立目录(采用一级目录结构)3.文件系统功能(显示目录、创建、删除、打开、关闭、读、写)~4.文件操作接口(显示目录、创建、删除、打开、关闭、读、写)二、系统设计课程设计的系统设计:本系统模拟一个文件管理系统,要完成对文件的基本操作,文件的基本操作有文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。
系统建立了文件目录树,存储文件系统中的所有文件。
对于用户名下的文件,用文件目录树的分枝来存贮。
采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作就行了。
整体设计框架:系统初始化界面是由创建用户存储空间,管理文件,退出系统三个模块组成。
用户创建由创建用户存储空间,进入目录,删除用户存储空间,显示所有用户存储空间,等模块组成。
然后各个模块再由一些小模块组成。
其中创建文件,打开关闭文件,读写文件等文件操作模块包括在进入目录模块里面。
三、系统实现课程设计主要内容的实现程序代码:《#include <>#include <>#include <>typedef struct file{char name[10];struct file *next;}File;typedef struct content{!char name[10];File *file;int f_num;struct content *next;}Content;typedef struct user{char name[10];char psw[10];…Content *con;struct user *next;}User;char cur_user[20];User *user;int user_num=0;void write(char name[]){ FILE *p;!char ch;p=fopen(name,"w");ch=getchar();while(1){fputc(ch,p);ch=getchar();if(ch=='#') break;}'fclose(p);}void read(char name[]){FILE *p;int i=0;p=fopen(name,"r");while(!feof(p)){i++;%printf("%c",fgetc(p));}if(i==0) printf("文件是空的!\n"); fclose(p);}int display_files(Content *con){ int i=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);*return i;}int is_exist_file(File *f,char name[]){ int exist=0;File *file=f->next;while(file!=NULL){if(strcmp(file->name,name)==0){exist=1;{break;}file=file->next;}return exist;}void add_file(Content *con){int exist;@char f_name[10];char tail[]=".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)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); }void read_file(Content *con){char name[10];|char tail[]=".txt";int find=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;}}if(find==0){printf("读取错误或文件不存在!---Read File\n");return;$}printf("文件已打开...\n");read(name);printf("\n文件 %s 读取成功!\n",name);}void write_file(Content *con){char name[10];char tail[]=".txt";#int find=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("写入错误或文件不存在!---Write File\n");return;}^printf("文件被打开...\n");printf("结尾输入#完成输入\n");write(name);printf("\n文件 %s 写入成功!\n",name);}void delete_file(Content *con){int exist;char name[10];^File *file,*f;char tail[]=".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");【}}void move_file(User *u,Content *con){int exist;char name[10];char c_name[10];char tail[]=".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");}!int display_contents(User *u){int i=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);return i;}int is_exist_con(Content *c,char name[]){int exist=0;Content *con=c->next;while(con!=NULL){!if(strcmp(con->name,name)==0){exist=1;break;}con=con->next;}return exist;}…void add_content(User *u){char name[10];int exist=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");}void del_content(User *u){int exist;char name[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("The Content Not Exist!\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");}}void into_content(User *u){int choice;…int exist;char name[10];Content *con;do{exist=1;printf("输入存储空间名称:");scanf("%s",name);if(!is_exist_con(u->con,name)) exist=0;?if(exist==0) printf("存储空间不存在!\n"); }while(exist==0);con=u->con->next;while(con!=NULL){if(strcmp(con->name,name)==0) break;con=con->next;}do{<printf("1. 显示所有文件\n");printf("2. 新建文件\n");printf("3. 写入文件\n");printf("4. 读取文件\n");printf("5. 删除文件\n");printf("6. 移动文件\n");printf("0. 返回上层\n");printf("输入以上选项:");.scanf("%d",&choice);switch(choice){case 1:display_files(con);break;case 2:add_file(con);break;{case 3:write_file(con);break;case 4:read_file(con);break;case 5:delete_file(con);(break;case 6:move_file(u,con);break;}}while(choice!=0);}void login(){$int choice;int find=0;int login=0;User *p;Content *con;User *head=user->next;;p=(User *)malloc(sizeof(User));con=(Content *)malloc(sizeof(Content));·con->next=NULL;p->con=con;head=p;do{printf("1. 显示所有存储空间\n");printf("2. 新建存存储空间\n");printf("3. 删除存储空间\n");printf("4. 写入存储空间\n");!printf("0. 退出\n");printf("输入以上选项:");scanf("%d",&choice);switch(choice){case 1:display_contents(head);break;case 2:add_content(head);break;case 3:del_content(head);break;case 4:into_content(head);break; ?}}while(choice!=0);}int main(){user=(User *)malloc(sizeof(User));user->next=NULL;login();printf("谢谢使用!\n");return 0;}四、系统测试系统功能模块测试、性能测试结果:进入系统菜单:add_content(User *u)新建存储空间:display_contents(User *u)显示所有存储空间状态:del_content(User *u)删除存储空间:into_content(User *u)写入存储空间:进入文件系统菜单:write(char name[])写入文件:read(char name[])读取文件:display_files(Content *con)显示所有文件状态:add_file(Content *con)新建文件:delete_file(Content *con)删除文件:move_file(User *u,Content *con)移动文件:五、结论课程设计的主要成果、体会:课程设计是对我们平时学习的一种考察,我们要正确地对待。