第一篇:实验设计报告的各种心得体会
实训心得体会:
为期一周的高频电子线路实训就这样告一段落了,我们通过这一周紧锣密鼓的实训,我们对于通信电子电路的这门课程又有了更直观更深刻的了解。
首先我们在实训的第一天和第二天对于高频小信号调谐放大器,场效应管谐振放大器,集成选频放大器等诸多器械的线路连接以及数据的测量,从而了解到了这些器械的相关原理以及相关数据,这对于我们充分了解课本上的理论知识有着十分大的帮助。
然后就是在接下来为期三天的调幅电路的焊接,三天我们组每天都十分紧张的按照老师给的线路图进行紧锣密鼓的连接,最终也准时的完成了焊接的工作,但是最终的结果十分出乎我们的意料,我们连最基本的电源灯多无法亮起,这让我们十分诧异,然后我们便开始一次又一次的检查与调试,我们的最后一节课长达5个小时,老师与同学也在其中给了我们很多很多的帮助,但最终还是无法得到一个很好的结果。虽然电路板的焊接的结果并不让我们满意,但我们还是通过实验得到了很多平时上课所学不到的东西,虽有遗憾,并无后悔,这个实验过程中我们学习到的东西远远超过了结果给予我们的价值。
当然实验中,尤其是电路板的焊接过程中我们确实存在着这样那样的问题,一个就是对于电路图的理解不够透彻,第二个就是在焊接过程中与老师同学的沟通不是十分及时,这些都是以后在学习中要十分注意的。希望我们谨记这次的教训,争取在下次实训课上能够更好地完成老师交给我们的任务!
实验心得体会
在做测试技术的实验前,我以为不会难做,就像以前做物理实验一样,做完实验,然后两下子就将实验报告做完.直到做完测试实验时,我才知道其实并不容易做,但学到的知识与难度成正比,使我受益匪浅.在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间.比如做应变片的实验,你要清楚电桥的各种接法,如果你不清楚,在做实验时才去摸索,这将使你极大地浪费时间,使你事倍功半.做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做.做实验时,老师还会根据自己的亲身体会,将一些课本上没有的知识教给我们,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛.通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅.实验心得体会
这个学期我们学习了测试技术这门课程,它是一门综合应用相关课程的知识和内容来解决科研、生产、国防建设乃至人类生活所面临的测试问题的课程。测试技术是测量和实验的技术,涉及到测试方法的分类和选择,传感器的选择、标定、安装及信号获取,信号调理、变换、信号分析和特征识别、诊断等,涉及到测试系统静动态性能、测试动力学方面的考虑和自动化程度的提高,涉及到计算机技术基础和基于LabVIEW的虚拟测试技术的运用等。
课程知识的实用性很强,因此实验就显得非常重要,我们做了金属箔式应变片:单臂、半桥、全桥比较, 回转机构振动测量及谱分析, 悬臂梁一阶固有频率及阻尼系数测试三个实验。刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。但是我并没有气垒,在实验中发现问题,自己看书,独立思考,最终解决问题,从而也就加深我对课本理论知识的理解,达到了“双赢”的效果。
实验中我学会了单臂单桥、半桥、全桥的性能的验证;用振动测试的方法,识别一小阻尼结构的(悬臂梁)一阶固有频率和阻尼系数;掌握压电加速度传感器的性能与使用方法;了解并掌握机械振动信号测量的基本方法;掌握测试信号的频率域分析方法;还有了解虚拟仪器的使用方法等等。实验过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的工程素质和科学道德,例如团队精神、交流能力、独立思考、测试前沿信息的捕获能力等;提高了自己动手能力,培养理论联系实际的作风,增强创新意识。
实验体会
这次的实验一共做了三个,包括:金属箔式应变片:单臂、半桥、全桥比较;回转机构振动测量及谱分析;悬臂梁一阶固有频率及阻尼系数测试。各有特点。
通过这次实验,我大开眼界,因为这次实验特别是回转机构振动测量及谱分析和悬臂梁一阶固有频率及阻尼系数测试,需要用软件编程,并且用电脑显示输出。可以说是半自动化。因此在实验过程中我受易非浅:它让我深刻体会到实验前的理论知识准备,也就是要事前了解将要做的实验的有关质料,如:实验要求,实验内容,实验步骤,最重要的是要记录什么数据和怎样做数据处理,等等。虽然做实验时,指导老师会讲解一下实验步骤和怎样记录数据,但是如果自己没有一些基础知识,那时是很难作得下去的,惟有胡乱按老师指使做,其实自己也不知道做什么。
在这次实验中,我学到很多东西,加强了我的动手能力,并且培养了我的独立思考能力。特别是在做实验报告时,因为在做数据处理时出现很多问题,如果不解决的话,将会很难的继续下去。例如:数据处理时,遇到要进行数据获取,这就要求懂得labview软件一些基本操作;还有画图时,也要用软件画图,这也要求懂得excel软件的插入图表命令。并且在做回转机构振动测量及谱分析实验,获取数据时,注意读取波形要改变采样频率,等等。当然不只学到了这些,这里我就不多说了。
还有动手这次实验,使测试技术这门课的一些理论知识与实践相结合,更加深刻了我对测试技术这门课的认识,巩固了我的理论知识。
不过这次实验虽好,但是我认为它安排的时间不是很好,还有测试技术考试时间,因为这些时间安排与我们的课程设计时间有冲突,使我不能专心于任一项,结果不能保证每一个项目质量,所以如果有什么出错请指出!
实验体会与感想
经过这次的测试技术实验,我个人得到了不少的收获,一方面加深了我对课本理论的认识,另一方面也提高了实验操作能力。现在我总结了以下的体会和经验。
这次的实验跟我们以前做的实验不同,因为我觉得这次我是真真正正的自己亲自去完成。所以是我觉得这次实验最宝贵,最深刻的。就是实验的过程全是我们学生自己动手来完成的,这样,我们就必须要弄懂实验的原理。在这里我深深体会到哲学上理论对实践的指导作用:弄懂实验原理,而且体会到了实验的操作能力是靠自己亲自动手,亲自开动脑筋,亲自去请教别人才能得到提高的。
我们做实验绝对不能人云亦云,要有自己的看法,这样我们就要有充分的准备,若是做了也不知道是个什么实验,那么做了也是白做。实验总是与课本知识相关的,比如回转机构实验,是利用频率特性分析振动的,就必须回顾课本的知识,知道实验时将要测量什么物理量,写报告时怎么处理这些物理量。
在实验过程中,我们应该尽量减少操作的盲目性提高实验效率的保证,有的人一开始就赶着做,结果却越做越忙,主要就是这个原因。我也曾经犯过这样的错误。在做电桥实验时,开始没有认真吃透电路图,仪器面板的布置及各键的功能,瞎着接线,结果显示不到数据,等到显示到了又不正确,最后只好找同学帮忙。
我们做实验不要一成不变和墨守成规,应该有改良创新的精神。实际上,在弄懂了实验原理的基础上,我们的时间是充分的,做实验应该是游刃有余的,如果说创新对于我们来说是件难事,那改良总是有可能的。比如说,在做电桥实验中,我们可以通过返回旋动,测量回程误差。
在实验的过程中我们要培养自己的独立分析问题,和解决问题的能力。培养这种能力的前题是你对每次实验的态度。如果你在实验这方面很随便,抱着等老师教你怎么做,拿同学的报告去抄,尽管你的成绩会很高,但对将来工作是不利的。比如在做回转机构实验中,经老师检查,我们的时域图波形不太合要求,我首先是改变振动的加速度,发现不行,再改变采样频率及采样点数,发现有所改善,然后不断提高逼近,最后解决问题,兴奋异常。在写实验报告,对于思考题,有很多不懂,于是去问老师,老师的启发了我,其实答案早就摆在报告中的公式,电路图中,自己要学会思考。在这次的实验中,我对一些测试硬件、软件及其使用有了更深刻的认识。比如说,我在电桥实验中,我知道应变片是怎么样的,面板是怎么接电桥的;在回转机构及悬臂梁实验中,我知道压电传感器是如此微小的,怎样通过放大、接口电路进行微机分析,滤波、窗函数的选择,及怎样使用LabView采样和分析,另外,用文档形式写报告,是我们以前从来没有尝试过的。可以说,做这次的测试技术实验,我们学生自己的能力得到了充分的发挥,跟以往那些充满条条框框的实验是不同的。
本人认为,在做这次的测试技术实验中,学习LabView和传感器是一件最有趣的事情,因为LabView这是一个虚拟的平台,它能够对各种测试结果进行准确的分析实在是太神奇了;而传感器则是测试技术的一个必不可少的前提,所以我觉得LabView和传感器对测试技术的起到非常重要的作用。
最后,通过这次的测试技术实验我不但对理论知识有了更加深的理解,对于实际的操作和也有了质的飞跃。经过这次的实验,我们整体对各个方面都得到了不少的提高,希望以后学校和系里能够开设更多类似的实验,能够让我们得到更好的锻炼。
心得体会
传感器与测试技术是一门理论性和实践性都很强的专业基础课,也是一门综合性的技术基础学科,它需要数学、物理学、电子学、力学、机械等知识,同时还要掌握各种物理量的变换原理、各种静态和动态物理量(如力、振动、噪声、压力和温度等)的测定,以及实验装置的设计和数据分析等方面所涉及的基础理论。许多测试理论和方法只有通过实际验证才能加深理解并真正掌握。实验就是使学生加深理解所学基础知识,掌握各类典型传感器、记录仪器的基本原理和适用范围;具有测试系统的选择及应用能力;具有实验数据处理和误差分析能力;得到基本实验技能的训练与分析能力的训练,使学生初步掌握测试技术的基本方法,具有初步独立进行机械工程测试的能力,对各门知识得到融会贯通的认识和掌握,加深对理论知识的理解。
测试技术实验课是本门课程的重要环节,其目的是培养学生的分析和解决实际问题的能力,从而掌握机械工程测试技术手段,为将来从事技术工作和科学研究奠定扎实的基础。
通过本门课程实验,以下能力得到了较大的提高:
1、了解常用传感器的原理和应用,以及传感器使用的注意事项及各种测试中不同传感器的选择方法。
2、培养具有综合应用相关知识来解决测试问题的基础理论;
3、培养在实践中研究问题,分析问题和解决问题的能力;
我们必须坚持理论联系实际的思想,以实践证实理论,从实践中加深对理论知识的理解和掌握。实验是我们快速认识和掌握理论知识的一条重要途径。我们认为,在这学期的实验中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
实验时应注意的问题
(1)在设置操作员权限时要注意先建帐套,再设置权限。(2)在修改会计科目时,注意将客户往来款项和供应商往来款项设置为总 账系统核算。
(3)注意由003出纳签字,001审核凭证,由002填制凭证。(4)先对帐,后结账,最后制作资产负债表。(5)制作报表时选择企业类型为股份制。
本次实验成败之处及其原因分析
成功之处在于老师的帮助和自己的努力,通过实验知道自己还有很多东西是不知道的,实验也让我学到了很多。本实验的关键环节及改进措施
做好本实验需要把握的关键环节(1)
按照步骤做,要不然容易出错。
(2)
在修改会计科目时,注意将客户往来款项和供应商往来款项设置为总账系统核算。
(3)
在设置操作员权限时要注意先建帐套,再设置权限。
(4)
填制凭证要认真,不要出错。
若重做本实验,为实现预期效果,仪器操作和实验步骤应如何改善
(1)软件应该升级,用U8.50(2)严格按照要求来做
这是本学期我们信号处理的最后一次实验,而且是设计实现FFT,即快速傅里叶变换。通过本实验,使得我在理论学习的基础上,加深了对FFT的理解,熟悉了应用FFT实现两个序列的线性卷积的方法,掌握了应用FFT对典型信号进行频谱分析的方法。
因为数字信号研究的方便性,所以对连续信号进行数字分析方法是十分必要的,即离散傅里叶变换,再与计算机的二进制数表示结合即可导出FFT,并且在本次实验中分析比较了相关时间复杂度。
通过参考代码编程实现,我体会到了MATLAB作为具有高效的计算能力、灵活的图形处理与可视化功能以及易学易懂的自然化语言的数学工具软件的强大功能,同时实验过程也是对该软件的编程使用的巩固。我不止一次地感受到了信号处理原理与数学知识的紧密联系以及强烈的趣味性。
临近期末,非常感谢周老师在本学期给予我们的细致生动的教学,也许以后不见得会再学习更多更加专业的后续课程,但是它对于拓展专业及相关知识面、温习所学的高数内容、应用理论分析问题、解决问题的能力却会让我受益匪浅。
高校实验室是培养高层次人才和开展科学研究的重要基地。在西方发达国家,学校对培养学生的动手能力是十分重视的,这一问题近年来也越来越受到我国教育界人士的广泛重视。为了提高学生的动手能力,让学生做相关实训并完成单片机实验报告,在实验的形式上注重培养学生的实验技能和动手能力。从单片机实验心得中学生就可以总结出大量的经验以适应当代社会的发展。
学习单片机这门课程(教学中选用 inter公司的mcs-51),要掌握单片机指令系统中汇编语言各种基本语句的意义及汇编语言程序设计的基本知识和方法,以及单片机与其他设备相连接的输入输出中断等接口技术。使学生从硬件软件的结合上理论联系实际,提高动手能力,从而全面掌握单片机的应用。
实验教学的全过程包括认识、基础、综合3个阶段。以往的单片机实验是进行软件的编制和调试,与实际应用中的硬件电路相脱节。使学生缺乏硬件设计及调试分析能力,对单片机如何构成一个单片机最小应用系统,缺乏认识。单片机论坛http://www.xiexiebang.com/bbs/ 发布的单片机实验板,通过计算机连接仿真器在实验板上把硬件和软件结合起来一起调试,软件的修改也非常方便,软件和硬件调试都通过后,把程序固化在 eprom当中,插上8051单片机构成一个完整的单片机应用系统。
实训心得体会
这次实训给我的总体感觉是比较简单,任务相对轻松。实训的头两天,我们首先通过电路的连接和测量,对于高频小信号调谐放大器,场效应管谐振放大器等一系列电路有了一个相对深刻的认识,不过在组装和焊接时我们遇到了很大的问题!开始发光二极管不亮我还以为是哪里接反了!几个要求正负的元件我都做了检查和修改!还是没有反应!后来又换了一个发光二极管还是不亮!后来只能反复检查!虽然结果不是很理想!但是我们努力了!这次实训还是学到了不少东西的。尤其是在焊接技术上有了长进,在分析和解决问题方面也明显看到自己的进步。我们还是要在电路设计上多多下工夫。
第二篇:实验设计报告心得体会
部分学生的反应
实验心得体会
这个学期我们学习了测试技术这门课程,它是一门综合应用相关课程的知识和内容来解决科研、生产、国防建设乃至人类生活所面临的测试问题的课程。测试技术是测量和实验的技术,涉及到测试方法的分类和选择,传感器的选择、标定、安装及信号获取,信号调理、变换、信号分析和特征识别、诊断等,涉及到测试系统静动态性能、测试动力学方面的考虑和自动化程度的提高,涉及到计算机技术基础和基于LabVIEW的虚拟测试技术的运用等。
课程知识的实用性很强,因此实验就显得非常重要,我们做了金属箔式应变片:单臂、半桥、全桥比较, 回转机构振动测量及谱分析, 悬臂梁一阶固有频率及阻尼系数测试三个实验。刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。但是我并没有气垒,在实验中发现问题,自己看书,独立思考,最终解决问题,从而也就加深我对课本理论知识的理解,达到了“双赢”的效果。
实验中我学会了单臂单桥、半桥、全桥的性能的验证;用振动测试的方法,识别一小阻尼结构的(悬臂梁)一阶固有频率和阻尼系数;掌握压电加速度传感器的性能与使用方法;了解并掌握机械振动信号测量的基本方法;掌握测试信
部分学生的反应
号的频率域分析方法;还有了解虚拟仪器的使用方法等等。实验过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的工程素质和科学道德,例如团队精神、交流能力、独立思考、测试前沿信息的捕获能力等;提高了自己动手能力,培养理论联系实际的作风,增强创新意识。
实验体会
这次的实验一共做了三个,包括:金属箔式应变片:单臂、半桥、全桥比较;回转机构振动测量及谱分析;悬臂梁一阶固有频率及阻尼系数测试。各有特点。
通过这次实验,我大开眼界,因为这次实验特别是回转机构振动测量及谱分析和悬臂梁一阶固有频率及阻尼系数测试,需要用软件编程,并且用电脑显示输出。可以说是半自动化。因此在实验过程中我受易非浅:它让我深刻体会到实验前的理论知识准备,也就是要事前了解将要做的实验的有关质料,如:实验要求,实验内容,实验步骤,最重要的是要记录什么数据和怎样做数据处理,等等。虽然做实验时,指导老师会讲解一下实验步骤和怎样记录数据,但是如果自己没有一些
部分学生的反应
基础知识,那时是很难作得下去的,惟有胡乱按老师指使做,其实自己也不知道做什么。
在这次实验中,我学到很多东西,加强了我的动手能力,并且培养了我的独立思考能力。特别是在做实验报告时,因为在做数据处理时出现很多问题,如果不解决的话,将会很难的继续下去。例如:数据处理时,遇到要进行数据获取,这就要求懂得labview软件一些基本操作;还有画图时,也要用软件画图,这也要求懂得excel软件的插入图表命令。并且在做回转机构振动测量及谱分析实验,获取数据时,注意读取波形要改变采样频率,等等。当然不只学到了这些,这里我就不多说了。
还有动手这次实验,使测试技术这门课的一些理论知识与实践相结合,更加深刻了我对测试技术这门课的认识,巩固了我的理论知识。
不过这次实验虽好,但是我认为它安排的时间不是很好,还有测试技术考试时间,因为这些时间安排与我们的课程设计时间有冲突,使我不能专心于任一项,结果不能保证每一个项目质量,所以如果有什么出错请指出!
部分学生的反应
实验体会与感想
经过这次的测试技术实验,我个人得到了不少的收获,一方面加深了我对课本理论的认识,另一方面也提高了实验操作能力。现在我总结了以下的体会和经验。
这次的实验跟我们以前做的实验不同,因为我觉得这次我是真真正正的自己亲自去完成。所以是我觉得这次实验最宝贵,最深刻的。就是实验的过程全是我们学生自己动手来完成的,这样,我们就必须要弄懂实验的原理。在这里我深深体会到哲学上理论对实践的指导作用:弄懂实验原理,而且体会到了实验的操作能力是靠自己亲自动手,亲自开动脑筋,亲自去请教别人才能得到提高的。
我们做实验绝对不能人云亦云,要有自己的看法,这样我们就要有充分的准备,若是做了也不知道是个什么实验,那么做了也是白做。实验总是与课本知识相关的,比如回转机构实验,是利用频率特性分析振动的,就必须回顾课本的知识,知道实验时将要测量什么物理量,写报告时怎么处理这些物理量。
在实验过程中,我们应该尽量减少操作的盲目性提高实验效率的保证,有的人一开始就赶着做,结果却越做越忙,主要就是这个原因。我也曾经犯过这样的错误。在做电桥实验时,开始没有认真吃透电路图,仪器面板的布置及各键的功能,瞎着接线,结果显示不到数据,等到显示到了又不正
部分学生的反应
确,最后只好找同学帮忙。
我们做实验不要一成不变和墨守成规,应该有改良创新的精神。实际上,在弄懂了实验原理的基础上,我们的时间是充分的,做实验应该是游刃有余的,如果说创新对于我们来说是件难事,那改良总是有可能的。比如说,在做电桥实验中,我们可以通过返回旋动,测量回程误差。
在实验的过程中我们要培养自己的独立分析问题,和解决问题的能力。培养这种能力的前题是你对每次实验的态度。如果你在实验这方面很随便,抱着等老师教你怎么做,拿同学的报告去抄,尽管你的成绩会很高,但对将来工作是不利的。比如在做回转机构实验中,经老师检查,我们的时域图波形不太合要求,我首先是改变振动的加速度,发现不行,再改变采样频率及采样点数,发现有所改善,然后不断提高逼近,最后解决问题,兴奋异常。在写实验报告,对于思考题,有很多不懂,于是去问老师,老师的启发了我,其实答案早就摆在报告中的公式,电路图中,自己要学会思考。在这次的实验中,我对一些测试硬件、软件及其使用有了更深刻的认识。比如说,我在电桥实验中,我知道应变片是怎么样的,面板是怎么接电桥的;在回转机构及悬臂梁实验中,我知道压电传感器是如此微小的,怎样通过放大、接口电路进行微机分析,滤波、窗函数的选择,及怎样使用LabView采样和分析,另外,用文档形式写报告,是我们以
部分学生的反应
前从来没有尝试过的。可以说,做这次的测试技术实验,我们学生自己的能力得到了充分的发挥,跟以往那些充满条条框框的实验是不同的。
本人认为,在做这次的测试技术实验中,学习LabView和传感器是一件最有趣的事情,因为LabView这是一个虚拟的平台,它能够对各种测试结果进行准确的分析实在是太神奇了;而传感器则是测试技术的一个必不可少的前提,所以我觉得LabView和传感器对测试技术的起到非常重要的作用。
最后,通过这次的测试技术实验我不但对理论知识有了更加深的理解,对于实际的操作和也有了质的飞跃。经过这次的实验,我们整体对各个方面都得到了不少的提高,希望以后学校和系里能够开设更多类似的实验,能够让我们得到更好的锻炼。
心得体会
传感器与测试技术是一门理论性和实践性都很强的专业基础课,也是一门综合性的技术基础学科,它需要数学、物理学、电子学、力学、机械等知识,同时还要掌握各种物理量的变换原理、各种静态和动态物理量(如力、振动、噪声、压力和温度等)的测定,以及实验装置的设计和数据分析等方面所涉及的基础理论。许多测试理论和方法只有通过实际验证才能加深理解并真正掌握。实验就是使学生加深理
部分学生的反应
解所学基础知识,掌握各类典型传感器、记录仪器的基本原理和适用范围;具有测试系统的选择及应用能力;具有实验数据处理和误差分析能力;得到基本实验技能的训练与分析能力的训练,使学生初步掌握测试技术的基本方法,具有初步独立进行机械工程测试的能力,对各门知识得到融会贯通的认识和掌握,加深对理论知识的理解。
测试技术实验课是本门课程的重要环节,其目的是培养学生的分析和解决实际问题的能力,从而掌握机械工程测试技术手段,为将来从事技术工作和科学研究奠定扎实的基础。
通过本门课程实验,以下能力得到了较大的提高:
1、了解常用传感器的原理和应用,以及传感器使用的注意事项及各种测试中不同传感器的选择方法。
2、培养具有综合应用相关知识来解决测试问题的基础理论;
3、培养在实践中研究问题,分析问题和解决问题的能力;
我们必须坚持理论联系实际的思想,以实践证实理论,从实践中加深对理论知识的理解和掌握。实验是我们快速认识和掌握理论知识的一条重要途径。
我们认为,在这学期的实验中,在收获知识的同时,还收获
部分学生的反应
了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
实验时应注意的问题
(1)在设置操作员权限时要注意先建帐套,再设置权限。(2)在修改会计科目时,注意将客户往来款项和供应商往来款项设置为总 账系统核算。
(3)注意由003出纳签字,001审核凭证,由002填制凭证。(4)先对帐,后结账,最后制作资产负债表。(5)制作报表时选择企业类型为股份制。
本次实验成败之处及其原因分析
成功之处在于老师的帮助和自己的努力,通过实验知道自己还有很多东西是不知道的,实验也让我学到了很多。
本实验的关键环节及改进措施
部分学生的反应
做好本实验需要把握的关键环节(1)
按照步骤做,要不然容易出错。
(2)
在修改会计科目时,注意将客户往来款项和供应商往来款项设置为总账系统核算。
(3)
在设置操作员权限时要注意先建帐套,再设置权限。
(4)
填制凭证要认真,不要出错。
若重做本实验,为实现预期效果,仪器操作和实验步骤应如何改善
(1)软件应该升级,用U8.50(2)严格按照要求来做
这是本学期我们信号处理的最后一次实验,而且是设计实现FFT,即快速傅里叶变换。通过本实验,使得我在理论学习的基础上,加深了对FFT的理解,熟悉了应用FFT实现两个序列的线性卷积的方法,掌握了应用FFT对典型信号进行频谱分析的方法。
部分学生的反应
因为数字信号研究的方便性,所以对连续信号进行数字分析方法是十分必要的,即离散傅里叶变换,再与计算机的二进制数表示结合即可导出FFT,并且在本次实验中分析比较了相关时间复杂度。
通过参考代码编程实现,我体会到了MATLAB作为具有高效的计算能力、灵活的图形处理与可视化功能以及易学易懂的自然化语言的数学工具软件的强大功能,同时实验过程也是对该软件的编程使用的巩固。我不止一次地感受到了信号处理原理与数学知识的紧密联系以及强烈的趣味性。
临近期末,非常感谢周老师在本学期给予我们的细致生动的教学,也许以后不见得会再学习更多更加专业的后续课程,但是它对于拓展专业及相关知识面、温习所学的高数内容、应用理论分析问题、解决问题的能力却会让我受益匪浅。
部分学生的反应
高校实验室是培养高层次人才和开展科学研究的重要基地。在西方发达国家,学校对培养学生的动手能力是十分重视的,这一问题近年来也越来越受到我国教育界人士的广泛重视。为了提高学生的动手能力,让学生做相关实训并完成单片机实验报告,在实验的形式上注重培养学生的实验技能和动手能力。从单片机实验心得中学生就可以总结出大量的经验以适应当代社会的发展。
学习单片机这门课程(教学中选用 inter公司的mcs-51),要掌握单片机指令系统中汇编语言各种基本语句的意义及汇编语言程序设计的基本知识和方法,以及单片机与其他设备相连接的输入输出中断等接口技术。使学生从硬件软件的结合上理论联系实际,提高动手能力,从而全面掌握单片机的应用。
实验教学的全过程包括认识、基础、综合3个阶段。以往的单片机实验是进行软件的编制和调试,与实际应用中的硬件电路相脱节。使学生缺乏硬件设计及调试分析能力,对单片机如何构成一个单片机最小应用系统,缺乏认识。单片机论坛http://www.xiexiebang.com/bbs/ 发布的单片机实验板,通过计算机连接仿真器在实验板上把硬件和软件结合起来一起调试,软件的修改也非常方便,软件和硬件调试都通过后,把程序
部分学生的反应
固化在 eprom当中,插上8051单片机构成一个完整的单片机应用系统。
第三篇:数字钟实验设计报告
数字钟实验设计报告
数字钟设计
一 设计任务
1.基本功能:以数字形式显示时、分、秒的时间,小时的计时要求为“24翻1”,分和秒的计时要求为60进位; 2.扩展功能:校时、正点报时及闹时功能;
二 电路工作原理及分析
数字电子钟主要由以下几个部分组成:秒信号发生器,时、分、秒计数器,显示器,校时校分电路,报时电路。
2.1数字钟的基本逻辑功能框图
图1 数字钟的基本逻辑功能框图
2.2振荡器的设计
振荡器是数字钟的核心。振荡器的稳定度及频率的精确度决定了数字钟的准确程度。通常选用石英晶体构成振荡器电路。一般来说,振荡的频率越高,计时精度越高。如果精度要求不高则可以采用由集成逻辑门与R、C组成的时钟源振荡器或集成电路计时器555与R、C组成的多谐振荡器,电路参数如图2所示.接通电源后,电容C1被充电,当Vc上升到2Vcc/3时,使vo为低电平,同时放电三极管T导通,此时电容C1通过R2和T放电,Vc下降。当Vc下降到Vcc/3时,vo翻转为高电平。电容C1放电所需时间为 tpL=R2ln2≈0.7R2C1 当放电结束时,T截止,Vcc将通过R1、R2向电容器 C1充电,一;Vc由Vcc/3上升到2Vcc/3所需的时间为
当平。如得到 振 故
tpH=(R1+R2)C1ln2≈0.7(R1+R2)C Vc 上升到2Vcc/3 时,电路又翻转为低电此周而复始,于是,是在电路的输出端就一个周期性的矩形波。其振荡频率为 f=1/(tpL+tpH)≈1.43/[(R1+2R2)C] 荡周期:T=T1+T2=(R1+2R2)C1In2 得 R1+2R2=T/C1In2=0.142k 选定R1=0.1K,R2=0.021k
图2 555振荡器(图中R1,R2值不为实际值)
图3 555振荡器产生的波形
2.3时、分、秒计数器电路
时、分、秒计数器电路由秒个位和秒十位,分个位和分十位及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,而时个位和时十位为24进制计数器。
2.4校时电路
通过开关,触发器,逻辑门组成的校时电路来校时。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的.三 数字电路的设计
3.1计数电路的设计
由2个74LS90计数器和4个74LS290计数器组成的时分秒的计数电路。
3.1.1六十进制计数电路
秒计数和分计数单元为60进制计数器,其输出为8421BCD码。采用十进制计数器74LS290来实现时间计数单元的计数功能。由图可知,74LS90为异步清零计数器,有异步清零端12,13脚(高电平有效)。
图4 六十进制计数器
(1)秒计数器电路的电路图如图4所示
秒个位计数单元为10进制计数器,无需进制转换,当QAQBQCQD从1001变成0000时,U1 向U3 的输入端发出一个脉冲信号,使秒十位进1位。
秒十位计数单元为6进制,当QAQBQCQD变成0110时,通过与QBQC相连的导线,给U3 两个清零端一个信号,把它的两个清零端都变成1,计数器的输出被置零,跳过0110到1111的状态,又从0000开始,如此重复,十位和个位合起来就是60进制。
(2)分计数器
分的个位和十位计数单元的状态转换和秒的是一样的,只是它要把进位信号传输给时的个位计数单元,电路图如图4所示
3.1.2二十四进制计数器电路
时计数单元为24进制计数器,其输出为8421BCD码。采用十进制计数器74LS90来实现时间计数单元的计数功能。
时计数器电路的电路图如图5所示
图5 二十四进制计数器
当“时”十位的QAQBQCQD为0000或0001时,“时”的个位计数单元是十进制计数器,当个位的QAQBQCQD到1010时,通过与非门使得个位74LS90上的清零端为0,则计数器的输出直接置零,从0000开始。当十位的QAQBQCQD为0010时,通过与非门使得该74LS90的清零端为0,“时”的十位又重新从0000开始,此时的个位计数单元变成4进制,即当个位计数单元的QAQBQCQD为0100时,就要又从0000开始计数,这样就实现了“时”24进制的计数。
3.2校时电路的设计
数字钟应具有分校正和时校正功能,因此,应截断分个位和时个位的直接计数通路,并采用正常计时信号与校正信号可以随时切换的电路接入其中。如图6所示,当开关J1按下时,直接给分个位计数器一个脉冲信号,使分计数器进1位,同时不影响数字钟的运行。同理,由J2对时计数器进行校对。
图6 校时校分电路
3.3 整点报时设计
仿广播电台正点报时电路的功能要求时:每当数字钟计时快要到正点时发出声响,通常按照4低音1高音的顺序发出间断声响,以最后一声高音结束的时刻是整点时刻。
每当数字钟计时快要到正点时发出声响,按照4低音1高音的频率发出间 断声响,前4低音声响频率为500HZ,后1高音声响频率为1000HZ。并以最后一 声高音结束的时刻为正点时刻。本设计中,报时电路采用TTL与非门。报时电路如图1.5所示。4声低音分别发生在59分51秒、53秒、55秒及57秒,最后一 声高音发生在59分59秒,声响均持续1秒。如表1.2所示。由表可得式1.1。只有当分十位的Q2M2Q0M2=11,分个位的Q3M1Q0M1=11,秒个位的Q2S2Q0S=11及秒个位的Q0S1=1时,音响电路才能工作。
3.4 报时电路的安装与调试
按照原理图及实物连线图接线。报时音响电路采用三极管3DG130来推动喇叭。报时所需的500Hz和1000Hz音频信号,分别取分频器的500Hz输出端和1000Hz输出端。
四 主要芯片的技术参数
4.1 74LS90芯片
74LS90芯片结构及引脚分布如图7所示,74LS90计数器是一种中规模的二一五进制计数器。它由四个主从JK触发器和一些附加门电路组成,整个电路可分两部分,其中FA触发器构成一位二进制计数器;FD、FC、FB构成异步五进制计数器,在74LS90计数器电路中,设有专用置“0”端R1、R2和置位(置“9”)端S1、S2。
图7 74LS90芯片
4.2 74LS290芯片
74LS190芯片的管脚分布如图8所示,其中,R9(1)、R9(2)称为置“9”端,R0(1)、R0(2)称为置“0”端;A、B端为计数时钟输入端,QAQBQCQD为输出端,NC表示空脚。74LS290具有以下功能:
置“9”功能:当R9(1)= R9(2)=1时,不论其他输入端状态如何,计数器输出QAQBQCQD=1001,而1001(2进制)=9(10进制),故又称为异步置数功能。
置“0”功能:当R9(1)和 R9(2)不全为1,并且R0(1)=R0(2)=1时,不论其他输入端状态如何,计数器输出QAQBQCQD=0000,故又称为异步清零功能或复位功能。
计数功能:当R9(1)和 R9(2)不全为1,并且R0(1)和R0(2)不全为1时,输入计数脉冲,计数器开始计数。
图8 74LS290芯片
五 心得体会
通过这次综合试验设计,大大提高了我分析问题的能力,同时提高了运用电工领域有关的软件进行电路模拟仿真的能力,将自己在课堂上学到的数电知识得到充分发挥,解决了很多问题,同时学到了很多元件和芯片的各种用途及性能,从中学到了很多书上没有明白的问题
本次的课程设计,是对所学的数电知识的一次综合应用,既考验了我的知识掌握程度,也锻炼了我的动手能力。在此过程中,我学到很多新知识,对电工电子课程的学习也更有兴趣了。虽然此次课程设计花费了一番功夫,却让我收获了很多,让我知道了学无止境,永远不能满足现有的知识,人生就像在爬山,一座山峰的后面还有更高山峰在等着你。
在这次数字电子钟课程设计中,也非常感谢同学的帮助!
第四篇:EDA综合实验设计报告
Beijing Jiaotong University
EDA实验设计报告
指导老师:刘彪
学
院:电子信息工程学院 姓
名:黄家维 学
号:13213012 班
级:电子1301
实验地点:电气楼406
实验日期:2014年5月29日星期四
实验一熟悉QuartusII软件的安装及使用(4学时)
我们通过下载及安装,可在电脑上运行Altera Quartus II。打开软件,新建一个工程,在工程底下新建一个VHDL File,即可实现编程功能。编完程序后点击Start Compilation可试运行程序,待编写的程序运行无误后,再在此工程下新建一个Vector Waveform File,给程序中的输入变量赋值,保存后点击Start Simulation即可实现程序的仿真。实验
二、组合逻辑电路的设计 实验方案设计、实验方法、1.实验方案
8-3优先编码器的VHDL描述有多种方法,设计过程中可以根据真值表采用case…when语句、with…select语句、if…then结构等多种手段实现,也可以根据真值表分析输入输出间的逻辑关系,根据逻辑关系写出其布尔表达式,根据布尔代数式调用基本逻辑门元件实现8-3优先编码器。
本实验中根据真值表用if-then结构实现8-3优先编码器 2.实验方法
首先根据前文所述,对照真值表的列出的不同输入逻辑状态,分情况依次输出于输入的对应关系,而后编译综合,由开发系统自行实现电路功能。实验步骤
1.设计输入 利用FILENew菜单输入VHDL源程序,创建源文件 2.设计项目的创建 1)原文件存储…..2)利用FILEProjectSet Project… 3.设计编译 ….4.器件选择及管脚分配 …..5.设计仿真 …..6.时序分析 …..7.编程下载(可选)….LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ENCODER IS
PORT(D:IN TO 7);
A:OUT STD_LOGIC_VECTOR(0 TO 2));END;ARCHITECTURE XIANI OF ENCODER IS BEGIN PROCESS(D)BEGIN IF
(D(7)='0')THEN A<=“111”;
ELSIF(D(6)='0')THEN A<=“110”;
STD_LOGIC_VECTOR(0
ELSIF(D(5)='0')THEN A<=“101”;
ELSIF(D(4)='0')THEN A<=“100”;
ELSIF(D(3)='0')THEN A<=“011”;
ELSIF(D(2)='0')THEN A<=“010”;
ELSIF(D(1)='0')THEN A<=“001”;
ELSIF(D(0)='0')THEN A<=“000”;
ELSE A<=“ZZZ”;
END IF;END PROCESS;END;
1用CASE语句设计一个4-16译码器。设计思路:
通过case语句可实现使能端的控制及4-16译码器的功能,即输入一个四位二进制数,即可使输出的16个端口中相应的端口电平发生变化。用case语句来实现译码器中相应数值选择的功能恰到好处。程序:
其中实体名为SB2,when “0000”=> outt(15 downto 0)<=“***0”等语句即可实现从0011译码到第4位输出发生变化。具体程序如下: library ieee;use ieee.std_logic_1164.all;entity SB2 is
port(inn:in std_logic_vector(3 downto 0);
shi:in std_logic;
outt:out std_logic_vector(15 downto 0));end entity SB2;architecture sb of SB2 is
begin process(inn,shi)begin if shi='1' then case inn is when “0000”=>
outt(15 0)<=“***0”;when “0001”=>
outt(15 0)<=“***1”;when “0010”=>
outt(15 0)<=“***1”;when “0011”=>
outt(15 0)<=“***1”;when “0100”=>
outt(15 0)<=“***1”;when “0101”=>
outt(15 0)<=“***1”;when “0110”=>
outt(15
downto
downto
downto
downto
downto
downto
downto 0)<=“***1”;when “0111”=>
outt(15 0)<=“***1”;when “1000”=>
outt(15 0)<=“***1”;when “1001”=>
outt(15 0)<=“***1”;when “1010”=>
outt(15 0)<=“***1”;when “1011”=>
outt(15 0)<=“***1”;when “1100”=>
outt(15 0)<=“***1”;when “1101”=>
outt(15 0)<=“***1”;
downto
downto
downto
downto
downto
downto
downto when “1110”=> outt(15 downto 0)<=“***1”;when “1111”=>
outt(15
downto 0)<=“***1”;when others
=>outt(15
downto 0)<=“***1”;end case;end if;end process;end architecture;仿真波形:
当输入inn为0000时,输出outt中的第16个端口变为低电平,即实现了译码的功能。实际仿真波形如下图。
实验3:时序电路设计
设计4位二进制同步加/减法可逆计数器,其中 输入: clr:
异步清零(高电平有效)clk:
时钟输入
d3-d0:
4位二进制数输入端 updown:
加/减法控制信号(‘1’加,‘0’减)输出: q3-q0:
4位二进制计数输出 co:
进位输出 bo:
借位输出 设计思路:
用if语句实现清零及加减法的选择。若选择updown=1,则当时钟输入为高电平时输入的d就加1,当d=1111时进位输出co就变1,最后将d中的数送给q来输出,以达到4位二进制同步加/减法可逆计数器的设计。程序:
其中实体名为
CTRDIV16,程序中两个关键的if语句即可实现加减法的控制及进位、借位的输出。具体程序如下: library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity CTRDIV16 is
port(clk:in STD_LOGIC;
updown:in STD_LOGIC;
clr:in STD_LOGIC;
q:out STD_LOGIC_VECTOR downto 0);
co,bo:out std_logic);end CTRDIV16;
(3 architecture sbb of CTRDIV16 is signal d:std_logic_vector(3 downto 0);begin process(clk,clr,updown)begin if clr='1' then
d<=“0000”;elsif clk'event and clk='1' then
if updown='1' then
d<=d+'1';
co<='0';
bo<='0';
else
d<=d-'1';
co<='0';
bo<='0';
end if;
if d=“1111” and updown='1' then
co<='1';
bo<='0';
end if;
if d=“0000” and updown='0' then
bo<='1';
co<='0';
end if;end if;end process;process(d)begin q<=d;end process;end sbb;仿真波形:
若选取updown=1(加法),通过波形即可看出,该程序已经实现了d的加法运算,同时在d=1111时,进位输出co跳转一次,即有一个进位。
若选取updown=0(减法),该程序也实现了d的减法运算,同时在d=0000是,借位输出bo跳转一次,即有一个借位输出。具体仿真波形如下。
updown=1(加法)updown=0(减法)
实验感想:
quartusII可以模拟硬件设计,即为硬件程序烧写模拟软件,操作简单,易于运行。它让我熟练了实际硬件的使用语言和逻辑顺序,并能实现一些简单硬件的程序编制和模拟仿真,使我对VHDL和EDA有了更加具体而深刻的认识,我认为这次实验设计对使我获益匪浅,一定会为我以后的学习生活带来不少的益处。
第五篇:《停车场管理系统》实验设计报告
重庆邮电大学计算机科学与技术学院
《数据结构》实验设计报告
题目:停车场管理系统 姓名:** 学号: 2010211998 班级:0491002 学院:计算机科学与技术学院
重庆邮电大学计算机科学与技术学院
目录
一、问题描述………………………………………………………03
二、问题分析………………………………………………………03
三、数据结构描述…………………………………………………04
四、算法设计………………………………………………………04
五、程序优缺点分析及优化………………………………………05
六、程序源代码……………………………………………………07
七、程序运行结果…………………………………………………13
八、心得体会………………………………………………………15 附
一、优化后的程序…………………………………………………16 附
二、优化后程序的运行结果………………………………………23
重庆邮电大学计算机科学与技术学院
一、问题描述
设计一个停车场管理系统。
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。【基本要求】
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车‚到达‛或‚离去‛信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。【选作内容】
(1)两个栈共享空间,思考应开辟数组的空间是多少?
(2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。
(3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。
二、问题分析
该问题需要以栈和队列作为基本的存储结构,以顺序栈模拟停车场,以链队列模拟车场外的便道。汽车进入停车场,即是在顺序栈上执行进栈操作,退出停车场即是在顺序栈上执行出栈操作;汽车进入便道,即是在链队列上执行入队操作,退出便道即是在链队列上执行出队操作。
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场。设要删除的元素在顺序表St中位置为i,则从i到top之间的全部元素进入到一个临时栈St1中, 其次再删除该元素,然后将临栈St1的元素按照‚先进后出‛的原则重新回到St中。若链队不空,则使队头进栈St,并以当前时刻开始计费。
程序需要构造两个顺序栈St和St1,其中St用于模拟停车场,St1用作临时栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。此外还需要构
重庆邮电大学计算机科学与技术学院
造一个链队列Qu用于模拟便道。
三、数据结构描述
/*定义顺序栈类型*/ typedefstruct { intCarNo[N];
/*车牌号*/ intCarTime[N];
/*进场时间*/ int top;
/*栈指针*/ } SqStack;
/*定义顺序栈类型*/
/*定义链队类型*/ typedefstructqnode { intCarNo;
/*车牌号*/ structqnode *next;} QNode;typedefstruct { QNode *front;/*队首和队尾指针*/ QNode *rear;} LiQueue;
四、算法设计
1.对于子函数模块,则调用顺序栈的基本操作和链队列的基本操作。如下:
/*顺序栈的基本运算算法*/ voidInitStack(SqStack *&s)
intStackEmpty(SqStack *s)
intStackFull(SqStack *s)
/*S中的插入新元素*/ int Push(SqStack *&s,int e1,int e2)
重庆邮电大学计算机科学与技术学院
/*删除S的栈顶元素,并用e1,e2返回其值*/ int Pop(SqStack *&s,int&e1,int &e2)
voidDispStack(SqStack *s)
/*以下为链队列的基本运算算法*/ voidInitQueue(LiQueue *&q)
intQueueLength(LiQueue *q)
intQueueEmpty(LiQueue *q)
voidenQueue(LiQueue *&q, int e)} intdeQueue(LiQueue *&q,int&e)
voidDisplayQueue(LiQueue *q)
2.主程序模块 void main(){ 初始化; do { 接受命令;
处理命令;
} while(命令!=‛退出‛); }
五、程序优缺点分析及优化
1.程序的优点
在程序中设置了kind变量,用于保存车的类别,便于计算不同类别车的停车费用,如下程序段:
printf(“n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:n”);scanf(“%d”,&kind);
其中kind可取值1,2,3;若kind取2,则表示一辆客车单位时间内的停车费用
重庆邮电大学计算机科学与技术学院
是一辆小汽车的2倍,若kind取3,则表示一辆卡车单位时间内的停车费用是一辆小汽车的3倍。
当然printf(“n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:n”);中的1.2.3也可以根据实际情况改变。比如,若实际中,一辆小汽车单位时间内的停车费用
是一辆客车的2倍,一辆卡车单位时间内的停车费用是一辆客车的4倍,则可以改成:
printf(“n请输入车的类别【车的类别:1.代表客车2.代表小汽车 4.代表卡车】:n”);
则kind可取值1,2,4; kind取1时对应的是客车,表示计算停车费用时以一辆客车单位时间内的停车费用为基数,若kind取2,则表示一辆小汽车单位时间内的停车费用是一辆客车的2倍,若kind取4,则表示一辆卡车单位时间内的停车费用是一辆客车的4倍。
2.程序的缺点
(1)输入时间时,程序没有检测错误功能 程序的输入形式如下: 设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:‘A’表示到达(arrival);‘D’表示离去(departure);‘E’表示输出结束(end)。
设每个输入项的形式为(Choose, CarNumber, Time),其中Choose表示每个括号中的第一项数据,即A/D/E; CarNumber表示每个括号中的第二项,即1/2/3;Time表示每个括号中的第三项,即5/10/15。设前后两次输入的数据中的第三项分别为Time1,Time2;则必须满足Time2≧Time1。而在实际输入过程中用户可能会忽略这一点,所以应该在输入Time是设置一个判断语句,若前后两次输入的Time不满足Time2≧Time1,则要求用户重新输入,直至满足要求为止。
(2)程序的界面不够清晰,一次性输入的数据项比较多,容易出错。3.改进思想(1)
为了保证前后两次输入的Time必须满足Time2≧Time1,使程序具有错误检测功能,在程序输入部分添加了如下代码:
printf(“输入现在的时刻:n”);
scanf(“%d”,&time2);
while(time2 { printf(“时间输入错误,请重新输入:n”); scanf(“%d”,&time2); 重庆邮电大学计算机科学与技术学院 } time1=time2;//time1定义为静态变量 (2)为了使程序有更清晰的界面,可在主函数中加入菜单的显示方式。且数据可以采用一次输入一个数据项,分步输入的方式,使输入过程少出错。于是可以将主函数进行修改。(见附录一) 六、程序源代码 #include /*停车场内最多的停车数*/ #define Price 2 /*每单位停车费用*/ typedefstruct { intCarNo[N]; /*车牌号*/ intCarTime[N]; /*进场时间*/ int top; /*栈指针*/ } SqStack; /*定义顺序栈类型*/ /*定义链队类型*/ typedefstructqnode { intCarNo; /*车牌号*/ structqnode *next;} QNode;typedefstruct { QNode *front;/*队首和队尾指针*/ QNode *rear;} LiQueue; /*顺序栈的基本运算算法*/ voidInitStack(SqStack *&s){ s=(SqStack *)malloc(sizeof(SqStack));s->top=-1; 重庆邮电大学计算机科学与技术学院 } intStackEmpty(SqStack *s){ return(s->top==-1);} intStackFull(SqStack *s){ return(s->top==N-1);} /*S中的插入新元素*/ int Push(SqStack *&s,int e1,int e2){ if(s->top==N-1) return 0;s->top++;s->CarNo[s->top]=e1;s->CarTime[s->top]=e2;return 1;} /*删除S的栈顶元素,并用e1,e2返回其值*/ int Pop(SqStack *&s,int&e1,int &e2){ if(s->top==-1) return 0;e1=s->CarNo[s->top];e2=s->CarTime[s->top];s->top--;return 1;} voidDispStack(SqStack *s){ int i;for(i=0;i<=s->top;i++) printf(“%d ”,s->CarNo[i]);printf(“n”);} /*以下为链队列的基本运算算法*/ 重庆邮电大学计算机科学与技术学院 voidInitQueue(LiQueue *&q){ q=(LiQueue *)malloc(sizeof(LiQueue));q->front=q->rear=NULL;} intQueueLength(LiQueue *q){ int n=0;QNode *p=q->front;while(p!=NULL){ n++; p=p->next;} return(n);} intQueueEmpty(LiQueue *q){ if(q->rear==NULL) return 1;else return 0;} voidenQueue(LiQueue *&q, int e){ QNode *s;s=(QNode *)malloc(sizeof(QNode));s->CarNo=e;s->next=NULL;if(q->rear==NULL)/*若链队为空,则新结点是队首结点又是队尾结点*/ q->front=q->rear=s;else { q->rear->next=s;/*将*s结点链到队尾,rear指向它*/ q->rear=s;} } intdeQueue(LiQueue *&q,int&e){ QNode *t;if(q->rear==NULL)/*队列为空*/ return 0; 重庆邮电大学计算机科学与技术学院 if(q->front==q->rear)/*队列中只有一个结点时*/ { t=q->front; q->front=q->rear=NULL;} else /*队列中有多个结点时*/ { t=q->front; q->front=q->front->next;} e=t->CarNo;free(t);return 1;} voidDisplayQueue(LiQueue *q){ QNode *p=q->front;while(p!=NULL){ printf(“%d ”,p->CarNo); p=p->next;} } void main(){ char choose;/*用于选择命令*/ int no,e1,time,e2,kind;/*用于存放车牌号、当前停车时刻*/ inti,j;SqStack *St,*St1;/*临时栈St1,当停车场中间的车要推出去时,用于倒车*/ LiQueue *Qu;InitStack(St);InitStack(St1);InitQueue(Qu);printf(“ #”);printf(“n# #”);printf(“n# 欢迎使用停车场管理系统 #”); 重庆邮电大学计算机科学与技术学院 printf(“n# #”);printf(“n# 【输入提示】:汽车状态由A、D、E 表示。其中,A:表示汽车到达 D:表示汽车离去, #”);printf(“n# E:表示输出结束。每次输入的数据由三项构成,即:(汽车状态,车牌号,当前时刻)#”);printf(“n# 数据项之间以逗号分开。例如输入示范:A,1,5 #”);printf(“n #n”);printf(“n正在读取汽车信息...n”); do { printf(“n*****************************************************************”);printf(“n请分别输入汽车状态(A/D/E)、车牌号和当前时刻(数据之间以逗号分开):n”);scanf(“ %c,%d,%d”,&choose,&no,&time); switch(choose){ /*************************** 汽车到达 ******************************/ case 'A': case 'a': if(!StackFull(St)) /*停车场不满*/ { Push(St,no,time); printf(“该车在停车场中的位置是:%dn”,St->top+1); } else /*停车场满*/ { enQueue(Qu,no); printf(“n停车场已满,该车进入便道,在便道中的位置是:%dn”,QueueLength(Qu)); } break;/************************* 汽车离开 ********************************/ case 'D': case 'd': 重庆邮电大学计算机科学与技术学院 printf(“n请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:n”);scanf(“%d”,&kind); for(i=0;i<=St->top && St->CarNo[i]!=no;i++); if(i>St->top)/*要离开的汽车在便道上*/ { /*汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾*/ while(Qu->front->CarNo!=no) { enQueue(Qu,Qu->front->CarNo); // deQueue(Qu,Qu->front->CarNo); Qu->front = Qu->front->next; } deQueue(Qu,no);printf(“n便道上车牌号为%d的汽车已离开!n”,no); printf(“n当前便道中的车辆的车牌号分别是:”); DisplayQueue(Qu); printf(“n”); } else /*要离开的汽车在停车场中*/ { for(j=i;j<=St->top;j++) { Pop(St,e1,e2);/*e1,e2用来返回被删元素的车牌号和停车时刻*/ Push(St1,e1,e2);/*倒车到临时栈St1中,将e1,e2插入到临时栈中*/ } Pop(St,e1,e2); /*该汽车离开*/ printf(“n车牌号为%d的汽车停车时间为:%d。停车费用为:%dn”,no,time-e2,(time-e2)*Price*kind); /*对小汽车而言:当前时刻 减去 该车当时停车的时刻,再乘以价格就是费用,而对于客车和卡车而言,就要乘以kind倍小汽车的价格*/ while(!StackEmpty(St1))/*将临时栈St1重新回到St中*/ { Pop(St1,e1,e2); Push(St,e1,e2); } if(!QueueEmpty(Qu))/*队不空时,将队头进栈St*/ { 重庆邮电大学计算机科学与技术学院 deQueue(Qu,e1); Push(St,e1,time);/*以当前时间开始计费*/ } printf(“n当前停车场中的车辆的车牌号分别是:”);//输出停车场中的车辆 DispStack(St); } break;/************************ 结束 *********************************/ case 'E': case 'e': printf(“n正在退出系统...n”); if(!StackEmpty(St))//显示停车场情况 { printf(“n当前停车场中的车辆的车牌号分别是:”);//输出停车场中的车辆 DispStack(St); printf(“n”); } else printf(“n当前停车场中无车辆nn”); break;/************************ 结束 *********************************/ default: /*其他情况*/ printf(“输入的命令错误!n”); break;} } while(choose!='E'&&choose!='e');} 七、程序运行结果 取N=2,即停车场内最多的停车数为2 取 Price=2,即每单位停车费用为2 输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),重庆邮电大学计算机科学与技术学院 (‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。程序演示结果如下图所示: 重庆邮电大学计算机科学与技术学院 八、心得体会 (1)该实验涉及到顺序栈的建立、插入、删除等操作,涉及到了链队列的建立、插入、删除等操作。做这个实验,加深了我对以上知识点的认识和理解。(2)提高了 C 语言编程的能力。在程序设计过程中,需要经过反复地编写,调试,运行,发现问题并解决问题,在这次实验的设计中,我加深对程序的了解,提高自己的实际动手能力和独立思考的能力同时我也学会了综合以前学到的基本知识来解决较大问题的方法。 (3)一方面我养成了注重程序细节的意识。例如: printf(“n请分别输入汽车状态(A/D/E)、车牌号和当前时刻(数据之间以逗号分开):n”);scanf(“ %c,%d,%d”,&choose,&no,&time); 重庆邮电大学计算机科学与技术学院 %c,前面必须留一个空格,否则程序在显示的时候就会有一些问题。 (4)另一方面我也深刻地认识到了《数据结构》这门课程的重要性。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构的研究不仅涉及到计算机硬件的研究,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必须 考虑如何组织数据,以便使查找和存取数据元素更为方便。可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一个核心内容,是从事计算机科学研究及其应 用的科技工作者必须掌握的重要内容 附 一、优化后的程序 #include /*停车场内最多的停车数*/ #define Price 2 /*每单位停车费用*/ typedefstruct { intCarNo[N]; /*车牌号*/ intCarTime[N]; /*进场时间*/ int top; /*栈指针*/ } SqStack; /*定义顺序栈类型*/ /*定义链队类型*/ typedefstructqnode { intCarNo;/*车牌号*/ structqnode *next;} QNode;typedefstruct { QNode *front;/*队首和队尾指针*/ QNode *rear;} LiQueue; /*顺序栈的基本运算算法*/ voidInitStack(SqStack *&s){ s=(SqStack *)malloc(sizeof(SqStack));s->top=-1;} 重庆邮电大学计算机科学与技术学院 intStackEmpty(SqStack *s){ return(s->top==-1);} intStackFull(SqStack *s){ return(s->top==N-1);} /*S中的插入新元素*/ int Push(SqStack *&s,int e1,int e2){ if(s->top==N-1) return 0;s->top++;s->CarNo[s->top]=e1;s->CarTime[s->top]=e2;return 1;} /*删除S的栈顶元素,并用e1,e2返回其值*/ int Pop(SqStack *&s,int&e1,int &e2){ if(s->top==-1) return 0;e1=s->CarNo[s->top];e2=s->CarTime[s->top];s->top--;return 1;} voidDispStack(SqStack *s){ int i;for(i=0;i<=s->top;i++) printf(“%d ”,s->CarNo[i]);printf(“n”);} /*以下为链队列的基本运算算法*/ voidInitQueue(LiQueue *&q){ q=(LiQueue *)malloc(sizeof(LiQueue)); 重庆邮电大学计算机科学与技术学院 q->front=q->rear=NULL;} intQueueLength(LiQueue *q){ int n=0;QNode *p=q->front;while(p!=NULL){ n++; p=p->next;} return(n);} intQueueEmpty(LiQueue *q){ if(q->rear==NULL) return 1;else return 0;} voidenQueue(LiQueue *&q, int e){ QNode *s;s=(QNode *)malloc(sizeof(QNode));s->CarNo=e;s->next=NULL;if(q->rear==NULL)/*若链队为空,则新结点是队首结点又是队尾结点*/ q->front=q->rear=s;else { q->rear->next=s;/*将*s结点链到队尾,rear指向它*/ q->rear=s;} } intdeQueue(LiQueue *&q,int&e){ QNode *t;if(q->rear==NULL)/*队列为空*/ return 0;if(q->front==q->rear)/*队列中只有一个结点时*/ { t=q->front; 重庆邮电大学计算机科学与技术学院 q->front=q->rear=NULL;} else /*队列中有多个结点时*/ { t=q->front; q->front=q->front->next;} e=t->CarNo;free(t);return 1;} voidDisplayQueue(LiQueue *q){ QNode *p=q->front;while(p!=NULL){ printf(“%d ”,p->CarNo); p=p->next;} printf(“n”);} void main(){ int choose;/*用于选择命令*/ int no,e1,time2,e2,no_away;/*no_away:汽车离开时输入车牌号;time2:当前停车时刻;*/ static int time1;/*静态变量time1用于存放上次时刻*/ inti,j;int kind;/*车的类别*/ time1=time2=0;SqStack *St,*St1;/*临时栈St1,当停车场中间的车要推出去时,用于倒车*/ LiQueue *Qu;InitStack(St);InitStack(St1);InitQueue(Qu);printf(“ ”);printf(“n# #”); 重庆邮电大学计算机科学与技术学院 printf(“n# 欢迎使用停车场管理系统 #”);printf(“n# #”);printf(“n n”);do { printf(“n******************** 主菜单 ****************************n”); printf(“** 1:车辆到达 **n”); printf(“** 2:车辆离开 **n”); printf(“** 3:显示停车场的车辆 **n”); printf(“** 4:显示便道中的车辆 **n”); printf(“** 0:退出 **n”); printf(“********************************************************n”); printf(“请选择:”); scanf(“%d”,&choose); switch(choose) { case 1: // #汽车到达 ###### printf(“输入输入车牌号、当前时刻(数据之间以逗号隔开):n”); scanf(“%d,%d”,&no,&time2);/*依次输入车牌号、当前停车时刻*/ while(time2 { printf(“时间输入错误,请重新输入当前时刻:n”); scanf(“%d”,&time2); } time1=time2; if(!StackFull(St)) /*停车场不满*/ { Push(St,no,time1); printf(“该车在停车场中的位置是:%dn”,St->top+1); 重庆邮电大学计算机科学与技术学院 } else /*停车场满*/ { enQueue(Qu,no); printf(“n停车场已满,该车进入便道,在便道中的位置是:%dn”,QueueLength(Qu)); } break; case 2: // ##汽车离开 #### printf(“输入车牌号:n”); scanf(“%d”,&no_away); printf(“请输入车的类别【车的类别:1.代表小汽车 2.代表客车 3.代表卡车】:n”);scanf(“%d”,&kind); printf(“输入现在的时刻:n”);/*现在的时刻time1得大于之前的时刻time1*/ scanf(“%d”,&time2); while(time2 { printf(“时间输入错误,请重新输入:n”); scanf(“%d”,&time2); } time1=time2; for(i=0;i<=St->top && St->CarNo[i]!=no_away;i++); if(i>St->top)/*汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾*/ { while(Qu->front->CarNo!=no_away) { enQueue(Qu,Qu->front->CarNo); Qu->front = Qu->front->next; } deQueue(Qu,no_away);printf(“n便道上车牌号为%d的汽车已离开!n”,no_away); printf(“n当前便道中的车辆的车牌号分别是:”); DisplayQueue(Qu); printf(“n”); } else 重庆邮电大学计算机科学与技术学院 { for(j=i;j<=St->top;j++) { Pop(St,e1,e2);/*e1,e2用来返回被删元素的车牌号和停车时刻*/ Push(St1,e1,e2);/*倒车到临时栈St1中,将e1,e2插入到临时栈中*/ } Pop(St,e1,e2); /*该汽车离开*/ printf(“n车牌号为%d的汽车停车费用为:%dn”,no_away,(time2-e2)*Price*kind);/*对小汽车而言:当前时刻 减去 该车当时停车的时刻,再乘以价格就是费用,而对于客车和卡车而言,就要乘以kind倍小汽车的价格*/ while(!StackEmpty(St1))/*将临时栈St1重新回到St中*/ { Pop(St1,e1,e2); Push(St,e1,e2); } if(!QueueEmpty(Qu))/*队不空时,将队头进栈St*/ { deQueue(Qu,e1); Push(St,e1,time1);/*以当前时间开始计费*/ } } break; case 3: // #####显示停车场情况 if(!StackEmpty(St)) { printf(“当前停车场中的车辆的车牌号分别是:”);/*输出停车场中的车辆*/ DispStack(St); } else printf(“停车场中无车辆!n”); break; case 4: // ######显示便道情况 # if(!QueueEmpty(Qu)) { 重庆邮电大学计算机科学与技术学院 printf(“ 当前便道中的车辆的车牌号分别是:”);/*输出便道中的车辆*/ DisplayQueue(Qu); } else printf(“便道中无车辆!n”); break; case 0: // # 结束 ### printf(“n正在退出系统...n”); if(!StackEmpty(St)) { printf(“当前停车场中的车辆的车牌号分别是:”);/*输出停车场中的车辆*/ DispStack(St); } if(!QueueEmpty(Qu)) { printf(“ 当前便道中的车辆的车牌号分别是:”);/*输出便道中的车辆*/ DisplayQueue(Qu); } break; /**********************************************************/ default: /*其他情况*/ printf(“输入的命令错误!n”); break; } } while(choose!=0);} 附 二、优化后程序的运行结果 取N=2,即停车场内最多的停车数为2 取 Price=2,即每单位停车费用为2 输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。程序演示结果如下图所示: 重庆邮电大学计算机科学与技术学院 重庆邮电大学计算机科学与技术学院 重庆邮电大学计算机科学与技术学院 重庆邮电大学计算机科学与技术学院 重庆邮电大学计算机科学与技术学院