計算機操作系統(tǒng)課程設計_第1頁
計算機操作系統(tǒng)課程設計_第2頁
計算機操作系統(tǒng)課程設計_第3頁
計算機操作系統(tǒng)課程設計_第4頁
計算機操作系統(tǒng)課程設計_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、計算機操作系統(tǒng)課程設計班級:計091-1姓名:學號:使用語言:C+指導老師:學院:一、 系統(tǒng)要求1、實驗目的 通過一個簡單多用戶文件系統(tǒng)的設計,加深理解文件系統(tǒng)的內部功能及內部實現(xiàn)。2、實驗內容 為linux系統(tǒng)設計一個簡單的二級文件系統(tǒng)。要求做到以下幾點: (1)可以實現(xiàn)下列幾條命令(至少4條); login用戶登陸 dir 列文件目錄 create創(chuàng)建文件 delete刪除文件 open 打開文件 close關閉文件 read 讀文件 write寫文件 (2)列目錄時要列出文件名、物理地址、保護碼和文件長度; (3)源文件可以進行讀寫保護。二、系統(tǒng)分析1、設計思想本文件為二級文件系統(tǒng),即要

2、實現(xiàn)對文件的增刪改查,同時又具備登陸系統(tǒng)、注冊用戶的功能,各個用戶之間的文件系統(tǒng)互不干擾。本文件系統(tǒng)采用兩級目錄,其中第一級對應于用戶賬號,第二級對應于用戶帳號下的文件。另外,為了簡便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)安全以及管道文件與設備文件等特殊內容。系統(tǒng)采用結構體來存儲用戶、文件目錄、文件數(shù)據(jù)內容:0 48*5 48*5+44*50 48*5+44*50+264*200文件數(shù)據(jù)區(qū)文件目錄區(qū)用戶區(qū)每個分區(qū)都是由結構體組成,每個個去的結構體的個數(shù)由格式化系統(tǒng)是決定。整個系統(tǒng)的編碼構成主要分為:Allstruct.h 定義了每個分區(qū)的結構體;Mysys.h 聲明了對系統(tǒng)操作的各種方法;Myuse

3、rfile.h 聲明了對文件操作的各種方法;Mymain.cpp 整個系統(tǒng)的主函數(shù),操作入口;Mysys.cpp 包含了mysys.h,實現(xiàn)了操作系統(tǒng)的各種方法;Myuserfile.cpp 包含了myuserfile.h,實現(xiàn)了操作文件的各種方法;2、主要數(shù)據(jù)結構Allstruct.h文件的內容:struct s_user /用戶區(qū)結構體long isuse; /是否使用char name20; /用戶名char psd20; /密碼long address; /目錄地址;struct s_list /目錄結構體long isuse; /是否使用char name20; /文件名字long

4、myaddress; /本條目錄地址long pointaddress; /指向的文件的地址long isfile; /是否鎖定long pointsize; /目標文件的大小long nextaddress; /下條目錄的地址;struct s_file /文件結構體long isuse; /是否使用char content256; /文件內容long next; /下個文件塊地址;三、 系統(tǒng)執(zhí)行1、 如果首次進入系統(tǒng),還沒有文件系統(tǒng),則會提示格式化文件系統(tǒng),創(chuàng)建分區(qū),并初始化分區(qū):2、剛初始化后,沒有用戶,提示創(chuàng)建用戶:3、用戶創(chuàng)建成功后出現(xiàn)對系統(tǒng)操作的菜單 4、注冊用戶功能:5、用戶登錄

5、,登錄成功后顯示當前用戶下的所有文件及其詳細信息,同時顯示對文件操作的菜單: 6、新注冊的用戶默認為沒有文件,選擇創(chuàng)建文件,并且每次對文件操作后顯示當前用戶的所有文件和操作菜單:7、此次新建的文件為鎖定狀態(tài),不能被刪除:8、對文件查看,默認創(chuàng)建的時候用0填充文件內容: 9、修改文件內容: 10、對文件的鎖定進行裝換: 11、刪除文件: 12、注銷登錄退出系統(tǒng):四、 功能實現(xiàn)Mysys.h#include <stdio.h>#include "myuserfile.h"class MSysterm /封裝了管理系統(tǒng)的方法/成員變量private:FILE *myf

6、ile;MUser myuser;/成員函數(shù)public:MSysterm()void outName(); /打印登陸后的用戶名int cheack(); /檢查虛擬文件系統(tǒng)跟是否存在int myformat(); /初始化虛擬磁盤int createuser(); /創(chuàng)建用戶int login(); /用戶登錄void mymain(); /主控制程序int logout(); /用戶注銷;Myuserfile.h#include <stdio.h>class MUser /封裝了管理文件的方法 /成員變量public:FILE *myfile;char name20; /用戶

7、名char psd20; /密碼long listaddress; /目錄地址long myaddress; /此用戶的地址private:long lastaddress; /最后一個目錄的地址/成員函數(shù)public:int createFile(); /增加文件int delFile(char filename20);/刪除文件int revampFile(char filename20);/修改文件int mydir(); /列出當前目錄的所有文件(夾)int viewFile(char filename20);/查看文件int myConversion(char filename20)

8、;/轉換是否鎖定狀態(tài)private:int isSame(char filename_f20,char filename_s20);Mymain.cpp#include <stdio.h>#include <iostream>#include "mysys.h"#include <limits>using namespace std;int main()char nod1;int n_select = 2 , i_1 =0;MSysterm mysys;/*文件不存在的程序入口*/if(mysys.cheack()=-1)/磁盤空間不存在

9、cout<<"虛擬磁盤文件不存在,是否生成? Y/N "<<endl;cin>>nod1;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流if(nod1='Y'|nod1='y')cout<<"正在創(chuàng)建。"<<endl;if(mysys.myformat()!=1)/創(chuàng)建磁盤空間cout<<"創(chuàng)建磁盤空間

10、失?。〖磳⑼顺?。"<<endl;cin>>nod1;return 2;cout<<"創(chuàng)建完成!是否創(chuàng)建用戶? Y/N "<<endl;cin>>nod1;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流if(nod1='Y'|nod1='y')if(mysys.createuser()=1)/創(chuàng)建用戶cout<<"

11、創(chuàng)建用戶成功。"<<endl;elsecout<<"創(chuàng)建用戶失??!即將退出。"<<endl;return 3;elsecout<<"匿名用戶無法進入系統(tǒng),正在退出。"<<endl;return 4;elsecout<<"程序已結束!按任意鍵退出。"<<endl;return 1;/*文件存在的程序入口*/for (;)cout<<"*"<<endl;cout<<"請選擇:&qu

12、ot;<<endl;cout<<" 1. 登錄"<<endl<<" 2. 注冊"<<endl<<" 3. 退出"<<endl;cout<<"*"<<endl;cin>>n_select;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流if (n_select

13、= 1)for (int i_1=0;i_1<=3;i_1+)/登錄if (mysys.login()=1)cout<<"登陸成功!歡迎您 "mysys.outName();break;elsecout<<"用戶名不存在或密碼錯誤!"<<endl;if (i_1=4)cout<<"非法用戶!"<<endl<<"輸入任意鍵退出。"<<endl;cin>>nod1;return 5;break;if (n_select

14、 = 2)if(mysys.createuser()=1)/創(chuàng)建用戶cout<<"創(chuàng)建用戶成功。"<<endl;elsecout<<"創(chuàng)建用戶失??!"<<endl;if (n_select = 3)return 6;mysys.mymain();return 0;Mysys.cpp#include "mysys.h"#include "allstruct.h"#include <iostream>#include <stdio.h>#inclu

15、de <limits>/用于清除殘留的輸入流using namespace std;int MSysterm:cheack()/檢查虛擬空間是否存在myfile=fopen("test1.txt","r");if(myfile=NULL)return -1;/返回-1,代表文件不存在fclose(myfile);return 1;int MSysterm:myformat()int i =1;myfile=fopen("test1.txt","w");if(myfile=NULL)return -1;s

16、_user ms_user;ms_user.isuse=0;s_list ms_list;ms_list.isuse=0;s_file ms_file;ms_file.isuse=0;for (i =1 ; i<=5 ; i+)if(fwrite(&ms_user,sizeof(ms_user),1,myfile)!=1)/用戶區(qū)格式化cout<<"用戶格式信息寫入失??!"<<endl;fclose(myfile);return -2;for (i = 1; i<=50 ;i+)if(fwrite(&ms_list,siz

17、eof(ms_list),1,myfile)!=1)/目錄區(qū)格式化cout<<"目錄格式信息寫入失敗!"<<endl;fclose(myfile);return -3;for (i=0;i<=199;i+)if(fwrite(&ms_file,sizeof(ms_file),1,myfile)!=1)/數(shù)據(jù)區(qū)格式化cout<<"數(shù)據(jù)格式信息寫入失??!"<<endl;fclose(myfile);return -4;fclose(myfile);return 1;int MSysterm:cre

18、ateuser()/創(chuàng)建用戶s_user ms_user,ms_user2;int nowaddress = 0 ,issame=0 ,m=0 , i =1 ;/記錄當前的掃描指針,密碼比對標志位,循環(huán)使用的變量cout<<"正在檢查用戶空間是否足夠。"<<endl;myfile=fopen("test1.txt","r");for (i=1;i<=5;i+,fseek(myfile,44,1),nowaddress+)/檢查用戶空間是否足夠if (fread(&ms_user2.isuse,4,

19、1,myfile)=0)cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);return -1;if (ms_user2.isuse=0)break;if (i=6)cout<<"用戶空間已滿!創(chuàng)建用戶失敗"<<endl;return -2;for (;)cout<<"請輸入新用戶的用戶名:"<<endl;cin>>ms_;cin.clear(); / 清除流的錯誤標記cin.i

20、gnore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流fseek(myfile,0,0);for (i=1;i<=5;i+)/檢查用戶名if (fread(&ms_user2.isuse,4,1,myfile)=0 )/找到被使用的用戶區(qū),下一步讀取名字cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);return -1;if (ms_user2.isuse=0)fseek(myfile,44,1);e

21、lseif (fread(&ms_,20,1,myfile)=0)/讀取用戶區(qū)的名字cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);return -1;for (m =0 ;m<=19;m+)if (ms_m != ms_m)issame = 0;break;elseissame = 1;if (ms_m = '0')break;if (issame = 1)cout<<&q

22、uot;用戶名重復!請重新輸入:"<<endl;break;fseek(myfile,24,1);if (i>=6)for (;)/輸入密碼cout<<"請輸入密碼,最多19位。"<<endl;cin>>ms_user.psd;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流cout<<"請再次輸入密碼:"<<endl;cin&g

23、t;>ms_user2.psd;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流for (m =0 ;m<=19;m+)if (ms_user.psdm != ms_user2.psdm)issame = 0;cout<<"兩次密碼不匹配"<<' '<<ms_user.psd<<" "<<ms_user2.psd<<&

24、quot; "<<m<<endl;break;elseissame = 1;if (ms_user.psdm = '0')break;if (issame = 1)break;cout<<"進入存儲。"<<endl;ms_user.isuse =1;/空間使用置為 使用(1);ms_user.address = 0;/默認不存在目錄fclose(myfile);myfile=fopen("test1.txt","r+");fseek(myfile,48*nowa

25、ddress,0);if(fwrite(&ms_user,sizeof(ms_user),1,myfile) = 0)cout<<"寫入用戶信息失?。?quot;<<endl;elsebreak;fclose(myfile);return 1;int MSysterm:login()/用戶登錄s_user ms_user,ms_user2;int issame = 0, m = 0 , i =0 ;/比較標記,循環(huán)使用的變量cout<<"請輸入用戶名:"<<endl;cin>>ms_user.na

26、me;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流myfile=fopen("test1.txt","r");for (i = 1;i<=5;i+)if (fread(&ms_user2.isuse,4,1,myfile)=0)/讀取被使用的用戶區(qū)cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);r

27、eturn -1;if (ms_user2.isuse=0)fseek(myfile,44,1);continue;elseif (fread(&ms_,20,1,myfile)=0)/讀取名字cout<<"讀取用戶空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);return -1;for (m =0 ;m<=19;m+)if (ms_m != ms_m)issame = 0;break;elseissame = 1;if (ms_user.

28、namem = '0')break;if (issame = 1)if (fread(&ms_user2.psd,20,1,myfile)=0)/讀取密碼cout<<"讀取密碼失敗!磁盤錯誤。"<<endl;fclose(myfile);return -1;for (int k=0;k<=2;k+)cout<<"請輸入密碼:"<<endl;cin>>ms_user.psd;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limit

29、s<streamsize>:max(),'n'); / 清空輸入流for (m =0 ;m<=19;m+)if (ms_user.psdm != ms_user2.psdm)issame = 0;break;elseissame = 1;if (ms_user.psdm = '0')break;if (issame = 0)cout<<"密碼錯誤,請重新輸入。"<<endl;elseif (fread(&ms_user2.address,4,1,myfile)=0)/讀取目錄地址cout<

30、;<"讀取目錄失敗!磁盤錯誤。"<<endl;fclose(myfile);return -1;for (m=0;m<=19;m+)/對對象 myuser 賦值m = ms_m;myuser.psdm = ms_user2.psdm;myuser.listaddress = ms_user2.address;myuser.myaddress = (i-1)*48;fclose(myfile);return 1;/返回登錄成功fclose(myfile);return -2;/密碼錯誤fseek(myfile,

31、24,1);fclose(myfile);return -1;void MSysterm:mymain()/主控制程序int m_point=9,myget=0;/記錄使用第幾層控制臺,接收函數(shù)返回值char m_name120,m_name220;for (;)if(m_point = 0)myget=logout();break;cout<<endl<<"*"<<endl;cout<<"當前目錄下的文件:"<<endl;myget = myuser.mydir();cout<<&

32、quot;*"<<endl;cout<<"*"<<endl;cout<<"請輸入您的選擇:"<<endl;cout<<" 1.查看文件內容"<<endl;cout<<" 2.新建文件"<<endl;cout<<" 3.刪除文件"<<endl;cout<<" 4.修改文件"<<endl;cout<<&q

33、uot; 5.是否鎖定狀態(tài)轉換"<<endl;cout<<" 0.注銷,退出程序"<<endl;cout<<"*"<<endl;cin>>m_point;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流switch (m_point)case 1:if (myuser.listaddress = 0)cout<<"

34、您還沒有創(chuàng)建文件!"<<endl;break;cout<<"請輸入要查看的文件的名字:(僅限當前目錄)"<<endl;cin>>m_name1;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流myget = myuser.viewFile(m_name1);switch (myget)case 1:cout<<"文件查看成功!"<<en

35、dl;break;case -1:cout<<"磁盤打開失敗!"<<endl;break;case -2:cout<<"文件不存在!"<<endl;break;default:break;break;/case 1 文件打開case 2:myget = myuser.createFile();switch (myget)case 1:cout<<"創(chuàng)建成功!"<<endl;break;case -1:cout<<"磁盤打開失??!"&

36、lt;<endl;break;case -2:cout<<"目錄空間已滿!"<<endl;break;case -3:cout<<"數(shù)據(jù)空間已滿!"<<endl;break;case -4:cout<<"文件名已存在!"<<endl;break;default:/cout<<"創(chuàng)建文件失敗,原因未知!"<<endl;break;break;/case 2 新建文件case 3:if (myuser.listaddr

37、ess = 0)cout<<"您還沒有創(chuàng)建文件!"<<endl;break;cout<<"請輸入要刪除的文件的名字:(僅限當前目錄)"<<endl;cin>>m_name1;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流myget = myuser.delFile(m_name1);switch (myget)case 1:cout<<&quo

38、t;文件刪除成功!"<<endl;break;case -1:cout<<"磁盤打開失??!"<<endl;break;case -2:cout<<"文件不存在!"<<endl;break;case -4:cout<<"文件鎖定!不能刪除!"<<endl;break;default:cout<<"未知原因,刪除失??!"<<endl;break;break;/case 3 刪除文件case 4:if (

39、myuser.listaddress = 0)cout<<"您還沒有創(chuàng)建文件!"<<endl;break;cout<<"請輸入要修改的文件的名字:(僅限當前目錄)"<<endl;cin>>m_name1;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流myget = myuser.revampFile(m_name1);switch (myget)case

40、1:cout<<"文件修改成功!"<<endl;break;case -1:cout<<"磁盤打開失??!"<<endl;break;case -2:cout<<"文件不存在!"<<endl;break;case -4:/cout<<"文件鎖定!無法修改!"<<endl;break;case -5:cout<<"輸入內容過多!無法修改!"<<endl;break;default:

41、/cout<<"未知原因,修改失??!"<<endl;break;break;/case 4 修改文件case 5:if (myuser.listaddress = 0)cout<<"您還沒有創(chuàng)建文件!"<<endl;break;cout<<"請輸入要轉換是否鎖定的文件的名字:(僅限當前目錄)"<<endl;cin>>m_name1;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsiz

42、e>:max(),'n'); / 清空輸入流myget = myuser.myConversion(m_name1);switch (myget)case 0:cout<<"文件已轉換為 鎖定!"<<endl;break;case 1:cout<<"文件已轉換為 自由讀寫!"<<endl;break;case -1:cout<<"磁盤打開失?。?quot;<<endl;break;case -2:cout<<"文件不存在!&quo

43、t;<<endl;break;default:cout<<"未知原因,修改失??!"<<endl;break;break;/case 5 轉換是否鎖定狀態(tài)default:break;/switchint MSysterm:logout()/用戶注銷char word20 = '0'for (int i = 0 ; i<=19 ; i+)i = wordi;myuser.psdi = wordi;fclose(myfile);cout<<"已注銷!"<<e

44、ndl;return 1;void MSysterm:outName()/打印登陸后的用戶名cout<<<<endl;Myuserfile.cpp#include <iostream>#include <stdio.h>#include <iomanip>#include <limits>/用于清除殘留的輸入流#include "myuserfile.h"#include "allstruct.h"using namespace std;int MUser:cr

45、eateFile()/增加文件s_list ms_list;s_file ms_file;long nowaddress =0 ,f_address10, num_char = 0 ;/目錄循環(huán)記錄變量,數(shù)據(jù)塊地址變量組,字符個數(shù)(文件大小)int f_ad_num = 0 , myerr = 0 ,i = 1; /寫入的塊數(shù),是否在最終寫入時失敗(失敗置1)char f_name20 = ' ',m='0',e='0',f_islock;long old_lastaddress = lastaddress ;/上一個目錄地址(用于出錯回滾)my

46、file=fopen("test1.txt","r+");if (myfile = NULL) cout<<"讀取磁盤失??!"<<endl;fclose(myfile);return -1;fseek(myfile,48*5,0);/文件指針跳到目錄區(qū)for (i=1;i<=50;i+,fseek(myfile,40,1),nowaddress+)/檢查目錄空間是否足夠if (fread(&ms_list.isuse,4,1,myfile)=0)/讀取是否使用cout<<"讀

47、取目錄空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);return -1;if (ms_list.isuse=0)/如果讀取到未使用則跳出檢測break;if (i=51)cout<<"目錄空間已滿!創(chuàng)建文件失敗"<<endl;fclose(myfile);return -2;fseek(myfile,48*5+44*50,0);/文件指針跳到數(shù)據(jù)區(qū)for (i=1;i<=200;i+,fseek(myfile,260,1)/檢查數(shù)據(jù)空間是否足夠(初步檢查)if (fread(&

48、;ms_file.isuse,4,1,myfile)=0)/讀取是否使用cout<<"讀取數(shù)據(jù)空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fclose(myfile);return -1;if (ms_file.isuse=0)/如果有空白的數(shù)據(jù)塊則跳出break;if (i=201)cout<<"數(shù)據(jù)空間已滿!創(chuàng)建文件失敗"<<endl;fclose(myfile);return -2;cout<<"請輸入文件名(字母和數(shù)字,最多19個字符):"<<

49、endl;cin>>f_name;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流fseek(myfile,48*5,0);/文件指針跳到目錄區(qū)for (i=1;i<=50;i+)/檢查文件名是否被使用if (fread(&ms_list,sizeof(ms_list),1,myfile)=0)/讀取目錄cout<<"讀取目錄空間失敗,虛擬磁盤格式錯誤,可能已被損壞"<<endl;fcl

50、ose(myfile);return -1;if (ms_list.isuse = 1)/如果讀取到未使用則跳出檢測if( isSame(f_name,ms_) = 1)fclose(myfile);return -4; for (;)cout<<"文件由多少個字符 m 組成 ? (必須小于2550個字符)"<<endl;cin>>num_char;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n');

51、/ 清空輸入流if (num_char <= 2550)break;cout<<"文件長度必須小于2550個字符。"<<endl;ms_list.pointsize = num_char;cout<<"文件是否鎖定? y 鎖定 / n(或其他) 自由讀寫"<<endl;/確定是否鎖定cin>>f_islock;cin.clear(); / 清除流的錯誤標記cin.ignore(numeric_limits<streamsize>:max(),'n'); / 清空輸入流if( f_islock = 

溫馨提示

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

最新文檔

評論

0/150

提交評論