📄 实验四.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 + -