文件系统的设计与实现(操作系统课程设计)
轉(zhuǎn)發(fā)請注明:http://blog.csdn.net/tianqingdezhuanlan/article/details/51344739
源碼下載地址:http://download.csdn.net/download/u013255737/9513460
?????????????????????
?一、設(shè)計(jì)目的、意義
1.通過模擬文件系統(tǒng)的實(shí)現(xiàn),深入理解操作系統(tǒng)中文件系統(tǒng)的理論知識, 加深對教材中的重要算法的理解。同時(shí)通過編程實(shí)現(xiàn)這些算法,更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,提高綜合運(yùn)用各專業(yè)課知識的能力。
2.意義:本文件系統(tǒng)采用多級目錄,其中第一級對應(yīng)于用戶賬號,第二級對應(yīng)于用戶賬號下的文件,第三級對應(yīng)文件夾下的文件,以此類推。另外,為了簡單本文件系統(tǒng)未考慮文件共享、文件系統(tǒng)安全以及管道文件與設(shè)備文件等特殊內(nèi)容。
二、設(shè)計(jì)分析
- 用戶登錄
?? 用戶分為超級管理員、管理員和普通用戶。超級管理員具有創(chuàng)建用戶并設(shè)置權(quán)限的權(quán)限;
管理員與超級管理員權(quán)限基本相同。
- 建立文件
模擬文件系統(tǒng)進(jìn)行“建立文件”的處理。
- 打開文件
約定操作類型與文件屬性不符合和正處在“建立”狀態(tài)的文件不允許打開。
- 關(guān)閉文件
對某個(gè)文件不需要再讀或?qū)懙臅r(shí)候,用戶應(yīng)關(guān)閉該文件。
- 讀文件
文件打開后可順序讀文件中的記錄,讀長度表示本次操作需讀的記錄個(gè)數(shù)。
- 寫文件
執(zhí)行寫文件操作時(shí)要區(qū)分兩種情況,第一種是在執(zhí)行create后要求寫,第二種是執(zhí)行open后要求寫。對第二種情況可認(rèn)為用戶要對一個(gè)已建立好的文件進(jìn)行修改。一個(gè)文件可以分多次寫,既可按記錄順序?qū)懸部呻S機(jī)寫一個(gè)記錄,采用順序?qū)憰r(shí)可省略記錄號。
- 刪除文件
把請求撤消的文件從擁護(hù)文件目錄表中除名,收回該文件站用的存儲(chǔ)區(qū)域。
- 文件列表
將目前本用戶本路徑的文件列出,并列出相關(guān)的屬性。
- 結(jié)束
退出程序,返回原有操作系統(tǒng)。
三、方案分析
3.1?主要的數(shù)據(jù)結(jié)構(gòu)
通過分析課程設(shè)計(jì)要求,具體設(shè)計(jì)出如下數(shù)據(jù)結(jié)構(gòu):
//用戶類型定義
struct user {char name[10];//用戶名int pride;//用戶權(quán)限,1為管理員,0為普通用戶char pass[10];//用戶密碼 };//定義空白區(qū)項(xiàng)
struct freeb {int number;struct freeb * next; };//定義文件打開項(xiàng)
struct fileb {int parent;//所在父節(jié)點(diǎn)char name[15];//文件名int pride;//讀寫權(quán)限,0只讀,1讀寫int? rex;//讀寫狀態(tài),0為沒有,1讀2寫struct fileb * next; };//定義文件索引項(xiàng)
struct findex {char name[15];int number;int parent;char kind;struct findex * next; };//定義目錄表項(xiàng)
struct dreitem {char name[25];//目錄或者文件名稱int share; //共享數(shù)int parent;//上層目錄int pride;//文件操作權(quán)限,0只讀,1讀寫int empty;//是否是空閑塊,0為空閑塊,1為非空char kind;//類型,文件為f,文件夾為d };3.2:流程圖
3.2.1主流程圖:
3.2.2創(chuàng)建文件夾流程圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?3.2.3創(chuàng)建文件流程圖:
3.2.4寫文件流程圖:
3.2.5進(jìn)入文件函數(shù)流程圖:
3.2.6讀文件流程圖:
3.2.7刪除流程圖:
四、功能模塊實(shí)現(xiàn)
4.1 login 登陸:
用戶輸入用戶名和密碼,在user文件中查找是否有此用戶,核對密碼。正確則登陸成功,當(dāng)前目錄設(shè)定到當(dāng)前用戶文件夾下。
4.2 createuser()新建用戶:
先根據(jù)提示輸入用戶名,再判斷此用戶名是否已存在,若存在則重新輸入,若沒有,則用戶創(chuàng)建成功。函數(shù)結(jié)束。? ? ? ????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
4.3intlist()初始化空閑區(qū)鏈表以及文件索引鏈:
本函數(shù)在程序用運(yùn)行后,對空閑區(qū)進(jìn)行初始化。
4.4 newdrec()新建目錄:
輸入?yún)?shù)為要建立的類型,f為文件,d為文件夾。并輸入權(quán)限(0只讀,1讀寫)。在創(chuàng)建目錄時(shí),并檢測是否有重名的目錄,若有則創(chuàng)建失敗;沒有重名的就在空閑區(qū)添加,否則,直接在文件中添加。
4.5 lsfile()列出當(dāng)前路徑下的文件:
查找當(dāng)前目錄下的各種文件并列舉出來。
4.6 back()目錄后退
檢測當(dāng)前是否處于根目錄下,不是則返回到上一目錄;若當(dāng)前處于根目錄下,則無法后退。
五、最終結(jié)果分析
1:磁盤格式化后進(jìn)入登錄界面
2:先用超級管理員登陸后顯示幫助信息并創(chuàng)建用戶
3用戶登陸后并列出當(dāng)前目錄下的內(nèi)容
4.打開文件
5.關(guān)閉文件
6,當(dāng)前路徑
六、設(shè)計(jì)體會(huì)
?第一、操作系統(tǒng)這次課程設(shè)計(jì)讓我學(xué)習(xí)到了很多計(jì)算機(jī)方面的知識,在一定程度上對以前的所學(xué)知識進(jìn)一步加深,更讓我有了一個(gè)系統(tǒng)的了解。操作系統(tǒng)是計(jì)算機(jī)的軟件的系統(tǒng)的基礎(chǔ),具有一定平臺性。掌握好這門課程對我們以后學(xué)習(xí)計(jì)算機(jī)知識有一個(gè)很大的幫助。
第二、本次課程設(shè)計(jì)讓我明白了編寫程序一定要?jiǎng)邮秩懘a,進(jìn)行實(shí)際操作方可進(jìn)取得一定性的進(jìn)步,還要進(jìn)行與組內(nèi)人員之間的團(tuán)結(jié)與協(xié)作。共同學(xué)習(xí),共同克服困難,取得共同進(jìn)步。
七、附錄
? 源代碼:
#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;//全局變量,當(dāng)前用戶類型 char usernowname[10];//全局變量,當(dāng)前用戶名 int nowlevel; //全局變量,當(dāng)前目錄層次 char usernowpath[200] = "\\\0"//用戶類型定義 struct user {char name[10];//用戶名int pride;//用戶權(quán)限,1為管理員,0為普通用戶char pass[10];//用戶密碼 };//定義空白區(qū)項(xiàng) struct freeb {int number;struct freeb * next; };struct freeb *fblk=NULL;//全局變量,系統(tǒng)空閑區(qū)鏈//定義文件打開項(xiàng)struct fileb {int parent;//所在父節(jié)點(diǎn)char name[15];//文件名int pride;//讀寫權(quán)限,0只讀,1讀寫int? rex;//讀寫狀態(tài),0為沒有,1讀2寫struct fileb * next; };struct fileb *flink=NULL;//全局變量,系統(tǒng)打開文件鏈//定義文件索引項(xiàng) struct findex {char name[15];int number;int parent;char kind;struct findex * next; };struct findex *fidx=NULL;//全局變量,文件索引鏈//定義目錄表項(xiàng) struct dreitem {char name[25];//目錄或者文件名稱int share; //共享數(shù)int parent;//上層目錄int pride;//文件操作權(quán)限,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<<"當(dāng)前用戶沒有新建用戶的權(quán)限\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<<"該用戶名已經(jīng)存在\n";fclose(fp);return false;}}cout<<"請輸入用戶密碼:";cin>>pass;cout<<"請輸入用戶權(quán)限(0普通用戶,1管理員):";cin>>pride;strcpy(newuser.name,name);strcpy(newuser.pass,pass);newuser.pride=pride; //?????FILE fpuser;//為新建用戶建立用戶目錄文件if(!fopen(newuser.name,"ab+")){cout<<"用戶創(chuàng)建失敗\n";//如創(chuàng)建失敗則把已經(jīng)建立的用戶目錄刪除char cmd[20] = "DEL ";strcat(cmd,newuser.name);system(cmd);fclose(fp);return false;}if(!fwrite(&newuser,sizeof(struct user),1,fp)){cout<<"創(chuàng)建失敗\n";fclose(fp);return false;}else{cout<<"用戶創(chuàng)建成功\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:用戶表錯(cuò)誤\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;//記錄當(dāng)前用戶的權(quán)限strcpy(usernowname,actuser.name);//記錄當(dāng)前用戶的主路徑nowlevel=-1;//記錄當(dāng)前目錄層次fclose(fp);//設(shè)置路徑if(strcmp(usernowpath,"\\")!=0)????????????? //不是根目錄就添加斜杠{strcat(usernowpath,"\\");}strcat(usernowpath,usernowname);return true;}}cout<<"Error:用戶名或密碼無效,請核對后再輸入\n";fclose(fp);return false;}//初始化空閑區(qū)鏈表以及文件索引鏈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){//把空閑區(qū)連到空閑鏈表中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)//輸入?yún)?shù)為要建立的類型,f為文件,d為文件夾{struct dreitem dnow;char name[15];char pride;//權(quán)限,0只讀,1讀寫int i;//記錄空閑區(qū)區(qū)號bool cancrd = true;//用于判斷是否有重名文件cout<<"請輸入名字:";fflush(stdin);scanf("%s",&name);//判斷是否已經(jīng)存在相同名字的文件或者目錄struct findex *fi=fidx;while(fi){if((strcmp(fi->name,name)==0)&&(fi->parent==nowlevel)&&(fi->kind==ch)){cout<<"Error:此文件或者目錄已經(jīng)存在\n";cancrd=false;break;}fi=fi->next;}if(!cancrd) return;cout<<"請輸入權(quán)限(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<<"錯(cuò)誤";return ;}else{if(fblk==NULL||fblk->next==NULL)?????? //空閑區(qū)沒有就直接在文件添加{fseek(fp,0,2);fwrite(&dnow,sizeof(struct dreitem),1,fp);cout<<"創(chuàng)建成功\n";fclose(fp);return;}else{struct freeb *p=fblk->next;//拿第一個(gè)空閑區(qū)來存放文件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<<"創(chuàng)建成功\n";fclose(fp);return;}}}//列表當(dāng)前路徑下的文件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<<"文件列表結(jié)束\n";fclose(fp);}//目錄后退bool back(){if(nowlevel==-1){cout<<"Error:當(dāng)前已為用戶根目錄,無法再回退\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;????????? //記錄最好一個(gè)'\'位置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;}//進(jìn)入路徑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;}//進(jìn)入路徑完整版void intopath(){int tempnl=nowlevel;char tempunp[200];strcpy(tempunp,usernowpath);char wholepath[100];char name[15];cout<<"輸入要進(jìn)入的路徑:";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:路徑輸入錯(cuò)誤,請核對\n";//如果路徑錯(cuò)誤,則還原nowlevel=tempnl;strcpy(usernowpath,tempunp);return;}}if(cc=='\0') break;i++;cc=wholepath[i];}}//刪除文件,遞歸刪除文件夾和文件夾里面的內(nè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<<"輸入要?jiǎng)h除的文件:";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:該文件已經(jīng)打開\n";return;}}fp=fopen(usernowname,"rb");?????????????????????? //可用索引節(jié)點(diǎn)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<<"文件已經(jīng)打開\n";fclose(fp);//這里是否要更新顯示已打開鏈表return;}i++;}cout<<"Error:當(dāng)前目錄下無此文件,請核對\n";fclose(fp);}//顯示當(dāng)前打開文件列表void disfilelist(){if(flink==NULL||flink->next==NULL){cout<<"當(dāng)前打開文件隊(duì)列空\n";return;}else{cout<<"當(dāng)前打開文件隊(duì)列如下:(文件名|父節(jié)點(diǎn)|讀寫權(quán)限|讀寫狀態(tài))\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";}}//關(guān)閉文件void closefile(){char name[15];cout<<"輸入要關(guān)閉的文件:";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<<"文件已經(jīng)關(guān)閉\n";return;}}cout<<"Error:當(dāng)前路徑下找不到你要關(guān)閉的文件,請確定文件名已經(jīng)路徑是否正確\n";}//讀寫文件,該文件必須先打開后才可以進(jìn)行讀寫操作void rwfile(int ch)?????????? //讀寫文件,輸入1為讀文件,輸入2為寫文件{char name[15];cout<<"要操作的文件名:";cin>>name;if(flink==NULL||flink->next==NULL){cout<<"Error:該文件尚未打開\n";???????????????????????? //可以調(diào)用文件打開函數(shù),以后先修改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:該文件只讀,沒有寫權(quán)限\n";return;}else{cout<<"當(dāng)前文件正在讀進(jìn)程,是否終止讀進(jìn)程進(jìn)行寫?(y OR n):";}}else{cout<<"當(dāng)前文件正在寫進(jìn)程,是否終止寫進(jìn)程進(jìn)行讀?(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:該文件只讀,沒有寫權(quán)限\n";return;}fb->rex=ch;if(ch==1){cout<<"文件正在讀...\n";}else{cout<<"文件正在寫...\n";}}return;}}}//設(shè)置共享void setshare(){cout<<"要共享的文件:";}//顯示當(dāng)前路徑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:超級管理員權(quán)限不可以更改\n";return ;}FILE *fp=NULL;struct user actuser;if(!(fp=fopen("user","rb+"))){cout<<"Error:用戶表錯(cuò)誤\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設(shè)置普通用戶:";cin>>pp;if(pp==0){actuser.pride=0;}}else if(actuser.pride==0){int pp=0;cout<<"該用戶是普通用戶\n輸入1設(shè)置為管理員:";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? *????? 多用戶多級目錄文件系統(tǒng)的實(shí)現(xiàn)? ?? *\n");printf("\t? ***********************************************\n");printf("\t? + ?????????????????? + \n");printf("\t? + 學(xué)號: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("該功能尚未實(shí)現(xiàn):<\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:錯(cuò)誤命令\n");break;}printf(":) ");if(lout)break;}}else{intlist();system("cls");cout<<"%s,歡迎你^_^\n"<<usernowname;cout<<"************************************************************************\n";printf("1.文件列表? 2.新建??? 3.進(jìn)入路徑? 4.刪除??? 5.新建用戶\n");printf("6.打開文件? 7.關(guān)閉文件? 8.讀文件?? 9.寫文件?? 10.回退上層\n");printf("11.當(dāng)前路徑 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.進(jìn)入路徑? 4.刪除??????? 5.新建用戶\n");printf("6.打開文件? 7.關(guān)閉文件? 8.讀文件?? 9.寫文件?? 10.回退上層\n");printf("11.當(dāng)前路徑 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:錯(cuò)誤命令\n");break;}printf(":) ");if(lout)break;}}}printf("完成\n");return 0;} ?轉(zhuǎn)發(fā)請注明:http://blog.csdn.net/tianqingdezhuanlan/article/details/51344739
源碼下載地址:http://download.csdn.net/download/u013255737/9513460
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的文件系统的设计与实现(操作系统课程设计)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1979)vue之电商管理系统
- 下一篇: 如何开启刷题,蓝桥杯练习系统