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

📄 磁盘.cpp

📁 c ++下的磁盘扫描程序
💻 CPP
字号:
#include<iostream>
#include<stdlib.h>
#include <ctime>

using namespace std;
void MyDelay( long );
void MyDelay( long million )
{
	time_t tm1, tm2;
	tm1 = clock();
	while ( ((tm2 = clock()) - tm1 ) < million );
}

typedef struct{
	int a[91][3];//文件大小/起使磁道/扇区
	int b[7][13];//磁道/扇区
	int c[6];//文件个数/总大小/可用磁道/扇区/文件号/扇区读取间隔
}Sz;

void CreatSz(Sz &a)
{
	int i,j;
	for(i=0;i<91;i++)
		for(j=0;j<3;j++)
			a.a[i][j]=0;
	for(i=0;i<7;i++)
		for(j=0;j<13;j++)
			a.b[i][j]=0;
	for(i=0;i<6;i++)
		a.c[i]=0;
}

void screen(Sz a)
{
	int i,j;
	cout<<"\n\n\t\t\t  磁  盘  模  拟  程  序\n\n";
	cout<<"\t\t磁盘使用情况(□ 可用空间   ■ 已用空间):\n\n";
	cout<<"\t\t 扇区 :    0 1 2 3 4 5 6 7 8 9101112\n";
	for(i=0;i<7;i++)
	{
		cout<<"\t\t磁道"<<i<<" :   ";
		for(j=0;j<13;j++)
		{
			if(a.b[i][j]==0)
				cout<<"□";
			else
				cout<<"■";
		}
		cout<<endl;
	}
	cout<<"\n\t\t\t\t\t扇区读取间隔: "<<a.c[5]<<endl;
	cout<<"\n\t\t控 制 操 作:\n";
	cout<<"\t\t\t1. 查看文件          2. 添加文件\n";
	cout<<"\t\t\t3. 删除文件          4. 格式化磁盘\n";
	cout<<"\t\t\tQ. 退出\n";
	cout<<"\n\t\t\t请选择:";
}

void ins(Sz &a)
{
	int m,n,i;
	n=a.c[4];
	system("cls");
	cout<<"\n\n\n\n\t\t\t可用空间: "<<91-a.c[1]<<endl;
	cout<<"\n\t\t\t请输入文件大小: ";
	cin>>m;
	if(m<=(91-a.c[1])&&m>0)
	{
		a.c[0]++;
		a.c[1]+=m;
		a.a[n][0]=m;
		a.a[n][1]=a.c[2];
		a.a[n][2]=a.c[3];
		a.c[4]++;
		while(a.a[a.c[4]][0]!=0)
			a.c[4]++;
		for(i=0;i<m;i++)
		{
			a.b[a.c[2]][a.c[3]]=n+1;
			a.c[3]=(a.c[3]+a.c[5]) % 13;
			if(a.c[3]==0)
				a.c[2]++;
			while(a.b[a.c[2]][a.c[3]]!=0)
			{
				a.c[3]=(a.c[3]+a.c[5]) % 13;
				if(a.c[3]==0)
				a.c[2]++;
			}
		}
		cout<<"\n\n\t\t\t操作成功完成!\n";
	}
	else 
	{
		cout<<"\n\n\t\t\t磁盘空间不足,操作取消!\n";
	}
	MyDelay(2000);
}

void del(Sz &a)
{
	system("cls");
	int m,n,i,j,x,z;
	char k;
	j=0;
	x=0;
	cout<<"\n\n\n\t\t已 存 在 文 件 :\n\n\t\t";
	for(i=0;i<a.c[0];i++)
	{
		while((a.a[j][0]==0)&&(j<91))
				j++;
			cout<<j+1<<"\t";
			x++;
			if(x>9)
			{
				x=0;
				cout<<"\n\t\t";
			}
			j++;
	}
	cout<<endl;
	cout<<"\n\t\t请输入要删除的文件号: ";
	cin>>z;
	if(a.a[z-1][0]==0)
	{
		cout<<"\n\n\t\t\t文件"<<z<<"不存在\t";
		goto en;
	}
	cout<<"\n\n\t\t文件 "<<z<<" 将要被删除:   Y. 确认   N. 取消\n";
	cin>>k;
	if(k=='y'||k=='Y')
	{
		m=a.a[z-1][1];
		n=a.a[z-1][2];	
		for(i=0;i<a.a[z-1][0];i++)
		{
			a.b[m][n]=0;
			n=(n+a.c[5]) % 13;
			if(n==0)
				m++;
			while(a.b[m][n]!=z&&m<7&&n<13)
			{
				n=(n+a.c[5]) % 13;
				if(n==0)
				m++;
			}		
		}
		if(a.c[4]>z-1)
			a.c[4]=z-1;
		a.c[0]--;
		a.c[1]-=a.a[z-1][0];
		if(a.a[z-1][1]<a.c[2])
		{
			a.c[2]=a.a[z-1][1];
			a.c[3]=a.a[z-1][2];
		}
		else
			if(a.a[z-1][1]==a.c[2])
			{
				m=a.a[z-1][1];
				n=0;
				while(a.b[m][n]!=0)
				{
					n=(n+a.c[5])%13;
				}
				a.c[3]=n;
			}
		a.a[z-1][0]=0;
		a.a[z-1][1]=0;
		a.a[z-1][2]=0;
		cout<<"\n\n\t\t\t删除操作成功完成!";
	}
	else
	{
		cout<<"\n\n\t\t\t删除操作被取消!";
	}
en:	MyDelay(2000);
}

void dir(Sz &a)
{
	int i,j;
	j=0;
	system("cls");
	cout<<"\n\t\t文件名\t文件大小\n\n";
	for(i=0;i<a.c[0];i++)
	{
		while((a.a[j][0]==0)&&(j<91))
				j++;
			cout<<"\t\t\t"<<j+1<<"\t"<<a.a[j][0]<<endl;
			j++;
			
	}
	cout<<"\n\t\t共有文件数: "<<a.c[0]<<"\n";
	cout<<"\t\t已用空间: "<<a.c[1]<<endl;
	cout<<"\t\t可用空间: "<<91-a.c[1]<<endl;
	cout<<"\n\t\t\t\t R. 返回\n";
	char m;
	cin>>m;
}

void set(Sz &a)
{
	int n;
	MyDelay(2000);
	system("cls");
	cout<<"\n\n\n\n\n\n\t\t请输入扇区读取间隔(2-5): ";
	cin>>n;
	if(n<2||n>5)
		cout<<"\n\n\t\t\t输入数据超出范围,设置失败!\n";
	else
	{
		a.c[5]=n;
		cout<<"\n\n\t\t\t\t设置成功!\n";
	}

}

void clr(Sz &a)
{
	char m;
	system("cls");
	cout<<"\n\n\n\n\n\n\t\t\t确认要删除全部数据?\n\n\t\t\t Y.确认   N. 取消\n";
	cin>>m;
	switch(m)
	{
		case 'Y':
		case 'y':  
			CreatSz(a);
			a.c[5]=3;
			cout<<"\n\t\t\t 数据已删除!\n";
			set(a);
			break;
		default:	cout<<"\n\t\t\t 操作已取消!\n";
	}
	MyDelay(2000);
}

void main()
{	
	char n;
	Sz a;
	CreatSz(a);
	a.c[5]=3;
re:	system("cls");
	screen(a);
	cin>>n;
    switch(n)
	{
	case '1':	dir(a);
			break;
	case '2':	ins(a);
			break;
	case '3':	del(a);
			break;
	case '4':   clr(a);
			break;
	case 'q':
	case 'Q':   exit(0);
		break;
	default:	goto re;
	}
	goto re;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -