c语言课程设计指导书(通用8篇)
一、课程设计的目的及意义
设计并实现该课程设计的目的主要在于:
1)对一定规模的综合软件编程有一定的经历与认识。在做的过程中,你会发现,提前的规划即分析与设计重要过编程过程,否则
会走很多弯。
2)综合并结合现实应用使用C语言的知识。这个设计会用到C语言这门课的全部知识,其中以文件、数组与链表为主,书中提
到的主要及重点算法都会使用到。
3)不仅涉及编程,还涉及到功能分析、模块规划等方面的知识,这些知识在后续课程学习时,会经常使用。这些知识在学《软件
工程》这门课时,会系统讲解。希望有了这次的经历,你能更好的体会《软件工程》这门课的意义,并能学好和用好其中的知识。
4)每项功能的实现,一般有多种方法,这里都强调使用时空效率最高的方法,此次实现只是让你有一个初步的认识,在下学期学习了《数据结构》后,你就知道为什么让你这样做,你也对《数据结构》这门课的作用及意义有所了解。
二、课程设计的实现思路
任何一个管理系统的基本操作主要如下:
1)能录入并能向文件里保存数据
2)能计算并修改文件里的数据
3)能向文件里追加数据
4)能查找文件里是否有某项数据
5)根据要求显示文件里的某些数据或全部数据
6)能在文件里插入或删除某项数据
7)按某个数据项进行排序生成排序文件
可以看出,所有操作的围绕的中心是文件。而文件本身提供的功能相当有限,主要是打开与关闭文件、读与写文件、在文件末尾追加数据、修改文件里的某些数据(这个前提是需要用fseek找到修改的位置再往里写数据),这四项功能。其它的功能文件不能直接完成,需要借由内存将相应的操作完成后,再写入文件。比如:
1)录入并向文件里保存数据的实现思路:C语言并没有提供由键盘输入数据直接录入文件的功能,只有内存变量向文件写入数据的功能,而由键盘输入数据可以到内存变量,因此实现此部分功能时,应当由键盘将数据放入变量,再由变量写入文件。这里录入要求不采用书上例子,它是用结构体数组,我们要求只用一个结构体实现。先将一个人的信息放入结构体,将这个结构体数据写入文件后,再将下一个人的信息继续放在这个结构体中,再将这个结构体写入文件。这样节省内存空间。
2)计算并修改文件里数据的实现思路:这部分的功能的实现应当先将文件的数据读到变量当中,在变量当中完成计算,再将数据
写入文件。如果只是修改文件的数据,并不计算,则可以直接定位到文件中相应的位置,写入数据,则把原来的数据覆盖以完成修改。
3)向文件里追加数据的实现思路:文件本身提供了这项功能,只要以 “a”的方式打开就行。然后向文件写入的数据,直接放在文
件末尾。
4)查找文件里是否有某项数据的实现思路:C语言并没有提供判断文件内容的功能,必须将文件内容读到变量里再进行判断。实
际的查找可能是在大量的数据里的查找,高效的查找是折半查找(下学期的数据结构专门讲这一内容),折半的前提是排序,因此需先对排序后的文件读出,以折半方式查找。(这要要求,是希望巩固折半查找与排序两个重要算法,至于它的时空效率是否高,可以学完《数据结构》知识后自己再判断)。
5)根据要求显示文件里的某些数据或全部数据的实现思路:C语言没有提供将文件内容显示的功能,所以需要将文件内容读到变
量里,再显示变量。
6)在文件里插入或删除某项数据的实现思路:C语言同样没有直接提供该项功能,因此必须借由内存变量完成。由以前的知识知
道,在大量的数据里删除一个数,用数组表示不合适,因为涉及到大量的数据的移动,用链表是合适的,效率高(关于这一点,在《数据结构》这门课有详细的讲解)。因此完成这部分操作要求用链表实现,先将文件里的数据读出组织成链表,在链表上完成插入与删除后,再将链表中的数据写入文件。
7)按某个数据项进行排序生成排序文件的实现思路:排序是在数组里实现。因此先要将文件里的数据读到数组里,将数组排完序
后,再将数据写入文件(一般写入一个新文件)。
因此对每一项功能,关于内存变量的使用有三种方案:一个结构体、结构体数组与结构体链表,实现每个功能应当只会使用其中的一种结构,使用哪种结构取决于你的做的事和使用的算法,比如排序必须用数组,插入与删除必须用链表,其它的根据要求可能会有多种选择,但只有一种时空效率最高,可以从这个角度选择一种结构。
最终实现的软件,只要提供这上面提到的所有功能就算满足要求,至于其它功能,能结合实际要求考虑周全,更好。
三、课程设计的方法
此次课程设计的功能较多,相对于以往所做程序规模较大,因此在编写与调试程序时,特别注意调试程序的方法,以提高效率。具体方法如下:
1)将功能分解,细分至每个函数要完成的功能后,编写一个函数测试一个函数,测试完全通过后,再编写测试下一个函数,然后
再将这些函数组合后完成相应功能。将全部功能完成后,再组合成软件,最后再加入菜单控制。从《软件工程》的角度看,这是从底至上的开发过程,这样便于测试与实现,出错也便于定位错误位置。不要一开始的精力放在菜单控制上,也不要一开始就将所有的函数都编写、组装并一起调试,这样出错位置较难定位,调试效率低。
2)在编程过程中,不要使用全局量。它不仅长时间大量占用内存,而且完全违背实际的软件开发要求。需要使用的数据,应当通
过参数传递。就这个软件而言,数据主要是从文件读写,所以连数据传递都不太多。
3)在列出的这些功能里,有些操作是很多功能都使用的,比如从某个文件读或写数据,这些可以编写成一个函数(当然里面可能再
调用其它函数)。这些一次编写严格测试通过后,可以被其它函数调用,避免代码重复,并提高效率。
4)因为软件有一定的规模,所以必须拆成多个文件,这样附合实际项目开发需求,同时便于编写与调试。在做这个软件过程中,必须学会这种方法。
5)有问题要及时交流,尽早动手编写代码,在编写过程中掌握知识,同时发现问题并进行调整,在这个过程中一步步积累经验。
做为一门程序设计语言, C语言对于高职院校的学生非常重要, 它是学好JAVAT等其它高级语言的基础。因为C语言既有高级语言的特点, 又具有汇编语言的特点。它可以作为系统设计语言, 编写工作系统应用程序, 也可以作为应用程序设计语言, 编写不依赖计算机硬件的应用程序。所以, 高职院校的学生必须学好它。
C语言以其功能齐全、表达能力丰富、使用灵活方便、目标程序效率高、可移植性好、可直接对硬件进行操作等众多优点, 而备受青睐。C语言是培养学生程序设计能力的开端, 形成初步的基本程序设计思想和观念, 培养初步的分析和解决问题的能力。对于学生将来是否能够成为一个合格或优秀计算机专业人才, 起着重要作用。但C语言较之于现在流行的可视化编程, 界面枯燥, 语法烦琐, 如何在有限的学时内, 让对计算机一无所知的大一新生能够掌握C语言基本原理的同时, 能熟练运用程序设计的方法分析问题、解决问题, 成为C语言工作的重要组成部分。
1 C语言课程设计的目的
经过C语言课程设计, 能够充分掌握软件设计的基本方法, 了解C语言的好处和其可用性、重要性和必要性可以培养独立思考、综合运用所学有关相应知识的能力, 增加了同学之间的团队合作精神, 巩固C语言课程学习的内容, 强化动手编程能力。
经过这种课程设计, 使学生了解高级程序设计语言的结构, 具备初步的高级语言程序设计能力。掌握基本的程序设计过程和技巧, 掌握基本的分析问题和利用计算机求解问题的能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。
2 C语言课程设计的基本流程
它的具体流程如下:
首先, 做一个系统, 对其进行功能模块的分析、控制模块的分析, 然后检查是否符合课题要求, 能否实现其相应的功能;能不能够加以其他的功能或其他的修饰, 能否使程序设计更加合理和完善;
其次, 整个系统设计必须要达到实用的目的, 编程过程进量要简练, 可用, 其功能要全面;
第三, 课程设计的说明书及其流程图等要表述清楚;
第四, 为编写设计说明书作好准备, 要有相应的记录设计情况;
第五, 必须采用模块化程序设计的方法, 以及正确完整的书写格式, 并按设计的报告格式进行上机调试;
最后, 要提交设计内文档写作和程序开发必须同步。
也就是说:应该先完成程序设计目的分析和功能模块分析后, 再进行编码和程序调试、测试工作。编程测试要求学生把自己编写好的程序录入到计算机, 然后进行程序语法调试, 如语法正确, 再选取一些数据进行程序测试。这一部分是课题设计的关键, 也是需要花费时间最多的部分。在此过程中要求学生学会按模块一个一个地进行调试。
在编译时有时会出现比较多的出错提示。这时应努力理解、领会提示信息的含义, 并据此改正错误。当编译提示的出错信息不止一条时, 只须先注意其中第一条。因为从第二个错误开始的若干错误很可能是随带错误, 只要更正了第一个错误, 它们便自然更正了。对于C语言初学者, 最好先将程序以书面的形式描述出来, 然后录入计算机调试。在经过定性、定量分析后, 学生对所要进行的设计进行书面算法设计。强调学生在编程时要代码规范、使用注释, 养成良好的编程风格。通过将程序写到纸上, 不仅能使学生进一步掌握C语言语法, 而且学生在编程过程中如遇到问题, 可以有足够的时间提前到图书馆或网上查阅资料, 保证了程序的正确率和有限的上机调试时间。
实践证明, C语言课程设计对提高教学质量有明显的优越性, 克服了重理论, 轻实践的弊端。由于课程设计不是一般的书面作业或上机操作实验, 而是一次完整的软件设计。这就要求提前做比较多的准备工作, 如收集整理资料和编写较多的教学文件等。
3 C语言课程设计内容调整——适当取舍和整合
课程设计成功的首要条件是选择一个合适的题目。题目要符合实际, 不仅要使学生掌握C语言程序设计教学中的重要知识点、了解程序模块化开发等内容, 而且还要与现实生活联系密切, 具有一定的实用性和趣味性, 由于C语言程序设计是工科很多专业必修的课程, 所以在选题时尽可能体现本专业的特色, 具有一定的先进性和实用性, 增强学生对专业知识的领悟与应用能力, 可以与单片机结合进行课程设计
大多数C语言教材内容是按照“数据类型-基本结构-数组-函数-指针-文件”这样的顺序进行知识点编排, 内容详尽全面、讲解细致[1]。这样的做法偏于陈腐, 因此, 针对这些情况, C语言课程设计内容要进行适当的取舍和整合。
3.1 整合
适当的调整知识点的设计顺序, 增强知识点之间的联系, 这样可以直接把知识转化成能力。但在教材整合要注重知识的渐进性, 符合课程设计的认知规律。比如, 讲解整型数据的时候可以和该类型的输入输出语句的格式说明相结合, 通过两个数求最大值的例子, 引入if选择结构、关系运算符和关系表达式、流程图的画法的讲解。通过判断一个数的奇偶的例子, 引入算术运算符和算术表达式、等于运算符的讲解。这样就把书上的数据类型、运算符和表达式、顺序结构和选择结构四章的内容打乱、重组。
3.2 取舍
与其把所有内容通讲, 还不如挑一些内容精讲, 让学生熟练掌握这些知识。对于未讲的内容, 可以通过循序渐进的方式, 在例题或作业中逐步的加入。
4 C语言课程设计方法的改革——采用案例C语言法
传统C语言方式是以教材为中心, 从书本到书本, 从概念到概念, 导致C语言课程设计对理论与实践的脱节。而案例C语言法十分注重其效果, 通过案例分析解决实际问题。对设计的目标进行定性分析, 进行定量分析。可采取自顶向下、逐层分解的方法, 将课题分成有若干个模块, 然后对各模块重点和难点内容进行重点讲解, 使重点突出, 难点分散, 最终各个击破。
计算机学科是一门实践性很强的学科, 只“听”、“读”、“写”是远远不够的。在程序开发过程中, 程序调试的工作量要比编程大得多, 上机调试程序是一个不可缺少的重要环节。因此, 要明确上机目的, 验证程序的正确性, 具体的分析算法和语法结构。这样, C语言课程设计的实践目的才能达到。
C语言课程设计内容主要分成2部分:1) 理论课的例题;2) 针对理论课所讲的内容, 布置题目。如可以设计出一个工资管理系统:
(1) 设计要求
矩阵乘法:编写一个函数实现矩阵A (2行3列) 与矩阵B相乘 (3行2列) , 乘积放在C数组中。在主函数中输入相乘的两数组, 并输出结果。
工资管理:结构体数组、函数、指针、算法、流程结构及文件等的综合应用。
程序说明:有N个工人, 每个工人的数据包含职工号 (不重复) 、姓名、工资总和及分项工资, 试设计一工资管理系统。
(2) 功能模块的设计
输入记录函数EMP*create ()
算法:先声明一个首节点head, 并将head->next设为NULL。每输入一个数据就声明一个新节点p, 把p->next设为NULL, 并且链接到之前列表的尾端。
记录函数void er int (EMP*head)
算法:先将p结点的指针指向第一个结点, 将p结点 (即第一个结点) 的数
输出。然后再将p结点的指针指向p指针的的指针 (即下一结点) , 将p结点第一结点) 的数据输出。重复执行此步聚直到p指针指向NULL为止。
查找记录函数void search (EMP*head)
算法:采用线性查找法往下一个节点查找。输入所要查找的职工的职工号k,
设一个指针变量p, 先指向第一个结点, 当strcmp (p->name, k) &&p!=NULL时, 使p后移一个结点, 如果p!=NULL, 输出p所指的结点。
需要注意的是, 在整个设计过程中, 要设计好流程图。
在C语言课程设计中应该注意程序中频繁的调用函数会增加系统的负担, 降低程序的执行速度, 花费较多的时间, 影响C程序的执行效率。这就要求我们在编写程序时, 在程序的可靠性得到保证的前提下, 根据具体情况找出最优的、能充分利用系统资源和提高程序运行效率的一种最佳方法。当然, 在不同的系统和不同配置的计算机上程序的运行效率是不尽相同的, 程序的效率问题是在编写较大或较复杂程序时应该充分考虑的。
5 结论
本文通过对C语言课程设计的探索和改革, 探讨了在C语言课程设计中的设计方法和应注意的一些重要问题, 通过这些探索, 能够使学生的理论水平和实践能力大大提高, 这对C语言的学习和课程设计有一定的指导作用, 学生综合能力也会不断的增强。
参考文献
[1]谭浩强.C语言程序设计教程[M].北京:清华大学出版社, 2007.
[2]李博.多媒体C语言中存在的问题及解决措施[J].才智, 2009, 8.
[3]李炜.计算机高级语言程序设计的C语言改革与时间[J].安徽师范大学学报:自然科学版, 2003, 26 (2) .
[4]管小卫.C语言课程设计探讨[J].广西轻工业, 2009, 1.
随着计算机的日益普及和互联网的飞速发展,以信息产业发展水平为主要特征的综合国力竞争日趋激烈,软件产业作为信息产业的核心和国民经济信息化的基础,越来越受到世界各国的高度重视。软件技术已成为信息社会的运行平台和实施载体,软件技术应用的全面延伸对用于信息处理的软件技术的发展提出了更高要求,同时促进了软件技术和软件行业的飞速发展,软件技术已经成为人们公认的当今发展最为迅速的技术之一。
《C语言程序设计》是软件工程专业的核心基础课程,其教学效果的好坏,对整个专业教学计划能否顺利完成和专业培养目标能否实现有着重要的作用。本文针对软件工程专业的特点,从培养工程应用型人才的实际需求入手,结合笔者自身的教学实践,对《C语言程序设计》课程教学中的问题进行了分析,从课程教学设计与课程实践教学方面提出软件工程专业《C语言程序设计》课程教学的一系列改进措施。
一、课程教学现状
笔者结合多年的教学实践,并通过调查在校往届学生的学习情况发现,《C语言程序设计》课程教学存在一些问题。
(一)教材内容与实践脱节
教师教授理论课时,大多依据教学大纲指定的配套教材进行讲授,实验课的编程题目多数是验证课本上的例程或者理论课教材后的作业。目前,软件工程专业理论课使用的教材大多以傳授基础理论知识为主,虽然一些知识点后给出了相应的实例,但是这些案例比较孤立,缺乏与工程实践的联系,导致学生觉得日常练习的例程枯燥无味,而且不知道如何将基础理论知识应用于工程实践,使自己具备一定的解决问题能力。由于学生所学知识及其方法与工程实践没有有机结合起来,学以致用的工程意识缺乏日积月累的养成土壤,学习的兴趣和动力不知不觉地消失在盲目与盲从之中。
(二)课程考试与实际应用相关性差
《C语言程序设计》是计算机专业学生学习各类专业课程的重要工具性课程,主要培养学生的工程实践能力。通过调查发现,目前该课程考核仍然以闭卷笔试的形式为主,考试内容主要为基础知识点。这样,学生在面对课程考核时,出于应对考试的需要,知识点背一背、记一记,复习课程和政治课、历史课类似。课程考试方式和内容与实际应用较差的相关性导致学生学习动力不足。
二、课程教学设计
事实上,尽管学习动机不尽相同,学生层次有差异,但绝大多数学生能够认识到自己的需要,希望通过学习提高自己的能力。结合学生特点,笔者认为“做中学”和“基于项目教与学”能够较好地提高《C语言程序设计》课程教学质量。
(一)“做中学”统一知与行
“做中学”是比从“听中学”更好的学习方法,符合人类对客观事物规律的认识,能够把书本上的知识与工作生活联系起来,充分结合了学与做。因此,在设计组织教学活动时应注重实践活动的设计,把教学活动与工作生活实际相结合,鼓励学生在实际活动中学习,并将实践中获得的知识与技能有效运用于解决学习、生活和今后工作中的实际问题,即在实践中学习,在学习中实践。
(二)“做中学”最有效的方法就是进行基于项目的学习
一个完整的项目是从分析开始,经历构思、设计、实现和运作的一个完整过程,在学习学科知识的同时能够提高个人产品过程的认知能力和系统建造的能力。在课程的设计过程中,始终强调以项目为导向,以任务为驱动,以一个具体项目为依托来学习相关的内容,在具体实施中分级设置项目,先易后难、循序渐进地将相关的知识点融入项目的任务之中,通过完成任务掌握相应的知识点,提高相关技能和操作的应用能力。在此过程中,学生不断进行实践、总结、反思,将琐碎的知识点串联起来,逐步培养学生的综合能力。
三、课程教学实施
(一)多方面积极引导,激发学生学习兴趣
学生在学习《C语言程序设计》设计之前,可能通过新生入学教育或从高年级学生中知道这是一门专业必修课程而兴致勃勃,但到真正学习时,如果一直都是面对一堆单调而且枯煤无味的语法知识,则容易使学生产生厌学心理从而逐渐失去学习的兴趣。因此,要改进教学方法。首先,通过展示学校近几年来在各种比赛中获得的好成绩,让学生观看比赛的图片,让学生知道只要努力,在各种竞赛中都可以占有一席之地,这样学生就有可达到的奋斗目标从而消除他们的畏难情绪,激发学生的学习兴趣。
其次,在课堂讲授时尽可能找一些趣味性较强的例子讲解,除布置基本的训练学生掌握语法或者算法的题目外,设计1—2个有趣味性的游戏程序设计,如在选择结构编程练习中简易计算器的开发,在循环结构编程练习中加入猜数字游戏设计,在一维数组编程练习中加入猜牌术游戏等,这些游戏程序设计的开发有一定的难度,鼓励学生结成兴趣小组,互帮互助共同完成,在此过程中,学生的学习自主性和团队协作精神都得到大幅提高。
(二)精心设计实验教学
要根据《C语言程序设计》实验的教学大纲制定实验计划,精心设计每一次实验内容,要综合考虑学生编程能力上的差异,不要把题目设计得太深或者太简单,可以设计必做题和选做题,对基础较差的学生,最低要完成必做题;对能力较强的学生,在完成必做题的基础上,鼓励他们去完成选做题。同时,在实验的编排上,注意验证性、设计性和综合性实验的比例,对验证性实验进行精选,即使是验证性实验,也不要简单验证程序的运行结果,而是首先要求学生阅读程序,写出运行结果或程序实现的功能,然后再上机运行,同时可以设计一些问题让学生思考并对程序进行进一步修改,然后再分析运行结果。减少验证性实验项目,增加设计性和综合性实验项目,由浅入深、由易到难,加强学生动手能力、分析问题和解决问题能力的培养,最终提高学生的编程能力。
(三)灵活运用多种教学手段
在做题过程中,教师的主要任务是及时发现问题,回答学生的疑难问题。但是,在实验练习的过程中,学生主要依靠自己讨论或者上网寻求思路来解决问题。这是一个值得鼓励的好现象,能够充分体现学生独立自主学习的能力,在课堂教学中应当鼓励学生互相讨论,互相交换思想共同解决问题。但是,在教学中教师的作用体现不够充分,不愿意寻求帮助的学生会因为一道题目没有解决而无法正常进行实验练习,教师的作用应该是在学生自主解决问题的同时,能够及时提供帮助,尽量统一实验进度。在上机指导学生实验时,要以问题为中心,广泛采用启发式、参与式和讨论式等教学手段,要打破学生对教师的依赖性,让学生自己去思考如何编程,如果较难的题目允许学生讨论,鼓励学生去查阅相关资料,也可以适当给学生一些提示,但一定不要给学生源代码,重点给出解题的思路与建议性方法,给学生留下足够的独立思考和设计的空间,使学生在实验过程中亲自体会并掌握程序设计思想,提高实验的教学效果。
(四)利用网络教学平台让学生主动学习
充分利用校园网内建立的《C语言程序设计》网络教学平台,在该平台上共享本课程部分教学视频、相关课件、经典算法资料、ACM大赛历年题目,可以让学生通过此网络教学平台更加自主地选择性学习,更重要的是利用此平台与学生进行互动交流,在答疑区对学生提出的问题,老师与学生都可以及时解答,同时其他学生也可以分享交流过程,随时再提出新问题,更好地激发学生的学习兴趣,增强教师与学生、学生与学生之间的互动。通过多种教学方式的结合,不仅加深了学生对所讲知识点的理解,而且激发了学生的学习兴趣,提高了学生学习的自觉性,同时通过互动交流式学习增强了学生的自信心。
参考文献:
[1]张红军.C语言程序设计教学改革初探[J],信息与电脑,2015 (9):140-142.
[2]刘红霞,张永恒.CDIO工程教育模式下的C程序设计教学改革研究[J],榆林学院学报,2015 (4):83-86.
[3]李文锦,游戏化学习在C语言程序设计的应用与实践[J],新课程研究,2015 (7):76-77.
1.实验题目:职员信息管理系统
2.数据结构:整型int,字符型char,长整型long,结构体及结构体数组 3.源代码 :
#include“stdio.h” #include“string.h” #define N 20
/*符号常量的定义*/ struct employee
/*定义结构体类型employee*/ {
char name[15];char sex;long num;
/*职工工号可能较长,定义为长整型*/ char debt[15];int salary;char office[15];char tel[15];}emp[N];
/*定义结构体数组,并将其作为全局变量*/ void menu(){
int i;printf(“请选择您的操作:n”);printf(“tt1.增加职工信息n”);printf(“tt2.查找职工信息n”);printf(“tt3.显示所有职工信息n”);printf(“tt4.删除职工信息n”);printf(“tt0.退出n”);printf(“请选择按键!(0-4):n”);scanf(“%d”,&i);
/*从键盘输入数据并将其值赋给i*/
void input();void search();
void show();void omit();
/*被调函数定义出现在主调函数之后,应对其进行原型说明*/ switch(i)
/*使用switch语句,根据i的数值,进入相应的操作环境*/ {
case 1:input();break;
case 2:search();break;
/*在switch语句中掌握对break的使用*/ case 3:show();break;case 4:omit();break;
/*实现函数的调用*/
case 0:
{ printf(“tt-----n”);printf(“tt谢谢您对本公司职工信息管理程序的使用n”);
printf(“tt-----n”);}break;
default:printf(“您输入的数据有误,请确认后重新输入!n”);menu();} } void fun(int i)
/*search()函数和omit()函数都对此函数进行调用,输出相应职工信息*/ {
printf(“职工信息找到!!信息如下:n”);printf(“姓名t工号t性别t部门t工资t职位t电话n”);printf(“%st%ldt%ct%st%dt%st%sn”,emp[i].name,emp[i].num,emp[i].sex,emp[i].debt,emp[i].salary,emp[i].office,emp[i].tel);} void input()
/*定义input()函数,实现职工信息的录入功能*/ {
int i,j,k,a;for(i=0;i /*使用条件语句,防止原有的职工信息被覆盖*/ { printf(“增加职工信息时:n”);printf(“请输入职工姓名:”);fflush(stdin); /*刷新缓冲区,下同*/ gets(emp[i].name); /*使用gets()函数实现字符串的输入,下同*/ do { printf(“请输入职工号:”);scanf(“%d”,&a);for(k=0;k if(k /*判断所输入工号是否已存在*/ printf(“该工号已存在,请重新输入!n”);}while(k /*do-while语句控制本层循环*/ emp[i].num=a;printf(“请输入职工性别,男(M)女(F):”);fflush(stdin);emp[i].sex=getchar(); /*使用getchar()函数实现字符的输入*/ printf(“请输入职工部门:”);fflush(stdin);gets(emp[i].debt);printf(“请输入职工工资:”);scanf(“%d”,&emp[i].salary);printf(“请输入职工职位:”);fflush(stdin);gets(emp[i].office);printf(“请输入职工联系电话:”);fflush(stdin); gets(emp[i].tel);printf(“职工添加成功!!n”);printf(“还继续增加吗?继续请输入1否则输入0:n”);scanf(“%d”,&j);if(j==0)break; /*使用break语句,在条件成立时跳出for循环*/ } menu(); /*不再添加职工信息时,返回到目录函数menu()*/ } void search() /*定义search()函数,实现职工信息的查找功能*/ { int i,j,number;printf(“请输入要查找的职工号:”); scanf(“%d”,&number);for(i=0;number!=emp[i].num&&i /*i /*函数的递归调用*/ else menu(); /*不再查找职工信息时,返回到目录函数menu()*/ } void show() /*定义show()函数,实现职工信息的显示功能*/ { printf(“%st%ldt%ct%st%dt%st%sn”,emp[i].name,emp[i].num,emp[i].sex,emp[i].debt,emp[i].salary,emp[i].office,emp[i].tel);menu(); /*输出所有信息后,返回到目录函数menu()*/ } void omit() /*定义omit()函数,实现职工信息的删除功能*/ { int i;printf(“所有职工信息如下:n”);printf(“姓名t工号t性别t部门t工资t职位t电话n”);for(i=0;i /*利用for循环输出所有职工信息*/ int i,j,a,number;printf(“请输入要删除的职员号:”);scanf(“%d”,&number);for(i=0;number!=emp[i].num&&i /*i scanf(“%d”,&a);if(a==1){ strcpy(emp[i].name,“"); /*确定删除后,还原结构体成员*/ } emp[i].num=0;emp[i].sex=;strcpy(emp[i].debt,”“);emp[i].salary=0;strcpy(emp[i].office,”“);strcpy(emp[i].tel,”“);printf(”删除成功!!n“);} else printf(”无对应信息,请重新查找!!n“);printf(”还继续删除吗?继续请输入1否则输入0:n“);scanf(”%d“,&j);if(j==1)omit(); /*函数的递归调用*/ else { printf(”删除成功后“);show(); /*调用show()函数,输出删除成功后所有职工信息*/ } } void main() /*程序由主函数开始运行*/ { int i;for(i=0;i /*利用for循环语句对结构体数组赋初值*/ emp[i].num=0;emp[i].sex=;strcpy(emp[i].debt,”“);emp[i].salary=0;strcpy(emp[i].office,”“);strcpy(emp[i].tel,”“);} printf(”tt----------------------------n“);printf(”tt欢迎进入公司职工信息管理程序n“); printf(”tt----------------------------n"); menu();} 4.每种情况下的运行结果截图 1.判断输入数据是否有误的运行结果截图 2.增加职工信息并确保工号不重复时的运行结果截图 3.查找职工信息时的运行结果截图 4.显示所有职工信息时的运行结果截图 5.删除职工信息,并通过显示所有职工信息验证该信息是否确实被删除时的运行结果截图 6.继续添加职工信息时的运行结果截图 7.显示最后的所有职工信息时的运行结果截图 8.退出该系统时的运行结果截图 5.学习心得体会: 一、课程设计目的1、通过课程设计,熟练掌握Visual C++ 6.0 开发环境的使用,提高程序调试能力; 2、通过课程设计,提高学生分析问题、解决问题的能力; 3、通过课程设计,复习巩固C语言的循环结构、指针、数组、结构体、文件等方面的知识,并在实践中加以运用。 4、通过课程设计,提高学生查阅资料、吸收和运用新知识的能力。 二、课程设计要求 每个学生在下列课题中至少选一题,并独立完成。 1、学生成绩管理系统 2、学生档案管理系统 3、同学通信录管理系统 4、职工档案管理系统 5、职工工资信息管理系统 6、小型图书信息管理系统 7、超市商品信息管理系统 8、实验室设备信息管理系统 9、试题(选择题)信息管理系统 10、列车时刻表信息管理系统 每课题均须具有以下功能: 1、信息录入,包括记录的追加和插入; 2、信息删除; 3、信息修改; 4、信息排序和查询; 5、信息的保存和装载; 6、简单的帮助。 三、设计方法及过程 1、问题分析 包括系统所要完成的功能、数据结构分析,如问题处理过程中使用的结构体及包含的成员等,文件的类型、存储的内容等,输入/输出的格式等。 2、系统功能设计及模块(函数)划分 根据分析结果,画出系统结构图,确定系统的功能模块,包括模块的名字、接口(即函数的参数、返回值)及功能,模块间的调用关系。 3、模块的算法设计 设计每个功能模块的算法,可以用伪代码或流程图表示。 4、编码 代码的编写要符合规范,程序中对各个模块的功能、模块主要实现部分都需要加上注释,以增加程序的可读性,便于软件维护。 5、调试 四、设计报告 一、学生选课管理系统 第一部分:课程设计名称、目的、要求 第二部分:程序总体设计思路 第三部分:程序功能划分、图示及流程图 第四部分:程序设计数据、运行结果 第五部分:程序的优缺点 第六部分:心得体会 第七部分:附录(源程序) 第八部分:附录(参考文献) 目录 ..............................................................................第一部分:课程设计名称、目的、要求 名称:学生选修课程系统设计 目的:运用C语言提高解决实际问题的能力 实验环境:Microsoft Visual C++ 6.0 内容: 假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。【功能】 系统以菜单方式工作 课程信息录入功能(课程信息用文件保存)--输入 课程信息浏览功能--输出 查询功能:(至少一种查询方式)--算法 按学分查询 按课程性质查询 学生选修课程(可选项) 第二部分:程序总体设计思路 由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。 具体的设计思路如下: 程序的要求是设计学生选修课管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先,考虑到程序的数据输入,可以设置一个管理员登陆选项,通过该选项进入管理员界面,进行选修课的录入和修改操作,最后将录入的课程保存到相应的文件中。然后定义各种函数的功能包括查看,查询,删除等。另一个为学生登陆界面,该界面学生可以进行课程选择和浏览查询等操作。在进行该操作之前需要对管理员保存的文件进行读取,然后对其中的内容进行查询等,在学生选好课程以后,可以将其选好的课程保存于相应的文件中,以便下次进行修改。通过函数的层层调用来实现程序的逻辑结构。中间通过文件的打开和关闭实现对文件内部所包含的数据的操作。 整个程序的设计思路到此结束。 第三部分:程序功能划分、图示及流程图 【功能模块划分及其流程图】 本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这9个部分来完成。这9个部分依次是: 1.登录界面函数;void login()2.学生登录界面据函数:void stu_login()3.管理员登录界面函数:void man_login()4.退出界面函数:void bye_sys() 5.课程选择函数:void c_select()6.课程浏览函数:void c_view()7.课程查询函数:void c_search()8.课程增加函数:void c_add()9.课程删除函数:void c_delete()10.菜单函数:void index()11.主函数部分; main() 总体设计: 学生选课系统管理员登录学生登录新增课程删除课程课程浏览查询课程学生选课课程浏览课程查询c_add函数c_delete函数c_view函数c_search函数c_select函数c_view函数c_search函数 系统功能模块图 部分函数流程图: 1、课程选择函数: 开始输入要选择的课程的编号j=0;j 2、课程查询函数 开始输入要查询的课程的编号j=0;j 3、课程增加函数 开始输入要增加的课程的编号j=0;j 4、课程删除函数 开始输入要删除的课程的编号nj=0;j 本程序是一款应用软件,故数据设计、程序运行结果应在程序的 运用中得以体现,现在通过一个程序的运用事例来对程序运行结果进行演示与实现。【软件运用举例】 1、程序开始界面如下: 选择某个选项,如进行管理员登录,进行课程的增加 进入管理员界面: 2、再选择所要进行的操作,如进行课程增加,结果如下: 下面可以进行继续增加课程或者退出: 3、选择课程浏览,可以分页查看相应的课程信息: 第一页: 第二页: 4、课程查询 查找结果: 4、管理员课程删除操作: 删除后可以进行浏览,观察删除后的结果: 可见删除后只有一条记录。删除操作完成正确。下面进行学生操作的使用方法: 1、学生登陆界面: 2、选择学生选课选项: 3、学生登陆也可进行课程浏览和查询函数,其结果与管理员登陆相同,不再演示。 第五部分:程序的优缺点 【程序的优点】 算法是程序的灵魂,程序的优点首先表现在算法上的优点,其次才是功能上的。 [算法上的优点]主要体现在以下三点: 1.程序采用main主函数方式设计,程序的主体的功能大都由该功能 完成。程序如此设计有利于程序的进一步改进及有助于程序执行效率的提高。 2.程序对文件数据的读写采用了fread和fwrite块读写函数,能够将文件中的数据完全读出,然后赋到定义的数组中,再在相应的数组中进行一系列操作,最终再写入文件。 3.插入操作在本程序中将课程信息直接插入数组最后一个节点,从而减少了数据的相互移动,节省了时间。 [功能上的优点] 主要体现在以下两点: 1. 简洁明了的程序菜单。程序主要采用了层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。2. 人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地看懂程序并进行操作。 【程序的缺点】 主要表现在以下两点: 1、本程序没有进行相应的密码操作,所以对于使用者来说可能存在比较大的不保密性。需要改善。 2、本程序没有使用文本读写函数fscanf和fprintf,所以的到的课程文件和选课文件都是二进制形式。 第六部分:心得体会 选课系统程序比起通讯录程序来讲好写一些,由于本程序用到了数组,对于数组的操作掌握的比较熟练,所以在编写程序的时候困难没有那么多。 本程序在编写的过程中用到了许多通讯录中的模块化设计和函数互相调用的思想,使得编写比较方便和好用。 通过该系统的课程设计分析,我掌握了模块化设计的方法,理解和运用了结构化程序设计的思想和方法,掌握和提高了运用C语言进行程序设计的能力。 程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常叫做流程,在程序设计过程中理清楚整个问题的流程很重要,然后采取逐步细化的方法实现整个程序。 对于一个较大的应用程序,一般不可能一次就设计出一个很完善的系统。通常要先设计满足基本要求的系统,然后再测试或者在使用的过程中不断完善,慢慢地做成一个功能很完善选修课程管理系统。所以在进行调试的时候需要对许多变量理解和掌握其变化规律等,这对于我更好的掌握visual C中调试的工具有很大的帮助。 总之经过这次课程设计,我对c语言的使用和理解都有了很大的加深,对于编程的思想也有了很多新的理解和感受。 第七部分:附录 一、参考文献: 1、李丽娟主编,C语言程序设计教程(第二版),人民邮电出版社 2、严蔚敏主编,数据结构(C语言),清华大学出版社 3、崔单主编,C语言程序设计案例精粹,电子工业出版社 4、谭浩强主编,程序设计(第三版),清华大学出版社 二、源程序 #include“stdio.h” #include“stdlib.h” #include“windows.h” #include“string.h” void index();//首页 void login();void bye_sys();//退出界面 void stu_login();//学生登录菜单 void c_select();void c_view();//课程浏览 void c_add();//增加课程 void c_delete();void c_searchs();//学生查询函数 void c_searchm();//管理员查询函数 void c_viewm();//管理员浏览函数 void c_views();//学生浏览函数 struct course//定义课程结构体 { int c_num; char c_name[20]; int c_score; int c_nelepeo;//课程已选人数 int c_melepeo;//课程人数上限 };struct student { char s_number[10]; char s_password[10];};struct manager { char m_name[10];char m_password[10];}; void index()//首页 { char input; printf(“nnttt*****************************n”); printf(“ttt 湖南大学学生选课系统n”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt**********设计者:刘晓斌******nnn”); input=getchar(); system(“cls”);} void login()//登陆界面 { void stu_login(); void man_login(); void bye_sys(); int input; do { system(“cls”); printf(“nnnt1.学生登录n”); printf(“t2.管理员登陆n”); printf(“t3.退出本系统n”); printf(“t请选择服务类别:”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3)//输入数不等于选项的时候打印画面 { printf(“nt输入出错!请重新选择~n”); printf(“nt按任意键返回选择页面~nt”); getchar();getchar(); system(“cls”); } if(input==3)//如果输入3退出系统 { bye_sys(); } }while(input!=1&&input!=2&&input!=3); switch(input) { case 1:stu_login();break; case 2:man_login();break; } } void bye_sys()//退出界面 { exit(0);} void man_login(){ void c_add(); void c_delete(); void c_view(); void c_searchm(); int in; do { system(“cls”); printf(“nnt1.新增课程n”); printf(“t2.删除课程n”); printf(“t3.课程浏览n”); printf(“t4.课程查询n”); printf(“t5.退出n”); printf(“nnt请选择服务种类:”); scanf(“%d”,&in); if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5) { printf(“nt没有这项服务t按任意重新选择”); getchar();getchar(); } }while(in!=1&&in!=2&&in!=3&&in!=4&&in!=5); switch(in) { case 1:c_add();break; case 2:c_delete();break; case 3:c_viewm();break; case 4:c_searchm();break; case 5:login();break; } } void stu_login()//学生登录菜单 { void c_select(); void c_view(); void c_searchs(); void login(); int input; do { system(“cls”); printf(“nnnt--学生登陆--”); printf(“nnt1.学生选课n”); printf(“t2.课程浏览n”); printf(“t3.课程查询n”); printf(“t4.退出n”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3&&input!=4) { printf(“nt没有这项服务~n”); printf(“t按任意键重新选择”); getchar(); getchar(); } }while(input!=1&&input!=2&&input!=3&&input!=4); switch(input) { case 1:c_select();break; case 2:c_views();break; case 3:c_searchs();break; case 4:login();break; } } void c_select(){ int n,in,i=0,j;int flag=0; FILE *fp; FILE *fp1; char input; struct course courses[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); input=getchar(); input=getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 } printf(“nntt请输入你要选课程的编号:”); scanf(“%d”,&n); if((fp1=fopen(“courseselect.dat”,“rb”))==NULL) { fp1=fopen(“courseselect.dat”,“wb”); } else { fclose(fp1); fp1=fopen(“courseselect.dat”,“ab”); } for(j=0;j if(courses[j].c_num==n) flag++; if(flag==0) { printf(“nntt不存在对应课程n”); printf(“nntt继续选课请按1,退出请按2:n”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default: printf(“输入错误,将返回登录界面!n”); login();break; } } else { fwrite(&courses[j],sizeof(struct course),1,fp1); fclose(fp1); printf(“nntt选课成功t请选择:”); printf(“nntt1.继续选课”); printf(“nntt2.退出,返回登录界面!”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default:break; } } } void c_viewm()//课程浏览 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { system(“cls”); printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); getchar();getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 do { system(“cls”); if(i==1) { printf(“nnnttt没有记录!n”); getchar();getchar(); man_login(); } else { printf(“nt------共有%d条记录-------”,i-1); printf(“nnt课程编号: %dn”,courseview[n].c_num); printf(“nnt课程名字: %sn”,courseview[n].c_name); printf(“nnt课程学分: %dn”,courseview[n].c_score); printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo); printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一页t2.下一页t3.回目录”); printf(“n请选择:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到达首页 t按任意键返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到达尾页t按人意见返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{man_login();break;} default: { printf(“nt操作错误t按任意键返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_views()//课程浏览 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { system(“cls”); printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); getchar();getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 do { system(“cls”); if(i==1) { printf(“nnnttt没有记录!n”); getchar();getchar(); stu_login(); } else { printf(“nt------共有%d条记录-------”,i-1); printf(“nnt课程编号: %dn”,courseview[n].c_num); printf(“nnt课程名字: %sn”,courseview[n].c_name); printf(“nnt课程学分: %dn”,courseview[n].c_score); printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo); printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一页t2.下一页t3.回目录”); printf(“n请选择:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到达首页 t按任意键返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到达尾页t按人意见返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{stu_login();break;} default: { printf(“nt操作错误t按任意键返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_searchs(){ void stu_login(); void c_searchs(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判断课程信息是否存在 { system(“cls”); printf(“nnt课程不存在t按任意键返回”); getchar();getchar(); stu_login(); } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt请输入你要查询的课程编号:”); scanf(“%d”,&id); do//检查输入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt课程编号:%dn”,coursesear[k].c_num); printf(“nnt课程名字:%sn”,coursesear[k].c_name); printf(“nnt课程学分:%dn”,coursesear[k].c_score); printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo); printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在对应记录n”); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } }while(inp!=1); } void c_searchm(){ void stu_login(); void c_searchm(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判断课程信息是否存在 { system(“cls”); printf(“nnt课程不存在t按任意键返回”); getchar();getchar(); stu_login(); } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt请输入你要查询的课程编号:”); scanf(“%d”,&id); do//检查输入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt课程编号:%dn”,coursesear[k].c_num); printf(“nnt课程名字:%sn”,coursesear[k].c_name); printf(“nnt课程学分:%dn”,coursesear[k].c_score); printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo); printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在对应记录n”); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } }while(inp!=1);} void c_add()//增加课程 { void c_add(); void man_login(); int i=0,j,inp; FILE *fp; struct course course_new; struct course courses[10]; system(“cls”); printf(“nntt请输入课程信息”); printf(“nntt1.课程编号:”); scanf(“%d”,&course_new.c_num); printf(“nntt2.课程名字:”); scanf(“%s”,course_new.c_name); printf(“nntt3.课程学分:”); scanf(“%d”,&course_new.c_score); printf(“nntt4.课程已选人数:”); scanf(“%d”,&course_new.c_nelepeo); printf(“nntt5.课程人数上限:”); scanf(“%d”,&course_new.c_melepeo); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); for(j=0;j<=i-1;j++) if(course_new.c_num==courses[j].c_num) { system(“cls”); printf(“nnttt对不起,这个编号已经使用过nntt按任意键返回管理菜单”); getchar();getchar(); man_login(); break; } } if((fp=fopen(“course.dat”,“rb”))==NULL) { fp=fopen(“course.dat”,“wb”); } else { fclose(fp); fp=fopen(“course.dat”,“ab”); } fwrite(&course_new,sizeof(struct course),1,fp); fclose(fp); printf(“nntt信息输入完毕t按任意键继续”); getchar();getchar(); do { system(“cls”); printf(“nntt1.继续输入”); printf(“nntt2.返回管理菜单”); printf(“nntt请选择”); scanf(“%d”,&inp); if(inp!=1&&inp!=2) { printf(“输入不符合要求t按任意键重新选择”); getchar();getchar(); } }while(inp!=1&&inp!=2); switch(inp) { case 1:c_add();break; case 2:man_login();break; } } void c_delete()//查询后删除 { FILE *fp; int i=0,j,n,k,flag=0; struct course courses[10]; void c_delete(); void man_login(); printf(“nntt请输入你要删除的课程编号:”); scanf(“%d”,&n); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } else { printf(“nntt不存在任何课程t按任意键返回”); getchar();getchar(); man_login(); } for(j=0;j { if(courses[j].c_num==n) { flag=1; fp=fopen(“course.dat”,“wb”); for(k=0;k fwrite(&courses[k],sizeof(struct course),1,fp); fclose(fp); fp=fopen(“course.dat”,“ab”); for(k=j+1;k { fwrite(&courses[k],sizeof(struct course),1,fp); } printf(“nntt记录已删除!t按任意键返回ntt”); getchar();getchar(); man_login(); fclose(fp); } } if(flag==0) { printf(“nntt不存在对应的课程t按任意键返回”); getchar();getchar(); man_login(); } // printf(“nntt记录已删除!t按任意键返回ntt”); } int main(){ 现在高等学校, 一般也都根据不同的需要选用不同的程序设计入门课程。其中C语言作为一门程序语言基础课, 由于其功能强、使用灵活等优点受到广泛的欢迎, 也就是说C语言已经成为了学习程序设计语言的一个必要的基础。在学时相对较少的情况下, 学生要学好这门课有一定的难度.但依然要提高教学的质量和效果是广大教学工作者正在思考和探索的问题. 2、教学过程中的改进 2.1 教学方法的改进 C语言作为DOS时代的一种主流程序设计语言, 已逐渐演变成为一种程序设计的入门级语言——重在使学生熟悉计算机处理事务的过程, 掌握程序设计的思想, 完成学生从中学生到大学生学习思想的转变。因而C语言程序设计课程这门课大多高校开设在一年级的第一学期, 要从只要求计算机基本操作的中学时代迅速转换到大学时代的程序设计员, 对于学生是一个逐步转变、逐步学习的过程。而对于我们教育者来说, 如何去改进现有的教学方法, 正确的引导学生学习思路、学习方法的转变, 以提高课堂教学的质量.笔者在以下几方面进行了尝试: 2.1.1 教师角色的转变 中学时代的教学多以升学为基本任务和目标, 所以中学教师的教学多以灌输式为主, 在教学过程中教师始终是主体, 而学生总是被动的接受和消化。而大学时代的教学是以培养学生的基本素养和能力为目标, 因而要求教学的过程要以学生为主体, 教师要做正确的引路人, 而不是知识的灌输者。因而教师角色的转变实际上更多的还是在学生心目中中学教师角色到大学教师角色的转变, 要在教学的第一堂课向学生宣布这个事情, 使学生从教师角色的转变到学生自己明白他们已经跨入了人生的有一个新的阶段:自己的学习、思想都要有更大的转变, 从以前被动的接受学习, 到大学时期的主动自觉的学习, 从而培养和更大的提高他们的学习能力和其他方面的能力。 2.1.2 课堂实施的转变 C语言作为一门程序设计语言自然有它自身的特点, 但是作为一门言语课, 他又脱不开与学生很熟悉语文、英语这些语言课学习的共同之处。根据笔者的学习和教学经验:得知更多的学生在学习C语言的过程中, 甚至在学习完这门课后也不知道C语言的作用是什么, 它学习的重点内容是什么。所以C语言教学的课堂实施的转变更是教学的重中之重:要使学生从中学时期纯粹的数理化的学习转变到大学时期专业能力和自身适应能力的学习。根据笔者多年的教学, 我们引用用了一个全新的教学方法—“3W1H”教学法。在讲C语言前和所讲的每一节课都要使学生明白正门课或者所讲的每个知识点是什么 (WHAT) , 在哪里能用 (W HERE) , 为什么要这样用 (WHY) 和怎么去用 (HOW) 。从总体的结构:程序设计语言的3W1H到没一点的3W1H, 我们在每一节课的过程中都要去给学生分析、实践。另外我们又结合语言课的特点教会学生从C语言的字 (字符) 、词 (数据类型、变量常量) 、句 (语句) 和章 (函数、程序) 入手去总结, 打乱教材的原有章节, 去分析总结, 从而大大提高了学生学习的效率。 2.1.3 选择合适的软件 在我们学习任何一门程序语言之前, 都要先安装好它所匹配的软件:一个开发环境, 例如turboC2.0。这个软件曾经占据了D OS时代开发程序的大半个江山, 但对于现在的Windows时代, 用turboC有时感觉力不从心, 编辑程序很吃力, 没有函数变量自动感应功能, 查询参考资料也不方便。建议使用Visual C++, 这个东西虽然比较大块头, 但是一旦安装好了, 用起来很方便。一般在学习完C语言之后都会学习一下C++的, 因为C++是针对于windows的可以运行C程序的软件。 2.1.4 采用传统教学和多媒体教学相结合的方式 C语言的课堂教学改掉了过去纯粹的黑板教学, 而采用了黑板教学加多媒体教学进行。首先, 考虑到该课程基本概念多, 同时需要分析大量的例题, 我们把一些典型的例题在讲课时先有老师进行剖析设计算法, 并和学生分析要解决这一问题用C语言编程所需要的本节课或者以前学过的知识点, 然后在黑板上和学生一块去画出流程图, 最后和学生一块去写出程序。这样不仅帮助学生学会了分析问题和解决问题的思路和方法, 同时也让学学生熟悉了计算机解决问题的过程:从实际问题分析描述, 到计算机的实现, 是学生明白要写一个程序重要的是解决问题的过程—算法, 而程序只是最后在计算机对这个算法的描述而已, 从而使学生更加注重对程序设计思想的学习和锻炼, 这对一个成员的学习十指关重要的。其次合理使用教师配套的多媒体教学设备, 对于这些典型的基本概念和例题我们又预先输入计算机做成课件 (CAI) , 在课堂上和学生完成后去分析程序的运行情况。把典型的例题直接在C语言集成开发环境中输入运行, 真实形象, 可以达到事半功倍的效果.例如讲到过程时, 学生往往对过程中参数传递的两种方式 (按值传递和按地址传递) 很难理解, 而这又是该课程的重点和难点, 确实比较抽象, 在讲解过程中笔者把这两种传递方式结合例题来讲: 函数Swap1中的形参是两个一般的整型变量, 说明调用Swap函数时实参a, b和形参p1、p2间为按值传递, 而函数Swap2中的形参是两个指针类型的变量, 说明调用Swa p函数时实参a, b和形参p1、p2间为按址传递, 要学生回答命令按扭Command1单击后窗体上输出的值, 大多数学生可能回答不正确, 这时可把程序粘贴到C++集成开发环境中运行输出结果.仅这样学生还会觉得难理解, 于是笔者又在课件中做了说明, 如图1所示。 调用子过程Swap1时, 给形参x、y分配临时内存单元, 将实参a和b的值复制给x和y, 在被调子过程Swap1中x、y通过第三变量t实现交换, 调用结束时形参x、y的临时内存单元将释放, 实参a和b仍保留原值. (如图1、图2) 调用子过程Swap2时, 形参x、y分别和实参a、b共用存储单元, 因此, 在被调子过程Swap2中x、y通过第三变量t实现交换后, 实参a和b的值也同样发生交换. 同时在C++集成开发环境中逐语句运行程序, 分别观察在Swap1和Swap2调用前、调用中和调用后实参a、b和虚参x、y的变化, 加深学生的理解.再次, 因为程序设计课程要求培养学生的逻辑思维能力, 程序的分析、算法的产生一开始不宜全盘托出, 而应启发式地边讲解、边书写, 以此引导学生步步深入, 此时实物投影仪或粉笔就是比较合适的媒体.因此, 在C语言课堂教学中我们将课件 (CAI) 、C++集成开发环境、实物投影仪或粉笔三者结合, 收到了良好的教学效果。 2.2 强化实验环节中教师的责任意识, 注重学生能力的培养 C语言程序设计是一门实践性很强的课程, 在学习C语言过程中, 仅书面理解往往是不够全面的.通过上机实践, 学生才能真正理解消化课堂上的教学内容, 纠正原来理解上的偏差, 加深对C语言的了解。但是仅靠上机课上学生自己的上机练习往往是达不到目的的, 特别是我们的高职类的学生, 他们本身学习的能力就较差, 如果不加引导在上机练习时大多数情况是把理论课上的例题敲进计算机, 然后一运行看一下结果正确是否就完了。根本就没去思考, 更不要说去进一步的去验证理论课上的知识点了。所以我们针对于学生的情况, 强化实验课中教师的责任意识, 加大辅导的力度:要求老师去正确的引导学生上机课应该怎样去做, 而不是纯粹的计算机录入课。上机课上老师既是知识点总结的引导者, 又是学生上机练习的辅导者, 特别要强化老师对学生所出现的共性问题的讲解和总结, 从而使学生能到同一案例能举一反三, 真正达到验证消化理论所学, 提高能力的目的。 3、结语 C语言具有诸多的优点, 是使用性很强的程序设计语言之一, 自推出以来就受到了人们的普遍欢迎.但是, 对于非计算机专业的学生来说, C语言又是一门较难学的课程 (特别是对于那些没有编程基础的学生) .在C语言程序设计教学过程中, 采用传统教学和多种媒体的教学相结合方式, 以提高课堂教学的质量和效率, 通过实践提高学生利用C语言进行程序设计的能力, 抓住C语言重点内容和环节, 把程序设计思想贯穿于整个教学过程, 使C语言成为学习程序设计的敲门砖, 为他们后期的学习打下坚实的基础。 摘要:分析了C语言程序设计课程的特点, 对该课程教学手段、教学方法的改进, 及教学内容的完善等方面作了一些探索和实践. 关键词:C语言程序设计,教学方法,算法,教学研究 参考文献 [1]谭浩强, 张基温.C语言程序设计教程[M].北京:高等教育出版社, 1998. 关键词:C语言程序设计;项目教学模式;应用能力 中图分类号:G642 文献标识码:A文章编号:1007-9599 (2011) 15-0000-02 C Language Programming Course Project Teaching Mode Luan Guifen (Taizhou Higher Vocational School of Mechanical&Electrical Technology,Taizhou225300,China) Abstract:C language programming course using the project to improve the teaching ability of students to apply,set project goals and prepare for the teaching project teaching the theoretical and experimental materials,select the appropriate teaching project library construction project cases,in addition to theoretical and experimental courses in teaching,effective implementation of the project,the project should also be extended to extra-curricular teaching in the classroom network. Keywords:C language programming;Project teaching mode;Application ability 在职校教学中,传统教学法很难满足信息化社会应用型人才的能力培养要求。C语言程序设计课程是一门实践性较强的课程,应更加重视应用能力与实践能力的培养,而非计算机专业的C语言程序设计教学多用传统教学法,导致学生的理论学习与实践脱节,很大程度上影响了教学效果。因此,迫切需要采用新的教育教学法或教学模式来改变这种现状。以培养应用能力为核心的“项目教学模式”,它把学习知识、训练技能、培养能力贯穿于整个教学过程之中,能够充分发掘学生的创造潜能,提高学生的动手能力。 一、项目教学模式 项目教学模式是在建构主义理论[1]指导下,以基于项目的教学方式完成课程教学任务的教学方法体系。教师在授课过程中,以一个贯穿课程始终的,来源于生活和生产实际的成功项目案例为线索组织教学,进行知识传授和技能培训[2]。它实质上就是一种基于建构主义学习理论的探究性学习模式,强调知识意义和能力建构性,强调协作学习,在不断解决问题、实现阶段任务中完成对知识的意义建构。基于建构主义的项目教学法与传统的教学法相比,将以教师、课本、课堂为中心转变为以学生、项目、实践为中心,能够使理论知识与应用能力的培养有机结合[3]。 在项目教学的实施过程中,经常遇到以下一些实际问题:项目教学是从应用的角度出发,与传统的教学方式有很大的区别,教学目标该如何制定才能体现项目教学的实施效果。传统的教材对于知识模块的划分不适合项目教学的实施,需要编制适合项目教学的理论教材和实验教材来配合项目教学。因为篇幅有限,教材中只能涉及到几个项目案例,使得教学背景比较单调,而且项目案例通常是比较大的程序,如何根据知识模块将项目案例合理分解为较小的项目子例,使其能够更好地配合理论和实验课也是需要解决的问题。在项目教学中,教师应该采用怎样的教学方法,才能有效地实施项目教学并监控和指导学生的项目学习。 二、C语言程序设计课程中的项目教学模式 (一)根据实际情况,設定教学目标 结合C语言程序设计课程特点和项目教学从应用出发的特点,对C语言程序设计课程进行教学设计,制定技能训练和应用培养教学目标,采用“语句、代码、程序、应用”四个教学目标层次分类,同时采用“熟练使用基本知识点,练习设计编写小程序,综合项目设计应用”的实践教学层次,使项目教与学的衡量标准成为一种可具体追求和实现的目标[4]。具体的项目教学目标分别从知识点目标、技能目标和应用目标三个层次进行描述。 知识点目标是对课程理论知识点的教学要求进行描述,例如,写出伪代码描述具体问题的算法、应用“自顶向下、逐步求精”的方法求解问题、解释一维数组在内存中的存储、比较字符数组作为字符串和指针指向字符串等。技能目标分为熟练使用基本知识点和练习设计编写小程序两个层次。例如,练习C源程序文件的创建(编辑输入、存储编译、简单运行调试)过程,掌握使用VC集成开发环境处理一个C语言程序的步骤:编辑、编译、连接和运行;编程实现对多个数据的处理,要求练习加、减、乘、除、求余的运算等。应用目标是指“综合项目设计应用”,分为两个层次:(1)开发学习者发现问题,总结问题的能力,让学习者结合身边事,自找题目,写出编程实现步骤;(2)软件项目应用设计训练。培养学生应用能力,实施项目教学,需要学习者独立或合作完成项目训练,达到应用目标要求的标准。例如:结合自己专业或生活经验,寻找需要或可以分解为多个函数实现的实际问题,自编一个题目,利用自定义函数和函数调用实现问题求解过程;软件功能模块划分,应用模块化编程思想,综合分析系统功能,设计划分并画出系统模块结构图,总结出系统数据字典,并详细描述各模块功能及函数功能等。 (二)编制适合项目教学的理论教材和实验教材 为了配合项目教学顺利的进行,需要编制适合项目教学的理论教材和实验教材。理论教材中,首先要对传统教材中的理论知识模块进行重新整合,与项目设计的进展相结合,分为三个层次模块。初级阶段的知识模块主要是结构化程序设计基础,包含C语言程序设计课程的基本知识、基本数据类型及其定义与操作、程序的基本结构。中级阶段的知识模块主要是模块化程序设计基础,包含函数的编写和调用、变量的作用域与生存期的运用。高级阶段的知识模块主要是复杂数据结构和程序设计方法,包含数组、指针、结构体、文件的操作和应用。理论教材中的例子分为项目子例和教学辅例。项目子例是将整个项目分解为小的例子配合理论知识的讲解,教学辅例是与项目子例背景相似、题型相似的传统例题。 实验教材是对理论教材的实践和扩展。项目教学的关键就是对项目的实践,学生通过理论教材学习项目设计的方法,在实验教材中提供给学生更多的项目参考子例和具体的实践步骤,指导学生独立完成项目的实践。 (三)选择合适的项目案例,建设教学项目库 在实际的生产生活中,选择具有真实性、典型性等特点的项目。要强调的是项目的应用性,而不是专业性,让大部分学生能够理解和接受。项目的内容应符合课程教学目标的要求,能够容纳和体现更多数据结构、算法和知识点的应用,尽量能够贯穿课程。项目应难易适宜、大小适中,让学生在课程的学习过程中有能力完成项目内容,达到更好地掌握课程知识的效果。教师往往在课堂上只能讲解有限的几个项目案例,导致教学项目用例背景单调,不利于拓展学生的思维,因此应建设教学项目案例库,选择大量的项目案例供学生课下学习和参考。项目案例库中除了包含大量完整的项目案例,还应将项目案例分解为课堂教学用例系列、实验教学用例和学生项目实践用题系列等。 在项目教学中,将项目与课程的内容结合,根据各层次知识模块,选择某些项目分解为与每节理论课的知识点结合的项目教学课堂用例系列,要求在难度、复杂度、模块大小等方面要适合课堂讲解和学生学习。在实验课上,选择适合的项目分解为学生可以在有限课时内独立完成的实验教学用例系列,配合理论课的课堂用例进行项目实践。为了拓展学生的思维,设计学生项目用题系列作为学生课下学习的补充。 (四)理论课中教师实施项目教学 结合项目教学,采用小组合作学习方式[5],让学生分组实践项目。建议4-7人自由组合为一个小组,每组推选一个组长组织组内的学习,并将学习的过程记录下来。具体的教学过程如下:(1)教师用项目课堂用例提出需要解决的问题,引入本节课要学习的问题。(2)教师结合要实现的项目问题,讲解知识点。(3)教师选择项目辅助用例,运用知识点。(4)教师和学生一起讨论如何运用知识点,解决项目问题。(5)教师对项目内容进行扩展,提出小组讨论问题。 (五)实验课中学生实践项目教学 在实验课上,以小组为单位进行项目实践,并写下实验报告。具体的教学过程如下:(1)教师课前布置实验课的项目内容,课前小组讨论出可执行的步骤。(2)学生模仿课堂项目用例的方法,实施实验项目用例的内容。(3)各小组讨论项目实验结果,并将结果合并实现综合项目。教师参与到小组的讨论中,给予指导意见。(4)小组总结实验课内容,写出小组实验报告。实验报告中要详细记录每个组员的参与情况,包括发言、上机实践、帮助其他组员等具体的过程,这样教师可以通过查看实验报告的情况了解每个学生的学习情况,起到监控和指导的作用。 (六)课外的网络课堂交流补充 教学课时数是有限的,教师不可能跟每一位学生进行很好的交流。而且学生之间的大多数交流也仅限于小组内部,各小组间的交流很少。因此,需要建立課外的网络课堂作为教学的补充,例如,教师建立教师教学博客,学生可以建立班级博客、小组博客等。教师可以提前将教学内容发布在教学博客上供学生提前预习,并提出问题供学生讨论,学生通过回复与教师和其他同学交流。学生可以给教师留言,与教师交流学习中的问题,其他学生也可以看到这个交流的过程,启发自己的思维。每个小组可以通过博客展示自己的实验成果,各小组可以通过博客交流学习心得。教师可以通过博客中的交流监控到所有学生的学习情况、思想动态,适时的调整教学进度和教学内容。 在项目教学模式中,设定项目教学目标并编制适用于项目教学的理论和实验教材是有效实施项目教学的前提,选择合适的项目案例建设教学项目库是项目教学的关键因素。在具体的项目教学过程中,每个教师应根据实际的教学情况适当地调整教学模式,选择有效可行的方法以保证教学效果。 参考文献: [1]陈越.建构主义与建构主义学习理论综述. http://www.being.org.cn/theory/constructivisom.htm [2]孟朝霞.基于项目的程序设计实践课程教学流程设计[J].高等理科教育,2008,5 [3]徐涵.项目教学的理论基础,基本特征及对教师的要求[J].职教论坛,2007,3 [4]孟朝霞.C语言课程的应用性目标模型[J].运城学院,2009,1 【c语言课程设计指导书】推荐阅读: c语言课程设计要求07-25 c语言课程设计电话簿06-28 c语言通讯录课程设计07-09 汇编语言课程设计模版07-10 c语言设计程序11-11 c语言程序设计作业三06-24 C语言图形程序设计报告10-13 c语言程序设计基础题10-28 c语言程序设计复习题10-28《C程序设计实践》课程设计指导 篇5
C语言课程设计学生选课系统 篇6
C语言程序设计课程教学探讨 篇7
c语言课程设计指导书 篇8