?? 模擬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 + -