📄 磁盘.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 + -