多用户多级目录文件系统的实现课程设计_第1页
多用户多级目录文件系统的实现课程设计_第2页
多用户多级目录文件系统的实现课程设计_第3页
多用户多级目录文件系统的实现课程设计_第4页
多用户多级目录文件系统的实现课程设计_第5页
免费预览已结束,剩余40页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多用户多级目录文件系统的实现课程设计课程设计课程名称_操作系统_题目名称多用户多级目录文件系统的实现_学生学院_计算机学院_文件管理系统一.设计目的:编写并调试一个树型目录结构的文件系统, 模 拟文件管理工作流程。二.设计要求:1.设计多用户文件系统,采用多级文件目 录。2.至少要有十个以上的实用命令,应设置 文件保护措施。3.设计一个较实用的用户界面, 方便用户 使用,界面要为用户提供足够的选择信息, 不需用户打入冗长的命令。三.设计内容本程序设计了一个树形目录结构的文件管理 系统,初始化系统默认根目录为root,根目录下 为11个用户的注册目录, 包括一个超级用户su和十个普通用户stud

2、OIstudio,初始化的树形 分支结构如下:初始化后各个用户注册目录下均为空, 用户可 进行创建编辑文件,显示文件内容,删除文件,复制文件,粘贴文件,创建目录,删除目录,更 改工作目录,显示当前工作目录的全路径,显示 当前目录下的全部内容,寻求帮助及用户切换等 操作,当只有目录可以为分支节点创建其目录下 的子目录或者文件(这里指的文件为除目录外的 终端文件),也可以为叶子节点以待必要的时候 在其目录下创建子目录或者文件使其成为分支 节点,而文件只能是叶子节点。程序运行时要求输入用户名及其密码, 初始化 时su和studOIstudio相应的密码分别为su, 01stud,02stud,03s

3、tud,04stud,05stud,06stud,07stud,08stud, 09stud, 1Ostud,系统将验证 输入的用户名及其密码,并提示是否输入正确, 错误要求重新输入。用户密码只有超级用户su才能更改, 普通用户没有权限进行此操作。登录 后系统在每个命令提示符前加【用户名】 ,表示 当前的登录用户,若登录用户为su时,命令提 示符为#符号,若为普通用户, 命令提示符为$符号,而且工作目录也指向当前登录用户的注册目 录下。而只有登录用户为su时才可以访问根目 录及其所有sustud01stud02 stud03 stud04 stud05 stud06 stud07 stud08

4、 stud09stud10用户的注册目录下的所有目录以及 文件,登录用户为普通用户时只能访问根目录以 及当前用户注册目录下的所有子目录和文件, 如 当前用户为studOI,就无权访问su以及stud02st u d 1 0目录下及其目录下的所有子目录和文件。 进入系统后, 根据系统各命令的功能进行相应的操作,系统所有的命令参数及其功能如下:su,stud01,stud02,stud03,stud04,stud05,stud06, stud07, stud08, stud09, studlO:输入 用户名进行用户切换, 输入用户名后系统会要求 输入用户密码, 只有输入正确, 用户切换才能成 功;

5、pwd:显示当前工作目录的全路径名;Is:列出当前目录下的内容,包括所有子目 录以及文件,列出时在目录名后面标记“/”,在 终端文件后面标记“*”;mkdir:在当前目录下建立子目录,输入此 命令后,系统提示“directory name:,要求输 入要建立的子目录名,倘若当前目录下已经存在 同名子目录,系统会提示“directory aIready exist;rmdir:删除当前目录下已经存在的子目录, 输入此命令后,系统提示“directory name:,即输入要删除的子目录名,倘若你要删除的子目 录在当前目录下不存在, 系统提示“directory not exist”;vi:在当前

6、目录下建立编辑文件,输入此命令 后,系统提示“file name:,要求输入要编辑的 文件名, 倘若当前目录下已经存在该文件,系统 会显示该文件内容, 进入编辑界面, 若当前目录 下没有该文件创建进入编辑界面;vi编辑状态下,提示符为“:,编辑命令及其 功能为:i-进行文本行的输入,系统提示输入要输入文本的行,若该行已存在则清空重新等 待输入;d删除指定的行,系统提示“linenum:,输入行数进行删除;list-显示当前编辑文本的内容;wq对文本修改进行存储并退出, 系统同时提示“Now saving the file!Pressany key and exit.;cat:显示当前目录下文件

7、的内容,输入此命 令后,系统提示file name:,倘若你要查看的 文件不在当前目录下,系统提示“file not exist;rm:删除当前目录下已经存在的文件, 输 入此命令后,系统提示“file name:,倘若你要 删除的文件不在当前目录下,系统提示“file not exist;cd:改变当前目录,输入此命令后,系统提示“directory name or symbol”:,要求输入子目录 名字或者父目录标识, 当输入子目录名时, 若存 在,当前的工作目录会改到子目录,若不存在, 系统提示“subdirectory not exist!,当输入“.” 时,当前目录会返回到上一级父目

8、录, 若当前目 录已经是根目录,系统会提示“That is already root directory!,当输入“/”,工作目录返回到 根目录root,当输入.,当前的工作目录保持 不变,当输入“ ,即直接按回车而不输入任何 字符,工作目录将返回用户注册目录下;cp:复制文件内容到缓冲区以备粘贴,输入 此命令后,系统提示file name:,倘若你要复 制的文件不在当前目录下,系统提示“file not exist;paste创建新的文件并将缓冲区的内容写进 或者用缓冲区的内容覆盖已存在文件的内容, 输 入此命令后,系统提示“file name:,若当前目 录下不存在此文件,则创建并写将缓冲

9、区的内 容,若存在,系统提示“File already exist!Cover it or not?y/n:,输入y或Y覆盖原有文件,输 入n或N拒绝此操作。chpw:在超级用户状态下更改用户密码, 如 当前用户不为SU运行此命令,系统会提示“You have noright to change user password!help:查看系统命令参数的功能;exit:退出文件管理系统。四.程序运行举例程序运行时,当输入用户名SU和密码SU后 系统提示登录成功,按任意键进入文件管理界 面。M-MM MMMM FI LE MANAGE SVSTMWuser=supassword -suSuccee

10、d in loggingf on?Press 曰曰 ny key and enter .R H R.B进入用户操作界面后,由于当前的用户为SU,故命令提示符为#,提示符前也会显示当前用户 名,输入pwd确定当前的工作目录, 登录后系 统默认目录为用户注册目录/root/su。m, n xLsuittpwd rootzsusultt在当前目录下创建新的目录chaoyang和新的 文件QQ,并编辑文件QQ,最后用wq保存并 退出,用Is命令查看当前目录下的所有内容,目 录名的后缀为/,文件为*。su Jttpud /root/sudirectnry name:chaoyangsulttviFile

11、 name:i linenun;H 0 : Hello,1 =:uqNou sau ing the f ile?Press any hep and ex it.sulttlsQQ*chaoi/ang/sul#当输入命令为copy时,系统提示“command notfound,即不存在此命令参数,当输入cp而输入要复制的文件名为chaoyang系统提示要复制的文件不存在file not exist,随后复制 文件QQ并粘贴创建新的文件ye,用cat命令查看文件内容,可确定复制成功用Is查看当前目录下的全部内容并用rm命令删除文件QQ,用Is确定是否已删除该文件进行工作目录更改,运行命令cd,根据

12、提示“directory name or symbo:”输入chaoyang进入chaoyang目录下,用pwd查看目录路径确 认,用cd加标志/返回根目录,用cd返回用户 注册目录下。sulttlsye* cbaoyah/ sulttcddirectoip netmeDI* sj/tiboliehAopang sujttpud/rootzsu/chaoAhgsuttcddirectory nameOPsymbff1:/Esulttpwl/rootsulttcddirectory naneDFsmba1:sulttpud/l-DOtZSUsutt用命令cd加标识“.”返回当前工作目录的上 一级

13、目录口/root/su返回到/root,在根目录下用cd命令,根据要求输入用户名进入该用户的注 册目录访问, 若当前的登录用户不为超级用户,无权访问其他用户的注册目录及其以下所有内 容。田-nl x|directory name rjr synboi:/ |suHpuct bKDOtsuJUcdnipectDi name 01* sdssuai*d:HZucm$返回工作目录到根目录下,进行创建目录,创建文件,删除目录,删除文件,系统会警告“Dontallow this operation in root directory”,在根目 录下不允许这些操作,即使在超级用户下也不 行。(U_ n x

14、?u#stud01password:01IstudeiJ$cddipectori/ nane or snhol:/gtud31J$pud /l*DQtwtudl $n)ldirDonJt nllou this dperat ion IstudBl $uirB)onJtbllovthisopeiatiunCstud01 $FFidirDon111AIIOUthis optration (stud31J$rnrDon111 Allow this optrac ion studBlli运行help参看命令参数及其功能root divectory* rootori|F Is:display all s

15、ubdirectory and f ile und rectory name: nkdii-create a subdirectory! undercurrent riiidirsde lete a subdirectory undei* cinf*reiit y iCreate aFile under current directory and edit ; rm:ci*eate a file undercurrent directory; cat:display file content; pp:copy f ile contentinto buff er and saue ; pstec

16、reat a file aod ouerwrite with bmffei* content; cd:ciDose the path and enter inta subdurectoriFor parent directory, forvhen system requests to input the subdirectory naiineOFpaient directory synbol, if you input subdirectory nane,cuppent directory will point to the ubdiFector if you. input * current

17、directory will poInt to father diicctori, if you input /, current directory will point to Foot directory, if srau inmit . ,curi*ent directorwill not alter, if input no thin gf and enter, curient directory will po int to registered user directory;he Ip - if |ou hau any doubtsinput he Ip and seek syst

18、em he Ip exit-end the f ile system operation五.设计思想创建节点的结构属性为:struct nodechar name256;/*节点名称*/ char code256;/*若节点为用户注册目录,保 存相应的用户密码*/int attribute;/*attribute为1时表示节点为目 录,为0表示节点为文件*/struct node *parent,*firstchild,*nextsibling;/*定义双亲节点,孩子节点,兄弟节点*/struct line *start,*last;*p;/*定义节点的结构属性*/指针p时刻指向当前的工作目录

19、,fistchild指向节点的第一个孩子,nextsibling链接相邻的 节点以便进行访问。文件以及目录的创建,查看,复制,粘贴, 删or F i le ;denotes file name,symbol / denotes didirectory;directoFi/;除等所有操作都是基于结构体以及链表的操 作,同时编辑文件的操作也是采用链表对编辑内 容进行记忆,所以所有操作并不是实际的磁盘操 作,只有程序运行完才释放所有的内存空间。 因 此只要程序运行完重新运行, 原先在初始化目录 下进行的相关操作结果都不会存在, 这也是该程 序局限性所在,有待改善。六 程 序运行环境本程序是在Turb

20、oc2.0下设计和调试的,设计 语言为C语言。七 设计感悟在熟悉unix文件系统结构的基础上, 通过 所学的C语言和数据结构知识设计此文件管理 系统,深化了自己对C语言以及链表结构体等 数据结构的理解和应用, 同时加深了对操作系统 之文件系统中文件和目录相关操作与内存磁盘 分配和释放的关系。八 源程序及其注释#includestring.h#includestdio.h #includestdlib.h#includemath.h#includeconio.h#define getnode(type)(type*)malloc(sizeof(type)char sign;/*命令提示符*/ch

21、ar title256;/*当前用户名*/int num=255;int symbol=0;int show=0;char str256;struct linechar text81;int num; /*行号*/struct line *next;/*指向下一个输入项目的指 针*/struct line *prior;/*指向前一项目的指针*/;/*定义文件编辑行的结构属性*/struct line *start;/*指向表中第一项目的指针*/struct line *last;/*指向表中最后一个项目的指针*/struct line *begin;/*指向缓冲区第一项目的指针*/struc

22、t line *end;/*指向缓冲区最后一个项目的指针*/struct line *find(),*dls_store(); struct nodechar name256;/*节点名称*/char code256;/*若节点为用户注册目录,保存 相应的用户密码*/int attribute;/*attribute为1时表示节点为目录,为0表示节点为文件*/struct node *parent,*firstchild,*nextsibling;/*定 义双亲节点,孩子节点,兄弟节点*/struct line *start,*last;*p;/*定义节点的结构属性*/ typedef str

23、uct nodeNODE; NODE*root,*g,*su,*user1,*user2,*user3,*user4,*user5 ,*user6,*user7,*user8,*user9,*user10;main()p=getnode(NODE); initialization();entry();while(symbol=0)clrscr();entry(); clrscr();printf(%s%c,title,sign);while(num!=0)gets(str);operation();switch(num)case1:pwd();printf(n%s%c,title,sign);

24、num=255 ;break;case2:ls();printf(n%s%c,title,sign);num=255;br eak;case3:mkdir();printf(n%s%c,title,sign);num=255;break;case4:cd();printf(n%s%c,title,sign);num=255;break;case5:vi();printf(n%s%c,title,sign);num=255;br eak;case6:rm();printf(n%s%c,title,sign);num=255;break;case7:rmdir();printf(n%s%c,tit

25、le,sign);num=255;break;case8:help();printf(n%s%c,title,sign);num=255 ;break;case9:cat();printf(n%s%c,title,sign);num=255;break;case10:change();printf(n%s%c,title,sign);num=255;break;case11:copy();printf(n%s%c,title,sign);num=255;break;case12:paste();printf(n%s%c,title,sign);num=255;break;case13:chpw

26、();printf(n%s%c,title,sign);num=255;break;default:printf(ncommand notfoundn%s%c,title,sign);initialization()/*初始化根目录和用户目录*/root=getnode(NODE); strcpy(root-name,root);root-attribute=1; root-parent=NULL;user10=getnode(NODE);strcpy(user10-name,stud10);strcpy(user10-code,10stud);user10-attribute=1; user

27、10-parent=root;user10-firstchild=NULL;user10-nextsibling=NULL;user9=getnode(NODE);strcpy(user9-name,stud09);strcpy(user9-code,09stud);user9-attribute=1;user9-parent=root;user9-firstchild=NULL;user9-nextsibling=user10;user8=getnode(NODE);strcpy(user8-name,stud08);strcpy(user8-code,08stud);user8-attri

28、bute=1;user8-parent=root;user8-firstchild=NULL;user8-nextsibling=user9; user7=getnode(NODE);strcpy(user7-name,stud07);strcpy(user7-code,07stud);user7-attribute=1;user7-parent=root;user7-firstchild=NULL;user7-nextsibling=user8; user6=getnode(NODE);strcpy(user6-name,stud06);strcpy(user6-code,06stud);u

29、ser6-attribute=1;user6-parent=root;user6-firstchild=NULL;user6-nextsibling=user7; user5=getnode(NODE);strcpy(user5-name,stud05);strcpy(user5-code,05stud);user5-attribute=1;user5-parent=root;user5-firstchild=NULL;user5-nextsibling=user6; user4=getnode(NODE);strcpy(user4-name,stud04);strcpy(user4-code

30、,04stud);user4-attribute=1;user4-parent=root;user4-firstchild=NULL;user4-nextsibling=user5; user3=getnode(NODE);strcpy(user3-name,stud03);strcpy(user3-code,03stud);user3-attribute=1;user3-parent=root;user3-firstchild=NULL;user3-nextsibling=user4;user2=getnode(NODE);strcpy(user2-name,stud02);strcpy(u

31、ser2-code,02stud);user2-attribute=1; user2-parent=root;user2-firstchild=NULL;user2-nextsibling=user3; user1=getnode(NODE);strcpy(user1-name,stud01);strcpy(user1-code,01stud);user1-attribute=1;user1-parent=root; user1-firstchild=NULL;user1-nextsibling=user2; su=getnode(NODE);strcpy(su-name,su); strcp

32、y(su-code,su);su-attribute=1; su-parent=root;su-firstchild=NULL; su-nextsibling=user1;root-firstchild=su; root-nextsibling=NULL;entry()/*系统登录界面,验证用户及密码*/int h;char username256,password256;h=0;g=getnode(NODE);g=su;printf(nn);printf(tt*FILE MANAGESYSTEM*n);printf(nnnnnnn); printf(ttuser:);gets(usernam

33、e);printf(n);printf(ttpassword:); gets(password);while(g!=NULL)if(strcmp(username,g-name)=0)h=1;if(strcmp(password,g-code)=0)symbol=1;printf(nttSucceed in loggingon!Press any key and enter. );p=g;if(strcmp(username,su)=0) sign=#;else sign=$;strcpy(title,username);else printf(nttIncorrect password!);

34、break;else g=g-nextsibling;if(h=0) printf(nttIncorrect username!);getch();change。/*切换用户*/NODE *u;char password256;printf(npassword:);gets(password);u=root-firstchild;while(strcmp(str,u-name)!=0)u=u-nextsibling;if(strcmp(password,u-code)!=0)printf(nIncorrect password!);elsep=u;g=u;strcpy(title,str);

35、if(strcmp(str,su)=0)sign=#;else sign=$;begin=NULL;end=NULL;show=0;operation()/*验证输入的命令参数*/NODE *u;u=root-firstchild; if(strcmp(str,exit)=0)num=0;else if(strcmp(str,pwd)=0) num=1;else if(strcmp(str,ls)=0)num=2;else if(strcmp(str,mkdir)=0) num=3;else if(strcmp(str,cd)=0) num=4;else if(strcmp(str,vi)=0

36、) num=5;else if(strcmp(str,rm)=0) num=6;else if(strcmp(str,rmdir)=0) num=7;else if(strcmp(str,help)=0) num=8;else if(strcmp(str,cat)=0) num=9;else if(strcmp(str,cp)=0) num=11;else if(strcmp(str,paste)=0) num=12;else if(strcmp(str,chpw)=0) num=13; else while(u!=NULL&strcmp(str,u-name)!=0)u=u-next

37、sibling;if(u!=NULL)num=10;pwd()/*显示当前的工作路径*/NODE*t,*L,*k;L=getnode(NODE);L-firstchild=NULL; t=p;dok=getnode(NODE); strcpy(k-name,p-name);k-firstchild=L-firstchild; L-firstchild=k;p=p-parent;while(p!=NULL);for(k=L-firstchild;k!=NULL;k=k-firstchild)printf(/%s,k-name);printf(n);p=t;mkdir()/*创建子目录*/if(p

38、!=root)NODE *q,*t,*w;t=p;w=p;q=getnode(NODE); printf(ndirectory name:);scanf(%s,q-name);q-attribute=1; w=w-firstchild;while(strcmp(w-name,q-name)!=0|w-attribute!=1)&w!=NULL)w=w-nextsibling;if(w!=NULL) printf(ndirectory alreadyexist);elseq-parent=p; q-firstchild=NULL;q-nextsibling=p-firstchild;p-

39、firstchild=q;p=t; gets(str);else printf(nDont allow this operation in rootdirectory!);ls()/*显示当前目录下的所有内容,后缀为/的表 示目录,*的表示文件*/NODE *t; t=p; p=p-firstchild; printf(n);while(p!=NULL)if(p-attribute=1) printf(%s/t,p-name);else printf(%s*t,p-name);p=p-nextsibling;p=t;cd()/*改变当前的工作目录*/NODE *t;int flag=1;pri

40、ntf(ndirectory name or symbol:);gets(str);if(strcmp(str,.)=0)/*返回当前目录的上一 级目录*/if(p-parent!=NULL) p=p-parent;else printf(nThat is already root directory!);else if(strcmp(str,)=0)/*返回用户注册子目录*/p=g;else if(strcmp(str,/)=0)/*返回根目录*/while(p-parent!=NULL) p=p-parent;else if(strcmp(str,.)=0)/*保持当前目录不 变*/els

41、e/*当前目录改变为指定的子目录*/if(p!=root|sign!=$) t=p; p=p-firstchild;while(p!=NULL&flag)if(strcmp(str,p-name)=0&p-attribute= 1)flag=0;else p=p-nextsibling;if(p=NULL)printf(nsubdirectory notexist!);p=t;elseif(strcmp(str,g-name)!=0)printf(nCurrent user dont access other users filesor dirrctory!);else p=g

42、;rm()/*删除文件*/if(p!=root)NODE *t,*s;t=p;printf(nfile name:); gets(str);p=p-firstchild;if(strcmp(str,p-name)=0&p-attribute= 0)t-firstchild=p-nextsibling;p=t;elsewhile(strcmp(str,p-name)!=0|p-attribute!=0)&p!=NULL)s=p;p=p-nextsibling;if(p!=NULL)s-nextsibling=p-nextsibling;free(p);else printf(nf

43、ile not exist);p=t;else printf(nDont allow this operation inroot directory!);rmdir()/*删除子目录*/if(p!=root)NODE *t,*s;t=p; printf(ndirectory name:); gets(str);p=p-firstchild;if(strcmp(str,p-name)=0&p-attribute= 1)t-firstchild=p-nextsibling; p=t;elsewhile(strcmp(str,p-name)!=0|p-attribute!=1)&p!

44、=NULL)s=p;p=p-nextsibling;if(p!=NULL)s-nextsibling=p-nextsibling;free(p);else printf(ndirectory not exist);p=t;else printf(nDont allow this operation in rootdirectory!);help()/*提示命令参数功能*/printf(n*COMMAND PARAMETER*n);printf(su,stud01,stud02,stud03,stud04,stud05,stud06,stud07,stud08,stud09,stud10:n);

45、printf( help you switch to other user;n);printf(pwd:display the path of current directory orfile;n);printf(ls:display all subdirectory and file undercurrent directory,symbol * n);printf( denotes file name,symbol / denotesdirectory name;n);printf(mkdir:create a subdirectory undercurrent directory;n);

46、printf(rmdir:delete a subdirectory undercurrent directory;n);printf(vi:create a file under current directoryand edit;n);printf(rm:create a file under currentdirectory;n);printf(cat:display file content;n);printf(cp:copy file content into buffer andsave;n);printf(paste:creat a file and overwrite with

47、buffer content;n);printf(cd:choose the path and enter intosubdurectory or parent directory,n);printf(tfor enample,when system requests toinput the subdirectory name or then);printf( parent directory symbol,if you inputsubdirectory name,current directoryn);printf( will point to the subdirectory,if yo

48、uinput .,current directory willn);printf( point to father directory,if you input/,current directory will pointn);printf( to root directory,if you input .,currentdirectory will not alter,if inputn);printf( nothing and enter,current directory willpoint to registered user directory;n);printf(help:if yo

49、u have any doubt,input help andseek system helpn);printf(exit:end the file system operationn);edit()/*对文件内容编辑*/int choice;char s80,fname80; struct line *info;int linenum=1;int guide=0;dochoice=menu_select(); switch(choice) case1:printf(linenum:); gets(s);linenum=atoi(s);enter(linenum);break;case 2:d

50、elete(); break; case 3:list(); break;case4:save();start=NULL;last=NULL;guide=1;break;while(guide=0);menu_select()/验证文件编辑命令*/char s80;int c=0;printf(n);do printf(:); gets(s); if(strcmp(s,i)=0)c=1;else if(strcmp(s,d)=0) c=2; elseif(strcmp(s,list)=0) c=3; elseif(strcmp(s,wq)=0) c=4;while(c6); return(c)

51、;enter(int linenum)/*将文本插在指定行端部*/struct line *info;char t81;for(;)info=(struct line *)malloc(sizeof(struct line);if(!info)printf(trunoutofmemory!n);return(NULL);printf(%d:,linenum);gets(info-text);info-num=linenum;if(*info-text)if(find(linenum)patchup(linenum,1);if(*info-text) start=dls_store(info);

52、else break;linenum+;return(linenum);patchup(int n,int incr)/*在插入和删除操作之后 重新对文本各行编号*/struct line *i;i=find(n);while(i)i-num=i-num+incr; i=i-next;struct line *dls_store(struct line *i)/*按行号排序 后存入*/struct line *old,*p;if(last=NULL) i-next=NULL; i-prior=NULL;last=i; return(i);p=start;old=NULL;while(p)if(p-numnum)old=p;p=p-next;else if(p-prior)p-prior-next=i;i-next=p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论