⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmd.h

📁 文件管理系统
💻 H
字号:
#include"openfile.h"

enum Or{CD=1,CD_,CD__,CATCON,DEL,DIR,EXIT,HELP,MD,NEW,RD,MORE,CHMOD,SHOWUSER,WR,WRONG};
enum Pro{EIFREG=1,EIREAD,EIWRITE,EIEXEC,EGREAD,EGWRITE,EGEXEC,EOREAD,EOWRITE,EOEXEC,EWRONG};


class TCmd
{
public:
	TCmd();
	void Op();
	Or Tran(string tempin1);	// 把string类型转换成Or类型
	void Cd(string para);		//设置目录
	void Cd_();					//进入当前目录
	void Cd__();				//返回上层目录
	void Close(string para);	//关闭文件
	void Create(string str);	//创建文件
	void Del(string para);		//删除文件
	void Dir();		//列文件目录
	void Exit();				//退出文件系统
	void Help();
	void Md(string para);		//创建目录
	void New();					//新建用户
	int Properly(string para);//转换文件属性
	void Open(string para);		//打开文件
	void Read(string para);
	void Rd(string para);		//删除目录
	void Set(string para);		//设置文件目录属性
	void ShowUser();
	void Wr(string para);		//写文件
	void StrUp(string &str);//将str中的小写字母变成大写字母
	void CharToString(string &str1,string &str2,int n);//将接收到的array数组转化成string 类型
protected:
	string In1;
	string In2;
	Or TranOr;
	char array[80];
	TEnter enter;
};

TCmd::TCmd()
{
	Op();
}

void TCmd::Cd(string para)
{
	if(para.length()<=0)
		cout<<"Can not find the DIR!\n";
	enter.ECd(para);
}

void TCmd::Cd_()
{
}

void TCmd::Cd__()
{
	enter.ECd__();
}

void TCmd::Close(string para)
{
	if(para.length()<=0)
		cout<<"Can not find the File!\n";
	if(enter.ECloseFile(para)!=true)
		cout<<"Can not close the file!\n";
}

void TCmd::Create(string str)
{
	if(enter.CFile(str)==true)
		cout<<"A file was built!\n";
	else
		cout<<"Can not build the file!\n";
}

void TCmd::CharToString(string &str1,string &str2,int n)
{
	int i,j;
	char order[40],para[40];
	int corder=0,cpara=0;
	for(i=0,j=0;i<=n&&j<40;j++,i++)
	{
		if(array[i]==' '||array[i]=='\n')
		{
			order[j]='\0';
			str1=order;
			break;
		}
		else
		{
			order[j]=array[i];
			corder++;
		}
	}
	if(array[i]!='\n')
	{
		i++;
		for(j=0;i<n&&j<40;j++,i++)
		{
			para[j]=array[i];
		}
		para[j]='\0';
		str2=para;
	}
	else
		str2="\0";
}

void TCmd::Del(string para)
{
	if(para.length()<=0)
	{
		cout<<"Can not find the file!\n";
		return ;
	}
	if(enter.EDelFile(para)==true)
		cout<<"A file deleted!\n";
	else
		cout<<"Can not delete the file!\n";
}

void TCmd::Dir()
{
	enter.EDirectory();
}

void TCmd::Exit()
{
	cout<<"Good bye!\n";
	exit(0);
}

void TCmd::Help()
{
	cout<<setiosflags(ios::left)<<endl<<endl
		<<setw(13)<<"命令"<<setw(13)<<"说明"<<setw(17)<<"    格式"<<endl<<endl
		<<setw(13)<<"new"<<setw(13)<<"新建新用户"<<setw(17)<<"    new"<<endl
		<<setw(13)<<"user"<<setw(13)<<"显示用户清单"<<setw(17)<<"    user"<<endl
		<<setw(13)<<"catcon"<<setw(13)<<"新建文件"<<setw(17)<<"    catcon [filename]"<<endl
        <<setw(13)<<"write"<<setw(13)<<"写文件"<<setw(17)<<"    write [filename]"<<endl
		<<setw(13)<<"more"<<setw(13)<<"读文件"<<setw(17)<<"    more [filename]"<<endl
		<<setw(13)<<"delete"<<setw(13)<<"删除文件"<<setw(17)<<"    delete [filename]"<<endl	
		<<setw(13)<<"chmod"<<setw(13)<<"改变属性"<<setw(17)<<"    chmod [filename]"<<endl
        <<setw(13)<<"dir"<<setw(13)<<"显示目录"<<setw(17)<<"    dir"<<endl
		<<setw(13)<<"cd"<<setw(13)<<"改变路径"<<setw(17)<<"    cd [dirname]"<<endl
		<<setw(13)<<"cd~"<<setw(13)<<"反回上一级"<<setw(17)<<"    cd~"<<endl
		<<setw(13)<<"md"<<setw(13)<<"新建文件夹"<<setw(17)<<"    md [dirname]"<<endl
		<<setw(13)<<"rd"<<setw(13)<<"删除文件夹"<<setw(17)<<"    rd [dirname]"<<endl
		<<setw(13)<<"help"<<setw(13)<<"显示帮助"<<setw(17)<<"    help"<<endl
		<<setw(13)<<"logout"<<setw(13)<<"注消"<<setw(17)<<"    logout"<<endl<<endl<<endl;
}
void TCmd::Md(string para)
{
	if(enter.ECreateDir(para)==true)
		cout<<"A DIR created!\n";
	else
		cout<<"Can not create a DIR!\n";
}

void TCmd::New()
{
	if(user[fun].u_uid==0)
	{
		enter.NewUser();
	}
	else
		cout<<"You have not initiate a user!\n";
}

void TCmd::Op()
{
	int i,c;
	while(1)
	{
		c=0;
		while(user[fun].u_name[c]!='\0'&&c<8)
		{
			cout<<user[fun].u_name[c];
			c++;
		}
		cout<<":";
		c=0;
		while(user[fun].u_cdir->f_name[c]!='\0'&&c<8)
		{
			cout<<user[fun].u_cdir->f_name[c];
			c++;
		}
		cout<<">";
begin:
		for(i=0;i<80;i++)
		{
			array[i]=getchar();
			if(array[i]!='\n')
				continue;
			else
				break;
		}
		if(array[0]=='\n')
			goto begin;
		TCmd::CharToString(In1,In2,i);
		StrUp(In1);//小写字母变大写
		TranOr=Tran(In1);
		switch(TranOr)
		{
		case CD:
			Cd(In2);break;
		case CD_:
			Cd_();break;
		case CD__:
			Cd__();break;
		case CATCON:
			Create(In2);break;
		case DEL:
			Del(In2);break;
		case DIR:
			Dir();break;
		case EXIT:
			Exit();break;
		case HELP:
			Help();break;
		case MD:
			Md(In2);break;
		case NEW:
			New();break;
		case RD:
			Rd(In2);break;
		case MORE:
			Open(In2);
			Read(In2);
			Close(In2);
			break;
		case CHMOD:
			Set(In2);break;
		case SHOWUSER:
			ShowUser();break;
		case WR:
			Open(In2);
			Wr(In2);
			Close(In2);break;
		default: cout<<"'"<<In1<<"'"<<"未知的命令,请检查您的输入\n";
			continue;
		}
	}
}

void TCmd::Open(string para)
{
	if(enter.EOpenFile(para)!=true)
		cout<<"Can not open the file!\n";
}

int TCmd::Properly(string para)
{
	if(para=="IREAD")
		return IREAD;
	if(para=="IFREG")
		return IFREG;
	if(para=="IWRITE")
		return IWRITE;
	if(para=="IEXEC")
		return IEXEC;
	if(para=="GREAD")
		return GREAD;
	if(para=="GWRITE")
		return GWRITE;
	if(para=="GEXEC")
		return GEXEC;
	if(para=="OREAD")
		return OREAD;
	if(para=="OWRITE")
		return EOWRITE;
	if(para=="OEXEC")
		return OEXEC;
	return -1;
}

void TCmd::Rd(string para)
{
	if(enter.EDelDir(para)==true)
		cout<<"The DIR was deleted!\n";
	else
		cout<<"Can not delete the DIR!\n";
}

void TCmd::Read(string para)
{
	enter.ERead(para);
}

void TCmd::ShowUser()
{
	enter.EShowUser();
}

void TCmd::Set(string para)
{
	if(para.length()<=0)
	{
		cout<<"Unsuccessful configuration!\n";
		return ;
	}
	string in;
	cout<<"Please input the file attribute: ";
	cin>>in;
	StrUp(in);
	int pr=TCmd::Properly(in);
	if(pr!=-1)
	{
		enter.ESet(pr,para);
	}
	else
	{
		cout<<"Unacceptible file attribute!\n";
	}
}

void TCmd::StrUp(string &str)
{
	int i=0;
	for(i=0;i<str.length();i++)
	{
		if(str[i]>=97&&str[i]<=122)
		{
			str[i]=str[i]-32;
		}
	}
}

Or TCmd::Tran(string temp)
{
	if(temp=="CD")
		return CD;
	if(temp=="CD.")
		return CD_;
	if(temp=="CD~")
		return CD__;
	if(temp=="CATCON")
		return CATCON;
	if(temp=="DELETE")
		return DEL;
	if(temp=="DIR")
		return DIR;
	if(temp=="LOGOUT")
		return EXIT;
	if(temp=="HELP")
		return HELP;
	if(temp=="MD")
		return MD;
	if(temp=="NEW")
		return NEW;
	if(temp=="MORE")
		return MORE;
	if(temp=="RD")
		return RD;
	if(temp=="USER")
		return SHOWUSER;
	if(temp=="CHMOD")
		return CHMOD;
	if(temp=="WRITE")
		return WR;
	return WRONG;
}

void TCmd::Wr(string para)
{
	enter.EWrite(para);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -