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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

模拟物理文件的存储过程连续文件串联文件索引文件.docx

1、模拟物理文件的存储过程连续文件串联文件索引文件目 录课程设计任务书 21课程设计目的与功能 31.1设计目的 31.2设计功能 32需求分析,数据结构或模块说明(功能与框图) 32.1 需求分析 32.2数据结构 42.2.1连续文件的结构体 42.2.2串联文件的结构体 52.2.3 索引文件的结构体 62.2.4物理空间的结构体 62.3模块说明 73源程序的主要部分 83.1程序流程图 83.2主要函数 94测试用例,运行结果与运行情况分析 104.1测试用例 104.2运行结果与运行情况分析 115自我评价与总结 156源程序 16本科生课程设计成绩评定表 32课程设计任务书学生姓名:

2、 专业班级: 指导教师: 工作单位: 计算机科学与技术学院 题 目: 模拟物理文件的存储过程连续文件、串联文件、索引文件初始条件:1预备内容:阅读操作系统的文件管理章节内容,理解有关文件组织形式、文件存储的概念。2实践准备:掌握一种计算机可视化语言的使用。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1模拟采用指定结构对文件进行存储。能够处理以下的情形: 能够输入给定的存储空间大小,文件的个数及大小; 能显示出各文件占用空间的情况。2设计报告内容应说明: 课程设计目的与功能; 需求分析,数据结构或模块说明(功能与框图); 源程序的主要部分; 测试用例,运行结

3、果与运行情况分析; 自我评价与总结。时间安排:设计安排3周:查阅、分析资料 1天系统软件的分析与建模 4天系统软件的设计 5天系统软件的实现 3天撰写文档 1天课程设计验收答辩 1天设计验收安排:设计周的第三周的指定时间到实验室进行上机验收。设计报告书收取时间:课程设计验收答辩完结时。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名: 2013 年 12 月 10日系主任(或责任教师)签名: 2013 年 12 月 10日模拟物理文件的存储过程连续文件、串联文件、索引文件1课程设计目的与功能1.1设计目的(1)阅读操作系统的文件管理章节内容,理解有关文件组织形式、文件存储的

4、概念。(2)掌握三种物理结构顺序文件、串联文件和索引文件的存储。(3)掌握一种计算机可视化语言的使用。1.2设计功能模拟采用指定结构对文件进行存储。能够处理以下的情形:(1) 能够输入给定的存储空间大小,文件的个数及大小; (2) 能显示出各文件占用空间的情况。2需求分析,数据结构或模块说明(功能与框图)2.1 需求分析由课设要求初步设计三种文件共享同一物理存储空间,所用的存储结构应同时满足三种结构的文件,若某一物理块已经被占用,则应该记录其已经被占用。由于本次实验是模拟三种文件的存储过程,所以可以建一个主菜单,由用户来进行的操作,如显示文件的存储情况、显示剩余存储空间、创建新文件等。如果要选

5、择创建文件的操作,则显示一个二级菜单供用户选择。用户可以指定创建的文件的个数,每一种文件的类型及大小。并能够按照实验的要求显示出用户建立的文件所占用的空间情况。设计处理以下情形:(1)输入给定的存储空间大小使用cout语句提示用户,输入给定的存储空间大小。但要指定一最大值,用户输入给定存储空间大小后,要判断是否超过最大值,不能超过此范围,超出则提示用户重新输入。(2)输入文件的个数和大小让用户可以输入文件的个数和大小,即输入要创建几个文件、要创建的文件类型、每个文件的文件名以及文件的大小。如果输入的大小不符合,应该能够提示用户文件大小超出规定值,不能创建,请重新输入文件大小,创建成功后则继续创

6、建其它用户要求的文件。(3)显示各文件占用空间的情况将创建的各个文件的文件名、大小、占用空间情况显示。串联空间在显示时要能够显示出所有的存储空间,要能显示出在物理上是非顺序的,要显示出过程;索引文件是用一张索引表来存放文件所在的逻辑块号和物理块号,所以在显示的时候应该能够显示出它们之间的对应关系。(4)创建的文件不重名在输入名字完成后先判断该类型文件大小是否合适,是否有足够的或合适的空间来创建所需要的文件,然后判断该类型文件是否已经存在该文件名,存在则提示重新输入,再进行创建。串联文件是用非连续的物理块来存放文件信息的,因此可以让用户输入起始地址后随机产生剩余的物理块。索引文件是将文件的逻辑块

7、号与物理块号放在一张索引表中,这张表也存放在一个物理块中,用户要输入索引表的地址。而且在判断剩余空间是否足够的时候应该考虑到索引表也要占用一个物理块。(5)显示剩余物理空间的情况在初始化物理空间时各块未使用,创建文件后,有的物理块被使用了,设置使用标记,剩余未被使用的物理块应该可以显示出来。2.2数据结构2.2.1连续文件的结构体 连续文件是一种最简单的物理文件结构,它把一个在逻辑上连续的文件信息依次存放到物理块中。连续文件结构如下图所示:具体定义如下: struct lxfcb string name;/文件名 int length;/文件长度 int head;/文件首地址 int tai

8、l;/ 文件尾地址 int full;/1代表被占用,0代表未被占用;2.2.2串联文件的结构体 串联文件结构用非连续的物理块来存放文件信息。这些非连续的物理块之间没有顺序关系。其中每个物理块设有一个指针,指向其后续连接的另一个物理块,从而使得存放同一文件的物理块链接成一个串联队列。串联文件的物理结构如下图:串联文件的说明信息主要包括:文件名、第一物理块号、文件长度、文件尾地址、此文件空间是否已被占用。具体定义如下:struct clfcb string name; /文件名 int head; /文件首地址 int length; /文件长度 int end; /文件尾地址 int full

9、; /1代表被占用,0代表未被占用c10; /定义一个串联文件的结构体数组,用来存放串联文件的文件信息,最多只能有10个串联文件。2.2.3 索引文件的结构体系统为每个文件建立一张索引表,表中每一栏目指出文件信息所在的逻辑块号及与之对应的物理块号。索引表的物理地址则由文件说明信息项给出。其物理结构如下图:索引文件的说明信息主要包括:文件名、索引表、索引表物理块号、文件长度、此文件空间是否已被占用。具体定义如下:struct index string name; /文件名 int in10; /索引表 int address; /索引表地址 int length; /文件长度 int full;

10、 /1代表被占用,0代表未被占用ind10; /定义一个索引文件的结构体数组,用来存放索引文件的文件信息,最多只能有10个索引文件。2.2.4物理空间的结构体 对于连续文件来说,创建文件时指定第一个物理块后,后面的每个物理块紧跟前一物理块,直到最后一个物理块。对于串联文件来说,创建文件时指定第一个物理块后,后面的每个物理块由前一物理块的next指定,直到最后一个物理块。对于索引文件来说,创建文件时,关键是对索引表进行修改,来指定对应的物理块。每个逻辑块对应一个物理块,然后修改对应的物理块的使用情况,以完成文件的创建。操作时不需要对next进行操作。但为了使三种文件使用同一个物理空间,通过以下的

11、方式实现存储空间的统一。既能满足连续文件、串联文件又能满足索引文件。具体定义如下:struct block int key;/0表示未被占用,1表示已被占用 int next;/下一物理块的地址asize;2.3模块说明 此次模拟物理文件的存储过程,包括连续、串联和索引文件两种类型。在设计程序时将程序分成了几个模块,以便让各模块的功能明确,各模块之间调用关系清晰。以下是模块框图:3源程序的主要部分3.1程序流程图3.2主要函数以下是源程序的主要部分及功能简介如下:(1) 主函数int main()提醒用户输入给定的物理空间大小,然后调用init()函数初始化物理空间,和各类文件,再调用menu

12、()函数,让用户选择要执行的操作,正常执行结束后返回值为1。(2) 初始化函数void init()将给定的各物理块定义为未被占用,同时初始化各类文件,均为未被占用。(3) 主菜单函数void menu()显示可以执行的各个功能供用户选择,当用户输入选择要执行的功能后,调用相应的函数完成用户要求。(4) 显示剩余物理块函数void empty()将物理空间中full=0的物理块显示出来,即输出未被占用的各个物理块。(5) 显示各文件占用空间情况函数void show()将存在的文件占用物理空间的情况输出给用户,包括串联文件和索引文件。串联文件要输出文件的说明信息,和具体占用物理块的组织形式;索

13、引文件要输出文件的说明信息和索引表信息。(6) 创建文件函数void creat()判断用户要创建的文件类型,然后调用相应的函数创建用户想要建的文件。(7) 检测文件名是否存在函数int checkname(string name,int type)判断用户输入的文件名在同类型文件中是否已经存在,若存在或者输入类型不对,返回值为0,否则返回1。(8) 创建连续文件函数void lx()创建连续文件,从文件头指针依次占用物理块,并修改物理块的占用情况,确定文件的名字、长度、起始地址和结束地址。(9) 创建串联文件函数void cl()创建串联文件,修改占用物理块的指针,并修改物理块的占用情况,确

14、定文件的名字、长度、起始地址和结束地址。(10) 创建索引文件函数void index() 创建索引文件,其中类型可继续分为一级索引及多级索引文件,修改物理块被占用的情况,修改索引表,确定各逻辑块对应的物理块,确定文件名、长度、索引表地址。4测试用例,运行结果与运行情况分析4.1测试用例测试用例文件类型文件个数文件名文件大小预期输出T11(连续)2110创建成功25创建成功T22(串联)1310创建成功T33(索引)2 (一级) (多级)45创建成功56创建成功66创建成功T45175提示错误T511585提示错误T62115提示错误T711950提示错误4.2运行结果与运行情况分析(1)给定

15、存储空间大小,显示剩余存储空间(2)输入测试用例T1(3)输入测试用例T2(4)输入测试用例T3(5)输入测试用例T4(6)输入测试用例T5(7)输入测试用例T6(8)输入测试用例 T7(9)输入测试用例T1,T2,T3后,显示剩余存储空间(10)输入测试用例T1,T2,T3后,显示存储空间内的文件及存储地址 结合程序运行结果,可以看出程序的功能满足所要求设计的功能,实验结果均是正确的。5自我评价与总结 6源程序#include#include#include#include /日期和时间头文件using namespace std;#define size 1000/*定义结构体*/定义连续

16、文件结构体struct lxfcb string name;/文件名 int length;/文件长度 int head;/文件首地址 int tail;/ 文件尾地址 int full;/1代表被占用,0代表未被占用;/定义串联文件结构体struct clfcb int length;/文件长度 string name;/文件名 int head;/文件首地址 int tail;/ 文件尾地址 int full;/1代表被占用,0代表未被占用;/定义索引文件结构体struct indexfcb string name; int in10; int address; int length; i

17、nt full;/1代表被占用,0代表未被占用;/物理空间的结构体struct block int key;/1代表被占用,0代表未被占用 int next;/下一物理块的地址;/*定义结构体*int size1;int count;block asize;/物理空间lxfcb l10;clfcb c10;indexfcb ind10;void menu(); /显示主菜单void empty(); /显示剩余空间void show(); /显示存储空间内的文件及存储地址void creat(); /创建文件void lx(); /创建连续文件void cl(); /创建串联文件void in

18、dex();/创建索引文件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*

19、4.退出 *endl; cout*endl; int m; while(1) coutm; 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; li.full =0; c

20、i.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(li.full =1) if(!strcm

21、p(li.name.c_str(),name.c_str() return 0; /重名返回0 return 1; ; if(type=2) for(i=0;i10;i+) if(ci.full =1) if(!strcmp(ci.name.c_str(),name.c_str() return 0; /重名返回0 return 1; ; if (type=3) for(i=0;i10;i+) if(indi.full =1) if(!strcmp(indi.name.c_str(),name.c_str() return 0; return 1; ; return 0; /类型不匹配也返回0

22、void show() /显示物理空间中所有的文件 int i,j,top; coutendl; cout连续文件目录:endl;/显示连续文件目录 cout名称t起始位置t结束位置t长度t存储空间endl; for(i=0;i10;i+) if(li.full=1) top=li.head; coutli.name tli.head tli.tail tli.length t; couttop; for(j=1;jli.length-1;j+) coutatop.next; top=atop.next; coutli.tailendl; cout串联文件目录:endl;/显示串联文件目录 c

23、out名称t起始位置t结束位置t长度t存储空间endl; for(i=0;i10;i+) if(ci.full =1) top=ci.head; coutci.name 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) coutindi.name tindi.ad

24、dress tindi.length endl; for(i=0;i10;i+) if(indi.full =1) coutindi.name文件的索引表为:endl; for(j=0;jindi.length;j+) coutj-indi.injendl; void creat() /创建文件 cout*创建文件*endl; cout* 1.连续文件 *endl; cout* 2.串联文件 *endl; cout* 3.索引文件 *endl; cout* 0.返回主菜单 *endl; cout*endl; int s; while(1) couts; switch(s) case 1: lx

25、( ); break; case 2: cl( ); break; case 3: index( ); break; case 0: menu( );break; default: coutErrorendl; ; void lx() /创建连续文件 int m,n,len; string name; int flag=0; coutm; if(m10) cout文件个数不能超过10,错误!endl; 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|len30) cout剩余空间不足或文件大小大于30endl; coutlen; int i,j,h,num=rand()

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

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