文件系統的設計與實現(操作系統課程設計)


 轉發請註明:http://blog.csdn.net/tianqingdezhuanlan/article/details/51344739

源碼下載地址:http://download.csdn.net/download/u013255737/9513460

目錄

一、設計目的、意義 1

二、 設計分析 1

三、方案分析 2

四、功能模塊實現 3

五、最終結果分析 4

六、 設計體會 5

 


一、設計目的、意義

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.2創建文件夾流程圖:

 3.2.3創建文件流程圖:

3.2.4寫文件流程圖:


 


3.2.5進入文件函數流程圖:

3.2.6讀文件流程圖:


 

 

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;

}

 


 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章