




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模拟磁盘文件管理的程序一、 课程设计内容 自定义磁盘文件管理的数据结构; 能够自由创建、修改、删除文件; 文件具有一定自定义的属性; 能够显示当前系统文件的状态。二、 课程设计的数据结构说明程序中定义了两个类:class file/文件类private:char name10; /文件名 public: int tag; /删除标记 1:已删 0:未删file( ) char *getname( )return name; /获取文件名int gettag( )return tag; /获取删除标记int getlength() return length; /获取文件大小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 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 *na)/删除文件时先查找是否存在void disp() /输出所有文件信息;三、 课程设计的模板说明1、初始化,建立文件系统输入磁盘大小(G),每个盘块大小(M),自动建立位示图,位示图字长定为32位输出位示图的行数,以及行号、列号与磁盘块号的转换公式(都从0开始编号)。2、 循环选择执行以下功能1、存储文件输入建立的文件名和文件大小,如果该文件名已经存在,则输出不能建立的信息否则计算所需的磁盘块数为其分配足够多的磁盘块,并记录下来输出所占用的磁盘块号2、删除文件输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块删除该文件名3、显示位示图情况显示位示图的情况显示剩余磁盘块的数目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; /获取删除标记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(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 所需磁盘块数: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; 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 *fname)/按文件名查找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;elsecout !该文件已存在,不能创建!nn;return 0; int deltefile(char *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.blocksum2+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; /最后剩余项赋值for(k=0;k(fii.blocksum2+1)-t1*32;k+)axk=0; return 1; elsecout该文件不存在;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+) 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; cout 建立的位示图为: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; cout 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,ss1,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();coutendl;break; default:cout输入错误,请从新输入: nn;break; 五、 课程设计程序运行结果1、初始化,建立文件系统(1)用户根据提示输入磁盘大小(GB)与每个盘块大小(MB);(2)程序首先根据用户输入的磁盘大小(GB)与每个盘块大小(MB),自动建立位示图,即初始化位示图,位示图每一行长度固定为32位(即列固定为32);位示图中每一位表示一个盘块,取值0和1分别表示空闲和占用。初始化的位示图应全为0;(3)程序再输出位示图的剩余盘块数,行数,以及行号、列号与磁盘块号的转换公式(行列皆从0开始编号);这样,初始化,建立文件系统完成。运行结果:2、选择执行:存储文件,删除文件,显示位示图情况,显示文件列表【显示文件管理系统列表】显示文件系统管理列表,并提示输入信息14。用户输入文件操作命令1(存储文件),2 (删除文件)、3(显示位示图情况)、4(显示文件列表); 格式如下:键入1,创建文件名为fname,大小为L(MB)的文件; 键入2,删除文件名为fname的文件; 键入3,显示位示图情况; 键入4,显示所有文件信息。 运行结果:【存储文件】用户输入文件操作命令是1(存储文件)。系统提示你输入你要建立的文件名和文件大小,如果该文件名已经存在,则系统提示输出不能建立此文件的信息,否则计算所需的磁盘块数和所占用的磁盘块号,并输出结果。相应的在位示图上,因为位示图是矩阵,可以用数组存储,根据所占用的磁盘块号和公式:磁盘块号行号*32+列号行号磁盘块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行长沙市天心区2025秋招英文面试题库及高分回答
- 农发行驻马店市上蔡县2025秋招英文面试题库及高分回答
- 农发行商洛市洛南县2025秋招结构化面试15问及话术
- 农发行信阳市固始县2025秋招笔试英文行测高频题含答案
- 农发行徐州市邳州市2025秋招群面模拟题及高分话术
- 国家能源洛阳市老城区2025秋招面试典型题目及答案
- 国家能源临沂市河东区2025秋招笔试言语理解与表达题专练及答案
- 国家能源朝阳市朝阳县2025秋招半结构化面试模拟30问及答案
- 双方合作协议书 15篇
- 冬季预防传染病讲话稿15篇
- JG/T 9-1999钢椼架检验及验收标准
- JG/T 234-2008建筑装饰用搪瓷钢板
- 网络虚拟财产刑法保护的困境与突破:基于法理与实践的双重视角
- 股权代持协议(模板)8篇
- 《AI创意课件之设计》课件
- 会计中级职称《财务管理》电子书
- 河南豫信电科所属公司招聘笔试题库2025
- 小学生科普恐龙知识课件
- 2025年广东省房屋安全鉴定员理论考试题库-上(单选题)
- 高考文言文120个常见实词积累练习(学生版)
- 《STEMI再灌注治疗策略》课件
评论
0/150
提交评论