2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  計(jì)算機(jī)系課程設(shè)計(jì)</b></p><p><b>  實(shí) 驗(yàn) 報(bào) 告 </b></p><p>  課程名稱 操作系統(tǒng)課程設(shè)計(jì) </p><p>  實(shí)驗(yàn)學(xué)期 2012 至 2013 學(xué)年 第 1 學(xué)期 </p>&l

2、t;p>  學(xué)生所在系部 計(jì)算機(jī)與信息管理系 </p><p>  年級(jí) 2010 專業(yè)班級(jí) 計(jì)算機(jī)001班 </p><p>  學(xué)生姓名 學(xué)號(hào) </p><p>  任課教師 </p><

3、p>  實(shí)驗(yàn)成績 </p><p><b>  計(jì)算機(jī)系制</b></p><p>  一個(gè)簡單的文件系統(tǒng)的詳細(xì)設(shè)計(jì)</p><p><b>  一、實(shí)驗(yàn)?zāi)康?lt;/b></p><p> ?。?)閱讀并調(diào)試一個(gè)簡單的文件

4、系統(tǒng),模擬文件管理的工作過程。從而對各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解。</p><p> ?。?)了解設(shè)計(jì)一個(gè)n個(gè)用戶的文件系統(tǒng),每個(gè)用戶可以保存M個(gè)文件。用戶在一次運(yùn)行中只能打開一個(gè)文件,對文件必須設(shè)置保護(hù)措施,且至少有create、delete、open、close、read、write等命令。</p><p><b>  二、實(shí)驗(yàn)要求</b>

5、</p><p>  1、閱讀所給文件系統(tǒng)源程序,并加注釋(注釋量達(dá)60%),</p><p>  2、修改、完善該系統(tǒng),畫出所設(shè)計(jì)的文件系統(tǒng)的詳細(xì)流程圖。</p><p>  三、文件系統(tǒng)功能設(shè)計(jì)</p><p><b>  1. 功能設(shè)計(jì)</b></p><p>  該文件系統(tǒng)是一個(gè)多用戶、多

6、任務(wù)的文件系統(tǒng)。對用戶和用戶的文件數(shù)目并沒有上限。也就是說該系統(tǒng)允許任何用戶申請空間,而且在其目錄下的文件數(shù)目并不做任何的限制。</p><p>  該系統(tǒng)可以支持的操作命令如下:</p><p>  ① bye——用戶注銷命令。當(dāng)使用該命令時(shí),用戶退出系統(tǒng),注銷該用戶功能設(shè)計(jì)并回到登陸界面。</p><p>  命令格式: bye </p><

7、p>  ② close——?jiǎng)h除用戶注冊信息命令。執(zhí)行該命令后,用戶在系統(tǒng)中的所有信息,包括該用戶目錄下的所有文件都被刪除。命令執(zhí)行完成后返回登陸界面。</p><p>  命令格式:close</p><p> ?、?create——在當(dāng)前目錄下創(chuàng)建一個(gè)文件,且該文件不能跟當(dāng)前已有的文件重名。該文件的管理信息登記在用戶文件信息管理模塊中。執(zhí)行完該命令后回到執(zhí)行命令行。</p&g

8、t;<p>  命令格式:create>file1</p><p>  其中:“>”符為提示符,file1為要?jiǎng)?chuàng)建的文件名。</p><p> ?、?delete——?jiǎng)h除當(dāng)前用戶目錄下的一個(gè)文件,命令執(zhí)行完畢返回至命令行。</p><p>  命令格式:delete>file1 </p><p>  其中:fi

9、le1為要?jiǎng)h除的文件名。</p><p> ?、?list——顯示當(dāng)前注冊目錄下的所有文件信息,包括文件名、文件長度、文件操作權(quán)限。</p><p><b>  命令格式:list</b></p><p> ?、?chmod——改變某個(gè)文件的執(zhí)行權(quán)限,但前提是該文件是該用戶目錄下的文件。</p><p>  命令格式:c

10、hmod>file1。</p><p>  其中:file1為要授權(quán)的文件名。</p><p> ?、?open——在window界面下打開某個(gè)文件。執(zhí)行該命令后,文件file1將用在windows界面下的文件形式打開。用戶可以在這個(gè)方式中對文件進(jìn)行修改,并將修改后的內(nèi)容保存。</p><p>  命令格式:open>file1</p>&

11、lt;p>  其中:file1為要打開的文件名。</p><p> ?、?read——讀文件信息。將文件信息讀入并顯示在終端上。</p><p>  命令格式:read>file1</p><p>  其中:file1為要讀的文件名。</p><p>  ⑨ write——向某個(gè)文件寫入新的信息。用戶可以選擇用覆蓋原來內(nèi)容的方式或

12、和在文件的末尾追加新信息的方式寫入信息。 當(dāng)要退出時(shí)輸入“#”即可。</p><p> ?。?)系統(tǒng)采用二級(jí)文件目錄。設(shè)置主目錄(MFD)和用戶文件目錄(UFD),分別以文件的方式保存在磁盤中。在主目錄中有注冊用戶的用戶名和另一標(biāo)志該用戶目錄下是否有文件的指針標(biāo)記。用戶文件目錄采用用戶名作為文件名保存于磁盤,以便檢索時(shí)方便對應(yīng)。在用戶文件目錄中保存著該目錄下所有文件的文件名稱、保護(hù)碼、文件長度。</p>

13、;<p> ?。?)該系統(tǒng)大量使用高級(jí)語言中的文件操作函數(shù),所以能實(shí)際看到文件的創(chuàng)建、寫入、讀出、刪除等效果。</p><p>  2. 功能設(shè)計(jì)實(shí)現(xiàn)總體流程</p><p><b>  3. 主要數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  4. 主要功能模塊</b></p><p>

14、;  四、文件系統(tǒng)功能模塊詳細(xì)設(shè)計(jì)流程圖</p><p>  1. int LoginDisplay() //登陸選項(xiàng)操作函數(shù)</p><p>  圖1:函數(shù)LoginDisplay()流程圖</p><p>  bool Login(int SELETE)//用戶登陸,注冊函數(shù) </p><p>  圖2:函數(shù)Login(int SELET

15、E)流程圖</p><p>  void DisplayUFD() //打印用戶信息,包括用戶的各個(gè)文件</p><p>  圖3:函數(shù)DisplayUFD()流程圖</p><p>  void ByeFile(bool BOOL)//注銷函數(shù),調(diào)用此函數(shù)后用戶可以退出系統(tǒng)</p><p>  圖4:函數(shù)ByeFile(bool B

16、OOL)流程圖</p><p>  bool ClearUserFile()//用戶要將自己的注冊目錄從系統(tǒng)徹底刪除</p><p>  圖5:函數(shù)ClearUserFile()流程圖</p><p>  void ClearUserMes()//刪除用戶全部信息</p><p>  圖6:函數(shù)ClearUserMes()流程圖</p&

17、gt;<p>  void DeleteUser()//刪除用戶注冊目錄的操作</p><p>  圖7:函數(shù)DeleteUser()流程圖</p><p>  void CreatFile()//在當(dāng)前用戶目錄下創(chuàng)建文件</p><p>  圖8:函數(shù)CreatFile()流程圖</p><p>  void DeleteFi

18、le()//刪除當(dāng)前目錄下一個(gè)文件的操作</p><p>  圖9:函數(shù)DeleteFile()流程圖</p><p>  bool QueryModElse(bool BOOL,bool &flag)//查詢其它用戶目錄下的文件</p><p>  圖10:函數(shù)QueryModElse(bool BOOL,bool &flag)流程圖</p

19、><p>  bool QueryMod(bool BOOL)//查詢權(quán)限</p><p>  圖11:函數(shù)QueryMod(bool BOOL)流程圖</p><p>  bool WriteRight(int len,bool BOOL) //查看是否已經(jīng)正確地寫入到該文件信息中,是則返回真值</p><p>  圖12:函數(shù)WriteRig

20、ht(int len,bool BOOL)流程圖</p><p>  void WriteLengthToFile(int Len,bool BOOL)//將文件長度寫入文件管理模塊中</p><p>  圖13:函數(shù)WriteLengthToFile(int Len,bool BOOL)流程圖</p><p>  void WriteFile()//向文件寫入信息

21、的操作</p><p>  圖14:函數(shù)WriteFile()流程圖</p><p>  void ReadFile()//讀文件函數(shù)</p><p>  圖15:函數(shù)ReadFile()流程圖</p><p>  void ChangeMod()//修改某文件的執(zhí)行權(quán)限</p><p>  圖16:函數(shù)ChangeM

22、od()流程圖</p><p>  void Execute(int i,int len,int cmdset)//執(zhí)行命令函數(shù)</p><p>  圖17:函數(shù)Execute()流程圖</p><p>  void Command()//讀取用戶輸入的命令,并將其轉(zhuǎn)換成系統(tǒng)能識(shí)別的命令</p><p>  圖18:函數(shù)Command()流程

23、圖</p><p><b>  實(shí)驗(yàn)運(yùn)行結(jié)果</b></p><p><b>  1、用戶注冊:</b></p><p><b>  圖19:用戶注冊</b></p><p><b>  2、創(chuàng)建文件:</b></p><p>&l

24、t;b>  圖20:創(chuàng)建文件</b></p><p>  3、用戶注冊時(shí)重名:</p><p>  圖21:用戶注冊時(shí)重名</p><p>  4、已注冊用戶登陸,并打開文件進(jìn)行寫入操作:</p><p>  圖22:已注冊用戶登陸,并打開文件進(jìn)行寫入操作</p><p>  5、讀出文件內(nèi)容到終端:

25、</p><p>  圖23:讀出文件內(nèi)容到終端</p><p><b>  6、刪除文件:</b></p><p><b>  圖24:刪除文件</b></p><p><b>  7、打印文件清單:</b></p><p>  圖25:打印文件清單&

26、lt;/p><p><b>  8、修改用戶權(quán)限:</b></p><p>  圖26:修改用戶權(quán)限</p><p>  9、刪除用戶全部文件與信息:</p><p>  圖27:刪除用戶全部文件與信息</p><p><b>  10、退出系統(tǒng):</b></p>

27、<p><b>  圖28:退出系統(tǒng)</b></p><p>  六、系統(tǒng)改進(jìn)的設(shè)想與實(shí)現(xiàn)</p><p><b>  1、修改內(nèi)容說明:</b></p><p>  (1)、對源程序中的函數(shù)進(jìn)行了聲明和排序(按首字母排列);</p><p> ?。?)、在登陸選項(xiàng)操作函數(shù)LoginDis

28、play()和修改文件權(quán)限函數(shù)ChangeMod()中添加了人性化提示語句,方便用戶操作。</p><p>  2、實(shí)現(xiàn)程序(用小六字體打印):</p><p><b> ?。?)、程序如下:</b></p><p>  //--------------------------------函數(shù)聲明------------------------

29、------------------------------</p><p>  void ByeFile(bool BOOL); //注銷函數(shù),調(diào)用此函數(shù)用戶可以退出系統(tǒng)</p><p>  void ChangeMod(); //修改某文件的執(zhí)行權(quán)限</p><p>  void ClearUserMes();

30、 //刪除用戶全部信息</p><p>  void Command(); //讀取用戶輸入的命令,并將其轉(zhuǎn)換成系統(tǒng)能識(shí)別的命令</p><p>  void CreatFile(); //在當(dāng)前用戶目錄下創(chuàng)建文件</p><p>  void DeleteFile(); //刪除當(dāng)前目錄下一個(gè)

31、文件的操作</p><p>  void DeleteUser(); //刪除用戶注冊目錄的操作</p><p>  void DisplayUFD(); //打印用戶信息,包括用戶的各個(gè)文件名稱、長度和操作權(quán)限的設(shè)置信息</p><p>  void Execute(int i,int len,int cmdset);

32、 //執(zhí)行命令函數(shù)</p><p>  void KeyWord(); //初始化命令關(guān)鍵字</p><p>  void ListAllFile(); //顯示當(dāng)前用戶目錄下的文件信息</p><p>  void OpenFile(); //在window模式下打開該

33、文件</p><p>  void ReadFile(); //讀文件函數(shù)</p><p>  void WriteFile(); //向文件寫入信息的操作</p><p>  void WriteLengthToFile(int Len,bool BOOL); //將文件長度寫入文件管理模塊中&l

34、t;/p><p>  bool ClearUserFile(); //用戶要將自己的注冊目錄從系統(tǒng)徹底刪除,首先應(yīng)將該用戶目錄下的全部文件刪除</p><p>  bool Login(int SELETE); //用戶登陸,注冊函數(shù)。</p><p>  bool QueryMod(bool BOOL); //查詢權(quán)限</p&

35、gt;<p>  bool QueryModElse(bool BOOL,bool &flag); //查詢其它用戶目錄下文件的文件</p><p>  bool WriteRight(int len,bool BOOL); //查看是否已經(jīng)正確地寫入到該文件信息中,若是,則返回真值</p><p>  int L

36、oginDisplay(); //登陸選項(xiàng)操作函數(shù)(登陸界面模塊)。</p><p>  int main(); /*主函數(shù)聲明,與其他函數(shù)聲明一樣,其功能是:使編譯器進(jìn)行預(yù)編譯時(shí)為主函數(shù)預(yù)留內(nèi)存空間。 </p><p>  只有主函數(shù)可以不要聲明,直接定義使用。 VC6.0里用void main();。*/ </p>

37、<p><b>  、程序如下:</b></p><p>  A、登陸選項(xiàng)操作函數(shù)LoginDisplay()</p><p>  system("cls"); //清屏函數(shù)。</p><p>  cout<<" *******歡迎使用本文件系統(tǒng)*******&quo

38、t;<<endl;</p><p>  cout<<" *****您可以進(jìn)行以下操作*****"<<endl;</p><p>  cout<<"**溫馨提示:輸入操作序號(hào),如“2”,再按回車鍵**\n **即可進(jìn)入“用戶注冊”功能界面,下同。**"<<endl;</p

39、><p>  cout<<"\n *****請選擇操作*****\n1、用戶登陸 2、用戶注冊 0、退出"<<endl; </p><p>  cin>>SELETE_1; //鍵盤輸入一個(gè)序號(hào),如1、2、0。 </p><p>  B、修改文件權(quán)限函數(shù)

40、ChangeMod()</p><p>  cout<<"\n文件的權(quán)限值具體如下:";</p><p>  cout<<"\n30:其他用戶既沒讀權(quán)也沒寫權(quán);";</p><p>  cout<<"\n31:其他用戶沒有讀權(quán)但有寫權(quán);";</p><

41、p>  cout<<"\n32:其他用戶具有讀權(quán)但沒寫權(quán);";</p><p>  cout<<"\n33:其他用戶既有讀權(quán)也有寫權(quán)。\n";</p><p>  cout<<"\n輸入文件 "<<buffer<<" 的新的權(quán)限值:";<

42、/p><p>  cin>>mod;//輸入權(quán)限值</p><p>  源程序(用小六字體打印):</p><p>  /***************************************************************** </p><p>  * 文

43、 件 名: Simple_file_system.c</p><p>  * 功 能: 簡單文件管理系統(tǒng)模擬程序 </p><p>  * 指導(dǎo)老師: 陸麗娜 </p><p>  * 組 長: 王珊</p><p>  * 組 員: 王珊、韓二雄 </p><p>

44、;  *******************************************************************/</p><p>  //-------------------頭文件包含-----------------------------------------------------------------</p><p>  #include<

45、iostream.h> //定義“數(shù)據(jù)流輸入/輸出函數(shù)”的頭文件。 </p><p>  #include<stdio.h> //定義“輸入/輸出函數(shù)” 的頭文件。 </p><p>  #include<stdlib.h> //定義“C語言標(biāo)準(zhǔn)庫函數(shù)” 的頭文件。</p&

46、gt;<p>  #include<string.h> //定義“字符串處理函數(shù)” 的頭文件。 </p><p>  #include "conio.h" //定義“控制臺(tái)輸入輸出函數(shù)” 的頭文件。 </p><p>  #include<dos.h>

47、 //定義“BIOS和DOS調(diào)用函數(shù)” 的頭文件。 </p><p>  /*<>表示在包含文件目錄中去查找,而不在源文件目錄中找;</p><p>  ""表示首先在當(dāng)前的源文件目錄中查找,若未找到,才到包含目錄中去查找。*/</p><p>  //--------------------編譯預(yù)處理-------------

48、-----------------------------------------------------</p><p>  //#define NULL 0 //不帶參的宏定義,功能為:用宏名(NULL)替換宏體(0)。 </p><p>  #define keynum 10 //同上。 </p><p>

49、  #define getspace(type) (type*)malloc(sizeof(type)) /*帶參的宏定義,功能為:用宏名(getspace(type))替換宏體((type*)malloc(sizeof(type)))。 </p><p>  其中type為形式參數(shù)。*/ </p><p>  char cmd[64]; //存放用戶輸入

50、的命令</p><p>  char buffer[36]; //</p><p>  char user[32]; //存放當(dāng)前登陸的用戶名</p><p>  //定義了3個(gè)全局變量(外部變量),當(dāng)函數(shù)內(nèi)部定義了與其同名的局部變量(內(nèi)部變量)時(shí),全局變量就會(huì)被屏蔽。 </p><p>  typedef char AL

51、FA[12]; //用戶自定義類型,其功能為:用“ALFA[12]”代替“char”,其實(shí)換湯不換藥。 </p><p>  ALFA KWORD[keynum]; //此處若用char KWORD[keynum];會(huì)有24個(gè)錯(cuò)誤出現(xiàn)。 </p><p>  //-----------------------------------------

52、-------------------------------------------------------</p><p>  struct UFD //用戶文件管理模塊</p><p>  { </p><p>  char filename[32];//文件名</p><p>  int s

53、afecode; //文件保護(hù)碼</p><p>  long length; //文件長度</p><p>  }*curfile = NULL; /*定義一個(gè)結(jié)構(gòu)類型UFD,內(nèi)含三個(gè)成員變量。 </p><p>  又定義一個(gè)結(jié)構(gòu)體變量curfile,并賦值為NULL。 */ </p><p&g

54、t;  //------------------------------------------------------------------------------------------------</p><p>  struct MFD //用戶登陸信息管理模塊</p><p><b>  {</b></p><p&g

55、t;  char username[32]; //用戶名</p><p>  bool filepoint; //用戶目錄下的文件指針,false表示目錄為空,true為該用戶目錄中有文件</p><p>  }*curuser = NULL,*elseuser=NULL;</p><p>  //------------------------

56、------------------------------------------------------------------------</p><p>  typedef UFD UFD;</p><p>  typedef MFD MFD; //自定義類型,用UFD代替UFD,用MFD代替MFD。為什么????? </p><

57、p>  //--------------------------------函數(shù)聲明------------------------------------------------------</p><p>  void ByeFile(bool BOOL); //注銷函數(shù),調(diào)用此函數(shù)用戶可以退出系統(tǒng)</p><p>  void ChangeMod();

58、 //修改某文件的執(zhí)行權(quán)限</p><p>  void ClearUserMes(); //刪除用戶全部信息</p><p>  void Command(); //讀取用戶輸入的命令,并將其轉(zhuǎn)換成系統(tǒng)能識(shí)別的命令</p><p>  void CreatFile(); //在當(dāng)前用戶目

59、錄下創(chuàng)建文件</p><p>  void DeleteFile(); //刪除當(dāng)前目錄下一個(gè)文件的操作</p><p>  void DeleteUser(); //刪除用戶注冊目錄的操作</p><p>  void DisplayUFD(); //打印用戶信息,包括用戶的各個(gè)文件名稱、長度和操作權(quán)

60、限的設(shè)置信息</p><p>  void Execute(int i,int len,int cmdset); //執(zhí)行命令函數(shù)</p><p>  void KeyWord(); //初始化命令關(guān)鍵字</p><p>  void ListAllFile(); //顯示當(dāng)前用戶目錄下的文件信

61、息</p><p>  void OpenFile(); //在window模式下打開該文件</p><p>  void ReadFile(); //讀文件函數(shù)</p><p>  void WriteFile(); //向文件寫入信息的操作</p><p>  v

62、oid WriteLengthToFile(int Len,bool BOOL); //將文件長度寫入文件管理模塊中</p><p>  bool ClearUserFile(); //用戶要將自己的注冊目錄從系統(tǒng)徹底刪除,首先應(yīng)將該用戶目錄下的全部文件刪除</p><p>  bool Login(int SELETE); //用戶登陸,注冊

63、函數(shù)。</p><p>  bool QueryMod(bool BOOL); //查詢權(quán)限</p><p>  bool QueryModElse(bool BOOL,bool &flag); //查詢其它用戶目錄下文件的文件</p><p>  bool WriteRight(int len,bool BOOL);

64、 //查看是否已經(jīng)正確地寫入到該文件信息中,若是,則返回真值</p><p>  int LoginDisplay(); //登陸選項(xiàng)操作函數(shù)(登陸界面模塊)。</p><p>  int main(); /*主函數(shù)聲明,與其他函數(shù)聲明一樣,其功能是:使編譯器進(jìn)行預(yù)編譯時(shí)為主函數(shù)預(yù)留內(nèi)存空間。 </p>

65、;<p>  只有主函數(shù)可以不要聲明,直接定義使用。 </p><p>  VC6.0里用void main();。*/ </p><p>  //--------------------------------函數(shù)定義-------------------------------------------------------</p><p>  /

66、/------------------------------------------------------------------------------------------------</p><p>  void ByeFile(bool BOOL) //注銷函數(shù),調(diào)用此函數(shù)用戶可以退出系統(tǒng)</p><p><b>  {</b></p>

67、<p>  FILE *infile,*outfile;</p><p>  char out[50];</p><p>  strcpy(out,"outfilelocate.exe");</p><p>  if((infile=fopen("LOGIN.exe","rb"))==NULL)

68、</p><p><b>  {</b></p><p>  cout<<"\n保存錯(cuò)誤。";//fclose(infile);</p><p><b>  return;</b></p><p><b>  }</b></p>

69、<p><b>  else</b></p><p><b>  {</b></p><p>  if((outfile=fopen(out,"wb+"))==NULL)//申請一個(gè)緩沖區(qū)管理模塊存放用戶更新后的全部信息</p><p><b>  {</b><

70、;/p><p>  cout<<"\n保存錯(cuò)誤。"; // fclose(outfile);</p><p>  fclose(infile);return;</p><p><b>  }</b></p><p><b>  else</b></p>

71、;<p><b>  {</b></p><p>  MFD *mfd = getspace(MFD);</p><p><b>  while(1)</b></p><p>  {//將舊文件管理信息讀出,并保存到新的文件信息管理模塊中</p><p>  fread(mfd,si

72、zeof(MFD),1,infile);</p><p>  if(feof(infile))</p><p><b>  break;</b></p><p>  if((strcmp(mfd->username,curuser->username))==0) //用戶名相同 </p><p>&l

73、t;b>  {</b></p><p>  if(BOOL) //更新當(dāng)前用戶信息的操作</p><p>  fwrite(curuser,sizeof(MFD),1,outfile);</p><p>  else continue;//如果用戶想把自己的注冊目錄從系統(tǒng)中徹底刪除,則執(zhí)行該操作</p>&l

74、t;p><b>  }</b></p><p><b>  else</b></p><p>  fwrite(mfd,sizeof(MFD),1,outfile); //寫入新的模塊</p><p><b>  }</b></p><p>  f

75、close(infile);fclose(outfile);</p><p>  remove("LOGIN.exe"); //將舊的該用戶的文件管理模塊刪除</p><p>  rename(out,"LOGIN.exe");//將新的用戶的文件管理模塊重命名為用戶目錄下的管理模塊</p><p><b

76、>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //-------------------------------------------------------------------------------------------

77、-----</p><p>  void ChangeMod()//修改某文件的執(zhí)行權(quán)限</p><p><b>  {</b></p><p>  int mod=40;</p><p>  FILE *fp,*infile,*outfile;</p><p>  char in[50],ou

78、t[50];</p><p>  UFD *ufd = getspace(UFD);</p><p>  strcpy(in,curuser->username);</p><p>  strcat(in,".exe");</p><p>  strcpy(out,"outfilelocate.exe&qu

79、ot;);</p><p>  if((fp=fopen(in,"rb"))==NULL)</p><p><b>  {</b></p><p>  //fclose(fp);</p><p>  cout<<"\n操作出現(xiàn)錯(cuò)誤,對此我們表示歉意!";</p&

80、gt;<p><b>  return;</b></p><p><b>  }</b></p><p><b>  else{</b></p><p><b>  while(1)</b></p><p>  {//查看該文件是否在當(dāng)前用

81、戶的注冊目錄下</p><p>  //任何用戶無權(quán)修改不是自己目錄下的文件的權(quán)限值</p><p>  fread(ufd,sizeof(UFD),1,fp);</p><p>  if(feof(fp))</p><p>  {//在當(dāng)前目錄下找不到該文件,說明該用戶無權(quán)修改該文件權(quán)限</p><p>  cou

82、t<<"\n你沒有權(quán)限對文件 "<<buffer<<" 執(zhí)行該操作!";</p><p>  fclose(fp);</p><p><b>  return;</b></p><p><b>  }</b></p><p>

83、;  if(strcmp(ufd->filename,buffer)==0)</p><p>  {//找到該文件,繼續(xù)操作</p><p>  fclose(fp);break;</p><p><b>  }</b></p><p><b>  }</b></p><

84、p><b>  }</b></p><p>  bool flag1=true;</p><p>  while(flag1)</p><p><b>  {</b></p><p>  cout<<"\n文件的權(quán)限值具體如下:";</p><

85、;p>  cout<<"\n30:其他用戶既沒讀權(quán)也沒寫權(quán);";</p><p>  cout<<"\n31:其他用戶沒有讀權(quán)但有寫權(quán);";</p><p>  cout<<"\n32:其他用戶具有讀權(quán)但沒寫權(quán);";</p><p>  cout<<&q

86、uot;\n33:其他用戶既有讀權(quán)也有寫權(quán)。\n";</p><p>  cout<<"\n輸入文件 "<<buffer<<" 的新的權(quán)限值:";</p><p>  cin>>mod;//輸入權(quán)限值</p><p>  if(mod<30 || mod&g

87、t;33)</p><p>  {//確保輸入的權(quán)限值正確</p><p>  cout<<"\n錯(cuò)誤:權(quán)限值必須在30~33之間";</p><p><b>  continue;</b></p><p><b>  }</b></p><p&g

88、t;<b>  else{</b></p><p><b>  char ch;</b></p><p>  switch(mod){//告訴用戶對該文件權(quán)限修改的結(jié)果,以便用戶確認(rèn)</p><p><b>  case 30:</b></p><p>  cout<&

89、lt;"\n當(dāng)前權(quán)限設(shè)置:其他用戶對"<<buffer<<"既沒讀權(quán)也沒寫權(quán)!";</p><p><b>  break;</b></p><p><b>  case 31:</b></p><p>  cout<<"\n當(dāng)前權(quán)限設(shè)置

90、:其他用戶對"<<buffer<<"沒有讀權(quán)但有寫權(quán)!";</p><p><b>  break;</b></p><p><b>  case 32:</b></p><p>  cout<<"\n當(dāng)前權(quán)限設(shè)置:其他用戶對"<&

91、lt;buffer<<"具有讀權(quán)但沒寫權(quán)!";</p><p><b>  break;</b></p><p><b>  case 33:</b></p><p>  cout<<"\n當(dāng)前權(quán)限設(shè)置:其他用戶對"<<buffer<<

92、"既有讀權(quán)也有寫權(quán)!";</p><p><b>  break;</b></p><p>  default: break;</p><p><b>  }</b></p><p>  cout<<"\n確認(rèn)按'Y',取消按'N&#

93、39;:";</p><p><b>  cin>>ch;</b></p><p>  switch(ch){</p><p><b>  case 'Y':</b></p><p>  case 'y':flag1=false;break;&l

94、t;/p><p>  default: flag1=true;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //更新文件信息管理模塊,相關(guān)操作類似上面,不在贅述&

95、lt;/p><p>  if((infile=fopen(in,"rb"))==NULL)</p><p><b>  {</b></p><p>  cout<<"\n操作出現(xiàn)錯(cuò)誤,對此我們表示歉意!";fclose(infile);</p><p><b> 

96、 return;</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  if((outfile=fopen(out,"wb+"))==NULL)</p><p><b>  {</b>

97、</p><p>  cout<<"\n操作出現(xiàn)錯(cuò)誤,對此我們表示歉意!";</p><p>  fclose(infile);//fclose(outfile);</p><p><b>  return;</b></p><p><b>  }</b></p

98、><p><b>  else</b></p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  fread(ufd,sizeof(UFD)

99、,1,infile);</p><p>  if(feof(infile))</p><p><b>  break;</b></p><p>  if((strcmp(ufd->filename,buffer))==0)</p><p>  ufd->safecode=mod;</p><

100、;p>  fwrite(ufd,sizeof(UFD),1,outfile);</p><p><b>  }</b></p><p>  fclose(infile);</p><p>  fclose(outfile);</p><p>  remove(in);</p><p>  r

101、ename(out,in);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //---------------------------------------------------

102、---------------------------------------------</p><p>  void ClearUserMes()//刪除用戶全部信息</p><p><b>  {</b></p><p>  char name[50];</p><p>  strcpy(name,curuser-

103、>username);</p><p>  strcat(name,".exe");</p><p>  remove(name); //從磁盤中刪除用戶文件信息管理模塊</p><p>  ByeFile(false); //更新系統(tǒng)的用戶登陸信息管理模塊</p><p&

104、gt;<b>  }</b></p><p>  //------------------------------------------------------------------------------------------------</p><p>  void Command() //讀取用戶輸入的命令,并將其轉(zhuǎn)換成

105、系統(tǒng)能識(shí)別的命令</p><p><b>  {</b></p><p>  int len = 0,i,j;</p><p>  int cmdset;</p><p><b>  while(1)</b></p><p><b>  {</b><

106、;/p><p>  cmdset = 0;</p><p>  cout<<"\nrun\\"; //?? </p><p>  cin>>cmd; //char cmd[64]; //存放用戶輸入的命令。

107、</p><p>  len = strlen(cmd); //求字符串長度函數(shù)。 </p><p><b>  i=0;j=0;</b></p><p>  while(cmd[i]=='>'||cmd[i]==' '){i++;}//過濾空格鍵和'&g

108、t;'</p><p>  for(;i<len;i++)</p><p><b>  {</b></p><p>  if(cmd[i]=='>' || cmd[i]==' ' || i==len-1)</p><p><b>  {</b>&l

109、t;/p><p>  if(cmd[i]=='>' || cmd[i]==' ')</p><p>  buffer[j] = '\0';</p><p><b>  else</b></p><p>  if(i==len-1)</p><p>

110、<b>  {</b></p><p>  buffer[j]=cmd[i];</p><p>  buffer[j+1]='\0';</p><p><b>  }</b></p><p><b>  i++;</b></p><p>

111、<b>  j=0;</b></p><p>  int low=1,mid,high=keynum-1; //#define keynum 10 //不帶參的宏定義,功能為:用宏名(keynum)替換宏體(10)。 </p><p>  bool BOOL = false;</p><p>  while(low<=high)&l

112、t;/p><p>  { //找到該命令關(guān)鍵字的內(nèi)部識(shí)別碼</p><p>  mid=(low+high)/2;</p><p>  if (strcmp(buffer,KWORD[mid])<=0) high=mid-1;</p><p>  if (strcmp(buffer,KWORD[mid

113、])>=0) low=mid+1;</p><p>  if(strcmp(buffer,KWORD[mid])==0)</p><p><b>  { </b></p><p>  BOOL = true;</p><p><b>  break;</b></p><

114、;p><b>  }</b></p><p><b>  }</b></p><p><b>  if(!BOOL)</b></p><p><b>  {</b></p><p>  cout<<"\n"<&l

115、t;buffer<<"不是系統(tǒng)定義的命令...";</p><p>  cmdset = 0; </p><p><b>  break;</b></p><p><b>  }</b></p><p>  else {cmdset = mid;break;}<

116、/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  buffer[j] = cmd[i];</p><p><b>  j++;</b><

117、/p><p><b>  }</b></p><p><b>  }</b></p><p>  if(cmdset == 0) continue;</p><p>  while(cmd[i]=='>'||cmd[i]==' '){i++;}//過濾空格鍵

118、和'>'</p><p>  buffer[0]='\0';</p><p>  Execute(i,len,cmdset); //調(diào)用Execute函數(shù),并傳參給它,使其執(zhí)行該命令。 </p><p><b>  }</b></p><p><b&g

119、t;  }</b></p><p>  //------------------------------------------------------------------------------------------------</p><p>  void CreatFile()//在當(dāng)前用戶目錄下創(chuàng)建文件</p><p><b> 

120、 {</b></p><p><b>  FILE *fp;</b></p><p>  curuser->filepoint=true;</p><p>  if((fp=fopen(buffer,"r"))==NULL) //如果沒有跟用戶輸入文件名相同的文件<

121、;/p><p><b>  {</b></p><p>  if((fp=fopen(buffer,"w"))==NULL)</p><p><b>  {</b></p><p>  cout<<"\n創(chuàng)建文件失??!";</p><

122、;p>  //fclose(fp);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  fclose(fp);</p><p><b>  }</b></p><p><b>

123、;  else</b></p><p>  { //用戶要?jiǎng)?chuàng)建的文件已經(jīng)存在</p><p>  cout<<"\n該文件已經(jīng)存在,創(chuàng)建另一個(gè)文件?Y/N\n";</p><p><b>  char ch;</b>&

124、lt;/p><p><b>  cin>>ch;</b></p><p>  switch(ch)</p><p><b>  {</b></p><p><b>  case 'Y':</b></p><p><b>

125、  case 'y':</b></p><p>  cout<<"\n輸入新文件名:";</p><p>  cin>>buffer;</p><p>  strcat(buffer,".txt");</p><p>  fclose(fp);<

126、/p><p>  if((fp=fopen(buffer,"w"))==NULL)</p><p><b>  {</b></p><p>  cout<<"\n創(chuàng)建文件失?。?quot;;</p><p>  //fclose(fp);</p><p>&

127、lt;b>  return;</b></p><p><b>  }</b></p><p>  fclose(fp);</p><p><b>  break;</b></p><p><b>  default:</b></p><p&

128、gt;  fclose(fp);</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  strcpy(user,curuser->username);</p>

129、<p>  strcat(user,".exe");</p><p>  curfile = getspace(UFD);</p><p>  strcpy(curfile->filename,buffer); //文件名</p><p>  curfile->length=0; //該文件長度

130、為零</p><p>  curfile->safecode=30; //設(shè)置該文件的默認(rèn)權(quán)限</p><p>  //11 00,文件主有讀和寫權(quán),其他用戶沒有讀寫權(quán)</p><p>  if((fp=fopen(user,"ab"))==NULL)</p><p><b>  {

131、</b></p><p>  cout<<"\n錯(cuò)誤:你可能不是合法用戶。"<<endl;</p><p><b>  getch();</b></p><p><b>  }</b></p><p><b>  else</b

132、></p><p><b>  {</b></p><p>  fwrite(curfile,sizeof(UFD),1,fp);//將該文件信息寫入用戶文件信息管理模塊中</p><p>  cout<<"\n文件 "<<curfile->filename<<"

133、創(chuàng)建成功!";</p><p><b>  }</b></p><p>  fclose(fp);</p><p><b>  }</b></p><p>  //---------------------------------------------------------------

134、---------------------------------</p><p>  void DeleteFile() //刪除當(dāng)前目錄下一個(gè)文件的操作</p><p><b>  {</b></p><p><b>  char ch;</b><

135、;/p><p>  FILE *infile,*outfile;</p><p>  cout<<"\n確定要?jiǎng)h除文件:"<<buffer<<" Y/N"<<endl;</p><p>  cin>>ch;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論