【文件管理系统】 Apaer_xzc

文件管理系统

#include <bits/stdc++.h>
using namespace std;

class MyFile; ///前向声明文件类 
class FileUser; ///前向声明用户类 

map<string,string> AdministList; ///用于记录所有管理员的用户名和密码 
map<string,string> OrderUser; ///用于记录有用户的用户名和密码 
map<MyFile,bool> AllFiles; ///用于记录所有已经创建文件的文件名 

string getCurrentTime(); 
///获取当前的系统时间,以string的形式返回 

class MyFile ///文件系统类 
{ 
private:
	static int AlltheFileNumber;
	static int toAllotFileID; ///用于分配文件的唯一ID 
	static string WR_Access_Permission[3];	
	///用于描述文件读写权限的静态字符串	
	enum prLevel ///枚举类型 
	{
		AllUser_WR = 0, ///所有的用户都可以读写 
		Creater_WR_Other_ReadOnly = 1, ///所有用户都可以读取,只有创建者才能编辑 
		OnlyCreater_WR=2, ///只有创建者才能查看文件内容和编辑,其它用户无法读写文件 
	};
	int FileID; ///文件的唯一标识,由类按顺序分配 
	string FileName; ///文件名 
	string FileContent; ///文件流内容 
	string CreateUser; ///文件创建用户 
	string CreateTime;  ///文件创建时间 
	string LastAlertTime; ///文件最后修改时间 
	string LastAlertUserName; ///最后修改文件的用户名 
	enum prLevel ProtectLevel; ///文件读写权限 
	int FileLength;  ///文件长度 
public:
	MyFile(){AlltheFileNumber++;} //无参构造函数
	~MyFile(){AlltheFileNumber--;} //析构函数 
	MyFile(string fileName,string fileContent,string createTime,string createUser,enum prLevel prl);
	int getFileLength(); ///获取文件内容的长度 
	void BuildFile(string creater,int WRflag); 
	///已经通过无参构造函数生成对象,现在通过用户输入文件信息 
	void AlertFile(string UserName); ///修改文件内容(重写or追加) 
	void showFileMessage(); 
	//显示文件信息(文件名,创建者,创建时间,最后修改时间,文件内容长度) 
	void showFileContent(); ///显示文件内容 
	bool operator < (const MyFile& rhs)const ///重载小于号,默认按照文件名的字典序从小到大排序 
	{
		return FileID < rhs.FileID;
	}
};


//_______________________________用户类_______________________________________________________ 
class FileUser  
{///使用文件的用户类 
private:
	string Name; ///文件用户的用户名 
	string Password; ///用户登录文件系统的密码 
public:
	vector<MyFile> FileList;  
	int FileNumber; ///创建过的文件数量 
	bool isAdministrator; ///是否是管理员,管理员可以读写和删除任何文件 
	FileUser(){}
	FileUser(string name,bool isAd); 
	string getName();
	string getPassWord();
	void setName(string name);
	void setPassword(string password); 
	void UserCreateFile();
};

/*
//_________FileSystem类_______________________________________________________________
class FileSystem{
public:
	static FileUser theCurrentUser; //当前的用户 
	vector<FileUser> theAdminist; ///文件系统管理员列表
	vector<FileUser> theOrderUser; ///文件系统普通用户列表
	void LoginUser();  ///用户登录(普通用户or系统管理员)
	void ExitLog(); ///退出当前用户登录 
	void showAlltheFile(); ///显示当前所有的文件
	void showCurrentUserFileList(); ///显示当前登录用户创建的所有文件
	void readOneFile(const MyFile& myfile); ///显示当前的文件
	void writeOneFile(MyFile& myfile); ///写文件
	void ReNameOneFile(MyFile & myfile); ///重命名文件  
	
	
}; 
*/
//________________________main函数____________________________________________________ 
int main()
{
	
	 
	
	return 0;	
} 




//________________________全局函数的实现_______________________________________ 
string getCurrentTime()
{
	time_t t = time(0); 
    char tmp[64]; 
    strftime( tmp, sizeof(tmp), "%Y/%m/%d %X",localtime(&t) ); 
    return string(tmp); 
}



//______________MyFile类的成员变量和成员函数定义如下______________________________________________________ 
int MyFile::AlltheFileNumber = 0;
int MyFile::toAllotFileID = 0; 
string MyFile::WR_Access_Permission[] = 
{
	string("所有用户可读写"),
	string("创建者可读写,其它用户只读"),
	string("创建者可读写,其它用户不可操作")
};

MyFile::MyFile(string fileName,string fileContent,string createTime,string createUser,enum prLevel prl)
{
	AlltheFileNumber++;
	FileID = ++toAlloteFileID; 
	FileName = fileName;
	CreateTime = createTime;
	FileContent = fileContent;
	CreateUser = createUser;
	ProtectLevel = prl;
	LastAlertUserName = CreateUser;
	FileLength = FileContent.length();	
	LastAlertTime = CreateTime;
} 

void MyFile::AlertFile(string UserName)
{
	if(ProtectLevel>0 && UserName!=CreateUser)
	{
		cout<<"此文件只能创建者修改!\n";
		return;	
	}		  
	cout<<"请选择操作方式:\n";
	cout<<"1.重写文件\n";
	cout<<"2.在文件后面追加内容\n";
	int op,t=1;
	while(t)
	{
		cout<<"请输入操作方式:_\b";
		cin>>op;
		if(op!=1||op!=2)
		{
			continue;	
		}
		t--;
		string Ask;
		switch (op)
		{
			case 1: 
				Ask = "写入";
				break;
			case 2:
				Ask = "追加"; 	
		} 
		cout<<"请输入要"<<Ask<<"的内容,每输入一行后按回车键,输入<END>结束输入\n";
		string Source,Line;
		while(Line!="<END>")
		{
			cout<<">>>";
			cin>>Line;
			Source += Line; 
		}
		switch (op)
		{
			case 1:
				FileContent = Source;
				break;
			case 2:
				FileContent += Source;
				break;
		}
		LastAlertUserName = UserName;
		LastAlertTime = getCurrentTime();
		FileLength = FileContent.length();
		cout<<"读写文件成功!\n";
		t = 1;
		string choose;
		while(t--)
		{
			cout<<"是否显示文件信息?Y/N _\b";
			cin>>choose;
			switch(choose[0])
			{
				case 'Y':
					showFileContent();
					break;
				case 'y':
					showFileContent();
					break;
				case 'N':
					break;
				case 'n':
					break;
				default:
					t++;
			}
		}
	} 
}
	
void MyFile::showFileMessage()
{
	cout<<"文件信息如下:\n";
	cout<<"---------------------------------------"<<endl;
	cout<<"|文件名          :"<<FileName<<endl;
	cout<<"|文件创建时间    :"<<CreateTime<<endl;
	cout<<"|文件创建用户    :"<<CreateUser<<endl;
	cout<<"|文件最后修改时间:"<<LastAlertTime<<endl;
	cout<<"|文件最后修改用户:"<<LastAlertUserName<<endl;
	cout<<"|文件长度        :"<<FileLength<<endl;
	cout<<"|文件读写权限    :"<<WR_Access_Permission[(int)ProtectLevel]<<endl;
	cout<<"---------------------------------------"<<endl;
} 

void MyFile::showFileContent()
{
	cout<<"文件"<<FileName<<"的内容如下:\n";
	cout<<FileContent<<endl; 
}

int MyFile::getFileLength()
{
	return FileLength; 
}

void MyFile::BuildFile(string creater,int WRflag=0)
{
	FileID = ++toAlloteFileID;
	CreateUser = LastAlertUserName = creater;
	cout<<"请输入文件名:______\b\b\b\b\b\b";
	cin>>FileName;
	cout<<"是否要输入文件内容?(Y/N)__\b";
	string s,op;
	int t = 1;
	string Source,Line="";
	while(t--)
	{
		cout<<"请输入Y或N:_\b";
		cin>>op;
		switch (op[0])
		{
			case 'Y':
			case 'y':
				cout<<"请输入要写入文件的内容,每输入一行后按回车键,输入<END>结束输入\n";
				Line = "";
				while(Line!="<END>")
				{
					cout<<">>>";
					cin>>Line;
					Source += Line; 
				}
				FileContent = Source;
				FileLength = Source.length(); 
				break;
			case 'N':
				break;
			case 'n':
				break;
			default:
				t++;
				break;
		}
	}
	LastAlertTime = CreateTime = getCurrentTime(); 
	if(WRflag>2) WRflag = 0;
	WRflag = max(0,WRflag);
	if(WRflag==0)
	{
		ProtectLevel = AllUser_WR;
	} 
	else if(WRflag==1)
	{
		ProtectLevel = Creater_WR_Other_ReadOnly;
	}
	else
	{
		ProtectLevel = OnlyCreater_WR;
	}
}



//__________________FileUser类的成员函数定义如下___________________________________________________ 

FileUser::FileUser(string name,bool isAd)
{
	Name = name, isAdministrator = isAd;
	FileNumber = 0;
}
string FileUser::getName()
{
	return Name;	
} 
string FileUser::getPassWord()
{
	return Password;
}
void FileUser::setName(string name)
{
	this->Name = name;
}
void FileUser::setPassword(string password)
{
	this->Password = password;
}
void FileUser::UserCreateFile()
{
	int t = 1;
	string op;
	while(t)
	{
		cout<<"确定要创建文件吗?Y/N _\b";
		cin>>op;
		switch (op[0])
		{
			case 'N':
				return;
				
			case 'n':
				return;
				
			case 'Y':
				t--;
				break;
				
			case 'y':
				t--;
				break; 
				
			default:
				cout<<"输入错误!请输入Y或N\n";
		}
	}
	MyFile CurrentFile = MyFile();
	int RWflag=-1;
	while(RWflag<0||RWflag>2)
	{
		cout<<"请输入要创建文件的读写权限(0,1,2):"<<endl;
		cout<<"	1.所有用户均可读写"<<endl;
		cout<<" 2.所有用户可读,只有创建者(您)才能修改文件内容"<<endl;
		cout<<" 3.您的个人私有文件,只有创建者(您)才能对文件读写,其它用户不能读写该文件";
		cout<<"请输入0或1或2:_\b"; 
		cin>>op;
		RWflag = op[0]-'0';
	}
	CurrentFile.BuildFile(this->Name,RWflag);
	cout<<"文件创建成功!\n"; 
	FileNumber = FileList.size();
}

posted @ 2019-12-24 01:51  Apare  阅读(6)  评论(0编辑  收藏  举报