昆明理工大学机械控制
第一篇:昆明理工大学机械控制
昆明理工大学 机械制造技术基础复试资料
①F018 机械制造技术基础 ②外语口语、听力、翻译 ③综合面试 其实我有点犯懒本不想写回忆录的可现在无聊那我就回忆一下我的复试题吧。我是机械的复试专业课是《机械制造技术基础》。 先说面试吧面试英语进去就跟我说了一段话大概意思是我和你之间会有一个对话会问一些问题还有就是抽取盒子里的问题然后请回答。首先问的是我的专业我是否喜欢我说我的专业是机械工程及自动化因为我喜欢拆装汽车模型想制造自己设计的汽车所以我非常喜欢我的专业瞎编的现在让我选我才不会去选机械呢然后问我现在的学校我说我已经工作N年了然后我把我毕业的学校说了。紧接着就是抽盒子中的题我抽了一个“知识的力量”一分钟准备呵呵我答得很纠结就不细说了然后就让出去了。总体来看英语复试其实排在第一个会是件好事情因为这样的话老师会考虑到是一个所以提的问题会很简单“请自我介绍”因为这是所有人都准备了的。还有提醒的是如果准备的话请按照雅思的面试进行准备因为跟雅思的面试很像只是时间短一些。我在网上下载了30个问题但我没准备考后发现老师提问包括问其他人的问题不包括抽签的都是上边出现了的所以后悔呀。 再说专业面试一帮老师大概8个人左右进去以后老师就让坐下然后介绍说面前的三个盒子第一个抽2个必答第二个抽3答2第三个抽2答1.第一个盒子我抽到的是你认为研究生学习应该是怎样的我怎么回答的就不用说了第二个问题我忘了但都是与学术无关的题。第二个盒子抽的是计算机辅助设计就是计算机辅助制图是否正确显然错的嘛。第二个问题是电路负载过大是指什么我瞎答了一通老师也没说啥还有个问题我不懂没仔细看。第三个盒子抽的问题是调质和淬火都安排在机加工的哪个工序。这个问题我只把淬火答了另外一个跟老师说不会。回答完这些问题老师就开始提一些问题就像聊天一样这是老师告诉我电路负载过大就是电路电流过大然后我那个晕呀。。。 我觉得我做得很好的是每回答完一个问题我都说“我是这么认为的”我不知道这样说的功效有多大但我总得60分的面试英语加专业我得了47. 笔试先说英语专业翻译吧专业翻译很简单30分钟我只花了15分钟就交卷了。题很简单词汇也很简单只需带一本小词典袖珍英汉词典词汇量要大些的都可以解决我是在门口花5块钱买的2手的大部分词汇都认识只有少数词汇不认识专业词汇也很少且不认识的词典可以查。最后我的得分是92占总成绩的10。有些人英语太弱我光这门就超过别人6分复试总成绩。 专业课笔试要好好准备学校在报道当天给了重点很详细的重点这个需要好好看好好学。重点的那张纸我找不到了你可以像别的机械的人要都有。最后我考了90多分。 我的复试总成绩还是比较靠前的尽管我的初始成绩很低就超C线几分但我现在已经接到待录取通知了。呵呵祝以后的人好运。
第二篇:昆明理工大学
1、 昆明理工大学: 材料科学与工程517 机械工程及自动化510 材料成型及控制工程489 电子信息科学491 自动化496
计算机科学与技术499
2、兰州理工大学材料科学与工程465焊接技术与工程505材料成型及控制工程497机械设计制造及自动化505电气工程及其自动化511测控技术与仪器454
3、河南科级大学金属材料工程496机械设计制造及自动化501材料成型及控制工程469自动化476材料物理492计算机科学与技术493
4、沈阳理工大学金属材料工程508机械设计制造及自动化520机械电子工程518无机非金属材料工程504电气工程及其自动化533计算机科学与技术502
5、佳木斯大学
材料类:金属材料工程焊接技术与工程机械设计制造及其
自动化
电气工程及其自动
化
材料成型及控制工
程
电子信息工程计算机科学与技术
第三篇:外文翻译机械手的机械和控制系统
本科毕业设计
外文翻译
题
目 姓
名 专
业 指导教师
机械手的机械和控制系统 谢百松
学
号 20051103006
机械设计制造及其自动化 肖新棉
职
称 副教授
中国·武汉 二○○九年 二月
华中农业大学本科毕业设计外文翻译
机械手的机械和控制系统
文章来源: Dirk Osswald, Heinz Wörn. Department of Computer Science , Institute for Process Control and Robotics (IPR).,Engler-Bunte-Ring 8 - Building 40.28.
摘要: 最近,全球内带有多指夹子或手的机械人系统已经发展起来了, 多种方法应用其上,有拟人化的和非拟人化的。不仅调查了这些系统的机械结构,而且还包括其必要的控制系统。如同人手一样,这些机械人系统可以用它们的手去抓不同的物体,而不用改换夹子。这些机械手具备特殊的运动能力(比如小质量和小惯性),这使被抓物体在机械手的工作范围内做更复杂、更精确的操作变得可能。这些复杂的操作被抓物体绕任意角度和轴旋转。本文概述了这种机械手的一般设计方法,同时给出了此类机械手的一个示例,如卡尔斯鲁厄灵巧手Ⅱ。本文末介绍了一些新的构想,如利用液体驱动器为类人型机器人设计一个全新的机械手。 关键词:多指机械手;机器人手;精操作;机械系统;控制系统
1. 引言
2001年6月在德国卡尔斯鲁厄开展的“人形机器人”特别研究,是为了开发在正常环境(如厨房或客厅)下能够和人类合作和互动的机器人系统。设计这些机器人系统是为了能够在非专业、非工业的条件下(如身处多物之中),帮我们抓取不同尺寸、形状和重量的物体。同时,它们必须 1
华中农业大学本科毕业设计外文翻译
能够很好的操纵被抓物体。这种极强的灵活性只能通过一个适应性极强的机械人手抓系统来获得,即所谓的多指机械手或机器人手。
上文提到的研究项目,就是要制造一个人形机器人,此机器人将装备这种机器人手系统。这个新手将由两个机构合作制造,它们是卡尔斯鲁厄大学的IPR(过程控制和机器人技术研究院)和c(计算机应用科学研究院)。这两个组织都有制造此种系统的相关经验,但是稍有不同的观点。
IPR制造的卡尔斯鲁厄灵巧手Ⅱ(如图1所示),是一个四指相互独立的手爪,我们将在此文中详细介绍。IAI制造的手(如图17所示)是作为残疾人的假肢。
图1.IPR的卡尔斯鲁厄灵巧手Ⅱ
图2. IAI开发的流体手 2. 机器人手的一般结构
一个机器人手可以分成两大主要子系统:机械系统和控制系统。 机械系统又可分为结构设计、驱动系统和传感系统,我们将在第三部分作进一步介绍。在第四部分介绍的控制系统至少由控制硬件和控制软件组成。
我们将对这两大子系统的问题作一番基本介绍,然后用卡尔斯鲁厄灵 2
华中农业大学本科毕业设计外文翻译
巧手Ⅱ演示一下。
3. 机械系统
机械系统将描述这个手看起来如何以及由什么元件组成。它决定结构设计、手指的数量及使用的材料。此外,还确定驱动器(如电动机)、传感器(如位置编码器)的位置。
3.1 结构设计
结构设计将对机械手的灵活度起很大的作用,即它能抓取何种类型的物体以及能对被抓物体进行何种操作。设计一个机器人手的时候,必须确定三个基本要素:手指的数量、手指的关节数量以及手指的尺寸和安置位置。
为了能够在机械手的工作范围内安全的抓取和操作物件,至少需要三根手指。为了能够对被抓物体的操作获得6个自由度(3个平移和3个旋转自由度),每个手指必须具备3个独立的关节。这种方法在第一代卡尔斯鲁厄灵巧手上被采用过。但是,为了能够重抓一个物件而无需将它先释放再拾取的话,至少需要4根手指。
要确定手指的尺寸和安置位置,可以采用两种方法:拟人化和非拟人化。然后将取决与被操作的物体以及选择何种期望的操作类型。拟人化的安置方式很容易从人手到机器人手转移抓取意图。但是每个手指不同的尺寸和不对称的安置位置将增加加工费用,并且是其控制系统变得更加复杂,因为每个手指都必须分别加以控制。对于相同手指的对称布置,常采用非 3
华中农业大学本科毕业设计外文翻译
拟人化方法。因为只需加工和构建单一的“手指模块”,因此可减少加工费用,同时也可是控制系统简化。
3.2 驱动系统
指关节的驱动器对手的灵活度也有很大的影响,因为它决定潜在的力量、精度及关节运动的速度。机械运动的两个方面需加以考虑:运动来源和运动方向。在这方面,文献里描述了有几种不同的方法,如文献[3]中说可由液压缸或气压缸产生运动,或者,正如大部分情况一样使用电动机。在多数情况下,运动驱动器(如电机)太大而不能直接与相应的指关节结合在一起,因此,这个运动必须由驱动器(一般位于机器臂最后的连接点处)转移过来。有几种不同的方法可实现这种运动方式,如使用键、传动带以及活动轴。使用这种间接驱动指关节的方法,或多或少地降低了整个系统的强度和精度,同时也使控制系统复杂化,因为每根手指的不同关节常常是机械地连在一起,但是在控制系统的软件里却要将它们分别独立控制。由于具有这些缺点,因此小型化的运动驱动器与指关节的直接融合就显得相当必要。
3.3 传感系统
机器手的传感系统可将反馈信息从硬件传给控制软件。对手指或被抓物体建立一个闭环控制是很必要的。在机器手中使用了3种类型的传感器: 1. 手爪状态传感器确定指关节和指尖的位置以及手指上的作用力情况。知道了指尖的精确位置将使精确控制变得可能。另外,知道手指作用 4
华中农业大学本科毕业设计外文翻译
在被抓物体上的力,就可以抓取易碎物件而不会打破它。
2. 抓取状态传感器提供手指与被抓物体之间的接触状态信息。这种触觉信息可在抓取过程中及时确定与物体第一次接触的位置点,同时也可避免不正确的抓取,如抓到物体的边缘和尖端。另外还能察觉到已抓物体是否滑落,从而避免物体因跌落而损坏。
3. 物体状态或姿态传感器用于确定手指内物体的形状、位置和方向。如果在抓取物体之前并不清楚这些信息的情况下,这种传感器是非常必要的。如果此传感器还能作用于已抓物体上的话,它也能控制物体的姿态(位置和方向),从而监测是否滑落。
根据不同的驱动系统,有关指关节位置的几何信息可以在运动驱动器或直接在关节处出测量。例如,如在电动机和指关节之间有一刚性联轴器,那么就可以用电机轴上的一个角度编码器(在齿轮前或齿轮后)来测量关节的位置。但是如果此联轴器刚度不够或着要获得很高的精度的话,就不能用这种方法。
3.4卡尔斯鲁厄灵巧手Ⅱ的机械系统
为了能够获得如重抓等更加复杂的操作,卡尔斯鲁厄灵巧手Ⅱ(KDHⅡ)由4根手指组成,且每根手指由3个相互独立的关节组成。设计该手是为了能够在工业环境中应用(图3所示)和操纵箱、缸及螺钉螺帽等物体。因此,我们选用四个相同手指,将它们作对称、非拟人化配置,且每个手指都能旋转90°(图4所示)。
鉴于从第一代卡尔斯鲁厄灵巧手设计中得到的经验,比如因传动带而导 5
华中农业大学本科毕业设计外文翻译
致的机械问题以及较大摩擦因数导致的控制问题,卡尔斯鲁厄灵巧手Ⅱ采用了一些不同的设计决策。每根手指的关节2和关节3之间的直流电机被整合到手指前部肢体中(图5所示)。这种布置可使用很硬的球轴齿轮将运动传递到手指的关节处。处在电机轴上的角度编码器(在齿轮前)此时可作为一个精度很高的位置状态传感器。
图3.工业机器人上的KDHⅡ
图4. KDHⅡ的顶视图
为了感知作用在物体上的手指力量,我们发明了一个六维力扭矩传感器(图6所示)。这个传感器可当作手指末端肢体使用,且配有一个球形指尖。它可以抓取较轻的物体,同时也能抓取3-5kg相近的较重物体。此传感器能测量X、Y和Z方向的力及绕相关轴的力矩。另外,3个共线的激光三角测量传感器被安置在KDHⅡ的手掌上(图5所示)。因为有3个这样的传感器,因此不仅可以测量3单点之间的距离,如果知道物体的形状,还能测出被抓物体表面之间的距离和方向。物体状态传感器的工作频率为1kHz,它能检测和避免物体的滑落。
华中农业大学本科毕业设计外文翻译
图5. KDHⅡ的侧视图
图6. 带应变计量传感器的六自由度扭转传感器
4. 控制系统
机器人手的控制系统决定哪些潜在的灵巧技能能够被实际利用,这些技能都是由机械系统所提供的。如前所述,控制系统可分为控制计算机即硬件和控制算法即软件。
控制系统必须满足以下几个的条件:
1. 必须要有足够的输入输出端口。例如,一具有9个自由度的低级手,其驱动器至少需要9路模拟输出端口,且要有9路从角度编码器的输入端口。如再加上每个手指上的力传感器、触觉传感器及物体状态传感器的话,则端口数量将增加号几倍。
2. 需具备对外部事件快速实时反应的能力。例如,当检测到物体滑落时,能立即采取相应的措施。
3. 需具备较高的计算能力以应对一些不同的任务。如可以对多指及物体并行执行路径规划、坐标转换及闭环控制等任务。
4. 控制系统的体积要小,以便能够将其直接集成到操作系统当中。
华中农业大学本科毕业设计外文翻译
5. 在控制系统与驱动器及传感器之间必须要电气短接。特别是对传感器来说,若没有的话,很多的干扰信号将会干扰传感器信号。
4.1 控制硬件
为了应对系统的要求,控制硬件一般分布在几个专门的处理器中。如可通过一个简单的微控制器处理很低端的输入输出接口(马达和传感器),因此控制器尺寸很小,能轻易地集成到操纵系统中。但是较高水平的控制端口则需要较高的计算能力,且需要一个灵活实时操作系统的支持。这可以通过PC机轻易地解决。
因此,控制硬件常由一个非均匀的分布式计算机系统组成,它的一端是微控制器,而另一端则是一个功能强大的处理器。不同的计算单元则通过一个通信系统连接起来,比如总线系统。
4.2 控制软件
机器人手的控制软件是相当复杂的。必须对要对手指进行实时及平行控制,同时还要计划手指和物体的新的轨迹。因此,为了减少问题的复杂性,就有必要将此问题分成几个子问题来处理。
另一方面涉及软件的开发。机器人手其实是一个研究项目,它的编程环境如用户界面,编程工具和调试设施都必须十分强大和灵活。这些只能使用一个标准的操作系统才能得到满足。在机械人中普遍使用的分层控制系统方法都经过了修剪,以满足机械手的特殊控制要求。
华中农业大学本科毕业设计外文翻译
4.3卡尔斯鲁厄灵巧手Ⅱ的控制系统
如在4.1节中所说,对于卡尔斯鲁厄灵巧手Ⅱ的控制硬件,采用了一种分布式方法(图7所示)。一个微控制器分别控制一个手指的驱动器和传感器,另外一个微控制器用于控制物体状态传感器(激光三角传感器)。这些微控制器(图7左侧和右侧的外箱)直接安装在手上,所以可以保证和驱动器及传感器之间较短的电气连接。这些微控制器都是使用串行总线系统和主控计算机连在一起的。这个主控计算机(图
7、图8中的灰色方块)是由六台工业计算机组成的一个并行计算机。这些电脑都被排列在一个二维平面。相邻电脑模块(一台电脑最多有8个相邻模块)使用双端口RAM进行快速通信(图7中暗灰色方块所示)。一台电脑用于控制一个手指。另一台用于控制物体状态传感器及计算物体之间的位置。其余的电脑被安在前面提到的电脑的周围。这些电脑用于协调整个控制系统。控制软件的结构反映了控制硬件的架构。如图9所示。
图7. KDH II的控制硬件构架
图8.控制KDH II的平行主计算机
一个关于此手控制系统的三个最高层次的网上计划正在规划。理想的
华中农业大学本科毕业设计外文翻译
物体位移命令可由优越的机器人控制系统得到,并可用作物体路径的精确规划。根据已产生的目标路径就可规划可行的抓取行为(手指作用在物体上的可行抓取位置点)。现在知道了物体的运动计划,就可以由手指路径规划得出每个手指的运动轨迹,并传递给系统的实时能力部分。如果一个物体被抓取了,那么其手指的运动路径就传递给了物体的状态控制器。这个控制器控制物体的姿态,它由手指和物体状态传感器所决定,用以获得所需的物体姿态。如果一个手指没有跟物体接触,那么它的移动路径将会直接传递给手控制器。这个手控制器将相关的预期手指位置传递给所有的手指控制器,以协调所有手指的运动。这些在手指传感器的帮助下又反过来驱动手指驱动器。
图9. KDHⅡ的手部控制系统
5. 实验结果
为了验证卡尔斯鲁厄灵巧手Ⅱ的能力,我们选择了两个要求操作问题。一个问题是在网上对处于外部影响下的被抓物体姿态(位置和方向)的控制。另一个问题是被抓物体必须能够绕任意角度旋转,这只能通过重抓才能实现。这可以反映卡尔斯鲁厄灵巧手Ⅱ对复杂任务的操作能力。
5.1 物体姿态控制
这个物体姿态控制器的目的是为了确定好被抓物体的位置和方向以适
华中农业大学本科毕业设计外文翻译
合给定的轨迹。此任务必须在实时条件通过在线获得,尽管有内部变化及外部干扰的存在。内部变化比如在物体移动过程中,球形指尖在被抓物体上的滚动。这种状况如图
10、图11所示。这将导致物体的不必要的额外移动和倾斜。这些错误的物体姿势很难预先估计。因此,物体状态传感器的输入必须要修改这些错误。对于卡尔斯鲁厄灵巧手Ⅱ来说,其上的三个激光三角传感器就是用来纠正此种错误的。图12定量地说明了图9中物体在没有姿态控制情况下的倾斜情况。下图显示了在X方向上随时间推移的预期轨迹,而上图显示了物体实际的旋转(倾斜)结果情况。因为启用了物体状态控制,图13中的物体倾斜得到了很大的减少。上图物体的旋转保持基本恒定,这和期望的一样。
图10.因滚动产生的额外位移
图12.没有状态控制的物体倾斜
华中农业大学本科毕业设计外文翻译
图11.因球形指尖在物体上的滚动而产生
图13.物体状态控制下减少的物体
额外的不期望倾斜情况
倾斜情况
物体状态控制器对补偿外界干扰也是十分必要的。比如,机器人(手臂、手或手指)或被抓物体与外界的碰撞可能导致物体的滑落。这更有可能导致被抓物体的损耗,这是不能出现的情况。为了能够避免物体在这种情况下的损失,就必须检测出物体的滑落并迅速采取行动以稳定物体的状态。
为了验证卡尔斯鲁厄灵巧手Ⅱ控制系统对这种干扰情况的处理能力,我们做了以下的实验:物件被抓后,将手指的接触力恒定减少直至物体开始滑落。在激光三角传感器检测滑落后,物体状态控制器采取措施将物体重新调控到所期望的位置。图14和图15展示了此种实验的一个例子。尤其是图14,它显示出物体滑落启动的相当突然且相当快。但是物体状态控制器也能够足够快地检测和补偿滑落,这样物体的位置(这里:特别是X方向,就是滑落的方向)和物体的方向能够与最开始的期望值很快地相符。
华中农业大学本科毕业设计外文翻译
图14.滑落实验:X方向的实际物体
图15.滑落实验:关于Z轴的实际
位置
物体方向
5.2 重抓
虽然卡尔斯鲁厄灵巧手Ⅱ非常的灵活,但是它不能在第一次操作中就能得到每一个理想的对象操纵。这源于这样一个事实:手指相对于正常的工业机器人来说是十分小的,因此所具备的工作范围也是很有限的。如果物体被手指抓住,那么它第一次只能在所有手指的剩余空间内被操纵。可行操作的条件是所有的接触点必须长期地处在相联手指的工作范围内。这很大地限制了操作的可行性。为了能够克服此种限制,一个叫做重抓的操作就必须执行。即当一个接触点到达了相联手指的限制区域时,这个手指就必须从物体上脱离,并移到一个新的接触位置。这必须是多于3个手指的手才能使操作可靠。周期性的移动这些手指,就能使任意的操作变得可行。关于此种操作有一个例子,就是在大角度旋转被抓物体时,此时重抓动作很有必要。图16显示了卡尔斯鲁厄灵巧手Ⅱ在旋转一个螺帽状物体时的一系列图片。这个物体是绕它的垂直轴旋转的。在a到c图中所有的手指都跟物体接触,并且四个手指相互协调运动才使物体旋转。图d到图f显示了一 13
华中农业大学本科毕业设计外文翻译
个手指的的重抓动作。在d图中这个手指已经运动到其工作范围的极限位置,这时所有手指的协调运动也被终止。左前方的手指脱离物体并单独移动到另一个接触点。在图f中这个手指重新跟物体接触,另一个手指此时可以重新定位(没有显示)。所有的手指重新定位之后,协调旋转运动继续进行。视具体情况而定,卡尔斯鲁厄灵巧手Ⅱ也可以同时进行几个手指的重抓动作。这可以加速重抓过程,但是只能是被抓物体与外界接触的条件下才有可能。比如说螺丝钉上的螺帽或孔里的一挂钩。图17显示了卡尔斯鲁厄灵巧手Ⅱ将一个木柱从一个平方的基座孔内拉出来的一系列图片。图a到图b显示木柱被拉出一半,然后左手指和右手指在同一时刻脱离物体并重新定位(图c到图e)。那之后,前面与后面的手指也重新定位(图f)。那之后,整个木柱被拉出,从而可进行进一步的操作(没有显示)。
图16.利用重抓旋转螺帽状物体
图17.利用重抓从孔中拉出 14
华中农业大学本科毕业设计外文翻译
木柱
6.结论
为了使机械手能够完成灵活精确的操作,一合适的机械系统和控制系统是必需的。这些介绍的标准是必需加以考虑的,正如文中所说。卡尔斯鲁厄灵巧手Ⅱ表现的非常成功。这种机械手能够抓取很大范围的不同形状、尺寸和重量的物体。被抓物体的姿态也能可靠地加以控制,即使在外部干扰的情况下。此外,由于此系统,复杂的精细操作(如重抓)也能实现。在人行机器人的特殊研究领域,基于一个不同的概念叫做流体化(图2所示)的基础上,小型机械手也具有拟人化和机械化。这概念是由卡尔斯鲁厄研究中心的IAI所提出的。但是,这个控制软件的主要结构可经过相应修改而为此种小型机械手所用。
第四篇:昆明理工大学论文格式
课程报告题目
姓名:*** 班级:工程管理2006级**班 学号:2006110081*** 联系方式: Email或电话
摘要:摘要内容(200字左右),直奔主题。目的——研究、研制、调查等的前提、目的和任务,所涉及的主题范围。方法——所用的原理、理论、条件、对象、材料、工艺、结构、手段、装备、程序等。结果——实验的、研究的结果、数据,被确定的关系,观察结果,得到的效果、性能等。结论——结果的分析、研究、比较、评价、应用,提出的问题等。 关键词:沥青碎石路面;斜拉桥;交叉口;定线技术(3—6个关键词)
1. 一级标题
第1节内容.................................................... ..................................................................... ............................................................
1.1 二级标题
第1.1节内容.................................................... ..................................................................... ............................................................
1.1.1 三级标题
第1.1.1节内容.................................................... ..................................................................... ............................................................
1.1.2 三级标题
第1.1.2节内容.................................................... ..................................................................... ............................................................
1.2 二级标题
第1.2节内容....................................................
- 1234 -
第五篇:昆明理工大学报告封面
课 程 设 计
课程名称:设计题目:学 院:专 业:年 级:学生姓名:指导教师:日 期:
java程序设计
模型计算机的设计
信息工程与自动化学院
物联网工程
2013级
邹华建 (学号201310410120 )
毛存礼
2015.8.25 至 2015.9.4
教 务 处 制
课 程 设 计 任 务 书
信息工程与自动化 学院 物联网工程 专业 2013 年级
学生姓名: 邹华建
课程设计题目: JAVA程序设计
课程设计主要内容:
把指定目录中的学生照片文件(处理文件可以自选)名更改为学号命名,并将更名后的文件复制到新的目录中。
设 计 指 导 教 师 (签字):
教学基层组织负责人(签字):
2015年7月6日
一、课程设计的目的
Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了一周的Java程序设计课程设计。
通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
二、Java课程短学期设计报告要求
任务1:用java编写程序实现对文件的操作,实现对文件的读写操作: (1)对文本中的句子进行分词并将分词结果输出到excel文件或txt中;
(2)把指定目录中的学生照片文件(处理文件可以自选)名更改为学号命名,并将更名后的文件复制到新的目录中。
任务2:将输出的数字进行排序通过使用java实现;
任务3:设计一个具有简单功能的计算器;
三、课程设计的基本要求
1、明确题目要求,进行需求分析;
2、进行功能设计,编写设计说明;
3、进行程序设计与调试;
4、对设计过程进行系统的总结;
5、界面美观大方;
6、完成设计报告,课程设计报告应包含以下八个内容:
⑴ 课程设计题目;
⑵ 功能描述:对系统要实现的功能进行简明扼要的描述。
⑶ 方案论证:
概要设计:根据功能描述,建立系统的体系结构,即将整个系统分解成若干子功能模块,并用框图表示各功能模块之间的衔接关系,并简要说明各模块的功能。
详细设计:详细说明各功能模块的实现过程,所用到的算法、技巧等。
⑷ 程序说明;
⑸ 效果及存在问题:说明系统的运行效果(附上运行界面图片)、存在哪些不足以及预期解决办法;
⑹ 结果分析及心得体会:谈谈自己在课程设计过程中的心得体会;
⑺ 附录:附上各功能模块的主要代码;
⑻ 参考文献:按参考文献规范列出各种参考文献,包括参考书目,论文和网址等。
7、 认真努力完成作业。要求独立完成,不抄袭、不雷同(雷同抄袭者,均为0分)。按时交作业。
8、 课程设计建议在Editplus +JDK,Eclipse +JDK平台上开发、调试。
9、 Java源程序应加上详尽的注释语句,对所设计的类、属性、方法说明其用途,对方法的调用说明其用意和使用参数的原因。特别是有深刻理解、有独特见解的地方,用注释语句加以说明。
10、课程设计作业包括全部软件工程文件和课程设计说明书文件。课程设计说明书打印到规定的课程设计说明书用纸上,并装订好。说明书格式参考附件。
四、课程设计的主要内容
利用学到的编程知识和编程技巧,通过具体项目的分析、设计和开发,掌握开发Java大型软件项目过程中所需要的软件技术并熟悉软件。
可以以小组为单位,每组1至3名学生,在教师的指导下,每组完成一至二个题目。题目可由下面提供的选题中选择或学生自选经教师审核后方可。该组每个同学承担题目的不同部分,每位同学的课程设计报告必需独立完成。
题目类型大致分配如下:
1、网络通讯类,编制网络聊天(Chat)程序,以下简称“网络”类。
2、图形界面Application类,编制类似计算器、MP3播放器、围棋打谱,斗地主、潜艇大战、挖地雷、迷宫等功能单一的程序,以下简称“图形 ”类。
3、Applet动画类,编制功能较复杂、效果较好的applet动画程序,以下简称“动画”类。
4、数据处理类,编制考试系统、出题系统、查询系统、学生学籍、课程成绩、图书编目、仓库货物等数据录入查询程序,以下简称“数据”类。
5、其它类型,自选题目,须经老师同意。
五、主要技术关键的分析、解决、方案比较
以下是可以参考的课程设计可能包含的相关知识:
1、Java核心编程J2EE:
面向对象技术
Java程序运行机制
开发环境的安装和配置
Java语言基础和重点API Java程序异常的处理
I/O、控制台程序开发
Struts程序开发
2、数据库技术:
关系型数据库原理
SQL数据查询语言
MS SQL Server使用方法
数据库中对象的建立与使用
Java数据库编程(JDBC)
六、课程设计考核方式
指导教师依课程设计作业情况及整个课程设计中学生的表现,综合给出成绩。
成绩分为优、良、中、及格、不及格五级。
七、主要参考资料
1、《Java语言与面向对象程序设计》,朱福喜、尹为民、余振坤编著,武汉大学出版社
2、《Java语言与面向对象程序设计》,印旻编著,清华大学出版社
3、《Java程序设计实用教程》,朱站立、沈伟编著,电子工业出版社
八、心得体会
任务1:
任务2:
源程序
package Kmust.testd; import java.util.Arrays; import java.io.File; import java.util.Scanner; import java.io.PrintWriter; public class Dtest { private static final String SPACE = " "; public static void main(String[] args) throws Exception{ String str;
File file1 = new File("e:a.txt"); Scanner input=new Scanner(file1); str=input.nextLine(); str = sortStringNumber(str); System.out.println(str); File file = new File("e:.txt"); PrintWriter output=new PrintWriter(file); output.write(str); output.close(); } public static String sortStringNumber(String str) { //1,将字符串中的数值通过指定的规则进行切割获取字符串数组。
String[] str_nums = toStringArray(str); //2,将字符串数组转成int数组。
int[] nums = toIntArray(str_nums); //3,对int数组排序; sortIntArray(nums); //4,将int数组变成字符串。
return arrayToString(nums); } private static String arrayToString(int[] nums) { //1,创建字符串缓冲区。
StringBuilder sb = new StringBuilder(); for (int i = 0; i < nums.length; i++) { if(i!=nums.length-1) sb.append(nums[i]+SPACE); else sb.append(nums[i]); } return sb.toString(); } private static void sortIntArray(int[] nums) {
Arrays.sort(nums); }
private static int[] toIntArray(String[] str_nums) { //1,先定义一个int数组。
int[] arr = new int[str_nums.length]; //2,对字符串数组进行遍历。
for (int i = 0; i < str_nums.length; i++) { //将数组格式的字符串转成整数。存储到arr数组中。
arr[i] = Integer.parseInt(str_nums[i]); } return arr; } private static String[] toStringArray(String str) { return str.split(SPACE); }
} 先建一个txt文件,输入无序的几个数字,如下;
程序的运行结果如下;
得到的txt文件b的显示结果如下;
任务3:
源程序;
import java.awt.*; import javax.swing.*; import java.awt.event.*; public class CalculatorDemo {
String lastOption;//保存运算符号
double a,result, b,c;//保存计算结果
boolean start;//是否开始输入数字
int fh;
JTextField text1;//显示文本框
//构成计算器的按钮用按钮数组来实现
JButton[] btn;
JButton[] btn1;
public void go(){
start=true;
lastOption="=";
JFrame myWindow=new JFrame("计算器");
JPanel p1=new JPanel();
JPanel p2=new JPanel();
text1=new JTextField(28);
btn=new JButton[12];
btn1=new JButton[7];
Container cp=myWindow.getContentPane();
//设置面板的布局方式GridLayout
p1.setLayout(new GridLayout(4,3,8,8));
p2.setLayout(new GridLayout(3,3,8,8));
cp.add(text1,BorderLayout.NORTH);
//构成面板
for(int i=0;i<7;i++){
btn1[i]=new JButton(i+"");
}
//构建符号并加入到按钮中
btn1[6]=new JButton("/");
btn1[5]=new JButton("AC");
btn1[4]=new JButton("*");
btn1[3]=new JButton("C");
btn1[2]=new JButton("-");
btn1[1]=new JButton("+/-");
btn1[0]=new JButton("+");
//采用for循环添加组件
cp.add(p1,"West"); //放置中间容器p1
cp.add(p2,"East"); ////放置中间容器p2
for(int i=0;i<7;i++){
p2.add(btn1[i]);
}
for(int i=1;i<10;i++){
btn[i]=new JButton(i+"");
p1.add(btn[i]);
}
btn[10]=new JButton("0");
p1.add(btn[10]);
btn[11]=new JButton(".");
p1.add(btn[11]);
btn[10]=new JButton("=");
p1.add(btn[10]);
//采用for 循环为组件注册事件监听器
for(int i=1;i<10;i++){
btn[i].addActionListener(new NumHandle());
}
btn[10].addActionListener(new OPtionHandle());
btn[11].addActionListener(new OPtionHandle());
for(int j=0;j<7;j++){
btn1[j].addActionListener(new OPtionHandle());
}
myWindow.pack();
myWindow.setVisible(start);
myWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//创建内部类NumHandle监听数字键动作
class NumHandle implements ActionListener{
public void actionPerformed(ActionEvent e){
String num=e.getActionCommand();//得到数字键上的数字
if(num.equals("0")){ //输出0
text1.setText(text1.getText()+"0");
}
if(num.equals("1")){ //输出1
if(text1.getText().equals("0")) //判断文本域中显示的数字是否为0
text1.setText("1");
else
text1.setText(text1.getText()+"1");
}
if(num.equals("2")){ //输出2
if(text1.getText().equals("0"))
text1.setText("2");
else
text1.setText(text1.getText()+"2");
}
if(num.equals("3")){ //输出3
if(text1.getText().equals("0"))
text1.setText("3");
else
text1.setText(text1.getText()+"3");
}
if(num.equals("4")){ //输出4
if(text1.getText().equals("0"))
text1.setText("4");
else
text1.setText(text1.getText()+"4");
}
if(num.equals("5")){ //输出5
if(text1.getText().equals("0"))
text1.setText("5");
else
text1.setText(text1.getText()+"5");
}
if(num.equals("6")){ //输出6
if(text1.getText().equals("0"))
text1.setText("6");
else
text1.setText(text1.getText()+"6");
}
if(num.equals("7")){ //输出7
if(text1.getText().equals("0"))
text1.setText("7");
else
text1.setText(text1.getText()+"7");
}
if(num.equals("8")){ //输出8
if(text1.getText().equals("0"))
text1.setText("8");
else
text1.setText(text1.getText()+"8");
}
if(num.equals("9")){ //输出9
if(text1.getText().equals("0"))
text1.setText("9");
else
text1.setText(text1.getText()+"9");
}
}
}
//内部类OPtionHandle监听符号键的动作
class OPtionHandle implements ActionListener{
public void actionPerformed(ActionEvent e){
String option=e.getActionCommand();
if(option.equals(".")){
text1.setText(text1.getText()+".");
}
/*if(option.equals("sin")){
a=Double.parseDouble(text1.getText());//将文本域上的字符串转换为double型
double b=Math.sin(a/180*Math.PI); //现将a转换为弧度制,再进行运算
text1.setText(String.valueOf(b)); //输出运算结果
}
if(option.equals("cos")){
a=Double.parseDouble(text1.getText());
double b=Math.cos(a/180*Math.PI);
text1.setText(String.valueOf(b));
}
if(option.equals("tan")){
a=Double.parseDouble(text1.getText());
double b=Math.tan(a/180*Math.PI);
text1.setText(String.valueOf(b));
}
if(option.equals("log")){
a=Double.parseDouble(text1.getText());
double b=Math.log(a)/Math.log(10.0);
text1.setText(String.valueOf(b));
}
if(option.equals("sqrt")){
a=Double.parseDouble(text1.getText());
double b=Math.sqrt(a);
text1.setText(String.valueOf(b));
}
if(option.equals("pow")){ //该运算含有两个操作数
a=Double.parseDouble(text1.getText());
fh=4; //
text1.setText(""); //将文本域的内容清空
}
if(option.equals("exp")){
a=Double.parseDouble(text1.getText());
b=a;
double b=Math.exp(a);
text1.setText(String.valueOf(b));
}
if(option.equals("求倒")){
a=Double.parseDouble(text1.getText());
text1.setText(String.valueOf(1/a));
}*/
if(option.equals("+/-")){
if(!"0".equals(text1.getText())){ //判断文本域的数字是否为0
a=Double.parseDouble(text1.getText());
a=-a; //求相反数运算
text1.setText(String.valueOf(a));
}
}
if(option.equals("C")){
int i=text1.getText().length();
text1.setText(text1.getText().substring(0,i-1));
}
if(option.equals("AC")){
text1.setText(""); //清空文本域中的内容
}
if(option.equals("+")){
a=Double.parseDouble(text1.getText());
fh=0;
text1.setText("");
}
if(option.equals("-")){
a=Double.parseDouble(text1.getText());
fh=1;
text1.setText("");
}
if(option.equals("*")){
a=Double.parseDouble(text1.getText());
fh=2;
text1.setText("");
}
if(option.equals("/")){
a=Double.parseDouble(text1.getText());
fh=3;
text1.setText("");
}
//有两个操作的运算
if(option.equals("=")){
double c=Double.parseDouble(text1.getText());
switch(fh){
case 0: //执行加法运算
result=a+c;
break;
case 1: //执行减法运算
result=a-c;
break;
case 2: //执行乘法运算
result=a*c;
break;
case 3: //执行除法运算
result=a/c;
break;
case 4: //执行a的b次幂运算
result=Math.pow(a, c);
break;
}
text1.setText(String.valueOf(result));//将运算结果转换为字符串形式输出
}
}
}
public static void main(String[] args) {
CalculatorDemo window=new CalculatorDemo();
window.go();
// TODO code application logic here
}
} 程序运行结果如下: