操作系统课程设计报告
题目树型目录文件系统
学 院 计算机学院
专 业 网络工程
年级班 班
学 号
学生姓名
指导教师
成 绩
200 7年 1月
树型目录文件系统
设计思想:
课程设计目实现树型目录结构文件系统实现程中利二叉树
中节点父指针子指针兄弟指针中子指针指该目录第子节点该子节点父指针指级目录目录子节点兄弟指针连接起
文件夹开文件夹名称址压入开文件夹栈文件关闭文件夹名称址开文件夹栈中抛出
文件开文件名称父指针写文件列表时置文件开标志1文件关闭文件开列表中删时置文件开指针0文件读取写入检查文件否文件开列表中未开文件读写读文件写写文件读
文件夹文件创建文件夹文件创建首先检验目录否空空文件夹文件连接该目录空检查目录否名文件夹文件提示创建成功没文件夹文件连接该目录子节点作兄弟节点
文件夹文件删文件夹没开文件文件没开删否删失败删文件夹时利中序历遍删子树
二 系统结构说明
系统结构图:
root根结点root五户户文件夹文件系统初始化时户创建file1文件文件夹容名称开标志文件名称开标志文件访问权限文件类型文件长度中文件访问权限文件类型文件长度单独作结构体文件夹结构体相结构体
开文件列表结构体包括文件名文件父节点址开文件夹栈中包括文件夹名称址
三 数结构说明
普通文件结构体
struct file{
char type 文件类型0文文件 1执行文件 2记录型文件
char right 文件权限0-读 1-写 2-读写
int f_length 文件长度
}
typedef struct file File
文件夹文件结构体
struct FCB {
char kind kind'1'文件夹 kind'2'文件
char name[20] 文件夹文件名称
bool open
File if_file
struct FCB *parent
struct FCB *brother
struct FCB *child
}
typedef struct FCB Ff
rootfcp全局变量
Ff *root根节点
Ff *fcpnull判断否拷贝文件
开项结构体
typedef struct{
char name[20]名称
Ff *node 指针开文件夹记录文件夹址文件记录文件父节点
}opened
int OPFO0 记录文件夹开数目20
opened folderopened[20]记录文件开文件夹
int OPFI0 记录文件开数目20
opened fileopened[20]记录开文件
四 函数清单部分函数流程图
函数声明
void init()初始化创建根节点
void initopen()初始化开文件列表开文件夹文件列表
Ff* creat(Ff *parentchar name[20]char kind)创建文件文件夹
void delet(Ff *parentchar delname[20]char kind)删文件文件夹
void delSub(Ff *delp) 删子树(配合删文件夹)
void openfolder(Ff *parent char name[20])开文件夹
void openfile(Ff *parent char name[20])开文件
void closefo() 关闭文件夹
void closefile(char name[20]) 关闭文件
void read(Ff*parentchar name[20]) 读文件
void write(char name[20]) 写文件
void show() 显示初始界面
void initfile() 初始化户户创建file1文件
int ishaveopen(Ff *bedel) 判断文件夹否开文件文件夹
void filecpy(Ff *parentchar name[20])文件复制函数
void pastefile(Ff *parent) 文件粘贴
函数流程图:
函数开始执行时先初始化初始化包括创建root根目录创建user0~user4五户户创建file1文件
初始化完毕显示选择户退出系统两操作列出户选择1进入选择户界面选择户列出户目录容时显示操作界面选择操作执行相应操作执行完毕回选择操作界面
创建文件夹文件函数流程图(creat()):
创建文件文件夹首先通函数选择操作传递参数kind=1创建文件夹kind=2创建文件文件文件夹名称户输入文件文件夹父节点folderopened[OPFO1]node传递
果前目录名文件名文件夹创建文件创建文件夹成功
前目录空目录创建文件文件夹前目录首子节点Parent指针指前目录前目录child指针指文件文件夹
前目录空文件文件夹连接前目录子节点面作兄弟节点
删文件文件夹函数delet()流程图:
样删文件文件夹类型参数户选择操作时传递Kind1删文件夹kind=2删文件名称户输入
文件开列表文件夹中开文件文件文件夹删目录没该文件文件夹删失败删失败时返回相应信息
果目录该文件文件夹文件没开文件夹中没开文件删该释放该节点该子树返回删成功信息
流程图:
文件开函数流程图openfile():
文件开开前目录文件首先查找文件否开文件列表中返回文件已开文件列表中信息查前目录没该文件开时文件名父节点址写文件队列中置文件开标志1返回开成功信息
文件开返回层目录目录文件会开文件列表中删非文件目录执行关闭文件操作关闭文件文件开文件列表中删
流程图:
文件删函数说明流程图:
文件删前目录文件进行操作文件开队列中关闭失败返回提示信息开列表中关闭文件置文件开标志0
流程图:
文件夹开关闭函数说明:
文件夹开开前目录文件夹开文件夹名称节点址写文件夹堆栈中(果开目录写开文件夹堆栈)时列出文件夹目录容关闭文件夹(返回级目录)前目录开文件夹堆栈中抛出时开级目录
开文件夹关闭文件夹函数源程序:
开文件夹:
void openfolder(Ff *parent char name[20])
{
Ff *select*beopen
if(parent>child) 目录空
{
printf(没文件)
return
}
beopenparent>child
while(beopen) 寻找开文件夹
{
if(beopen>kind'1')
{
if(strcmp(beopen>namename)0) 文件夹找
{
break
}
}
if(beopen>brother)
{
printf(文件夹存\n)
return
}
beopenbeopen>brother
}
while end
if(beopen>child)
{
printf(该文件夹空\n)
if(OPFO>2)
{
if(folderopened[OPFO2]nodeparent)
{
if(strcmp(folderopened[OPFO1]namename)0)
return
}
}
folderopened[OPFO]nodebeopen
strcpy(folderopened[OPFO]namebeopen>name)
OPFO++
return
}
if(beopen>child)
{
selectbeopen>child
while(select) 列出文件夹容
{
for(int i0i<3&&selecti++)
{
printf(sselect>name)
if(select>kind'1')
{
printf((文件夹)\t)
}
if(select>kind'2')
{
if(select>if_filetype'0')
{
printf((文文件 dk)\tselect>if_filef_length)
}
if(select>if_filetype'1')
{
printf((执行文件 dk)\tselect>if_filef_length)
}
if(select>if_filetype'2')
{
printf((记录型文件 dk)\tselect>if_filef_length)
}
}
selectselect>brother
}
printf(\n)
}
if(OPFO>2)
{
if(folderopened[OPFO2]nodeparent) 开文件夹堆栈中已写堆栈
{
if(strcmp(folderopened[OPFO1]namename)0)
return
}
}
folderopened[OPFO]nodebeopen 开文件夹堆栈写堆栈
strcpy(folderopened[OPFO]namebeopen>name)
OPFO++
return
}
}
关闭文件夹源程序:
文件夹关闭
void closefo()
{
if(OPFO2) 返回根结点执行返回操作
{
printf(里根节点\n)
show()
OPFO
return
}
OPFO
openfolder(folderopened[OPFO2]nodefolderopened[OPFO1]name)
folderopened[OPFO]nodenull
}
删子树函数(void delSub())判断文件夹否文件开函数(int ishaveopen())
两函数辅助删文件夹函数删子树函数序历遍树方法 删子树递函数Ishaveopen()函数利先序历遍树方法判断文件夹否开文件递函数开文件返回1否返回0
删子树函数源程序:
删子树
void delSub(Ff *delp)
{
if(delp>brother) delSub(delp>brother)历遍brother子树
if(delp>child) delSub(delp>child)历遍child子树
free(delp)释放节点
}
判断文件夹否开文件函数源程序:
辅助del函数中删文件夹
int ishaveopen(Ff *bedel)
{
if(bedel>opentrue)
{
return 1
}
if(bedel>brother)
ishaveopen(bedel>brother)
if(bedel>child)
ishaveopen(bedel>child)
else
return 0
}
文件复制粘贴函数说明:
文件复制前目录查找复制文件查找返回信息拷贝失败
查找创建新节点复制文件信息写道新节点相应项里
文件粘贴首先判断fcp否空空表明没复制文件执行粘贴操作
空查找前目录否名文件询问户否覆盖已存文件
复制代覆盖文件释放覆盖文件资源否退出没复制文件名文件文件连目录子节点
粘贴文件源程序:
粘贴文件
void pastefile(Ff *parent)
{
Ff *select*cover
char opt
if(fcp)
{
printf(没拷贝文件请先拷贝文件\n)
return
}
if(parent>child) 目录空目录
{
fcp>childparent
parent>childfcp
fcpnull
printf(粘贴成功\n)
return
}
selectparent>child
if(select>kind'2')覆盖文件目录第子节点
{
if(strcmp(select>namefcp>name)0)
{
printf(该目录已文件否覆盖(yn))
getchar()
scanf(c&opt)
if(opt'Y'||opt'y')
{
fcp>brotherselect>brother
fcp>childselect>child
fcp>parentselect>parent
parent>childfcp
select>brothernull
select>childnull
select>parentnull
free(select)
printf(覆盖成功\n)
fcpnull
return
}
else
return
}
}
while(select>brother)查找目录否名文件
{
if(select>brother>kind'2')
{
if(strcmp(select>brother>namefcp>name)0)
{
printf(该目录已文件否覆盖(yn))
getchar()
scanf(c&opt)
if(opt'Y'||opt'y')覆盖名文件
{
coverselect>brother
fcp>brothercover>brother
fcp>childcover>child
fcp>parentcover>parent
select>brotherfcp
free(cover)
printf(覆盖成功\n)
fcpnull
return
}
else
return
}
}
selectselect>brother
}
select>brotherfcp目录没名文件
fcpnull
return
}
五程序运行效果:
初始界面:
选择1进入界面:
选择户进入界面:
户1文件file1
建立文件成功失败图示:
建立名文件时创建出错名文件创建成功
删文件成功失败图示:
1 删文件file1file1没开删成功:
目录剩file2
2 删ff文件目录没文件删失败:
3 文件file2开删删失败:
创建文件夹成功失败图示:
创建文件夹new目录中没new文件夹创建成功:
创建文件夹new目录中文件夹new创建失败:
删文件夹成功失败图示:
首先建立文件夹folderfolder里创建文件new开文件new
时提示删失败:
关闭文件new删成功:
时户少文件夹folder
文件拷贝粘贴:
首先new文件夹创建hello文件拷贝hello文件
拷贝成功:
回层目录useer1文件粘贴目录粘贴成功:
时user1文件hello
写读文件成功失败图示:
读文件file2file2没开读失败:
开文件file2然读取读取成功:
写文件写file2file2已开写成功:
关文件file2写文件file2成功:
显示路径
进入文件夹:
进入文件夹new更清楚路径进入文件夹news命令显示前路径:
返回操作返回user1目录更清楚路径返回s命令显示前路径:
六 说明书(程序运行时已明显提示提示操作)
七 体会心:
次课程设计选择树型结构文件系统设计题目刚刚开始时知道设计知道概结构认真阅读课关知识知道样设计结构体方便文件操作知道样设计写程序时遇障碍特指针改接指出错处理时深感编程力足次修改终设计该设计
通该课程设计更解课知识巩固课知识时编程力定提高
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档