1.显示菜单函数
2. 置空位示图进行初始化
void zero_wst(){ int i;
for(i=0;i<256;i++)
WST[i]=0; }
3. 位示图输出显示将初始化或者申请或者回收后的位示图进行显示 void print_wst(int WST[256]){}
4. 已经申请空间的作业相关情况输出显示包括:作业名、申请空间的开始位置和截至位置
void print_office(work *w){} void menu(){}
5. 位示图操作的初始化包括:空闲区链表的初始化、作业链表的初始化
work *start(){}
6. 申请空间操作
work *request(work *w,int WST[256]){}
7. 回收空间操作
work *delect(work *w,int WET[]){} 8. 主函数 void main(){
int flag; work *w; zero_wst(); w=start(); while(1){
system(\print_wst(WST); print_office(w);
3
} }
menu(); cin>>flag; switch(flag){
case 1:w=request(w,WST);break; case 2:w=delect(w,WST);break; case 3:exit(0);
default:printf(\输入错误,请重新输入!\\n\}
4
第三章算法设计描述
3.1主要函数和函数的流程图
3.1.1. 盘块的分配算法流程图
否
Request()分配 输入文件名,和块数. strcmp(s->office,u->office)==0该文件是否已存在 是
否
r->free_number>=s->office_number能否查找到一个足够的空闲区域 是
当前空盘区块数是否分配完 将该作业结点插入作业链表表尾,,从该区域分配出对应大小空间,修改位示图 否 是
图3-1 盘块的分配
返回 释放该空闲区结点,把修改work里面两个首地址
5
3.2.2.盘块的回收算法流程图
能否找到对应文件 输入要查找的文件名,查找 Delect()回收
是
是 否 把该单元块数加入前一个空闲区结点 要回收的单元后为要回收的单元前为空
是 否
要回收的单元前后都空 把空闲区起始地址该为当前开始盘块空闲区盘块增加
结点空盘起始地址改为前一个,空闲区盘块增加 否 要回收的单元自成空盘区结点
是
返回 图3-2 盘块的回收算法流程图
6
修改位示图对应盘块的的内容,删除该文件结点. 修改work里面两个首地址 把该结点插入空闲区链表 第四章 开发过程描述
4.1 程序源码
由于源码较长,单独附加在后面,见附录1-程序源码
4.2 程序中遇到的错误及错误原因
编程中几乎没有遇到什么大的问题,只有一些语法中的小错误,编译器就解决完毕。
4.3测试程序功能所用的数据和测试方法
此次测试使用黑盒测试方法,目的是测试功能是否跟预期一样
预期输出 输出请输入文件名和块数 实际输出 输出请输入文件名和块数 输入文件名和块数 输入2选择回收
显示已有文件名:块数 输出请输入文件名 显示已有文件名:块数 输出请输入文件名 测试用例 输入1选择分配功能 7