系统级编程总结(精选6篇)
——12级软件编程班
尊敬的各位家长:
你们好!首先,对各位家长的到来表示热烈的欢迎,相信今天在坐的各位家长都是很关心你的孩子在校的学习,生活情况的。因为在此次会议前有很多的家长因为工作忙、没时间与我们老师交流孩子在家或学校的情况,借此机会,感谢你们能从百忙中抽空来参加这次家长会议,望你们今后能像今天这么积极的继续支持、配合我们的工作。首先向各位家长介绍一下我们软件班的整体情况:
本班有24名学生,男生16人,女生8人。从接手这个班两个多月里,在这期间只跟四五位家长见过面,所以学生在校期间的学习生活情况家长知之甚少。我们班是部里人数中等的一个班,优点与缺点并存。优点就是,老师有条件也有精力去关注每一个孩子,任课老师可以更好了解和掌握学生的学习情况,进而对症下药,班主任可以更有效的去了解学生的近期的思想动态,及时发现存在的问题,及时督促学生纠正。当然,班级存在的缺点也不少,上基础课时爱玩手机,课堂气氛不活跃、思维跟不上任课老师等等。在纪律方面,男生做的要比女生好一点,部分女生较懒散,早上上自习有迟到的现象。学习方面,有些学生不知自己预习、复习,只是等老师提醒,没有学习的自觉性。总的来说,我认为我班的学生都是好孩子。只是有些小缺点,需要一点点的去改正。
当然,我们要承认一个事实,来我们学校的孩子有一个共同点:学习较被动。如果职校老师上课依照一中、卫中老师的上课方式,那么我们学校的教育必定不会成功。针对孩子的特点,我们学校的课程安排要遵循一个原则,注重实践,将理论知识尽量缩到最少,学生的大部分时间都是在机房或者车间度过的。这也是全国职业教育的特点。在这里,我们是为了让孩子实实在在能做出东西,并不是教会一些公式、概念、做题方法等。然而,孩子只有先学会做人,才能进一步成才,家庭教育对孩子一生至关重要,基于此,我想向家长提些建议,希望我们能携起手来,共同教育孩子,使他们学习知识,健康成长。
为了更好地规范孩子们的行为习惯,我要求学生早上不能迟到,来了以后就早读。我们学校一直很重视学生的早读和卫生问题,包括环境卫生和个人卫生。为此,学校专门为每个部安排了一个洗澡日,我们部是星期二,在这一天,老师要督促每一位学生去洗澡。虽然是一些小事,但却能体现出一个孩子的素质到底,能把这些事坚持到底做下去的学生并不多,但凡做下去的孩子都很了不起。
最后,我希望家长、学校之间加强联系。孩子要健康成长,光靠学校教育肯定是不够的,家长、学校结合才能使孩子不断进步,你们抽空可以来学校也可以打电话问问孩子的情况,或反映一下在家里的情况,以便我们及时针对你的孩子的特点展开教育。我们要做到:无限相信孩子的潜力;永远不要对孩子失望;决不吝啬父母的表扬和鼓励;教给孩子一生有用的东西。同时,我们在工作中,难免也会出现疏忽或不足之处,恳请家长们批评指出,如果我们在教学中有什么不合理之处,也欢迎家长们能坦诚与我们交流。但请大家相信,我们会尽全力对每一位孩子负责。
关键词:自主水下航行器 便携式 技术总结
Technical Summary of Engineering Technology of 50 Kilogram Portable Autonomous Observation System in 2014
Song Baowei1 Yan Weisheng1 Cai Ting2
(1.Northwestern Polytechnical University;2.Xi'an Tianhe Defense Technology Co.,Ltd.)
Abstract:The report is the technical summary of engineering technology of 50 kilogram portable Autonomous Observation System in 2014,and consists of the improvement on sample vehicle,the examination of the improved sample vehicle,the update on the user interface(UI),the preparation of system industrialization,and the main research achievement in 2014 and the work plan of next year.
Key Words:Autonomous underwater vehicle;Man-portable;Technical summary
智能车核心是飞思卡尔xs128芯片,尽可能利用单片机里的硬件资源是程序的核心。程序理应要有漂亮的算法,但由于智能车任务不复杂,合理管理和配置硬件资源才是最重要的。 编程步骤(关键找到程序框架)
I.程序第一步:通过配置寄存器来编写单片机资源的底层程序。
A.配置总线时钟频率(通过锁相环电路)
B.配置输出PWM(脉宽调制波)功能(占空比)
C.配置定时中断功能(PIT定时中断)
D.配置输入捕捉功能(脉冲累加器)
E.配置基本输入输出端口的电平
II.程序第二步:利用底层程序编写各种其他硬件的驱动程序
A.驱动电机、舵机(通过PWM波)
B.驱动传感器发射和接收(通过IO端口和PWM波)。
C.驱动码盘测速装置并接收。(通过输入捕捉功能)。
III.程序第三步:连接各种硬件,顺序完成巡线任务。
IV.程序第四位:利用控制思想,不断调试和优化程序。
编程思想(程序关键要清楚)
I.尽量使各种功能都封装成函数。
II.程序分层次,不同层次尽量写在不同文档中(函数层层调用)。
III.主函数中简单明了,思路、层次分明。
IV.各种工具函数同一管理。(延时,绝对值,取最大最小值等)
V.重点参数使用全局变量方便调试。
控制方法:使用PID控制方法(关键在调试)
I.电机调试PID
(以预设速度与实际检测的速度的差值为偏差值error)
II.摇头舵机PID
(以传感器偏离中心距离为偏差值error)
III.转向舵机PID
(以摇头舵机偏离中心的角度为偏差值error)
堆,可以动态分配,大小可近似认为无限制,可以一直存在
堆:malloc(), free()需要自己申请与自己负责释放!适用于事先不知道需要分配多大空间的情况。
栈:void fun(int x){int y;...}系统帮你分配与释放。
/////////////////////////////////////////////////////////////////// 一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap)— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回
收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。已初始化全局/静态变量,在整个软件执行过程中有效;.bss函数调用栈,其中的内容在函数执行期间有效,并由编译器负责分配和收回;
.heap程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
二、堆和栈的理论知识 2.1申请方式
stack: 由系统自动分配。例如,声明在函数中一个局部变量 int b;系统自动在栈中为b开辟空间 heap: 需要程序员自己申请,并指明大小,在c中malloc函数 如p1 =(char *)malloc(10);在C++中用new运算符 如p2 = new char[10];但是注意p1、p2本身是在栈中的。
2.2 申请后系统的响应
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢 出。
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表
中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的
首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。
另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部
分重新放入空闲链表中。
2.3申请大小的限制
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意
思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有 的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将
提示overflow。因此,能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储 的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小
受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
2.4申请效率的比较:
栈由系统自动分配,速度较快。但程序员是无法控制的。
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈是
直接在进程的地址空间中保留一块内存,虽然用起来最不方便。但是速度快,也最灵活。
2.5堆和栈中的存储内容
栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可
执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈 的,然后是函数中的局部变量。注意静态变量是不入栈的。
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地
址,也就是主函数中的下一条指令,程序由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。
2.6存取效率的比较
char s1[] = “aaaaaaaaaaaaaaa”;char *s2 = “bbbbbbbbbbbbbbbbb”;aaaaaaaaaaa是在运行时刻赋值的;
而bbbbbbbbbbb是在编译时就确定的;
但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。
比如: #include void main(){ char a = 1;char c[] = “1234567890”;
char *p =“1234567890”;a = c[1];a = p[1];return;} 对应的汇编代码 10: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] 0040106A 88 4D FC mov byte ptr [ebp-4],cl 11: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] 00401070 8A 42 01 mov al,byte ptr [edx+1] 00401073 88 45 FC mov byte ptr [ebp-4],al 第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到
edx中,再根据edx读取字符,显然慢了。
2.7小结:
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
最近几周一直在弄程序,说实话真的很累,但累中也有成功的快乐。我觉得学到了很多东西,这是只看课本知识所不能学到的。
说实话,以前我一直没学过java虽然我也知道java的重要性,可是即使上课听了,不实践还是掌握不了。因为种种原因,今年我没有买笔记本。没有机器,仅仅靠每周一次的上机练习是绝对不够的。所以我就插空调程序,在舍友们不用的时候自己再接她们的电脑调。
以下是我今年入职公司的编程经验总结:
1、当性能遇到问题时,如果能在应用层进行计算和处理,那就把它从数据库层拿出来。排序和分组就是典型的例子。在应用层做性能提升总是要比在数据库层容易的多。就像对于mysql,sqlite更容易掌控。
2、关于并行计算,如果能避免就尽量避免。如果无法避免,记住,能力越大,责任越大。
如果有可能,尽量避免直接对线程操作。尽可能在更高的抽象层上操作。例如,在ios中,gcd,分发和队列操作是你的好朋友。人类的大脑没有被设计成用来分析那些无穷临时状态——这是我的惨痛教训所得。
3、尽可能简化状态,尽可能局部本地化,适用至上。
4、短小可组合的方法是你的好朋友。
5、代码注释是危险的,因为它们很容易更新不及时或给人误导,但这不能成为不写注释的理由。不要注释鸡毛蒜皮的事情,但如果需要,在某些特殊地方,战略性的长篇注释是需要的。你的记忆会背叛你,也许会在明天早上,也许会在一杯咖啡后。
6、如果你认为一个用例场景也许“不会有问题吧”,它也许就是一个月后让你在发布的产品中遭受惨痛失败的地方。做一个怀疑主义者,测试,验证。
7、有疑问时,和团队中所有相关人交流。
8、做正确的事情——你通常会知道这指的是什么。
9、你的用户并不傻,他们只是没有耐心理解你的捷径。
10、如果一个开发人员没有被安排长期的维护你们开发的系统,对他保持警惕。80%的血、汗、泪水都是在软件发布后的时间里流的——那时你会变成一个厌世者,但也是更聪明的“行家”。
11、任务清单是你的好朋友。
12、主动让你的工作更有乐趣,有时这需要你付出努力。
13、悄无声息的崩溃,我仍然会为此从噩梦中惊醒。监控,日志,警报。清楚各种的假警报和不可避免的感觉钝化。保持你的系统对故障的敏感和及时警报。
14、复杂是大敌。
【关键词】舞台演出;声音处理;编程化;集控;MIDI控制协议;QLab 演出控制软件
文章编号:10.3969/j.issn.1674-8239.2015.01.006
在数字媒体重放已经能够达到高度自动化的今天,利用更加有效的音频媒体创意工具以使演出现场音响效果创作更方便、更灵活、更精确,进而极大地拓展戏剧表现力成为音响设计师的最新追求。
舞台戏剧是一种活生生的艺术样式——是一个存在于时间、空间、感觉和体验中的过程。为了适应现场演出中可能出现的各种复杂情况,需要充分利用先进的数字音频技术和创意工具对传统的现场演出扩声控制系统进行彻底的改进和重新定义,从而充分发挥新技术在现场演出中的巨大优势。在实践中探索现场声音处理如何达到更简洁和精确,以更加新颖的方式为戏剧演出提供更多的可能性,是一个值得研究的问题。
1 舞台演出的声音控制系统
戏剧是一种综合了时空元素、视听元素,深刻激发观众想象力的艺术形式。不同于电影相对固定的艺术样式,戏剧现场具有一种特别的活力,给观众以强烈的身临其境的感受,它最突出的特点在于即兴处理。同样,实时的戏剧表演带来的挑战就是在现场演出中各种随机事件随时可能发生。而对于一部电影来说,可以在同期拍摄完成之后,进行如对白编辑、ADR(Automatic Dialog Replacement,自动对白替换)配音、效果补录等等后期声音制作,将混录好的声轨作为完成的声音作品与画面合成一部完整的电影。但是对于一部舞台剧来说,声音的处理属于现场表演的一个组成部分,它存在相当大的随机性,给声音的制作与重放带来极大的困难。将音频媒体的制作和演艺控制转移到演出现场,是因为演出面对着现场观众,是实时的演出形式,应当具备其特有的制作流程和实现方式。这类系统的应用范畴可以包括音乐会、戏剧、会议扩声、主题公园与实景演出等,图1为话剧舞台演出声音集控系统的应用,但不包括电影、电视等“非实时”媒体的制作与播放过程。
笔者所讨论的编程化声音处理设计,是基于一个脚本设计程序并结合标准化的音频控制协议,将媒体播放与音频控制设备整合形成的一个程控音频重放系统,从而实现实时演出的声音创作的方法。
在所有可能的开放协议中,MIDI(Musical Instrument Digital Interface,音乐设备数字接口)是一个易于广泛应用的通用控制协议标准。其中MSC(MIDI Show Control,Real Time System Exclusive子集)可对所有现场和预设的演出事件通过脚本程序实时控制现场演出的专业设备,前提是这些设备具备相应的MIDI接口和对于MSC信号的解读能力。在一个集控系统网络中,MSC并不传输媒体信息,它只传输数字控制信息,如类型、时间或现场演出专业设备的状态指令,就是所谓的提示(Cue)。设备根据接收到的MSC指令,控制重放通道的状态。编程化声音处理主要讨论的是MIDI在基于Cue的控制领域的设计。
在现场演出中,舞台监督负责整场演出的顺利进行,他们需要在演出过程中,随着演出进度,对演员、音响、灯光、机械、视频等部门下达指令,要求各个部门按照预先设定的Cue(提示),顺序完成各自的任务。每一个Cue都在事件发生之前出现,除部门之间的配合以外,仅在单一部门内部也是在预先编程的基础上,在演出过程中根据Cue的指令来完成操作。一个Cue可以定义若干不同的控制事件,这取决于它对应的演出元素以及它们的前后关联。Cue在演出过程中用以触发媒体内容的播放状态以及专业设备的控制信号。现场演出通常是一个个事件接续而成,舞台监督根据舞台上发生的事件来下达指令。Cue的触发模式则是根据演出状况而定,例如某一句台词、一个动作或者演员的特定位置。在开心麻花的系列话剧《夏洛特烦恼》中,当男演员在公用电话亭向女演员表白遭到拒绝,男演员跪地悲恸大喊。此时,舞台监督向灯光师、音响师和机械师下达“GO(执行)”指令,处在待命状态的灯光师在调光台上“执行下一个Cue”以触发表现悲伤低沉情绪的冷光效果;音响师则触发“一剪梅”的音乐;机械师触发人工制雪机。此时,纷纷扬扬的雪花从舞台上空飘落,塑造一种凄冷失落的舞台氛围。
当演出的指令不基于事件发生,而依靠时间数据关系时,有两种基于时间的触发方式:其一,是包括演员在内的所有演出元素都与主时钟同步;其二,是甲动作相对于乙动作延迟一段时间触发。例如,设定演出开始后第15 min播放音乐,这就是系统同步于主时钟的情况下自动执行命令;设定此段音乐开始播放的第30 s触发枪声效果,即在演出开始后15 min 30 s,系统自动执行的枪响命令。由于枪声的触发是基于音乐播放这一事件,所以说是基于相对时间的命令执行。
单从技术角度考虑,基于时间的演出控制系统是相当灵活可靠的。例如主题公园看循环表演场景,大多都是基于主时钟系统的控制模式。在固定时间内播放预先准备的媒体素材,比如视频片段或音频声轨,自动控制灯光的启闭明暗。这样固定的重复表演,使用完全基于时间的自动控制系统,无需人工介入,可以省去很多人力成本。
但是,由于戏剧演出的随机性,导致演出过程中技术元素很少能够完全固定,通常是由计算机化的控制台在演出过程中特定时间点切换预先定义的一系列状态。一个主要基于事件的系统中也会存在一些内嵌的基于时间的序列,相反地,一个时间系统也能被中断,并等待一个事件触发其继续运行,成为事件与时间系统的综合体。
舞台演出是顺序实时进行的。音响部门需要设计一个混合程序,将播放对象与专业设备的状态参数编制为列表,然后在演出过程中逐一调用。列表顺序的设计可以基于演出时间,也可以基于演出事件。在具体的实施中,以演出时间线排出总表,以演出事件作为大列表,在此基础上的每一分支做事件细化,并在每一个细化的下列表里将时间与事件相结合,编入状态数据信息,随着演出进程,事件逐步发生,素材和设备的状态数据可以顺序调出,完成演出。
nlc202309011123
QLab(如图2)是一款面向苹果MAC OS开发的演出控制软件,能够满足现场演出的高精度音频视频控制播放要求,同时具备MIDI接口协议,便于与其他专业设备组成MSC系统。QLab作为现场演出声音编程的应用软件,具有直观的操作界面;既可以是单一的时间或事件控制系统,也可以将两者混合编程,能够基本满足现场演出对声音编程的需求。
2 舞台演出声音控制系统的应用
以下就几个不同Cue触发模式和控制方式的应用实例做一说明。
2.1 无线传声器的控制
在话剧《毛泽东和他的长子》里,根据场景进行了如下的编程,如图3所示。这个段落由三个事件组成,分别是吴家枣园、众人劳动和妇女纺线三个场景。
相关指令内容如下:首先播放由二胡演奏的乐曲《马专员》,同时毛岸英、杨步浩、吴老忠、吴大娘和吴大,5个角色出场表演,在此设计第1个Cue,触发乐曲《马专员》播放/调音台上5路无线传声器的推子自动弹起至预设位置;至该幕结束,以吴大娘和杨步浩下场为触发事件,手动执行第2个Cue,关闭两位演员对应的调音台通路;随着下一幕舞台光起,执行第3个Cue,播放乐曲《二月里来》,同时打开农民吴二的无线传声器通路,前一幕乐曲《马专员》在5 s内淡出;当舞台后方出现三个女演员时,执行第4个Cue,三位女演员的无线传声器通道推起;待舞台前方的角色农民吴二台词结束,执行第5个Cue,播放乐曲《蓝花花》,前幕乐曲《二月里来》5 s内淡出,同时毛岸英、吴老忠、吴大、吴二的调音台通路关闭。
在舞台演出中,控制方案多采用以时间线依次排序的线性控制模式。这种控制模式是由演出模式所决定的。在整个演出过程中,不能随意增添或者减少演员,演出的过程也严格按照预先排练的顺序进行。对于声音来说,演出中所要播放的音乐或者声音效果都必须按照演出时间线顺序播放,所播放音频和视频文件内容不能做实时更改。使用QLab软件做素材与事件编程时,“线性”演出模式才能保证控制程序能够顺利触发媒体重放和设备操作。由于舞台演出的规模大小不一,演员数量最多可达几十人,安全可靠地控制无线传声器通道,避免漏开传声器或扩出后台与演出无关的声音是非常重要的。
2.2 随机效果的触发
效果的触发大多依靠音响师根据演员动作或演出过程中的特定事件来进行Cue的执行,这需要音响师在演出过程中注意力高度集中。在戏剧中有打斗情节发生时,由于演员的动作是即兴的,依赖每一个打斗动作来设置Cue是格外繁琐且难以准确执行。因此可以将一些踢打效果单独编入一个独立于时间线的模块(见图4),在键盘上指定一个热键触发对应的效果。这样在演出过程中,可以随时根据需要手动触发音响效果而与时间线程序互不干预。当然,如果采用MIDI采样设备来做随机效果的触发,其操控界面更加传统和方便,并且使用MIDI键盘不容易误操作。各种采样器与触发键盘能够为现场表演中事件的即兴处理提供很强的灵活性。
2.3 指令关联模式与控制程序设计
对演出过程的分析,可以在一个事件的基础上通过时钟将一系列演出元素相互关联,这种关联分别为绝对关联和相对关联。例如,在QLab中设定A效果在B音乐开始之后5 s触发,这个触发的信号指令就是相对的关联,系统仅需简单按照编辑好的序列执行下一个动作即可。相对关联的控制模式的弊端在于,假如指令序列中的某一条指令被错失,与其关联的其他元素将会丢失或滞后结束。例如,原设定A效果在B音乐开始之后5 s触发,但是B音乐由于各种意外的状况没能顺利触发,那么A效果无法收到B音乐开始时发给它的执行指令,系统就会跳过播放A效果的指令进入下一个序列表的指令。对于设备状态控制而言,可能带来极严重的问题:因指令缺失,受控的音频控制设备产生误动作,导致演出事故。可见数据完整在相对系统中极为重要。对于绝对关联的指令来说,它包含了演出中执行这个Cue所需的全部信息。如果一系列指令中的某一个丢失了,系统仅仅需要等待接收下一条Cue,而不受前后指令的影响。再以前面所举例子,如果设定B音乐触发和A效果触发是两个独立的事件,那么即使B音乐未能成功触发,音响师仍可以及时跟随演出人工触发A效果,两者之间是绝对独立的状态,而不是像相对关联一样环环相扣,每一环都要保证完美且可持续。
在一个实际应用中,需要将两者有机地结合起来。如果系统全部由绝对控制信息组成,那么音响师将会承受非常大的工作量,对于演出时间较长且场次不断重复的戏剧演出来说,这对于工作人员的体力、耐力或者注意力都将是严峻的考验。因此,相对关联的控制指令能够在很大程度上替代人工介入。毕竟要实现最优质量的演出,单纯使用绝对控制模式是难以实现的。
3 结语
近来,随着平板终端的日益普及,QLab软件已经出现了Ipad版本。这意味着,坐在观众席中,通过远程操作完成整场演出的声音控制。操作者置身于观众之中,便于更好地感受演出中的细节,能够更精确地执行设计。
随着数字媒体技术进步,现场演出集控技术成为一个热点话题。将多个控制系统联系在一起,通过指令来执行和同步演出元素,其精确度远超人工。人机交互的潜力也在不断增加,有可能利用演出集控技术实现更加令人兴奋的效果。
【系统级编程总结】推荐阅读:
VB编程实训总结06-19
《网络编程课程设计》实习总结11-21
客户端网页编程学习总结07-05
Java SE考试--编程题总结12-27
编程学习心得07-21
编程软件10-31
数控编程实习12-25
编程语言12-30
scratch编程教案06-08
编程转职申请报告06-18