koorio.com
海量文库 文档专家
当前位置:首页 >> IT/计算机 >>

操作系统课程设计文档

课程设计日期:

2010 学年 秋学期

《操作系统》课程设计

题 专 班 姓 学

目: 业: 级: 名: 号:

模拟磁盘操作系统 软件工程 软件 2 班 X X

20083880 XXX

指导教师: 成 绩:

计算机与信息工程学院
2010 年 12 月 15 日

附件:课程设计内容 附件:课程设计内容

模拟磁盘操作系统

一:课程设计的目的
1、掌握操作系统基本理论与管理方式; 2、在算法基础上,解决实际的管理功能的问题,提高学生实际应用、编程的能力。 3.了解文件系统的一般原理。

二: 课程设计的内容和要求
1、涉及编程题目时,要求详细书写文档内容; 2.问题分析及解决方案确定; 3、形成编程思路; 4、使用具体语言实现算法; 5、上机调试程序; 6、编写课程设计报告.

三: 课程设计说明书和图纸要求
3.1 设计题目与要求
要求: 1. 自定义磁盘操作系统命令解释器所需要的各种常用命令的数据结构; 2. 至少具有显示文件、时间、日期、删除文件操作命令; 3. 提供命令运行界面; 4. 设置一定的内部命令和外部命令

3.2 总的设计思想及系统平台、语言、工具等
设计思想:通过用户输入不同的命令来调用不同的方法来实现磁盘操作系统,包括 文件的增,删,查,改。 平台:xp 语言:java 工具:eclipse,myeclipse

3.3 数据结构与模块说明(功能与流程图)
主程序流程图:

显示子目录和子文件的流程图:

创建文件或文件夹的流程图

复制文件或文件夹流程图

四: 程序设计
4.1 函数定义
//root的get方法 public String getRoot(); //root的set方法 public void setRoot(String root); //Start的构造方法 public Start();

//程序开始 private void launch(); //Deal的构造方法 Deal(Start s,BufferedReader br); //输出子目录和子文件名 public void showChildren(); //改变根目录 public void changeRoot(String type); //返回上级父目录 public void back(); //创建文件夹或文件 public void create(); //打开文件方法 public void open(String type); //复制文件或文件夹的选择方法 public void copy(String filepath); //复制文件的方法 public void copyFile(File src,File dec); //复制文件夹的方法 public void copyDir(File file,File file2); //显示文件夹结构的初始化方法 public void show(); //显示文件夹结构的方法 public void list(File f, int level); //删除文件夹或文件的方法 public void delete(File file); //文件重命名或文件夹重命名方法 public boolean fileReName(String type); //文件或文件夹移动的方法 public void move(String filepath);

4.2 变量定义
BufferedReader br = null; Deal deal;//对象名 String root;//默认的根目录 默认的根目录 //输入流,用于接收用户的输入 String type = null;//用户的选择的功能

4.3 源程序
Start.java Start.java

import import import import

java.io.BufferedReader; java.io.File; java.io.IOException; java.io.InputStreamReader;

public class Start { private BufferedReader br = null; private String root ="C:/Documents and Settings/Administrator"; private Deal deal = null; //root 的 get 方法

public String getRoot() { return root; } //root 的 set 方法 public void setRoot(String root) { this.root = root; }

public static void main(String[] args) { new Start().launch();

} //Start 的构造方法 public Start() { br = new BufferedReader(new InputStreamReader(System.in)); deal = new Deal(this,br); } //程序开始 private void launch() {

{

try { String type = null; while(true) { System.out.println("*****************************"); System.out.println(root); type = br.readLine(); if(type.matches("\\w:")) { File file = new File(type); if(file.exists()) { this.setRoot(type); }else { System.out.println("文件目录不存在!"); } } else if(type.matches("cd\\s\\.\\.")) { deal.back(); } else if(type.matches("cd\\s.+")) //cd\\s\\w{1,}(/\\w{1,})*(/\\w{1,}\\.\\w{1,})? deal.changeRoot(type);//-} else if(type.equalsIgnoreCase("dir")) { deal.showChildren(); //对 D 盘无效

}else if(type.equalsIgnoreCase("create")) { deal.create(); }else if(type.matches("open\\s\\w{1,}\\.\\w{1,}")) { deal.open(type); }else if(type.matches("copy\\s.{1,}")) { deal.copy(type); }else if(type.equalsIgnoreCase("show")) { deal.show(); }else if(type.equalsIgnoreCase("delete")) { deal.delete(new File(root)); deal.back(); }else if(type.matches("rename\\s.{1,}")){ if(deal.fileReName(type)) { deal.back(); } }else if(type.matches("move\\s.+")) { deal.move(type); deal.back(); } else if(type.equalsIgnoreCase("help")) { System.out.println("x:-------------------->进入 x 盘"); System.out.println("cd+空格+目录---------->进入子目录"); System.out.println("cd+空格+..------------>返回上一级目录"); System.out.println("dir------------------->列出当前目录下的所有 子目录和文件"); System.out.println("create---------------->创建文件夹或文件"); System.out.println("open+空格+文件名------>打开文件"); System.out.println("copy------------------>复制当前文件或文件夹 "); System.out.println("move------------------>移动当前文件或文件夹 "); System.out.println("show------------------>列出当前目录下所有子 目录和文件的结构"); System.out.println("delete---------------->删除当前文件夹或文件 "); System.out.println("rename+空格+目录名---->重命名当前目录"); System.out.println("rename+空格+文件名-------->重命名当前文件"); System.out.println("help------------------>显示帮助信息"); System.out.println("exit------------------>退出"); } else if(type.equalsIgnoreCase("exit")) { System.exit(0); }else { System.out.println("输入的不是正确命令!");

} } } catch (IOException e) { e.printStackTrace(); }

}

}

Deal.java
import import import import import import import import java.awt.Frame; java.io.BufferedReader; java.io.File; java.io.FileInputStream; java.io.FileNotFoundException; java.io.FileOutputStream; java.io.IOException; java.util.Date;

import javax.swing.JOptionPane;

public class Deal { private Start start = null; private BufferedReader br = null; //构造方法 Deal(Start s,BufferedReader br) { this.start = s; this.br = br; } //输出子目录和子文件名 public void showChildren() {

File file = new File(start.getRoot()); System.out.println(file.getAbsolutePath()); if(file.exists()) { if(file.isDirectory()) { String str[] = file.list(); for(int i=0;i<str.length;i++) { System.out.println(str[i]); } }else { System.out.println("已到达文件末尾!");

} }else { System.out.println("输入的不是正确命令!"); } } //改变根目录 public void changeRoot(String type) { String filepath = type.substring(3); File file = new File(start.getRoot()+"/"+filepath); if(file.exists()) { start.setRoot(start.getRoot()+"/"+filepath); }else { System.out.println("目录不存在!"); }

} //返回上级父目录 public void back() { String root = start.getRoot(); if(root.matches("\\w:")) { System.out.println("已到达磁盘根目录,无法继续返回父目录!"); return ; }else { String backroot = root.substring(0,start.getRoot().lastIndexOf("/")); start.setRoot(backroot); } } //创建文件夹或文件 public void create() { System.out.println("1.创建文件目录"); System.out.println("2.创建文件"); try { String type = br.readLine(); if(type.equals("1")) { System.out.println("请输入需要创建的文件目录,以/分隔"); String msg = br.readLine(); while(!msg.startsWith("/")) { System.out.println("文件目录必须以/开头"); msg = br.readLine(); } File file = new File(start.getRoot()+ msg); if (file.exists()) { System.out.println("操作失败,文件目录已存在");

} else { if (file.mkdirs()) {

System.out.println("文件目录创建成功!");

} else { System.out.println("文件目录创建失败!"); } } }else if(type.equals("2")) { System.out.println("请输入文件名:"); String fileName = br.readLine(); while(!fileName.matches("\\w+\\.\\w+")) { System.out.println("请正确输入文件名的格式!"); fileName = br.readLine(); } File file2 = new File(start.getRoot()+ "/" + fileName); if (file2.createNewFile()) { file2.setLastModified(new Date().getTime()); System.out.println("文件创建成功!"); } else { System.out.println("操作失败"); }

}else { System.out.println("输入的值不合法!"); } } catch (IOException e) { e.printStackTrace(); }

} //打开文件方法 public void open(String type) { System.out.println(type); File file = new File(start.getRoot()+"/"+type.substring(5)); System.out.println(start.getRoot()+"/"+type.substring(5)); if (file.exists()) { Runtime r = Runtime.getRuntime(); try { r.exec("cmd /c start " +start.getRoot()+"/"+type.substring(5)); } catch (IOException e) { System.out.println("文件拒绝访问!"); return;

} System.out.println("文件打开成功!"); System.out.println("文件名:" + file.getName() + ",文件大小:" + file.length() + ",文件创建时间:" + new Date(file.lastModified()).toString());

} else { System.out.println("文件不存在!"); } } //复制文件或文件夹的选择方法 public void copy(String filepath) {

String dscFilepath = filepath.substring(5); File file = new File(start.getRoot()); File file2 = new File(dscFilepath); if(!file2.exists()) { System.out.println("目的文件夹不存在!"+file2.getAbsolutePath()); }else if(file2.isDirectory()){ if(file.isDirectory()) { copyDir(file,file2); System.out.println("文件夹复制成功!"); }else if(file.isFile()) { copyFile(file,new File(file2,file.getName())); System.out.println("文件复制成功!"); } }else if(file2.isFile()) { System.out.println("您输入的不是一个目录!"); } } //复制文件的方法 public void copyFile(File src,File dec){ FileInputStream fis = null; FileOutputStream fos = null; byte[] buffer = new byte[1024]; //为了提高效率,设置缓存数组 int temp = 0; try { fis = new FileInputStream(src); fos = new FileOutputStream(dec); while((temp=fis.read(buffer))!=-1){ fos.write(buffer, 0, temp); } } catch (FileNotFoundException e) { System.out.println("文件夹未找到!");

return; } catch (IOException e) { System.out.println("复制中出错!"); return; }finally{ try { if(fos!=null) fos.close(); } catch (IOException e) { e.printStackTrace(); } try { if(fis!=null) fis.close(); } catch (IOException e) { e.printStackTrace(); } } } //复制文件夹的方法 public void copyDir(File file,File file2){ new File(file2,file.getName()).mkdir(); File[] files = file.listFiles(); for(File f:files){ if(f.isDirectory()){ copyDir(f,new File(file2,file.getName())); } if(f.isFile()){ copyFile(f,new File(new File(file2,file.getName()),f.getName())); }

} } //显示文件夹结构的初始化方法 public void show() { list(new File(start.getRoot()),1); } //显示文件夹结构的方法 public void list(File f, int level) { StringBuilder preStr = new StringBuilder(); for(int i = 0; i < level; i++) { preStr.append("----"); }

File[] childs = f.listFiles(); for(File child : childs) {

System.out.println(preStr child.getParentFile().getName()+"|"+child.getName()); if(child.isDirectory()) { list(child, level+1); } } } //删除文件夹或文件的方法 public void delete(File file) { if (!file.isDirectory()) { file.delete(); System.out.println("成功删除文件:" + file.getName()); } else if (file.isDirectory()) { File fs[] = file.listFiles(); for (File f : fs) { delete(f); } file.delete(); System.out.println("成功删除文件夹:" + file.getName()); } } //文件重命名或文件夹重命名方法 public boolean fileReName(String type) { String msg = type.substring(7); File file = new File(start.getRoot()); String backroot = start.getRoot().substring(0, start.getRoot().lastIndexOf("/")); File file2 = new File(backroot + "/" + msg); if (file2.exists()) { System.out.println("重命名失败!,文件夹或文件名已存在!"); return false; } if (file.isDirectory()) { if (msg.matches("\\w+")) {

+

if (file.renameTo(file2)) { System.out.println("文件夹重命名成功!"); return true; } else { System.out.println("文件夹重命名失败!"); }

} else { System.out.println("请输入有效字符!"); return false; } } else if (file.isFile()) { if(msg.matches("\\w+\\.\\w+")) { if (file.renameTo(file2)) { System.out.println("文件夹重命名成功!"); return true; } else { System.out.println("文件夹重命名失败!"); }

}else { System.out.println("请正确输入文件名的格式!"); } } return false; } //文件或文件夹移动的方法 public void move(String filepath) { copy(filepath); delete(new File(start.getRoot()));

} }

5 调试记录
5.1 调试记录
1.没有对用户输入的信息进行错误处理:加入了如下代码: while(!msg.startsWith("/")) { System.out.println("文件目录必须以/开头"); msg = br.readLine(); } 2.如何创建文件:调用 file 类的 createNewFile()方法 3.如何打开文件:使用 Runtime 类的 exec 方法执行。 4.如何显示文件夹结构:需要递归查找文件并显示出文件名及文件的父目录。
5.如何删除文件夹:若文件夹是空的,则可以删除。如果文件夹内有文件或子文件夹,需要先删 除所有文件,所以需要递归删除文件。

6.复制目录:需要逐个复制文件,所以用递归复制。 7.文件重命名:需要为输入的文件名包装成一个 File 对象,然后调用 renameTo 方法

5.2 运行结果与运行情况 主界面

进入子目录和列出子目录下的所有子目录和子文件

创建文件成功后显示的页面

显示文件夹的文件结构

打开文件后显示的页面

6 自我评析和总结
通过本次的课程设计,明白了文件系统的概念、实现原理、访问方法、磁盘操作系 统的运行原理,以及使用递归来复制文件夹和显示文件夹结构,还有递归删除文件夹, 我觉得只要我们逻辑清楚,就可以比较清楚的实现。

7 课程设计参考资料
(1) (2) (3) (4) (5) (6) 汤子嬴 编:《计算机操作系统》,西安电子科技大学出版社 谭耀铭 编:《操作系统》,中国人民大学出版社 刘振鹏、李亚平、王煜、张明 编:《操作系统》,中国铁道出版社 陈向群、杨芙清 编:《操作系统教程》,北京大学出版社 张尧学、史美林 编:《计算机操作系统教程》,清华大学出版社 薛智文 编:《操作系统》,中国铁道出版社


推荐相关:

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

操作系统课程设计-文件系统 - 模拟一个简单二级文件管理系统 设计目的: 通过具体的文件存储空间的管理、 文件的物理结构、 目录结构和文件操作的实现, 加深对文件...


操作系统课程设计.doc

操作系统课程设计 - 江苏大学京江学院 JIANGSU UNIVERSITY 操作系 统课 程设计 文件管理系统 学院名称:京江学院 专业班级:J 计算机 1401 学号:414...


操作系统课程设计(文件系统管理).doc

操作系统课程设计(文件系统管理) - 评定等级 操作系统课程设计 文件系统管理


操作系统课程设计报告.doc

操作系统课程设计报告 - 操作系统编程,课程设计,文件系统... 操作系统课程设计报告_计算机软件及应用_IT/计算机_专业资料。操作系统编程,课程设计,文件系统 ...


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

【精选】操作系统课程设计(文件系统管理)文件 - 评定等级 操作系统课程设计 文件系统管理 学专班姓学 院业级名号 计算机学院 计算机科学与技术 2013 年 1 月 ....


操作系统课程设计 简单文件系统的实现.doc

操作系统课程设计 简单文件系统的实现 - 操作系统课程设计报告 小组编号: 小组成员: 一、课程设计概述: 1、题目:简单文件系统的实现 2、实现内容 (1) 在内存中...


操作系统课程设计-模拟文件系统.doc

操作系统课程设计-模拟文件系统 - 目录 第 1 章 需求分析……...…...


08级操作系统课程设计-文档资料_图文.ppt

08级操作系统课程设计-文档资料 - 操作系统课程设计 2019级计算机专业 操作系统课程设计 安排 基本原理 系统的实现方案、数据结构及程序结构 要求、验收方式等 安排 ...


操作系统课程设计个人心得.doc

操作系统课程设计个人心得 - 课程设计心得体会 课程设计题目 姓名 组别 第二组


计算机操作系统课程设计.doc

计算机操作系统课程设计 - 计算机操作系统课程设计 班级:计 091-1 姓名:


操作系统课程设计--基于Linux的模拟文件系统的设计与实现.doc

操作系统课程设计--基于Linux的模拟文件系统的设计与实现 - 前言 简单地说


操作系统课程设计参考文档概要 - 图文 - 百度文库.ppt

操作系统课程设计参考文档概要 - 计算机操作系统课程设计 文志强 计算机与通信学院 课程设计内容 ? ? ? ? ? 任务1 进程管理演示 任务2 存储管理系统设计 任务3 ...


操作系统课程设计说明书 (文件管理).doc

操作系统课程设计说明书 (文件管理) - 基于Linux的模拟文件系统的设计与实


操作系统课程设计--二级文件系统设计.doc

操作系统课程设计--二级文件系统设计 - 操作系统课程设计报告 专学姓 业: 号: 名: 提交日期: 操作系统课程设计报告 【设计题目】 二级文件系统设计 【设计目的...


操作系统课程设计.doc

操作系统课程设计 - (操作系统课程设计) 连续动态分区内存 管理模拟实现 学生


操作系统课程设计.doc

操作系统课程设计 - 计算机与电子信息学院 操作系统课程设计报告 题目一:页面淘


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

操作系统课程设计文件操作 - 石家庄经济学院 课程设计报告 (学院)系: 专姓班


操作系统课程设计模拟DOS文件的建立与使用.doc

操作系统课程设计模拟DOS文件的建立与使用 - 磁盘文件是磁盘上存储的重要信息,通过本实验模拟DOS文件的建立和使用情况,理解磁盘文件的物理结构。文件管理是操作系统中...


操作系统课程设计报告(完成版).doc

操作系统课程设计报告(完成版) - 计算机专业操作系统期末课程设计报告,课程设计


操作系统课程设计.doc

操作系统课程设计 - 中南大学 操作系统课程设计 实验报告 题学姓班日 目:多用

网站首页 | 网站地图
All rights reserved Powered by 酷我资料网 koorio.com
copyright ©right 2014-2019。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com