【精选】操作系统课程设计(文件系统管理)文件

合集下载

操作系统课程设计-文件系统目录管理

操作系统课程设计-文件系统目录管理

操作系统课程设计-文件系统目录管理目录第一章课程设计目的和要求 (1)1 课程设计目的 (1)2 课程设计要求 (1)2.1 课程设计思想原理 (1)2.2 课程题目 (1)2.3 提交课程设计报告 (2)第二章课程设计内容 (3)1 文件管理系统结构 (3)2 文件系统采用索引文件结构 (3)2.1 磁盘模拟 (3)2.2文件的逻辑结构 (3)2.3目录结构 (3)2.4用户接口 (5)第三章详细设计 (7)1 程序功能模块图 (7)2 实体关系图 (7)3 数据流图 (8)4 数据结构设计 (8)5 程序流程图 (11)5.1 建立文件目录(mkdir)程序流程图 (11)5.2 删除文件目录(rmdir)程序流程图 (12)第四章程序运行与测试 (13)1 程序运行主界面 (13)2 用mkdir [dirname] 命令创建子目录 (13)3用ls命令显示当前目录下信息 (13)4 用rmdir [dirname] 命令删除子目录 (14)5 用cd [dirname] 命令改名当前目录 (14)第五章课程设计总结 (16)附录Ⅰ参考文献 (17)附录Ⅱ程序清单 (18)第一章课程设计目的和要求1 课程设计目的操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。

本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。

通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。

同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

2 课程设计要求2.1 课程设计思想原理阅读操作系统方面的书籍,了解操作系统的文件系统原理。

结合分析课程设计要求,确定实体以及它们之间的关系。

操作系统课程设计-文件管理

操作系统课程设计-文件管理

目 录一、基本想 .............................................. - 0 -1.1编写目的 ................................................. - 1 -1.2简单描述 ................................................. - 1 -二、公共变量及数据结构 .................................. - 1 -2.1公共变量 ................................................. - 1 -2.2数据结构 ................................................. - 1 -三、主要函数的过程描述 .................................. - 2 -3.1 路径显示 ................................................. - 2 -3.2右键快捷菜单操作 ......................................... - 3 -3.3命令窗口 ................................................. - 3 -3.4创建文本文档 ............................................. - 4 -3.5创建可执行文件 ........................................... - 4 -3.5.1指令选择 ............................................... - 4 -3.5.2已选指令删除 ........................................... - 5 -3.5.3创建可执行文件 ......................................... - 5 - 四、运行截图 ............................................ - 6 -4.1主界面 ................................................... - 6 - 4.2树形结构及右键快捷菜单 ................................... - 6 - 4.3创建文本文档 ............................................. - 7 - 4.4创建可执行文件 ........................................... - 8 - 五、使用说明 ............................................ - 8 -5.1功能说明 ................................................. - 8 -5.2操作说明 ................................................. - 8 -5.2.1快捷菜单及命令窗口 ..................................... - 8 -5.2.2创建文本文档 ........................................... - 9 -5.2.3创建可执行文件 ......................................... - 9 -5.2.4删除文件 ............................................... - 9 -六、总结 ................................................ - 9 -一、基本思想装订线1.1编写目的通过课程设计,加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统,设计、构造和开发现代操作系统的基本能力。

j操作系统文件课程设计

j操作系统文件课程设计

j操作系统文件课程设计一、课程目标知识目标:1. 理解操作系统的基本概念,掌握文件系统的组成和功能。

2. 学会使用操作系统提供的文件管理命令,对文件进行基本操作。

3. 掌握文件权限和文件属性的相关知识,了解文件安全性。

技能目标:1. 能够独立使用命令行对文件进行创建、删除、复制和移动等操作。

2. 学会运用文件权限设置,保障文件安全。

3. 能够对文件系统进行简单的问题排查和故障处理。

情感态度价值观目标:1. 培养学生的团队协作精神,学会在小组讨论中分享和倾听。

2. 增强学生的信息安全和隐私保护意识,养成良好的文件管理习惯。

3. 激发学生对计算机操作系统的兴趣,提高学习积极性。

分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握操作系统文件管理知识的基础上,提高实际操作能力和问题解决能力。

通过课程学习,让学生能够更好地应对日常生活中的文件管理需求,同时培养良好的信息素养和团队协作精神。

后续教学设计和评估将围绕这些具体的学习成果展开。

二、教学内容1. 操作系统基本概念:介绍操作系统的定义、功能和分类,以课本第二章第一节为基础,让学生了解操作系统的基本知识。

2. 文件系统组成与功能:讲解文件系统的层次结构、存储设备和文件存储格式,对应课本第二章第二节内容。

3. 文件管理命令:教授常用的文件管理命令,如创建、删除、复制、移动、查看文件等,以课本第三章为基础,分课时逐一讲解。

4. 文件权限与属性:介绍文件权限的设置、修改和查看,以及文件属性的概念,结合课本第四章内容进行教学。

5. 文件安全与隐私保护:讲解文件权限在实际应用中的作用,如何保护文件安全,防止数据泄露,以课本第四章第三节为参考。

6. 文件系统问题排查与故障处理:教授如何识别和解决文件系统常见问题,如文件丢失、磁盘空间不足等,对应课本第五章内容。

教学内容安排和进度:第一课时:操作系统基本概念第二课时:文件系统组成与功能第三课时:文件管理命令(一)第四课时:文件管理命令(二)第五课时:文件权限与属性第六课时:文件安全与隐私保护第七课时:文件系统问题排查与故障处理教学内容确保科学性和系统性,以课本为基础,结合实际教学需求进行组织,旨在帮助学生扎实掌握操作系统文件管理的相关知识。

操作系统课程设计---文件管理

操作系统课程设计---文件管理
else {p=p3->headlink; i=1;
printf("| num | name | sex |\n");
printf("---------------------------------------\n");
struct linkr *headlink;
struct linkt *next;
};
struct linkf mfd[5];
struct links *ufd,*p2,*q2;
struct linkr *p,*q;
struct linkt *afd,*p3,*q3;
if(afd==NULL) afd=p3; else q3->next=p3;
strcpy(p3->filename,X);
p3->length=p2->length;
p3->headlink=p2->headlink;
q2=q2->next;
if(strcmp(q2->filename,X)==0)
{printf("File has already been created!\n");
return;
}
}
p2=(struct links *)malloc(sizeof(struct links));
scanf("%s",X);
p3=afd;
if(p3!=NULL)
{ while((strcmp(p3->filename,X)!=0)&&(p3->next!=NULL))
{ q3=p3;

操作系统课程设计-文件系统

操作系统课程设计-文件系统

操作系统课程设计-文件系统一、引言文件系统是操作系统中的重要组成部分,负责对计算机中的文件进行管理和组织。

在操作系统课程设计中,文件系统的设计和实现是一个重要的任务。

本文将介绍文件系统的设计原则、功能和实现过程。

二、设计原则1. 可靠性文件系统需要确保数据的可靠性,能够有效地进行错误检测和纠正。

它应该能够处理文件的损坏、删除或丢失等情况,并能够进行数据恢复。

2. 效率文件系统需要具备高效的存取和查找功能,能够在较短的时间内完成对文件的操作。

它应该对文件进行良好的组织和管理,以提高文件的读写速度。

3. 安全性文件系统要能够保护文件的机密性和完整性,确保只有授权用户才能访问文件,并防止数据被恶意篡改或破坏。

4. 可扩展性文件系统应该能够适应不同容量和规模的存储设备,并能够随着存储需求的增长而进行扩展。

三、功能1. 存储管理文件系统需要对存储设备进行管理,包括磁盘空间的分配、回收和整理等操作,确保文件能够高效地存储和读取。

2. 目录管理文件系统需要提供目录管理功能,能够对文件进行组织和分类。

用户可以根据目录结构查找和管理文件,方便文件的查找和访问。

3. 文件操作文件系统需要支持各种文件操作,包括创建、删除、打开、关闭、读取和写入等操作。

它应该提供一组接口供用户和应用程序使用。

4. 错误处理文件系统需要对各种错误情况进行处理,包括磁盘故障、读写错误和用户操作错误等。

它应该能够识别和纠正错误,并提供相应的错误提示和恢复机制。

四、实现过程1. 文件分配文件系统需要确定如何将磁盘空间分配给文件,以实现高效的存储和检索。

常见的文件分配方式包括连续分配、链式分配和索引分配等。

2. 目录结构文件系统需要设计合适的目录结构,以方便用户查找和管理文件。

常见的目录结构包括树状目录结构、索引节点和哈希表等。

3. 文件读写文件系统需要实现高效的文件读写功能,包括将文件从磁盘读入内存和将文件从内存写入磁盘。

它应该提供缓存机制来加速读写操作。

文件管理系统课程设计

文件管理系统课程设计

课程名称:操作系统实验题目:文件管理系统1、课程设计选题 (3)1.1主要设计内容 31.2主要设计思路 32、课程设计需求分析 33、概要设计 (4)3.1整体设计框架 43.2各模块的基本功能 44、系统实现 5 4.1原理 6 4.2各模块算法思想 6 4.3流程图描述 94.4代码描述 105、系统测试 115.1系统主界面 115.2子系统功能测试 116、总结 197、参考文献样式 191、课程设计选题1.1主要设计内容本课程设计主要是用C语言编写,设计的是一个模拟的多用户多级目录的文件管理系统。

通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

1.2主要设计思路首先系统要完成初始化的任务,建立起整个系统,等待用户注册,注册成功后,用户登录模块,对用户的用户名进行验证,如果用户登录成功,则系统进入等待用户输入的状态,用户选择相应指令后,系统按照即定方式处理用户请求,用户退出后,系统转入登录模块,等待下一位用户的登录。

2、课程设计需求分析本系统为多用户多级目录的文件管理系统,用户可以根据所注册的用户名登陆来对文件或是文件进行操作。

多用户功能可以满足不同用户不同的需求,同时也起到了很好的保密作用。

文件系统为用户提供了按名存取的功能,以使得用户能透明地存储访问文件。

为了实现按名存取,文件需要对文件存储设备进行合理的组织,分配;对存储在文件存储设备上的文件进行保护,保密和提供共享的手段。

另外,文件系统还要提供检索文件或文件中记录的手段,文件系统就是完成上述功能的一组软件和数据结构的集合。

模拟一个文件管理系统,要完成对文件的基本操作,文件的基本操作有文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。

系统建立了文件目录树,存储文件系统中的所有文件。

对于用户名下的文件,用文件目录树的分枝来存贮。

采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作就行了。

操作系统课程设计文件管理系统

操作系统课程设计文件管理系统

操作系统课程设计文件管理系统1. 引言文件管理是操作系统中的一个重要模块,负责对计算机中的文件进行管理和组织。

在操作系统课程设计中,设计一个文件管理系统是一个很有挑战性的任务,需要考虑到文件的创建、打开、读取、写入、删除等功能,并且要确保文件的安全性和可靠性。

本文将详细介绍文件管理系统的设计与实现。

2. 需求分析为了满足用户对文件管理的需要,我们需要对文件管理系统的需求进行分析。

在这个文件管理系统中,用户应该能够执行以下操作:•文件的创建和命名•文件的打开和关闭•文件的读取和写入•文件的删除和修改•文件的搜索和查找除此之外,还要考虑到对文件权限的管理,可以设置不同用户对文件的不同访问权限,以保障文件的安全性。

3. 概要设计概要设计是对文件管理系统的整体架构和功能进行规划和设计。

文件管理系统可以采用层次结构的设计方式,分为用户界面、文件管理模块和存储管理模块。

3.1 用户界面用户界面是用户与文件管理系统进行交互的接口,可以通过命令行或者图形界面来实现。

在用户界面中,用户可以输入相关指令来执行对文件的操作,如创建文件、打开文件、读取文件等。

3.2 文件管理模块文件管理模块是文件管理系统的核心模块,负责对文件进行创建、打开、读取、写入、删除等操作。

在文件管理模块中,需要维护一个文件目录表来记录文件的基本信息,如文件名、文件大小、文件权限等。

还需要考虑到文件的分配和回收,可以使用位示图等方式进行实现。

3.3 存储管理模块存储管理模块负责对文件进行存储和管理,包括磁盘空间的分配和回收。

在存储管理模块中,可以采用文件分配表或者索引节点进行存储方式的选择。

4. 详细设计在详细设计阶段,需要对概要设计中的每个模块进行详细设计,并确定各个模块之间的接口和数据结构。

4.1 用户界面设计用户界面设计可以采用命令行方式进行实现。

用户可以通过命令输入来执行相应的文件管理操作。

可以设计一系列命令,如create用于创建文件,open用于打开文件,read用于读取文件等。

操作系统课程设计-文件系统目录管理

操作系统课程设计-文件系统目录管理

文件管理系统——目录文件管理的设计目录第一章课程设计目的和要求 (1)1 课程设计目的 (1)2 课程设计要求 (1)2.1 课程设计思想原理 (1)2.2 课程题目 (1)2.3 提交课程设计报告 (2)第二章课程设计内容 (3)1 文件管理系统结构 (3)2 文件系统采用索引文件结构 (3)2.1 磁盘模拟 (3)2.2文件的逻辑结构 (3)2.3目录结构 (3)2.4用户接口 (5)第三章详细设计 (7)1 程序功能模块图 (7)2 实体关系图 (7)3 数据流图 (8)4 数据结构设计 (8)5 程序流程图 (11)5.1 建立文件目录(mkdir)程序流程图 (11)5.2 删除文件目录(rmdir)程序流程图 (12)第四章程序运行与测试 (13)1 程序运行主界面 (13)2 用mkdir [dirname] 命令创建子目录 (13)3用ls命令显示当前目录下信息 (13)4 用rmdir [dirname] 命令删除子目录 (14)5 用cd [dirname] 命令改名当前目录 (14)第五章课程设计总结 (16)附录Ⅰ参考文献 (17)附录Ⅱ程序清单 (18)第一章课程设计目的和要求1 课程设计目的操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。

本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。

通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。

同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

2 课程设计要求2.1 课程设计思想原理阅读操作系统方面的书籍,了解操作系统的文件系统原理。

结合分析课程设计要求,确定实体以及它们之间的关系。

操作系统课程设计-文件管理实验报告

操作系统课程设计-文件管理实验报告

操作系统课程实验报告2013~2014年度第1学期院系:学号:姓名:任课教师:成绩评定:实验一题目:文件管理完成日期:年月日1、实验目的了解文件管理的功能和任务,理解文件系统组成和特点,熟悉文件系统的访问和操作。

实验要求用高级语言编写和调试一个简单的模拟文件管理程序。

加深理解有关盘块的分配与回收、目录管理等的具体实施策略。

2.、实验内容模拟一个资源管理器进行文件操作,包括建立和删除目录、建立和删除文件等基本文件操作。

建立相应的数据结构(如:位示图等),模拟盘块管理。

可以参照图6界面进行设计。

3、算法设计1)、定义主面板MainFrame,布局好各个控件,并初始化/** 往node节点下添加一个子节点obj;*/public void addChild(Object obj, DefaultMutableTreeNode node) {if (obj != null && node != null) {DefaultMutableTreeNode temp = new DefaultMutableTreeNode(obj);if (node.getAllowsChildren())node.add(temp);if(!((String) obj).equals("A:\\") && ((String) obj).length() <= 3)// 防止读取A软驱,会出现异常;用于初始用的;addChildren(cmd.listAll((String) obj), temp);}}/** 在node节点下添加数组children;*/public void addChildren(String[] children, DefaultMutableTreeNode node) { if (children != null && node != null) {for (int i = 0; i < children.length; i++) {addChild(children[i], node);}}}/** 对树的节点进行预提取;*/public void addPrefetchChildren(String path, DefaultMutableTreeNode node) { addChildren(cmd.listDirectory(path), node);}/** 对路径路径进行连接;(已经获得了所有的整个路径,需要量转化)*/public String toFilePath(String str) {// 先去掉头尾的[];String pa = str.substring(1, str.length() - 1);String[] temp = pa.split(", ");String path = "";for (int i = 1; i < temp.length; i++) {if (!path.endsWith("\\") && !path.equals(""))// 不为空是为去根节点;path += "\\";path += temp[i];}return path;}public String toPFilePath(String str) {// 先去掉头尾的[];String pa = str.substring(1, str.length() - 1);String[] temp = pa.split(", ");String path = "";for (int i = 1; i < temp.length - 1; i++) {if (!path.endsWith("\\") && !path.equals(""))// 不为空是为去根节点;path += "\\";path += temp[i];}return path;}public class ExpandListener implements TreeWillExpandListener {/** 树展开及收缩监听;*/private MainFrame mainFrame = null;public ExpandListener(MainFrame mainFrame) {this.mainFrame = mainFrame;}public void treeWillExpand(TreeExpansionEvent event) {// 对节点的路径进行转化String path = toFilePath(event.getPath().toString());TreePath treePath = event.getPath();DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent();// System.out.println("所展开节点的路径:" + path);// System.out.println(treePath);if (node.getDepth() < 2) {Enumeration children = node.children();String filePath = "";while (children.hasMoreElements()) {DefaultMutableTreeNode temp = (DefaultMutableTreeNode) children.nextElement();filePath = "";filePath = path;if (!filePath.endsWith("\\"))filePath += "\\";filePath += temp.toString();// System.out.println("temp=" +filePath);mainFrame.addPrefetchChildren(filePath, temp);}}}2)、添加功能“添加文件(夹)addframe()”、“修改文件(夹)mvframe()”public void addframe() {JFrame addFrame = new JFrame();JLabel jlbl = new JLabel("请输入要添加的文件(夹)名:");addrs = new JLabel("");addrs.setBounds(180, 10, 100, 25);jlbl.setBounds(10, 10, 170, 25);addfile = new JTextField();addfile.setBounds(10, 40, 260, 25);btnaddf = new JButton("添加文件");btnaddd = new JButton("添加文件夹");btnaddf.setBounds(20, 80, 100, 25);btnaddd.setBounds(160, 80, 100, 25);btnaddf.addActionListener(this);btnaddd.addActionListener(this);addFrame.add(jlbl);addFrame.add(addrs);addFrame.add(addfile);addFrame.add(btnaddf);addFrame.add(btnaddd);addFrame.setBounds(400, 350, 300, 150);addFrame.setTitle("添加文件(夹)");addFrame.setLayout(null);addFrame.setVisible(true);}public void mvframe() {JFrame mvFrame = new JFrame();JLabel jlbl = new JLabel("请输入修改后的文件名:");mvrs = new JLabel("");mvrs.setBounds(160, 10, 140, 25);jlbl.setBounds(10, 10, 170, 25);mvfile = new JTextField();mvfile.setBounds(10, 40, 260, 25);btnmvf = new JButton("修改文件名");btnmvd = new JButton(" 修改文件夹名");btnmvf.setBounds(10, 80, 120, 25);btnmvd.setBounds(150, 80, 120, 25);btnmvf.addActionListener(this);btnmvd.addActionListener(this);mvFrame.add(jlbl);mvFrame.add(mvrs);mvFrame.add(mvfile);mvFrame.add(btnmvf);mvFrame.add(btnmvd);mvFrame.setBounds(400, 350, 300, 150);mvFrame.setTitle("修改文件(夹)名");mvFrame.setLayout(null);mvFrame.setVisible(true);}}3)显示文件* 显示系统中的所有盘符;public String[] ListDisks() {File roots[] = File.listRoots();// 根盘符;String disks[] = new String[roots.length];for (int i = 0; i < roots.length; i++) {disks[i] = roots[i].toString();}return disks;}* 获得路径path下的文件;public String[] listAll(String path) {try {File f = new File(path);String[] fileName;String tmp = null;mainFrame.fileshow.setText(null);mainFrame.filestyle.setText(null);if (f.isDirectory()) {fileName = f.list();// System.out.println("共有" + fileName.length + "个文件");for (int i = 0; i < fileName.length; i++) {mainFrame.fileshow.append(fileName[i] + '\n');tmp = path + '\\' + fileName[i];// System.out.println(tmp);if (listDirectory(tmp) != null) {mainFrame.filestyle.append("文件夹\n");} else {mainFrame.filestyle.append("文件\n");}}return fileName;} else if (f.isFile()) {System.out.println("这是一个文件");return null;} else {// System.out.println(path);return null;}} catch (Exception e) {return null;}}public String[] listDirectory(String path) {File f = new File(path);String[] fileName;if (f.isDirectory()) {fileName = f.list();return fileName;} else {// System.out.println(path + "是文件");return null;}}* 进行md操作;md <目录名> 功能: 创建新目录public void md(String directory) {if (!mainFrame.currentPath.equals("")) {String temp = mainFrame.currentPath + "\\" + directory;File newFile = new File(temp);if (!newFile.exists()) {try {if (newFile.isDirectory() == false) {newFile.mkdirs();System.out.println("文件夹创建成功!");} else {System.out.println("文件夹创建出错!");}} catch (Exception e) {System.out.println("出错信息:" + e.getMessage());}} else {System.out.println("文件夹已经存在");}}}* 进行rd操作;rd <目录名> 功能: 删除目录;public void del() {String temp = mainFrame.currentPath;File file = new File(temp);if (file.exists()) {if (file.delete()) {mainFrame.fileshow.setText("文件(夹)删除成功!");} else {mainFrame.fileshow.setText("文件(夹)删除操作出错!");}} else {mainFrame.fileshow.setText("文件(夹)不存在");}}/** 进行edit操作:edit <文件名> 功能: 新建文件*/public void edit(String file) {if (!mainFrame.currentPath.equals("")) {String temp = mainFrame.currentPath + "\\" + file;File newFile = new File(temp);if (newFile.exists()) {mainFrame.addrs.setText("文件已经存在!");System.out.println("文件已经存在!");} else {try {newFile.createNewFile();mainFrame.addrs.setText("文件创建成功!");System.out.println("文件创建成功!");} catch (Exception e) {System.out.println("文件创建失败:" + e.getMessage());}}}}public void mvf(String file){if (!mainFrame.PPath.equals("")) {String temp = mainFrame.PPath + "\\" + file;File newFile = new File(mainFrame.currentPath);if (newFile.exists()) {if(newFile.renameTo(new File(temp))==true){mainFrame.mvrs.setText("修改文件名成功!");}else{mainFrame.mvrs.setText("存在同名文件!");}}}}public void mvd(String dir){if (!mainFrame.PPath.equals("")) {String temp = mainFrame.PPath + "\\" + dir;File newFile = new File(mainFrame.currentPath);if (newFile.exists()) {if(newFile.renameTo(new File(temp))==true){mainFrame.mvrs.setText("修改文件夹名成功!");}else{mainFrame.mvrs.setText("存在同名文件夹!");}}}}}4、运行与测试运行时,弹出主界面双击文件盘C在E盘路径添加文件夹操作系统,再添加文件操作系统如果文件已存在会显示可以更改文件名称删除文件,不过有个BUG,要文件一层层删,才可以删除。

操作系统课程设计文件管理二级文件系统

操作系统课程设计文件管理二级文件系统

本文档分别包含linux和windows两套程序目录一、课程设计的目的..........................二、课程设计的内容及要求...................内容..........................................要求..........................................三、实现原理.................................四、关键算法实现流程图 .....................流程图........................................关键算法......................................五、软件运行环境及限制 .....................六.结果输出及分析..........................七.心得体会.................................八.参考文献.................................一.课程设计的目的本课程设计是学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了我的动手能力。

二.课程设计的内容及要求内容:为LINUX 设计一个简单的二级文件系统。

要求做到以下几点:1、可以实现下列几条命令(至少4条)。

Login 用户登录Dir 列文件目录Create 创建文件Delete 删除文件Open 打开文件Close 关闭文件Read 读文件Write 写文件2、列目录时要列出文件名、物理地址、保护码和文件长度。

3、源文件可以进行读写保护。

从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:1、鼓励并优先个人独立选题设计,可从下面设计题目中选择,也可以自拟相关题目;如要合作,每组最多两名同学,且设计文档不能相同;2、可以在我们实验课最后布置的实验设计基础上进行完善和改进,但不能相同。

操作系统原理课程设计文件管理系统

操作系统原理课程设计文件管理系统

操作系统原理课程设计文件管理系统院系:计算机学院三系班级:计软05 – 1班姓名:韩宇学号: 3 5 号指导教师:李益民2007 年7 月4 日操作系统原理课程设计任务书一、题目:文件系统管理二、设计要求(1)由鲁建成,韩宇,肖鹏完成设计与实现。

(2)查阅相关资料,自学具体课题中涉及到的新知识。

(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。

(4)所设计的程序应有输入、输出。

一.(5)按要求写出课程设计报告,并于设计结束后1周内提交。

其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、需求分析、概要设计、详细设计、软件的调试、总结、启谢、附录:带中文注释的程序清单、参考文献。

报告一律用A4纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。

总体设计应配合软件总体模块结构图来说明软件应具有的功能。

详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。

四、课程设计工作计划2007年6月18日,指导教师讲课,学生根据题目准备资料;2007年6月19日,进行总体方案设计;2007年6月20日~2007年6月25日,完成程序模块并通过独立编译;2007年6月26日~2007年6月27日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2007年6月27日~2007年6月29日,验收、撰写报告;2007年6月29日下午,验收或总结。

指导教师签章:教研室主任签章操作系统原理课程设计指导教师评语与成绩目录一概述------------------------------------------------------------5二需求分析------------------------------------------------------71)问题获取2)分析三概要设计------------------------------------------------------8 四详细设计------------------------------------------------------91)具体功能概述2)程序流程图3)程序代码五程序的调试与运行结果说明------------------------------32六用户使用说明------------------------------------------------351)引言2)功能介绍七启谢-------------------------------------------------------------36八参考资料-------------------------------------------------------36一概述1.课程设计的目的1.理解重要数据结构的意义2.掌握文件系统的工作原理3.通过本次课程设计加深文件系统内部功能及内部实现的理解2.课程设计的要求1.需要的基本知识:文件:一组带标志的在逻辑上有完整意义的信息项的序列,这个标识为文件名。

操作系统课程设计文件系统

操作系统课程设计文件系统

操作系统课程设计:文件系统一、引言文件系统是操作系统中的一个重要组成部分,负责管理计算机存储设备上的文件和目录。

一个高效可靠的文件系统对于操作系统和用户来说都至关重要。

在操作系统课程中,设计一个文件系统是一项重要的任务,可以帮助学生深入了解文件系统的原理和实现细节。

本文档将介绍一个简单的文件系统设计,旨在帮助初学者理解文件系统的基本概念和工作原理。

我们将首先介绍文件系统的基本概念,然后讨论文件系统的设计思路和关键组成部分。

最后,我们将讨论如何实现和测试文件系统。

二、文件系统的基本概念文件系统是操作系统提供的一种存储管理机制,用于将文件组织成有层次的结构并提供对文件的访问和管理。

在一个文件系统中,文件被组织成目录(或文件夹)的层次结构,用户可以使用文件路径来访问文件和目录。

文件系统通常提供以下功能: - 文件和目录的创建、删除和重命名 - 文件和目录的读取和写入 - 文件和目录的权限管理 - 文件的共享和保护 - 文件的存储管理三、设计思路在设计文件系统时,需要考虑以下几个关键方面:1. 文件系统的组织结构文件系统可以采用不同的组织结构,常见的包括层次结构、网络结构和日志结构。

在设计文件系统时,需要根据具体需求选择合适的结构。

2. 文件和目录的管理文件系统需要提供对文件和目录的管理功能,包括创建、删除、重命名和移动等操作。

此外,还需要支持文件和目录的权限管理,确保只有授权用户可以进行相应操作。

3. 文件的存储管理文件系统需要负责将文件存储在磁盘或其他存储设备上,并提供高效的读写操作。

存储管理的关键是如何将文件划分为适当大小的块并将它们存储在存储设备上。

4. 文件的共享和保护文件系统需要支持文件的共享和保护。

共享可以使多个用户同时访问同一文件,保护则确保只有合法用户可以进行读写操作。

四、文件系统的关键组成部分一个典型的文件系统通常由以下几个关键组成部分构成:1. 文件控制块(FCB)文件控制块是文件系统中一个重要的数据结构,用于记录文件的相关信息,包括文件名、大小、权限和存储位置等。

操作系统文件管理系统 课程设计

操作系统文件管理系统 课程设计

操作系统文件管理系统课程设计
操作系统文件管理系统课程设计一般包括以下内容:
1. 基本概念和原理:介绍文件管理系统的基本概念和原理,包括文件、目录、文件系统、文件操作等。

2. 设计需求分析:明确设计需求,包括基本功能、用户需求、性能要求等。

3. 文件存储结构的设计:设计文件存储结构,包括文件分配方式、文件存储结构、文件目录结构、文件保护等。

4. 文件操作的实现:实现文件的创建、打开、读写、删除等基本操作,以及文件的复制、移动、重命名等高级操作。

5. 目录管理的实现:实现目录的创建、删除、重命名等操作,以及目录的遍历和搜索等功能。

6. 文件系统的实现:实现文件系统的格式化、挂载、卸载等操作,以及文件系统的安全性和可靠性保障。

7. 用户界面的设计:设计用户界面,包括命令行界面和图形界面,以方便用户进行文件管理操作。

8. 系统测试和调试:对系统进行测试和调试,包括单元测试、集成测试、性能测试等,以确保系统的稳定性和可靠性。

9. 报告撰写和展示:根据课程设计的要求,编写设计报告和展示文稿,介绍系统的设计思路、实现方法和成果。

以上是一个基本的操作系统文件管理系统课程设计的内容,具体可以根据教师的要求和课程的安排进行适当调整和扩展。

课程设计文件操作系统

课程设计文件操作系统

课程设计文件操作系统一、教学目标本课程的教学目标是使学生掌握操作系统的基本原理和常用操作系统的使用方法。

具体包括:1.了解操作系统的定义、功能和分类。

2.掌握操作系统的基本原理,如进程管理、内存管理、文件管理和设备管理。

3.熟悉常用操作系统的特点和使用方法,如Windows、Linux和macOS。

4.能够熟练使用操作系统进行日常计算机操作。

5.能够掌握操作系统的基本配置和优化方法。

6.能够运用操作系统的基本原理解决实际问题。

情感态度价值观目标:1.培养学生对操作系统的兴趣和好奇心,提高学生主动学习的积极性。

2.培养学生团队合作精神,学会与他人分享和交流操作系统的知识和经验。

3.培养学生对操作系统的安全意识,提高学生保护个人隐私和数据的能力。

二、教学内容本课程的教学内容主要包括操作系统的基本原理和常用操作系统的使用方法。

具体安排如下:1.操作系统概述:介绍操作系统的定义、功能和分类。

2.进程管理:讲解进程的概念、进程的状态、进程控制块、进程调度算法等。

3.内存管理:介绍内存的概念、内存分配与回收策略、虚拟内存等。

4.文件管理:讲解文件和目录的概念、文件系统的结构、文件访问控制等。

5.设备管理:介绍设备的概念、设备驱动程序、输入输出控制等。

6.Windows操作系统:讲解Windows操作系统的特点、界面布局、基本操作和高级功能。

7.Linux操作系统:介绍Linux操作系统的特点、界面布局、基本操作和高级功能。

8.macOS操作系统:讲解macOS操作系统的特点、界面布局、基本操作和高级功能。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。

1.讲授法:通过讲解操作系统的原理和概念,使学生掌握基本知识。

2.讨论法:学生分组讨论操作系统的实际应用场景和问题解决方案,培养学生的团队合作精神。

3.案例分析法:分析实际案例,使学生更好地理解操作系统的基本原理和常用操作系统的特点。

操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)一、引言操作系统是计算机系统的核心软件,它管理计算机的硬件资源,为应用程序提供运行环境。

本课程设计旨在通过实践,加深学生对操作系统原理的理解,提高学生的编程能力和系统设计能力。

二、课程目标1. 理解操作系统的基本原理和功能。

2. 掌握进程管理、内存管理、文件系统等核心模块的设计和实现。

3. 熟悉操作系统调度的基本算法。

4. 提高学生的编程能力和系统设计能力。

三、课程内容1. 操作系统概述操作系统的定义、功能和发展历程操作系统的基本组成和结构操作系统的类型和特点2. 进程管理进程的定义、状态和转换进程控制块(PCB)的结构和作用进程同步与互斥进程通信进程调度算法3. 内存管理内存管理的目标连续内存管理技术非连续内存管理技术页面置换算法4. 文件系统文件系统的定义和功能文件的结构和类型文件存储空间管理文件目录管理文件操作5. I/O系统I/O系统的功能和组成 I/O设备管理I/O调度算法缓冲管理6. 系统调用系统调用的定义和类型系统调用的实现机制常用系统调用分析7. 实验与课程设计实验目的和要求实验内容和步骤课程设计题目和要求课程设计报告格式四、课程考核1. 平时成绩(30%):包括课堂表现、实验报告和作业完成情况。

2. 实验成绩(30%):包括实验操作和实验报告。

3. 课程设计成绩(40%):包括设计报告、代码实现和答辩表现。

1. 《操作系统概念》作者:亚伯拉罕·西尔伯斯查茨等2. 《现代操作系统》作者:安德鲁·S·塔嫩鲍姆3. 《操作系统导论》作者:威廉·斯托林斯六、附录1. 课程设计报告模板2. 实验报告模板3. 课程设计答辩评分标准七、课程安排1. 理论学习操作系统概述(2课时)进程管理(4课时)内存管理(4课时)文件系统(4课时)I/O系统(2课时)系统调用(2课时)2. 实验与课程设计进程管理实验(2课时)内存管理实验(2课时)文件系统实验(2课时)I/O系统实验(2课时)课程设计(8课时)课程考核(2课时)八、实验与课程设计指导1. 实验指导进程管理实验:通过模拟进程的创建、撤销、阻塞和唤醒等操作,理解进程管理的原理。

操作系统 文件系统课程设计

操作系统 文件系统课程设计

操作系统文件系统课程设计
操作系统文件系统课程设计主要涉及以下几个方面:
1. 实现基于模块的文件系统:
- 修改ext3或ext4的源代码
- 动态加载和卸载新的文件系统
- 修改文件系统的名称,优化文件写操作
2. 新增Linux驱动程序:
- 增加一个驱动程序(使用内存模拟设备)
- 动态加载和卸载新的驱动
- 通过程序或命令行使用该驱动
- 保存和读取数据
3. 统计Linux系统缺页的次数:
- 在内核中实现缺页次数统计
- 编译并安装新内核
- 建立内核模块,通过/proc实现用户态查看缺页次数
4. 模拟磁盘文件系统实现:
- 设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区
- 支持多级目录结构,支持文件的绝对读路径
- 实现建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件、关闭文件、改变文件属性等命令建议根据以上概述,结合实际需求和兴趣,选择相应的题目进行课程设计。

操作系统课程设计---文件管理系统设计

操作系统课程设计---文件管理系统设计

课程设计任务书计算机科学与技术专业年级班一、设计题目文件管理系统设计二、主要内容设计一个简单的文件管理系统来模拟文件操作命令的执行三、具体要求设计和调试一个简单的文件管理系统来模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。

具体要求如下:⑴设计一个支持n个用户的文件系统,每个用户可拥有多个文件;⑵采用二级或二级以上的多级文件目录管理;⑶对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写”等;⑷系统的外部特征应接近于真实系统,可设置下述文件操作命令:建立文件、打开文件、关闭文件、删除文件、读文件、写文件、复制文件、查询目录。

⑸通过键盘(或鼠标)使用该文件系统,系统应显示操作命令的执行结果。

四、进度安排2012-9-3-----2012-9-6 确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;2012-9-6-----2012-9-12 编写程序代码并调试,再将调试通过的各个子模块进行集成调试;2012-2-12----2012-9-16 归纳文档资料,完成课程设计说明书,参加课程设计答辩五、完成后应上交的材料在课程设计完成后需要提交的成果和有关文档资料包括:1、课程设计的说明书。

2、课程设计有关源程序及可运行程序(光盘或电子邮件)。

六、总评成绩:指导教师签名日期年月日系主任审核日期年月日一、本设计目的及基本思想本课程设计目的是实现树型目录结构文件系统,在实现过程中利用了二叉树,其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的第一个子节点,而该子节点的父指针则指向它的上级目录。

目录下各子节点用兄弟指针连接起来。

文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。

文件打开则把文件的名称及其父指针写到文件列表同时置文件打开标志为1,文件关闭则把文件从打开列表中删除,同时置文件打开指针为0,文件读取和写入都要检查文件是否在文件打开列表中,未打开文件不能读写,只读文件不能写,只写文件不能读。

1.课程设计报告-文件管理系统_计算机操作系统

1.课程设计报告-文件管理系统_计算机操作系统

第一部分概述1。

1 系统开发背景1.1。

1 文件系统的意义在现代计算机系统中,要用到大量的程序和数据,由于内存容量有限,且不能长期保存,故而平时总是把他们以文件的形式存放在外存中,需要时可随时将它们调入内存。

如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,还必须能保持数据的安全性和一直性。

显然,这是用户所不能胜任的工作.取而代之的,便是在操作系统中增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取,共享和保护等手段提供给用户.这不仅方便了用户,保证了文件的安全性,还有效的提高了系统资源利用率。

1.1.2 开发背景(1)所设计软件名称:文件管理系统(2)本软件的提出者:(3)本软件的设计者:1。

1。

3 软件开发工具(1)MICROSOFT WINDOWS 2000(2)BORLAND C++ BUILDER 6。

01。

1。

4 软件开发技术(1)C++程序设计(2)软件工程开发过程各阶段分析(3)1。

2 系统功能介绍及目标1.2。

1 系统实现功能(1)多用户、多级目录(注:本设计最多10个用户,实现3级目录).设置目录MFD和用户文件目录UFD,另外还为打开文件设置了运行文件目录AFD.(2)至少有10个实用的文件操作命令(注:本设计可实现创建和删除目录,创建和删除文件,以及打开和关闭文件等功能).(3)设计一个既简单又实用的用户界面.第二部分需求分析2.1 项目概述及数据流图2。

1。

1 系统的一般概述使用高级语言编写简单的文件系统,模拟文件管理的工作过程。

实现多用户文件管理,允许创建和删除文件,对文件属性设置保护.采用多级文件目录。

2。

1.2 系统的功能数据流图层次框图系统顶层数据流图系统二层数据流图2。

2 功能需求分析2.2.1 功能划分用户管理功能身份验证功能目录管理功能文件管理功能文件属性管理功能帮助功能2。

2。

2 功能描述(1)用户管理功能允许用户进行注册,管理不同用户.允许注销用户,即删除该用户。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

评定等级操作系统课程设计文件系统管理学院计算机学院专业计算机科学与技术班级姓名学号2013年1月8日广东工业大学计算机学院制文件系统管理一、实验目的模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法看,加深了解文件系统的内部功能的实现。

通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了解。

二、实验内容和要求编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。

在用户程序中通过使用文件系统提供的create,open,read,write,close,delete 等文件命令,对文件进行操作。

以下报告主要包括:1.可行性分析2.需求分析3.概要设计4.详细设计5.测试6.总结三、可行性分析1、技术可行性对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。

利用大二期间学习的数据结构可以模拟出此课程设计的要求。

2、经济可行性课程设计作为本课程的练习及进一步加深理解。

与经济无关,可以不考虑。

(零花费,零收益)3.法律可行性自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。

四、需求分析编写程序实现文件系统,主要有以下几点要求:1、实现无穷级目录管理及文件管理基本操作2、实现共享“别名”3、加快了文件检索五、概要设计为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录UFD (User File Directory )。

这些文件目录可以具有相似的结构,它由用户所有文件的文件控制块组成。

此外,在系统中再建立一个主文件目录MFD (Master File Directory );在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目录的指针。

本设计主要实现下面几个数据结构:M D F U F D A F D 用户名文件名打开文件名文件目录指针保护码打开保护码用户名文件长度读写指针文件目录指针文件名···总体的流程图如下:六、详细设计主要数据结构:1.MFD (Master File Directory ),主要用以存放用户,可以增加存放密码的字符数组,本设计没有保密安全方面的忧虑,为了使用时操作更简单省去密码。

所以,MFD 结构仅包括用户名和指向子目录的一个指针,以及指向下一用户的连接点,为线性结构。

struct MFD{char name[20]; //用户名UFD *bst_pointer; //文件目录指针MFD *link;};2. UFD (User File Directory ),用于存放文件的数据结构。

由于本设计为了加快检索速度,使用了二叉排序树的结构,所以UFD 结构中相应加入了用于树结构的parent,leftchild ,和rightchild 记录链接情况。

当本文件为普通文件时,为下级记录申请AFD (file ),folder 为空。

同样,当本文件为文件夹时,为它申请相应的空间,AFD 为空。

以此来达到无穷级别目录的存储。

struct UFD{UFD *parent;UFD *leftchild;UFD *rightchild;UFD *folder; //作为文件夹时指向下一层,文件时为空UFD *pre_folder; //指向上一层目录(文件夹时用到)AFD *file; //作文文件时文件的具体内容char name[30]; //文件(夹)名字int length; //作为文件时文件的长度,默认为0char rw; //读写标志r or wchar share; //共享标志y or nchar file_folder; //指示此文件是文件或文件夹, f 为文件,o 为文件夹};3.AFD ,存放文件的内容的结构,比较简单,文件内容用一个字符数组存储,为顺序结构,最多可存放99 个字符struct AFD{char afd_file[100];int read; //读指针int write; //写指针};4.RECstruct REC //UFD 的线性链,用于记录共享文件和已打开文件{UFD *file;REC *link;};关键函数说明:void Log_in(); //登陆void Init_user(); //创建用户void Check_user(); //查看用户以上三个函数为开始时管理用户创建和登陆的函数。

开始时没有用户,需要创建后才可登陆。

创建用户即自动分配一个存放用户文件的UFD ,此时的UFD 为空,需要后续的创建文件以及文件夹的分配。

UFD *operations(UFD *fileBST); //文件夹的操作调用用户登陆后即开始对该用户文件UFD 的操作,同时,若在文件夹中创建一个文件夹,它同样可以分配得到一个UFD ,对用户文件的操作可以重复调用,以此来达到无穷级目录的操作。

在里层文件的操作和外层的是一样的,但若要退回外层文件夹就需要逐层返回,不能立即跳到某一层某地址。

操作完毕后返回改变后的文件存储状态。

void fcreate(UFD *fileBST); //对文件夹的六个基本操作UFD *fdelete(UFD *fileBST);void fopen(UFD *fileBST);void fclose(UFD *fileBST);void fread_write(UFD *fileBST,char f); //读写操作。

按选择f=5 为读6 为写以上五个函数为对文件的六个基本操作,其中读文件和写文件部分代码相同,所以由一个函数完成。

在create五个函数中,分别对文件夹fileBST 做了相应的处理,由于删除文件的函数可能会删除到头结点,所以需要一个返回值。

void insertBST(UFD *fileBST,UFD *newBST); //在fileBST 中插入新的结点newBSTUFD *searchBST(UFD *fileBST,char name); //在fileBST 树中查找名字为name 的结//点并返回该结点,文件不存在则返回空void BSTtraverse(UFD *fileBST); //遍历二叉树UFD *deleteBST(UFD *fileBST,char name[30]); //删除name 结点,返回删除后的结点由于该设计的存储结构用到了二叉排序树,所以把相关的操作写成函数,供基本操作的函数调用。

insert 函数在fileBST 中插入新的结点newBST;search 函数在fileBST 树中查找名字为name 的结点并返回该结点,文件不存在则返回空;还有traverse 和delete 函数对二叉排序树做了基本的操作。

void print_path(UFD *fileBST); //输出当前路径void print_open_file(); //输出已打开的文件为了在文件系统中使用户看出路径及一些相关的状态,设置了输出文件路径的函数,路径由每个文件的结构体中pre_folder 记录上一层的文件夹名字,这样逐层输出即可达到目的。

每执行一次操作就输出一次已打开的文件的具体情况,打开的文件应及时关闭,否则删除时会有删除失败提示。

UFD *check_share(char name[30]); //在共享链中检查是否有name 文件,有则//返回该UFD ,没则NULLvoid del_in_share(UFD *node); //在共享链中删除node 结点以上两个函数为对共享文件的处理函数,当打开或读写文件时在本层文件中未找到相应的文件时,就用check_share 函数在共享文件中查找,如果存在就返回该文件的UFD,不存在就返回NULL ,而del_in_share 函数是伴随着删除文件的函数出现的,目的是为了删除文件以后不会在共享链中再存在。

具体代码如下:filesysterm.hstruct AFD{char afd_file[100];int read; //读指针int write; //写指针};struct UFD{UFD *parent;UFD *leftchild;UFD *rightchild;UFD *folder; //作为文件夹时指向下一层,文件时为空UFD *pre_folder; //指向上一层目录(文件夹时用到)AFD *file; //作文文件时文件的具体内容char name[30]; //文件(夹)名字int length; //作为文件时文件的长度,默认为0char rw; //读写标志r or wchar share; //共享标志y or nchar file_folder; //指示此文件是文件或文件夹, f 为文件,o 为文件夹};struct MFD{char name[20]; //用户名UFD *bst_pointer; //文件目录指针MFD *link;};struct REC //UFD 的线性链,用于记录共享文件和已打开文件{UFD *file;REC *link;};void Log_in(); //登陆void Init_user(); //创建用户void Check_user(); //查看用户UFD *operations(UFD *fileBST); //文件夹的操作调用,user 不为空时为第一层void fcreate(UFD *fileBST); //对文件夹的六个基本操作UFD *fdelete(UFD *fileBST);void fopen(UFD *fileBST);void fclose(UFD *fileBST);void fread_write(UFD *fileBST,char f); //代码有重复,合并读写操作。

按选择s=5 为读6 为写void insertBST(UFD *fileBST,UFD *newBST); //新文件插入到user 文件树中UFD *searchBST(UFD *fileBST,char name); //在fileBST 树中查找名字为name 的结点并返回该结点//文件不存在则返回空void BSTtraverse(UFD *fileBST); //遍历二叉树UFD *deleteBST(UFD *fileBST,char name[30]); //删除成功返回1,失败返回0void print_path(UFD *fileBST); //输出当前路径void print_open_file(); //输出已打开的文件UFD *check_share(char name[30]); //在共享链中检查是否有name 文件,有则返回UFD ,没则NULLvoid del_in_share(UFD *node); //在共享链中删除node 结点main.cpp#include <iostream>#include<conio.h>#include"filesystem.h"MFD *mfd_link=NULL; //用户链表MFD *pre_user; //当前操作用户UFD *pre_opera_folder=NULL; //当前操作文件夹int folder_depth=0; //记录当前文件深度(用于辅助pre_folder 的初始化)REC *share_file=NULL;REC *open_file=NULL;void print_path(UFD *fileBST) //输出路径{if(fileBST->pre_folder!=NULL){ print_path(fileBST->pre_folder);printf("/%s",fileBST->pre_folder->name);}elseprintf("/%s",pre_user->name);}void print_open_file(){REC *temp;int i=5;temp=open_file;while(temp!=NULL){printf("%s\t%d\t\t",temp->file->name,temp->file->length);if(temp->file->rw=='r')printf(" 只读\t");else printf(" 可读写\t");if(temp->file->share=='y')printf(" 是\t");else printf(" 否\t");for(i=0;i<5;i++){if(temp->file->file->afd_file[i]!='\0')printf("%c",temp->file->file->afd_file[i]);else break;}if(temp->file->file->afd_file[i]!='\0'&&i==5) printf("..");printf("\n");temp=temp->link;}}void BSTtraverse(UFD *fileBST) //遍历二叉树(前序遍历){UFD *left,*right;printf("%s",fileBST->name);if(fileBST->file_folder=='o') //输出..以区分文件夹printf("..\t");elseprintf("\t");if(fileBST->leftchild!=NULL) //递归{left=fileBST->leftchild;BSTtraverse(left);}if(fileBST->rightchild!=NULL){right=fileBST->rightchild;BSTtraverse(right);}}UFD *searchBST(UFD *fileBST,char name[30])// 在fileBST 树中查找名字为name 的结点并返回该结点{ //文件不存在则返回空int flag;flag=strcmp(fileBST->name,name);if(flag==0)return fileBST; //查找成功else if(flag>0){if(fileBST->leftchild==NULL) return NULL; //查找失败elsesearchBST(fileBST->leftchild,name); //递归调用}else{if(fileBST->rightchild==NULL) return NULL;elsesearchBST(fileBST->rightchild,name);}}void insertBST(UFD *fileBST,UFD *newBST) // 将结点newBST 插入原二叉树fileBST 中{int flag;flag=strcmp(fileBST->name,newBST->name);if(flag>0){if(fileBST->leftchild==NULL) //插入{fileBST->leftchild=newBST;newBST->parent=fileBST;}elseinsertBST(fileBST->leftchild,newBST); //递归调用}else{if(fileBST->rightchild==NULL) //插入{fileBST->rightchild=newBST;newBST->parent=fileBST;}elseinsertBST(fileBST->rightchild,newBST); //递归调用}/*flag=0 的情况已在创建时排除*/}UFD *deleteBST(UFD *fileBST,char name[30])// 删除名字问name 的文件结点{UFD *parent_file=NULL,*del_file=NULL;UFD *move_file=NULL,*move_file_parent;del_file=searchBST(fileBST,name);if(del_file==NULL){printf(" 没有此文件,删除失败!\n");getch();return fileBST; //查找失败}if(del_file->file_folder=='o'&&strcmp(del_file->folder->name,"NULL")!=0){ printf(" 注意,本系统未能实现级联删除,请先逐个删除文件!");printf(" 文件夹非空,删除失败!\n");getch();return fileBST;}if(del_file->share=='y') //先在共享链中删除del_in_share(del_file);parent_file=del_file->parent;if(del_file->leftchild==NULL&&del_file->rightchild==NULL) // 被删除结点为子叶结点{if(del_file==fileBST) //只有一个结点{strcpy(fileBST->name,"NULL");}else if(parent_file->leftchild==del_file){parent_file->leftchild=NULL;free(del_file);}else{parent_file->rightchild=NULL;free(del_file);}}else if(del_file->leftchild==NULL||del_file->rightchild==NULL) //被删除结点没有做孩子或右孩子{if(del_file->leftchild==NULL) //没有左孩子{if(parent_file==NULL) //删除的为根结点{fileBST=del_file->rightchild;del_file->rightchild->parent=NULL;}else if(parent_file->leftchild==del_file) //右孩子接上{parent_file->leftchild=del_file->rightchild;del_file->rightchild->parent=parent_file;}else //右孩子接上{parent_file->rightchild=del_file->rightchild;del_file->rightchild->parent=parent_file;}}else //没有右孩子{if(parent_file==NULL) //删除的为根结点{fileBST=del_file->leftchild;del_file->leftchild->parent=NULL;}else if(parent_file->leftchild==del_file) //左孩子接上{parent_file->leftchild=del_file->leftchild;del_file->leftchild->parent=parent_file;}else //左孩子接上{parent_file->rightchild=del_file->leftchild;del_file->leftchild->parent=parent_file;}}free(del_file);}else //左右孩子都有{move_file_parent=del_file->leftchild;move_file=move_file_parent->rightchild;if(move_file==NULL) //被删除结点的左孩子没有右孩子{if(parent_file==NULL) //删除的为根结点{fileBST=move_file_parent;fileBST->rightchild=del_file->rightchild;fileBST->parent=NULL;}else if(parent_file->leftchild==del_file)parent_file->leftchild=move_file_parent;elseparent_file->rightchild=move_file_parent;move_file_parent->parent=parent_file;move_file_parent->rightchild=del_file->rightchild;}else{while(move_file->rightchild!=NULL) //寻找右边最底下的结点{move_file=move_file->rightchild;move_file_parent=move_file_parent->rightchild;}move_file_parent->rightchild=NULL;move_file->leftchild=del_file->leftchild;move_file->rightchild=del_file->rightchild;if(move_file->rightchild!=NULL)move_file->rightchild->parent=move_file; //右孩子的双亲也要改变move_file->parent=del_file->parent;if(fileBST==del_file) //删除的为根结点fileBST=move_file;free(del_file);}}printf(" 成功删除文件%s\n",name);getch();return fileBST;}void del_in_share(UFD *node){REC *first,*second;first=share_file;second=share_file->link;if(second==NULL){share_file=NULL;free(first);}elsedo{if(second->file==node){first->link=second->link;free(second);}else{first=first->link;second=second->link;}}while(second!=NULL);}void fcreate(UFD *fileBST) //在fileBST 的同一层创建文件{char s;char name[30];int flag=0;UFD *newfile,*temp=NULL;REC *stemp;system("cls");printf("----------------------------------------------------------------\n");printf("------------------- 文件系统/创建文件---------------------\n");printf("----------------------------------------------------------------\n\n");do{printf(" 1. 创建文件\n");printf(" 2. 创建文件夹\n");printf(" 3. 取消\n");printf(" 请选择:\n");scanf("%c",&s);fflush(stdin);if(s=='3')return;if(s!='1'&&s!='2')printf(" 输入错误,请重新输入!\n");}while(s!='1'&&s!='2');if(strcmp(fileBST->name,"NULL")==0) //节点已有(未赋值)用于本层文件夹的第一个文件的特殊情况newfile=fileBST;else{newfile=(UFD*)malloc(sizeof(UFD)); //创建树节点newfile->leftchild=NULL;newfile->rightchild=NULL;}printf(" 请输入文件(夹)名:");scanf("%s",name);fflush(stdin);//搜索二叉树,文件重名就创建失败temp=searchBST(fileBST,name);if(temp!=NULL){printf(" 已存在该文件(夹),创建失败!\n");strcpy(newfile->name,"NULL");return;}strcpy(newfile->name,name);if(folder_depth==1)newfile->pre_folder=NULL;elsenewfile->pre_folder=pre_opera_folder;// 指向正在操作文件夹while(1) //读写否,共享否{printf(" 只读r 还是可读写w:");scanf("%c",&(newfile->rw));fflush(stdin);printf(" 是否共享y/n:");scanf("%c",&(newfile->share));fflush(stdin);if((newfile->rw=='r'||newfile->rw=='w')&&(newfile->share=='y'||newfile->share=='n')) break;printf(" 输入有误,请重新输入!\n");}//*********** 以下为文件和文件夹初始化中不同的地方****************** if(s=='1'){newfile->file_folder='f';newfile->folder=NULL;newfile->file=(AFD*)malloc(sizeof(AFD));printf(" 请输入文件的内容(<100):");scanf("%s",newfile->file->afd_file);fflush(stdin);newfile->length=strlen(newfile->file->afd_file);}else //文件夹的初始化{newfile->file_folder='o';newfile->file=NULL;newfile->length=0;newfile->folder=(UFD*)malloc(sizeof(UFD)); //连上一个空文件节点newfile->folder->pre_folder=newfile;newfile->folder->leftchild=NULL;strcpy(newfile->folder->name,"NULL");newfile->folder->rightchild=NULL;}//****************************************************************if(fileBST!=newfile)insertBST(fileBST,newfile); // 初始化完成后插入到二叉树中elsenewfile->parent=NULL;// 第一个结点略去插入,其双亲结点为空if(newfile->share=='y') //接入共享链{stemp=((REC*)malloc(sizeof(REC)));stemp->file=newfile;stemp->link=share_file;share_file=stemp;}}UFD *fdelete(UFD *fileBST) //在fileBST 的同一层删除文件{char name[30];REC *temp;printf(" 请输入要删除的文件:");scanf("%s",name);fflush(stdin);temp=open_file; //检查文件是否打开,打开则删除失败while(temp!=NULL){if(strcmp(temp->file->name,name)==0){ printf(" 文件打开中,请关闭后再删除!");getch();return fileBST;}else temp=temp->link;}fileBST=deleteBST(fileBST,name);return fileBST;}void fopen(UFD *fileBST){char name[30];UFD *temp=NULL,*temp1=NULL;printf(" 请输入要打开的文件的名字:");scanf("%s",name);fflush(stdin);temp=searchBST(fileBST,name);if(temp==NULL){printf(" 文件不存在!\n");temp=check_share(name);if(temp==NULL){ printf(" 文件不存在!\n");return;}}//******************* 找到文件,以下为打开部分********************** if(temp->file_folder=='o') //打开文件夹{folder_depth++;temp1=pre_opera_folder; //保护正在操作文件pre_opera_folder=temp;temp->folder=operations(temp->folder);pre_opera_folder=temp1; //写回folder_depth--;}else //打开文件{REC *newopen;newopen=((REC*)malloc(sizeof(REC)));// 接入打开链newopen->file=temp;newopen->link=open_file;open_file=newopen;printf(" 已成功打开问%s!\n",temp->name);getch();}}void fclose(){char name[30];REC *first=NULL,*second=NULL;printf(" 请输入要关闭的文件:");scanf("%s",name);fflush(stdin);first=open_file;if(first==NULL){printf(" 没有打开的文件\n");getch();return;}else second=first->link;if(second==NULL&&strcmp(first->file->name,name)==0){free(first); open_file=NULL;printf(" 成功关闭文件%s\n!",name);return;}else{while(second!=NULL){if(strcmp(second->file->name,name)==0){first->link=second->link; free(second);printf(" 成功关闭文件%s\n!",name);return;}else{first=first->link;second=second->link;}}}printf(" 没有找到问件%s,关闭失败!\n",name);}void fread_write(UFD *fileBST,char f){char s;char name[30];char newfile[100];UFD *temp=NULL;if(f=='5')printf(" 请输入要读取的文件的名字:");elseprintf(" 请输入要写入的文件的名字:");scanf("%s",name);fflush(stdin);temp=searchBST(fileBST,name);if(temp==NULL){printf(" 文件不存在!\n");temp=check_share(name);if(temp==NULL){ printf(" 文件不存在!\n");return;}}if(temp->file_folder=='o'){printf(" 文件夹不可读写!");return;}printf(" 文件的内容是:%s\n\n\n",temp->file->afd_file);getch();if(f=='5')return; //读取文件操作到此结束if(temp->rw=='r'){printf(" 只读文件,不可写入!\n");return;}else //追加或重写{do{system("cls");printf(" 1. 追加\n");printf(" 2. 重写\n");printf(" 3. 取消\n");printf(" 请选择:\n");scanf("%c",&s);fflush(stdin);if(s=='3')return;if(s!='1'&&s!='2')printf(" 输入错误,请重新输入!\n");}while(s!='1'&&s!='2');printf(" 请输入要重写或追加的内容(<100):");scanf("%s",newfile);fflush(stdin);if(s=='1') //修改strcat(temp->file->afd_file,newfile);elsestrcpy(temp->file->afd_file,newfile);temp->length=strlen(temp->file->afd_file);}}UFD *check_share(char name[30]){char s;UFD *temp=NULL;REC *stemp=NULL;printf(" 共享文件夹为:\n");stemp=share_file;while(stemp!=NULL){ printf("%s",stemp->file->name);if(stemp->file->file_folder=='f')printf("\t");else printf("..\t");stemp=stemp->link;}printf("\n 是否尝试在共享文件夹中打开(y/n):");do{s=getchar();if(s=='n'||s=='N')return NULL;else if(s=='y'||s=='Y')break;else printf(" 输入错误,请重新输入:");}while(s!='y'&&s!='n'&&s!='Y'&&s!='N');stemp=share_file;while(stemp!=NULL){if(strcmp(stemp->file->name,name)==0){temp=stemp->file;break;}stemp=stemp->link;}return temp;}UFD *operations(UFD *fileBST){while(1){char s;system("cls");if(open_file!=NULL){printf(" 已打开文件,请及时关闭!\n");printf(" 文件名\t 文件长度\t 读写\t 共享\t 内容");printf("\n");print_open_file();printf("\n");}printf(" 当前路径:");print_path(fileBST);printf("\n");if(strcmp(fileBST->name,"NULL")==0)printf(" 本层文件为空!\n");else{ printf(" 本文件夹包含以下文件:\n");BSTtraverse(fileBST);}printf("\n");printf(" 1. 创建文件create \n");printf(" 2. 删除文件delete \n");printf(" 3. 打开文件open \n");printf(" 4. 关闭文件close \n");printf(" 5. 读文件read \n");printf(" 6. 写文件write \n");printf(" 0. 返回上一层/注销\n\n");printf(" 请选择: ");printf("");scanf("%c",&s);fflush(stdin);switch(s){ case '1':fcreate(fileBST);break;case '2':fileBST=fdelete(fileBST);break;case '3':fopen(fileBST);break;case '4':fclose();break;case '5':case '6':fread_write(fileBST,s);break;case '0':return fileBST;default:break;}}}void Log_in(){MFD *temp=NULL;char name[30];char flag='0';if(mfd_link==NULL){printf(" 目前还没有创建用户,请创建后再登陆!");getch();return;}do{printf(" 请输入用户名:");scanf("%s",name);fflush(stdin);if(strcmp(name,"cancel")==0)return; //取消登陆temp=mfd_link;while(temp!=NULL){if(strcmp(name,temp->name)==0){pre_user=temp;folder_depth++;pre_opera_folder=temp->bst_pointer;temp->bst_pointer=operations(temp->bst_pointer); //进入文件操作pre_opera_folder=NULL;folder_depth--;flag='1';return;}elsetemp=temp->link;}printf(" 用户不存在,请重新输入!输入cancel 取消登陆");//防止使用者忘记登陆名printf("\n");}while(1);}void Init_user(){char name[30];MFD *newmfd,*temp=NULL,*temp1=NULL;printf(" 请输入用户名:");scanf("%s",name); //输入名字fflush(stdin);printf("\n");temp=mfd_link;if(temp!=NULL)do{if(strcmp(temp->name,name)==0){ printf(" 用户已存在,创建失败!\n");getch();return;}if(temp->link==NULL)temp1=temp;temp=temp->link;}while(temp!=NULL);newmfd=(MFD*)malloc(sizeof(MFD));strcpy(newmfd->name,name);newmfd->bst_pointer=(UFD*)malloc(sizeof(UFD)); //创建一个空的文件夹newmfd->bst_pointer->pre_folder=NULL;newmfd->bst_pointer->leftchild=NULL;strcpy(newmfd->bst_pointer->name,"NULL");newmfd->bst_pointer->rightchild=NULL;newmfd->link=NULL;if(temp1!=NULL)temp1->link=newmfd; //插到队尾else mfd_link=newmfd;printf(" 成功创建用户%s!",name);getch();}void Check_user(){int i=1;MFD *temp;if(mfd_link==NULL){printf(" 目前还没有创建用户!");getch();return;}printf(" 以创建的用户有:\n");temp=mfd_link;while(temp!=NULL){ printf(" 用户%d: %s\n",i,temp->name);temp=temp->link;i++;}printf("\n");getch();return;}int main(){char s;while(1){system("cls");printf("----------------------------------------------------------------\n");printf("-------------------------- 文件系统-------------------------\n");printf("----------------------------------------------------------------\n\n");printf(" 1. 登录\n");printf(" 2. 添加新用户\n");printf(" 3. 查看已注册用户\n");printf(" 0. 退出\n\n");printf(" 请选择: ");printf("");scanf("%c",&s);fflush(stdin);if(s!='0'&&s!='1'&&s!='2'&&s!='3'){ printf(" 输入错误,请重新输入:");getch();fflush(stdin);continue;}switch(s){case '1':Log_in();break;case '2':Init_user();break;case '3':Check_user();break;case '0':return 1;default:break;}}return 0;}七、测试登录操作:以下为对文件的六个基本操作:无穷级文件、文件路径的显示,以及打开一个不存在的文件的示例:打开普通文件后的情况,此时不能删除文件:本系统未能实现级联删除,操作被禁止:关闭文件后删除操作成功:逐个删除后“文件系统”文件夹也可以删除了:八、总结本次课程设计设计的知识比较广,需要较好的理解能力和编程能力。

相关文档
最新文档