一
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说三极管PNP管脚不懂怎么放置,不懂分得二极管的正负极,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在梁强老师的辛勤指导下,终于游逆而解。同时,在梁强老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
二
课程设计的心得体会
我们组一共有三个人,但其他两个人是真的神龙见首不见尾,除了在最后答辩的时候他们一起坐在了我旁边,冠冕堂皇的指着我画了几遍的图说了几嘴,我想可能他们自己都不知道自己在说怎么,虽然有的东西他们也答出来了。我佩服他们的勇气,羡慕他们的运气(我见到的很多做了10 天的人最后的成绩都有不如他们的),但是鄙视他们的做法。
所幸的是,我得到了很多同学的帮助。我想没有他们我可能都要放弃了,因为我本人对单片机也并不是很熟悉,学的东西好像它是它,我是我似的,理论联系不了实际。以前的汇编语言没学好,一开始的程序这块儿就要令我抓狂了。后来请教我们班的一个男生,每次跟他一起到试验室调试程序(他们组也只有他一个人动手),看他边做边给我讲解。最后在开发机上做出来的时候,虽然不是我自己写的,但看他那么高兴,我也有一种分享到的成就感。后来我们组就用了他写的程序,他自己又抽空做了些拓展。
接下来就是做硬件方面的焊接工作了。没想到这项看起来不需要多少技术的工作却是非常的劳心劳力。很多次是早上起来带瓶水带些吃的到实训中心,一泡就是一天。我看到有很多人跟我一样,不同的是他们是三三两两,而我大部分时间都是一个人做。在这个时候也有很多人帮助我,或是热心的帮我带饭,或是在我打盹儿的时候帮我做点焊接。大家都鼓励我,即使最后出不来东西,但是一定要坚持把它做完。当我想放弃的时候,我也这么对自己说,即使你做出来的是次品甚至不合格品,但是你一定要拿出来一件成品。
在要验收前,终于做了一件成品出来,不幸的是它真的是一件不合格品。帮我的那个男生做的已经出来了,所以最后应该还是我的焊接方面的问题。有一点灰心,想再重做来不及了,单是检查线路却也查不出来什么问题。那么就准备答辩吧。我对着电路图再看课本,发现以前很多觉得很难记的东西现在记起来容易多了,因为整天都在同它们打交道。51的引脚及其功能,A/D转换器的,驱动器的,所有我用到的我都一再的看书了解,同时请教同学我看书过程当中的疑惑。在这个过程中又发现了以前焊接当中出的一些问题,能改的就改,不能改的,咳,要是时间再多一些,或者我能早点做好,要是不只是我一个人动手……算了吧,不要想那些如果,还是准备我自己的,做好我现在能做的吧。
还好,验收还算成功,得了3分,不是很高,但是我觉得对我来说已经很好,代表了我真实的水平,我觉得我对单片机的一些知识在这个动手的过程中真的是从无到有增长的。同时我也尽量不去想别人得了多少分,没有什么不平衡的,有些人付出的是努力,有些人付出的是风险代价,其实这也没有什么不一样,这一点我早就了解。
最后,我发现自己对单片机竟然也有了一点兴趣,想暑假回家以后自己去买一些东西来做,再补一补汇编语言。有什么问题请教下以前的那些老同学好了,他们好厉害,在高中劳动课就成功的做出过调频收音机,大一暑假的时候参加了学校的电子竞赛培训接着比赛,不过后来怎么样我就不知道了。汗。看来要多保持联络,这次回家就好好找他们叙叙旧。 三 1前言
通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。特别是作为高职生,更要注重实践这一环节,只有这样我们才能成为合格的计算机人材。其目录为:
1.程序要求
2.算法分析
3.流 程 图
4.源 程 序
5.调试结果
6.实习体会
2 程序要求
学生成绩管理是高等学校教务管理的重要组成部分,其内容较多,为了简化计论,要求设计的管理系统能够完成以下六种功能:
(1)学生注册登记;
(2)登记学生成绩;
(3)修改学生成绩;
(4)打印一个班级学生的单科成绩;
(5)求出每个学生一学期中各科的平均成绩;
(6)打印某一课程成绩处于指定分数段内的学生名单。
3 算法分析
1. 学生成绩管理软件的数据结构
学生成绩一般都是以班级为单位进行管理的,一个班级用一个结点来表示。考虑到插入和删除的方便,这些以班级为单位的结点用链表方式组成一个主目录。每个结点有四个域:
(1)班级代号;
(2)课程情况;
(3)学生情况;
(4)班级顺序链。
课程情况应能反映出大专生所学过的全部课程。因课程是逐年增多的,所以采用链表结构以便能不断插入新的课程。该班学过的课程构成一个课程链表,所以班级结点中的课程情况用课程链表表示。学生情况主要反映学生的学号,姓名,每学期学生的成绩情况。因为学号总是顺序排列的,所以选用一个结构体数组作为反映学生情况的登陆记表。该 数组的下标值接上班级结点中的班级号就是学号。例如,设每班学生数不超过40个人,班级号为9612,某学生在登记表中相应分量的下标值为26,则该学生的学号为961226。另外 ,学生成绩管理要分6个学期,所以在学生登记表中,开设6个指针域,每个指针指向该生某学期某门课程学成绩的结点。
各结点结构如下所示:
(1)主目录中班级的结点为:
班级号 课程链 班级顺序链 学生登记表
(2)程链表中的结点:
课程代号 学期号 二叉树链 课程顺序链
(3)分数链表中的结点为:
左链 学号 课程代号 成绩分数顺序 右链
为了便于登记和查询学生的成绩,选择二叉排序来存放学生的成绩。
每个班级的每门课程对应一棵二叉树。通过主目录中班级结点的课程链找到指定的课程结点,再通过课程结点中的二叉树指针指向该门课程的成绩二叉排序树。另外通过主目录中班级结点的学生登记表中的学期指针,指向该学生本学期某门课程的分数结点,并以分数结点的分安数顺序链勾链该生各门课程的成绩。
在登记成绩和查询分数时,都要用到课程代号。课程 代和课程名称是一一对应的。为了简化程序,课程名称和代号对照表设计为一个向量,向量的下标值就作为课程代号,而向量中的元素就是课程名称,这样可以省去代号域。
1.各函数的功能和实现
学生成绩管理的相关功能由对应的函数来实现。
(1)学生注册登记
学生入学后,首先应是注册登记。注册时应先检查该学生所在班级是否已经登入主目录,未登入则若调用新结点后登陆入主目录。然后将新调入的班级结点中对应域赋初值,最后再读入学生的学号和姓名并一一填入学生登记表。这样就完成了一个班级的注册和登记工作。
(2)登记学生成绩
学生注册后才可以登记成绩,所以先要检查这个班级是否已经注册,班级中是否有这个学生。在确认有此学生后,登记该生成绩。这时需完成两个操作。一个查询课程代号,另一个是将成绩填入二叉树。这两个操作分别用两个函数来实现:
① 查询课程代号;
② 插入二叉排序树。
有了这两个函数,登记学生成绩的工作可以很方便地完成。首先查处课程代号,调用课程结点,填入课程代号和学期号;再在二叉树链域中置初值为NULL,将课程结点插入为课程链表的头结点。接着读入每个学生的学号和成绩,每个学生的每门课程都生成一分数结点插入到相应课程的二叉树中。同时,还要将该分数结点链入该生这学期各科成绩的分数链表中。学生登记表中的学期指针域中存放该分数链表的头结点地址。
(3)修改学生成绩
若登记的学生成绩有错误,则调用修改学生成绩的函数便可以加以修改。修改时从主目录出发,查到班级,再从学生登记表中查对学号和姓名,再在与学期匹配的学期指针域中取得该生的学生链表的头指针,然后搜索分数链表,查到指定课程的分数结点,就可修改成绩。
(4)打印一个班级学生的单科成绩
由于学生成绩是用二叉树排序树来存储的,所以采用中序遍历的方法就可以按次序打印出学姓名和成绩。在打印了程序中,从主目录开始查到班级号,就可以从课程结点的二叉树链域中取得成绩二叉排序树的头指针;然后调用中序遍历了程序就可进行打印,同时可求出平均成绩和各个分数段的人数。
(1) 求出每个学生一学期中各科的平均成绩
此了程序从主目录查对班级号开始,通过学生登记表中每个学生的学期指针取得各自的分数链表的头指针。顺着分数链就可求出该生本学期各科的平均成绩。
(2)打印某一课程成绩处于指定分数段内的学生名单
对二叉树序树进行中序扁历,但扁历时应判断当前成绩是否处于分数段内而决定是否打印。4 流 程 图
5 程序源代码
include<STDIO.H>
#include<CONIO.H>
#include<STDLIB.H>
#include<BIOS.H>
#include<IO.H>
#define CR 13
#define ESC 27
#define UP 72
#define DOWN 80
#include<string.h>
#include<stdio.h>
#define CRNUM 200
#define STNUM 40
#define TERMS 6
6调试结果
7实习体会
经过一个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。