📄 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 + -