📄 模拟ms—dos.cpp
字号:
#include<iostream.h>
#include<math.h>
#include<string.h>
#include<iomanip.h>
const int SIZE=031;//定义最大的物理块数
struct file{
char Name;//文件名
int Fd;//起始块号
};//文件目录
file arr[4];
int i;
int FAT[SIZE],*p;
void insert(); //插入函数
void save(); //存函数
void main()
{ //主函数
arr[0].Name='A';
arr[0].Fd=002;
FAT[000]='FDF';
p=&FAT[000];
FAT[001]='FFF';
*(p+002)=4;
*(p+003)=000;
*(p+004)=20;
*(p+010)=000;
*(p+015)=000;
*(p+020)=21;
*(p+021)='FFF';
*(p+024)=000;
*(p+025)=000;
while(1){
cout<<endl<<endl<<endl<<endl<<endl;
cout<<"**************用户要求输入*************"<<endl;
cout<<"| |"<<endl;
cout<<"| 1.插入新记录 |"<<endl;
cout<<"| 2.存文件 |"<<endl;
cout<<"| |"<<endl;
cout<<"***************************************"<<endl;
int n;
cout<<"请输入选择"<<endl;
cin>>n;
switch(n)
{
case 1:
{
cout<<"您选择的是插入新记录"<<endl;
cout<<"文件目录:"<<arr[0].Name<<" "<<arr[0].Fd<<endl;
cout<<"输出FAT表如下:"<<endl;
cout<<setw(15)<<"FAT[000]="<<FAT[000]<<endl;
cout<<setw(15)<<"FAT[001]="<<FAT[001]<<endl;
cout<<setw(15)<<"FAT[002]="<<FAT[002]<<endl;
cout<<setw(15)<<"FAT[003]="<<FAT[003]<<endl;
cout<<setw(15)<<"FAT[004]="<<FAT[004]<<endl;
cout<<setw(15)<<"FAT[010]="<<FAT[010]<<endl;
cout<<setw(15)<<"FAT[015]="<<FAT[015]<<endl;
cout<<setw(15)<<"FAT[020]="<<*(p+020)<<endl;
cout<<setw(15)<<"FAT[021]="<<FAT[021]<<endl;
cout<<setw(15)<<"FAT[024]="<<FAT[024]<<endl;
cout<<setw(15)<<"FAT[025]="<<FAT[025]<<endl;
insert();
}
case 2:
{
cout<<"您选择的是存文件"<<endl;
save();
}
default:
cout<<"您选择错误,请重新选择"<<endl;
break;
}
}
}
void insert() //插入函数
{
int j;//空闲块号
int k;
int m;//插入的逻辑记录号
for(k=0;k<=4;k++){
cout<<"输入文件名:"<<endl;
cin>>arr[k].Name;
cout<<"查文件目录"<<endl;
if(arr[k].Name!=arr[0].Name)
{
cout<<"无此文件"<<endl;
}
else if(arr[k].Name==arr[0].Name)
{
cout<<"输入逻辑记录号:"<<endl;
cin>>arr[k].Fd;
cout<<"查有无空闲块?"<<endl;
if(FAT[i]!=0)
{
cout<<"______无空闲块"<<endl;
return;
}
else if(FAT[i]==000)
{
cout<<"有空闲块"<<endl;
m=arr[k].Fd;
j=003; //FAT[03]为空闲块号
*(p+021)=j;
*(p+j)=m; //把逻辑记录号m存入FAT[j]里
*(p+m)=24; //假定FAT[M]对应的物理块号为024
*(p+024)='FFF';//修改链接指针
cout<<"插入的逻辑记录存入空闲块"<<endl;
cout<<"输出FAT表如下:"<<endl;
cout<<setw(15)<<"FAT[000]="<<FAT[000]<<endl;
cout<<setw(15)<<"FAT[001]="<<FAT[001]<<endl;
cout<<setw(15)<<"FAT[002]="<<FAT[002]<<endl;
cout<<setw(15)<<"FAT[003]="<<FAT[003]<<endl;
cout<<setw(15)<<"FAT[004]="<<FAT[004]<<endl;
cout<<setw(15)<<"FAT[010]="<<FAT[010]<<endl;
cout<<setw(15)<<"FAT[015]="<<FAT[015]<<endl;
cout<<setw(15)<<"FAT[020]="<<FAT[020]<<endl;
cout<<setw(15)<<"FAT[021]="<<FAT[021]<<endl;
cout<<setw(15)<<"FAT[m]="<<*(p+m)<<endl;
cout<<setw(15)<<"FAT[024]="<<FAT[024]<<endl;
cout<<setw(15)<<"FAT[025]="<<FAT[025]<<endl;
}
}
break;
}
}
void save() //存文件函数
{
int n;
int x; //输入的逻辑记录个数
int s=4;//记录空闲块数
for(n=0;n<=4;n++)
{
cout<<"输入文件名:"<<endl;
cin>>arr[n].Name;
if(arr[n].Name==arr[0].Name)
{
cout<<"有同名文件"<<endl;
}
else if(arr[n].Name!=arr[0].Name)
{
cout<<"输入逻辑记录个数:"<<endl;
cin>>x;
if(s<x)
{
cout<<"磁盘空间不够"<<endl;
}
else if(s>=x)
{
arr[1].Name=arr[n].Name;
arr[1].Fd=10;
*(p+010)=15;
*(p+015)=25;
*(p+025)='FFF';//把逻辑记录存入相应的物理块中
cout<<"存入文件后的文件目录为:"<<endl;
cout<<arr[1].Name<<" "<<arr[1].Fd<<endl;
cout<<"把逻辑记录存入相应的物理块中"<<endl;
cout<<"修改后的FAT表为:"<<endl;
cout<<setw(15)<<"FAT[000]="<<FAT[000]<<endl;
cout<<setw(15)<<"FAT[001]="<<FAT[001]<<endl;
cout<<setw(15)<<"FAT[002]="<<FAT[002]<<endl;
cout<<setw(15)<<"FAT[003]="<<FAT[003]<<endl;
cout<<setw(15)<<"FAT[004]="<<FAT[004]<<endl;
cout<<setw(15)<<"FAT[010]="<<FAT[010]<<endl;
cout<<setw(15)<<"FAT[015]="<<FAT[015]<<endl;
cout<<setw(15)<<"FAT[020]="<<FAT[020]<<endl;
cout<<setw(15)<<"FAT[021]="<<FAT[021]<<endl;
cout<<setw(15)<<"FAT[024]="<<FAT[024]<<endl;
cout<<setw(15)<<"FAT[025]="<<FAT[025]<<endl;
}
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -