




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计实践报告题目名称: 俄罗斯方块 系 名 称: 信息工程学院 专业班级: B电子093 学生姓名: 2012 年 10 月20目 录摘要31 引言41.1 课题背景41.2课程设计目的52 开发工具的介绍5 2.1关于Visual C+52.2可行性分析52.3需求分析53 功能说明64 系统的实现64.1设计流程图64.2窗体设计64.3游戏界面设计64.4游戏形状需求64.5定时机制64.6定时处理74.7底部到达的判断与销行的实现74.8统计分数75 用户手册86 程序代码97 总结与体会19参考文献 20用VC+制作多功能俄罗斯方块摘 要 本课程设计将实现一个简单俄罗斯方块小游戏。这个小游戏不仅实现了简单的娱乐功能,还实现了高级的对C+实践知识能力的学习,而且具有简洁大方的图文外观。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。即时不受约束获得游戏结果,对人们的生活有一定的娱乐作用。在课程设计中,系统开发平台为Windows 2000XP,程序设计设计语言采用Visual C+,在程序设计中,采用了结构化与面向对象两种解决问题的方法。关键词 程序设计;俄罗斯方块;C+1 引 言俄罗斯是家喻户晓的益智小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是俄罗斯方块是我第一个接触到的游戏,它的实现方法也吸引着我。我希望通过探索实践去实现它,在这次学习中从实践和实际的项目中提高自己的编程能力。因此我选定了这个题目。1.1 课题背景 在现今电子信息高速发展的时代,电子游戏已深入人们的日常生活,成为老少皆宜的娱乐方式。俄罗斯方块,是一款风靡全球的游戏,最初是由苏联人制作的,规则简单,容易上手,且游戏过程变化无穷,可以让玩家充分感受游戏中的乐趣。在游戏设计方面,俄罗斯方块是游戏编程的入门项目,因为它可以检验编辑人员对开发语言、环境和基本数据结构知识熟练程度。C+课程所学的概念、理论和方法,按照C+程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能;设计主控模块程序对给出的程序源代码要给出各部分的详细注释自己根据能力及需要添加相应功能模块,增强模拟系统功能。1.2 课程设计目的在程序设计中,通过设计、编制、调试一个俄罗斯方块的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C+程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。2 开发工具的介绍2.1 关于Visual C+Visual C+6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C+源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C+6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C+6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。VC+6.0是Windows 95/98、XP或Windows NT下的一个应用程序,本身对软硬件没有特殊要求。就是说它对环境的要求与Windows 95/98、Windows NT要求是一致的。硬件要求:一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。软件要求:Windows 95/98或Windows NT3.51以上版本。VC+ 6.0系统可以在一张CD盘上,也可以在“Visual Studio( Visual C+、Visual Foxpro)”等产品的第一张CD盘上。一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。在安装好VC 6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。与一般的应用软件一样,有以下两种启动方式:(1)通过“开始”按钮,选择“程序”菜单,然后打开“Microsoft Visual studio 6.0中文版”子菜单中的“Microsoft Visual C+ 6.0 中文版”程序。(2)用户也可以使用命令行启动VC。单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:Program FilesMicrosoft Visual StudioVC98VC6.exe(按默认盘符和路径安装)即可。2.2 可行性分析本设计是简单俄罗斯方块。日常学习生活中,常常涉及到一些娱乐休闲的问题,一个小型的俄罗斯方块软件变得非常有用,该型俄罗斯方块需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。2.3 需求分析 本软件主要用于计算机windows 2000/XP以上版本的用户的使用,这次课程设计一般是实现简单俄罗斯方块的功能。要程序能实现:实现各种方块的生产,包括形状和颜色等信息实现各个方块的上下左右移动和旋转的功能;实现消行的功能;实现开始,暂停,结束等功能。3 功能说明使用C+语言编写一个俄罗斯方块游戏系统,要求程序运行后有一个图形用户界面,实现各种方块的生产,包括形状和颜色等信息,完成左右下旋转的功能,在消行的同时分数加1,在点击暂停或者按下空格的时候暂停或开始游戏,最后结束游戏。功能(1) 实现各种方块的生产,包括形状和颜色等信息;(2) 实现各个方块的上下左右移动和旋转的功能;(3) 实现消行的功能;(4) 实现时间和得分的统计功能;(5) 实现开始,暂停,结束等功能;要求(1) 编写程序要严格按照C#编程规范进行代码编写。(2) 必须按照个体软件的过程,编写有关的文档。(3) 按照老师的要求,每个人必须独立完成。(4) 按照实训的时间安排进行实训,实训结束后提交有关的表格与文档4 系统的实现4.1设计流程图4.2窗体设计利用MFC AppWinzard生成记事本应用程序框架具体步骤如下:(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入MyTetris 。(2)单击OK按钮.4.3游戏界面需求良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。4.4游戏形状(方块)需求良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆 时针变形,一般为逆时针。4.5定时制机制 从分析游戏的特性可以知道,定时器的产生与生效应该在游戏开始的时候,而在游戏暂停或者游戏结束时则将已经设定的定时器失效/销亡(对于暂停的情况,使它销亡,当游戏从暂停状态又进入游戏状态时候,则重新创建一个定时器并激活它的运作),所以分别在游戏的开始函数、暂停函数已经结束函数中实现定时器的激活与去激活工作。这里,先在资源编辑器菜单资源里面添加三个菜单选项,分别是游戏的“开始”、“暂停”、和“结束”,然后利用ClassWizard直接在视图类对象Cskyblue_RectView中为它们添加空白的处理函数4.6定时处理经过定时器的设置后,这里通过利用ClassWizard跳到定时器到时候的处理函数OnTimer()去实现,当固定时间片间隔到达后,先检测当前下坠物是否已经到达了底部,不是则进行RectDown()下坠物向下移动一个单位的操作,是则到底后产生一个新的“下一个下坠物”,并代替旧的,将原先旧的“下一个下坠物”用作当前激活状态下正在使用的下坠物,并对使用后的一些状态进行检测:是否马上到达底部,使则进行销行操作 4.7底部到达的判断与销行的实现将新的下坠物放置到游戏区域中去,这时可能出现马上到达底部的情况,因此需要对它进行判断,如果是到达底部,则进行销行处理,并且修改相应的数据状态。而判断是否已经到达了底部,可以通过当前下坠物件所对应的接触面的方块位置为被占用状态(MAP_STATE_NOT_EMPTY=1)来确定,利用数组InterFace744记录17种下坠物的14种形态的接触面信息。4.8统计分数:在消行处理里面有一个专门用来统计消行数的变量,然后根据变量的值决定分数的多少,程序统计分数是:消一行得100分,同时消2行得400分,销掉x行,则分数为:x*(x*100)。如果总分数达到过关条件就过关,改变游戏速度,游戏初始化,开启新的一关,然后再加载方块。没有达到过关分数或者没有满行,则加载下一个方块继续游戏。5用户手册1.使用平台:Microsoft Visual.2.需要安装。将下载的压缩包解压出来,然后在解压出来的文件中点击setup.exe;这需要很长的时间。3.操作步骤:1.选择TerisDebug文件夹下的Teris.exe,单击运行程序。2.启动画面。游戏说明作者简介重新开始选项“继续”“新游戏”选项卡6.程序代码/ 俄罗斯方块.cpp : Defines the entry point for the application./#include stdafx.h#include #include #include mmsystem.h#include resource.hconst POINT apt744=120,0,140,0,140,20,160,0,120,20,140,20,140,0,160,20,120,20,140,0,140,40,140,20,140,20,140,0,160,20,140,40,120,0,120,20,140,20,160,20,120,0,120,20,120,40,140,0,120,0,140,0,160,0,160,20,120,40,140,0,140,20,140,40,140,0,140,20,160,0,160,20,140,0,140,20,160,0,160,20,140,0,140,20,160,0,160,20,140,0,140,20,160,0,160,20,140,0,140,20,140,40,140,60,120,40,140,40,160,40,180,40,140,0,140,20,140,40,140,60,120,40,140,40,160,40,180,40,120,20,140,20,160,20,160,0,120,0,120,20,120,40,140,40,120,0,120,20,140,0,160,0,120,0,140,0,140,20,140,40,120,0,140,0,140,20,160,20,120,20,120,40,140,0,140,20,120,0,140,0,140,20,160,20,120,20,120,40,140,0,140,20,120,20,140,20,140,0,160,0,120,0,120,20,140,20,140,40,120,20,140,20,140,0,160,0,120,0,120,20,140,20,140,40;int sx,sy; /图形函数的变量/int px,py;int cfk300480; /存方块数组HBRUSH color3;int m,n;static int f; /分数static int dj; /等级struct frect int x; int y; int dir; int sharp;Pos;static TCHAR str256;void fangkuai(HDC hdc,int x,int y,int col);void huabk(HDC hdc,int x,int y,int x1,int y1);BOOL gameover(void);void tuxing(HDC hdc,int dir,int sharp,int x,int y,int col);void Init(void);BOOL save(HDC hdc,int dir,int sharp,int x,int y);void load(HDC hdc);void hua(HDC hdc);BOOL check(int dir,int sharp,int x,int y);void CALLBACK timerProc(HWND hwnd,UINT message,UINT timerid,DWORD timer);void ScrollLeft(TCHAR *str);LRESULT CALLBACK wndproc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) / TODO: Place code here.HWND hwnd;MSG msg;static TCHAR szappname=TEXT(俄罗斯方块);WNDCLASS wndclass;wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc=wndproc;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hInstance=hInstance;wndclass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1);wndclass.hCursor=LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1);wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName=NULL;wndclass.lpszClassName=szappname;RegisterClass(&wndclass);HMENU hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1);hwnd=CreateWindow(szappname,TEXT(俄罗斯方块),WS_MINIMIZEBOX|WS_SYSMENU,480,100,406,532, NULL,hMenu,hInstance,NULL);ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd); while(GetMessage(&msg,NULL,NULL,NULL) TranslateMessage(&msg); DispatchMessage(&msg);return msg.wParam;LRESULT CALLBACK wndproc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) static HWND hwndbutton,hwndbutton1,hwndbutton2,hwndbutton3,hwndedit,hwndedit1,hwndedit2,hwndedit3; HDC hdc; PAINTSTRUCT ps; static HINSTANCE hInstance; static int speed=600; static int pause=1; int line; switch(message) case WM_CREATE: /PlaySound(TEXT(1/神话主题曲.wav),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP); color0=CreateSolidBrush(RGB(0,0,0); /黑刷 color1=CreateSolidBrush(RGB(0,255,0); /绿刷 color2=CreateSolidBrush(RGB(255,0,0); /红刷 hwndbutton=CreateWindow(TEXT(BUTTON),TEXT(暂停),WS_CHILD|WS_VISIBLE,320,140,80,40,hwnd,(HMENU)1,hInstance,NULL); / hwndbutton1=CreateWindow(TEXT(BUTTON),TEXT(退出),WS_CHILD|WS_VISIBLE,320,200,80,40,hwnd,(HMENU)2,hInstance,NULL); hwndbutton2=CreateWindow(TEXT(BUTTON),TEXT(新游戏),WS_CHILD|WS_VISIBLE,320,260,80,40,hwnd,(HMENU)3,hInstance,NULL); hwndbutton3=CreateWindow(TEXT(BUTTON),TEXT(确定),WS_CHILD|WS_VISIBLE,320,450,80,30,hwnd,(HMENU)4,hInstance,NULL); hwndedit=CreateWindow(TEXT(EDIT),TEXT(分数:0),WS_CHILD|WS_VISIBLE|ES_READONLY,320,320,80,20,hwnd,(HMENU)5,hInstance,NULL); hwndedit1=CreateWindow(TEXT(EDIT),TEXT(等级:1),WS_CHILD|WS_VISIBLE|ES_READONLY,320,350,80,20,hwnd,(HMENU)6,hInstance,NULL); hwndedit2=CreateWindow(TEXT(EDIT),TEXT(),WS_CHILD|WS_VISIBLE,320,380,80,20,hwnd,(HMENU)7,hInstance,NULL); hwndedit3=CreateWindow(TEXT(EDIT),TEXT(),WS_CHILD|WS_VISIBLE|ES_READONLY,320,410,80,20,hwnd,(HMENU)8,hInstance,NULL); SetTimer(hwnd,1,speed,NULL); SetTimer(hwnd,2,400,timerProc); return 0; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); hua(hdc);load(hdc);huabk(hdc,300,0,0,460);huabk(hdc,0,0,0,460);Init();tuxing(hdc,Pos.dir,Pos.sharp,220,20,1);tuxing(hdc,Pos.dir,Pos.sharp,0,0,1);EndPaint(hwnd,&ps); return 0; case WM_TIMER: hdc=GetDC(hwnd);if(check(Pos.dir,Pos.sharp,Pos.x,Pos.y+20)tuxing(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y,0);Pos.y=Pos.y+20; tuxing(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y,1); else if(gameover() PlaySound(TEXT(1/luodi.wav),NULL,SND_FILENAME|SND_ASYNC); line=save(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y); if(line=1) TCHAR fs256; f+=10; wsprintf(fs,分数:%d,f); SetDlgItemText(hwnd,5,fs); if(f=100) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=200) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=400) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=800) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=1000) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=2000) KillTimer(hwnd,1);MessageBox(NULL,TEXT(),TEXT(),MB_OK);ZeroMemory(cfk,sizeof(cfk);InvalidateRect(hwnd,NULL,FALSE); else if(line=2&line=4&line=8) TCHAR fs256; f+=160; wsprintf(fs,分数:%d,f); SetDlgItemText(hwnd,5,fs); if(f=100) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=200) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=400) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=800) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=1000) TCHAR dj1256; dj+; wsprintf(dj1,等级:%d,dj); SetDlgItemText(hwnd,6,dj1); if(f=2000) KillTimer(hwnd,1);MessageBox(NULL,TEXT(),TEXT(),MB_OK);ZeroMemory(cfk,sizeof(cfk);InvalidateRect(hwnd,NULL,FALSE); Init(); speed=600; SetTimer(hwnd,1,speed,NULL); InvalidateRect(hwnd,0,FALSE); else KillTimer(hwnd,1); PlaySound(TEXT(1/结束.wav),NULL,SND_FILENAME|SND_ASYNC); int i=MessageBox(NULL,TEXT(._是否重来_.),TEXT(提示),MB_OKCANCEL); if(i=IDOK) ZeroMemory(cfk,sizeof(cfk); InvalidateRect(hwnd,0,FALSE); SetTimer(hwnd,1,speed,NULL); ReleaseDC(hwnd,hdc); return 0; case WM_KEYDOWN: hdc=GetDC(hwnd);switch(wParam) case VK_UP: case VK_SPACE: if(check(Pos.dir,(Pos.sharp+1)%4,Pos.x,Pos.y) /同个函数传替的参数值不同,其每个函数返回的值也不同。 PlaySound(TEXT(1/xuanzhuan.wav),NULL,SND_FILENAME|SND_ASYNC); tuxing(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y,0); +Pos.sharp%=4; /使用两个tuxing函数,第一个的颜色与背景颜色一样,另一个就是本身颜色 tuxing(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y,1); return 0; case VK_LEFT: if(check(Pos.dir,Pos.sharp,Pos.x-20,Pos.y)PlaySound(TEXT(1/xuanzhuan.wav),NULL,SND_FILENAME|SND_ASYNC);tuxing(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y,0);Pos.x-=20;tuxing(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y,1);return 0; case VK_RIGHT: if(check(Pos.dir,Pos.sharp,Pos.x+20,Pos.y)PlaySound(TEXT(1/xuanzhuan.wav),NULL,SND_FILENAME|SND_ASYNC); tuxing(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y,0);Pos.x+=20;tuxing(hdc,Pos.dir,Pos.sharp,Pos.x,Pos.y,1);return 0; case VK_DOWN: PlaySound(TEXT(1/xuanzhuan.wav),NULL,SND_FILENAME|SND_ASYNC); speed=100;SetTimer(hwnd,1,speed,NULL); ReleaseDC(hwnd,hdc); return 0; case WM_COMMAND: switch(LOWORD(wParam) case 1: if(gameover() if(pause) PlaySound(TEXT(1/Pause.wav),NULL,SND_FILENAME|SND_ASYNC); KillTimer(hwnd,1); SetWindowText(hwndbutton,TEXT(继续); else PlaySound(TEXT(1/Pause.wav),NULL,SND_FILENAME|SND_ASYNC); SetTimer(hwnd,1,speed,NULL); SetWindowText(hwndbutton,TEXT(暂停); SetFocus(hwnd); /把输入焦点换回到主窗口 +pause%=2; return 0; case 2: PlaySound(TEXT(1/Pause.wav),NULL,SND_FILENAME|SND_ASYNC);KillTimer(hwnd,1);int i=MessageBox(hwnd,TEXT(确定要退出吗?),TEXT(提示),MB_OKCANCEL);if(i=IDOK) KillTimer(hwnd,1); PostQuitMessage(0);else PlaySound(TEXT(1/Pause.wav),NULL,SND_FILENAME|SND_ASYNC); SetTimer(hwnd,1,speed,NULL); return 0; case 3: PlaySound(TEXT(1/Pause.wav),NULL,SND_FILENAME|SND_ASYNC);KillTimer(hwnd,1);int i=MessageBox(hwnd,TEXT(确定要重新开始吗?),TEXT(提示),MB_OKCANCEL);if(i=IDOK)ZeroMemory(cfk,sizeof(cfk);InvalidateRect(hwnd,NULL,FALSE);SetTimer(hwnd,1,speed,NULL); else PlaySound(TEXT(1/Pause.wav),NULL,SND_FILENAME|SND_ASYNC); SetTimer(hwnd,1,speed,NULL);return 0; case 4: ZeroMemory(str,sizeof(str); GetDlgItemText(hwnd,7,str,sizeof(str)/sizeof(TCHAR); SetFocus(hwnd); return 0; case ID_MENUITEM40001: PlaySound(TEXT(1/Pause.wav),NULL,SND_FILENAME|SND_ASYNC); KillTimer(hwnd,1);MessageBox(hwnd,TEXT(1.游戏简单,不过功能也齐全.n 2.此游戏可能和其他的有点不n 同之处,其他的都是以分数来玩n 3.的!而我的不同之处是以时间n 来玩的!根据时间来换取不同的n 音乐!时间越久速度也越快!_n),TEXT(说明),MB_OK);SetTimer(hwnd,1,speed,NULL); return 0; case I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大挑商业计划书
- 2025年美容行业员工劳动合同8篇
- 2025供应商安全合同7篇
- 深圳公积金代办协议书
- 草契开发协议书
- 招标代理库委托协议书
- 绫华结婚协议书
- 考试补助协议书
- 烤肉店厨师合同协议书
- 英欧经贸协议书
- 护士进修汇报护理专业发展趋势分析
- KISSSOFT操作与齿轮设计培训教程
- 广东省广州市越秀区2024年中考二模语文试卷附答案
- 城乡规划原理题目及答案
- 25道中国建筑商务合约经理岗位常见面试问题含HR常问问题考察点及参考回答
- JGT116-2012 聚碳酸酯(PC)中空板
- DBJ-43T507-2019湖南省建筑物移动通信基础设施建设标准
- 《华为国际化之路》课件
- 高空作业安全责任协议书防盗网
- 关于地下室渗漏水问题的总结及堵漏措施
- (完整版)聚乙烯课件
评论
0/150
提交评论