⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 模拟ms—dos.cpp

📁 操作系统各个方面的编程
💻 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 + -