一.课程设计的目的
本课程设计是学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了我的动手能力。
二.课程设计的内容及要求
内容:为LINUX 设计一个简单的二级文件系统。要求做到以下几点:
1、可以实现下列几条命令(至少4条)。
Login 用户登录
Dir 列文件目录
Create 创建文件
Delete 删除文件
Open 打开文件
Close 关闭文件
Read 读文件
Write 写文件
2、列目录时要列出文件名、物理地址、保护码和文件长度。
3、源文件可以进行读写保护。
从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:
1、鼓励并优先个人独立选题设计,可从下面设计题目中选择,也可以自拟相关题目;如要合作,每组最多两名同学,且设计文档不能相同;
2、可以在我们实验课最后布置的实验设计基础上进行完善和改进,但不能相同。
3、题目选定后报给班长,班长要注意班级内题目的平衡,根据所选题目进行协调,不要都选一样的题。
4、设计完成后报请老师答辩,答辩时不能对自己提供的设计进行讲解的同学,视为抄袭;
5、要求写出一份详细的设计报告(A4纸)。
6、每位同学在周五将自己的设计报告和电子文档(包括报告和源程序)交给学习委员,并由学习委员统一刻盘后上交。
三.实现原理
首先,实现Login用户登录,(用户名:admin 密码:admin)必须登录成功才能进入文件系统进行查看,进入后,通过树状展示文件目录(默认文件目录是C:\Program Files),右侧显示文件夹图标或者文件图标,选中节点鼠标右击弹出菜单,有新建目录,新建文件,删除文件,打开文件,属性菜单项,并分别实现其功能。
四.关键算法实现流程图
流程图:
关键算法:
1.新建目录功能的实现。
private class MenuAction2 implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
try {
String Name=JOptionPane.showInputDialog("创建目录名称:");
if (!Name.equals("")) {
// 得到树状视图的被选择节点路径
TreePath path = tree.getSelectionPath();
// 得到树状视图的被选择节点
MutableTreeNode node = (MutableTreeNode) path
.getLastPathComponent();
// 得到树状视图的模型类变量
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
// 新建子节点,标题为新目录名称
MutableTreeNode newNode = new DefaultMutableTreeNode(Name);
// 先展开树状视图,触发展开树状视图事件,给当前节点追加下级节点
tree.fireTreeExpanded(path);
// 如果当前节点允许存在下级节点,则在树状视图的模型类变量中插入新子节点,位置是第一个,否则显示消息并退出该函数
if (node.getAllowsChildren())
model.insertNodeInto(newNode, node, 0);
else {
JOptionPane.showMessageDialog(null, "不能给文件追加下级目录!");
return;
}
// 得到被选择节点对应文件的完整路径信息
String fullPath = "";
for (Object obj : path.getPath()) {
String str = obj.toString();
// 处理盘符根目录问题
if (str.endsWith("\\"))
str = str.substring(0, str.length() - 1);
if (fullPath.equals(""))
fullPath += str;
else
fullPath += "\\" + str;
}
//System.out.println("fullpath="+fullPath);
// 生成被选择节点对应的文件类变量
File parentDir = new File(fullPath);
// 如果是目录,则新建相应的子目录
if (parentDir.isDirectory()) {
File currentFile = new File(fullPath + "\\" + Name);
currentFile.mkdir();
}
}
else{
JOptionPane.showMessageDialog(null, "文件名不能为空!");
}
} catch (HeadlessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
完整代码在word文档
下载链接:完整代码下载链接。