《计算机操作系统》课程设计说明书-模拟设计物理文件的存储过程--串联文件、索引文件.doc_第1页
《计算机操作系统》课程设计说明书-模拟设计物理文件的存储过程--串联文件、索引文件.doc_第2页
《计算机操作系统》课程设计说明书-模拟设计物理文件的存储过程--串联文件、索引文件.doc_第3页
《计算机操作系统》课程设计说明书-模拟设计物理文件的存储过程--串联文件、索引文件.doc_第4页
《计算机操作系统》课程设计说明书-模拟设计物理文件的存储过程--串联文件、索引文件.doc_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学计算机操作系统课程设计说明书课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 计算机科学与技术学院 题 目: 模拟设计物理文件的存储过程串联文件、索引文件初始条件:1预备内容:阅读操作系统的文件管理章节内容,理解有关文件组织形式、文件存储的概念。2实践准备:掌握一种计算机可视化语言的使用。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1模拟采用指定结构对文件进行存储。能够处理以下的情形: 能够输入给定的存储空间大小,文件的个数及大小; 能显示出各文件占用空间的情况。2设计报告内容应说明: 需求分析; 功能设计(数据结构及模块说明); 开发平台及源程序的主要部分; 测试用例,运行结果与运行情况分析; 自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日模拟物理文件的存储过程 串联文件、索引文件1. 需求分析 1.1课设要求本课设主要模拟采用串联和索引结构对文件进行存储。能够处理以下的情形:能够输入给定的存储空间大小,文件的个数及大小; 能显示出各文件占用空间的情况。1.2 大体设计由课设要求初步设计两种文件共享同一物理存储空间,所用的存储结构应同时满足两种结构的文件,若某一物理块已经被占用,则应该记录其已经被占用。设计处理以下情形:(1)输入给定的存储空间大小使用cout语句提示用户,输入给定的存储空间大小。但要指定一最大值,用户输入给定存储空间大小后,要判断是否超过最大值,不能超过此范围,超出则提示用户重新输入。(2)输入文件的个数和大小让用户可以输入文件的个数和大小,即输入要创建几个文件、要创建的文件类型、每个文件的文件名以及文件的大小。如果输入的大小不符合,应该能够提示用户文件大小超出规定值,不能创建,请重新输入文件大小,创建成功后则继续创建其它用户要求的文件。(3)显示各文件占用空间的情况将创建的各个文件的文件名、大小、占用空间情况显示。串联空间在显示时要能够显示出所有的存储空间,要能显示出在物理上是非顺序的,要显示出过程;索引文件是用一张索引表来存放文件所在的逻辑块号和物理块号,所以在显示的时候应该能够显示出它们之间的对应关系。(4)同类型的文件不重名在输入名字完成后先判断该类型文件大小是否合适,是否有足够的或合适的空间来创建所需要的文件,然后判断该类型文件是否已经存在该文件名,存在则提示重新输入,再进行创建。串联文件是用非连续的物理块来存放文件信息的,因此可以让用户输入起始地址后随机产生剩余的物理块。索引文件是将文件的逻辑块号与物理块号放在一张索引表中,这张表也存放在一个物理块中,用户要输入索引表的地址。而且在判断剩余空间是否足够的时候应该考虑到索引表也要占用一个物理块。(5)显示剩余物理空间的情况在初始化物理空间时各块未使用,创建文件后,有的物理块被使用了,设置使用标记,剩余未被使用的物理块应该可以显示出来。2.功能设计(数据结构及模块说明)2.1数据结构2.1.1串联文件的结构体串联文件结构用非连续的物理块来存放文件信息。这些非连续的物理块之间没有顺序关系。其中每个物理块设有一个指针,指向其后续连接的另一个物理块,从而使得存放同一文件的物理块链接成一个串联队列。串联文件的物理结构如下图:串联文件的说明信息主要包括:文件名、第一物理块号、文件长度、文件尾地址、此文件空间是否已被占用。具体定义如下:struct clfcbstring name; /文件名int head; /文件首地址int length; /文件长度 int end; /文件尾地址int full; /1代表被占用,0代表未被占用c10; /定义一个串联文件的结构体数组,用来存放串联文件的文件信息,最多只能有10个串联文件。2.1.2 索引文件的结构体系统为每个文件建立一张索引表,表中每一栏目指出文件信息所在的逻辑块号及与之对应的物理块号。索引表的物理地址则由文件说明信息项给出。其物理结构如下图:索引文件的说明信息主要包括:文件名、索引表、索引表物理块号、文件长度、此文件空间是否已被占用。具体定义如下:struct index string name; /文件名int in10; /索引表int address; /索引表地址int length; /文件长度 int full; /1代表被占用,0代表未被占用ind10; /定义一个索引文件的结构体数组,用来存放索引文件的文件信息,最多只能有10个索引文件。2.1.3物理空间的结构体对于串联文件来说,创建文件时指定第一个物理块后,后面的每个物理块由前一物理块的next指定,直到最后一个物理块。对于索引文件来说,创建文件时,关键是对索引表进行修改,来指定对应的物理块。每个逻辑块对应一个物理块,然后修改对应的物理块的使用情况,以完成文件的创建。操作时不需要对next进行操作。但为了使两种文件使用同一个物理空间,通过以下的方式实现存储空间的统一。既能满足串联文件又能满足所以文件。具体定义如下:struct block int kong;/0表示未被占用,1表示已被占用int next;/下一物理块的地址asize;2.2模块框图此次模拟物理文件的存储过程,包括串联和索引文件两种类型。在设计程序时将程序分成了几个模块,以便让各模块的功能明确,各模块之间调用关系清晰。主函数main()初始化init()主菜单menu()显示剩余存储空间empty()创建文件creat()显示文件占用空间情况show()退出exit()判断文件是否重名checkname()创建串联文件cl()创建索引文件index()以下是模块框图:3. 开发平台 xp系统,microsoft visual c+6.0编译器,c+语言4. 源程序的主要部分主要流程图4.1 开始输入给定空间大小size1size1100?y初始化各物理块调用主菜单输入选项mm=?m=1显示剩余存储空间显示文件占用空间情况m=2创建文件剩余空间大于0yn是否有文件yn输入文件个数!=0m=3剩余空间=0?n文件类型菜单输入文件类型n创建串联文件创建索引文件n=1n=3n=2m=4结束程序yn4.2主要函数以下是源程序的主要部分及功能简介如下:(1) 主函数int main()提醒用户输入给定的物理空间大小,然后调用init()函数初始化物理空间,和各类文件,再调用menu()函数,让用户选择要执行的操作,正常执行结束后返回值为1。(2) 初始化函数void init()将给定的各物理块定义为未被占用,同时初始化各类文件,均为未被占用。(3) 主菜单函数void menu()显示可以执行的各个功能供用户选择,当用户输入选择要执行的功能后,调用相应的函数完成用户要求。(4) 显示剩余物理块函数void empty()将物理空间中full=0的物理块显示出来,即输出未被占用的各个物理块。(5) 显示各文件占用空间情况函数void show()将存在的文件占用物理空间的情况输出给用户,包括串联文件和索引文件。串联文件要输出文件的说明信息,和具体占用物理块的组织形式;索引文件要输出文件的说明信息和索引表信息。(6) 创建文件函数void creat()判断用户要创建的文件类型,然后调用相应的函数创建用户想要建的文件。(7) 检测文件名是否存在函数int checkname(string name,int type)判断用户输入的文件名在同类型文件中是否已经存在,若存在或者输入类型不对,返回值为0,否则返回1。(8) 创建串联文件函数void cl()创建串联文件,修改占用物理块的指针,并修改物理块的占用情况,确定文件的名字、长度、起始地址和结束地址。(9) 创建索引文件函数void index()创建索引文件,其中类型可继续分为一级索引及多级索引文件,修改物理块被占用的情况,修改索引表,确定各逻辑块对应的物理块,确定文件名、长度、索引表地址。5. 运行结果与运行情况分析(1)输入给定的空间大小并查看分配的空间情况,其中格式为每行输出10个 (2) 创建串联文件并返回主菜单查看串联文件的存储情况(3)创建索引文件,并返回主菜单查看索引文件的存储情况:首先创建两个索引文件,第一个为一级索引文件,第二个为多级索引文件第二个索引文件中,依次存放四个索引文件的指针,各个下级索引文件均为一级索引(也可为多次索引的)如上再重复建立三个子索引文件,返回主菜单查看其存储情况(4) 创建完两类文件后,显示剩余空间情况(5)再次创建同类型中的同名文件,提示文件名已存在,重新输入 (6)创建索引文件时,所输入的存放索引表物理块被占用时,提示重新输入 (7)创建文件大小大于剩余空间,提示重新输入自我评价与总结 这个,纯属个人扯淡,所以略去了。6 源代码#include#include#include#includeusing namespace std;#define size 100/*定义结构体*/定义串联文件结构体struct clfcbint length;/文件长度string name;/文件名int head;/文件首地址 int tail;/文件尾地址int full;/1代表被占用,0代表未被占用;/定义索引文件结构体struct indexfcbstring name;int in10;int address;int length; int full;/1代表被占用,0代表未被占用;/物理空间的结构体struct blockint key;/1代表被占用,0代表未被占用int next;/下一物理块的地址;/*定义结构体*int size1;int count;block asize;/物理空间clfcb c10;indexfcb ind10;void menu(); /显示主菜单void empty(); /显示剩余空间void show(); /显示存储空间内的文件及存储地址void creat(); /创建文件void cl();/创建串联文件void index();/创建索引文件void init(); /初始化int checkname(string name,int type);/检查是否重名及重名处理int main()srand(time(null); /以时间为种子,生成随机数coutsize1;coutendl;count=size1;init();menu();return 0;void menu() /显示主菜单cout*模拟物理文件的存储过程*endl;cout* 1.显示剩余存储空间 *endl;cout* 2.显示存储空间内的文件及存储地址 *endl;cout* 3.创建新文件 *endl;cout* 4.退出 *endl;cout*m;switch(m) case 1: empty(); break; case 2: show();break; case 3: creat();break; case 4: exit(1); default: couterrorendl;coutendl;menu();void init() /初始化 int i,j;for(i=0;isize1;i+)ai.key =0;for(i=0;i10;i+)for(j=0;j10;j+)indi.inj=-1;ci.full =0;indi.full=0;void empty() /显示剩余空间int j=0;coutendl;cout剩余空间的个数是countendl;cout剩余空间的地址是endl;for(int i=0;isize1;i+) if(ai.key=0)j+;couti ;if(j%10=0) /设置输出格式coutendl;coutendl;int checkname(string name,int type) /检查是否重名及重名处理 int i;if(type=1)for(i=0;i10;i+) if(ci.full =1)if(!strcmp(.c_str(),name.c_str()return 0; /重名返回0 return 1; ;if (type=2)for(i=0;i10;i+) if(indi.full =1) if(!strcmp(.c_str(),name.c_str() return 0; return 1;return 0; /类型不匹配也返回0void show() /显示物理空间中所有的文件int i,j,top;coutendl;cout串联文件目录endl;cout名称t起始位置t结束位置t长度t存储空间endl;for(i=0;i10;i+)if(ci.full =1)top=ci.head; tci.head tci.tail tci.length t;couttop;for(j=1;jci.length-1;j+)coutatop.next;top=atop.next;coutci.tailendl;cout索引文件目录endl;cout名称t索引表位置t长度endl;for(i=0;i10;i+)if(indi.full =1) tindi.address tindi.length endl;for(i=0;i10;i+)if(indi.full =1)文件的索引表为:endl;for(j=0;jindi.length;j+)coutj-indi.injendl;void creat() /创建文件coutendl; cout*创建文件*endl;cout* 1.串联文件 *endl;cout* 2.索引文件 *endl;cout* 3.返回主菜单 *endl;cout*endl; couts;switch(s) case 1: cl( ); break; case 2: index( ); break; case 3: menu( );break; default: couterrorendl;void cl() /创建串联文件 int m,n,len; string name;int flag=0; coutm;for(n=1;nm+1;n+) cout请输入第nname;int s=1;if(!checkname(name,s) cout文件已经存在请重新输入第n个文件的名称;flag = 1;else flag =0; while(flag); cout请输入第nlen; while(len+1count|len10) cout剩余空间不足或文件大小大于10endl; coutlen; int i,j,h,num;for(i=0;i10;i+)if(ci.full=0) break;=name;ci.length=len; count-;ci.full=1;ci.head=rand()%size1;ci.tail=ci.head;h=ci.head;ah.key=1;for(j=0;jlen-1;j+)while(1) num=rand()%size1;if(anum.key=1)continue;break;anum.key=1;aci.tail.next=num;ci.tail =num;count-;cout创建成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论