




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计模拟UNIX文件系统的设计及实现院 系:计算机学院二系 班 级: 计07 - 2班姓 名:2009年6月10日操作系统课程设计任务书、题目:银行家算法二、设计要求(1)吴勇克(组长)、刘胜光组成设计小组。(2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时 要了解其他组员完成的内容。(3)查阅相关资料,自学具体课题中涉及到的新知识。(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。(5)所设计的系统应有菜单、动画和音乐。(6)按要求写出课程设计报告,并于设计结束后 1周内提交。其主要内容 包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软
2、件总体设 计、详细设计、软件的调试、总结、谢启、附录:带中文注释的程序清单、参考 文献。报告一律用 A4纸打印,中文字体为宋体,西文字体用 Time New Roma 一律用小四号字,行距采用“固定值” 18磅,首行缩进2字符。总体设计应配 合软件总体模块结构图来说明软件应具有的功能。详细设计应用传统或N-S流程 图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误, 如何解决的。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程 序行左右,不得抄袭。四、课程设计工作计划2009年6月15日,指导教师讲课,学生根据题目准备资料;2009年6月
3、16日,设计小组进行总体方案设计和任务分工;2009年16月16日2009年6月23日,每人完成自己承担的程序模块并通 过独立编译;2009年6月23日2009年6月29日,将各模块集成为一个完整的系统, 并录入足够的数据进行调试运行;2009年6月30日,验收、撰写报告;2009年7月2日,验收或总结。指导教师签章教研室主任签章目录1 .概述 12 .总体设计 .23 .详细设计 34 .代码调试 95 .总结 116 .附录 127 .参考文献30【课设原理】UNIX采用树型目录结构,每个目录表称为一个目录文件。一个目录文件是由目录项组成的。每个目录项包含16B, 一个辅存磁盘块(512B
4、)包含32个目录项。在目录项中,第1、2字节为相应文件的外存i节点号, 是该文件的内部标识;后14B为文件名,是该文件的外部标识。所以,文件目 录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存 i节点号, 由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了 一个文件卷,也叫文件系统。UNIX中的文件系统磁盘存储区分配图如下:0#1#2#K#K+1#K+2#K+3# n引导区管理区i节点区文件存储区本次课程设计是要实现一个简单的模拟 UNIX文件系统。我们在磁盘中申请 一个二进制文件模拟UN
5、IX内存,依次初始化建立位示图区,I节点区,数据块 区。并给已打开的文件建立文件打开表。【课设内容】1 .设计任务多用户、多级目录结构文件系统的设计与实现。可以实现下列几条命令login logout dir creat用户登录 退出当前用户 列文件目录 创建文件delet删除文件及目录树open close read write mkdir打开文件 关闭文件 读文件 写文件 创建目录cd format quit改变文件目录 格式化文件系统 退出文件系统2 .文件系统应具有的基本功能(1)多用户 :usr1,usr2,usr3, ,usr8 (1-8 个用户)(2)多级目录:可有多级子目录;(
6、3)具有login(用户登录)(4)系统初始化(建文件卷、提供登录模块)(5)文件的创建: create(6)文件的打开:open(7)文件的读:read(8)文件的写:write(9)文件关闭:close(10)删除文件或目录:delet(11)创建目录(建立子目录):mkdir(12)改变当前目录:cd(13)列出文彳目录:dir(14)退出:logout,总体设计【算法思想】先建立512个块,每个块对应512个字节,在建立一个有512个元素的字符数组, 每个元素 对应相应的块号,不管是文件或是目录都有I节点,建立自己设定数目元素的I节点表,并依次把位图区,I节点表,数据块区每个元素映射到
7、一个二进制文件上。在每一次的操作中 如果相应元素有变动,则对应在文件中更新输出相应数据,以便下一次启动程序的时候可以快速导入上一次的数据。辅存【系统总体框架图】主存biitnap512午temp fO24B位图】节点数据区512B支个512块11 / 33【系统总体流程图】开始N在内存中申请内存空间 将磁盘上的文件读入内存执行 format(), 建立文件系统用户登录模块,输入用户名和密码,可以在程序中设定,不用保存在文件系统中执行init(),进行初始化 操作,进入用户子目录执行command。,对用户输入的命令进行解析和 执行。若数据被修改或新建立,则保存主存 i节点和数据块的内容到内存的
8、文件系统,并写回磁 盘,保存修改。若输入错误命令则显示出错信息三,详细设计【各模块功能说明】1 .format 模块功能:格式化文件系统,即初始化文件系统,相当于硬盘的格式化。将其中原 有的用户及用户下的文件系统全部还原初始状态,即没有任何用户和目录、文件, 也就是按设计的文件系统格式重建新的文件系统。2 . get_blknum 和 release_blk模块功能:get_blknum找到一个空闲数据块,并修改对应位图号元素为1。release_blk修改对应的位图元素,并把文件系统中对应的数据块清零。3 . init()模块功能: 读入文件系统4 .quit()模块功能:退出系统5 .cr
9、eat(濮块功能:创建文件,分配一空目录项,分配磁盘块。可用位示图。填写该空目录项。如文件长度(0) ,文件名,类型等。6 . open(濮块功能:打开文件,并判断文件类型和打开方式。 如果文件没有在文件打开表中就在文件打开表中建立该文件项。7 . close(濮块功能:关闭文件,删除该文件的用户打开文件表目。8 . write() 模块功能:写文件 ,需要先打开文件。并判断文件权限。写完后修改文件系统中的对应数据区。9 . read(鹿块功能: 读文件。 需先打开文件。 读入相应数据块的内容到缓冲区, 然后输出。10 .delet(欣块功能:如果参数是文件则删除文件, 如果是目录则删除该目录
10、下的所有文件和 目录。11 .mkdir()功能:建立新的目录 ,先在 I 节点表中找到一个未使用的,并初始化该I 节点,并在文件系统中对应更新输出。12 .cd()功能:将当前目录切换到当前目录的一个子目录下或当前目录的父目录。程序流程图各功能模块流程图用户登陆login()初始化函数init()改变当前目录cd()显示目录dir()创建目录mkdir()创建文件creat()打开文件open()读文件read()调用读块操作, 读出块内字符关闭文件close()写文件write()删除文件delet()四.代码调试1 .初始化和登陆文件系统第一次运行程序ISB C AEJev-C p pV
11、Il exeLogin:adnin 卜式尊与幢ord - CanfC open File usep-txt.This fll&svstem not exist, it uill heUill be to Formati £ Hes</stenk_ _ .HARMING:ALL MTA OH THIS FILESVSTEH UILL RE LOST* Proceed with Fovmat<V?VPilesystem created successFul«Please F irst login *Login:adninpass:Mc»rd - *
12、Do 9"it 'uant; to creat a new user?<Zn : j;2 .建立新目录,显示当前目录下的文件和目录,并转到新目录下13 / 3329 / 333 .建立新的文件,打开,写,读。ftdmin/d mlcdlir badmin/a$cd badmin/ab Here ate ab.tvtadmln/a/bHopen ah. txtlease input open no de : <1: read, 2 : write 3 : read. and (Ji-ite> :3Open F ilje ab. txt by Pead and
13、write. £idininayblwrite ab .txtThe length of ah .txt :0T nput the dataqCTHL*Z to end?: sdkFJhsdksd tiuf edfsd pzLadmin/aZbliad ah. txtIlie length of ah_txt :22 .jd21Asdkf jhsdlf?(A ewfsdf sd admin/ahli-4 .clear清屏后,dir查看当前目录下文件信息S3 t1口£ V £ ppL 丁 程 1 .EXEadm In/a/h 】蝇如 at)-txt22 bytes1
14、 filets)Z2 hiites8 di?(s )1048554 biftes Fi*ee£paceadriinZa/fc J S_5.返回根目录下,并删除根目录下所有子目录和文件HJ CADcv-Cpp -.Ifll .extB fileCs> 0 dip<s>.adminZa/b $cd radmin/-9 $cd - Admin !$delet a admin lidit*0 bytes1048576 bytes FreeSpaceAdmin】$6.logout退出登录或quit退出程序五 . 总结开始第一天构思, 不断的筛选证明模拟 UNIX 下的内存方法
15、, 并在网络上查找相应的 UNIX 环境资料。 接下来几天开始实践动手, 从整体框架开始构思, 到 各个细节端口的实现。操作系统是计算机科学与技术专业中的一门重要基础课, 目的是让我们了解操作系统的基本概念, 理解计算机系统的资源如何组织, 操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。通过课程设计,可以进一步理解在计算机系统上运行的其它各类操作系统, 并懂得在操作系统的支持下建立自己的应用系统。操作系统课程设计,对于训练我们掌握程序设计、熟悉上机操作和程序调试技术都有重要作用。 重点培养我们的思维能力、 创新能力和排错能力。通过课程设计, 进一步融会贯通教材内容
16、, 掌握程序各功能模块的工作原理,相互联系和来龙去脉, 完整地建立系统的概念。 激发我的学习热情和主动性, 培 养我的独立工作能力,在实践活动中,将所学知识综合运用,增长才干,并积累经验。 对编程语言又有了更深一层次的认识, 并对编程能力有所加强, 但还是很多的不足有待改进, 对于编程来说还需要大量的实践, 才能在发现问题和解决问题中前进与提高。六附录源代码:/ head.h 文件#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include&l
17、t;stack> using namespace std;512/数据块的大小512/数据块的块数32/ i 节点的大小32/i 节点的数目#define BLKSIZE#define BLKNUM#define INODESIZE#define INODENUM#define 8/ 打开文件表的数目 /用户typedef structchar user_name10;/ 用户名char password10;/ 密码 User;/i 节点typedef structshort inum;/ 文件i 节点号char 10; / 文件名char type;/ 文件类型char user_n
18、ame10; / 文件所有者short iparent;/ 父目录的i 节点号short length;/ 文件长度short address2; / 存放文件的地址 Inode;/打开文件表typedef structshort inum;/ i 节点号char 10; / 文件名short mode;/ 读写模式(1:read, 2:write,/3:read and write) ;/ 申明函数void login(void);void init(void);int analyse(char *);void save_inode(int);int get_blknum(void);voi
19、d read_blk(int);void write_blk(int);void release_blk(int);void pathset();void del(int);/ 用户命令处理函数void help(void);void cd(void);void dir(void);void mkdir(void);void creat(void);void open(void);void read(void);void write(void);void close(void);void delet(void);void logout(void);void command(void);void
20、 quit();/main.cpp 文件#include "head.h"/定义全局变量charchoice;int argc; / 用户命令的参数个数char*argv5; / 用户命令的参数int inum_cur; / 当前目录chartemp2*BLKSIZE; / 缓冲区User user; / 当前的用户charbitmapBLKNUM; / 位图数组Inode inode_arrayINODENUM; / i 节点数组; / 打开文件表数组chari mage_name10 = "data.dat" /文件系统名称FILE *fp;/ 打开
21、文件指针 /创建映像hd,并将所有用户和文件清除void format(void)int i;Inode inode;printf("Will be to format .n");printf("WARNING:ALL DATA ON THIS WILL BE LOST!n");printf("Proceed with Format(Y/N)?");scanf("%c", &choice);getchar();if(choice = 'y') | (choice = 'Y')
22、if(fp=fopen(image_name, "w+b") = NULL)printf("Can't create n", image_name); exit(-1);for(i = 0; i < BLKSIZE; i+)fputc('0', fp);inode.inum = 0;strcpy(inode., "/");inode.type = 'd'strcpy(inode.user_name, "/");inode.iparent = 0;inode.length
23、 = 0;inode.address0 = -1;inode.address1 = -1;fwrite(&inode, sizeof(Inode), 1, fp);inode.inum = -1;for(i = 0; i < 31; i+)fwrite(&inode, sizeof(Inode), 1, fp);for(i = 0; i < BLKNUM*BLKSIZE; i+)fputc('0', fp);fclose(fp);/ 打开文件 user.txtif(fp=fopen("user.txt", "w+&quo
24、t;) = NULL)printf("Can't create n", "user.txt");exit(-1);fclose(fp);printf(" created successful.Please first login!n");return ;/ 功能 : 用户登陆,如果是新用户则创建用户void login(void)char *p;int flag;char user_name10;char password10;char 10 = "user.txt"doprintf("login
25、:");gets(user_name);printf("password:");p=password;while(*p=getch()if(*p = 0x0d)*p='0' / 将输入的回车键转换成空格break;printf("*");/将输入的密码以"*" 号显示p+;flag = 0;if(fp = fopen(, "r+") = NULL)printf("nCan't open .n", );printf("This not exist, it
26、 will be create!n");format();login();while(!feof(fp)fread(&user, sizeof(User), 1, fp);/ 已经存在的用户 , 且密码正确if(!strcmp(user.user_name, user_name) &&!strcmp(user.password, password)fclose(fp);printf("n");return ;/ 已经存在的用户 , 但密码错误else if(!strcmp(user.user_name, user_name)printf(&
27、quot;nThis user is exist, but password is incorrect.n");flag = 1;fclose(fp);break;if(flag = 0) break;while(flag);/ 创建新用户if(flag = 0)printf("nDo you want to creat a new user?(y/n):");scanf("%c", &choice);gets(temp);if(choice = 'y') | (choice = 'Y')strcpy(u
28、ser.user_name, user_name);strcpy(user.password, password);fwrite(&user, sizeof(User), 1, fp);fclose(fp);return ;if(choice = 'n') | (choice = 'N')login();/ 功能 : 将所有 i 节点读入内存void init(void)int i;if(fp = fopen(image_name, "r+b") = NULL)printf("Can't open .n",
29、 image_name);exit(-1);/ 读入位图for(i = 0; i < BLKNUM; i+) bitmapi = fgetc(fp);/ 显示位图/ 读入 i 节点信息for(i = 0; i < INODENUM; i+)fread(&inode_arrayi, sizeof(Inode), 1, fp);/ 显示 i 节点/ 当前目录为根目录inum_cur = 0;/ 初始化打开文件表for(i = 0; i < ; i+)i.inum = -1;/功能:分析用户命令,将分析结果填充argc和argv/ 结果 : 0-13 为系统命令, 14 为
30、命令错误int analyse(char *str)int i;char temp20;char *ptr_char;char *syscmd="help", "cd", "dir", "mkdir", "create", "open", "read", "write", "clear","format","quit"close","delet",
31、"logout",argc = 0;for(i = 0, ptr_char = str; *ptr_char != '0' ptr_char+) if(*ptr_char != ' ') while(*ptr_char != ' ' && (*ptr_char != '0')tempi+ = *ptr_char+; argvargc = (char *)malloc(i+1); strncpy(argvargc, temp, i); argvargci = '0'argc+;i
32、= 0;if(*ptr_char = '0') break;if(argc != 0) for(i = 0; (i < 14) && strcmp(argv0, syscmdi); i+); return i;elsereturn 14;/ 功能 : 将 num 号 i 节点保存到 hd.datvoid save_inode(int num)if(fp=fopen(image_name, "r+b") = NULL)printf("Can't open n", image_name);exit(-1);fse
33、ek(fp, BLKNUM +num*sizeof(Inode), SEEK_SET);fwrite(&inode_arraynum, sizeof(Inode), 1, fp);fclose(fp);/ 功能 : 申请一个数据块int get_blknum(void)int i;for(i = 0; i < BLKNUM; i+)if(bitmapi = '0') break;/ 未找到空闲数据块if(i = BLKNUM)printf("Data area is full.n");exit(-1);bitmapi = '1'
34、if(fp=fopen(image_name, "r+b") = NULL)printf("Can't open n", image_name);exit(-1);fseek(fp, i, SEEK_SET);fputc('1', fp);fclose(fp);return i;/ 功能 : 将 i 节点号为 num 的文件读入tempvoid read_blk(int num)int i, len;char ch;int add0, add1;len = inode_arraynum.length;add0 = inode_ar
35、raynum.address0;if(len > 512)add1 = inode_arraynum.address1;if(fp = fopen(image_name, "r+b") = NULL)printf("Can't open .n", image_name);exit(-1);+add0*BLKSIZE,fseek(fp, BLKSIZE+INODESIZE*INODENUMSEEK_SET);ch = fgetc(fp);for(i=0; (i < len) && (ch != '0')
36、&& (i < 512); i+)tempi = ch;ch = fgetc(fp);if(i >= 512)fseek(fp,BLKSIZE+INODESIZE*INODENUM+add1*BLKSIZE, SEEK_SET);ch = fgetc(fp);for(; (i < len) && (ch != '0'); i+)tempi = ch;ch = fgetc(fp);tempi = '0'fclose(fp);/ 功能 : 将 temp 的内容输入 hd 的数据区void write_blk(int
37、num)int i, len;int add0, add1;add0 = inode_arraynum.address0;len = inode_arraynum.length;if(fp = fopen(image_name, "r+b") = NULL)printf("Can't open .n", image_name);exit(-1);fseek(fp, BLKSIZE+INODESIZE*INODENUM+add0*BLKSIZE, SEEK_SET);for(i=0; (i<len)&&(tempi!='
38、;0')&&(i < 512); i+)fputc(tempi, fp);if(i = 512)add1 = inode_arraynum.address1;fseek(fp, BLKSIZE+INODESIZE*INODENUM+add1*BLKSIZE, SEEK_SET);for(; (i < len) && (tempi != '0'); i+)fputc(tempi, fp);fputc('0', fp);fclose(fp);/ 功能 : 释放文件块号为 num 的文件占用的空间void relea
39、se_blk(int num)FILE *fp;if(fp=fopen(image_name, "r+b") = NULL) printf("Can't open n", image_name); exit(-1);bitmapnum = '0'fseek(fp, num, SEEK_SET);fputc('0', fp);fclose(fp);/ 功能 : 显示帮助命令void help(void)printf("command: nhelp - show help menu nclear - clea
40、r the screen ncd - change directory n mkdir - make directory n create - create a new file n open - open a exist file n read - read a file nwrite - write something to a file n close - close a file ndelet - delete a exist directory n format - format a exist n logout - exit user nquit - exit this syste
41、mn");/设置文件路径void pathset() char path50;int m,n;if(inode_arrayinum_cur.inum = 0)strcpy(path,user.user_name);elsestrcpy(path,user.user_name); m=0;n=inum_cur;while(m != inum_cur) while(inode_arrayn.iparent != m) n = inode_arrayn.iparent;strcat(path,"/");strcat(path,inode_arrayn.);m = n;n
42、 = inum_cur;printf("%s$",path);/ 功能 : 切换目录 (cd . 或者 cd dir1) void cd(void)int i;if(argc != 2)printf("Command cd must have two args. n"); return ;if(!strcmp(argv1, ".")inum_cur = inode_arrayinum_cur.iparent;elsefor(i = 0; i < INODENUM; i+)if(inode_arrayi.inum>0)&am
43、p;&(inode_arrayi.type='d')&&(inode_arrayi.iparent=inum_cur)&&!strcmp(inode_arrayi.1)&&!strcmp(inode_arrayi.user_name,user.user_name) break;if(i = INODENUM)printf("This directory isn't exsited.n");elseinum_cur = i;/ 功能 : 显示当前目录下的子目录和文件(dir)void dir(vo
44、id)int i;int dcount=0,fcount=0;short bcount=0;if(argc != 1)printf("Command dir must have one args. n");return ;/ 遍历 i 节点数组 , 显示当前目录下的子目录和文件名for(i = 0; i < INODENUM; i+)if(inode_arrayi.inum> 0) &&(inode_arrayi.iparent = inum_cur)&&!strcmp(inode_arrayi.user_name,user.us
45、er_name)if(inode_arrayi.type = 'd')dcount+;printf("%-20s<DIR>n", inode_arrayi.);elsefcount+;bcount+=inode_arrayi.length;printf("%-20s%12d bytesn", inode_arrayi.i.length);printf("n%d file(s)%11d bytesn",fcount,bcount);printf("%d dir(s) %11d bytesFreeSp
46、acen",dcount,1024*1024-bcount);/ 功能 : 在当前目录下创建子目录(mkdir dir1)void mkdir(void)int i;if(argc != 2)printf("command mkdir must have two args. n");return ;/ 遍历 i 节点数组 , 查找未用的 i 节点for(i = 0; i < INODENUM; i+)if(inode_arrayi.inum < 0) break;if(i = INODENUM)printf("Inode is full.n&
47、quot;); exit(-1);inode_arrayi.inum = i;strcpy(inode_arrayi., argv1);inode_arrayi.type = 'd'strcpy(inode_arrayi.user_name,user.user_name); inode_arrayi.iparent = inum_cur;inode_arrayi.length = 0; save_inode(i);/ 功能 : 在当前目录下创建文件(creat file)void create(void)int i;if(argc != 2)printf("comma
48、nd creat must have two args. n"); return ;for(i = 0; i < INODENUM; i+)if(inode_arrayi.inum > 0) && (inode_arrayi.type = 'f') && !strcmp(inode_arrayi., argv1) printf("This exsit.n"); return ;for(i = 0; i < INODENUM; i+)if(inode_arrayi.inum < 0) break
49、;if(i = INODENUM)printf("Inode is full.n");exit(-1);inode_arrayi.inum = i;strcpy(inode_arrayi., argv1);inode_arrayi.type = 'f'strcpy(inode_arrayi.user_name, user.user_name); inode_arrayi.iparent = inum_cur;inode_arrayi.length = 0;save_inode(i);/ 功能 : 打开当前目录下的文件(open file1)void open
50、()int i, inum, mode, ;if(argc != 2)printf("command open must have two args. n");return ;for(i = 0; i < INODENUM; i+)if(inode_arrayi.inum > 0) &&(inode_arrayi.type = 'f') &&!strcmp(inode_arrayi.1)&&!strcmp(inode_arrayi.user_name,user.user_name) break;if
51、(i = INODENUM)printf("The want to open doesn't exsited.n");return ;inum = i;printf("Please input open mode:(1: read, 2: write, 3: read and write):");scanf("%d", &mode);getchar();if(mode < 1) | (mode > 3)printf("Open mode is wrong.n");return;for(i
52、 = 0; i < ; i+)if(i.inum < 0) break;if(i = )printf("The is full, please close some file.n");return ;= i;.inum = inum;strcpy(., inode_arrayinum.);.mode = mode;printf("Open by ", .);if(mode = 1) printf("read only.n");else if(mode = 2) printf("write only.n"
53、);else printf("read and write.n");/ 功能 : 从文件中读出字符(read file1)void read()int i, inum;if(argc != 2)printf("command read must have two args. n");return;for(i = 0; i < ; i+)if(i.inum > 0) &&!strcmp(i.1)break;if(i = )printf("Open %s first.n", argv1);return ;els
54、e if(i.mode = 2)printf("Can't read %s.n", argv1);return ;inum = i.inum;printf("The length of %s:%d.n", argv1, inode_arrayinum.length);if(inode_arrayinum.length > 0)read_blk(inum);for(i = 0; (i < inode_arrayinum.length) && (tempi != '0'); i+) printf("
55、;%c", tempi);/ 功能 : 向文件中写入字符 (write file1)void write()int i, inum, length;if(argc != 2)printf("Command write must have two args. n");return ;for(i = 0; i < ; i+)if(i.inum>0)&&!strcmp(i.1) break;if(i = )printf("Open %s first.n", argv1);return ;else if(i.mode = 1
56、)printf("Can't write %s.n", argv1);return ;inum = i.inum;printf("The length of %s:%dn", inode_arrayinum., inode_arrayinum.length);if(inode_arrayinum.length = 0)i=0;inode_arrayinum.address0 = get_blknum();printf("Input the data(CTRL+Z to end):n");while(i<1023&&(tempi=getchar()!=EOF) i+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园教研活动的组织与实施计划
- DIY甜品创业计划书
- 提升信息共享安全水平计划
- 2025年小班美术标准教案涂色
- 2025年咖啡连锁经营项目发展计划
- 装配式建筑培训
- 《农民的好帮手-农具》(教学设计)-2023-2024学年五年级下册综合实践活动沪科黔科版
- 2025年海北货运从业资格证模拟考试下载题
- 2025年云浮货运从业资格证模拟考试题
- 2025年矿用防爆电器设备项目合作计划书
- 小学部编五下快乐读书吧整本书阅读-《西游记》阅读指导课教学设计
- 中药药剂学:第十四章-胶囊剂
- 高中英语-what's in a name教学课件设计
- 德能勤绩考核评价表
- 新译林牛津版英语八年级上册Unit1-Friends复习优质课公开课课件
- 语文版-三年级下-第五单元-17 张衡和他的地动仪
- 2023年河北石家庄市市属国有企业面向社会招聘笔试参考题库附带答案详解
- 加弹机操作规程
- 2022年无锡商业职业技术学院单招综合素质试题及答案解析
- 监理工程师个人工作总结模板(3篇)
- 中国女排演讲ppt
评论
0/150
提交评论