




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模拟磁盘文件管理系统一、任务描述模拟实现一个文件管理系统开发语言:C+、C语言、java开发工具:自选要求1、可以实现一下命令(以下命令至少实现5条):l login 用户登录l dir 列文件目录l create 创建文件l delete 删除文件l open 打开文件l close 关闭文件l cd 改变目录l mkdir 创建目录l rddir 删除目录l halt 退出系统2、列目录要求列出文件名、物理地址、文件大小、读写标识二、任务完成情况 自定义磁盘文件管理的数据结构; 能够自由创建、修改、删除文件; 文件具有一定自定义的属性; 能够显示当前系统文件的状态;(5)能够完成任务后退出系统。三、系统流程图与函数调用关系 1、类和主要函数程序中定义了两个类: (1)class file /文件类 主要功能是对文件属性的定义,文件在虚拟磁盘地址块的定位。 (2)class fdatabase /文件操作类 主要功能是对创建、删除、修改等方法的具体实现。 程序中的主要函数及说明: char *getname( ) /获取文件名int gettag( ) /获取删除标记int getlength() /获取文件大小int getblocknum() / 磁盘块数 int getblocksum1() /磁盘块号的始点int getblocksum2() /磁盘块号的终点void setname(char 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(char *na) /删除文件时先查找是否存在2、函数流程图(1)整体流程图(2)创建文件流程图3、删除文件流程图4、输出文件流程图四、系统使用说明与界面设计(1)、课程设计的模板说明1、初始化,建立文件系统输入磁盘大小(G),每个盘块大小(M),自动建立位示图,位示图字长定为32位输出位示图的行数,以及行号、列号与磁盘块号的转换公式(都从0开始编号)。2、 循环选择执行以下功能1、存储文件输入建立的文件名和文件大小,如果该文件名已经存在,则输出不能建立的信息否则计算所需的磁盘块数为其分配足够多的磁盘块,并记录下来输出所占用的磁盘块号2、删除文件输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块删除该文件名3、显示位示图情况显示位示图的情况显示剩余磁盘块的数目4、显示文件列表显示文件名,文件大小,占用的磁盘块数目和磁盘块号这样,初始化,建立文件系统完成。运行结果:(3)程序再输出位示图的剩余盘块数,行数,以及行号、列号与磁盘块号的转换公式(行列皆从0开始编号);2、选择执行:存储文件,删除文件,显示位示图情况,显示文件列表显示文件系统管理列表,并提示输入信息14。用户输入文件操作命令1(存储文件),2 (删除文件)、3(显示位示图情况)、4(显示文件列表); 格式如下:键入1,创建文件名为fname,大小为L(MB)的文件; 键入2,删除文件名为fname的文件; 键入3,显示位示图情况; 键入4,显示所有文件信息。 运行结果:(2)、存储文件建立文件名为jike大小为200(MB)的文件: 再建立文件名为wo大小为20(MB)的文件后显示文件列表:显示位示图情况:(3)、删除文件输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块,删除该文件名 文件名不存在时:成功删除jike文件:显示删除后剩余磁盘块的数目:(4)、退出系统五、结论与体会在本次课程设计刚刚开始时,不知道怎么设计。后来认真阅读课本有关的知识,知道怎样设计才方便文件操作。知道怎样设计后,写程序时也遇到很多的障碍,特别是出错处理。此时深感自己编程能力的不足,经过多次修改,终于设计好了该设计。自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识与掌握。通过该课程设计,使我们更了解了课本知识,巩固了课本知识,同时也使我们的编程能力有了一定的提高,我认实到学好计算机要重视实践操作,不仅仅是学习c+语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。六、附录出现源代码#include#include #include#include#include#include #include int 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; 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; 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 显示文件列表 nnttt5 退出系统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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 07 实验六 探究向心力大小与半径、角速度、质量的关系 【答案】听课手册
- 第22课《智取生辰纲》说课稿- 统编版语文九年级上册
- 2025年中国废水除臭剂行业市场分析及投资价值评估前景预测报告
- 贵州省开阳县南江布依族苗族乡中心学校人教版七年级地理下册:第十章 极地地区 说课稿001
- 高等数学线下考试题及答案
- 八年级地理下册 8.2 干旱的宝地-塔里木盆地说课稿(新版)新人教版
- 2025年外贸行业招聘笔试预测题
- 2025年市场营销经理招聘面试模拟题及策略分析
- 2025年实-用指南环保工程项目经理竞聘面试技巧与模拟题
- 问题研究 能否利用南极冰山解决沙特阿拉伯的缺水问题教学设计高中地理人教版2019选择性必修1-人教版2019
- 《急性肝功能衰竭》课件
- 韩餐服务员培训
- 2024年-2025年电梯检验员考试题库及答案
- 新入团团课培训
- 挖掘机安全培训教程
- 高中语文++《兼爱》课件+统编版高中语文选择性必修上册
- 学术论文文献阅读与机助汉英翻译智慧树知到答案2024年重庆大学
- (初级)航空油料特设维修员(五级)理论考试题库-上(单选题)
- 医疗质量医疗安全十八项核心制度培训模板
- 预应力混凝土管桩(L21G404)
- 2023年山西省普通高中学业水平考试真题物理试题(含答案解析)
评论
0/150
提交评论