操作系统课程设计二级文档管理系统.docx

上传人:b****9 文档编号:23384687 上传时间:2023-05-16 格式:DOCX 页数:41 大小:477.38KB
下载 相关 举报
操作系统课程设计二级文档管理系统.docx_第1页
第1页 / 共41页
操作系统课程设计二级文档管理系统.docx_第2页
第2页 / 共41页
操作系统课程设计二级文档管理系统.docx_第3页
第3页 / 共41页
操作系统课程设计二级文档管理系统.docx_第4页
第4页 / 共41页
操作系统课程设计二级文档管理系统.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

操作系统课程设计二级文档管理系统.docx

《操作系统课程设计二级文档管理系统.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计二级文档管理系统.docx(41页珍藏版)》请在冰豆网上搜索。

操作系统课程设计二级文档管理系统.docx

操作系统课程设计二级文档管理系统

青岛科技大学

操作系统课程设计

 

计算机092

学生班级__________________________

学生学号__________________________

学生姓名__________________________

 

______年___月___日

 

操作系统课程设计

(二级文件管理系统)

一、课程设计要求

从所给题目中选择一个,分析设计要求,给出解决方案,建立必要的数据结构,设计总体流程(包括界面),详细设计必要的算法,测试结果。

基于Windows或Linux操作系统都可以,编程语言不限。

二、设计目的

深入了解文件管理系统,初步掌握文件管理系统的实现方法。

三、选择题目

设计一个简单的二级文件系统

设计内容:

编写程序模拟实现一个简单的文件管理系统,设计一个较实用的用户界面,方便用户使用。

设计要求:

提供以下相关文件操作:

(1)具有login(用户登录)

(2)系统初始化(建文件卷、提供登录模块)

(3)文件的创建:

create

(4)文件的打开:

open

(5)文件的读:

read

(6)文件的写:

write

(7)文件关闭:

close

(8)删除文件:

delete

(9)创建目录(建立子目录):

mkdir

(10)列出文件目录:

dir

(11)退出:

loyout

四、程序设计

(1)开发环境

Ubuntu11.10GCC(GNUCompilerCollection,GNU编译器套装)

C语言编程

(2)设计思想

文件管理仅针对相应用户,用户注册时,自动分配对应的文件空间,该用户所有的文件保存在该用户空间下。

用户只有对自己空间中的目录或文件具有权限。

文件管理系统,模拟Linux文件管理指令格式,模拟实现ls、cat、rm、cd、mkdir等基础文件管理指令,并具有较明朗的操作界面。

(3)流程设计

1、系统执行流程图

 

 

2、创建文件(夹)

 

3、删除文件(夹)

 

(4)主要模块设计

#defineMaxUser20//最大用户数

#definecommandAmount9//指令数

char_user[20];//当前用户名

charcurrentDir[255];//当前所在目录

typedefstructUserMess//所有用户信息

{

char_UserName[20];

char_UserPwd[20];

structUserMess*nextUser;

}_UserMess;

_UserMess*firstUser;

typedefstructFolderDir//目录路径信息

{

char_Dir[255];

structFolderDir*fatherDir;

}_RootDir;

_RootDir*rootFolder;

typedefstructFolder//当前目录子目录信息

{

char_FolderName[100];

structFolder*nextFolder;

}_Folder;

_Folder*firstFolder;

typedefstructFile//当前目录下文件信息

{

char_FileName[100];

structFile*nextFile;

}_File;

_File*firstFile;

(5)功能函数设计

voidinit();//初始化部分内容

intReadUserMess();//读取已有用户信息

intuserCreate(intsumUsers);//用户注册

intlogin();//登录

voidcreateRootFolder(charusername[]);//为新用户分配空间

voidTraverseFolder(charpath[]);//遍历文件及文件夹

voidListFileAndFolder();//显示当前文件夹下所有文件

voidChangeDir(charfolderName[]);//目录跟换

voidDelete(charfName[]);//删除文件或文件夹

voidCatFile(charfName[]);//打开文件,查看文件内容

voidAddContent(charfName[]);//向文件写入内容

voidCreateFile(charfName[]);//创建文件

voidCreateFolder(charfolderName[]);//创建文件夹

voidHelpFile();//帮助文件

(6)运行部分截图

图1模拟的指令预览,以及系统支持指令格式

图2用户登录,并查看根目录下所有文件及文件夹

图3查看文件内容,并写入信息

图4目录跳转功能

图5删除文件、删除目录

五、程序代码

#include

#include

#include

#include

#include

#include

#defineMaxUser20

#definecommandAmount9

char_user[20];

charcurrentDir[255];

typedefstructUserMess

{

char_UserName[20];

char_UserPwd[20];

structUserMess*nextUser;

}_UserMess;

_UserMess*firstUser;

typedefstructFolderDir

{

char_Dir[255];

structFolderDir*fatherDir;

}_RootDir;

_RootDir*rootFolder;

typedefstructFolder

{

char_FolderName[100];

structFolder*nextFolder;

}_Folder;

_Folder*firstFolder;

typedefstructFile

{

char_FileName[100];

structFile*nextFile;

}_File;

_File*firstFile;

voidinit();//初始化部分内容

intReadUserMess();//读取已有用户信息

intuserCreate(intsumUsers);//用户注册

intlogin();//登录

voidcreateRootFolder(charusername[]);//为新用户分配空间

voidTraverseFolder(charpath[]);//遍历文件及文件夹

voidListFileAndFolder();//显示当前文件夹下所有文件

voidChangeDir(charfolderName[]);//目录跟换

voidDelete(charfName[]);//删除文件或文件夹

voidCatFile(charfName[]);//打开文件,查看文件内容

voidAddContent(charfName[]);//向文件写入内容

voidCreateFile(charfName[]);//创建文件

voidCreateFolder(charfolderName[]);//创建文件夹

voidHelpFile();//帮助文件

 

intmain()

{

intlogined=0;

intselect;

charch;

charorder[commandAmount][9];

strcpy(order[0],"create");

strcpy(order[1],"rm");

strcpy(order[2],"cat");

strcpy(order[3],"write");

strcpy(order[4],"ls");

strcpy(order[5],"cd");

strcpy(order[6],"exit");

strcpy(order[7],"mkdir");

strcpy(order[8],"help");

charcommand[15],command_str1[255];

inti,j;

init();

intuserNum=ReadUserMess();

//printf("Usercount:

%d\n",userNum);

intisright=1;

while(isright==1)

{

printf("********************************************\n");

printf("1、Creatuser\n");

printf("2、login\n");

printf("********************************************\n");

printf("Pleasechoocethefunctionkey:

>");

intchoice;

setbuf(stdin,NULL);

scanf("%d",&choice);

if(choice==1)

{

logined=userCreate(userNum);

isright=0;

}

elseif(choice==2)

{

logined=login(userNum);

isright=0;

}

}

TraverseFolder(currentDir);

if(logined==1)

{

while(logined)

{

//command[0]=0;

for(i=0;i<15;i++)

{

command[i]=0;

}

for(i=0;i<255;i++)

{

command_str1[i]=0;

}

//command_str1[0]=0;

setbuf(stdin,NULL);

printf("\n%s:

~$",_user);

for(i=0,j=0;ch=getchar();i++)

{

if(j==1)

{

if(ch==''||ch=='\n')

{

command_str1[i]=0;

break;

}

else

{

command_str1[i]=ch;

}

}

if(j==0)

{

if(ch=='')

{

i=-1;

j++;

}

elseif(ch=='\n')

{

command[i]=0;

break;

}

else

{

command[i]=ch;

}

}

}

printf("\n");

for(i=0;i

{

if(!

strcmp(command,order[i]))

{

select=i;

break;

}

}

if(i==commandAmount)

{

printf("Undefinedcommand!

\n");

continue;

}

switch(select)

{

case0:

if(command_str1!

=NULL)

{

CreateFile(command_str1);

}

else

{

printf("Donothasnormalfilename,createfailed!

\n");

}

break;

case1:

if(command_str1!

=NULL)

{

Delete(command_str1);

}

else

{

printf("Donothasnormalfileordirname,createfailed!

\n");

}

break;

case2:

if(command_str1!

=NULL)

{

CatFile(command_str1);

}

else

{

printf("Donothasnormalfilename,createfailed!

\n");

}

break;

case3:

if(command_str1!

=NULL)

{

AddContent(command_str1);

}

else

{

printf("Donothasnormalfilename,createfailed!

\n");

}

break;

case4:

TraverseFolder(currentDir);

ListFileAndFolder();

break;

case5:

if(command_str1!

=NULL)

{

ChangeDir(command_str1);

}

else

{

printf("Donothasnormaldirname,createfailed!

\n");

}

break;

case6:

logined=0;

break;

case7:

if(command_str1!

=NULL)

{

CreateFolder(command_str1);

}

else

{

printf("Donothasnormaldirname,createfailed!

\n");

}

break;

case8:

HelpFile();

break;

}

TraverseFolder(currentDir);

}

}

}

 

voidHelpFile()

{

printf("———————————————————————————————————————\n");

printf("create-创建格式:

createa1,将创建名为a1的文件\n");

printf("rm-删除格式:

rma1,将删除名为a1的文件或文件夹\n");

printf("cat-查看文件内容格式:

cata1,显示a1的内容\n");

printf("write-写入格式:

writea1\n");

printf("ls-显示文件格式:

ls,显示所有文件\n");

printf("cd-跳转目录格式:

cddir或cd..dir为路径\n");

printf("exit-退出程序格式:

exit\n");

printf("mkdir-创建文件夹格式:

mkdira1,将创建文件夹a1\n");

printf("help-查看帮助格式:

help\n");

printf("————————————————————————————————————————\n");

}

 

voidCreateFile(charfName[])

{

charfSavePath[255];

strcpy(fSavePath,currentDir);

strcat(fSavePath,"/");

strcat(fSavePath,fName);

_File*fi;

fi=firstFile;

while(fi->nextFile!

=NULL)

{

if(strcmp(fi->_FileName,fName)==0)

{

printf("FilesisExist!

Createfailed!

\n");

return;

}

fi=fi->nextFile;

}

FILE*fp;

fp=fopen(fSavePath,"w");

if(fp==NULL)

{

printf("Filecreatefailed!

\n");

}

else

{

printf("Filecreatesuccess!

\n");

}

TraverseFolder(currentDir);

}

 

voidTraverseFolder(charpath[])

{

_Folder*p;

_File*q;

firstFolder=(_Folder*)malloc(sizeof(_Folder));

firstFolder->nextFolder=NULL;

firstFile=(_File*)malloc(sizeof(_File));

firstFile->nextFile=NULL;

structdirent*entry=NULL;

DIR*pDir;

pDir=opendir(path);

while(NULL!

=(entry=readdir(pDir)))

{

if(entry->d_type==8)

{

q=(_File*)malloc(sizeof(_File));

strcpy(q->_FileName,entry->d_name);

q->nextFile=firstFile;

firstFile=q;

//printf("%s",entry->d_name);

}

elseif(entry->d_type==4)

{

if((strcmp(entry->d_name,".")!

=0)&&(strcmp(entry->d_name,"..")!

=0)&&(entry->d_name[0]!

='.'))

{

p=(_Folder*)malloc(sizeof(_Folder));

strcpy(p->_FolderName,entry->d_name);

p->nextFolder=firstFolder;

firstFolder=p;

//printf("Folder:

%s",entry->d_name);

}

}

//d_type:

4表示目录,8表示文件

}

}

 

voidListFileAndFolder()

{

_File*fi;

fi=firstFile;

printf("\n************************************************************\n");

printf("Files:

\n");

while(fi->nextFile!

=NULL)

{

printf("%s",fi->_FileName);

fi=fi->nextFile;

}

printf("\n\n");

_Folder*fo;

fo=firstFolder;

printf("Folders:

\n");

while(fo->nextFolder!

=NULL)

{

printf("%s",fo->_FolderName);

fo=fo->nextFolder;

}

printf("\n");

printf("****************************************************************\n");

}

 

voidDelete(charfName[])

{

printf("%s",fName);

intisExist=0;

charfSavePath[255];//文件或文件夹存储完整路径

strcpy(fSavePath,currentDir);

_File*fi;

fi=firstFile;

while(fi->nextFile!

=NULL)

{

if(strcmp(fi->_FileName,fName)==0)

{

isExist=1;

break;

}

fi=fi->nextFile;

}

if(isExist==1)

{

strcat(fSavePath,"/");

strcat(fSavePath,fName);

remove(fSavePath);

printf("\nFile\"%s\"deletesuccess!

\n",fName);

}

_Folder*fo;

fo=firstFolder;

while(fo->nextFolder!

=NULL)

{

if(strcmp(fo->_FolderName,fName)==0)

{

isExist=1;

break;

}

fo=fo->nextFolder;

}

if(isExist==1)

{

strcat(fSavePath,"/");

strcat(fSavePath,fName);

rmdir(fSavePath);

printf("\nFolder\"%s\"deletesuccess!

\n",fName);

}

TraverseFolder(currentDir);

}

 

voidCatFile(charfName[])

{

charch;

intisExist=0;

charfSavePath[255];//文件或文件夹存储完整路径

strcpy(fSavePath,currentDir);

_File*fi;

fi=firstFile;

while(fi->nextFile!

=NULL)

{

if(strcmp(fi->_FileName,fName)==0)

{

isExist=1;

break;

}

fi=fi->nextFile;

}

if(isExist==1)

{

strcat(fSavePath,"/");

strcat(fSavePath,fName);

FILE*fp;

fp=fopen(fSavePath,"r");

if(fp==NULL)

{

printf("Filenotexist!

\n");

}

else

{

printf("\n%s\'sContent:

****************************\n",fName);

ch=f

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1