您好,欢迎访问三七文档
//新二级文件管理系统.cpp:Definestheentrypointfortheconsoleapplication.//#includestdafx.h#includestdio.h#includestdlib.h#includeconio.h#includetime.h#includestring.h#defineMaxUser20//定义最大MDF主目录文件#defineMaxDisk512*1024//模拟最大磁盘空间#definecommandAmount8//对文件操作的指令数//存储空间管理有关结构体和变量chardisk[MaxDisk];//模拟512K的磁盘存储空间typedefstructdistTable//磁盘块结构体{intmaxlength;//磁盘最大长度intstart;//磁盘起始地址intuseFlag;//磁盘是否使用的标志distTable*next;}diskNode;diskNode*diskHead;//磁盘节点头指针structfileTable//文件块结构体{charfileName[10];//文件名intstrat;//文件在磁盘存储空间的起始地址intlength;//文件内容长度intmaxlength;//文件的最大长度charfileKind[3];//文件的属性——读写方式structtm*timeinfo;//时间类型的指针,为了获取文件创建的时间而设置boolopenFlag;//判断是否有进程打开了该文件//fileTable*next;};//两级目录结构体typedefstructuser_file_directory//用户文件目录文件UFD{//charfileName[10];fileTable*file;user_file_directory*next;}UFD;//UFD*headFile;typedefstructmaster_file_directory//主文件目录MFD{charuserName[10];charpassword[10];UFD*user;}MFD;MFDuserTable[MaxUser];intused=0;//定义MFD目录中用已有的用户数//文件管理voidfileCreate(charfileName[],intlength,charfileKind[]);//创建文件voidfileWrite(charfileName[]);//写文件voidfileRead(charfileName[]);//读文件voidfileDir(charUserName[]);//显示某一用户的所有文件voidfileClose(charfileName[]);//关闭已打开的文件voidfileDel(charfileName[]);//删除文件intrequestDist(int&startPostion,intmaxLength);//磁盘分配查询voidinitDisk();//初始化磁盘voidfreeDisk(intstartPostion);//磁盘空间释放voiddiskShow();//显示磁盘使用情况//用户管理voiduserCreate();intlogin();intuserID=-1;//用户登录的ID号,值为-1时表示没有用户登录//主函数intmain(){charorder[commandAmount][10];//定义一个指令二维数组,指令长度不能超过10strcpy(order[0],create);strcpy(order[1],del);strcpy(order[2],read);strcpy(order[3],write);strcpy(order[4],dir);strcpy(order[5],close);strcpy(order[6],return);strcpy(order[7],exit);charcommand[50],command_str1[10],command_str2[10],command_str3[5],command_str4[3];inti,k,j;intlength;initDisk();//初始化磁盘for(i=0;iMaxUser;i++)//初始化用户UFD目录文件的头指针{userTable[i].user=(UFD*)malloc(sizeof(UFD));userTable[i].user-next=NULL;}while(1){printf(********************************************\n);printf(欢迎进入系统\n);printf(\n);printf(1、Creatuser\n);printf(\n);printf(2、login\n);printf(********************************************\n);printf(Pleasechoocethefunctionkey:);intchoice;scanf(%d,&choice);if(choice==1)userCreate();elseif(choice==2)userID=login();elseprintf(您的输入有误,请重新选择\n);while(userID!=-1){fflush(stdin);printf(———————————————————————————————————————\n);printf(create-创建格式:createa11000rw---将创建名为a1,长度为1000字节可读可写的文件\n);printf(del-删除格式:dela1---将删除名为a1的文件\n);printf(read-查看文件内容格式:reada1---显示a1的内容\n);printf(write-写入格式:writea1\n);printf(dir-显示文件格式:diraaa---将显示aaa用户的所有文件\n);printf(close-关闭文件格式:closea1---将关闭文件a1\n);printf(return-退出用户,返回登录界面\n);printf(exit-退出程序\n);printf(————————————————————————————————————————\n);printf(pleaseimputyourcommand:);gets(command);intselect;for(i=0;command[i]!=''&&command[i]!='\0';i++)//command_str1字符串存储命令的操作类型command_str1[i]=command[i];k=i;//最后的‘i’值赋给Kcommand_str1[k]='\0';for(i=0;icommandAmount;i++){if(!strcmp(command_str1,order[i])){select=i;break;}}if(i==commandAmount){printf(您输入的命令有误,请重新输入\n);continue;}for(i=k+1,k=0;command[i]!=''&&command[i]!='\0';i++,k++)//commmand_str2字符串存储文件名或用户名command_str2[k]=command[i];command_str2[k]='\0';k=i;switch(select){case0:for(i=k+1,k=0;command[i]!='';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';k=i;j=1;length=0;//初始化文件长度for(i=strlen(command_str3)-1;i=0;i--)//把字符串转换为十进制{length+=(command_str3[i]-48)*j;j*=10;}for(i=k+1,k=0;command[i]!=''&&command[i]!='\0';i++,k++)command_str4[k]=command[i];command_str4[k]='\0';fileCreate(command_str2,length,command_str4);break;case1:fileDel(command_str2);break;case2:fileRead(command_str2);break;case3:fileWrite(command_str2);break;case4:fileDir(command_str2);break;case5:fileClose(command_str2);break;case6:UFD*p;for(p=userTable[userID].user-next;p!=NULL;p=p-next)//退出用户之前关闭所有打的文件if(p-file-openFlag)p-file-openFlag=false;system(cls);userID=-1;break;case7:exit(0);break;}}}return0;}//创建用户voiduserCreate(){charc;charuserName[10];inti;if(usedMaxUser){printf(请输入用户名:);for(i=0;c=getch();i++){if(c==13)break;//按下的是回车键elseuserName[i]=c;printf(%c,c);}userName[i]='\0';//表示用户名已输入结束for(i=0;iused;i++){if(!strcmp(userTable[i].userName,userName)){printf(\n);printf(该用户名已存在,创建用户失败\n);system(pause);//在命令行上输出一行类似于“Pressanykeytoexit”return;}}strcpy(userTable[used].userName,userName);printf(\n);printf(请输入密码:);for(i=0;c=getch();i++){if(c==13)break;elseuserTable[used].password[i]=c;printf(*);}userTable[userID].password[i]='\0';printf(\n);printf(创建用户成功\n);used++;system(pause);}else{printf(创建用户失败,用户已达到上限\n);system(pause);}fflush(stdin);}//用户登录intlogin(){charname[10],psw[10];charc;inti,times;printf(请输入用户名:);for(i=0;c=getch();i++){if(c==13)break;elsename[i]=c;printf(%c,c);}name[i]='\0';for(i=0;iused;i++)//判断输入的用户名是不是已创建的用户名{if(!strcmp(userTable[i].userName,name))break;}if(i==used){printf(\n您输入的用户名不存在\n);system(pause);return-1;}for(times=0;times3;times++){memset(psw,'\0',sizeof(psw));printf(\n请输入密码:);for(i=0;c=getch();i++){if(c==13)break;elsepsw[i]=c;printf(*);}printf(\n);for(i=0;iused;i++){if(!strc
本文标题:二级目录文件系统
链接地址:https://www.777doc.com/doc-2160052 .html