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

下載本文檔

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

文檔簡介

1、<p><b>  課 程 設(shè) 計</b></p><p>  課程名稱____計算機(jī)操作系統(tǒng)_</p><p>  題目名稱_多用戶多級目錄文件系統(tǒng)實現(xiàn)_</p><p>  學(xué)生學(xué)院___計算機(jī)學(xué)院______</p><p>  2015 年 1月 13日課程設(shè)計任務(wù)書</p><p&

2、gt;<b>  目錄</b></p><p>  一、課程設(shè)計的目的1</p><p>  二、實驗內(nèi)容與要求4</p><p>  三、設(shè)計步驟分析4</p><p><b> ?。?)實現(xiàn)原理4</b></p><p> ?。?)實現(xiàn)原理圖4</p>

3、;<p> ?。?)程序執(zhí)行過程5</p><p>  (4)實現(xiàn)用到的數(shù)據(jù)結(jié)構(gòu)5</p><p><b>  四.部分源代碼8</b></p><p> ?。?)bool InitFileSys(); //尋找第一個空白的文件塊ID8</p><p>  (2)char * FindBlank

4、FileBlock(unsigned fileblockid) //尋找第一個文件塊地址9</p><p> ?。?)void UpdateBitMap(unsigned fileblockid) //計復(fù)所在位示圖的位置9</p><p>  (4)bool InitFileSys() //初始化模擬文件系統(tǒng)10</p><p> ?。?)vo

5、id FindCommKey(char *command, char *key, char *path) //命令分解11</p><p>  (6)void Shell() //命令解釋模塊12</p><p>  五.執(zhí)行結(jié)果和結(jié)果分析14</p><p> ?。?)初始化界面并登陸系統(tǒng)14</p><p> ?。?)創(chuàng)建

6、一個文件14</p><p>  (3)刪除文件14</p><p> ?。?)打開文件14</p><p> ?。?)關(guān)閉文件14</p><p><b> ?。?)寫文件14</b></p><p><b> ?。?)讀文件14</b></p>

7、<p> ?。?)創(chuàng)建目錄14</p><p>  (9)查看目錄14</p><p> ?。?0)改變當(dāng)前目錄14</p><p> ?。?1)退出系統(tǒng)15</p><p><b>  六.心得體會15</b></p><p><b>  (1)15</b&

8、gt;</p><p><b>  (2)15</b></p><p><b> ?。?)15</b></p><p><b> ?。?)15</b></p><p><b>  (5)15</b></p><p><

9、b>  一、課程設(shè)計的目的</b></p><p>  1、在內(nèi)存中開辟一個虛擬磁盤空間作為文件存儲器,在其上實現(xiàn)一個多用戶多目錄的文件系統(tǒng)。</p><p>  2、文件物理結(jié)構(gòu)可采用顯式鏈接或其他方法。</p><p>  3、磁盤空閑空間的管理可選擇位示圖或其他方法。如果采用位示圖來管理文件存儲空間,并采用顯式鏈接分配方式,則可以將位示圖合并

10、到FAT中。</p><p>  文件目錄結(jié)構(gòu)采用多用戶多級目錄結(jié)構(gòu),每個目錄項包含文件名、物理</p><p>  地址、長度等信息,還可以通過目錄項實現(xiàn)對文件的讀和寫的保護(hù)。</p><p>  設(shè)計一個較實用的用戶界面,方便用戶使用。要求提供以下相關(guān)文件操</p><p><b>  作:</b></p>

11、;<p> ?。?)具有l(wèi)ogin (用戶登錄);</p><p> ?。?)系統(tǒng)初始化(建文件卷、提供登錄模塊);</p><p>  (3)文件的創(chuàng)建: create;</p><p> ?。?)文件的打開:open;</p><p> ?。?)文件的讀:read;</p><p> ?。?)文件的寫

12、:write;</p><p> ?。?)文件關(guān)閉:close;</p><p>  (8)刪除文件:delete ;</p><p> ?。?)創(chuàng)建目錄(建立子目錄):mkdir;</p><p> ?。?0)改變當(dāng)前目錄:cd;</p><p> ?。?1)列出文件目錄:dir;</p><p&

13、gt; ?。?2)退出:logout。</p><p>  6、系統(tǒng)必須可實際演示,選用程序設(shè)計語言:C++、C等。</p><p><b>  二、實驗內(nèi)容與要求</b></p><p>  1.設(shè)計多用戶文件系統(tǒng),采用多級文件目錄。</p><p>  2.至少要有十個以上的實用命令,應(yīng)設(shè)置文件保護(hù)措施。</p

14、><p>  3.設(shè)計一個較實用的用戶界面,方便用戶使用,界面要為用戶提供足夠的選擇信息,不需用戶打入冗長的命令。</p><p><b>  三、設(shè)計步驟分析</b></p><p><b> ?。?)實現(xiàn)原理</b></p><p>  本程序是一個文件系統(tǒng)模擬程序,模擬文件管理的工作過程。<

15、/p><p>  本程序設(shè)計一個最多有10個用戶的文件系統(tǒng),實現(xiàn)文件系統(tǒng)的模擬管理過程,可以</p><p>  進(jìn)行創(chuàng)建用戶、創(chuàng)建文件、刪除文件、創(chuàng)建文件夾、刪除文件夾、讀文件、寫文件、執(zhí)行文件、打開文件、關(guān)閉文件、顯示目錄等操作。</p><p><b> ?。?)實現(xiàn)原理圖</b></p><p><b> 

16、?。?)程序執(zhí)行過程</b></p><p> ?。?)實現(xiàn)用到的數(shù)據(jù)結(jié)構(gòu)</p><p>  typedef enum //文件元素可供操作性權(quán)限</p><p><b>  { </b></p><p>  pub, //任何人可做任何操作 </p>

17、<p>  protect, //非創(chuàng)建者或管理員,只可以察看 </p><p>  pri //非創(chuàng)建者或管理員,不可以做任何操作 </p><p>  } FileAccess; </p><p>  //文件元素類型 </p><p>  typedef

18、 enum </p><p><b>  { </b></p><p>  file, //文件 </p><p>  dir //文件夾 </p><p>  } FileType; </p><p><b&g

19、t;  //用戶類型 </b></p><p>  typedef enum </p><p><b>  { </b></p><p>  administrator, //管理者,擁用所有權(quán)限 </p><p>  guest //一

20、般用戶 </p><p>  } UserType; </p><p><b>  //文件狀態(tài) </b></p><p>  typedef enum </p><p><b>  { </b></p><p>  closed, </p>

21、;<p>  opened, </p><p>  reading, </p><p>  writing </p><p>  } FileStatus; </p><p>  //一個文件索引結(jié)構(gòu) </p><p>  typedef struct </p>&

22、lt;p><b>  { </b></p><p>  unsigned Index; //文件元素索引編號 </p><p>  char FileName[NAME_LEN]; //文件元素名 </p><p>  char ParentName[NAME_LE

23、N]; //父節(jié)點(diǎn)名 </p><p>  unsigned FileBlockId; //文件元素所在物理塊編號 </p><p>  unsigned FileLevel; //文件元素所在層次,層+文件元素名為一個文件元素的邏輯位置 </p><p>  unsigned

24、 effect; //是否有效,0-無效,1-有效 </p><p>  } FileIndexElement; </p><p>  //文件索引結(jié)構(gòu)或目錄表項 </p><p>  typedef struct </p><p><b>  { </b><

25、;/p><p>  FileIndexElement *FIStart; //文件系統(tǒng)中的文件索引起始位置 </p><p>  unsigned FILen; //文件索引的最大長度 </p><p>  unsigned FICount; //文件索引數(shù)量 </p>

26、<p>  } FileIndex; </p><p>  //文件塊的結(jié)構(gòu) </p><p>  typedef struct fb </p><p><b>  { </b></p><p>  unsigned FileBlockId; //文件塊編號 </p&g

27、t;<p>  unsigned BLOCK_SIZE; //文件塊的容量 </p><p>  char *FileBlockAddr; //文件塊地址 </p><p>  struct fb *next; //下一個文件塊的地址 </p><p>  } FileBlock; &l

28、t;/p><p>  //文件系統(tǒng)的位示圖結(jié)構(gòu) </p><p>  typedef struct </p><p><b>  { </b></p><p>  unsigned BITMAP_LEN; //文件位示圖長度 </p><p>  char *BMSta

29、rt; //位示圖的起始指針 </p><p>  } BitMap; </p><p>  //文件系統(tǒng)結(jié)構(gòu) </p><p>  typedef struct </p><p><b>  { </b></p><p>  char *FSSta

30、rt; //文件系統(tǒng)的起始地址 </p><p>  unsigned SuperBlockSize; //文件系統(tǒng)的容量 </p><p>  BitMap bm; //文件系統(tǒng)中的位示圖 </p><p>  unsigned BLOCK_COUNT;

31、 //文件系統(tǒng)中文件塊的數(shù)量 </p><p>  FileBlock *head; //文件系統(tǒng)中文件塊首地址 </p><p>  FileIndex FI; //文件系統(tǒng)中的文件索引 </p><p>  } SuperBlock; </p><p&

32、gt;  typedef struct </p><p><b>  { </b></p><p>  char *UserName; //用戶名稱 </p><p>  UserType ut; //用戶類型 </p><p>  

33、} User; </p><p>  //文件系統(tǒng)中的元素結(jié)構(gòu),包括文件和文件夾 </p><p>  typedef struct fse </p><p><b>  { </b></p><p>  struct fse *parent; //指向自己的父親節(jié)點(diǎn)

34、</p><p>  unsigned FileLevel; //文件元素所在層次,層+文件元素名為一個文件元素的邏輯位置 </p><p>  char FileName[NAME_LEN]; //文件元素名 </p><p>  unsigned FileBlockId;

35、//文件元素所在物理塊編號 </p><p>  unsigned FileElemLen; //文件元素的長度 </p><p>  FileType Type; //文件元素類型 </p><p>  FileAccess Access; //文件

36、元素可供操作的權(quán)限 </p><p>  User Creator; //文件創(chuàng)建者 </p><p>  char CreateTime[18]; //創(chuàng)建時間,日期格式:MM/DD/YY HH:MI:SS </p><p>  char LastModTime[18];

37、 //最后一次修改時間 </p><p>  char *FileData; //一個文件的數(shù)據(jù)開始地址,文件夾時該值為NULL </p><p>  FileStatus fileStu; //如果是一個文件表示文件當(dāng)前的狀態(tài) </p><p>  } FSEle

38、ment; </p><p>  //系統(tǒng)當(dāng)前狀態(tài) </p><p>  typedef struct </p><p><b>  { </b></p><p>  User CurrentUser; //當(dāng)前用戶 </p><p>  unsig

39、ned FileLevel; //用戶所在文件系統(tǒng)層 </p><p>  FSElement *CurrParent; //當(dāng)前層的父節(jié)點(diǎn) </p><p>  char *CurrentPath; //當(dāng)前路徑 </p><p>  } CurrentStatus;</p>

40、;<p><b>  四.部分源代碼</b></p><p> ?。?)bool InitFileSys(); //尋找第一個空白的文件塊ID </p><p>  unsigned FindBlankFileBlockId() </p><p><b>  { </b></p>&

41、lt;p>  unsigned char c; </p><p>  for (unsigned i = 0; i < FS.bm.BITMAP_LEN / 8; i++) </p><p><b>  { </b></p><p>  c = FS.bm.BMStart[i] | 0x7F; </p>

42、<p>  if (c == 0x7F) </p><p><b>  { </b></p><p>  return i * 8; //一個字節(jié)左邊第一位為0,表示該區(qū)域未使用 </p><p><b>  } </b></p><p>  c = FS.b

43、m.BMStart[i] | 0xBF; </p><p>  if (c == 0xBF) </p><p><b>  { </b></p><p>  return i * 8 + 1; </p><p><b>  } </b></p>&l

44、t;p>  c = FS.bm.BMStart[i] | 0xDF; </p><p>  if (c == 0xDF) </p><p><b>  { </b></p><p>  return i * 8 + 2; </p><p><b>  } </b&g

45、t;</p><p>  c = FS.bm.BMStart[i] | 0xEF; </p><p>  if (c == 0xEF) </p><p><b>  { </b></p><p>  return i * 8 + 3; </p><p><b&g

46、t;  } </b></p><p>  c = FS.bm.BMStart[i] | 0xF7; </p><p>  if (c == 0xF7) </p><p><b>  { </b></p><p>  return i * 8 + 4; </p>

47、<p><b>  } </b></p><p>  c = FS.bm.BMStart[i] | 0xFB; </p><p>  if (c == 0xFB) </p><p><b>  { </b></p><p>  return i * 8 + 5;

48、 </p><p><b>  } </b></p><p>  c = FS.bm.BMStart[i] | 0xFD; </p><p>  if (c == 0xFD) </p><p><b>  { </b></p><p>  return

49、i * 8 + 6; </p><p><b>  } </b></p><p>  c = FS.bm.BMStart[i] | 0xFE; </p><p>  if (c == 0xFE) </p><p><b>  { </b></p>&l

50、t;p>  return i * 8 + 7; </p><p><b>  } </b></p><p><b>  } </b></p><p>  return BLOCK_COUNT + 1; </p><p><b>  } </b&

51、gt;</p><p> ?。?)char * FindBlankFileBlock(unsigned fileblockid) //尋找第一個文件塊地址 </p><p><b>  { </b></p><p>  FileBlock *fblock = FS.head; </p><p>  whil

52、e (fblock->next != NULL) </p><p><b>  { </b></p><p>  if (fblock->FileBlockId == fileblockid) </p><p><b>  { </b></p><p>  return

53、fblock->FileBlockAddr; </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  fblock = fblock->next;

54、</p><p><b>  } </b></p><p><b>  } </b></p><p>  return NULL; </p><p><b>  } </b></p><p> ?。?)void UpdateBitMap(

55、unsigned fileblockid) //計復(fù)所在位示圖的位置</p><p><b>  { </b></p><p>  int dirInBitmap = ((int)(fileblockid / 8)); </p><p>  int dirInChar = fileblockid % 8; </p>

56、<p>  char *c = &(FS.bm.BMStart[dirInBitmap]); </p><p>  char xor; </p><p>  switch (dirInChar) </p><p><b>  { </b></p><p>  case 0: &l

57、t;/p><p>  xor = 0x80; </p><p><b>  break; </b></p><p>  case 1: </p><p>  xor = 0x40; </p><p><b>  break; </b></p>&

58、lt;p>  case 2: </p><p>  xor = 0x20; </p><p><b>  break; </b></p><p>  case 3: </p><p>  xor = 0x10; </p><p><b>  break; &

59、lt;/b></p><p>  case 4: </p><p>  xor = 0x08; </p><p><b>  break; </b></p><p>  case 5: </p><p>  xor = 0x04; </p><p>

60、;<b>  break; </b></p><p>  case 6: </p><p>  xor = 0x02; </p><p><b>  break; </b></p><p>  case 7: </p><p>  xor = 0x01;

61、 </p><p><b>  break; </b></p><p><b>  } </b></p><p>  *c = *c ^ xor; </p><p><b>  } </b></p><p>  (4)bool Init

62、FileSys() //初始化模擬文件系統(tǒng) </p><p><b>  { </b></p><p>  if ((FS.FSStart = (char *)malloc(FILE_SYS_SIZE)) == NULL) </p><p><b>  { </b></p><p>

63、;  return false; </p><p><b>  } </b></p><p>  FS.SuperBlockSize = FILE_SYS_SIZE; </p><p>  FS.bm.BITMAP_LEN = BITMAP_LEN; </p><p>  FS.bm.BMS

64、tart = FS.FSStart; </p><p>  //設(shè)置位示圖為未使用 </p><p>  memset(FS.bm.BMStart, '\0', FS.bm.BITMAP_LEN); </p><p>  //初始化文件系統(tǒng)索引 </p><p>  FS.FI.FIStart = (FileI

65、ndexElement *)(FS.FSStart + BITMAP_LEN); </p><p>  //因為是模擬系統(tǒng),暫定一個文件或文件夾最多占用一個文件塊,一個文件塊只放一個文件元素 </p><p>  FS.FI.FILen = sizeof(FileIndexElement) * BLOCK_COUNT + sizeof(unsigned) * 2; &l

66、t;/p><p>  FS.FI.FICount = 0; </p><p>  memset(FS.FI.FIStart, '\0', FS.FI.FILen); </p><p>  //初始化文件塊 </p><p>  FS.BLOCK_COUNT = BLOCK_COUNT; </p>&l

67、t;p>  FS.head = CreateFileBlockList((FS.FSStart + FILE_SYS_SIZE - BLOCK_SIZE * </p><p>  BLOCK_COUNT), </p><p>  BLOCK_SIZE, FS.BLOCK_COUNT);//區(qū)域的后BLOCK_SIZE * BLOCK_COUNT個單元用來存儲數(shù)據(jù) </

68、p><p>  if (FS.head == NULL) </p><p><b>  { </b></p><p>  return false; </p><p><b>  } </b></p><p>  //初始化系統(tǒng)當(dāng)前狀態(tài) </p>

69、<p>  CS.CurrentUser.UserName = (char *)calloc(10,sizeof(char)); </p><p>  strcpy(CS.CurrentUser.UserName, "man"); </p><p>  CS.CurrentUser.ut = administrator; </p>

70、<p>  CS.CurrParent = NULL; </p><p>  CS.FileLevel = 0; </p><p>  CS.CurrentPath = (char *)calloc(1000, sizeof(char)); </p><p>  //創(chuàng)建一個根目錄 </p><p>  base =

71、 CreateFileElement(pub, "root", dir, NULL, NULL); </p><p>  if (base == NULL) </p><p><b>  { </b></p><p>  return false; </p><p><b>

72、  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  return true; </p><p><b>  } </b></p><p><

73、b>  } </b></p><p> ?。?)void FindCommKey(char *command, char *key, char *path) //命令分解 </p><p><b>  { </b></p><p>  for (unsigned i = 0; i < strlen(comma

74、nd); i++) </p><p><b>  { </b></p><p>  if (command[i] == ' ') </p><p><b>  { </b></p><p><b>  i++; </b></p>

75、<p>  if (i < strlen(command)) </p><p><b>  { </b></p><p>  strcpy(path, command + i); </p><p><b>  } </b></p><p><b>  

76、break; </b></p><p><b>  } </b></p><p>  if (i <= 9) </p><p><b>  { </b></p><p>  key[i] = command[i]; </p><p>&l

77、t;b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  for (unsigned j = i; j < strlen(command); j++) </p><p><b&

78、gt;  { </b></p><p>  if (command[j] != ' ') </p><p><b>  { </b></p><p>  strcpy(path, command + j); </p><p><b>  break; </b

79、></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  break; </b></p><p><b>  } </b></p><p><b&

80、gt;  } </b></p><p>  strlwr(key); </p><p>  strlwr(path); </p><p><b>  } </b></p><p>  (6)void Shell() //命令解釋模塊 </p><p><b&

81、gt;  { </b></p><p>  char command[COMMAND_LEN]; </p><p>  gets(command); </p><p>  char key[10]; </p><p>  char path[COMMAND_LEN - 10]; </p><

82、p>  while (true) </p><p><b>  { </b></p><p>  memset(key, '\0', 10); </p><p>  memset(path, '\0', COMMAND_LEN - 10); </p><p>  Fi

83、ndCommKey(command, key, path); </p><p>  unsigned i; </p><p>  for (i = 0; i < PRO_SET_COMM_COU; i++) </p><p><b>  { </b></p><p>  if (strcmp(ke

84、y, PRO_SET_COMM[i]) == 0) </p><p><b>  { </b></p><p><b>  break; </b></p><p><b>  } </b></p><p><b>  } </b><

85、;/p><p>  switch (i) </p><p><b>  { </b></p><p>  case 0: </p><p>  Create(path); </p><p><b>  break; </b></p>&

86、lt;p>  case 1: </p><p>  Open(path); </p><p><b>  break; </b></p><p>  case 2: </p><p>  Read(path); </p><p><b>  break; &

87、lt;/b></p><p>  case 3: </p><p>  Write(path); </p><p><b>  break; </b></p><p>  case 4: </p><p>  Close(path); </p><p&

88、gt;<b>  break; </b></p><p>  case 5: </p><p>  Delete(path); </p><p><b>  break; </b></p><p>  case 6: </p><p>  Mkdir(pa

89、th); </p><p><b>  break; </b></p><p>  case 7: </p><p>  Cd(path); </p><p><b>  break; </b></p><p>  case 8: </p>

90、<p>  Dir(path); </p><p><b>  break; </b></p><p>  case 9: </p><p>  //Logout </p><p><b>  break; </b></p><p>  de

91、fault: </p><p>  printf("\n命令錯誤。\n"); </p><p>  printf("%sC:%s", CS.CurrentUser.UserName, </p><p>  CS.CurrentPath); </p><p><b>  } &l

92、t;/b></p><p>  if (i == 9) </p><p><b>  { </b></p><p><b>  break; </b></p><p><b>  } </b></p><p>  gets(comm

93、and); </p><p><b>  } </b></p><p><b>  } </b></p><p>  五.執(zhí)行結(jié)果和結(jié)果分析</p><p> ?。?)初始化界面并登陸系統(tǒng)(登陸密碼:123)</p><p><b> ?。?)創(chuàng)建一個文

94、件</b></p><p><b>  (3)刪除文件</b></p><p><b> ?。?)打開文件</b></p><p><b> ?。?)關(guān)閉文件</b></p><p><b> ?。?)寫文件</b></p>&l

95、t;p><b> ?。?)讀文件</b></p><p><b> ?。?)創(chuàng)建目錄</b></p><p><b> ?。?)查看目錄</b></p><p> ?。?0)改變當(dāng)前目錄</p><p><b> ?。?1)退出系統(tǒng)</b></

96、p><p><b>  六.心得體會</b></p><p> ?。?)由于沒有做圖形化用戶界面,總的來說難度不大。因為不會用vc++做圖形界面,本想簡單的看一下《Virual C++圖形用戶開發(fā)指南》這本書,做一個簡單的界面,但到圖書館找到才發(fā)現(xiàn)這本書400頁厚,里面的東西看起來就好難,絕對不是一兩天能弄懂的,所以就沒有做圖形界面。而我只會用Java做簡單的圖形界面,J

97、ava的界面和c++的源程序暫時還是不知道怎么連上。</p><p> ?。?)覺得這個課程設(shè)計和前面的實驗4大同小異,有了實驗4的基礎(chǔ),花了大概兩天時間便做完了課程設(shè)計,完成了要求的基本功能。</p><p> ?。?)通過這次課程設(shè)計,加深了對操作系統(tǒng)文件管理的理解。在程序設(shè)計方面,進(jìn)一步鍛煉了自己的編程能力,增強(qiáng)了實踐和動手能力,使自己的編程能力和邏輯思考能力有了較大的進(jìn)步。<

溫馨提示

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

最新文檔

評論

0/150

提交評論