




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指针式时钟课程设计报告课程名称: 设计题目: 专业班级: 姓 名: 学 号: 时 间: 指导教师: 23目 录1、基本功能描述22、设计思路3 2.1.程序流程图32.2.流程图相应说明43、软件设计63.1.设计步骤 63.2.界面设计103.3.关键功能的实现113.3.1模拟时钟的显示11 3.3.2加载位图作为时钟背景133.3.3启动时钟143.3.4设置时间153.3.5暂停与开始15 3.3.6整点报时163.3.7秒表计时173.3.8页面刷新及防抖动194、课程设计问题总结205、结论与心得216、参考文献237、附录237.1.调试报告237.2.测试结果251、基本功能描述本课程设计的指针式时钟程序是基于mfc的windows应用程序设计,程序运行成功后,单文档界面会出现指针式时钟,数字式时钟和秒表计时器。指针式时钟圆表盘圆周上有分布均匀的12个大刻度,每个大刻度分别对应一个小时。每两个大刻度之间还有4个小刻度,刻度显示清晰,并且3、6、9、12刻度点还采用“broadway”数字字体显示。时针,分针和秒针由粗细及长度各不相同的黑色绘成,其中时针采用镂空结构,秒针呈黑色细线状,尾部有实心圆点连接使得更容易观测。时钟界面为圆形,钟的内框为黑色,外框为宽度更粗的枚红色,并且钟面中心背景设计有一张图片,如此的结构设计使得本时钟更有特色。指针式的时钟表盘右面则是一个以数字式显示时间的数字钟,数字时钟表盘为矩形,字体亦采用深枚红色,其日期显示的格式是xxxx年xx月xx日,时间显示格式是xx:xx:xx,小时为24进制,分钟和秒是60进制。页面的菜单栏中设有时钟控制的栏目,用来对所显示的时间进行设置。用户可直接点击菜单栏中时钟控制的下拉列表的选项,或者直接按对应的快捷键。时钟整体外观简单时尚,使用方便快捷。页面的菜单栏设有时钟控制,可以对所显示的时间进行设置,用户可直接点击菜单栏中时钟控制的下拉列表的选项,或者直接使用快捷键。本模拟时钟可实现如下功能:(1)指针式的时钟和数字式的时钟显示的时间同步,且与计算机的系统时间一致,能显示的具体内容是年、月、日、时、分、秒。若想获得系统准确时间只需单击启动时钟。(2)用户可自定义时间,单击设置时间后,在弹出的对话框中填入符合要求的日期时间,点击确定,两时钟自动跳到所设置的时间。(3) 用户可点击菜单栏中的时钟控制中的暂停,开始选项即可实现随时暂停,开始时钟。(4)本时钟可实现整点报时,每整点时会有铃声播放出来并弹出消息框显示提示整点。(5)鼠标左键单击秒表计时器的启动按钮,可开始秒表计时,点击停止,即停止计时。2、设计思路 2.1程序流程图调用moveto( )、lineto( )绘出指针调用getcurrenttime( )获取当前系统时间调用getfont( )创建数字钟字体调用settimer( )设置时间间隔调用textout( )输出数字时间程序开始初始化全局变量the app( )调用oncreate( )对时间进行初始化调用getclientrect( )获取客户区定义画笔cpen( )和画刷cbrush( ) 调用ellipse( )绘制指针时钟钟面及绘制数字时钟对话框调用ontimer( )处理时间消息,ondraw( )刷新窗口显示调用setlocaltime( )时间显示?nyy设置时间?y暂停?是否启动秒表?nn调用killtime()y调用onlbuttondown()n退出?y程序结束 2.2 流程图相应说明 (1)程序运行开始定义全局变量theapp(),对构造函数及相应函数进行初始化,调用oncreate()函数对时间变量进行初始化 (2)在void chhlview:ondraw(cdc* pdc)函数体中,通过调用getclientrect()函数获区客户区,定义屏幕的大小并确定时钟中心坐标。接着定义画笔cpen()、画刷cbrush()设置钟面圆周的粗细和颜色(外围圆周是黑色,内围是粗的枚红色),然后调用ellipse()函数确定钟面圆周大小。采用settextcolor()函数定义输出字体颜色,并用createfont()函数定义输出文本字体,采用textout()函数输出字体。调用moveto(),lineto()绘制表盘刻度及指针。通过得到在chlview中定义变量hour,minute,second的值,计算时针、分针、秒针在表盘刻度上的位置。无论何种指针,每次转动均以pi/30弧度(1s的刻度)为基本单位,且都以表盘中心为转动圆心。圆心坐标为(centerx,centery),端点坐标(x,y)=(centerx+指针长度*sin,centery+指针长度*cos)。对数字式时钟的输出控制可通过文本输出格式语句t_data.format(%02年%02d月%02d日,year,month,day)来实现输出值的一一对应。其中:时针偏转弧度=(hour+minute/60+second/3600)*pi/6 分针偏转弧度=(minute+second/60)*pi/30 秒针偏转弧度=second*pi/30指针偏转弧度 代表指针顺时针方向相对于0刻度的弧度。(3)首先在启动时钟前,时钟是不工作的。启动时钟后,在void chhlview: onstarttime()函数体中调用settimer()函数设置时间间隔,每一秒钟产生一次时间消息。同时通过调用getcurrenttime()函数获取系统时间,使得该时钟显示的时间与计算机的系统时间相一致。invalidaterect(null,true)更新窗口,指针开始转动。在window中,定时器每隔1秒钟就会发出一个wm_timer消息。mfc的windows类中提供了wm_timer消息处理函数ontimer(),通过ontimer()函数处理时间消息,对秒加一,并进行时间判断,计算正确时间,从而每1秒钟调用ondraw()函数对界面进行更新,实现钟表走的过程。(4)启动时钟后,用户可对时钟进行控制,单击菜单栏中的“时钟控制”选项,在下拉列表中自行选择(或者按对应的快捷键)。用户可单击“设置时间”选项,在弹出对话框中设置时间后点击确定,程序通过调用onsettime()处理该消息,对时间进行重新赋值后,然后再次调用ondraw()函数进行刷新重绘,实现设置时间功能;单击“暂停”选项后,通过函数onstoptime()处理消息,调用killtimer()函数,终止定时器运行,达到暂停的效果;单击“开始”选项,通过调用函数oneditrestart()处理消息,调用onsettime()函数,重新启动定时器,重新对时间进行更新后,调用ondraw()函数实现指针的再次运转。当点击菜单项中的“退出”或直接关闭画面后,程序停止运行。3、软件设计 3.1.设计步骤(1) 首先在vc+6.0使用mfc appwizard(exe)创建一个基于单文档的mfc工程,定义项目名称为hhl后单击确定。在稍后弹出的mfc应用程序向导步骤1对话框中选择应用程序的类型为单个文档,其它选项使用默认选项,直接点击完成,完成单文档工程的创建。(2)右键点击在classview选项卡中的chhlview,在弹出的列表中选择中的add member variable即直接采用向导定义int型的时间变量year、month、day、hour、minute、second和坐标变量centerx,centery,及秒表变量watch,还有一个double型的表示指针转动角度变量radians,另外定义一个cstring 型的表示输出文本字体类型变量strdigits。(3)单击菜单栏中的“查看”选择“建立类向导”在chhlview类中添加消息处理函数oncreate( )、ontimer( ),具体操作如下图1所示。然后分别单击edit code在hhlview.cpp中的int cliujianview:oncreate(lpcreatestruct lpcreatestruct)函数中添加对日期及时间初始化的代码,将日期赋值为2015年7月5日,时间为0时0分0秒。并且在void chhlview:ontimer(uint nidevent)函数中添加消息处理函数代码。详细源代码见压缩文件。 图1 添加消息处理函数oncreate( )、ontimer( )(4)在fileview中的hhlview.cpp找到voidchhlview:ondraw(cdc* pdc)函数,添加绘制时钟钟面、刻度、指针、数字时钟的代码。详细源代码见压缩文件。(5)在resource view选项卡中打开menu,双击idr_mainframe,在菜单项中添加一个“时钟控制”的菜单项,再在“时钟控制”的目录下分别添加“启动时间”、“设置时间”、“暂停”、“开始”等选项,菜单效果图如图2所示。右击各选项选择“属性”设置对应的id号及标题。标题中可加上&和一个字母(如&q启动时钟),然后打开accelerator, 双击idr_mainframe,双击下面空白处,在弹出的对话框中填入对应的id号及设置快捷键。然后右击选择“建立类向导”为菜单连接视图类chhlview,选择个选项对应的消息处理函数,单击edit code在各消息处理函数中添加处理该消息的源代码。菜 单设置各选项情况表如表1所示。 图2 菜单效果图表1 菜单设置各选项情况表操作id对应类对应消息处理函数启动时钟id_starttimechhlviewonstarttime()设置时间id_ settimechhlviewonsettime()暂停id_stoptimechhlviewonstoptime()开始id_edit_restartchhlviewoneditrestart()(6)在resource view选项卡中右击dialog,选择“插入dialog”,新建一个对话框,右击选择“属性”,将对话框id设置为idd_settime_dialog,将标题改为设置时间。设计对话框界面风格,使包括修改系统时间年、月、日、时、分、秒六个编辑框,如图3所示。编辑这六个编辑框的属性,使控制id分别为idc_edit_year、idc_edit_month、idc_edit_day、idc_edit_hour、idc_editminute、idc_edit_second。右击选择“建立类向导”选择create a new class,将类名定义为cinputdlg,选择member variable选项卡,为该类添加六个成员变量分别对应六个编辑框中的输入变量,并且设置各变量的输入值范围,如图4所示。 图3 设置日期和事件对话框图4 为cinputdlg类添加成员变量(7) 给程序添加一个标题。找到hhldoc.cpp中的boolcliujiandoc:onnewdocument()函数,在其中加上语句:settitle(模拟时钟);。(8) 对程序进行反复调试、更改,直至成功运行,完成所要求的全部功能。3.2界面设计模拟时钟程序的主界面如图5所示,指针式时钟在整个客户区的左边,数字式时钟在右边。指针式时钟界面自定义变量的具体情况如下表2所示。图5 模拟时钟的主界面表2 指针式时钟界面自定义变量参数设置画笔宽度颜色(rgb)表盘内围pen13rgb(0, 0,0) 黑色表盘外围pen120rgb(165, 42,42) 深枚红色时针hourpen10rgb( 0, 0, 0) 黑色分针minutepen4rgb( 0, 0, 0) 黑色秒针secondpen1rgb( 0, 0, 0) 黑色单击“设定时间”弹出的对话框如图3所示,具有6个编 辑框和相应的6个静态文本框,其中编辑框控件的主要参数对应情况如下表3所示。表3 重新设定时间编辑框控件的主要参数控件类型控件对应id值变量名输入数据范围年intidc_edit_yearm_year月intidc_edit_monthm_month112日intidc_edit_daym_day131时intidc_edit_hourm_hour023分intidc_edit_minutem_minute059秒intidc_edit_secondm_second0593.3关键功能的实现 3.3.1模拟时钟的显示指针式时钟的显示主要是对界面的绘制,其实现代码在hhlview.cpp文件中。其中界面绘制代码在void chhlview:ondraw(cdc* pdc)函数中。采用settimer()产生周期的时间消息,调用ondraw()函数对画面进行刷新重绘。每次重绘的时候,由于ontimer()函数控制时间的改变而导致每次绘制显示的画面不同,从而实现时钟动态显示(1) 在chhlview.cpp中的void chhlview view:onstarttime()函数中调用settimer()函数,settimer(1,1000,null);意义为指定计时器id为1,且规定计时器的时间间隔为1000ms,即每隔1s调用一次ontimer()函数null代表获取的是系统振荡时间。而ontimer()函数中语句updatewindow();的作用是更新窗口、重绘时钟,故而,综合两函数得到的结果是每隔1s窗口即时重绘一次,实现时钟显示值的实时更新。(2) ondraw()函数首先采用getclientrect()函数获取窗口大小并确定钟面中心坐标(centerx,centery)。接着定义画笔cpen()、画刷cbrush()设置钟面圆周的粗细和颜色,然后调用ellipse()函数确定钟面圆周的大小。采用settextcolor()函数定义输出字体颜色,并用createfont()函数定义输出文本字体,采用textout()函数输出字体。调用moveto()和lineto()绘制表盘刻度及指针。3、6、9、12刻度点采用“broadway”数字字体显示。调用bitblt()函数加载位图作为时钟的背景。对于时针,首先利用时间变量计算出时针偏转弧度。偏转弧度radians =(double)hour +(double)minute / 60.0+(double)second / 3600)*pi/6.0 ;然后定义要采用的颜色画笔:cpen hourpen( ps_solid, 10, rgb( 0, 0, 0) ); pdc-selectobject ( &hourpen );采用moveto()定义时针起点pdc-moveto( centerx, centery );接着利用偏转角度及自定的时针长度计算出时针的终点,利用lineto()画出时针 pdc-lineto(centerx)(int)(double)80*sin( radians),centery-(int)(double)80*cos(radians);最后采用同样的原理对时针进行镂空处理:cpen hourpen1(ps_solid,3,rgb(200,200,200); pdc-selectobject(&hourpen1);pdc-moveto(centerx+(int)(double)25*sin( radians),centery-(int)(double)25*cos(radians); pdc-lineto(centerx+(int)(double)75*sin( radians),centery-(int)(double)75*cos(radians); 对于分针、秒针的画法与时针类似,详细源代码见压缩文件。而对于数字钟,首先编写数字钟输出日期的格式,t_date.format( %02d年%02d月%02d日,year,month,day);最后采用textout()对时间和日期进行输出。3.3.2加载位图作为时钟背景首先准备一张.bmp格式的图片,单击菜单栏的“插入”,选择“资源”,选择弹出的对话框中bitmap后单击“引入”,然后选择所准备的照片即可。然后在voidchhlview:ondraw(cdc*pdc)函数中加入如下代码(需加在画指针的代码前,否则会覆盖住指针):cdc dcmemory;dcmemory.creatcompatibledc(pdc);cbitmap poldbmp;poldbmp.loadbitmap(idb_bitmap1);dcmemory.selectobject(&poldbmp);pdc-bitblt(centerx-100,centery-65,400,400,&dcmemory,1,1,srccopy);3.3.3启动时钟单击菜单项中的“启动时间”选项,产生消息,调用消息处理函数void cchhlview:onstarttime(),其中该函数中调用了settimer()函数,启动定时器,开始计时。同时利用getcurrenttime()函数获得当前时间,对时间变量进行更改。具体代码如下:void chhlview:onstarttime() settimer(1,995,null);/安装一个计时器crect rect;getclientrect(rect);/取得客户区域ctime time = ctime:getcurrenttime(); /获取系统时间year=time.getyear();month=time.getmonth();day=time.getday();hour=time.gethour();minute=time.getminute();second=time.getsecond();3.3.4设置时间单击菜单项中的“启动时间”选项,产生消息,调用消息处理函数void cchhlview:onstarttime(),其中该函数中调用了settimer()函数,启动定时器,开始计时。同时利用getcurrenttime()函数获得当前时间,对时间变量进行更改。具体代码如下:void chhlview:onstarttime() settimer(1,995,null);/安装一个计时器crect rect;getclientrect(rect);/取得客户区域ctime time = ctime:getcurrenttime(); /获取系统时间year=time.getyear();month=time.getmonth();day=time.getday();hour=time.gethour();minute=time.getminute();second=time.getsecond();3.3.5暂停与开始单击菜单项中的“暂停”后,程序调用void chhlview:onstoptime()函数,采用killtimer()函数终止定时器。单击“开始”选项后,程序调用void chhlview:oneditrestart()函数,采用settimer函数重启定时器。具体代码如下:void chhlview:onstoptime() killtimer(1); /停止定时器void chhlview:oneditrestart() settimer(1,995,null);crect rect;getclientrect(rect);/取得客户区域3.3.6整点报时每到整点时会有铃声播放出来,并弹出消息框显示提醒整点。首先准备一首.wav格式的铃声,在工程所存文件夹中的debug文件夹中新建一个sound文件夹,将铃声存进去。然后在hhlview.cpp中添加三个头文件,分别为#include、#pragma comment(lib,winmm.lib)、#include mmsystem.h 。最后在void chhlview:ontimer(uint nidevent)函数中添加如下代码:if( minute=0 & second=0 ) /整点报时playsound(sound/zhong.wav,null, snd_filename | snd_async );afxmessagebox(亲整点啦!);3.3.7秒表计时1)在chhlview:chhlview()设定初始化值即watch=0,并在ondraw函数中添加秒表的两个按钮位置变量。 /秒表的按钮变量crect m_watchstart;crect m_watchstop;2)设定秒表计数器及按钮位置/设定秒表计数器及按钮位置m_watchstart=crect(670,310,750,340); /启动m_watchstop=crect(780,310,850,340); /停止3)在ondraw函数中添加秒表显示代码。/秒表显示pdc-rectangle(610,220,880,370);pdc-textout(730,220,秒表);int minsec=watch%100;int sec=(watch/100)%60;int min=(watch/100)/60;cstring m_time;m_time.format(%02d:%02d:%02d,min,sec,minsec);pdc-textout(720,270,m_time);pdc-rectangle(&m_watchstart);pdc-rectangle(&m_watchstop);pdc-textout(m_watchstart.left+18,m_watchstart.top+5,启动);pdc-textout(m_watchstop.left+18,m_watchstop.top+5,停止);4)秒表定时器消息处理/秒表定时器消息处理if(nidevent=2)watch+;invalidaterect(m_watchshow,false);5) 添加鼠标消息处理函数。进入classwizard的message map选项卡,在chhlview类的message列表框中选择鼠标消息wm_lbuttondown,按下add function按钮添加成员函数onlbuttondown。如图6所示: 图6.添加onlbuttondown鼠标处理函数在该函数中添加控制代码如下:void chhlview:onlbuttondown(uint nflags, cpoint point) / todo: add your message handler code here and/or call defaultcrect m_watchstart;crect m_watchstop;m_watchstart=crect(670,310,750,340); /启动m_watchstop=crect(780,310,850,340); /停止 if(m_watchstart.ptinrect(point) watch=0; settimer(2,10,null); if(m_watchstop.ptinrect(point) killtimer(2); cview:onlbuttondown(nflags, point);3.3.8页面刷新及防抖动1) 页面刷新在定时器1函数中添加表盘时钟和数字时钟的刷新代码。 crect m_watchpan; crect m_watchzhong;m_watchpan=crect(centerx-150,centery-150,centerx+150,centery+150);m_watchzhong=crect(620,80,870,210);invalidaterect(m_watchpan,false);invalidaterect(m_watchzhong,false);2)在定时器2中添加秒表时间显示区域的刷新函数crect m_watchshow; m_watchshow=crect(720,270,800,340); /刷新区域invalidaterect(m_watchshow,false);客户区绘图比较多,颜色与背景色相差比较大时,客户区会出现抖动。这是由于当屏幕刷新时,默认将窗口用系统背景颜色填充,即用白色将窗口刷一遍,然后再在客服区画上图形,当颜色相差较大时,人眼会形成暂离,便会感觉抖动。我们采用一种最简单的方法,即重载onerasebkgnd()函数。单击菜单栏中的“查看”选择“建立类向导”在chhlview类中添加消息处理函数wm_erasebkgnd,点击edit code,在bool chhlview:onerasebkgnd(cdc* pdc) 函数中添加语句return true;将chhlview:onerasebkgnd(pdc);语句注释掉。bool chhlview:onerasebkgnd(cdc* pdc)return true;/return cview:onerasebkgnd(pdc);4.课程设计过程中问题总结1.程序中如何实现时钟时间与计算机系统时间保持一致?答:程序是通过调用getcurrenttime()来获取系统时间,由settimer()函数设定准确的发出时间消息的间隔,然后由ontimer()对时间消息响应的同时对时间进行调整,从而使时间可以与系统时间同步。2.时钟运行后点击暂停,然后再点击开始,时钟指针是如何变化的?该过程怎么实现?答:模拟时钟显示的时间与系统时间相一致,是通过重新获取系统时间实现的。3.说明settimer()函数、wm_timer消息和ontimer()函数的调用关系?答:mfc的windows类提供了wm_timer消息处理函数ontimer(),应在该函数内进行更新时间窗格的工作,利用classwizard给cmainframe类加入wm_timer消息处理函数ontimer(),cmainframe: ontimer()函数是在系统发给框架窗口消息wm_timer时调用的,在cmainframe:oncreate()函数内调用cwnd: settimer()以安装一个计时器,settimer()的第一个参数指定计时器的id,第二个参数规定了计时器的时间间隔,如间隔是1s,则每隔1s就调用一次ontimer()函数,第三个参数null表示由系统调用ontimer()函数。 4.重载onerasebkgnd()函数,禁止画刷清除背景,会使每次画出的图覆盖在原图上,这里可以采用双缓冲的方式来避免这一问题。5.结论与心得经过两个多星期的时间,课程设计所要求设计的指针式时钟便成功完成了。它能显示指针式和数字式的时钟,并且与计算机系统时间保持一致,也可以打开菜单项自行设置时间。此外,它还有秒表计时功能。整个页面简洁清晰,方便用户读取,且操作简单,符合课程设计中的要求。通过本次课程设计,我们对日常生活中的时钟的工作原理有了比较深入的了解,并让我们学会了在visual c+ 6.0环境下,编写mfc的windows应用程序的基本操作和方法。mfc定义了一个标准的应用程序框架,为我们提供了大量可重用代码,隐藏了程序设计中的许多复杂工作,在程序编写中,通过使用原有的类和派生新的类,各种控件的添加,类的连接,菜单设计,消息添加,函数编写,使我们对面向对象程序设计有了深刻认识,掌握了程序调试方法,大大提高了我们的编程能力和动手能力。在指针式时钟的绘制过程之中,我们要考虑表盘坐标的定位,时钟的时针、分针和秒针的长短、粗细以及颜色的选取,以便指针重合时用户也可轻易辨认,还要考虑指针式的时钟与数字式的时钟与系统时间保持一致。在不断的改正错误和调试的过程之中,所要求设计的指针式时钟总算能成功运行。通过这次课程设计,也使我认识到理论与实际相结合的重要性,同时基本上能够掌握visual c+编程中的对话框编程的步骤,真的是受益匪浅。这次的设计成果也让我体会到了在编程方面工作流程的重要性、心思缜密的必要性,同时也让我对课堂上的知识更加深刻的理解,在课程设计期间我们还充分运用了网络和图书馆里的资源,参考了许多作品和相关编程知识,这些工作也让我们对更多的程序设计有了初步的概念,能为将来的学习工作打下良好的基础。 6、参考文献1 揣锦华.面向对象程序设计与vc+实践.西安电子科技大学出版社,2005.3黄维通,贾续涵.visual c+面向对象与
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年肿瘤精准医疗临床实践中的数据挖掘与应用研究
- 2025年家庭教育指导服务市场细分领域市场细分与竞争格局
- 2025年工业互联网平台同态加密技术在工业研发设计中的可行性探讨报告
- 2025年智能可穿戴医疗设备在心血管疾病早期筛查与康复中的市场需求与技术创新趋势
- 2025年工业互联网平台量子密钥分发技术产业链上下游协同发展报告
- 2026届江苏省泰兴市第三高级中学高二化学第一学期期末检测模拟试题含答案
- 2025年Python二级考试冲刺押题卷 知识点深度讲解与应用
- 辽宁省抚顺市一中2026届化学高二第一学期期末考试试题含答案
- 2025年公务员考试行测图形推理模拟试卷 解题技巧专项训练
- 2025年初级会计职称考试冲刺押题试卷 财务管理专项训练
- GB/T 43681-2024生态系统评估区域生态系统调查方法
- 饮料风味稳定性与感官评价
- 充电宝市场调研报告
- 后端开发入门课件
- 高职应用写作课件
- 译林版牛津英语9A单词背记默写纸
- 神经内科头痛健康宣教
- 熊廷弼之死:晚明政局的囚徒困境
- 幼儿歌曲弹唱伴奏训练(学前教育专业)全套教学课件
- 统编人教部编版语文五年级上册第一单元教材解读分析文本解读及教学目标教学建议教研备课校本培训
- IATF16949过程绩效指标一览表
评论
0/150
提交评论