15. void ReadFile()//读文件函数
Begin QueryMod(False)(图12) N True? Y Buffer Y EOF? N Putchar(ch) Fgetchar(buffer) N Cout error Y End 图15 ReadFile
16. void ChangeMod()//修改某文件的执行权限
Begin Search UFD(图2.1) N True? Y Scanf Mod Printf Mod Test Scanf ch ?Y?||?y? Cout error Ch Other Update UFD(图4.1) Remove username.exe outfilelocate.exe->username.exe End 图16 ChangeMod
17. int Execute(int i,int len,int cmdset)//执行命令函数
Begin N Buffer[i]=Cmd[i] Y Cmd[i]!=0 N Buffer? Y Cout error cmdset 1 2 ChangeMod(图16) 3 4 CreatFile (图8) 5 6 ListAllFile ByeFile(图4) DeleteUser(图7) DeleteFile (图9) 9 WriteFile (图14) 8 7 OpenFile ReadFile (图15) Return Temp End 图17 Execute
18. void Command()//读取用户输入的命令,并将其转换成系统能识别的命令
Begin 1 Y Scanf cmd N Buffer[i]=cmd[i] ?>?||? ?||len-1 Y 二分查找命令编号 Cmdset=0||mid N Cmdset Y Execute(图17) EndIt? Y End N 图18 Command
五、实验运行结果
/***************************************************************** * 文件名: Simple_file_system.c
* 功 能: 简单文件管理系统模拟程序
*******************************************************************/ #include
#define NULL 0 #define keynum 10
#define getspace(type) (type*)malloc(sizeof(type)) //宏定义 申请内存
char cmd[64]; //存放用户输入命令 char buffer[36];//
char user[32];//存放当前登陆的用户名
typedef char ALFA[12]; ALFA KWORD[keynum];
//------------------------------------------------------------------------------------------------ struct UFD{//用户文件管理模块 char filename[32]; //文件名 int safecode; //文件保护码 long length; //文件长度 }*curfile = NULL;
//------------------------------------------------------------------------------------------------ struct MFD{//用户登陆信息管理模块 char username[32]; //用户名 bool filepoint; //用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件
}*curuser = NULL,*elseuser=NULL; typedef UFD UFD; //重命名 typedef MFD MFD; void main();
//------------------------------------------------------------------------------------------------ void KeyWord()//初始化命令关键字 { strcpy(KWORD[ 1],\ //用户注销命令 strcpy(KWORD[ 2],\ //改变文件的执行权限 strcpy(KWORD[ 3],\//删除用户注册信息 strcpy(KWORD[ 4],\ // 在当前目录下创建一个文件 strcpy(KWORD[ 5],\ //删除当前用户目录下的一个文件 strcpy(KWORD[ 6],\ //显示当前注册目录下的所有文件信息 strcpy(KWORD[ 7],\ //打开文件 strcpy(KWORD[ 8],\ //读文件信息 strcpy(KWORD[ 9],\ //向文件写入新的信息 }
//------------------------------------------------------------------------------------------------ int LoginDisplay() //登陆选项操作函数 { int SELETE_1 = 0; //定义整型数存放选项 do //循环控制 { cout<<\ *****请选择操作*****\\n1、用户登陆 2、用户注册 0、退出\
//显示登陆选项界面 cin>>SELETE_1; //输入要选择的命令 }while(SELETE_1<0 || SELETE_1>2); //选项判断 system(\ //清屏 return SELETE_1; //返回选项数 }
//------------------------------------------------------------------------------------------------ bool Login(int SELETE)//用户登陆,注册函数 { FILE *fp,*fp1,*fp2; //定义文件 char name[12]; //定义数组存放登录名 switch(SELETE) //switch选择 { case 1://用户登陆 if((fp = fopen(\打开用户注册目录管理文件 { cout<<\错误:不能打开登陆文件。\ //显示错误 getch(); //读取结束符 system(\ //清屏 return false; //返回 } curuser = getspace(MFD); //用户名申请空间 cout<<\登陆*****\\n用户名:\ //显示 cin>>name; //输入用户登陆名 while(!feof(fp)) //检查该用户是否合法 { fread(curuser,sizeof(MFD),1,fp); //文件读取 if(strcmp(curuser->username,name)==0) //比较输入用户名是否与存在用户名相同 break; } if(feof(fp)) //如果没有找到跟当前登陆用户名相同的管理信息,执行下列代码 { cout<<\错误:该用户不存在。\ //显示“错误:该用户不存在” fclose(fp); //关闭文件 return false; //返回 } else { fclose(fp); //关闭文件 return true; //返回 }