轉發請註明:http://blog.csdn.net/tianqingdezhuanlan/article/details/51344739
源碼下載地址:http://download.csdn.net/download/u013255737/9513460
目錄
一、設計目的、意義
1.通過模擬文件系統的實現,深入理解操作系統中文件系統的理論知識, 加深對教材中的重要算法的理解。同時通過編程實現這些算法,更好地掌握操作系統的原理及實現方法,提高綜合運用各專業課知識的能力。
2.意義:本文件系統採用多級目錄,其中第一級對應於用戶賬號,第二級對應於用戶賬號下的文件,第三級對應文件夾下的文件,以此類推。另外,爲了簡單本文件系統未考慮文件共享、文件系統安全以及管道文件與設備文件等特殊內容。
二、設計分析
① 用戶登錄
用戶分爲超級管理員、管理員和普通用戶。超級管理員具有創建用戶並設置權限的權限;
管理員與超級管理員權限基本相同。
② 建立文件
模擬文件系統進行“建立文件”的處理。
③ 打開文件
約定操作類型與文件屬性不符合和正處在“建立”狀態的文件不允許打開。
④ 關閉文件
對某個文件不需要再讀或寫的時候,用戶應關閉該文件。
⑤ 讀文件
文件打開後可順序讀文件中的記錄,讀長度表示本次操作需讀的記錄個數。
⑥ 寫文件
執行寫文件操作時要區分兩種情況,第一種是在執行create後要求寫,第二種是執行open後要求寫。對第二種情況可認爲用戶要對一個已建立好的文件進行修改。一個文件可以分多次寫,既可按記錄順序寫也可隨機寫一個記錄,採用順序寫時可省略記錄號。
⑦ 刪除文件
把請求撤消的文件從擁護文件目錄表中除名,收回該文件站用的存儲區域。
⑧ 文件列表
將目前本用戶本路徑的文件列出,並列出相關的屬性。
⑨ 結束
退出程序,返回原有操作系統。
三、方案分析
3.1:主要的數據結構
//用戶類型定義
struct user
{
char name[10];//用戶名
int pride;//用戶權限,1爲管理員,0爲普通用戶
char pass[10];//用戶密碼
};
//定義空白區項
struct freeb
{
int number;
struct freeb * next;
};
//定義文件打開項
struct fileb
{
int parent;//所在父節點
char name[15];//文件名
int pride;//讀寫權限,0只讀,1讀寫
int rex;//讀寫狀態,0爲沒有,1讀2寫
struct fileb * next;
};
//定義文件索引項
struct findex
{
char name[15];
int number;
int parent;
char kind;
struct findex * next;
};
//定義目錄表項
struct dreitem
{
char name[25];//目錄或者文件名稱
int share; //共享數
int parent;//上層目錄
int pride;//文件操作權限,0只讀,1讀寫
int empty;//是否是空閒塊,0爲空閒塊,1爲非空
char kind;//類型,文件爲f,文件夾爲d
};
3.2:流程圖
3.2.1主流程圖:
3.2.7刪除流程圖:
四、功能模塊實現
4.1 login登陸:
用戶輸入用戶名和密碼,在user文件中查找是否有此用戶,覈對密碼。正確則登陸成功,當前目錄設定到當前用戶文件夾下。
4.2 createuser()新建用戶:
先根據提示輸入用戶名,再判斷此用戶名是否已存在,若存在則重新輸入,若沒有,則用戶創建成功。函數結束。
4.3intlist()初始化空閒區鏈表以及文件索引鏈:
本函數在程序用運行後,對空閒區進行初始化。
4.4 newdrec()新建目錄:
輸入參數爲要建立的類型,f爲文件,d爲文件夾。並輸入權限(0只讀,1讀寫)。在創建目錄時,並檢測是否有重名的目錄,若有則創建失敗;沒有重名的就在空閒區添加,否則,直接在文件中添加。
4.5 lsfile()列出當前路徑下的文件:
查找當前目錄下的各種文件並列舉出來。
4.6 back()目錄後退
檢測當前是否處於根目錄下,不是則返回到上一目錄;若當前處於根目錄下,則無法後退。
五、最終結果分析
1:磁盤格式化後進入登錄界面
2:先用超級管理員登陸後顯示幫助信息並創建用戶
3用戶登陸後並列出當前目錄下的內容
4.打開文件
5.關閉文件
6,當前路徑
六、設計體會
第一、操作系統這次課程設計讓我學習到了很多計算機方面的知識,在一定程度上對以前的所學知識進一步加深,更讓我有了一個系統的瞭解。操作系統是計算機的軟件的系統的基礎,具有一定平臺性。掌握好這門課程對我們以後學習計算機知識有一個很大的幫助。
第二、本次課程設計讓我明白了編寫程序一定要動手去寫代碼,進行實際操作方可進取得一定性的進步,還要進行與組內人員之間的團結與協作。共同學習,共同克服困難,取得共同進步。
七、附錄
源代碼:
#include <stdio.h>
#include <string.h>
#include <process.h>
#include <malloc.h>
#include <stdlib.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#define getb(type) (type*)malloc(sizeof(type))
using namespace std;
int usernowpride;//全局變量,當前用戶類型
char usernowname[10];//全局變量,當前用戶名
int nowlevel; //全局變量,當前目錄層次
char usernowpath[200] = "\\\0"
//用戶類型定義
struct user
{
char name[10];//用戶名
int pride;//用戶權限,1爲管理員,0爲普通用戶
char pass[10];//用戶密碼
};
//定義空白區項
struct freeb
{
int number;
struct freeb * next;
};
struct freeb *fblk=NULL;//全局變量,系統空閒區鏈
//定義文件打開項
struct fileb
{
int parent;//所在父節點
char name[15];//文件名
int pride;//讀寫權限,0只讀,1讀寫
int rex;//讀寫狀態,0爲沒有,1讀2寫
struct fileb * next;
};
struct fileb *flink=NULL;//全局變量,系統打開文件鏈
//定義文件索引項
struct findex
{
char name[15];
int number;
int parent;
char kind;
struct findex * next;
};
struct findex *fidx=NULL;//全局變量,文件索引鏈
//定義目錄表項
struct dreitem
{
char name[25];//目錄或者文件名稱
int share; //共享數
int parent;//上層目錄
int pride;//文件操作權限,0只讀,1讀寫
int empty;//是否是空閒塊,0爲空閒塊,1爲非空
char kind;//類型,文件爲f,目錄爲d
};
#include"FSMain.h"
//新建用戶
bool createuser()
{
struct user newuser;
char name[10];
char pass[10];
int pride;
if(usernowpride!=1)
{
cout<<"當前用戶沒有新建用戶的權限\n";
return false;
}
FILE *fp;
if((fp = fopen("user","ab+"))==NULL)
{
cout<<"用戶表打開失敗\n";
return false;
}
else
{
cout<<"請輸入用戶名:";
cin>>name;
if(strcmp(name,"root")==0)
{
printf("Error:此爲超級管理員\n");
return false;
}
rewind(fp);
while(!feof(fp))
{
fread(&newuser,sizeof(struct user),1,fp);
if(strcmp(newuser.name,name)==0)
{
cout<<"該用戶名已經存在\n";
fclose(fp);
return false;
}
}
cout<<"請輸入用戶密碼:";
cin>>pass;
cout<<"請輸入用戶權限(0普通用戶,1管理員):";
cin>>pride;
strcpy(newuser.name,name);
strcpy(newuser.pass,pass);
newuser.pride=pride;
// FILE fpuser;//爲新建用戶建立用戶目錄文件
if(!fopen(newuser.name,"ab+"))
{
cout<<"用戶創建失敗\n";
//如創建失敗則把已經建立的用戶目錄刪除
char cmd[20] = "DEL ";
strcat(cmd,newuser.name);
system(cmd);
fclose(fp);
return false;
}
if(!fwrite(&newuser,sizeof(struct user),1,fp))
{
cout<<"創建失敗\n";
fclose(fp);
return false;
}
else
{
cout<<"用戶創建成功\n";
fclose(fp);
return true;
}
}
}
//用戶登陸
bool login()
{
char name[10];
char pass[10];
cout<<"\n\t\t\t○用戶名:";
cin>>name;
cout<<"\t\t\t○密 碼:";
cin>>pass;
if((strcmp("root",name)==0)&&(strcmp("123456",pass)==0))//管理員
{
usernowpride = 1;
strcpy(usernowname,"root");
return true;
}
FILE *fp=NULL;
struct user actuser;
if(!(fp=fopen("user","ab+")))
{
cout<<"Error:用戶表錯誤\n";
return false;
}
rewind(fp);
while(!feof(fp))
{
fread(&actuser,sizeof(struct user),1,fp);
if((strcmp(actuser.name,name)==0)&&(strcmp(actuser.pass,pass)==0))
{
usernowpride = actuser.pride;//記錄當前用戶的權限
strcpy(usernowname,actuser.name);//記錄當前用戶的主路徑
nowlevel=-1;//記錄當前目錄層次
fclose(fp);
//設置路徑
if(strcmp(usernowpath,"\\")!=0) //不是根目錄就添加斜槓
{
strcat(usernowpath,"\\");
}
strcat(usernowpath,usernowname);
return true;
}
}
cout<<"Error:用戶名或密碼無效,請覈對後再輸入\n";
fclose(fp);
return false;
}
//初始化空閒區鏈表以及文件索引鏈
void intlist()
{
//-----------------------------清空各鏈表
fidx=NULL;
fblk=NULL;
//-----------------------------
int i=0;
struct dreitem dnow;
FILE *fp;
if(!(fp=fopen(usernowname,"rb")))
{
cout<<"Error:打開用戶目錄失敗\n";
return ;
}
else
{
int enp;
int sp;
fseek(fp,0,2);
enp=ftell(fp);
fseek(fp,0,0);
sp=ftell(fp);
if(sp==enp) return;
while(!feof(fp))
{
fread(&dnow,sizeof(struct dreitem),1,fp);
if(dnow.empty==0)
{
//把空閒區連到空閒鏈表中
struct freeb *fb =getb(struct freeb);
fb->number=i;
fb->next=NULL;
struct freeb *p=fblk;
if(p==NULL)
{
fblk=getb(struct freeb);
fblk->next=fb;
}
else
{
while(p->next!=NULL)
{
p=p->next;
}
p->next=fb;
}
}
else
{
//建立索引表
struct findex *fi =(struct findex*)malloc(sizeof(struct findex));
strcpy(fi->name,dnow.name);
fi->number=i;
fi->kind=dnow.kind;
fi->parent=dnow.parent;
fi->next=NULL;
struct findex *pi=fidx;
if(pi==NULL)
{
fidx=getb(struct findex);
fidx->next=fi;
}
else
{
while(pi->next!=NULL)
{
pi=pi->next;
}
pi->next=fi;
}
}
i++;
}
fclose(fp);
return ;
}
}
//新建目錄
void newdrec(char ch)//輸入參數爲要建立的類型,f爲文件,d爲文件夾
{
struct dreitem dnow;
char name[15];
char pride;//權限,0只讀,1讀寫
int i;//記錄空閒區區號
bool cancrd = true;//用於判斷是否有重名文件
cout<<"請輸入名字:";
fflush(stdin);
scanf("%s",&name);
//判斷是否已經存在相同名字的文件或者目錄
struct findex *fi=fidx;
while(fi)
{
if((strcmp(fi->name,name)==0)&&(fi->parent==nowlevel)&&(fi->kind==ch))
{
cout<<"Error:此文件或者目錄已經存在\n";
cancrd=false;
break;
}
fi=fi->next;
}
if(!cancrd) return;
cout<<"請輸入權限(0只讀,1讀寫):";
cin>>pride;
dnow.empty=0;
strcpy(dnow.name,name);
dnow.parent=nowlevel;
if(pride=='0')
{
dnow.pride=0;
}
else
{
dnow.pride=1;
}
dnow.share=0;
dnow.kind=ch;
dnow.empty=1;
FILE *fp;
if(!(fp=fopen(usernowname,"rb+")))
{
cout<<"錯誤";
return ;
}
else
{
if(fblk==NULL||fblk->next==NULL) //空閒區沒有就直接在文件添加
{
fseek(fp,0,2);
fwrite(&dnow,sizeof(struct dreitem),1,fp);
cout<<"創建成功\n";
fclose(fp);
return;
}
else
{
struct freeb *p=fblk->next;//拿第一個空閒區來存放文件
if(p!=NULL)
{
//fblk=p->next;
i = p->number;
fblk->next=p->next;
}
free(p);
fseek(fp,i*sizeof(struct dreitem),0);
fwrite(&dnow,sizeof(struct dreitem),1,fp);
cout<<"創建成功\n";
fclose(fp);
return;
}
}
}
//列表當前路徑下的文件
void lsfile()
{
long ep;
FILE *fp;
struct dreitem drenow;
fp=fopen(usernowname,"rb");
fseek(fp,0,2);
ep=ftell(fp);
fseek(fp,0,0);
cout<<"Name\tPride\tKind\tShare\tParent\n";
while(ep!=ftell(fp))
{
fread(&drenow,sizeof(struct dreitem),1,fp);
if(drenow.parent==nowlevel&&drenow.empty!=0)
{
cout<<drenow.name<<"\t";
cout<<drenow.pride<<"\t";
cout<<drenow.kind<<"\t";
cout<<drenow.share<<"\t";
cout<<drenow.parent<<"\n";
}
}
cout<<"文件列表結束\n";
fclose(fp);
}
//目錄後退
bool back()
{
if(nowlevel==-1)
{
cout<<"Error:當前已爲用戶根目錄,無法再回退\n";
return false;
}
char name[15];
int i;
i=nowlevel;
struct dreitem drecnow;
FILE *fp;
fp=fopen(usernowname,"rb");
fseek(fp,i*sizeof(struct dreitem),0);
fread(&drecnow,sizeof(struct dreitem),1,fp);
fclose(fp);
strcpy(name,drecnow.name);
nowlevel=drecnow.parent;
char cc; //檢測'\0'位置
int ccidx=0; //記錄最好一個'\'位置
int j=0;
cc=usernowpath[j];
while(cc!='\0')
{
j++;
cc=usernowpath[j];
if(cc=='\\')
{
ccidx=j;
}
}
if(ccidx!=0)
{
usernowpath[ccidx]='\0';
}
return true;
}
//進入路徑
bool path(char chpath[15])
{
struct dreitem drenow;
char mypath[15];
int i=0;
strcpy(mypath,chpath);
if(strcmp(mypath,"..")==0)
{
if(back())
{
return true;
}
else
{
return false;
}
}
FILE *fp;
fp=fopen(usernowname,"rb");
while(!feof(fp))
{
fread(&drenow,sizeof(struct dreitem),1,fp);
if((strcmp(drenow.name,mypath)==0)&&(drenow.kind=='d')&&(drenow.parent==nowlevel))
{
nowlevel=i;
fclose(fp);
if(strcmp(usernowpath,"\\")!=0) //不是根目錄就添加斜槓
{
strcat(usernowpath,"\\");
}
strcat(usernowpath,mypath);
return true;
}
i++;
}
fclose(fp);
return false;
}
//進入路徑完整版
void intopath()
{
int tempnl=nowlevel;
char tempunp[200];
strcpy(tempunp,usernowpath);
char wholepath[100];
char name[15];
cout<<"輸入要進入的路徑:";
cin>>wholepath;
int i=0;
char cc=wholepath[i];
while(cc!='\0')
{
int j=0;
name[j]=cc;
while(cc!='\0'&&cc!='\\')
{
name[j]=cc;
j++;
i++;
cc=wholepath[i];
}
if(i!=0)
{
name[j]='\0';
if(!path(name))
{
cout<<"Error:路徑輸入錯誤,請覈對\n";
//如果路徑錯誤,則還原
nowlevel=tempnl;
strcpy(usernowpath,tempunp);
return;
}
}
if(cc=='\0') break;
i++;
cc=wholepath[i];
}
}
//刪除文件,遞歸刪除文件夾和文件夾裏面的內容
//刪除文件
bool remove(int p)
{
bool isfind=false;
int i=0;
int temp=0;
struct dreitem drecnow;
FILE *fp;
fp=fopen(usernowname,"rb+");
long ep;
fseek(fp,0,2);
ep=ftell(fp);
fseek(fp,0,0);
while(ep!=ftell(fp))
{
fread(&drecnow,sizeof(struct dreitem),1,fp);
if(drecnow.parent==p)
{
isfind=true;
temp=p;
remove(i);
}
i++;
}
if(!isfind)
{
drecnow.empty=0;
strcpy(drecnow.name," ");
drecnow.parent=-1;
fseek(fp,p*sizeof(struct dreitem),0);
fwrite(&drecnow,sizeof(struct dreitem),1,fp);
fclose(fp);
return true;
}
else
{
remove(temp);
fclose(fp);
return false;
}
}
void del()
{
char name[15];
cout<<"輸入要刪除的文件:";
cin>>name;
findex *fb=fidx;//用於索引表
findex *fi;
fileb *fob=flink;//用於已打開文件鏈表
if(fb==NULL||fb->next==NULL)//搜索索引表
{
cout<<"Error:沒有此文件\n";
return;
}
bool isit=true;
while(fb!=NULL&&fb->next!=NULL)
{
fi=fb;
fb=fb->next;
if((strcmp(fb->name,name)==0)&&(fb->parent==nowlevel))
{
isit=false;
if(remove(fb->number))
{
fi->next=fb->next;
free(fb);
cout<<"該文件已被刪除\n";
return;
}
}
}
if(isit)
{
cout<<"Error:沒有此文件\n";
}
else
{
cout<<"該文件已被刪除\n";
}
}
//打開文件
void openfile()
{
long ep;
int i=0;
FILE *fp;
struct dreitem drenow;
char name[15];
cout<<"輸入要打開的文件名:";
cin>>name;
struct fileb *fb=flink;
while(fb!=NULL&&fb->next!=NULL)
{
fb=fb->next;
if((strcmp(fb->name,name)==0)&&(fb->parent==nowlevel))
{
cout<<"Error:該文件已經打開\n";
return;
}
}
fp=fopen(usernowname,"rb"); //可用索引節點
fseek(fp,0,2);
ep=ftell(fp);
fseek(fp,0,0);
while(ep!=ftell(fp))
{
fread(&drenow,sizeof(struct dreitem),1,fp);
if((strcmp(drenow.name,name)==0)&&(drenow.parent==nowlevel)&&(drenow.kind=='f'))
{
//添加到打開鏈表
fileb *pb=getb(struct fileb);
strcpy(pb->name,name);
pb->parent=nowlevel;
pb->next=NULL;
pb->rex=0;
pb->pride=drenow.pride;
if(flink==NULL)
{
flink=getb(struct fileb);
flink->next=pb;
}
else
{
pb->next=flink->next;
flink->next=pb;
}
cout<<"文件已經打開\n";
fclose(fp);
//這裏是否要更新顯示已打開鏈表
return;
}
i++;
}
cout<<"Error:當前目錄下無此文件,請覈對\n";
fclose(fp);
}
//顯示當前打開文件列表
void disfilelist()
{
if(flink==NULL||flink->next==NULL)
{
cout<<"當前打開文件隊列空\n";
return;
}
else
{
cout<<"當前打開文件隊列如下:(文件名|父節點|讀寫權限|讀寫狀態)\n";
fileb *fb=flink;
while(fb!=NULL&&fb->next!=NULL)
{
fb=fb->next;
printf("%s|%d|%d|%d->",fb->name,fb->parent,fb->pride,fb->rex);
}
cout<<"**\n";
}
}
//關閉文件
void closefile()
{
char name[15];
cout<<"輸入要關閉的文件:";
cin>>name;
if(flink==NULL||flink->next==NULL)
{
cout<<"Error:該文件沒有打開\n";
return;
}
fileb *fb=flink;
fileb *ffb=NULL;
while(fb!=NULL&&fb->next!=NULL)
{
ffb=fb;
fb=fb->next;
if((strcmp(fb->name,name)==0)&&(fb->parent==nowlevel))
{
ffb->next=fb->next;
free(fb);
cout<<"文件已經關閉\n";
return;
}
}
cout<<"Error:當前路徑下找不到你要關閉的文件,請確定文件名已經路徑是否正確\n";
}
//讀寫文件,該文件必須先打開後纔可以進行讀寫操作
void rwfile(int ch) //讀寫文件,輸入1爲讀文件,輸入2爲寫文件
{
char name[15];
cout<<"要操作的文件名:";
cin>>name;
if(flink==NULL||flink->next==NULL)
{
cout<<"Error:該文件尚未打開\n"; //可以調用文件打開函數,以後先修改
return;
}
fileb *fb=flink;
while(fb!=NULL&&fb->next!=NULL)
{
fb=fb->next;
if((strcmp(fb->name,name)==0)&&(fb->parent==nowlevel))
{
//char ch;
if(fb->rex!=ch&&fb->rex!=0)
{
if(ch==2)
{
if(fb->pride!=1)
{
cout<<"Error:該文件只讀,沒有寫權限\n";
return;
}
else
{
cout<<"當前文件正在讀進程,是否終止讀進程進行寫?(y OR n):";
}
}
else
{
cout<<"當前文件正在寫進程,是否終止寫進程進行讀?(y OR n):";
}
fflush(stdin);
cin>>ch;
if(ch=='y'||ch=='Y')
{
if(ch==2)
{
fb->rex=1;
cout<<"文件正在讀...\n";
}
else
{
fb->rex=2;
cout<<"文件正在寫...\n";
}
}
}
else
{
if(ch==2&&fb->pride!=1)
{
cout<<"Error:該文件只讀,沒有寫權限\n";
return;
}
fb->rex=ch;
if(ch==1)
{
cout<<"文件正在讀...\n";
}
else
{
cout<<"文件正在寫...\n";
}
}
return;
}
}
}
//設置共享
void setshare()
{
cout<<"要共享的文件:";
}
//顯示當前路徑
void dispathlist()
{
cout<<usernowpath<<endl;
}
//註銷
void logout()
{
strcpy(usernowname," ");
nowlevel=-1;
fblk=NULL;
fidx=NULL;
strcpy(usernowpath,"\\");
flink=NULL;
}
//修改用戶類型
void setpride()
{
char name[15];
cout<<"輸入用戶名字:";
cin>>name;
if((strcmp("root",name)==0))//超級用戶
{
cout<<"Error:超級管理員權限不可以更改\n";
return ;
}
FILE *fp=NULL;
struct user actuser;
if(!(fp=fopen("user","rb+")))
{
cout<<"Error:用戶表錯誤\n";
return ;
}
rewind(fp);
long np;
while(!feof(fp))
{
np=ftell(fp);
fread(&actuser,sizeof(struct user),1,fp);
if((strcmp(actuser.name,name)==0))
{
if(actuser.pride==1)
{
int pp=1;
cout<<"該用戶是管理員\n輸入0設置普通用戶:";
cin>>pp;
if(pp==0)
{
actuser.pride=0;
}
}
else if(actuser.pride==0)
{
int pp=0;
cout<<"該用戶是普通用戶\n輸入1設置爲管理員:";
cin>>pp;
{
if(pp==1)
{
actuser.pride=1;
}
}
}
fseek(fp,np,0);
fwrite(&actuser,sizeof(struct user),1,fp);
fclose(fp);
return;
}
}
}
int main()
{
int choince;
while(1)
{
system("cls");
while(1)
{
system("cls");
printf("\n\n");
printf("\t ***********************************************\n");
printf("\t * 多用戶多級目錄文件系統的實現 *\n");
printf("\t ***********************************************\n");
printf("\t + + \n");
printf("\t + 學號:201358503230 姓名:田慶 + \n");
printf("\t + +\n");
printf("\t ***********************************************\n");
printf("\t *********用│║戶│║登│║錄*********\n");
printf("\t ***********************************************\n");
if(login()) break;
}
if(strcmp(usernowname,"root")==0)
{
system("cls");
printf("超級管理員,歡迎你^_^\n");
printf("************************************************************************\n");
printf("1.新建用戶 2.刪除用戶 3.修改用戶 4.註銷\n");
printf("************************************************************************\n");
printf(":) ");
bool lout=false;
while(1)
{
fflush(stdin);
scanf("%d",&choince);
switch(choince)
{
case 1:
createuser();
break;
case 2:
printf("該功能尚未實現:<\n");
break;
case 3:
setpride();
break;
case 4:
char out;
printf("真的要註銷嗎?(y OR n):");
fflush(stdin);
scanf("%c",&out);
if(out=='y'||out=='Y')
{
lout=true;
logout();
}
break;
default:
printf("Error:錯誤命令\n");
break;
}
printf(":) ");
if(lout)
break;
}
}
else
{
intlist();
system("cls");
cout<<"%s,歡迎你^_^\n"<<usernowname;
cout<<"************************************************************************\n";
printf("1.文件列表 2.新建 3.進入路徑 4.刪除 5.新建用戶\n");
printf("6.打開文件 7.關閉文件 8.讀文件 9.寫文件 10.回退上層\n");
printf("11.當前路徑 12.清屏 13.註銷\n");
printf("************************************************************************\n");
printf(":) ");
bool lout=false;
while(1)
{
fflush(stdin);
scanf("%d",&choince);
switch(choince)
{
case 1:
lsfile();
break;
case 2:
int cc;
printf("1.新建文件夾 2.新建文件");
scanf("%d",&cc);
if(cc==1)
{
newdrec('d');
}
if(cc==2)
{
newdrec('f');
}
intlist();
break;
case 3:
intopath();
break;
case 4:
del();
intlist();
break;
case 5:
createuser();
break;
case 6:
openfile();
disfilelist();
break;
case 7:
closefile();
disfilelist();
break;
case 8:
rwfile(1);
break;
case 9:
rwfile(2);
break;
case 10:
back();
break;
case 11:
dispathlist();
break;
case 12:
system("cls");
printf("%s,歡迎你^_^\n",usernowname);
printf("************************************************************************\n");
printf("1.文件列表 2.新建 3.進入路徑 4.刪除 5.新建用戶\n");
printf("6.打開文件 7.關閉文件 8.讀文件 9.寫文件 10.回退上層\n");
printf("11.當前路徑 12.清屏 13.註銷\n");
printf("************************************************************************\n");
break;
case 13:
char out;
printf("真的要註銷嗎?(y OR n):");
fflush(stdin);
scanf("%c",&out);
if(out=='y'||out=='Y')
{
lout=true;
logout();
}
break;
default:
printf("Error:錯誤命令\n");
break;
}
printf(":) ");
if(lout)
break;
}
}
}
printf("完成\n");
return 0;
}