计算机编程课程教学

2024-05-08

计算机编程课程教学(精选6篇)

篇1:计算机编程课程教学

编程实现简单的TCP协议分析器

编程实现简单的TCP协议分析器

一、问题描述

编程实现简单的TCP协议分析器,TCP协议分析器是一种用于监督和跟踪网络活动的诊断工具,它从局域网中抓取IP数据包,并对它进行分析得到相应的头部信息,过滤TCP包进行分析,得到TCP包的相应信息。

二、基本要求

1.利用原始套接字实现简单的TCP协议分析器。2.系统功能包括:

2.1 原始套接字与网卡绑定,并接收流经网卡的所有数据包; 2.2 对数据包进行分析以获得源IP地址和目的IP地址; 2.3 对TCP Segment进行分析以获得其首部详细信息; 2.4 显示分析结果。3 建议使用VC++。

三、设计思想

TCP协议的数据传送程序是由二个子程序组成的。也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦听端口号,接收远 程主要的TCP连接申请,并接收远程主机传送来的文字数据。另外一个子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请。

程序利用原始套接字抓取局域网中的IP包。

TCP协议分析器实现了sniffer的一部分功能。而sniffer的工作原理是:1.把网卡置于混杂模式;2.捕获数据包;3.分析数据包。

Raw Socket: 原始套接字可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP,TCP, UDP等。

四、系统结构

(1)Pcap_addr描述网络接口地址;

(2)pcap_pkthdr用来描述每个捕获到的数据包的基本信息;(3)int_pcaplookupnet获取网络地址和网络掩码;

(4)int_pcaploop循环捕获网络数据包,直到遇到错误或满足退出条件;(5)pcap_t* pcap_open_dead构造一个libpcap句柄。

五、程序流程(或模块划分)

编程实现简单的TCP协议分析器

六、源程序

#include “pcap.h” struct ether_header {

u_int8_t ether_dhost[6];

/* 目的以太网地址 */

u_int8_t ether_shost[6];

/* 源以太网地址 */

u_int16_t ether_type;

/* 以太网类型 */ };struct arp_header

编程实现简单的TCP协议分析器

{

u_int16_t arp_hardware_type;

/* 硬件类型 */

u_int16_t arp_protocol_type;

/* 协议类型 */

u_int8_t arp_hardware_length;

/* 硬件地址长度 */

u_int8_t arp_protocol_length;

/* 协议地址长度 */

u_int16_t arp_operation_code;

/* 操作码 */

u_int8_t arp_source_ethernet_address[6];

/* 源以太网地址 */

u_int8_t arp_source_ip_address[4];

/* 源IP地址 */

u_int8_t arp_destination_ethernet_address[6];

/* 目的以太网地址 */

u_int8_t arp_destination_ip_address[4];

/* 目的IP地址 */ };struct ip_header {

#if defined(WORDS_BIGENDIAN)

u_int8_t ip_version: 4,/* 版本 */

ip_header_length: 4;

/* 首部长度 */

#else

u_int8_t ip_header_length: 4, ip_version: 4;

#endif

u_int8_t ip_tos;

/* 服务质量 */

u_int16_t ip_length;

/* 长度 */

u_int16_t ip_id;

/* 标识 */

u_int16_t ip_off;

编程实现简单的TCP协议分析器

/* 偏移 */

u_int8_t ip_ttl;

/* 生存时间 */

u_int8_t ip_protocol;

/* 协议类型 */

u_int16_t ip_checksum;

/* 校验和 */

struct in_addr ip_souce_address;

/* 源IP地址 */

struct in_addr ip_destination_address;

/* 目的IP地址 */ };struct udp_header {

u_int16_t udp_source_port;

/* 源端口号 */

u_int16_t udp_destination_port;

/* 目的端口号 */

u_int16_t udp_length;

/* 长度 */

u_int16_t udp_checksum;

/* 校验和 */ };struct tcp_header {

u_int16_t tcp_source_port;

/* 源端口号 */

u_int16_t tcp_destination_port;

/* 目的端口号 */

u_int32_t tcp_sequence_liuzhen;

/* 序列号 */

u_int32_t tcp_acknowledgement;

/* 确认序列号 */

#ifdef WORDS_BIGENDIAN

u_int8_t tcp_offset: 4,/* 偏移 */

编程实现简单的TCP协议分析器

tcp_reserved: 4;

/* 未用 */

#else

u_int8_t tcp_reserved: 4,/* 未用 */

tcp_offset: 4;

/* 偏移 */

#endif

u_int8_t tcp_flags;

/* 标记 */

u_int16_t tcp_windows;

/* 窗口大小 */

u_int16_t tcp_checksum;

/* 校验和 */

u_int16_t tcp_urgent_pointer;

/* 紧急指针 */ };struct icmp_header {

u_int8_t icmp_type;

/* ICMP类型 */

u_int8_t icmp_code;

/* ICMP代码 */

u_int16_t icmp_checksum;

/* 校验和 */

u_int16_t icmp_id;

/* 标识符 */

u_int16_t icmp_sequence;

/* 序列码 */ };void tcp_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content){

struct tcp_header *tcp_protocol;

/* TCP协议变量 */

u_char flags;

编程实现简单的TCP协议分析器

/* 标记 */

int header_length;

/* 长度 */

u_short source_port;

/* 源端口 */

u_short destination_port;

/* 目的端口 */

u_short windows;

/* 窗口大小 */

u_short urgent_pointer;

/* 紧急指针 */

u_int sequence;

/* 序列号 */

u_int acknowledgement;

/* 确认号 */

u_int16_t checksum;

/* 校验和 */

tcp_protocol =(struct tcp_header*)(packet_content + 14+20);

/* 获得TCP协议内容 */

source_port = ntohs(tcp_protocol->tcp_source_port);

/* 获得源端口 */

destination_port = ntohs(tcp_protocol->tcp_destination_port);

/* 获得目的端口 */

header_length = tcp_protocol->tcp_offset *4;

/* 长度 */

sequence = ntohl(tcp_protocol->tcp_sequence_liuzhen);

/* 序列码 */

acknowledgement = ntohl(tcp_protocol->tcp_acknowledgement);

/* 确认序列码 */

windows = ntohs(tcp_protocol->tcp_windows);

/* 窗口大小 */

urgent_pointer = ntohs(tcp_protocol->tcp_urgent_pointer);

/* 紧急指针 */

flags = tcp_protocol->tcp_flags;

/* 标识 */

checksum = ntohs(tcp_protocol->tcp_checksum);

编程实现简单的TCP协议分析器

/* 校验和 */

printf(“-------TCP协议

-------n”);

printf(“源端口号:%dn”, source_port);

printf(“目的端口号:%dn”, destination_port);

switch(destination_port)

{

case 80:

printf(“上层协议为HTTP协议n”);

break;

case 21:

printf(“上层协议为FTP协议n”);

break;

case 23:

printf(“上层协议为TELNET协议n”);

break;

case 25:

printf(“上层协议为SMTP协议n”);

break;

case 110:

printf(“上层协议POP3协议n”);

break;

default:

break;

}

printf(“序列码:%un”, sequence);

printf(“确认号:%un”, acknowledgement);

printf(“首部长度:%dn”, header_length);

printf(“保留:%dn”, tcp_protocol->tcp_reserved);

printf(“标记:”);

if(flags &0x08)

printf(“PSH ”);

if(flags &0x10)

printf(“ACK ”);

if(flags &0x02)

printf(“SYN ”);

if(flags &0x20)

编程实现简单的TCP协议分析器

printf(“URG ”);

if(flags &0x01)

printf(“FIN ”);

if(flags &0x04)

printf(“RST ”);

printf(“n”);

printf(“窗口大小:%dn”, windows);

printf(“校验和:%dn”, checksum);

printf(“紧急指针:%dn”, urgent_pointer);} void ip_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content){

struct ip_header *ip_protocol;

/* IP协议变量 */

u_int header_length;

/* 长度 */

u_int offset;

/* 偏移 */

u_char tos;

/* 服务质量 */

u_int16_t checksum;

/* 校验和 */

ip_protocol =(struct ip_header*)(packet_content + 14);

/* 获得IP协议内容 */

checksum = ntohs(ip_protocol->ip_checksum);

/* 获得校验和 */

header_length = ip_protocol->ip_header_length *4;

/* 获得长度 */

tos = ip_protocol->ip_tos;

/* 获得服务质量 */

offset = ntohs(ip_protocol->ip_off);

/* 获得偏移 */ if(ip_protocol->ip_protocol==6)

{

printf(“-----------IP协议

-----------n”);

编程实现简单的TCP协议分析器

printf(“版本号:%dn”, ip_protocol->ip_version);

printf(“首部长度:%dn”, header_length);

printf(“服务质量:%dn”, tos);

printf(“总长度:%dn”, ntohs(ip_protocol->ip_length));

printf(“标识:%dn”, ntohs(ip_protocol->ip_id));

printf(“偏移:%dn”,(offset &0x1fff)*8);

printf(“生存时间:%dn”, ip_protocol->ip_ttl);

printf(“协议类型:%dn”, ip_protocol->ip_protocol);

printf(“上层协议为TCP协议n”);

printf(“校验和:%dn”, checksum);

printf(“源IP地址:%sn”, inet_ntoa(ip_protocol->ip_souce_address));

/* 获得源IP地址 */

printf(“目的IP地址:%sn”, inet_ntoa(ip_protocol->ip_destination_address));

/* 获得目的IP地址 */

} } void ethernet_protocol_packet_callback(u_char *packet_header, const u_char *packet_content){ static int packet_number = 1;

/* 数据包个数,静态变量 */ u_short ethernet_type;

/* 以太网类型 */

struct ether_header *ethernet_protocol;struct ip_header *ip_protocol;

/* IP协议变量 */

u_int header_length;

/* 长度 */

u_int offset;

/* 偏移 */

u_char tos;

/* 服务质量 */

u_int16_t checksum;

/* 校验和 */

ip_protocol =(struct ip_header*)(packet_content + 14);

/* 获得IP协议内容 */

checksum = ntohs(ip_protocol->ip_checksum);

*argument, const struct pcap_pkthdr 编程实现简单的TCP协议分析器

/* 获得校验和 */

header_length = ip_protocol->ip_header_length *4;

/* 获得长度 */

tos = ip_protocol->ip_tos;

/* 获得服务质量 */

offset = ntohs(ip_protocol->ip_off);

/* 获得偏移 */

/* 以太网协议变量 */ ethernet_protocol =(struct ether_header*)packet_content;ethernet_type = ntohs(ethernet_protocol->ether_type);/* 获得以太网类型 */ if(ethernet_type==0x0800 && ip_protocol->ip_protocol==6){ u_char *mac_string;

/* 以太网地址 */

printf(“**************************************************n”);

printf(“捕获第%d个TCP网络数据包n”, packet_number);

printf(“捕获时间:n”);

printf(“%s”, ctime((const time_t*)&packet_header->ts.tv_sec));

/* 获得捕获数据包的时间 */

printf(“数据包长度:n”);

printf(“%dn”, packet_header->len);

printf(“--------

以太网协议

--------n”);

/* 获得以太网协议内容 */

printf(“类型:n”);

printf(“%04xn”, ethernet_type);

printf(“源以太网地址: n”);

mac_string = ethernet_protocol->ether_shost;

printf(“%02x:%02x:%02x:%02x:%02x:%02xn”,*mac_string, *(mac_string *(mac_string + 2), *(mac_string + 3), *(mac_string + 4), *(mac_string + 5));

/* 获得源以太网地址 */

printf(“目的以太网地址: n”);

mac_string = ethernet_protocol->ether_dhost;

printf(“%02x:%02x:%02x:%02x:%02x:%02xn”, *mac_string, *(mac_string *(mac_string + 2), *(mac_string + 3), *(mac_string + 4), *(mac_string + 5));

/* 获得目的以太网地址 */

ip_protocol_packet_callback(argument, packet_header, packet_content);

+ 1),+ 1), 编程实现简单的TCP协议分析器

packet_number++;

printf(“**************************************************n”);

} } void main(){

pcap_t *pcap_handle;

/* Winpcap句柄 */

char error_content[PCAP_ERRBUF_SIZE];

/* 存储错误信息 */

char *net_interface;

/* 网络接口 */

struct bpf_program bpf_filter;

/* BPF过滤规则 */

char bpf_filter_string[] = "";

/* 过滤规则字符串 */

bpf_u_int32 net_mask;

/* 掩码 */

bpf_u_int32 net_ip;

/* 网路地址 */

net_interface = pcap_lookupdev(error_content);

/* 获得可用的网络接口 */

pcap_lookupnet(net_interface, &net_ip, &net_mask, error_content);

/* 获得网络地址和掩码地址 */

pcap_handle = pcap_open_live(net_interface, BUFSIZ, 1, 1, error_content);

/* 打开网路接口 */

pcap_compile(pcap_handle, &bpf_filter, bpf_filter_string, 0, net_ip);

/* 编译BPF过滤规则 */

pcap_setfilter(pcap_handle, &bpf_filter);

/* 设置过滤规则 */

if(pcap_datalink(pcap_handle)!= DLT_EN10MB)

return;

pcap_loop(pcap_handle,-1, ethernet_protocol_packet_callback, NULL);

/* 注册回调函数,循环捕获网络数据包,利用回调函数来处理每个数据包 */

pcap_close(pcap_handle);

/* 关闭Winpcap操作 */ }

编程实现简单的TCP协议分析器

七、测试数据

本地局域网IP数据包

八、测试情况

程序运行结果图:

编程实现简单的TCP协议分析器

编程实现简单的TCP协议分析器

结 论

通过两周的课程设计,增强了我的实际动手能力,通过实际的编程整合串联了我所学到的知识。另外我还学到了作为编程人员的一些基本素质,这为我毕业后找工作奠定了基础。

通过做TCP协议分析器学习的很多网络编程知识: 1.学会了winpcap网络数据报捕获开发包的使用; 2.绑定网卡函数bind(); 3.数据接受函数recv(); 4.Windows套接字编程;

5.学习了原始套接字编程的基本机制; 6.学习对数据包进行协议分析的基本方法。

通过做TCP协议分析器学习的很多Visual C++ Windows编程知识:

1.学会了Windows常用数据结构的使用;

2.学到了一些用Visual C++ Windows编程的技巧。

编程实现简单的TCP协议分析器

参考文献

[1] 甘玲 邱劲 《面向对象技术与Visual C++ 》 清华大学出版社 [2] 任哲 《MFC Windows 应用程序设计》清华大学出版社 [3] 《计算机网络》 北京:机械工业出版社

[4] 《Visual C++网络通信编程实用案例精选》 人民邮电出版社 [5] 《windows程序设计》 北京大学出版社

篇2:计算机编程课程教学

数控编程课程项目教学方法的探索

本论文针对<数控编程>课程在教学方法上的`运用进行探讨,根据数控技术的发展和高等职业教育的特点,以提高学生学习兴趣、充分利用数控编程仿真系统,合理设计教学单元和锻炼学生思维模式等几个方面讨论<数控编程>课程教学方法.

作 者:张小红  作者单位:江西环境工程职业学院机电工程分院,江西・赣州,341000 刊 名:科教导刊 英文刊名:THE GUIDE OF SCIENCE & EDUCATION 年,卷(期):2009 “”(34) 分类号:G642 关键词:数控编程   方法   探讨  

篇3:计算机编程课程教学

1 计算机编程语言课程概述

1.1 含义

对于计算机编程语言而言, 其具有模块化与抽象化的特点, 致使学生在学习和掌握计算机编程语言时较为吃力, 影响学习进度和教学效果。当前高职学生在实际学习计算机编程语言的过程中, 往往不能理解命令格式, 不会写计算机程序与程序算法等, 只能记录教师写的程序, 无法真正理解程序的算法与语法。如果学生长期处于这种情况, 往往会失去学习兴趣, 而且教师在教学过程中采用直接讲解法进行教学活动, 这样虽然能完成教学目标, 但是会极大限制学生的主观能动性, 降低教学的有效性。

1.2 重要性

编程语言类课程作为计算机专业的必修课程, 是计算机核心课程中的重要组成部分。当前大部分高职院校在计算机专业中开设了编程语言类课程, 如Java语言程序设计、C++程序设计、C语言程序设计基础等, 并且部分主干课程的设计与实验都是通过程序的编写来实现, 以此达到理解与巩固课程知识点的目的[2]。如软件工程、算法分析与设计和数据结构等课程内容, 需要编写相关的程序来达到学习及理解的目的。随着计算机技术的发展与普及, 许多用人单位对计算机专业人才提出了更高的要求, 将学生的编程能力作为考核的一部分, 这说明编程语言类课程学习的好坏直接关系到计算机专业学生的培养质量, 对学生的就业情况具有直接影响。

2 高职计算机编程语言课程教学现状分析

高职计算机编程语言课程教现状主要表现为以下几点。 (1) 消极的学习态度。有些学生在学习过程中遇到难以理解的知识点就放弃, 上机时遇到程序卡壳也放弃学习, 不会积极思考问题, 也不主动提出问题, 只对考试的内容十分关注, 典型的应付考试型。 (2) 编程思路不清晰。有些学生编写的程序缺乏清晰的结构和较强的可读性, 规模相对臃肿, 程序的效率十分低下, 如果程序偏难则无从下手, 存在眼高手低的现象。 (3) 缺乏规范的编程习惯。学生编写的程序卡壳是由于存在一些问题, 如程序结构的错误理解、数据类型的混用乱用、少空行或多空行、中英文模式错误、大小写错误、关键字拼音错误等, 同时学生多对程序的结果较为关注, 较少顾及编程风格与编程过程, 缺乏扎实的基本功。 (4) 存在畏难情绪。部分高职学生在计算机编程语言课程学习过程中, 存在心理障碍, 一旦遇到难以理解的知识点, 则会开始怀疑自己, 出现畏难情绪, 如果难以理解的知识点积累到一定程度之后, 往往放弃学习, 失去学习的积极性与自信心。

之所以出现这些表现, 不完全是学生自身的原因, 需要从教师和课程本身等方面查找原因。计算机编程语言相对抽象, 需要严格按照计算机编程语言的规定步骤和处理数据的内部机制进行编写, 采用缜密的思维来解决问题。同时编程语言中的部分知识点是学生理解的难点, 如与内存相关的知识点、指针等, 这些都对学生的学习与理解造成了一定的难度。另外, 学生在学习编程语言时, 需要接触庞杂的语法知识, 这就需要教师帮助和引导学生找准关键点和重点, 积极攻破难点, 鼓励学生, 创设良好的编程学习环境, 使学生形成良好的编程思路与编程习惯, 提高学习效率和教学效果。

3 高职计算机编程语言课程教学方法及改革措施

3.1 教学方法

3.1.1 案例式教学

对于案例式教学方法而言, 其主要是指在教师的指导下, 分析讨论案例中的问题, 激发学生的探究欲和积极性, 教给学生分析和解决问题的思路与方法。案例式教学方法具有较强的互动性, 能够将理论与实际进行有机结合, 将其用于计算机编程语言课程教学中, 需要先列举与教材内容相关的案例, 然后通过问题的解决, 引导学生自主学习, 并运用所学知识解决实际问题。如在讲解“C语言程序设计中的选择结构”的相关知识时, 给出“计算股票经纪人佣金”的案例, 由于股票交易额不同, 因此, 股票经纪人佣金的计算方式也不尽相同。然后引导学生进行计算:假如交易额为x, 经纪人所得佣金为y, 那么y的值可以x的大小加以计算, 即先对x值范围进行判断, 然后选择相应的计算方式, 以条件判断为依据来决定该语句是否执行。最后要求学生阅读教材中的选择结构章节, 找出相应的语句格式, 并写出该案例的实现代码。这样的教学方法可以突出学生的主体地位, 调动学生学习的主动性与积极性, 培养学生独立思考能力和自主学习能力, 提高教学效果。

3.1.2 项目驱动式教学

项目驱动式教学是分解展开与教材内容相关的中小型项目, 通过师生之间的互动交流, 让学生掌握知识与技能, 体验创新实践的趣味性, 提高分析和解决问题的能力。以C语言课程为例, 让学生制作“学生成绩管理系统”的项目 (见表1) , 要求学生结合课程教学内容, 对项目进行模块分解, 并通过自主设计与学习实现各个模块的功能。应用该方法时需注意以下几点: (1) 项目设计应涵盖教学的相关知识, 以调动学生思考与解决问题的主动性及积极性; (2) 结合所学内容来选取项目, 项目的规模不能过大, 尽量以学生身边的素材为主来确定项目; (3) 教师在讲解该课程之前, 需要先简单说明和演示该项目的实现结果, 使学生能初步了解该项目, 感性认识该课程的学习目的。

3.2 改革措施

3.2.1 理清课程知识点

掌握语法的重点就是编程的学习, 这就需要学生在学习过程中关注知识点, 如数据类型的学习, 需要对每种数据类型的特殊用途、计算、表示长度和类型名等加以关注;函数的学习, 需要对返回值、函数名、参数类型与个数等加以重视;流程结构的学习则需了解其运行的细节。只有积极关注每个知识的关键点, 才能保证学习的针对性, 避免出现调试排错和语法错误等, 提高学习效率。目前许多教材都采取案例教学法, 可从案例中学习知识点的用法与语句等, 学生准确理解案例, 抓住案例中体现的知识点, 把握课堂的重点知识, 做到重点突出。

3.2.2 合理的编程思路

首先, 训练学生程序排错和调试能力。教师在进行计算机编程语言课程教学时, 应训练学生掌握基本的排错技巧, 使其能在调试过程中有效分析错误报告, 然后指导学生归纳总结出错的原因, 从而避免下次上机时犯同样的错, 节省卡壳时间, 促进工作效率提升。其次, 让学生了解程序的运行过程。以JSP课程为例, 指导学生观察运行结果中出现的界面元素, 如一个处理结果、一个链接、一个表单、一个图片等, 并让学生分析其对应程序中的哪几行代码, 或者要求学生以运行结果为依据推理程序的运行细节与编写流程。这样学生才能深入理解所学知识, 重用部分有用的代码, 实现知识的不断积累, 提高学生的学习能力。最后, 采用逐步细化与模块化分析的方法。教师可引导学生从全局的角度来分析问题, 将问题划分为若干个小问题, 指导学生利用模块化的思维来解决问题, 这样能够保证思路清晰, 各个击破问题。

3.2.3 有效的激励措施

第一, 准确把握学生学习心理。单纯利用经济物质的激励, 虽然能让学生逼迫自己学习, 但是学习动力保持时间极为短暂。尤其是90后学生, 其深受电视、电影和网络等因素的影响, 需要教师准确把握其心理喜好, 少责备多鼓励, 让其能够体验编程的乐趣, 激发学习兴趣。第二, 科学设计编程题目。教师可以对题目要求进行适当变更, 要求学生编写具有较广适应面和较强灵活性的程序, 培养学生的变通能力与发散性思维。第三, 积极鼓励学生上机。如果编程被某个小问题卡住, 则会导致整个编译、编写和运行都难以继续, 严重影响学生的学习兴趣与自信心, 因此, 教师需要积极关注学生的实际情况, 对其进行鼓励, 创设良好的学习环境, 营造和谐融洽的师生关系, 提高学生的学习主动性与自信心。

4 结语

综上所述, 高职学生在学习计算机编程语言课程的过程中还存在诸多问题, 教师在实际教学过程中, 需要结合学生的学习习性与课程本身特征, 优化教学方法, 科学运用案例式教学与项目驱动式教学, 理清课程知识点, 采用合理的编程思路与有效的激励措施。这样才能激发学生的学习兴趣, 调动学生学习的自信心与积极性, 提高教学效果和学习效率, 实现计算机编程语言课程教学的目标, 促进高职教育长远发展。

摘要:计算机编程语言课程作为高职教育体系中的重要内容, 其主要是培养学生语言和程序的编写能力。当前随着信息技术与互联网技术的快速发展, 计算机的应用越来越广泛, 各岗位对人才的计算机应用能力提出了更高的要求。因此, 高职院校在开展计算机编程语言课程教学时, 需要不断创新和优化教学方法, 增加学生的理论知识和提升专业技能, 提高学生的语言编程能力和计算机水平, 从而保证学生今后顺利就业, 并推动高职教育可持续发展。基于此, 就对高职计算机编程语言课程教学方法进行分析和探讨。

关键词:高职,计算机编程语言,教学方法

参考文献

[1]兰丽, 贺桂英.高职计算机编程语言课程教学方法研究[J].计算机教育, 2010 (21) :73-76.

篇4:计算机编程课程的教学改革探析

关键词:计算机;编程;教学;改革

计算机编程课程是计算机专业学生所学的基础性课程之一,该课程以实际动手编程为手段,主要培养学生的设计能力,并为学生后期学习数据结构、面向对象的程序设计以及操作系统等课程奠定基础。由此可见,计算機编程课程在专业体系中占有重要地位,对该门课程的教学改革进行深入探究具有一定的指导意义。

1 计算机编程课程教学现状

1.1 课程内容与工程实践脱节严重 传统编程类课程教学过程中,理论课所占比例较大,教师往往按照大纲制定的配套教材进行讲授;课程内容多采用教材中的案例,与现有的工程实际存在较大差异。理论知识对应的案例比较孤立,缺乏实用性,无法提升学生的学习兴趣和操作能力。

1.2 教学效率不高 理论课教学过程中,由于缺乏系统的实践,导致各部分内容无法真正实现融会贯通,影响学生对于理论知识的掌握和应用;另一方面,实践课程没有得到足够的重视,无论从实践课课时安排、课程内容设置还是最后的考核方面,都没有对实践课程进行科学、合理的设计。实践课程利用率不高,不仅浪费了师生的时间,还影响了课程的应用。

1.3 考核与实践应用关联度不高 语言编程类课程涉及的内容较多,具有理论性和实践性极强的特点,由于课时安排不足,学生练习时间不够,再加之学生之间的理解力存在一定的差异性,导致课程考核受到了很大限制。学生为了取得成绩,也会采取考什么学什么的态度,将动手能力强的实践课变为具有一定逻辑性的理论课,影响整体教学效果。

2 计算机编程课程的教学改革

2.1 教学内容改革 教学内容是课程的核心,内容设置对教学效果具有直接影响。计算机编程课程的教学体系不仅要注重理论的系统性,还应突出知识的实用性,提高学生的实践能力。

2.1.1 理论课程设置方面,应按照循序渐进的原则进行学习内容的安排,可设置以C#为主线的系列课程,课程按照难易程度分为网络编程基础知识、网络应用编程、Web系统分析与设计等,有计划地提升学生的实践能力。在课程设置过程中,应充分体现出实践的重要性,适当增加实验部分的课时及考核力度。如网络应用编程课程考核可由理论考试和实践考试课两部分组成,学分共计4分,按照3:1的比例分配,这样既可确保理论课程与实践课程之间的独立性,又能使其互相融合,提升理实一体化教学水平。

2.1.2 实践课程安排。在实践教学过程中,实践课程的内容选择和安排非常关键。实践课程过于简单和单调,不利于学生学习兴趣的提升,更无法提高学生的实践能力;实践内容过于复杂,不利于成果形成,影响教学进度。为制定难度适宜的实践课程,可对实际项目或实际应用中的程序进行简化提炼,设置基础性实践和设计性实践两种性质课程,基础性实践活动可安排4-5个,设计性实践活动安排1-2个。基础性实践活动主要利用Windows应用程序学习编程的基础知识,进而掌握TCP、UDP、FTP、SMTP等各类网络协议所需的知识,为后期的设计性实践活动奠定基础。设计型实践活动可安排多机联合绘图系统等来源于实际项目,但不涉及过深业务知识的内容,同时还能对面向对象程序设计技术、客户/服务器技术、P2P技术、TCP编程等网络通信技术进行综合应用。

2.2 教学方法的改革 传统的教学方式对理论知识的讲解较多,讲授方式对学生没有足够的吸引力和渗透力,导致学生只了解知识点,但缺乏实践的能力,影响了学生的就业和发展,对其进行改革,势在必行。

2.2.1 任务驱动式教学。教学组可将计算机编程课程的理论部分设置在不同的情景内,每个情景再划分为若干个独立的任务,利用任务驱动教学法,将理论教学带入到不同的实践任务中,从而引发学生思考问题,激发学生主动学习的兴趣。在任务驱动式教学过程中,教师应积极引导学生思考,扩展学生的思路,使学生能独立完成各个阶段的任务,帮助学生树立学习和应用理论知识的自信。

2.2.2 项目导向教学法。实践课程教学过程中采用项目导向教学法可取得较好的效果。项目导向教学法实施时,可将企业的真实任务作为教学项目,针对相关的教学内容进行简化设计,使实践内容融入项目中,以此培养学生分析项目、设计、编码、测试等多项编程能力。在实施项目导向教学法时,应注意两个关键点:①案例的选择。项目导向教学法实施前,对课程内容、课程进度进行深入分析,选取与以上内容相关的项目作为教学案例。设计性实践项目可选取由课题组教师成果完成的实际企业项目联机绘图程序,根据学生学习能力对业务进行精简。②实施模式。设计性实践项目的讲授应先对总项目进行分解,由简至繁,循序渐进地完成整个项目。教学时,可先介绍单机版应用,然后绘制单个矩形,继而绘制多个矩形;面向对象重构后绘制多种形状,增加句柄控制,如何利用通信技术完成联机版程序,最后对程序功能进行深入拓展,如加密解密、邮件收发等。这种分解化的教学模式,既降低了教学难度,还增加了项目的灵活性,逐渐形成教师引导,学生主导的课堂教学氛围。

2.3 教学环境改革 学校应建立计算机编程课程网站,利用网络技术实现教学资源的共享和开放,以实现网上教学互动。教师可利用多媒体课件、在线练习、试题库以及程序等多种网络资源提高教学效果,推进教学方式的现代化。

3 结语

计算机编程是一门理论性和实践性较强的学科,为提高该学科的教学效果,应对传统的课程教学进行改革。本文以课程内容和教学方式为例,对计算机编程类课程的发展现状进行了分析,并对其存在的问题提出了几点建议,希望能为教育工作者提供一定的借鉴。

参考文献:

[1]黄亚博,王玉璟.网络应用编程课程的实践教学改革[J].科技资讯,2013(32):197+199.

[2]卢炳旭.从学习者的视角看计算机专业《C语言程序设计》课程教学改革[J].职教论坛,2015(20):76-79.

[3]王建虎,刘军,梁涛.基于项目学习的《网络编程》课程教学改革研究[J].电脑开发与应用,2014(02):30-33+36.

[4]华顺刚,朱鸣华.围绕编程能力培养实施教学改革和课程建设[A].湖南工业大学法学院.第三届教学管理与课程建设学术会议论文集

篇5:计算机编程课程教学

一、课程的性质、目的与任务

在现代数字系统设计中,在系统可编程逻辑器件的使用越来越广泛。《在系统可编程技术及应用》是电子信息工程、通讯工程专业的专业选修课。主要介绍可编程逻辑器件的原理、特点、发展趋势和VHDL的编程设计。为学习数字系统设计和其他专业课奠定基础。

二、课程的教学基本要求

1. 掌握PROM的基本结构和编程原理。2. 掌握PAL的原理与使用。3. 掌握GAL的原理与使用。4. 掌握高密度可编程逻辑器件的原理与使用。5. 掌握超高速集成电路硬件描述语言VHDL。

三、课程内容及学时分配 1 总学时与习题

本课程一学期授完,计划36学时,习题数20题,学分2分。实验教学单独设课。内容与课时分配

第一章 绪论 21. 内容与课时分配

可编程逻辑器件的概述 22. 重点和难点

(1)重点:

编程方法

(2)难点:

在系统可编程

3.习题

(1)编程方法有那几种?

第二章 可编程逻辑器件的表示法和基本结构 21.内容与课时分配

(1)可编程逻辑器件的表示法 1(2)可编程逻辑器件的基本结构 12.重点和难点

(1)重点:

可编程逻辑器件的表示法与基本结构

(2)难点:

可编程逻辑器件的基本结构。

3.习题

学时 学时 学时 学时 学时(1)可编程逻辑器件的表示法

第三章 PROM基本结构和编程原理 2学时 1.内容与课时分配

(1)PROM基本结构 1学时(2)PROM编程原理 1学时 2.重点和难点

(1)重点:

PROM的编程原理。

(2)难点:

PROM的编程原理。

3.习题

(1)PROM的编程方法。

第四章 PAL原理与使用 41.内容与课时分配

(1)PAL的结构和命名方法 2(2)PAL的使用 2.重点和难点

(1)重点:

PAL的结构。

(2)难点:

PAL的使用。

3.习题

(1)举例说明PAL器件的命名方法。

(2)用PAL16R8设计一个3位二进制减法计数器。

第五章 GAL原理与使用 41.内容与课时分配

(1)GAL的结构和命名方法 2(2)GAL的使用 2.重点和难点

(1)重点:

GAL的结构。

(2)难点:

GAL的使用。

3.习题

(1)举例说明GAL器件的命名方法。(2)GAL16V8行地址包含哪些内容?

第六章 高密度可编程逻辑器件的原理与使用 61.内容与课时分配

(1)高密度可编程逻辑器件的特点和基本结构 2(2)ispLSI1032基本原理及使用 4

学时 学时 2学时 学时 学时 2学时 学时 学时 学时 2.重点和难点

(1)重点:

ispLSI1032基本原理。

(2)难点:

ispLSI1032的使用。

3.习题

(1)ispLSI1032的结构特点是什么?(2)GLB有哪几种模式?

(3)乘积项分配矩阵的优点?

第七章 VHDL语言 14学时 1.内容与课时分配

(1)VHDL语言基本概述 2学时(2)VHDL语言基础知识 8学时(3)VHDL语言的数据类型及运算操作符 4学时 2.重点和难点

(1)重点:

VHDL语言基础知

(2)难点:

VHDL语言行为描述、VHDL语言构造体的子结构描述。

3.习题

(1)用行为描述实现半加器。(2)用VHDL实现全加器。(3)用行为描述实现半减器。(4)用VHDL实现全减器。

(5)用行为描述设计JK触发器。(6)用行为描述设计振荡器。

(7)用行为描述具有清零复位的D触发器。(8)用行为描述设计SR型琐存器(9)用行为描述设计输出使能。(10)用行为描述设计双向信号。

四、教材及参考书

教材:

刘篤仁,《在系统可编程技术及其器件原理与应用》,西安电子科技大学出版社,1999 参考书:

黄正瑾《在系统可编程技术及其应用》,东南大学出版社 曹伟《可编程逻辑器件—原理方法与开发应用指南》,国防科大出版社 黄培中《可编程逻辑器件PLD原理及应用》,上海交通大学出版社 杨峰《大规模可编程逻辑器件与数字系统设计》,北京航天大学出版社 侯建军《超大规模集成电路硬件描述语言VHDL简明教程和MAXPLUSII操作指南》 薛宏熙《数字系统设计自动化》,清华大学出版社

五、考核方式与成绩评定方法

本课程的成绩由下列两部分组成:

1.平时成绩(包括作业和课堂表现)占30%; 2.期末考试(闭卷笔试)占70%。

六、说明

本课程的先修课程:

篇6:计算机编程课程教学

张家口职业技术学院 贾玉芬

摘 要 《可编程控制器》课程作为电气自动化专业的一门实用性与实践性很强的专业课,加强其实践教学对培养学生的职业技术能力起着重要的作用。本文在说明了实践教学改革的必要性基础上,分析了我校该课程实践教学存在的主要问题。在遵循层次性、综合性、先进性的原则前提下,从教学思想、教学内容、教学的方法手段、评价方法等多个方面提出了改革的措施和具体做法。实践证明,改革后的实践教学较好地培养了学生职业能力和创新精神,收到了预期的教学效果。

关键词 课程改革 实践教学 能力 创新

高等职业教育培养的是能适应生产、建设、管理、服务第一线需要的,德、智、体、美等方面全面发展的高等技术应用性专门人才。而其中实践教学的主要目的是培养学生的技术应用能力。按照全面推进素质教育的指导思想,根据高等职业教育的培养目标,建立具有高职特色的实践教学的课程目标、课程模式和评价方式是培养学生综合职业素质的关键。《可编程控制器》是电气自动化专业的一门实用性与实践性很强的专业课,因而加强该课程的建设,特别是加强该课程实践教学的改革对培养学生的专业技术应用能力起着重要的作用。

一、《可编程控制器》课程实践教学改革的必要性

传统的职业教育以使学生掌握经验技术和动作技能为目标,以迅速适应工作岗位的要求。但在知识经济时代,由于生产方式的根本变化,人们的.职业能力构成也必将有大的改变,社会需要更高层次的人才。这就要求我们培养的高等应用型人才,不只是对现有知识、技术、方法的继承性应用,而是应通过自身努力能够不断地学习新知识、新技术、新方法,能够形成新方案、新产品、新创意,能够分析新情况、解决新问题的创造性应用。因而我们课程实践教学的改革应以培养的学生具有一定创新能力和创新精神、有着良好的发展潜力为主旨,以行业科技和社会发展的先进水平为标准,充分体现规范性、先进性和实效性。

在《可编程控制器》课程的实验和课程设计等实践教学中存在下面几个问题:

1.教学主体的认识问题

在传统实践教学中,教师是“带”实验而不是“指导实验”,即实践教师是传授知识和技能的主体,而学生则被动地接受知识和技能。这种教学多采用注入式,教师根据教学计划和教学要求拟定内容,其实践内容的选择、步骤的制定和仪器设备的组织准备等都由教师进行。实践时学生只需按规定的步骤机械地操作即可。且在执行过程中,完全听从教师安排,全班统一进度和要求,不利于因材施教。

2.教学内容存在的问题

原来的课程实验和课程设计内容有重复,而且,从高等职业教育的要求来看,原有的实践教学内容显得单调、过于偏向技能性的训练,而缺少设计性、创新性。

3.教学方法、手段的问题

因内容过分偏重于基础训练,所以在方法和手段上很单调,主要以“模仿”为主。通过教师详细讲解、操作示范,学生不需主动思维和创新,只需“依样画葫芦”。通过反复训练学生硬件接线、调试程序,熟能生巧,形成一定的基本技能。

二、《可编程控制器》课程实践教学改革的措施和方法

根据高职高专培养的目标,我们在进行《可编程控制器》课程的实践教学改革时,主要基于这样几个原则:一是应由技能性向技术性发展。即由原来的偏向基本技能的训练,如工具仪表的使用、电器元件的认识和使用、基本控制线路的连接和PLC程序的调试等。向培养专业技术能力方向发展,通过系统的训练,使学生具备一定的专业技术。二是应由单一性向综合性发展。如要求学生能综合运用电工技术、电气控制、PLC控制、计算机等知识解决相关问题。三是应进一步加强方法、手段的先进性应充分利用计算机和网络等先进的教学手段和设备,借助各种软件,培养学生的计算机软硬件应用能力。四是应进一步培养学生的创新精神。学生在教师的指导下,可一定程度的自由选题、制定方案、选择仪器设备、安装调试,锻炼学生的能力。

在上述原则指导下,我们对该课程实践教学的改革主要包括如下几个方面:

1.教学思想的改革是前提

建立以学生为主体,教师为主导的教学思想。在高等职业教育中,学生始终处于主体位置,而实践教师则处于为实践教学服务的主导位置。主体是实践教学的中心,主导必须围绕这个中心做好工作。作为实践教学主体的学生,必须在继承传统知识和技术的基础上,重点进行知识和技术的应用和创新。作为主导的实践教师,必须在其搞好实践教学的引导工作的同时,加强自身知识和技能的扩展和更新,达到知识丰富,技术熟练和教学方法科学而实用的要求。

2.教学内容、方法手段的改革是关键

课程的实验和设计在内容上要统一规划,相互补充,形成一个有机的整体。该课程的实践教学体系中,主要以培养有创新精神的专业技术能力为主。因而,我们在规划该课程的实践教学内容时,将其分成基本模块和创新模块两部分。其中基本模块用于训练基本操作技能,形成基本实践能力;创新模块主要根据素质教育的要求,针对不同学生而设,需从选题开始,经构建框架、设计、计算机模拟、购买元器件到制作调试完成等,以培养学生一定的创新精神和创新能力。

1)课程实验教学主要针对基本模块部分。通过电器元件的认识实验、电动机的正反转控制、交通信号灯的控制、移位寄存器的应用等实验内容的训练,形成基本的实践操作能力,并为中级电工的实践考核作好准备。

2)课程设计教学则主要针对创新模块部分。结合我院现有设备,分步骤进行:a、拟定部分开放性的设计课题,教师提出原则性的要求,学生根据自己的情况和兴趣,在教师指导下拟出其设计计划,经教师批准后,进行初步设计。b、将设计后的方案在计算机相关软件上进行设计验证,并进行模拟,观察设计效果,并对方案进行修订。c、根据方案进行硬件连接、软件调试。d、教师根据初始要求验收、答辩e、撰写设计报告。

在方法手段上,首先应增强课程实验的开放性。但该课程以强电实验为主,实验安全要求较高,为了确保学生的安全,教师一定要加强指导。同时,为提高实践教学的先进性,利用计算机和网络,在教师指导下,可自主的设计课程、完成课题,达到培养学生创新能力的目的。

3.评价体系的改革是指挥棒

由于高职高专与其它的教育形式有显著的不同,因此转变观念,转变教学评价观念,从注重对理论教学的监控评价转向对理论与实践结合的监控评价,突出实践教学的地位,是形成高职高专教育特色的重要措施之一。

该课程的整体评价不仅仅是理论考核,还应包括课程实验和课程设计的考核。对于实验部分考核方式宜逐个或分组进行,采取抽签的形式。我们还为学生设计了实验考核情况记录表,对每个学生的情况进行记录,这是一个行之有效的方法。

而对设计部分的考核首先应注重量化,注重过程考核、创新能力考核,宜采用百分制。其中操作能力和解决问题的能力应占60%,出勤、课堂表现应占20%,设计创新应占20%。在过程考核中,应按专业的标准进行考核,如输入程序、读出程序及修改程序是否熟练,运行调试是否正常,故障分析与排除方法是否准确。实践证明,这样更加有利于提高学生的竞争意识和创新意识,使学生真正成为具有新技术应用能力的人才。

经过上述多方面的努力和探索,《可编程控制器》实践教学有了很大改进。在内容的安排上有了一定的层次性;同时为适应现代经济的发展要求,结合现代教学手段,提高了它的先进性,注重了创新性。这样,既培养了学生,又锻炼了教师,收到了很好的教学效果。

【参考文献】

[1]王兆义,可编程控制器教程 [M],机械工业出版社,2000•10

上一篇:广东中考政治真题下一篇:《汉书·疏广传》阅读理解附答案