?? 實驗四.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 + -