170 likes | 302 Vues
操作系统课程设计. 一、题目. 编制文件管理模拟程序,进行文件的操作与管理 —— “ 模拟文件管理系统”。. ^. 用户名. 用户目录指针. Z 1. Z 2. Z 5. W 5. W 4. ^. 二、算法功能与要求. 1 )采用两级目录进行文件管理(最多不超过 5 个用户) 主目录( MFD ):采用顺序表存储结构 用户文件目录( UFD ):采用链式存储结构. 二、算法功能与要求(续).
E N D
一、题目 编制文件管理模拟程序,进行文件的操作与管理—— “模拟文件管理系统”。
^ 用户名 用户目录指针 Z1 Z2 Z5 W5 W4 ^ 二、算法功能与要求 1)采用两级目录进行文件管理(最多不超过5个用户)主目录(MFD):采用顺序表存储结构 用户文件目录(UFD):采用链式存储结构
二、算法功能与要求(续) 2)采用菜单方式与用户交互,实现文件操作(使用)1.建立文件 2.打开文件 3.删除文件4.关闭文件 5.读文件 6.写文件7.显示目录 8.显示文件 9.退出操作 3)可反复选择不同用户,针对性实施文件操作
用户名 username [ ] ① 主目录 (link f) 结构体数组 用户文件目录指针 next 文件名 filename [ ] ② 用户文件目录 (link s) 文件长度 length 链表 串联文件链接指针(头指针) headlink 表目链表指针 next 三、数据结构
姓名 name [ ] 文件名 filename [ ] 文件长度 length(记录数) 串联文件或顺序文件 性别 sex ④ 打开文件表 (link t) 文件——记录类型 (link r) 0 未修改 ③ 修改标志 flag = 记录 1 修改过 链表 串联文件链接指针 next 串联文件头指针 headlink 表目链表指针 next
… … 第一个记录 动态分配 静态分配 afd … … 文件 文件
初始化用户文件目录及打开文件表指针(NULL=> ufd,afd) 初始化主目录(空格串=>mfd[i].username, NULL=> mfd[i].next) 提示用户输入用户数=> n 输入用户名,查子目录 若无同名用户,建立新表目,填入用户名 (不同名标志w=0) 建立主目录(不允许重名) 最多输入五个用户名 显示主目录(调用print1()函数) 提示用户输入欲操作的用户名 => username 用username查主目录 找到对 应用户? N Y (其表目下标在i中) i => flag(置当前用户标记) 对应主目录(链表)首表目地址 => ufd 显示命令菜单,提示用户输入命令代码 => S 根据代码S转相应处理程序,直到代码S=9 …… Y 继续下一 用户? N 结束操作 四、算法流程 1)主程序 main()
提示用户输入欲建立文件名 =〉x 用x查用户文件目录(ufd 所指链表) Y 有同 名文件? 找到同名文件 输出“文件已建立”提示串,返回 N 分配新的表目结点空间 =〉P2 Y 文件目 录空? (ufd = NULL) P2所指结点插在链首 N P2所指结点插在链尾 存入文件名到新结点 置文件长度为0 置文件物理地址指针为NULL 置表目链指针为NULL 置入表目 数据 输出“完成文件建立”提示串,返回 2)建立新文件 pcreate()
输入文件名=〉x • 查用户文件目录ufd • 查打开文件表afd • 建立新表目,插在 afd表尾 未找到,返回(文件未找到) 找到,转下一步 找到,返回(文件已打开) 未找到,下一步 复制存入文件名,文件长度,文件物理地址指针,置未修改标志(0→flag) 输出“文件已打开”提示串,返回 注:任何文件必须先打开后使用(包括读、写和查看显示) 3)打开文件 popen() =〉只给出算法思想:
输入文件名=〉x • 查打开文件表afd • 将对应文件表目从afd链中删除 • 判断修改标志flag flag = • 用x查ufd,找到对应文件表目复制打开文件表中对应文件的长度及物理地址=〉该表目 • 释放afd,删除结点空间,返回 未找到,返回 找到,下一步 0 未修改,转第⑥步 1 修改,转第⑤步 4)关闭文件 pclose() 算法思想:
输入文件名=〉x • 查打开文件表afd • 查用户文件目录ufd • 将对应表目从ufd中删除 • 释放回收文件记录空间 • 释放表目结点空间 free(*q2),返回 找到,将其表目结点从afd中删除(先关闭) 未找到,下一步 未找到,返回(文件名不对) 找到,下一步 5)删除文件 pdelete() 算法思想:
输入文件名=〉x • 查打开文件表afd • 分配记录存储空间=〉p • 提示用户输入记录数据 • 将该记录插在串联文件链尾 • 置修改标志 1=〉flag • 文件长度计数 length++ • 返回 未找到,返回(文件未打开) 找到,下一步 name =〉p→name sex =〉p→sex 6)写文件 pwrite() 算法思想:
7)读文件 pread() • 输入文件名 • 查打开文件表afd • 提示用户输入欲查找记录号=〉Ri • 查找串联文件,找到第Ri个记录(未找到Ri出错返回) • 输出记录号,姓名,性别等记录信息后,返回 算法思想 未找到,返回 找到,下一步 注: • 可在找到记录显示内容后,询问用户是否要修改记录值?若要修改则输入新的记录值(姓名或性别)存入记录(结点) • 若采用顺序文件结构,可用动态数组存放记录上述两函数(读/写)稍作修改即可 • 可根据上述算法思想编写 pread和pwrite函数
8)其它程序模块(函数) print1():显示主目录 print2():显示当前用户的文件目录 print3():显示文件内容 close():退出某用户操作时,关闭所有打开文件(注意:必要时复制打开文件的文件长度及文件物理地址到用户文件目录的对应文件表目中)
五、课设内容及步骤 • 消化课设算法思想及样本程序给出对应模块(函数)的流程图 • 编制 建立、删除、打开、关闭、读、写 函数 • 准备调试数据(至少两个用户,若干文件),能实施多个命令操作 • 上机编辑、编译源程序,并进行调试 • 利用准备好的调试数据,运行测试程序,观察运行结果,并作记录和分析
书写课程设计总结报告 • 统一格式封面 • 目录课设名称及题目算法思想及功能算法流程图,算法程序调试运行情况收获与体会(包括算法改进的讨论,注意点等) • 报告内容必须清楚,且独立完成