模拟磁盘文件管理的程序.docx
- 文档编号:13143589
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:19
- 大小:155.99KB
模拟磁盘文件管理的程序.docx
《模拟磁盘文件管理的程序.docx》由会员分享,可在线阅读,更多相关《模拟磁盘文件管理的程序.docx(19页珍藏版)》请在冰点文库上搜索。
模拟磁盘文件管理的程序
模拟磁盘文件管理的程序
一、课程设计内容
⑴自定义磁盘文件管理的数据结构;
⑵能够自由创建、修改、删除文件;
⑶文件具有一定自定义的属性;
⑷能够显示当前系统文件的状态。
二、课程设计的数据结构说明
程序中定义了两个类:
classfile//文件类
{private:
charname[10];//文件名
public:
inttag;//删除标记1:
已删0:
未删
file(){}
char*getname(){returnname;}//获取文件名
intgettag(){returntag;}//获取删除标记
intgetlength(){returnlength;}//获取文件大小
intgetblocknum(){returnblocknum;}//磁盘块数
intgetblocksum1(){returnblocksum1;}//磁盘块号的始点
intgetblocksum2(){returnblocksum2;}//磁盘块号的终点
intlength,blocknum,blocksum1,blocksum2;
voidsetname(charna[]){strcpy(name,na);}//设置文件名
voiddelwenjian(){tag=1;}//设置删除标记1:
已删0:
未删
voidcreatfile(char*na,intL,intnum,ints1,ints2)//创建文件
voiddeltefile(char*na){tag=1;strcpy(name,na);}//删除文件
voiddisp()//输出文件信息
classfdatabase//文件库类
{private:
inttop;//文件记录指针
filef[50];
public:
fdatabase(){top=-1;}//构造函数
intsearch(char*fname)//按文件名查找
intcreatfile(char*na,intL,intnum,ints1,ints2)//创建文件时先查找是否存在
intdeltefile(char*na)//删除文件时先查找是否存在
voiddisp()//输出所有文件信息
};
三、课程设计的模板说明
1、初始化,建立文件系统
输入磁盘大小(G),每个盘块大小(M),自动建立位示图,位示图字长定为32位
输出位示图的行数,以及行号、列号与磁盘块号的转换公式(都从0开始编号)。
2、循环选择执行以下功能
1、存储文件
输入建立的文件名和文件大小,如果该文件名已经存在,则输出不能建立的信息否则计算所需的磁盘块数
为其分配足够多的磁盘块,并记录下来
输出所占用的磁盘块号
2、删除文件
输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块
删除该文件名
3、显示位示图情况
显示位示图的情况
显示剩余磁盘块的数目
4、显示文件列表
显示文件名,文件大小,占用的磁盘块数目和磁盘块号
四、课程设计的源代码
#include
#include
#include
#include
#include
inti=0,j=0,sum=0,tt=0,r,ii,k,g,m;
inta[100][32];
classfile//文件类
{private:
intno;//文件编号
charname[10];//文件名
public:
inttag;//删除标记1:
已删0:
未删
file(){}
char*getname(){returnname;}//获取姓名
intgettag(){returntag;}//获取删除标记
intgetno(){returnno;}//获取文件编号
intgetlength(){returnlength;}//获取文件大小
intgetblocknum(){returnblocknum;}//磁盘块数
intgetblocksum1()//磁盘块号的始点
{returnblocksum1;}
intgetblocksum2()//磁盘块号的终点
{returnblocksum2;}
intlength;//文件大小
intblocknum;//盘块数
intblocksum1;//所占盘块号的始点
intblocksum2;//所占盘块号的终点
voidsetname(charna[])//设置文件名
{strcpy(name,na);}
voiddelwenjian(){tag=1;}//设置删除标记1:
已删0:
未删
voidcreatfile(char*na,intL,intnum,ints1,ints2)//创建文件
{tag=0;
length=L;
blocknum=num;
blocksum1=s1;
blocksum2=s2;
strcpy(name,na);
blocknum=length/m;//盘块数=文件大小/盘块大小
if(length%m!
=0)//盘块数取上整
blocknum=blocknum+1;
cout<<"所需磁盘块数:
"< if((sum+blocknum)<=32)//所有盘块数只占用一行,直接赋值 {for(;j<(sum+blocknum);j++) a[i][j]=1; sum=sum+blocknum;//再进行下面文件的盘块数累加 } else {//占用多行,先赋值整行 for(;j<32;j++) a[i][j]=1; i=i+1; for(j=0;j<(sum+blocknum)-32;j++)//再进行剩余项赋值 { a[i][j]=1; } sum=sum+blocknum-32; } tt=tt+blocknum;//输出文件所占用的盘块号 cout<<"所占磁盘块号: "< blocksum1=tt-blocknum; blocksum2=tt-1; } voiddeltefile(char*na)//删除文件 {tag=1; strcpy(name,na); } voiddisp()//输出文件信息 {cout< }; classfdatabase//文件库类 {private: inttop;//文件记录指针 filef[50]; public: fdatabase()//构造函数 {top=-1;} intsearch(char*fname)//按文件名查找 { for(ii=0;ii<=top;ii++) {if(strcmp(f[ii].getname(),fname)==0&&f[ii].tag==0) return0; } return1; } intcreatfile(char*na,intL,intnum,ints1,ints2)//创建文件时先查找是否存在 {intp; p=search(na); if(p==1) {top++; f[top].creatfile(na,L,num,s1,s2); return1;} else {cout<<"! ! ! 该文件已存在,不能创建! ! ! \n\n"; return0;} } intdeltefile(char*na)//删除文件时先查找是否存在 {intb,p,x=0,n1,n2,q1,q2,t; p=search(na); if(p==0)//若文件存在 {//进行删除文件赋值 f[ii].tag=1; b=f[ii].length/m;//盘块数=当前文件大小/盘块大小 if(ii==0)//对第一个删除文件进行赋值 for(k=0;k a[x][k]=0; else{ n1=(f[ii-1].blocksum2+1)/32;//被查找的文件之前文件所占用的盘块数/32,//大于0表示跨行 n2=(f[ii].blocksum2+1)/32;//所有文件所占用的盘块数/32,大于0表示跨行 q1=(f[ii-1].blocksum2+1)-n1*32;//当前文件的开始盘块号 q2=(f[ii].blocksum2+1)-n2*32;//用于跨行后计算盘块号 t=n2-n1; if(t==0)//若n2与n1相等,表明当前所有被占用盘块在同一行 for(k=q1;k<1+b;k++) a[n2][k]=0; else {if((f[ii-1].blocksum2+1)%32==0)//前面所占用的盘块数是32倍数 {x=x+n1;//当前文件赋值 for(;t-1>=0;t--,x++)//循环进行整行赋值 for(k=0;k<32;k++) a[x][k]=0; x=n2;//对剩余项赋值 for(k=0;k a[x][k]=0; } else//对当前文件前几项赋值 {x=n1; for(k=q1;k<32;k++) a[x][k]=0; x=x+1; intt1=t; for(;t-1>0;t--,x++)//中间整行赋值 for(k=0;k<32;k++) a[x][k]=0; x=n2;//最后剩余项赋值 for(k=0;k<(f[ii].blocksum2+1)-t1*32;k++) a[x][k]=0; } } return1;} } else {cout<<"该文件不存在"; return0;} } voiddisp()//输出所有文件信息 { for(inti=0;i<=top;i++) if(f[i].tag==0) f[i].disp(); } }; voidbit_map(intI) { ints=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 磁盘 文件 管理 程序