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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

模拟磁盘文件管理系统.docx

1、模拟磁盘文件管理系统模拟磁盘文件管理系统一、任务描述模拟实现一个文件管理系统开发语言:C+、C语言、java开发工具:自选要求1、可以实现一下命令(以下命令至少实现5条):login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件cd 改变目录mkdir 创建目录rddir 删除目录halt 退出系统2、列目录要求列出文件名、物理地址、文件大小、读写标识二、任务完成情况 自定义磁盘文件管理的数据结构; 能够自由创建、修改、删除文件; 文件具有一定自定义的属性; 能够显示当前系统文件的状态;(5)能够完成任务后退出系统。三、系统流程图

2、与函数调用关系 1、类和主要函数程序中定义了两个类: (1)class file /文件类 主要功能是对文件属性的定义,文件在虚拟磁盘地址块的定位。 (2)class fdatabase /文件操作类 主要功能是对创建、删除、修改等方法的具体实现。 程序中的主要函数及说明: char *getname( ) /获取文件名int gettag( ) /获取删除标记int getlength() /获取文件大小int getblocknum() / 磁盘块数 int getblocksum1() /磁盘块号的始点int getblocksum2() /磁盘块号的终点void setname(cha

3、r 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( ) /输出文件信息int search(char *fname) /按文件名查找 int creatfile(char *na,int L,int num,int s1,int s2) /创建文件时先查找是否存在 int deltefile(

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

5、除错误信息,否则收回该文件所占用的磁盘块删除该文件名3、显示位示图情况显示位示图的情况显示剩余磁盘块的数目4、显示文件列表显示文件名,文件大小,占用的磁盘块数目和磁盘块号这样,初始化,建立文件系统完成。运行结果:(3)程序再输出位示图的剩余盘块数,行数,以及行号、列号与磁盘块号的转换公式(行列皆从0开始编号);2、选择执行:存储文件,删除文件,显示位示图情况,显示文件列表显示文件系统管理列表,并提示输入信息14。用户输入文件操作命令1(存储文件),2 (删除文件)、3(显示位示图情况)、4(显示文件列表); 格式如下:键入1,创建文件名为fname,大小为L(MB)的文件; 键入2,删除文件名

6、为fname的文件; 键入3,显示位示图情况; 键入4,显示所有文件信息。 运行结果:(2)、存储文件建立文件名为jike大小为200(MB)的文件: 再建立文件名为wo大小为20(MB)的文件后显示文件列表:显示位示图情况:(3)、删除文件输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块,删除该文件名 文件名不存在时:成功删除jike文件:显示删除后剩余磁盘块的数目:(4)、退出系统五、结论与体会在本次课程设计刚刚开始时,不知道怎么设计。后来认真阅读课本有关的知识,知道怎样设计才方便文件操作。知道怎样设计后,写程序时也遇到很多的障碍,特别是出错处理。此

7、时深感自己编程能力的不足,经过多次修改,终于设计好了该设计。自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识与掌握。通过该课程设计,使我们更了解了课本知识,巩固了课本知识,同时也使我们的编程能力有了一定的提高,我认实到学好计算机要重视实践操作,不仅仅是学习c+语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。六、附录出现源代码#include#include #include#include#include#include #include in

8、t 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

9、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 *

10、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+b

11、locknum; /再进行下面文件的盘块数累加 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

12、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; retur

13、n 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(char *na)/删除文件时先查找是否存在 int b,p,x=0,n1,n2,q1,q2,t; p=search(na); if (p=0) /若文件存在 /进行删除文件赋值 fii.tag=1; b=

14、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相等,表明当前

15、所有被占用盘块在同一行 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; else cout该文件不存在; return 0; void disp() /输出所有文件信息

16、 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; cout-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; cha

17、r 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;

18、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 显示文件列表 nnttt5 退出系统endl; cout choice; coutendl;

19、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; case 5: couttt成功退出系统; exit(0); break; default: cout输入错误,请从新输入: nn; break;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1