学位论文操作系统课程设计模拟文件系统Word文档格式.docx
《学位论文操作系统课程设计模拟文件系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《学位论文操作系统课程设计模拟文件系统Word文档格式.docx(46页珍藏版)》请在冰点文库上搜索。
调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;
5.结果分析。
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
1.课程设计的目的
掌握模拟文件系统的设计方法,具备初步的独立分析和设计能力。
初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
提高综合运用所学的理论知识和方法以及独立分析和解决问题的能力。
训练用系统的观点和软件开发的一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
理论联系实践提高计算机专业综合水平。
2.课程设计的要求
将所要设计的文件系统确定化,并设计出该确定化的模拟文件系统程序,要求程序有效不出现死循环,具有实际应用意义。
按操作由键盘输入所要执行的命令的代号,并输入相应要求的内容。
根据命令执行,并输出结果。
3.需求分析
3.1问题描述
实验内容和步骤:
建立一个用户接口,其功能包括能根据用户的选择,运行相应的程序模块,实现诸如改名文件、删除文件、显示文件等功能。
3.2数据结构
3.2.1类
classCuser
3.2.2结构
typedefstructUFD//存储文件信息
{
charname[10];
intattribute;
//文件属性
intlength;
inta[10];
int*p1;
//一级索引
int(*p2)[100];
//二级索引
structUFD*next;
//指向文件链表中此文件结点的下一个结点
}UFD;
3.2.3函数
UFD*Fhead;
//文件链表的头结点
intdis_file();
//显示文件所占外存块号
intdele_file(UFD*f);
//删除文件的具体实现部分
intnew_file();
intopen_file();
intfirst_dele_file();
//实现删除文件的前部分工作
3.3系统运行环境
操作系统:
WindowsXP
运行软件:
MicrosoftVisualC++6.0
4.概要设计
4.1创建文件操作
由于创建文件必须要有文件名,所以空路径和路径“\”在此成为错误。
而且正因为如此,在此模块中需要分解出文件名,再把不含文件名的路径传递给“查找模块”,其次,其中涉及了创建文件的操作,它包括:
在找到目录中的nextf中添加一项并把文件的指针指向目录,即给文件赋值等操作。
具体流程如4-1-1所示:
图4-1-1创建文件流程图
4.2删除文件操作
删除文件必须有文件名,所以不允许空路径或路径文“/”在此模块中分解出文件名,对不含文件名的路径进行处理。
删除操作在找到上一级目录后,再找出上一级目录,将之后的指针向前移一位,文件被删除。
4.3查看文件块号
文件的内存空间为1000块,每当创建一个文件分配连续的存储块号给此文件,查看的时候先输入要查询的文件名根据用户输入的文件名找到此文件和相应的块号。
5详细设计
5.1创建文件
在创建文件文件时要考虑文件的大小是否满足当前磁盘的剩余空间,只有当希望创建文件的大小小于磁盘剩余空间才可创建。
具体实现程序:
intCuse:
:
new_file()
inti=0,j=0;
UFD*p=0;
p=newUFD;
if(p==0)
{
cout<
<
"
内存空间已满,创建文件失败!
endl;
return1;
}
请输入建立的文件的名称,长度,属性(0:
只读,1:
读写)"
cin>
>
p->
name>
length>
attribute;
if(p->
disk_empty)
作业太大,当前硬盘可用空间为:
disk_empty<
deletep;
return0;
for(i=0;
i<
length&
&
10;
i++)
for(j;
j<
10000;
j++)
if(disk_block[j]==0)
p->
a[i]=j;
disk_block[j]=1;
j++;
break;
p->
p1=0;
p2=0;
if(p->
10)//一级索引的实现
{
p->
p1=newint[100];
for(i=10;
110;
for(j;
if(disk_block[j]==0)
{
(p->
p1)[i-10]=j;
disk_block[j]=1;
j++;
break;
}
if(p->
110)//二级索引的实现
p->
p2=newint[100][100];
for(i=110;
length;
for(j;
if(disk_block[j]==0)
{
intm=(i-110)/100;
intk=(i-110)%100;
p->
p2[m][k]=j;
disk_block[j]=1;
j++;
break;
}
}
if(now==0)
next=Fhead;
Fhead=p;
else
next=now->
File_head;
now->
File_head=p;
DIR*h=now;
while(h!
=0)
{
h->
length+=p->
h=h->
above;
}
cout<
文件创建成功!
disk_empty=disk_empty-p->
length+=p->
return1;
}
具体调试界面如下图所示:
图5-1-1
图5-1-2
5.2删除文件
first_dele_file()
chartemp[10];
请输入你要删除的文件名:
temp;
UFD*f=Fhead;
UFD*above=0;
if(now!
f=now->
while(f!
{
if(!
strcmp(f->
name,temp))
above=f;
f=f->
next;
if(f==0)
此文件不存在!
disk_empty+=f->
if(now==0)
if(f==Fhead)
Fhead=Fhead->
else
above->
next=f->
DIR*d=now;
while(d!
=0)//修改删除文件后各级目录的大小
d->
length-=f->
d=d->
if(f==now->
File_head)//删除文件结点
now->
File_head=now->
File_head->
length-=f->
this->
dele_file(f);
删除成功"
dele_file(UFD*f)
inti=0,m;
10&
f->
m=f->
a[i];
disk_block[m]=0;
if(f->
p1!
for(i=10;
110&
p1[i-10];
delete[](f->
p1);
p2!
for(i=110;
m=(f->
p2)[(i-110)/100][(i-110)%100];
p2);
deletef;
f=0;
具体调试如图5-2-1所示:
图5-2-1
5.3查看文件块号
dis_file()
inti;
charn[10];
请输入你要查看的文件的名称:
n;
strcmp(n,f->
name))
当前目录下没有这个文件:
此文件占用硬盘块号如下:
setw(6)<
if((i+1)%10==0)
i++)//显示一级索引块号
i++)//显示二级索引块号
p2[(i-110)/100][(i-110)%100];
具体调试如图5-3-1所示:
图5-3-1
6.总结
本次课程设计使知道了如何定义类来实现相应的功能,运用链表、指针等设计出了一个简单实用的文件管理系统同时也使以前所学知识得到巩固。
操作系统是一门将硬件功能、程序设计语言、数据结构、算法、计算机体系结构、软件工程等计算机知识紧密结合在一起的学科,它将对我今后的学习和工作产生巨大的帮助。
参考文献
[1]汤小丹.计算机操作系统(第三版).西安:
西安电子科技大学出版社,2007.5
[2]谭浩强.C++程序设计.北京:
清华大学出版社,2004
附录
课设全部程序:
#include"
disk.h"
#include<
string.h>
iostream.h>
iomanip.h>
//
intdisk_block[10000];
intdisk_empty;
Cdisk:
Cdisk()
inti=0;
charcode[10]="
123456"
;
disk_block[i]=0;
user[0].set_user("
jun"
"
123"
);
disk_empty=10000;
cout.setf(ios:
left);
~Cdisk()
intCdisk:
dele_user(inti)
CuseC;
C=user[i];
user[i].dele_user();
dis_disk()
setw(14)<
用户名"
占用空间大小"
5;
if(user[i].get_status()==1)
user[i].get_name()<
user[i].get_length()<
cout<
已用空间:
10000-disk_empty<
endl<
剩余空间:
return1;
login()
charn[10],c[10];
请输入用户名与密码,中间用空格隔开"
n>
c;
if(user[i].get_status())
if(!
strcmp(n,user[i].get_name()))
if(!
strcmp(c,user[i].get_code()))
cout<
登陆成功!
欢迎"
登陆"
returni;
else
密码错误:
return-1;
不存在用户"
return-1;
set_code()
chartemp1[10],temp2[10];
请输入密码:
temp1;
if(strcmp(temp1,code))
密码错误!
while
(1)
请输入新密码:
请再次输入新密码:
temp2;
if(strcmp(temp1,temp2))
密码设置出错!
密码设置成功!
strcpy(code,temp1);
new_user()
if(user[i].get_status()==0)
if(i==5)
{
用户名额已满,创建不成功!
return0;
}
user[i].set_status
(1);
请输入用户名称:
cin>
user[i].set_user(n,c);
用户创建成功!
first_dele_user()
charn[10],c;
请输入你要删除的用户的名称:
strcmp(user[i].get_name(),n)&
user[i].get_status())
此用户不存在!
确认删除此用户?
确认请按Y,取消请按其它键"
if(c!
='
Y'
)
已经取消删除!
this->
dele_user(i);
用户删除成功!
Cuse:
Cuse()
status=0;
length=0;
now=0;
Fhead=0;
Dhead=0;
~Cuse()
disk_empty+=length;
DIR*d=Dhead;
next==0)
while(f->
next->
next!
dele_file(f->
next);
f->
next=0;
f=Fhead;
if(d->
dele_dir(d);
d=0;
while(d->
dele_dir(d->
d=Dhead;
length