1、 源程序的主要部分; 测试用例,运行结果与运行情况分析; 自我评价与总结。时间安排:设计安排3周:查阅、分析资料 1天系统软件的分析与建模 4天系统软件的设计 5天系统软件的实现 3天撰写文档 1天课程设计验收答辩 1天设计验收安排:设计周的第三周的指定时间到实验室进行上机验收。设计报告书收取时间:课程设计验收答辩完结时。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名: 2013 年 12 月 10日系主任(或责任教师)签名:模拟物理文件的存储过程连续文件、串联文件、索引文件1课程设计目的与功能1.1设计目的(1)阅读操作系统的文件管理章节内容,理解有关文件组织形式、文件
2、存储的概念。(2)掌握三种物理结构顺序文件、串联文件和索引文件的存储。(3)掌握一种计算机可视化语言的使用。1.2设计功能模拟采用指定结构对文件进行存储。(1) 能够输入给定的存储空间大小,文件的个数及大小;(2) 能显示出各文件占用空间的情况。2需求分析,数据结构或模块说明(功能与框图)2.1 需求分析由课设要求初步设计三种文件共享同一物理存储空间,所用的存储结构应同时满足三种结构的文件,若某一物理块已经被占用,则应该记录其已经被占用。由于本次实验是模拟三种文件的存储过程,所以可以建一个主菜单,由用户来进行的操作,如显示文件的存储情况、显示剩余存储空间、创建新文件等。如果要选择创建文件的操作
3、,则显示一个二级菜单供用户选择。用户可以指定创建的文件的个数,每一种文件的类型及大小。并能够按照实验的要求显示出用户建立的文件所占用的空间情况。设计处理以下情形:(1)输入给定的存储空间大小使用cout语句提示用户,输入给定的存储空间大小。但要指定一最大值,用户输入给定存储空间大小后,要判断是否超过最大值,不能超过此范围,超出则提示用户重新输入。(2)输入文件的个数和大小让用户可以输入文件的个数和大小,即输入要创建几个文件、要创建的文件类型、每个文件的文件名以及文件的大小。如果输入的大小不符合,应该能够提示用户文件大小超出规定值,不能创建,请重新输入文件大小,创建成功后则继续创建其它用户要求的
4、文件。(3)显示各文件占用空间的情况将创建的各个文件的文件名、大小、占用空间情况显示。串联空间在显示时要能够显示出所有的存储空间,要能显示出在物理上是非顺序的,要显示出过程;索引文件是用一张索引表来存放文件所在的逻辑块号和物理块号,所以在显示的时候应该能够显示出它们之间的对应关系。(4)创建的文件不重名在输入名字完成后先判断该类型文件大小是否合适,是否有足够的或合适的空间来创建所需要的文件,然后判断该类型文件是否已经存在该文件名,存在则提示重新输入,再进行创建。串联文件是用非连续的物理块来存放文件信息的,因此可以让用户输入起始地址后随机产生剩余的物理块。索引文件是将文件的逻辑块号与物理块号放在
5、一张索引表中,这张表也存放在一个物理块中,用户要输入索引表的地址。而且在判断剩余空间是否足够的时候应该考虑到索引表也要占用一个物理块。(5)显示剩余物理空间的情况在初始化物理空间时各块未使用,创建文件后,有的物理块被使用了,设置使用标记,剩余未被使用的物理块应该可以显示出来。2.2数据结构2.2.1连续文件的结构体 连续文件是一种最简单的物理文件结构,它把一个在逻辑上连续的文件信息依次存放到物理块中。连续文件结构如下图所示:具体定义如下: struct lxfcb string name;/文件名 int length;/文件长度 int head;/文件首地址 int tail;/ 文件尾地
6、址 int full;/1代表被占用,0代表未被占用;2.2.2串联文件的结构体 串联文件结构用非连续的物理块来存放文件信息。这些非连续的物理块之间没有顺序关系。其中每个物理块设有一个指针,指向其后续连接的另一个物理块,从而使得存放同一文件的物理块链接成一个串联队列。串联文件的物理结构如下图:串联文件的说明信息主要包括:文件名、第一物理块号、文件长度、文件尾地址、此文件空间是否已被占用。struct clfcb string name; /文件名 /文件首地址 int length; /文件长度 int end; /文件尾地址 int full; /1代表被占用,0代表未被占用c10; /定义
7、一个串联文件的结构体数组,用来存放串联文件的文件信息,最多只能有10个串联文件。2.2.3 索引文件的结构体系统为每个文件建立一张索引表,表中每一栏目指出文件信息所在的逻辑块号及与之对应的物理块号。索引表的物理地址则由文件说明信息项给出。其物理结构如下图:索引文件的说明信息主要包括:文件名、索引表、索引表物理块号、文件长度、此文件空间是否已被占用。struct index int in10; /索引表 int address; /索引表地址 /文件长度ind10; /定义一个索引文件的结构体数组,用来存放索引文件的文件信息,最多只能有10个索引文件。2.2.4物理空间的结构体 对于连续文件来说
8、,创建文件时指定第一个物理块后,后面的每个物理块紧跟前一物理块,直到最后一个物理块。对于串联文件来说,创建文件时指定第一个物理块后,后面的每个物理块由前一物理块的next指定,直到最后一个物理块。对于索引文件来说,创建文件时,关键是对索引表进行修改,来指定对应的物理块。每个逻辑块对应一个物理块,然后修改对应的物理块的使用情况,以完成文件的创建。操作时不需要对next进行操作。但为了使三种文件使用同一个物理空间,通过以下的方式实现存储空间的统一。既能满足连续文件、串联文件又能满足索引文件。struct block int key;/0表示未被占用,1表示已被占用 int next;/下一物理块的
9、地址asize;2.3模块说明 此次模拟物理文件的存储过程,包括连续、串联和索引文件两种类型。在设计程序时将程序分成了几个模块,以便让各模块的功能明确,各模块之间调用关系清晰。以下是模块框图:3源程序的主要部分3.1程序流程图3.2主要函数以下是源程序的主要部分及功能简介如下:(1) 主函数int main()提醒用户输入给定的物理空间大小,然后调用init()函数初始化物理空间,和各类文件,再调用menu()函数,让用户选择要执行的操作,正常执行结束后返回值为1。(2) 初始化函数void init()将给定的各物理块定义为未被占用,同时初始化各类文件,均为未被占用。(3) 主菜单函数voi
10、d menu()显示可以执行的各个功能供用户选择,当用户输入选择要执行的功能后,调用相应的函数完成用户要求。(4) 显示剩余物理块函数void empty()将物理空间中full=0的物理块显示出来,即输出未被占用的各个物理块。(5) 显示各文件占用空间情况函数void show()将存在的文件占用物理空间的情况输出给用户,包括串联文件和索引文件。串联文件要输出文件的说明信息,和具体占用物理块的组织形式;索引文件要输出文件的说明信息和索引表信息。(6) 创建文件函数void creat()判断用户要创建的文件类型,然后调用相应的函数创建用户想要建的文件。(7) 检测文件名是否存在函数int c
11、heckname(string name,int type)判断用户输入的文件名在同类型文件中是否已经存在,若存在或者输入类型不对,返回值为0,否则返回1。(8) 创建连续文件函数void lx()创建连续文件,从文件头指针依次占用物理块,并修改物理块的占用情况,确定文件的名字、长度、起始地址和结束地址。(9) 创建串联文件函数void cl()创建串联文件,修改占用物理块的指针,并修改物理块的占用情况,确定文件的名字、长度、起始地址和结束地址。(10) 创建索引文件函数void index() 创建索引文件,其中类型可继续分为一级索引及多级索引文件,修改物理块被占用的情况,修改索引表,确定各
12、逻辑块对应的物理块,确定文件名、长度、索引表地址。4测试用例,运行结果与运行情况分析4.1测试用例测试用例文件类型文件个数文件名文件大小预期输出T11(连续)2110创建成功5T22(串联)3T33(索引)2 (一级) (多级)46T47提示错误T5158T6T79504.2运行结果与运行情况分析(1)给定存储空间大小,显示剩余存储空间(2)输入测试用例T1(3)输入测试用例T2(4)输入测试用例T3(5)输入测试用例T4(6)输入测试用例T5(7)输入测试用例T6(8)输入测试用例 T7(9)输入测试用例T1,T2,T3后,显示剩余存储空间(10)输入测试用例T1,T2,T3后,显示存储空间
13、内的文件及存储地址 结合程序运行结果,可以看出程序的功能满足所要求设计的功能,实验结果均是正确的。5自我评价与总结6源程序#includestringstdlib.htime.h /日期和时间头文件using namespace std;#define size 1000/*定义结构体*/定义连续文件结构体struct lxfcb int tail;/定义串联文件结构体/文件长度/定义索引文件结构体struct indexfcb/物理空间的结构体 int key;/*定义结构体*int size1;int count;block asize;/物理空间lxfcb l10;clfcb c10;i
14、ndexfcb ind10;void menu(); /显示主菜单void empty(); /显示剩余空间void show(); /显示存储空间内的文件及存储地址void creat(); /创建文件void lx(); /创建连续文件void cl(); /创建串联文件void index();/创建索引文件void init(); /初始化int checkname(string name,int type);/检查是否重名及重名处理int main() srand(time(NULL); /以时间生成随机数 coutsize1;endl; count=size1; init(); m
15、enu(); return 0;void menu() /显示主菜单*模拟物理文件的存储过程* 1.显示剩余存储空间 * 2.显示存储空间内的文件及存储地址 * 3.创建新文件 * 4.退出 * int m; while(1) coutm; switch(m) case 1: empty(); break; case 2: show();break; case 3: creat(); case 4: exit(1); default:Error ; menu(); void init() /初始化 int i,j; for(i=0;ii+) ai.key =0;10; for(j=0;jj+)
16、 indi.inj=-1; li.full =0; ci.full =0; indi.full=0;void empty() /显示剩余空间 int j=0;剩余空间的个数是:count剩余空间的地址是: for(int i=0; if(ai.key=0) j+; cout if(j%10=0) /设置输出格式 cout int checkname(string name,int type) /检查是否重名及重名处理 int i; if(type=1) for(i=0;i+) if(li.full =1) if(!strcmp(li.name.c_str(),name.c_str() retu
17、rn 0; /重名返回0 return 1; if(type=2) if(ci.full =1)strcmp(ci.name.c_str(),name.c_str() if (type=3) if(indi.full =1) if(!strcmp(indi.name.c_str(),name.c_str() return 0; return 1; ; /类型不匹配也返回0void show() /显示物理空间中所有的文件 int i,j,top;连续文件目录:/显示连续文件目录名称t起始位置t结束位置t长度t存储空间 if(li.full=1) top=li.head;li.name tli.
18、head li.tail li.lengthtop for(j=1;li.length-1; atop.next top=atop.next; li.tail串联文件目录:/显示串联文件目录 top=ci.head;ci.name ci.head ci.tail ci.lengthci.length-1;ci.tail 索引文件目录:/显示索引文件目录名称t索引表位置t长度indi.name indi.addressindi.length indi.name文件的索引表为: for(j=0;indi.length;-indi.injvoid creat() /创建文件*创建文件* 1.连续文件 * 2.串联文件 * 3.索引文件 * 0.返回主菜单 * int s; cout10)文件个数不能超过10,错误! for(n=1;nname; int s=1;checkname(name,s) coutcount|len30)剩余空间不足或文件大小大于30请重新输入: cin int i,j,h,num=rand()
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1