您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > c++操作系统-仿linux-二级文件管理系统
实现了操作系统的管理员与用户登录权限的分离,还有文件夹的增删改查文件的增删改查,模拟linux。main.cpp#includeiostream#includestring#includeBFSystem.husingnamespacestd;FBSystem*g_FBSystem=NULL;intmain(){inta;charg_UserName[256];//用户名charg_PassWord[256];//密码g_FBSystem=newFBSystem();//用户验证cout用户名:;cing_UserName;cout密码:;charc,m[]=???;inti;for(i=0;i3;i++){doc=getch();while(c'0'||c'9');m[i]=c;putchar('*');}while(1)//回车继续{c=getch();if(c==13)break;}if(g_FBSystem-Login(g_UserName,m)){coutendl;cout登陆成功!endl;cout欢迎:;coutg_UserNameendl;}else{coutendl;cout无此用户:g_UserName输入任意键退出!endl;charexit;cinexit;return0;}//系统初始化g_FBSystem-Initialize();chartime[32];strcpy(time,g_FBSystem-GetTime());//将后者复制给前者printf(时间:%s\n,time);g_FBSystem-ShowMenu();while(1){memset(g_FBSystem-m_CommandTemp,NULL,32);//将g_FBSystem-m_CommandTemp全部变成nullcin.sync();//清除cin缓冲区for(inti=0;i10;i++){if(g_FBSystem-m_CurPath[i][0]!=0)coutg_FBSystem-m_CurPath[i];}cing_FBSystem-m_CommandTemp;intcommandID=g_FBSystem-SeekCommand(g_FBSystem-m_CommandTemp);charname[256];charname1[256];chartext[256];memset(text,0,256);switch(commandID){case0:cinname;g_FBSystem-CreateDirectory(name);break;case1:cinname;g_FBSystem-DeleteDirectory(name);break;case2:cinname;cinname1;g_FBSystem-RenameDirectory(name,name1);break;case3:cinname;g_FBSystem-OpenDirectory(name);break;case4:cinname;g_FBSystem-CreateFile(name);break;case5:cinname;g_FBSystem-DeleteFile(name);break;case6:cinname;cinname1;g_FBSystem-RenameFile(name,name1);break;case7:g_FBSystem-Format();break;case8:cinname;g_FBSystem-Read(name);break;case9:cinname;g_FBSystem-Write(name);break;case10:g_FBSystem-ShowMenu();break;case11:g_FBSystem-ShowAllFiles();break;case12:g_FBSystem-ReturnPreDirectory();break;case13:cinname;g_FBSystem-Inquiry(name);break;case14:cinname[0];g_FBSystem-FuzzyInquiry(name[0]);break;case15:g_FBSystem-Exit();return0;break;default:break;}}return0;}FBSystem.cpp#includeBFSystem.hFBSystem::FBSystem(){m_NumOfObject=0;//初始化对象数目为0strcpy(m_UserName1,yjz);strcpy(m_Password1,123);strcpy(m_UserName2,jj);strcpy(m_Password2,123);strcpy(m_Command[0],mkdir);//初始化命令行strcpy(m_Command[1],mddir);strcpy(m_Command[2],rndir);strcpy(m_Command[3],cd);strcpy(m_Command[4],mkfile);strcpy(m_Command[5],mdfile);strcpy(m_Command[6],rnfile);strcpy(m_Command[7],format);strcpy(m_Command[8],read);strcpy(m_Command[9],write);strcpy(m_Command[10],menu);strcpy(m_Command[11],dir);strcpy(m_Command[12],cd..);strcpy(m_Command[13],query);strcpy(m_Command[14],fquery);strcpy(m_Command[15],exit);memset(m_CommandTemp,NULL,32);memset(m_CurPath,NULL,2560);strcpy(m_CurPath[0],root\\);this-m_CurPathFatherID=0;this-m_CurPathID=0;this-m_CurMaxID=0;this-m_CurFaID=0;this-m_pow=0;}boolFBSystem::Login(char*_userName,char*_password){if(strcmp(_userName,m_UserName1)==0&&strcmp(_password,m_Password1)==0){m_pow=1;returntrue;}if(strcmp(_userName,m_UserName2)==0&&strcmp(_password,m_Password2)==0){m_pow=0;returntrue;}returnfalse;}voidFBSystem::Initialize(){FILE*m_FilePoint=fopen(system,rb);//以只读方式打开系统文件if(m_FilePoint==NULL){printf(无法打开:);printf(system);}fseek(m_FilePoint,0,0);//定位文件指针到文件起始位置intnum;fread(&num,4,1,m_FilePoint);m_NumOfObject=num;if(num0){fseek(m_FilePoint,4,SEEK_SET);//相对于文件起始点第5个字节的位置for(inti=0;im_NumOfObject;i++)//读取文件中的信息,并压入列表中{FBObject*temp=newFBObject();fread(temp,sizeof(FBObject),1,m_FilePoint);this-m_ObjectList.push_back(*temp);}}fclose(m_FilePoint);}boolFBSystem::CreateDirectory(char*_dirName){for(this-m_ObjectIterator=m_ObjectList.begin();m_ObjectIterator!=m_ObjectList.end();++m_ObjectIterator){if(!strcmp(m_ObjectIterator-name,_dirName)&&m_ObjectIterator-type==0){cout目录名重复!endl;returnfalse;}}FBObject*temp=newFBObject();chartime[256];strcpy(time,GetTime());temp-fatherID=this-m_CurPathID;strcpy(temp-lastTime,time);strcpy(temp-name,_dirName);temp-objectID=GetMaxID();temp-size=0;temp-type=0;//0为目录this-m_ObjectList.push_back(*temp);returntrue;}boolFBSystem::DeleteDirectory(char*_dirName){for(this-m_ObjectIterator=m_ObjectList.begin();m_ObjectIterator!=m_ObjectList.end();++m_ObjectIterator){if(!strcmp(m_ObjectIterator-name,_dirName)&&m_ObjectIterator-type==0){//检查该目录是否为非空listFBObject::iteratortemp;for(temp=m_ObjectList.begin();temp!=m_ObjectList.end();++temp){if(temp-fatherID==m_ObjectIterator-objectID){cout不能删除非空的目录!endl;returnfalse;}}//空则可以删除m_ObjectIterator=m_ObjectList.erase(m_ObjectIterator);returntrue;}}returntrue;}boolFBSystem::RenameDirectory(char*_srcName,char*_descName){for(this-m_ObjectIterator=m_ObjectList.begin();m_ObjectIterator!=m_ObjectList.end();++m_ObjectIterator){if(!strcmp(m_ObjectIterator-name,_srcName)&&m_ObjectIterator-type==0){strcpy(m_ObjectIterator-name,_descName);returntrue;}}returntrue;}boolFBSystem::OpenDirectory(char*_name){for(this-m_ObjectIterator=m_ObjectList.begin();m_ObjectIterator!=m_ObjectList.end();++m_ObjectIterator){//存在该名称且类型为目录if(!strcmp(m_ObjectIterator-name,_name)&&m_ObjectIterator-type==0){inttemp=0;for(inti=0;i10;i++)
本文标题:c++操作系统-仿linux-二级文件管理系统
链接地址:https://www.777doc.com/doc-5684379 .html