《2022年操作系统课程方案二文档管理系统》由会员分享,可在线阅读,更多相关《2022年操作系统课程方案二文档管理系统(12页珍藏版)》请在金锄头文库上搜索。
1、个人资料整理仅限学习使用青 岛 科 技 大 学操 作 系 统 课 程 设 计学生班级_ 学生学号_ 学生姓名_ _年 _月 _日操作系统课程设计(二级文件管理系统一、课程设计要求从所给题目中选择一个,分析设计要求,给出解决方案,建立必要的数据结构,设计总体流程包括界面),详细设计必要的算法,测试结果。基于Windows 或 Linux 操作系统都可以,编程语言不限。二、设计目的深入了解文件管理系统,初步掌握文件管理系统的实现方法。三、选择题目设计一个简单的二级文件系统设计内容:编写程序模拟实现一个简单的文件管理系统,设计一个较实用的用户界面,方便用户使用。设计要求:提供以下相关文件操作: 09
2、08010209 Angelo 2018 6 26 计算机 092 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 12 页个人资料整理仅限学习使用2)系统初始化建文件卷、提供登录模块)3)文件的创建: create 4)文件的打开:open 5)文件的读:read 6)文件的写:write 7)文件关闭:close 8)删除文件:delete 9)创建目录 建立子目录):mkdir 10)列出文件目录:dir 11)退出: loyout 四、程序设计(1) 开发环境Ubuntu 11.10 GCC GNU Compiler Colle
3、ction,GNU 编译器套装)C 语言编程(2) 设计思想文件管理仅针对相应用户,用户注册时,自动分配对应的文件空间,该用户所有的文件保存在该用户空间下。用户只有对自己空间中的目录或文件具有权限。文件管理系统,模拟Linux 文件管理指令格式,模拟实现ls、cat、rm、cd、 mkdir 等基础文件管理指令,并具有较明朗的操作界面。(3) 流程设计1、系统执行流程图开始界面开 始注册登陆选择操作创建文件删除文件读文件写文件创建文件夹删除文件夹目录跳转查看所有文件查看帮助查看所有目录退出精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共
4、12 页个人资料整理仅限学习使用2、创建文件 夹)3、删除文件 文件 (夹是否存在结束输入文件 (夹名文件已存在,无法创建开始文件 (夹 不存在文件 (夹是否存在结束输入文件 (夹名删除文件 (夹 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 12 页个人资料整理仅限学习使用_UserMess *firstUser 。typedef struct FolderDir/目录路径信息char _Dir255。struct FolderDir * fatherDir。_RootDir。_RootDir * rootFolder。typede
5、f struct Folder / 当前目录子目录信息 char _FolderName100 。 struct Folder *nextFolder 。_Folder 。_Folder *firstFolder 。typedef struct File / 当前目录下文件信息 char _FileName100 。 struct File *nextFile 。_File 。_File *firstFile 。(5) 功能函数设计void init( 。 /初始化部分内容int ReadUserMess(。 / 读取已有用户信息int userCreate(int sumUsers。 /用户
6、注册int login( 。 /登录void createRootFolder(char username 。 /为新用户分配空间void TraverseFolder(char path 。 /遍历文件及文件夹void ListFileAndFolder(。 /显示当前文件夹下所有文件void ChangeDir(char folderName。 /目录跟换void Delete(char fName 。 /删除文件或文件夹void CatFile(char fName 。 /打开文件,查看文件内容void AddContent(char fName 。 /向文件写入内容void Creat
7、eFile(char fName 。 /创建文件void CreateFolder(char folderName 。 /创建文件夹void HelpFile( 。 / 帮助文件精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 12 页个人资料整理仅限学习使用(6) 运行部分截图图 1 模拟的指令预览,以及系统支持指令格式图 2 用户登录,并查看根目录下所有文件及文件夹精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 12 页个人资料整理仅限学习使用图 3 查看文件内容,并写入信息图
8、 4 目录跳转功能精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 12 页个人资料整理仅限学习使用图 5 删除文件、删除目录五、程序代码#include #include #include #include #include #include #define MaxUser 20 #define commandAmount 9 char _user20。char currentDir255 。typedef struct UserMess char _UserName20 。 char _UserPwd20 。 struct UserM
9、ess *nextUser 。_UserMess 。_UserMess *firstUser 。typedef struct FolderDir char _Dir255 。 struct FolderDir *fatherDir。_RootDir 。_RootDir *rootFolder 。typedef struct Folder char _FolderName100 。 struct Folder *nextFolder 。_Folder 。_Folder *firstFolder 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页
10、,共 12 页个人资料整理仅限学习使用typedef struct File char _FileName100 。 struct File *nextFile 。_File 。_File *firstFile 。void init( 。 /初始化部分内容int ReadUserMess(。 / 读取已有用户信息int userCreate(int sumUsers。 /用户注册int login( 。 /登录void createRootFolder(char username 。 /为新用户分配空间void TraverseFolder(char path 。 /遍历文件及文件夹void
11、ListFileAndFolder(。 /显示当前文件夹下所有文件void ChangeDir(char folderName。 /目录跟换void Delete(char fName 。 /删除文件或文件夹void CatFile(char fName 。 /打开文件,查看文件内容void AddContent(char fName 。 /向文件写入内容void CreateFile(char fName 。 /创建文件void CreateFolder(char folderName 。 /创建文件夹void HelpFile( 。 / 帮助文件int main( int logined=
12、0 。 int select。 char ch。 char ordercommandAmount9 。 strcpy(order0,create 。 strcpy(order1,rm 。 strcpy(order2,cat 。 strcpy(order3,write。 strcpy(order4,ls 。 strcpy(order5,cd 。 strcpy(order6,exit 。 strcpy(order7,mkdir。 strcpy(order8,help 。 char command15,command_str1255 。 int i,j 。 init( 。 int userNum =
13、 ReadUserMess( 。 / printf(User count:%dn,userNum。 int isright=1 。 while(isright=1 printf(*n。 printf( 1 、Creat usern。 printf( 2 、loginn 。 printf(*n。 printf(Please chooce the function key: 。 int choice 。 setbuf(stdin,NULL 。 scanf(%d,&choice 。 if(choice=1 logined=userCreate(userNum 。精选学习资料 - - - - - -
14、- - - 名师归纳总结 - - - - - - -第 8 页,共 12 页个人资料整理仅限学习使用 isright=0 。 else if(choice=2 logined=login(userNum 。 isright=0 。 TraverseFolder(currentDir 。 if(logined =1 while(logined / command0=0 。 for(i=0 。i commandi=0 。 for(i=0 。i command_str1i=0 。 /command_str10=0 。 setbuf(stdin,NULL 。 printf(n%s :$ ,_user
15、。 for(i=0,j=0 。 ch = getchar(。i+ if(j=1 if(ch= | ch =n command_str1i=0 。 break。 else command_str1i=ch 。 if(j=0 if(ch= i=-1 。 j+ 。 else if(ch =n commandi=0 。 break。 else commandi=ch 。 printf(n 。 for(i=0 。i if(!strcmp(command,orderi 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 12 页个人资料整理仅限学习使用
16、 select=i 。 break。 if(i=commandAmount printf(Undefined command!n。 continue。 switch(select case 0: if(command_str1 != NULL CreateFile(command_str1 。 else printf(Do not has normal file name,create failed!n。 break。 case 1: if(command_str1 != NULL Delete(command_str1 。 else printf(Do not has normal file
17、 or dir name,create failed!n。 break。 case 2: if(command_str1 != NULL CatFile(command_str1 。 else printf(Do not has normal file name,create failed!n。 break。 case 3: if(command_str1 != NULL AddContent(command_str1 。 else printf(Do not has normal file name,create failed!n。 break。 case 4: TraverseFolder
18、(currentDir 。 ListFileAndFolder(。 break。 case 5: if(command_str1 != NULL ChangeDir(command_str1 。 else printf(Do not has normal dir name,create failed!n。 break。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 12 页个人资料整理仅限学习使用 case 6: logined=0。 break。 case 7: if(command_str1 != NULL CreateFolde
19、r(command_str1 。 else printf(Do not has normal dir name,create failed!n。 break。 case 8: HelpFile( 。 break。 TraverseFolder(currentDir 。 void HelpFile( printf( n 。 printf( create- 创建格式: create a1,将创建名为a1 的文件 n。 printf( rm- 删除格式: rm a1,将删除名为a1 的文件或文件夹n 。 printf( cat- 查看文件内容格式: cat a1,显示 a1的内容 n 。 print
20、f( write- 写入格式: write a1n 。 printf( ls- 显示文件格式: ls,显示所有文件n 。 printf( cd- 跳转目录格式: cd dir 或 cd .dir 为路径 n。 printf( exit- 退出程序格式: exit n 。 printf( mkdir- 创建文件夹格式: mkdir a1,将创建文件夹a1n。 printf( help- 查看帮助格式: help n 。 printf( n 。 void CreateFile(char fName char fSavePath255。 strcpy(fSavePath,currentDir 。 s
21、trcat(fSavePath,/ 。 strcat(fSavePath,fName。 _File *fi 。 fi=firstFile 。 while(fi-nextFile !=NULL if(strcmp(fi-_FileName,fName=0 printf(Files is Exist! Create failed!n。 return。 fi =fi-nextFile 。 FILE *fp 。 fp=fopen(fSavePath,w 。 if(fp=NULL 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 12 页个人资料
22、整理仅限学习使用 printf(File create failed !n 。 else printf(File create success!n 。 TraverseFolder(currentDir 。 void TraverseFolder(char path _Folder *p 。 _File *q 。 firstFolder = (_Folder *malloc(sizeof(_Folder。 firstFolder-nextFolder = NULL。 firstFile =(_File *malloc(sizeof(_File。 firstFile-nextFile =NULL
23、。 struct dirent* 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。 else if(entry-d_type=4 if(strcmp(entry-d_name, . != 0 &(strcmp(entry-d_name, . != 0 & (entry-d_name0 != . 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 12 页