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

📄 实验四.cpp

📁 用高级语言编写和调试一个简单的文件系统
💻 CPP
字号:
#include "stdlib.h"
#include "stdio.h"
#include "iostream.h"
#include "string.h"
#define NULL 0
int count=0;
struct file{
	char name[10];
	int code;//保护码
	int size;
	char pwrite;//读写指针
};
struct user{
	char name[10];
	struct file *list;//目录指针
};
//初始化运行文件表AFD
struct file 
one[10]={{"a1",0,10,0},{"a2",2,10,0},{"a3",1,10,0},
			{"a4",2,10,0},{"a5",2,10,0},{"a6",2,10,0},{"a7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file 
two[10]={{"b1",0,10,0},{"b2",2,10,0},{"b3",1,10,0},
			{"b4",2,10,0},{"b5",2,10,0},{"b6",2,10,0},{"b7",2,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file 
three[10]={{"c1",0,10,0},{"c2",2,10,0},{"c3",1,10,0},
			{"c4",2,10,0},{"c5",2,10,0},{"c6",2,10,0},{"c7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file 
four[10]={{"d1",0,10,0},{"d2",2,10,0},{"d3",1,10,0},
			{"d4",2,10,0},{"d5",2,10,0},{"d6",2,10,0},{"d7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file 
fine[10]={{"e1",0,10,0},{"e2",2,10,0},{"e3",1,10,0},
			{"e4",2,10,0},{"e5",2,10,0},{"e6",2,10,0},{"e7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file 
six[10]={{"f1",0,10,0},{"f2",2,10,0},{"f3",1,10,0},
			{"f4",2,10,0},{"f5",2,10,0},{"f6",2,10,0},{"f7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file 
seven[10]={{"g1",0,10,0},{"g2",2,10,0},{"g3",1,10,0},
			{"g4",2,10,0},{"g5",2,10,0},{"g6",2,10,0},{"g7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file 
eight[10]={{"h1",0,10,0},{"h2",2,10,0},{"h3",1,10,0},
			{"h4",2,10,0},{"h5",2,10,0},{"h6",2,10,0},{"h7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file 
nine[10]={{"j1",0,10,0},{"j2",2,10,0},{"j3",1,10,0},
			{"j4",2,10,0},{"j5",2,10,0},{"j6",2,10,0},{"j7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file
ten[10]={{"k1",0,10,0},{"k2",2,10,0},{"k3",1,10,0},
			{"k4",2,10,0},{"k5",2,10,0},{"k6",2,10,0},{"k7",1,10,0},{"0",0,0,0},
			{"0",0,0,0},{"0",0,0,0}};
struct file UFD[10];
struct file AFD[5]={{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0}};
//初始化用户名
struct user 
use[10]={{"number1",one},{"number2",two},{"number3",three},{"number4",four},
			{"number5",fine},{"number6",six},{"number7",seven},{"number8",eight},
			{"number9",nine},{"number10",ten}};
struct user MFD[1]={{"0",0}};

void	running();//声明一系列的操作
void 	delet();	void	write();
void	open();		void	close();
void	bye();		void	read();
void	create();	void    input();


void main(){     //主函数
	input();
	running();
	cout<<"操作己结束"<<endl;
}

void running(){  //根据输入的命令来执行相应的操作
	char order;
	int i;
	cout<<endl<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	cout<<"用户的所有文件如下:"<<endl;
	for(i=0;i<10;i++){                //显示用户的文件

		cout<<UFD[i].name<<"\t";
	}
	cout<<endl<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
    cout<<"           请选择操作命令(输入代号):"<<endl;
	cout<<"c-create	 d-delete	o-open	s-close	 \nr-read	  w-write	b-bye	t.exit(重选用户)"<<endl;
	cout<<endl<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	cout<<"请输入命令:"<<endl;
	cin>>order;                      //选择某一种功能
	switch(order){
		case 'c' :		create();break;    //创建
		case 'd' :		delet();break;   //删除
		case 'o' :		open();break;       //打开
		case 's' :		close();break;     //关闭
		case 'r' :		read();break;      //读
		case 'w' :		write();break;    //写
		case 'b' :		bye();break;      //
		case 't' :		input();break;
		default  :		cout<<"输入命令出错,请重输"<<endl<<endl;running();
	}

	

}

void  delet(){   //具体的删除操作实现
	char name[10];
	int i,flag;
	do{
		cout<<"请输入文件名: "<<endl<<endl;
		cin>>name;
		flag=0;
		for(i=0;i<10;i++){
			if(strcmp(UFD[i].name,name)){//如果没有这个文件
				flag=1;		
			}
			else{
				flag=0;
				strcpy(UFD[i].name,"0");//清空文件
				UFD[i].code=0;
				UFD[i].pwrite=0;
				UFD[i].size=0;
				cout<<"该文件己被删除"<<endl;
				break;
			}
		}
		if(flag==1)
		cout<<"无此文件,请重新输入"<<endl;	
	}while(flag==1);
	cout<<endl;
	running();
}
void open(){      //具体的打开操作实现
	char name[10];
	int i,j,flag;
	if(count==5){
		cout<<"运行文件队列己满"<<endl;
		running();
	}
	else{
		do{
			cout<<"请输入文件名: "<<endl;
			cin>>name;
			flag=0;
			for(i=0;i<10;i++){
				if(strcmp(UFD[i].name,name)){//如果没有这个文件
					flag=1;		
				}
				else{
					flag=0;
					break;
				}
			}
			if(flag==1)
			cout<<"无此文件,请重新输入"<<endl;	
		}while(flag==1);
		for(j=0;j<5;j++){
			if(strcmp(AFD[j].name,name))//如果没有这个文件
				flag=1;
			else{
				flag=0;
				break;
			}
		}
		if(flag==1)
			for(j=0;j<5;j++){
				if(!strcmp(AFD[j].name,"0")){
					AFD[j]=UFD[i];
					cout<<"文件己打开"<<endl;
					count++;
					break;
				}
			}
		else cout<<"该文件己经在打开队列中"<<endl;
		cout<<endl;
		running();
	}
}

void close(){   //具体的关闭操作实现
	char name[10];
	int j,flag;
	cout<<"请输入文件名: "<<endl;
	cin>>name;
	flag=0;
	for(j=0;j<5;j++){
		if(strcmp(AFD[j].name,name)){//如果没有这个文件
			flag=1;		
		}
		else{
			flag=0;
			strcpy(AFD[j].name,"0");//清空文件
			AFD[j].code=0;
			AFD[j].pwrite=0;
			AFD[j].size=0;
			cout<<"运行队列中的该文件己被关闭"<<endl;
			break;
		}
	}
	if(flag==1)
		cout<<"运行队列中无此打开的文件,请重新操作"<<endl;	
	cout<<endl;
	running();
}

void bye(){     //保存当前文件目录
	int i,j;
	for(i=0;i<5;i++){
		for(j=0;j<10;j++){
			if(!strcmp(AFD[i].name,UFD[j].name)){
				UFD[i]=AFD[i];
				break;
			}
		}
	}	
	cout<<"文件目录己保存"<<endl;
	cout<<endl;
}

void read(){     //读出文件的具体实现
	char name[10];
	int j,flag=0;
	cout<<"请输入文件名: "<<endl;
	cin>>name;
	for(j=0;j<5;j++){	
		if(!strcmp(AFD[j].name,name)){//如果AFD有这个文件
			flag=1;	break;	
		}
	}
	if(flag==1)
		if(AFD[j].code==0||AFD[j].code==2){
			AFD[j].pwrite='R';
			cout<<"文件的状态是正在读"<<endl;
		}
		else cout<<"无权限写此文件"<<endl;
	else{ 
			cout<<"运行队列中无此文件,请先打开文件"<<endl;
	}
	cout<<endl;
	running();
}
	
void write(){      //写入文件的实现
	char name[10];
	int j,flag=0;
	cout<<"请输入文件名: "<<endl;
	cin>>name;
	for(j=0;j<5;j++){	
		if(!strcmp(AFD[j].name,name)){//如果AFD有这个文件
			flag=1;	break;	
		}
	}
	if(flag==1)
		if(AFD[j].code==1||AFD[j].code==2){
			AFD[j].pwrite='W';
			cout<<"文件的状态是正在写"<<endl;
		}
		else cout<<"无权限写此文件"<<endl;
	else
		cout<<"运行队列中无此文件,请先打开文件"<<endl;
	cout<<endl;
	running();
}


void create(){      //创建的代码实现
	char name[10];
	int i,j=0,flag;
	for(i=0;i<10;i++){
		if(!strcmp(UFD[i].name,"0"))
		j++;
	}
	if(j>9){
		cout<<"文件夹己满,请先删除"<<endl;//cout<<j;
		running();
	}	
	else{	
		do{
			cout<<"请输入文件名: "<<endl;
			cin>>name;
			flag=0;
			for(i=0;i<10;i++){
				if(!strcmp(UFD[i].name,name)){//如果有重名的文件
					cout<<"文件名重复,请重新输入"<<endl;
					flag=1;	break;	
				}
			}
		}while(flag==1);
		for(i=0;i<10;i++){
			if(!strcmp(UFD[i].name,"0")){//找到第一个空的文件
				strcpy(UFD[i].name,name);
				do{	
					cout<<"请输入保护码(选择0-2,0-可读,1-可写,2-可读写):"<<endl;
					cin>>UFD[i].code;
					if(UFD[i].code!=0&&UFD[i].code!=1&&UFD[i].code!=2)
					cout<<"输入错误,重新输入保护码"<<endl;
				}while(UFD[i].code!=0&&UFD[i].code!=1&&UFD[i].code!=2);
				cout<<"请输入文件长度(选择数字):"<<endl;
				cin>>UFD[i].size;
				cout<<"己建立文件"<<UFD[i].name<<endl;
				break;
			}	
		}
		running();
	}
}

void input(){     //输入用户名
	char name;
	int i;
	printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("                 文件系统                                      \n");
    printf("                                                               \n");
    printf("  网络工程4班        罗志恒         3104007319            \n");
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    
	cout<<endl<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	cout<<"	请选择以下用户名(输入数字):"<<endl;
	cout<<"1.one  2.two	 3.three  4.four  5.fine  \n6.six	 7.seven  8.eigh  9.tnine  0.ten	"<<endl;
	cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl<<endl;
	cout<<"请输入用户名:";
	cin>>name;
	switch(name){
		case '1':		for(i=0;i<10;i++)UFD[i]=one[i];MFD[0]=use[1];running();break;
		case '2':		for(i=0;i<10;i++)UFD[i]=two[i];MFD[0]=use[1];running();break;
		case '3':		for(i=0;i<10;i++)UFD[i]=three[i];MFD[0]=use[2];running();break;
		case '4':		for(i=0;i<10;i++)UFD[i]=four[i];MFD[0]=use[3];running();break;
		case '5':		for(i=0;i<10;i++)UFD[i]=fine[i];MFD[0]=use[4];running();break;
		case '6':		for(i=0;i<10;i++)UFD[i]=six[i];MFD[0]=use[5];running();break;
		case '7':		for(i=0;i<10;i++)UFD[i]=seven[i];MFD[0]=use[6];running();break;
		case '8':		for(i=0;i<10;i++)UFD[i]=eight[i];MFD[0]=use[7];running();break;
		case '9':		for(i=0;i<10;i++)UFD[i]=nine[i];MFD[0]=use[8];running();break;
		case '0':		for(i=0;i<10;i++)UFD[i]=ten[i];MFD[0]=use[9];running();break;
		default :		cout<<"输入用户名出错"<<endl;input();
	}	
}

⌨️ 快捷键说明

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