《操作系統(tǒng)課程設(shè)計報告二級文件系統(tǒng)java.doc》由會員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)課程設(shè)計報告二級文件系統(tǒng)java.doc(13頁珍藏版)》請在裝配圖網(wǎng)上搜索。
操作系統(tǒng)課程設(shè)計報告
題目: 為Linux系統(tǒng)設(shè)計一個簡單的二級文件系統(tǒng)
指導(dǎo)老師:翟一鳴
時間:2012.8.30
一 課程設(shè)計的目的
課程設(shè)計目的使學(xué)生熟悉文件管理系統(tǒng)的設(shè)計方法;加深對所學(xué)各種文件操作的了解及其操作方法的特點。通過模擬文件系統(tǒng)的實現(xiàn),深入理解操作系統(tǒng)中文件系統(tǒng)的理論知識, 加深對教材中的重要算法的理解。同時通過編程實現(xiàn)這些算法,更好地掌握操作系統(tǒng)的原理及實現(xiàn)方法,提高綜合運用各專業(yè)課知識的能力。
二 課程設(shè)計的要求
1.可以實現(xiàn)下列幾條命令:
login 用戶登錄
dir 列目錄
create 創(chuàng)建文件
delete 刪除文件
open 打開文件
close 關(guān)閉文件
read 讀文件
write 寫文件
2.列目錄時要列出文件名,物理地址,保護碼和文件長度
3.源文件可以進行讀寫保護
三 算法設(shè)計
本次二級文件系統(tǒng)主要分為五大模塊,分別是用戶登錄模塊、新建目錄模塊、新建文件模塊、刪除文件模塊和讀取文件模塊。用戶登錄成功后才可以進行其他模塊的操作。
1 用戶登錄模塊
用戶登錄模塊要求用戶輸入用戶,當(dāng)輸入正確后才能進行其他模塊操作,否則提示用戶名不存在并詢問用戶是否用此名進行注冊。若用戶名未滿,則提示注冊成功,否則提示用現(xiàn)有注冊用戶,進行登錄,并返回到登錄界面。用戶登錄模塊流程圖如圖1所示。
開始
輸入login命令
否
輸入用戶名
是否注冊
用戶是否存在
是
否
是
進行其他模塊
圖1 用戶登錄模塊流程圖
2新建文件模塊
新建文件模塊是在用戶出入create指令后進行的,進入后會要求用戶輸入文件名,并判斷文件名是否存在,若沒有則在要求用戶輸入文件讀寫權(quán)限,否則重新輸入新的文件名。新建文件模塊流程圖如圖2所示。
開始
輸入create命令
輸入文件名
文件名是否存在
是
否
輸入權(quán)限
圖2 新建文件流程圖
3 刪除文件模塊
開始
刪除文件模塊是根據(jù)用戶鼠標(biāo)右擊時選擇到的節(jié)點來確定要刪除節(jié)點的名字與路徑,然后判斷該節(jié)點是目錄還是文件。若是文件則直接刪除文件,若是目錄則進入該目錄再刪除其全部文件。刪除文件模塊流程圖如圖4所示。
輸如open 文件名
提示無此文件
文件名是否存在
否
輸入權(quán)限
是
圖4 刪除文件模塊流程圖
4讀取文件模塊
開始
讀取文件模塊,要求用戶要在文件打開的前提下,將磁盤中的內(nèi)容讀取到內(nèi)存中。讀取文件流程圖如圖5所示。
Open 文件
輸如read 文件名
文件是否存在
是
提示文件未打開
文件是否已打開
否
顯示文件內(nèi)容
圖5 讀取文件模塊流程圖
5 寫入文件模塊
寫入文件模塊,思路與讀取文件模塊將本相同,只是添加了對讀寫權(quán)限的判斷。
6 遍歷文件
遍歷文件,根據(jù)在用戶登陸時,記錄的值,在二維數(shù)組中,找到用戶的所有文件對象,將相應(yīng)的必須屬性全部打印出來。
四 程序源代碼
1. 文件對象相關(guān)代碼
package com.file;
import java.io.Serializable;
public class FilePro implements Serializable{
String filename;
String content;
String username;
int flag;
int protect;
public FilePro(String filename,String username,String content,int flag,int protect){
this.filename = filename;
this.username = username;
this.content = content;
this.flag = flag;
this.protect = protect;
}
}
2. 文件讀寫操作
package com.file;
import java.io.*;
import java.util.*;
public class FileCon {
Object [][] data = new Object[7][100];
ObjectInputStream in = null;
ObjectOutputStream out = null;
String path = "D:\\file";
public FileCon(){
for(int i = 0;i<7;i++)
for(int j = 0;j<100;j++){
data[i][j] = new FilePro("",null,"",1,0);
}
}
public Object[][] readData(){
try {
in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(path)));
data = (Object[][]) in.readObject();
} catch(EOFException e){
} catch (Exception e) {
}
return data;
}
public void writeData(Object[][] data){
try {
out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(path)));
out.writeObject(data);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.用戶名操作
public class UserCon {
List
list = new ArrayList();
ObjectInputStream in = null;
ObjectOutputStream out = null;
String path = "D:\\user";
public List readUser(){
try {
in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(path)));
list = (List) in.readObject();
} catch(EOFException e){
} catch (Exception e) {
}
return list;
}
public void writeUser(List list){
try {
out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(path)));
out.writeObject(list);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.主程序
package com.file;
import java.util.*;
public class FileSystem {
Object[][] data = new Object[7][100];
FileCon fc = new FileCon();
List user = new ArrayList();
UserCon uc = new UserCon();
String[] cmd = new String[2];
int currentuser = 0;
public FileSystem() {
data = fc.readData();
user = uc.readUser();
}
public static void main(String[] args) {
FileSystem fs = new FileSystem();
fs.help();
}
public void help() {
System.out.println("歡迎使用該文件系統(tǒng)");
System.out.print("create ");
System.out.println("創(chuàng)建文件");
System.out.print("dir ");
System.out.println("列目錄文件");
System.out.println("exit 退出系統(tǒng)");
System.out.println("以下命令需加文件名");
System.out.println("eg:open ***");
System.out.print("open ");
System.out.println("打開文件");
System.out.print("close ");
System.out.println("關(guān)閉文件");
System.out.print("read ");
System.out.println("讀文件");
System.out.print("write ");
System.out.println("寫文件");
System.out.print("delete ");
System.out.println("刪除文件");
command();
}
public void command() {
System.out.print("root:>");
String comd = null;
Scanner input = input = new Scanner(System.in);
comd = input.nextLine();
String[] cmd = new String[2];
cmd = comd.split(" ");
if (cmd[0].equals("login"))
login();
else if (cmd[0].equals("create"))
create();
else if (cmd[0].equals("dir"))
dir();
else if (cmd[0].equals("delete"))
delete(cmd[1]);
else if (cmd[0].equals("open"))
open(cmd[1]);
else if (cmd[0].equals("close"))
close(cmd[1]);
else if (cmd[0].equals("read"))
read(cmd[1]);
else if (cmd[0].equals("write"))
write(cmd[1]);
else if (cmd[0].equals("exit")){
System.out.println("退出系統(tǒng)!");
System.exit(0);}
else System.out.println("指令錯誤??!");
command();
}
public void login() {
boolean f = false;
System.out.println("請輸入用戶名:");
Scanner input = input = new Scanner(System.in);
String username = input.next();
for (int i = 0; i < user.size(); i++) {
if (user.get(i).equals(username)) {
System.out.println("登陸成功!!");
currentuser = i;
f = true;
break;
}
}
if (!f) {
System.out.println("該用戶不存在,是否以此用戶名注冊?y注冊,其他返回");
String cho = input.next();
if (cho.equals("y")) {
if (user.size() == 7)
System.out.println("對不起用戶已滿,請利用其他已注冊賬戶登錄");
else {
user.add(username);
uc.writeUser(user);
System.out.println("注冊成功!請重新登錄");
}
login();
}
}
command();
}
// 目錄
public void dir() {
System.out.println("文件名\t" + "用戶名\t" + "物理地址\t" + "保護碼\t" + "文件長度");
for (int i = 0; i < 100; i++) {
FilePro fp1 = (FilePro) data[currentuser][i];
if (!fp1.filename.equals(""))
System.out.println(fp1.filename + "\t" + fp1.username + "\t"
+ currentuser + i + "\t" + fp1.protect + "\t"
+ fp1.content.length());
}
command();
}
// 創(chuàng)建文件
public void create() {
Scanner input = input = new Scanner(System.in);
boolean f = true;
boolean fl = false;
String filename = null;
do{
fl = false;
System.out.print("請輸入文加名:");
filename = input.next();
for (int i = 0; i < 100; i++) {
FilePro fp1 = (FilePro) data[currentuser][i];
if (fp1.filename.equals(filename)) {
System.out.println("文件已存在??!");
fl = true;
break;
}
}
}while(fl);
System.out.print("請輸入權(quán)限:");
int protect = input.nextInt();
FilePro fp = new FilePro(filename, user.get(currentuser), "", 1,
protect);
for (int i = 0; i < 100; i++) {
FilePro fp1 = (FilePro) data[currentuser][i];
if (fp1.filename.equals("")) {
data[currentuser][i] = fp;
fc.writeData(data);
System.out.println("創(chuàng)建成功??!");
f = false;
break;
}
}
if (f) {
System.out.println("磁盤已滿");
}
command();
}
// 刪除文件
public void delete(String file) {
boolean f = true;
for (int i = 0; i < 100; i++) {
FilePro fp1 = (FilePro) data[currentuser][i];
if (fp1.filename.equals(file)) {
fp1.filename = "";
fp1.content = null;
fp1.flag = 1;
fp1.username = null;
fc.writeData(data);
System.out.println("刪除成功!!");
f = false;
break;
}
}
if (f) {
System.out.println("無此文件");
}
command();
}
// 打開文件
public void open(String file) {
boolean f = true;
for (int i = 0; i < 100; i++) {
FilePro fp1 = (FilePro) data[currentuser][i];
if (fp1.filename.equals(file)) {
if (fp1.flag == 0)
System.out.println("文件已打開!");
else {
fp1.flag = 0;
System.out.println("文件打開成功?。?);
}
f = false;
break;
}
}
if (f) {
System.out.println("無此文件");
}
command();
}
// 關(guān)閉文件
public void close(String file) {
boolean f = true;
for (int i = 0; i < 100; i++) {
FilePro fp1 = (FilePro) data[currentuser][i];
if (fp1.filename.equals(file)) {
if (fp1.flag == 1)
System.out.println("文件未打開!");
else {
fp1.flag = 1;
System.out.println("文件關(guān)閉成功??!");
}
f = false;
break;
}
}
if (f) {
System.out.println("無此文件");
}
command();
}
// 讀文件
public void read(String file) {
boolean f = true;
for (int i = 0; i < 100; i++) {
FilePro fp1 = (FilePro) data[currentuser][i];
if (fp1.filename.equals(file)) {
if (fp1.flag == 1)
System.out.println("文件未打開!請先將文件打開!");
else {
System.out.println(fp1.content);
}
f = false;
break;
}
}
if (f) {
System.out.println("無此文件");
}
command();
}
// 寫文件
public void write(String file) {
Scanner input = input = new Scanner(System.in);
boolean f = true;
for (int i = 0; i < 100; i++) {
FilePro fp1 = (FilePro) data[currentuser][i];
if (fp1.filename.equals(file)) {
if (fp1.flag == 1)
System.out.println("文件未打開!請先將文件打開!");
else {
if (fp1.protect != 0)
System.out.println("對不起,您沒有寫入的權(quán)限!");
else {
System.out.println("請輸入要寫入的內(nèi)容:");
String ss = input.next();
fp1.content = fp1.content + ss;
fc.writeData(data);
System.out.println("寫入成功");
}
}
f = false;
break;
}
}
if (f) {
System.out.println("無此文件");
}
command();
}
}
五 程序運行截圖
六 心得體會
對于本次操作系統(tǒng)課程設(shè),由于對二級文件的內(nèi)容比較陌生,剛起步階段花了很大時間去思考,但是仍然還是比較模糊。當(dāng)完成設(shè)計時,感覺還是不是太了解,總感覺得到的和要求的有些差別,不過對二級文件系統(tǒng)也有了進一步的了解,并且還對操作系統(tǒng)應(yīng)用有了更深入的認(rèn)識??傮w來說,這次課程下來,發(fā)現(xiàn)自己的,語言基礎(chǔ)掌握的一點也不好,讓我遇到了許多的問題。
鏈接地址:http://www.szxfmmzy.com/p-8898903.html