ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:155.99KB ,
资源ID:13143589      下载积分:8 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13143589.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(模拟磁盘文件管理的程序.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

模拟磁盘文件管理的程序.docx

1、模拟磁盘文件管理的程序模拟磁盘文件管理的程序一、 课程设计内容 自定义磁盘文件管理的数据结构; 能够自由创建、修改、删除文件; 文件具有一定自定义的属性; 能够显示当前系统文件的状态。二、 课程设计的数据结构说明程序中定义了两个类:class file/文件类private: char name10; /文件名 public: int tag; /删除标记 1:已删 0:未删file( ) char *getname( )return name; /获取文件名 int gettag( )return tag; /获取删除标记 int getlength() return length; /获取

2、文件大小 int getblocknum() return blocknum; / 磁盘块数 int getblocksum1()return blocksum1; /磁盘块号的始点 int getblocksum2()return blocksum2; /磁盘块号的终点 int length,blocknum,blocksum1,blocksum2; void setname(char na ) strcpy(name,na); /设置文件名void delwenjian() tag=1; /设置删除标记 1:已删 0:未删void creatfile(char *na,int L,int

3、num,int s1,int s2) /创建文件 void deltefile(char *na) tag=1; strcpy(name,na); /删除文件 void disp( )/输出文件信息class fdatabase /文件库类 private: int top; /文件记录指针file f50;public:fdatabase()top=-1; /构造函数int search(char *fname)/按文件名查找int creatfile(char *na,int L,int num,int s1,int s2)/创建文件时先查找是否存在int deltefile(char *

4、na)/删除文件时先查找是否存在void disp() /输出所有文件信息;三、 课程设计的模板说明1、初始化,建立文件系统输入磁盘大小(G),每个盘块大小(M),自动建立位示图,位示图字长定为32位输出位示图的行数,以及行号、列号与磁盘块号的转换公式(都从0开始编号)。2、 循环选择执行以下功能1、存储文件输入建立的文件名和文件大小,如果该文件名已经存在,则输出不能建立的信息否则计算所需的磁盘块数为其分配足够多的磁盘块,并记录下来输出所占用的磁盘块号2、删除文件输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块删除该文件名3、显示位示图情况显示位示图的情

5、况显示剩余磁盘块的数目4、显示文件列表显示文件名,文件大小,占用的磁盘块数目和磁盘块号四、 课程设计的源代码#include#include #include#include#includeint i=0,j=0,sum=0,tt=0,r,ii,k,g,m;int a10032;class file/文件类private: int no; /文件编号 char name10; /文件名public: int tag; /删除标记 1:已删 0:未删file( ) char *getname( )return name; /获取姓名 int gettag( )return tag; /获取删除标

6、记 int getno() return no; /获取文件编号 int getlength() return length; /获取文件大小 int getblocknum() return blocknum; / 磁盘块数 int getblocksum1()/磁盘块号的始点 return blocksum1; int getblocksum2()/磁盘块号的终点 return blocksum2; int length; /文件大小 int blocknum;/盘块数 int blocksum1;/所占盘块号的始点 int blocksum2;/所占盘块号的终点 void setname

7、(char na ) /设置文件名 strcpy(name,na);void delwenjian() tag=1; /设置删除标记 1:已删 0:未删void creatfile(char *na,int L,int num,int s1,int s2) /创建文件 tag=0; length=L; blocknum=num; blocksum1=s1; blocksum2=s2; strcpy(name,na); blocknum=length/m; /盘块数=文件大小/盘块大小if(length%m!=0) /盘块数取上整 blocknum=blocknum+1; cout 所需磁盘块数

8、:blocknumendlendl; if(sum+blocknum)=32) /所有盘块数只占用一行,直接赋值 for(;j(sum+blocknum);j+) aij=1; sum=sum+blocknum; /再进行下面文件的盘块数累加 else /占用多行,先赋值整行 for(;j32;j+) aij=1; i=i+1; for(j=0;j(sum+blocknum)-32;j+) /再进行剩余项赋值 aij=1; sum=sum+blocknum-32; tt=tt+blocknum; /输出文件所占用的盘块号 cout 所占磁盘块号:tt-blocknum to tt-1endl;

9、 blocksum1=tt-blocknum; blocksum2=tt-1;void deltefile(char *na) /删除文件 tag=1; strcpy(name,na);void disp( )/输出文件信息 coutsetw(8)name setw(10)lengthsetw(18)blocknumsetw(12)blocksum1 to blocksum2endl;class fdatabase /文件库类 private: int top; /文件记录指针file f50;public:fdatabase() /构造函数top=-1; int search(char *f

10、name)/按文件名查找 for ( ii=0;ii=top;ii+) if (strcmp(fii.getname(),fname)=0 & fii.tag=0) return 0; return 1; int creatfile(char *na,int L,int num,int s1,int s2)/创建文件时先查找是否存在 int p; p=search(na); if (p=1) top+; ftop.creatfile(na,L,num,s1,s2); return 1; else cout !该文件已存在,不能创建!nn; return 0; int deltefile(cha

11、r *na)/删除文件时先查找是否存在 int b,p,x=0,n1,n2,q1,q2,t; p=search(na); if (p=0) /若文件存在 /进行删除文件赋值 fii.tag=1; b=fii.length/m; /盘块数=当前文件大小/盘块大小 if(ii=0) / 对第一个删除文件进行赋值 for(k=0;kb;k+) axk=0; else n1=(fii-1.blocksum2+1)/32; /被查找的文件之前文件所占用的盘块数/32, /大于0表示跨行n2=(fii.blocksum2+1)/32; /所有文件所占用的盘块数/32,大于0表示跨行q1=(fii-1.bl

12、ocksum2+1)-n1*32; / 当前文件的开始盘块号q2=(fii.blocksum2+1)-n2*32; / 用于跨行后计算盘块号t=n2-n1;if(t=0) /若n2与n1相等,表明当前所有被占用盘块在同一行 for(k=q1;k=0;t-,x+) /循环进行整行赋值 for(k=0;k32;k+) axk=0; x=n2; /对剩余项赋值 for(k=0;kb-(t-1)*32;k+) axk=0; else /对当前文件前几项赋值 x=n1; for(k=q1;k0;t-,x+) /中间整行赋值 for(k=0;k32;k+) axk=0; x=n2; /最后剩余项赋值 fo

13、r(k=0;k(fii.blocksum2+1)-t1*32;k+) axk=0; return 1; else cout该文件不存在; return 0; void disp() /输出所有文件信息 for (int i=0;i=top;i+) if(fi.tag=0) fi.disp(); ;void bit_map(int I) int s=0;cout-endl; for(int p=0;pI;p+) for(int q=0;q32;q+) coutapq ; coutendl; out-endl; for(int p1=0;p1I;p1+) for(int q1=0;q132;q1+

14、) if(ap1q1=1) s=s+1; s=(g*1024)/m-s; cout 剩余盘块数:sendl; void main() int I,l,b,i,j,ss1,ss2,sum=0; char fname20; fdatabase p; file w; cout tt*n; cout tt* *n; cout tt* 初始化,建立文件系统 *n; cout tt* *n; cout tt*n; cout g; coutendl; cout m; coutendl; I=(g*1024)/(32*m); for( i=0;iI;i+) for( j=0;j32;j+) aij=0; co

15、ut 建立的位示图为:endl; bit_map(I); cout 行数:Iendl; cout tt*n; cout tt* *n; cout tt* 行号、列号与磁盘块号的转换公式为: *n; cout tt* 磁盘块号行号*32+列号 *n; cout tt* 行号磁盘块号/32 *n; cout tt* 列号磁盘块号%32 *n; cout tt* *n; cout tt*n; char choice; while(choice!=0) cout tt*n; cout tt* *n; cout tt* 文 件 管 理 系 统 *n; cout tt* *n; cout tt*n; co

16、ut ttt1 存 储 文 件nnttt2 删 除 文 件 nnttt3 显示位示图情况 nnttt4 显示文件列表endl; cout choice; coutendl; switch (choice) case 1: cout fname; coutendl; /创建文件前,先查找是否有同名文件存在 int q; q=p.search(fname); if (q=0) cout !该文件已存在,不能创建!nn; break; cout l; coutg*1024) cout !文件大小超过磁盘最大容量,无法进行分配!endl; break; p.creatfile(fname,l,b,ss

17、1,ss2); break; case 2: cout fname; coutendl; q=p.search(fname); if (!q=0) cout !该文件不存在,无法删除!nn ; break; p.deltefile(fname); break; case 3: cout tt*显示位示图如下*n; bit_map(I); coutendl; break; case 4:cout tt*文件列表如下*n;cout-endl;coutsetw(10)文件名setw(15)文件大小(MB)setw(15)所占盘块数setw(15)所占盘块号endl; p.disp(); couten

18、dl; break; default: cout输入错误,请从新输入: nn; break; 五、 课程设计程序运行结果1、初始化,建立文件系统(1)用户根据提示输入磁盘大小(GB)与每个盘块大小(MB);(2)程序首先根据用户输入的磁盘大小(GB)与每个盘块大小(MB),自动建立位示图,即初始化位示图,位示图每一行长度固定为32位(即列固定为32);位示图中每一位表示一个盘块,取值0和1分别表示空闲和占用。初始化的位示图应全为0;(3)程序再输出位示图的剩余盘块数,行数,以及行号、列号与磁盘块号的转换公式(行列皆从0开始编号);这样,初始化,建立文件系统完成。运行结果:2、选择执行:存储文件

19、,删除文件,显示位示图情况,显示文件列表【显示文件管理系统列表】显示文件系统管理列表,并提示输入信息14。用户输入文件操作命令1(存储文件),2 (删除文件)、3(显示位示图情况)、4(显示文件列表); 格式如下:键入1,创建文件名为fname,大小为L(MB)的文件; 键入2,删除文件名为fname的文件; 键入3,显示位示图情况; 键入4,显示所有文件信息。 运行结果:【存储文件】用户输入文件操作命令是1(存储文件)。系统提示你输入你要建立的文件名和文件大小,如果该文件名已经存在,则系统提示输出不能建立此文件的信息,否则计算所需的磁盘块数和所占用的磁盘块号,并输出结果。相应的在位示图上,因

20、为位示图是矩阵,可以用数组存储,根据所占用的磁盘块号和公式:磁盘块号行号*32+列号行号磁盘块号/32 列号磁盘块号32计算出文件占用的磁盘块在位示图上的位置,现在是创建文件,所以将位示图该位置上的二进制数置1,表示已分配出去。分别创建名为ll,zz和mm三个文件,文件大小分别为224MB,320MB和56MB。此时对应的位示图如下:文件列表如下:若再创建一个已经创建过的文件,则显示如下信息:若创建的文件大小超过磁盘的最大容量,则显示如下信息:【删除文件】用户输入文件操作命令是2 (删除文件) 。系统提示你输入要删除的文件名,如果该文件名不存在,则输出删除出错信息。在位示图上,根据所占用的磁盘

21、块号和公式:磁盘块号行号*32+列号行号磁盘块号/32列号磁盘块号32计算出文件占用的磁盘块在位示图上的位置,现在是删除文件,所以将位示图该位置上的二进制数置0,表示收回该文件所占用的磁盘块。删除第二个文件zz,结果如下:则相应的位示图和文件列表变为:若删除一个不存在的文件,则显示如下信息:【显示位示图情况】如果用户输入文件操作命令是我wst() (显示位示图情况),系统输出此时位示图的情况,状态位为0表示对应盘块空闲,状态位为1表示该盘块已被分配出去。系统再显示剩余磁盘块的数目。以下是删除zz文件,创建xx后和创建xx后,删除ll的位示图:【显示文件列表】如果用户输入文件操作命令是disp()(显示所有文件情况),系统会显示所有文件的文件名,文件大小,占用的盘块数和盘块号。以下是删除zz文件,创建xx后和创建xx后,删除ll显示的文件列表:

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2