?? shiyan_4.cpp
字號:
#include<iostream>
using namespace std;
#include<time.h>
struct wenjian
{
char name[50];//目錄名稱
int number;//目錄中文件個數
int num;//目錄中子目錄個數
struct tm tnow;//目錄創建時間
union
{
int size;//文件大小
int locate;//文件在位示圖中的起始位置
int weishitu[10][10];//位示圖
};
struct wenjian *wen[100];//橫向—本目錄文件
struct wenjian *list[100];//縱向—本目錄的子目錄
};
wenjian *dangqian,*p,*total[100];
int total_num(0);
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int menu()//命令菜單
{
cout<<ends<<"."<<endl;
cout<<ends<<".."<<endl;
cout<<ends<<"MD:在目錄文件中創建子目錄,同時搜索當前目錄最后一個目錄項,并保存指針信息"<<endl;
cout<<ends<<"CD:根據當前目錄切換到指定目錄"<<endl;
cout<<ends<<"RD:搜索所要刪除的目錄是否為空目錄,若是則刪除"<<endl;
cout<<ends<<"MK:在當前目錄中創建文件名稱(申請空間利用位示圖修改FAT)"<<endl;
cout<<ends<<"DEL:搜索所要刪除的文件是否存在,若是則刪除(恢復位示圖修改FAT)"<<endl;
cout<<ends<<"DIR:列出當前目錄的所有目錄項"<<endl;
cout<<ends<<"DIR1:列出當前目錄的位示圖"<<endl;
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int showweishitu()//顯示位示圖
{
int number=p->number;
while(number)
{
cout<<ends<<"file <"<<p->wen[number]->name<<"> 's locate is "<<p->wen[number]->locate<<endl;
number--;
}
for(int i=0;i<10;i++)
{
cout<<ends<<ends;
for(int j=0;j<10;j++)
{
cout<<dangqian->weishitu[i][j]<<"\t";
}
cout<<endl;
}
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int establish_cipan()//創建磁盤
{
total_num++;
strcpy(dangqian->name,"main_mulu");
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
dangqian->weishitu[i][j]=0;
}
}
dangqian->number=0;
dangqian->num=0;
time_t now;
now=time(0);
dangqian->tnow=*localtime(&now);
total[total_num]=dangqian;
p=total[total_num];
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int xianshi()//顯示目錄內容
{
cout<<ends<<1900+p->tnow.tm_year<<"-"<<p->tnow.tm_mon+1<<"-"<<p->tnow.tm_mday<<ends<<p->tnow.tm_hour<<":"<<p->tnow.tm_min<<":"<<p->tnow.tm_sec<<"\t"<<"\t"<<"<DIR>"<<"\t"<<"\t"<<"\t";
cout<<"."<<endl;
cout<<ends<<1900+p->tnow.tm_year<<"-"<<p->tnow.tm_mon+1<<"-"<<p->tnow.tm_mday<<ends<<p->tnow.tm_hour<<":"<<p->tnow.tm_min<<":"<<p->tnow.tm_sec<<"\t"<<"\t"<<"<DIR>"<<"\t"<<"\t"<<"\t";
cout<<".."<<endl;
int num=p->num;
int number=p->number;
while(num)//顯示子目錄
{
cout<<ends<<1900+p->list[num]->tnow.tm_year<<"-"<<p->list[num]->tnow.tm_mon+1<<"-"<<p->list[num]->tnow.tm_mday<<ends<<p->list[num]->tnow.tm_hour<<":"<<p->list[num]->tnow.tm_min<<":"<<p->list[num]->tnow.tm_sec<<"\t"<<"\t"<<"<DIR>"<<"\t"<<"\t"<<"\t";
cout<<p->list[num]->name<<endl;
num--;
}
while(number)//顯示文件
{
cout<<ends<<1900+p->wen[number]->tnow.tm_year<<"-"<<p->wen[number]->tnow.tm_mon+1<<"-"<<p->wen[number]->tnow.tm_mday<<ends<<p->wen[number]->tnow.tm_hour<<":"<<p->wen[number]->tnow.tm_min<<":"<<p->wen[number]->tnow.tm_sec<<"\t"<<"\t"<<"\t"<<"\t"<<"\t";
cout<<p->wen[number]->name<<endl;
number--;
}
cout<<"\t"<<"\t"<<"\t"<<p->number<<" 個文件"<<" "<<p->num<<" 個目錄"<<endl;
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int establish_mulu()//創建目錄
{
p->num++;
char name[50];
p->list[p->num]=new wenjian();
p: cin>>name;
int num=p->num-1;
while(num)
{
if(!strcmp(name,p->list[num]->name))
{
cout<<"\t"<<name<<" list is exist"<<endl;
goto p;
}
num--;
}
strcpy(p->list[p->num]->name,name);
p->list[p->num]->number=0;
p->list[p->num]->num=0;
time_t now;
now=time(0);
p->list[p->num]->tnow=*localtime(&now);
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int delete_mulu()//刪除目錄
{
char name[50];
cin>>name;
int num=p->num;
if(num==0)
{
cout<<"\t"<<"There isn't list to delete"<<endl;
}
else
{
while(num)
{
if(!strcmp(p->list[num]->name,name))
{
break;
}
num--;
}
if(num==0)
{
cout<<"\t"<<name<<" list isn't exist"<<endl;
}
else if(p->list[num]->number==0)
{
for(int i=num;i<p->num;i++)
{
p->list[i]=p->list[i+1];
}
p->num--;
}
else if(p->list[num]->number>0)
{
cout<<"\t"<<name<<" list isn't empty,so can't delete"<<endl;
}
}
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int establish_wenjian()//創建文件
{
p->number++;
p->wen[p->number]=new wenjian();
pp: cin>>p->wen[p->number]->name;
cin>>p->wen[p->number]->size;
int size=p->wen[p->number]->size,i,j;
int num=p->number-1;
while(num)
{
if(!strcmp(p->wen[p->number]->name,p->wen[num]->name))
{
cout<<"\t"<<p->wen[num]->name<<" file is exist"<<endl;
goto pp;
}
num--;
}
while(true)
{
i=rand()%10;
j=rand()%10;
if(dangqian->weishitu[i][j]==0)
{
p->wen[p->number]->locate=10*i+j+1;
while(true)
{
int ii=rand()%10;
int jj=rand()%10;
if(dangqian->weishitu[ii][jj]==0)
{
size--;
if(size==0)
{
dangqian->weishitu[i][j]=-1;
}
else
{
dangqian->weishitu[i][j]=ii*10+jj+1;
i=ii;
j=jj;
}
break;
}
}
break;
}
}
if(size>0)
{
while(size>1)
{
while(true)
{
int ii=rand()%10;
int jj=rand()%10;
if(dangqian->weishitu[ii][jj]==0)
{
dangqian->weishitu[i][j]=ii*10+jj+1;
i=ii;
j=jj;
break;
}
}
size--;
}
dangqian->weishitu[i][j]=-1;
}
time_t now;
now=time(0);
p->wen[p->number]->tnow=*localtime(&now);
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int delete_file()//刪除文件
{
bool tiaochu(false);
int delnumber(0);
char name[50];
cin>>name;
int number=p->number;
if(number==0)
{
cout<<"\t"<<"There isn't file to delete"<<endl;
}
else
{
while(number)
{
if(!strcmp(name,p->wen[number]->name))
{
delnumber=p->wen[number]->locate;
for(int i=number;i<p->number;i++)
{
p->wen[i]=p->wen[i+1];
}
p->number--;
}
number--;
}
if(delnumber!=0)
{
while(true)
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(i*10+j+1==delnumber)
{
if(dangqian->weishitu[i][j]==-1)
{
tiaochu=true;
dangqian->weishitu[i][j]=0;
break;
}
else
{
delnumber=dangqian->weishitu[i][j];
dangqian->weishitu[i][j]=0;
}
}
}
if(tiaochu)
{
break;
}
}
if(tiaochu)
{
break;
}
}
}
else if(delnumber==0)
{
cout<<"\t"<<name<<" file isn't exist"<<endl;
}
}
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int enter()//進入目錄
{
char name[50];
cin>>name;
int num=p->num;
if(num==0)
{
cout<<"\t"<<"There isn't list to enter"<<endl;
}
else
{
while(num)
{
if(!strcmp(name,p->list[num]->name))
{
total_num++;
total[total_num]=new wenjian();
total[total_num]=p->list[num];
p=p->list[num];
break;
}
num--;
}
if(num==0)
{
cout<<"\t"<<name<<" list isn't exist"<<endl;
}
}
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int exit()//退出目錄
{
if(total_num==1)
{}
else
{
total_num--;
p=total[total_num];
}
return 0;
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
int main()
{
dangqian=new wenjian();
p=new wenjian();
srand((unsigned)time(NULL));
establish_cipan();
char mingling[20];
while(strcmp(mingling,"exit"))
{
cout<<endl;
int num=1;
while(num<=total_num)
{
cout<<"\\"<<total[num]->name;
num++;
}
cout<<">";
cin>>mingling;
if(!strcmp(mingling,"$"))
{
menu();
}
else if(!strcmp(mingling,"DIR") || !strcmp(mingling,"dir"))
{
xianshi();
}
else if(!strcmp(mingling,"cd") || !strcmp(mingling,"CD"))
{
enter();
}
else if(!strcmp(mingling,"cd..") || !strcmp(mingling,"CD.."))
{
exit();
}
else if(!strcmp(mingling,"DIR1") || !strcmp(mingling,"dir1"))
{
showweishitu();
}
else if(!strcmp(mingling,"MD") || !strcmp(mingling,"md"))
{
establish_mulu();
}
else if(!strcmp(mingling,"RD") || !strcmp(mingling,"rd"))
{
delete_mulu();
}
else if(!strcmp(mingling,"MK") || !strcmp(mingling,"mk"))
{
establish_wenjian();
}
else if(!strcmp(mingling,"DEL") || !strcmp(mingling,"del"))
{
delete_file();
}
else if(!strcmp(mingling,"exit") || !strcmp(mingling,"EXIT"))
{
}
else
{
cout<<"\t"<<mingling<<" isn't exist"<<endl;
}
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -