文档库 最新最全的文档下载
当前位置:文档库 › Ping程序设计(c语言课程设计)

Ping程序设计(c语言课程设计)

Ping程序设计(c语言课程设计)
Ping程序设计(c语言课程设计)

07网络工程本

制作人:北-624寝室

负责人:赖文斌

第四篇网络编程

第九章ping程序设计

ping命令是使用频率极高的一个网络测试命令,用以测试从一个主机到另一个主机间的网络上否可达。windows自带的ping命令具有强大的功能,它有很多选项用于实现不同的测试目的。本章模仿windows的ping命令,用c语言实现了一个简单的命令。本章着重讲述ping命令的实现原理和c语言的网络编程方法。读者可以在本章的基础上,对本章实现的ping命令进行扩展,开发出功能更强大、更完善的ping命令,并进一步掌握网络编程的方法。

9.1 设计目的

本章通过设计Ping程序,讲解Ping程序的实现原理,并初步讲解了c语言网络编程技术。本章涉及很多网络编程函数和编程技巧。包括库文件的导入;winsock的初始化、注销;socket 的创建、关闭;设置socket选项;根据主机名获取IP地址;从堆中分配一定数量的空间、释放从堆中分配的空间;获取当前进程ID号;数据报的发送;数据报的接等。

通过本程序的训练,使读者对网络编程有一定的了解,掌握Ping程序的设计方法,掌握网络编程的方法和技巧,从而编写出功能更强大的程序。

9.2功能描述

本章用 c 语言实现的ping命令,能用于测试一个主机到另一个主机间的联通情况,程序还提供了几个选项以实现不同的功能。

(1)实现ping功能。程序能实现基本的ping操作,发送ICMP回显请求报文,接收显应答报文。

(2)能记录路由。程序提供了“-r”选项,用以记录从源主机到目的主机的路由。

(3)能输出指定条数的记录。程序提供了“-n”选项,用以输出指定条数的记录。

(4)能按照指定大小输出每条记录。程序提供了“datasize”选项,用以指定输出的数据报的大小。

(5)能输出用户帮助。程序提供了用户帮助,显示程序提供的选项以及选项格式等。

9.3 总体设计

9.3.1 功能模块设计

1. 功能模块图

本系统共有 4 个模块,分别是初始化模块、功能控制模块、数据控制模块、数据报解读模块和ping测试模块,如图9.1所示。各模块功能描述如下。

图9.1 系统模块图

(1) 初始化模块。改模块用于初始化各个全局变量,为全局变量赋初始值;初始化,加载库。

(2)功能控制模块。改模块是被其它模块调用,其功能包括获取参数、计算校验和填充数据报文、释放占用资源和显示用户帮助。

(3)数据报解读模块。改模块用于解读接收到的报文和选项。

(4)测试模块。改模块是本程序的核心模块,调用其他模块实现其功能,主要是实现的功能。

2.系统流程图

系统执行的流程图9.2所示。程序首先调用IniPing()函数初始化各全局变量,然后GetArgments()函数获取用户输入的参数,检查用户输入的参数,如果参数不正确或者没有输入参数,则显示用户帮助信息(User help ),并结束程序;如果参数正确,则对指定目的地执行Ping命令,如果Ping通,则显示Ping结果并释放占用资源,如果没有Ping通,则报告错误信息,并释放占用资源。

图9.2 系统流程图

3.参数获取(GetArgments()函数)流程图

获取的参数包括“-r”(记录路由)、“-n”(记录条数程序,任意的整数)和datasize(数据报大小)。程序首先判断每一个参数的第一字符,如果第一个字符是“-”(短横线),则认为是“-r”或者“-n”中的一个,然后作进一步判断。如果该参数的第二个字符是数字,则判断该参数为记录的条数,如果该参数的第二个字符是“r”,则判断该参数为“-r”,用于

记录路由;如果参数的第一个字符是数字,则认为参数是IP地址;或者datasize,然后作进一步的判断。如果该参数中不存在非数字的字符,则判断该参数为datasize;如果存在非数字的字符,则判断该参数为IP地址;其他情况则判断为主机名。参数获取的流程如图9.3所示。

图9.3 参数获取流程图

4.ping()函数流程图

ping()函数是本程序的核心部分它调用其他模块的函数来实现,其主要步骤包括创建接字,设置路由选项(如果需要的话)、设置接收和发送超时值、名字解析(如果需要的话)、分配内存、创建ICMP报文、发送ICMP请求报文、接收ICMP应答报文和解读ICMP报文。其执行流程如图9.4所示。

图9.4 Ping 函数流程图

9.3.2数据结构设计

本程序定义了3个结构体:-iphdr、-icmphdr、和-ipotionhdr,分别用于存放IP报头信息、ICM P报头信息和IP路由选项信息。

1.定义IP报头结构体

Typedef struct _iphdr

{

Unsigned int h_len:4;

Unsigned int version:4;

Unsigned char tos;

Unsigned short total_len;

Unsigned short ident;

Unsigned short frag_flags;

Unsigned char ttl;

Unsigned chor proto;

Unsigned short checksum;

Unsigned int sourceIP;

Unsigned int destIP;

} IpHeader;

h-len:4 : 表示IP报头长度,首部长度指的是首部占32bit字的数目,包括任何选项。

由于它是一个4bit 字段,因此首部最长为60个字节,不包括任何选项的

IP报头是20个字节。

Version:4: 表示IP的版本号,这里表示Ipv4.。

Top: 表示服务的类型,可以表示最小时延,最大吞吐量,最高可靠性和最小费用。

Total –len: 整个IP数据报的总长度。

Ident: 唯一的标识符,标识主机发送的每一份数据报。

Frag-flags: 分段标志,表示过长的数据报是否要分段。

Ttl: 生存期,表示数据报可以经过的最多路由器数。

Proto: 协议类型(TCP、UDP等)。

Checksum: 校验和。

sourceIP: 源IP地址。

destIP: 目的IP地址。

2.定义ICMP报头结构体

Typedef struct –icmphdr

{

BYTE i_type;

BYTE i_code :

USHORT i_cksum;

USHORT i_id;

USHORT i_seq;

ULONG timestamp;

} IcmpHeader;

其中各字段表示意义如下。

I_tye : ICMP报文类型。

I_code : 该类型中的代码号,一种ICMP 报文的类型号和该类型中的代码号共同决定。、

I_cksum: 校验和。

I_seq: 序列号,序列号从0开始,每发送一次新的回显请求就加1. Timestamp: 时间。

3.定义IP 选项结构体

Typedef struct _ipoptionhdr

{

Unsigned char code;

Unsigned char len;

Unsigned char ptr;

Unsigned loang addr[9];

} IcmpHeader;

Code: 指明IP 选项类型,对于路由记录选项,它的值是7。

Len: 选项头长度。

Ptr: 地址指针字段,是一个基于1的指针,指向存放下一个IP地址的位置。addr[9]: 记录的Ip地址列表,由于IP首部中选项的空间有限,所以可以记录的Ip地址最多是9个。

9.33函数功能描述

1)IntPing()

函数原型:void IntPing()

IntPing()函数用于初始化ping 所需的全局变量,为各个变量赋初始值。

2)userHelp()

函数原型:void userHelp()

userHelp()函数用于显示用户帮助信息。当程序检查到参数错误或者没有必要的参数(如主机IP地址或者主机名)时,则会调用此函数显示帮助信息。

3) GetArgments()

函数原型:void GetArgments(int argc, char**argv)

GetArgments()函数用于获取用户提交的参数。其中argc 表示获取的参数个数,argv 用于存储获取的参数,这两个形参和主函数中的形参表示的意义一样的。

4)checkSum()

函数原型:USHORT checkSum(USHORT *buffer,int size)

checkSum()函数用于计算校验和。计算过程是首先把数据报头中的校验和字段设置

为0,然后对首部中每个16bit 进行二字段进制反码求和(整个首部看成是由一串16bit 的字组成),结果存在校验和字段中。

其中buffer 用于存放ICMP数据,size表示ICMP报文大小。

5)FillCMPData()

函数原型:void FillCMPData()

FillCMPData()函数用于填充ICMP数据报中各个字段。其中icmp_data 表示ICMP数据,datasize 表示ICMP报文大小。

6) reeRes()

函数原型:void reeRes()

reeRes()函数用于释放占用的资源,包括关闭初始化socket 调用的函数的、关闭创建的socket和释放分配的内存等。

7)DecodeIPOptions()

函数原型:void DecodeIPOptions()

DecodeIPOptions()函数用于解读IP选项,从中读出从源主机到目的主机经过的路由,并输出路由信息。Buf表示存放接收到的ICMP报文的缓冲区,bytes表示接收到的字节数。

8)DecodelICMPHeader()

函数原型:void DecodelICMPHeader(char*buf,int bytes,SOCKADDR_IN*from) DecodelICMPHeader()函数用于解读ICMP报文信息。Buf表示存放接收到的ICMP报文的缓冲区,bytes表示接收到的字节数,from 表示发送ICMP回显应答的主机IP地址。

9)PingTest()

函数原型:void PingTest(int timeout)

PingTest()函数用于进行Ping操作。其中timeout表示设定的发送超时值。

9.4程序实现

9.1.4 源码分析

1. 程序预处理

/*导入库文件*/

#pragma comment( lib, "ws2_32.lib" )

/*加载头文件*/

#include

#include

#include

#include

#include

/*定义常量*/

/*表示要记录路由*/

#define IP_RECORD_ROUTE 0x7

/*默认数据报大小*/

#define DEF_PACKET_SIZE 32

/*最大的ICMP数据报大小*/

#define MAX_PACKET 1024

/*最大IP头长度*/

#define MAX_IP_HDR_SIZE 60

/*ICMP报文类型,回显请求*/

#define ICMP_ECHO 8

/*ICMP报文类型,回显应答*/

#define ICMP_ECHOREPLY 0

/*最小的ICMP数据报大小*/

#define ICMP_MIN 8

/*自定义函数原型*/

void InitPing();

void UserHelp();

void GetArgments(int argc, char** argv);

USHORT CheckSum(USHORT *buffer, int size);

void FillICMPData(char *icmp_data, int datasize);

void FreeRes();

void DecodeIPOptions(char *buf, int bytes);

void DecodeICMPHeader(char *buf, int bytes, SOCKADDR_IN* from); void PingTest(int timeout);

/*IP报头字段数据结构*/

typedef struct _iphdr

{

unsigned int h_len:4; /*IP报头长度*/

unsigned int version:4; /*IP的版本号*/

unsigned char tos; /*服务的类型*/

unsigned short total_len; /*数据报总长度*/

unsigned short ident; /*惟一的标识符*/

unsigned short frag_flags; /*分段标志*/

unsigned char ttl; /*生存期*/

unsigned char proto; /*协议类型(TCP、UDP等)*/

unsigned short checksum; /*校验和*/

unsigned int sourceIP; /*源IP地址*/

unsigned int destIP; /*目的IP地址*/

} IpHeader;

/*ICMP报头字段数据结构*/

typedef struct _icmphdr

{

BYTE i_type; /*ICMP报文类型*/

BYTE i_code; /*该类型中的代码号*/

USHORT i_cksum; /*校验和*/

USHORT i_id; /*惟一的标识符*/

USHORT i_seq; /*序列号*/

ULONG timestamp; /*时间戳*/

} IcmpHeader;

/*IP选项头字段数据结构*/

typedef struct _ipoptionhdr

{

unsigned char code; /*选项类型*/

unsigned char len; /*选项头长度*/

unsigned char ptr; /*地址偏移长度*/

unsigned long addr[9]; /*记录的IP地址列表*/ } IpOptionHeader;

/*定义全局变量*/

SOCKET m_socket;

IpOptionHeader IpOption;

SOCKADDR_IN DestAddr;

SOCKADDR_IN SourceAddr;

char *icmp_data;

char *recvbuf;

USHORT seq_no ;

char *lpdest;

int datasize;

BOOL RecordFlag;

double PacketNum;

BOOL SucessFlag;

2.初始化模块

/*初始化变量函数*/

void InitPing()

{

WSADATA wsaData;

icmp_data = NULL;

seq_no = 0;

recvbuf = NULL;

RecordFlag = FALSE;

lpdest = NULL;

datasize = DEF_PACKET_SIZE;

PacketNum = 5;

SucessFlag = FALSE;

/*Winsock初始化*/

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)

{

/*如果初始化不成功则报错,GetLastError()返回发生的错误信息*/

printf("WSAStartup() failed: %d\n", GetLastError());

return ;

}

m_socket = INV ALID_SOCKET;

}

3.功能控制模块

/*显示信息函数*/

void UserHelp()

{

printf("UserHelp: ping -r [data size]\n");

printf(" -r record route\n");

printf(" -n record amount\n");

printf(" host remote machine to ping\n");

printf(" datasize can be up to 1KB\n");

ExitProcess(-1);

}

/*获取ping选项函数*/

void GetArgments(int argc,char** argv)

{

int i;

int j;

int exp;

int len;

int m;

/*如果没有指定目的地地址和任何选项*/

if(argc == 1)

{

printf("\nPlease specify the destination IP address and the ping option as follow!\n");

UserHelp();

}

for(i = 1; i < argc; i++)

{

if (argv[i][0] == '-')

{

/*选项指示要获取记录的条数*/

if(isdigit(argv[i][1]))

{

PacketNum = 0;

for(j=len-1,exp=0;j>=1;j--,exp++)

/*根据argv[i][j]中的ASCII值计算要获取的记录条数(十进制数)*/

PacketNum += ((double)(argv[i][j]-48))*pow(10,exp);

}

else

{

switch (tolower(argv[i][1]))

{

/*选项指示要获取路由信息*/

case 'r':

RecordFlag = TRUE;

break;

/*没有按要求提供选项*/

default:

UserHelp();

break;

}

}

}

/*参数是数据报大小或者IP地址*/

else if (isdigit(argv[i][0]))

{

for(m=1;m

{

if(!(isdigit(argv[i][m])))

{

/*是IP地址*/

lpdest = argv[i];

break;

}

/*是数据报大小*/

else if(m==len-1)

datasize = atoi(argv[i]);

}

}

/*参数是主机名*/

else

}

}

/*求校验和函数*/

USHORT CheckSum(USHORT *buffer, int size)

{

unsigned long cksum=0;

while (size > 1)

{

cksum += *buffer++;

size -= sizeof(USHORT);

}

if (size)

{

cksum += *(UCHAR*)buffer;

}

/*对每个16bit进行二进制反码求和*/

cksum = (cksum >> 16) + (cksum & 0xffff);

cksum += (cksum >>16);

return (USHORT)(~cksum);

}

/*填充ICMP数据报字段函数*/

void FillICMPData(char *icmp_data, int datasize)

{

IcmpHeader *icmp_hdr = NULL;

char *datapart = NULL;

icmp_hdr = (IcmpHeader*)icmp_data;

/*ICMP报文类型设置为回显请求*/

icmp_hdr->i_type = ICMP_ECHO;

icmp_hdr->i_code = 0;

/*获取当前进程IP作为标识符*/

icmp_hdr->i_id = (USHORT)GetCurrentProcessId();

icmp_hdr->i_cksum = 0;

icmp_hdr->i_seq = 0;

datapart = icmp_data + sizeof(IcmpHeader);

/*以数字0填充剩余空间*/

memset(datapart,'0',datasize-sizeof(IcmpHeader)); }

/*释放资源函数*/

void FreeRes()

{

/*关闭创建的套接字*/

if (m_socket != INV ALID_SOCKET)

closesocket(m_socket);

/*释放分配的内存*/

HeapFree(GetProcessHeap(), 0, recvbuf);

HeapFree(GetProcessHeap(), 0, icmp_data);

/*注销WSAStartup()调用*/

WSACleanup();

return ;

}

4.数据报解读模块

/*解读IP选项头函数*/

void DecodeIPOptions(char *buf, int bytes)

{

IpOptionHeader *ipopt = NULL;

IN_ADDR inaddr;

int i;

HOSTENT *host = NULL;

/*获取路由信息的地址入口*/

ipopt = (IpOptionHeader *)(buf + 20);

printf("RR: ");

for(i = 0; i < (ipopt->ptr / 4) - 1; i++)

{

inaddr.S_un.S_addr = ipopt->addr[i];

if (i != 0)

printf(" ");

/*根据IP地址获取主机名*/

host = gethostbyaddr((char *)&inaddr.S_un.S_addr,sizeof(inaddr.S_un.S_addr), AF_INET);

/*如果获取到了主机名,则输出主机名*/

if (host)

printf("(%-15s) %s\n", inet_ntoa(inaddr), host->h_name);

/*否则输出IP地址*/

else

printf("(%-15s)\n", inet_ntoa(inaddr));

}

return;

}

/*解读ICMP报头函数*/

void DecodeICMPHeader(char *buf, int bytes, SOCKADDR_IN *from)

{

IpHeader *iphdr = NULL;

IcmpHeader *icmphdr = NULL;

unsigned short iphdrlen;

DWORD tick;

static int icmpcount = 0;

iphdr = (IpHeader *)buf;

/*计算IP报头的长度*/

iphdrlen = iphdr->h_len * 4;

tick = GetTickCount();

/*如果IP报头的长度为最大长度(基本长度是20字节),则认为有IP选项,需要解读IP选项*/

if ((iphdrlen == MAX_IP_HDR_SIZE) && (!icmpcount))

/*解读IP选项,即路由信息*/

DecodeIPOptions(buf, bytes);

/*如果读取的数据太小*/

if (bytes < iphdrlen + ICMP_MIN)

{

printf("Too few bytes from %s\n",

inet_ntoa(from->sin_addr));

}

icmphdr = (IcmpHeader*)(buf + iphdrlen);

/*如果收到的不是回显应答报文则报错*/

if (icmphdr->i_type != ICMP_ECHOREPLY)

{

printf("nonecho type %d recvd\n", icmphdr->i_type);

return;

}

/*核实收到的ID号和发送的是否一致*/

if (icmphdr->i_id != (USHORT)GetCurrentProcessId())

{

printf("someone else's packet!\n");

return ;

}

SucessFlag = TRUE;

/*输出记录信息*/

printf("%d bytes from %s:", bytes, inet_ntoa(from->sin_addr));

printf(" icmp_seq = %d. ", icmphdr->i_seq);

printf(" time: %d ms", tick - icmphdr->timestamp);

printf("\n");

icmpcount++;

return;

}

5.Ping 测试模块

/*ping函数*/

void PingTest(int timeout)

{

int ret;

int readNum;

int fromlen;

struct hostent *hp = NULL;

/*创建原始套接字,该套接字用于ICMP协议*/

m_socket = WSASocket(AF_INET, SOCK_RA W, IPPROTO_ICMP, NULL, 0,WSA_FLAG_OVERLAPPED);

/*如果套接字创建不成功*/

if (m_socket == INV ALID_SOCKET)

{

printf("WSASocket() failed: %d\n", WSAGetLastError());

return ;

}

/*若要求记录路由选项*/

if (RecordFlag)

{

/*IP选项每个字段用0初始化*/

ZeroMemory(&IpOption, sizeof(IpOption));

/*为每个ICMP包设置路由选项*/

IpOption.code = IP_RECORD_ROUTE;

IpOption.ptr = 4;

IpOption.len = 39;

ret = setsockopt(m_socket, IPPROTO_IP, IP_OPTIONS,(char *)&IpOption, sizeof(IpOption));

if (ret == SOCKET_ERROR)

{

printf("setsockopt(IP_OPTIONS) failed: %d\n",WSAGetLastError());

}

}

/*设置接收的超时值*/

readNum = setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO,(char*)&timeout, sizeof(timeout));

if(readNum == SOCKET_ERROR)

{

printf("setsockopt(SO_RCVTIMEO) failed: %d\n",WSAGetLastError());

return ;

}

/*设置发送的超时值*/

timeout = 1000;

readNum = setsockopt(m_socket, SOL_SOCKET, SO_SNDTIMEO,(char*)&timeout, sizeof(timeout));

if (readNum == SOCKET_ERROR)

{

printf("setsockopt(SO_SNDTIMEO) failed: %d\n",WSAGetLastError());

return ;

}

/*用0初始化目的地地址*/

memset(&DestAddr, 0, sizeof(DestAddr));

/*设置地址族,这里表示使用IP地址族*/

DestAddr.sin_family = AF_INET;

if ((DestAddr.sin_addr.s_addr = inet_addr(lpdest)) == INADDR_NONE)

{

/*名字解析,根据主机名获取IP地址*/

if ((hp = gethostbyname(lpdest)) != NULL)

{

/*将获取到的IP值赋给目的地地址中的相应字段*/

memcpy(&(DestAddr.sin_addr), hp->h_addr, hp->h_length);

/*将获取到的地址族值赋给目的地地址中的相应字段*/

DestAddr.sin_family = hp->h_addrtype;

printf("DestAddr.sin_addr = %s\n", inet_ntoa(DestAddr.sin_addr));

}

/*获取不成功*/

else

{

printf("gethostbyname() failed: %d\n",WSAGetLastError());

return ;

}

}

/*数据报文大小需要包含ICMP报头*/

datasize += sizeof(IcmpHeader);

/*根据默认堆句柄,从堆中分配MAX_PACKET内存块,新分配内存的内容将被初始化为0*/

icmp_data =(char*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,MAX_PACKET);

recvbuf =(char*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,MAX_PACKET);

/*如果分配内存不成功*/

if (!icmp_data)

{

printf("HeapAlloc() failed: %d\n", GetLastError());

return ;

}

/* 创建ICMP报文*/

memset(icmp_data,0,MAX_PACKET);

FillICMPData(icmp_data,datasize);

while(1)

{

static int nCount = 0;

int writeNum;

/*超过指定的记录条数则退出*/

if (nCount++ == PacketNum)

break;

/*计算校验和前要把校验和字段设置为0*/

((IcmpHeader*)icmp_data)->i_cksum = 0;

/*获取操作系统启动到现在所经过的毫秒数,设置时间戳*/

((IcmpHeader*)icmp_data)->timestamp = GetTickCount();

/*设置序列号*/

((IcmpHeader*)icmp_data)->i_seq = seq_no++;

/*计算校验和*/

((IcmpHeader*)icmp_data)->i_cksum = CheckSum((USHORT*)icmp_data,

课程设计心得体会5篇【精选】

最近发表了一篇名为《课程设计心得体会5篇》的,觉得应该跟大家分享,为了方便大家的阅读。 课程设计是一个有目的、有计划、有结构的产生课程计划、课程标准以及教材等系统化活动。以下是课程设计心得体会,欢迎大家阅读! 历时三个星期的课程设计终于在今天完成了。这次课程设计让我学到了很多东西,首先对自己所做的系统进行了一系列的分析和论证。在得出了此系统完全可运行的基础上,再次进行了各种可行性分析,最终确定了这套公司考勤管理系统。 在开始做的阶段,首先运用软件工程所学的东西,画出了系统流程图,物理流程图,E —R图等。这为我后来的系统提供了很大的帮助。在做系统的时候我选择了在大二时学过的VB,这是面向对象的程序设计方法。经过一段时间的努力之后,终于做出了这套系统。 在主体框架完成的情况下,依据老师的要求,将上述所做东西以报告的形式做成文档。 回想自己所经过的日子,有欢笑有泪水,引用一句歌词“阳光总在风雨后”。成功之后的喜悦是无法用语言来形容的。虽然在此前被老师无情的退了回来,但老师的良苦用心总是很容易被网我们这些做学子的理解。究其原因主要是自己不认真,对这一课程设计没有整体的认识,总是存在侥幸心理能混过去就混过去,现在我认识到了这不是一个人应该有的想法。由小见大,在离开学校走像社会的时候,做任何事情都不能马马虎虎。 通过这次课程设计让我认识到自己的不足,让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。 以前从没有学过关于汇编语言的知识,起初学起来感觉很有难度。当知道要做课程设计的时候心里面感觉有些害怕和担心,担心自己不会或者做不好。但是当真的要做的时候也只好进自己作大的努力去做,做到自己最好的。 我们在这个过程中有很多自己的感受,我想很多同学都会和我有一样的感受,那就是感觉汇编语言真的是很神奇,很有意思。我们从开始的担心和害怕渐渐变成了享受,享受着汇编带给我们的快乐。看着自己做出来的东西,心里面的感觉真的很好。虽然我们做的东西都还很简单,但是毕竟是我们自己亲手,呵呵,应该是自己亲闹做出来的。很有成就感。 我想微机原理课程设计和其他课程设计有共同的地方,那就是不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。但是我想他也有它的独特指出,那就是让我们进入一个神奇的世界,那就是编程。对于很多学过汇编或者其他的类似程序的同学来说,这不算新奇,但是对于我来说真的新奇,很有趣,也是我有更多的兴趣学习微机原理和其他的汇编。 微机原理与接口技术是一门很有趣的课程,手机版任何一个计算机系统都是一个复杂的整体,学习计算机原理是要整体的每一部分。讨论某一部分原理时又要其它部分的工作原理。这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

C语言程序设计课程设计题目

1一元稀疏多项式的运算 问题描述:设有两个带头指针的单链表表示两个一元稀疏多项式A、B,实现两个一元稀疏多项式的处理。 实现要求: ⑴输入并建立多项式; ⑵输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……c n,e n,其中n 是多项式的项数,c i,e i分别为第i项的系数和指数。序列按指数降序排列; ⑶多项式A和B相加,建立多项式A+B,输出相加的多项式; ⑷多项式A和B相减,建立多项式A-B,输出相减的多项式; ⑸多项式A和B相乘,建立多项式A×B,输出相乘的多项式; ⑹设计一个菜单,至少具有上述操作要求的基本功能。 测试数据: (1) (2x+5x8-3.1x11)+(7-5x8+11x9) (2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15) (3)(x+x2+x3)+0 (4)(x+x3)-(-x-x-3) 2成绩排序 假设某年级有4个班,每班有45名同学。本学期有5门课程考试,每门课程成绩是百分制。假定每个同学的成绩记录包含:学号、姓名各门课程的成绩共7项,其中学号是一个10位的字符串,每个学生都有唯一的学号,并且这4个班的成绩分别放在4个数组中,完成以下操作要求: ⑴编写一个成绩生成函数,使用随机数方法,利用随机函数生成学生的各门课程的成绩(每门课程的成绩都是0∽100之间的整数),通过调用该函数生成全部学生的成绩; ⑵编写一个平均成绩计算函数,计算每个同学的平均成绩并保存在成绩数组中; ⑶用冒泡排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进

行班内排序; ⑷用选择排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进行班内排序; ⑸对已按平均成绩排好序的4个班的同学的构造一个所有按平均成绩的以非递增方式排列的新的单链表; ⑹设计一个菜单,至少具有上述操作要求的基本功能。 3迷宫问题 问题描述:以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 实现要求: ⑴实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。 ⑵编写递归形式的算法,求得迷宫中所有可能的通路; ⑶以方阵形式输出迷宫及其通路。 [测试数据] 迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。 1 2 3 4 5 6 7 8 实现提示:

语言教学课程设计原理》第六章翻译

6.语言教师与语言学家 在前面的章节里中,我大概叙述了一个关于语言教师职责的方法,有助于语言教学法的学科最近的变化启发了这一方法。在这一节中,我将探索一个更深的语言学和课堂实践以及语言学家、教师、学习者之间的关系的领域。我也将简单地讨论一个标准,这个标准可能会帮助老师去做一个关于用若干当代的方法去进行课程设计和课堂教学的决定。 一方面构成第二语言教育学基础的学科之间的相互影响,另一方面在任意特定的教学情景中发生的事,构成一了个迅速发展的研究领域。当然,这个基本学科是理论语言学、描写语言学、心理语言学和社会语言学。当第二语言教学在学校背景进行时,教育学理论也会明显地考虑在内。这些学科以不同的方式比例与课堂教学相互作用,取决于对语言的性质、语言的教与学的认识。 语言学家占主导 20世纪40年代到60年代,基本学科和课堂实践的相互作用倾向于产生不同的第二语言学教学方法。在发展方法时,运用到课堂时间中的理论被认为是从描写语言学到教学的技巧转换的过程,这就导致了从语言学家到老师的一个关系,这种关系让人联系起家族谱系树。我们以听说教学法为例。 在这个特定的家族中,像Leonard Bloomfield和Charles Fries这样的语言学家扮演了祖父的角色。他们的著作被第二代应用语言学家转变为教学材料:英语模式训练(Lado和Fries,1958)是这个过程中的一个明显的例子,拉多英语系列(Lado1970)和现代西班牙语(Bolinger, Ciruti和Montero 1966)。在这期间,老师通过出版课程、语言实验材料的巨大影响以及正式的项目训练得到训练。这一点也不新鲜。然而,应该提一下的是,在我描述的时候,课堂教师需要训练和材料,把这些材料更好更直接地运用到课堂互动中去。一个生成第二语言项目的完善的模式产生了。在这个模式中,教师是第三代语言学家—或是隔三代语言学家—忠实地执行这些聪慧的前辈传下来的技巧。 第二语言教学方法论的观点源于语言学理论,坚持应用语言学的许多模式。其中最著名的一个模式是Corder模式(1973:156),虽然它也包括来自于社会

汇编语言课程设计

沈阳大学

2.3 MASM的介绍 MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm是Windows下开发汇编的利器。它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发,历经二三十年的发展,目前MASM的版本已升至6.15,支持MMX Pentium、Pentium II、Pentium III及Pentium 4等指令系统。 2.4总体设计功能 本次课程设计的内容是采用汇编语言设计一个运行于计算机的“霓虹灯”的模拟显示 程序,由$及*字符相间,从两侧向中间螺旋汇聚直至形成一个矩形,这就要求该霓虹灯能够动态地进行变化;霓虹灯模拟显示程序主要是进行程序循环调用,可以通过CMP、JMP、JZ、RET等命令进行跳转。由于是霓虹灯的模拟显示,因此在进行程序循环调用前需要进行数据段定义,以使子程序在进行调用时能够根据数据段的定义来执行,最后显示结果。 定时器中断处理程序:计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。 视频显示程序设计:一般由DOS 或BIOS调用来完成。有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。用INT 10H中断即可建立某种显示方式。用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用。 键盘扫描程序设计:利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器,以及检测键盘状态,有无输入,并检测输入各值。 2.5详细功能设计 2.5.1主程序功能 主程序通过调用各个子程序来实现清屏,改变图形等功能,具体调用过程如图1所示。 沈阳大学

《C语言程序设计》课程设计报告

《C语言程序设计》课程设计报告 (2013— 2014学年第 3 学期) 题目:C语言课程设计 专业:软件工程 班级:软件工程技术2班 姓名学号: 1 林燕萍 指导教师:吴芸 成绩: 计算机科学与技术系 2014 年6月23日

目录 一、课程设计的目的与要求 (1) 二、方案实现与调试 (3) 2.1 掷骰子游戏 (5) 2.2 射击游戏 (7) 2.3 计算存款本息之和 (8) 2.4肇事逃逸 (10) 2.5 礼炮 (12) 2.6 汽车加油 (14) 2.7 大优惠 (16) 2.8 金币 (19) 三、课程设计分析与总结 (23) 附录程序清单 (25) 一、课程设计的目的与要求(含设计指标) C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了基知识,如概念,方法和语法规则之外更重要的是进行实训,以提高学习者的动手和编程能力,从应试课程转变为实践工具。 这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的: 1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能; 2.让学生扎实掌握C程序设计语言的相关知识; 3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。 编写程序要求遵循如下基本要求: ①模块化程序设计 ②锯齿型书写格式

③必须上机调试通过 二、方案实现与调试 2.1掷骰子游戏 2.1.1 题目内容的描述 1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。 2) 将每人每次的分值累加计分 3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。 4) 结束条件:当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。最后显示双方分数并判定优胜者。 2.1.2输入数据类型、格式和内容限制和输出数据的说明 数据类型:整型;内容限制:随机数的产生;输入数据结果:胜利的一方 2.1.3主要模块的算法描述 本算法的思路过程:首先要随机产生随机数,然后进行算法输出数值,执行条件判断输入结果,最后比较结果,判断胜利的一方。 程序流程图 图1 掷骰子游戏 2.1.4调试过程及实验结果

C语言程序设计课程设计报告

C语言程序设计课程设 计报告 内部编号:(YUUT-TBBY-MMUT-URRUY-UOOY-DBUYI-0128)

《C语言程序设计》课程设计报告 (2013— 2014学年第 3 学期) 题目: C语言课程设计 专业:软件工程 班级:软件工程技术2班 姓名学号: 1 林燕萍 指导教师:吴芸 成绩: 计算机科学与技术系 2014 年6月23日

目录 一、课程设计的目的与要求 (1) 二、方案实现与调试 (3) 2.1 掷骰子游戏 (5) 2.2 射击游戏 (7) 2.3 计算存款本息之和 (8) 2.4肇事逃逸 (10) 2.5 礼炮 (12) 2.6 汽车加油 (14) 2.7 大优惠 (16) 2.8 金币 (19) 三、课程设计分析与总结 (23) 附录程序清单 (25) 一、课程设计的目的与要求(含设计指标) C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了基知识,如概念,方法和语法规则之外更重要的是进行实训,以提高学习者的动手和编程能力,从应试课程转变为实践工具。这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C 语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的: 1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;

2.让学生扎实掌握C程序设计语言的相关知识; 3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。 编写程序要求遵循如下基本要求: ①模块化程序设计 ②锯齿型书写格式 ③必须上机调试通过 二、方案实现与调试 2.1掷骰子游戏 2.1.1 题目内容的描述 1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。 2) 将每人每次的分值累加计分 3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。4) 结束条件:当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。最后显示双方分数并判定优胜者。 2.1.2输入数据类型、格式和内容限制和输出数据的说明 数据类型:整型;内容限制:随机数的产生;输入数据结果:胜利的一方 2.1.3主要模块的算法描述

汇编语言课程设计报告——实现加减乘除四则运算的计算器

汇编语言课程设计报告 ( 2011 -- 2012 年度第 2 学期) 实现加减乘除四则运算的计算器 专业 计算机科学与技术 学生姓名 班级 学号 指导教师 完成日期

目录 目录错误!未定义书签。 1 概述错误!未定义书签。 设计目的错误!未定义书签。 设计内容错误!未定义书签。 2 系统需求分析错误!未定义书签。 系统目标错误!未定义书签。 主体功能错误!未定义书签。 开发环境错误!未定义书签。 3 系统概要设计错误!未定义书签。 系统的功能模块划分错误!未定义书签。系统流程图错误!未定义书签。 4系统详细设计错误!未定义书签。 5 测试错误!未定义书签。 测试方案错误!未定义书签。 测试结果错误!未定义书签。 6 小结错误!未定义书签。 参考文献错误!未定义书签。 附录错误!未定义书签。 附录源程序清单错误!未定义书签。

实现加减乘除四则运算的计算器 1 概述 设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。 设计内容 能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2 系统需求分析 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。 主体功能 系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。 本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算 2、判断符号是否为运算符 3、回车为换行符 4、用十进制或十六进制输出运算结果 开发环境 集成环境 3 系统概要设计 系统的功能模块划分 本题目实现的模块图如图3-1所示

C语言程序设计课程设计

《C语言程序设计》课程设计 1课程设计目的 C语言课程设计是在“C语言程序设计”课程后集中安排的1周相关的实践技能训练环节。它的目的是通过实践环节的训练,培养学生查阅资料的能力、分析与解决问题的能力、应用C语言开发与设计程序的能力。 2课程设计选题 2.1 题目1 必做题目,其余题目任选一题完成 题目1:年历显示。 功能要求: (1)输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。 (2)输入年月,输出该月的日历。 (3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。 题目2:小学生测验 面向小学1-2年级学生,随机选择两个整数和加减法形成算式要求学生解答。 功能要求: (1)电脑随机出10道题,每题10分,程序结束时显示学生得分; (2)确保算式没有超出1-2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0-50的范围,负数更是不允许的; (3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案; (4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分; (5)总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN” 题目3:学生学籍管理系统(可以2人合作完成) 用数据文件存放学生的学籍,可对学生学籍进行注册,登录,修改,删除,查找,统计,学籍变化等操作。 功能要求: (1)系统以菜单方式工作。 (2)登记学生的学号,姓名,性别,年龄,籍贯,系别,专业,班级;修改已知学号的学生信息; (3)删除已知学号的学生信息; (4)查找已知学号的学生信息; (5)按学号,专业输出学生籍贯表。 (6)查询学生学籍变化,比如入学,转专业,退学,降级,休学,毕业。 题目4:通讯录程序设计 设计一个实用的小型通讯录程序,具有添加,查询和删除功能。由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码。电话号码可由字符和数字组成。实现功能:(1)系统以菜单方式工作 (2)信息录入功能 (3)信息浏览功能

浅析语言教学的任务型课程设计,长春教育学院学报.doc

浅析语言教学的任务型课程设计,长春教育 学院学报, 浅析语言教学的任务型课程设计曹顺娣摘要:20世纪80年代以来,作为一种有效的教学模式,任务型教学已被许多语言研究者和教师广泛接受,但与此相关的教学研究与实践一直局限于讨论教学方法。本文分析了任务型课程设计的重要性和理论基础,探讨了如何根据詹姆斯布朗(James Brown)提出的六步骤设计一个典型的任务型课程。 关键词:语言教学,任务型教学,课程设计 Abstract: Since 1980s, task-based teaching has been widely accepted by many language researchers and teachers as an effective teaching style, yet the research and teaching practice has been limited to discussion on teaching approaches and methods only. The thesis analyzes the importance of designing task-based curriculums and the theoretical basis of task-based curriculum design. Then it discusses how to design a typical task-based curriculum following the six steps put forward by James Brown. Key words: Language teaching, Task-based teaching, Curriculum design 1. 任务型教学简介 20世纪80年代以来,任务型教学越来越广泛地被语言教师和研究者接受,许多专家学者在这方面做了大量的实践和研究。但是这些实践和研究一直局限于对教学方法的探讨,而任务型课程设计及教材开发则相对滞后,相应的评价方法也没有得到

汇编语言-课程设计1

) 汇编语言课程实验报告 实验名称 课程设计1 实验环境 硬件平台:Intel Core i5-3210M 操作系统:DOSBox in Windows 软件工具:Turbo C , Debug, MASM 实验内容 《 将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。 实验步骤 1.要完成这个实验,首先我们需要编写三个子程序。第一个子程序是可以显示字符串到屏 幕的程序,其汇编代码如下: ;名称:show_str

;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串 ;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址 ;返回:显示在屏幕上 ¥ show_str: push ax push cx push dx push es push si push di mov ax,0b800h - mov es,ax mov al,160 mul dh add dl,dl mov dh,0 add ax,dx mov di,ax mov ah,cl . show_str_x: mov cl,ds:[si] mov ch,0 jcxz show_str_f mov al,cl mov es:[di],ax inc si inc di 【 inc di jmp show_str_x show_str_f: pop di pop si pop es pop dx pop cx } pop ax ret 2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出

计算机程序设计(C语言)课程设计报告

计算机程序设计(C语言) 课程设计报告 题目:电子动画时钟 学院:机电工程学院 专业: 班级:090109班 学号: : 指导教师: 设计日期:

一、概述 选题背景:随着社会的进步和科技的发展,电子钟表逐渐成为了人们生活中不可缺少的一部分。设计思路:(一)功能模块设计,1.电子时钟执行主流程2.电子时钟界面显示3.电子时钟按键控制模块4.时钟动画处理模块(二)数据结构设计 1.time结构体 2.全局变量(三)函数功能描述1.keyhandle()2.timeupchange()3.timedownchange()4.digitclock()5.drawcursor()6. clearcursor()7.void clockhandle()8.main()(四)程序实现(五)运行结果。 二、概要设计 2.1、数据结构 此程序中,使用了C语言的time结构体和几个全局变量,1.time结构体struct time { unsigned char ti_min; /*分钟*/ unsigned char ti_hour; /*小时*/ unsigned char ti_hund; /*百分之一秒*/ unsigned char ti_sec; /*秒*/ }; time结构体定义在dos.h文件中,可用来保存系统的当前时间,其中各字段的值的含义如下。 1.unsigned char ti_min:保存分钟值。

2.unsigned char ti_hour:保存小时。 3.unsigned char ti_hund:保存百分之一秒,例如,ti_hund=500,表示1/500秒。 4.unsigned char ti_sec:保存秒数。 2.2、全局变量 下面对程序用到的全局变量及数组进行说明. 1. double h,m,s: 此3个全局变量分别用来保存小时,分钟,秒数。 2. double x,x1,x2,y,y1,y2:保存数字时钟中小时,分,秒在屏幕中显示的坐标值。 3.struct time t[1]:定义一个time结构类型的数组,此数组只有t[0]一个元素。 2.3 模块列表 1.时钟动画处理模块 时钟动画处理模块主要由clockhandle()函数来实现,程序中旧时钟指针的擦除是借助setwritemode(mode)函数设置画线的方式来实现。如果mode=1,则表示画线时用现在特性的线所画之处原有的线性异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变时,进行两次画线操作相当于没有画线,即在当前位置处清除了原来的画线。 2.时钟按键控制模块 在电子时钟中,按键控制模块最主要的工作就是必须能读取用户按键,对按键值进行判断,并调用相应函数来执行相关操作。 3.

英语课程设计

初中英语教学设计与反思 上传: 刘萍更新时间:2012-5-28 12:55:33 基本信息 课题:七年级英语第一单元第三个话题 c部分 工作单位:江西省于都县固院初中刘萍 教材分析 七年级英语第一单元第三个话题 c部分。这一课可分为两部分,一是阅读课文,阅读课教学是英语教学重要一环,如何培养学生良好阅读习惯和阅读方法,提高阅读能力,这正是素质教育中对英语教学的要求。即要求学生尽可能的获取大量信息,开阔视野,提高兴趣,扩大词汇量,在丰富知识的同时提高应用语言的能力。二是学习名词的复数形式以及句子的单复数变化。本教材倡导语言教学的交互性和实用性,为学生提供了自然的、有意义的语言环境。本单元三个话题分别为:1. nice to meet you! 2. where are you from? 3. what class are you in? 前两个话题主要是学习问候、介绍、感谢和道别等句型,学习介绍自己,了解他人信息,如电话号码、年龄、国籍等,学习十以内的数字。而即将要讲授第三个话题,我们将继续学习如何介绍自己,懂得怎样了解他人的年龄以及所在年级、班级,谈论电话号码等;学习二十以内的数字;初步学习可数名词的单复数及其使用。这个话题是以前两个为基础,从了解姓名到谈论来自哪里,再到谈论年龄、班级、电话号码等,用层层递进的方式逐步扩大和加深,具有很强的

逻辑性和整体感。 教学目标 1、知识目标: 帮助学生掌握三会、四会单词,如:year now school same but friend these egg those bus等; 同时让学生掌握部分可数名词的复数形式以及句子的单复数变化。 2. 能力目标: 对学生良好的阅读习惯和阅读方法进行启蒙;同时让学生懂得利用信息提示填写表格,或者利用信息介绍一个人。 3. 情感目标: 通过向同学朋友咨询了解个人信息,学会与同学和睦共处、互相关心、得体交流,懂得待人以善以诚的道理。 教学重点与难点 教学重点: 在于让学生初步懂得从段落文章中查找信息,学会模仿课文介绍自己或他人;后部分重点为可数名词以及句子的单数形式变化。 教学难点: 理解汉语和英语在表达复数上的差异。 教学过程 在课堂的整体设计上我主要遵循整体教学的思路,运用情景教学法和交际法,分以下五个主要步骤进行,即:复习、呈现、巩固、活动练习和作业。

VB程序设计课程设计报告完整版

V B程序设计课程设计 报告 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

《VB程序设计》 课程设计报告(2016 — 2017 学年第 1 学期) 题目:排序演示 学院:经济与管理学院 班级:物流管理1502 学号: 姓名: 指导教师:阮冰 时间:起 2017年1月3日止 1月6日

一、课程设计基本信息 课程代码:05190124 课程名称:计算机基础课程设计 课程英文名称: Computer-based Course Design 课程所属单位(院(系)、教研室):数学与计算机学院计算机基础课程群 课程面向专业:生物科学类、制药工程、制药工程(生物制药)、药物制 剂、物流管理 课程类型:必修课 先修课程:大学计算机基础通识选修课程、Visual Basic程序设计课程学分:1 总学时:16 二、课程设计目标 掌握所学语言程序设计的方法,熟悉所学语言的开发环境及调试过程,熟悉所学语言中的数据类型,数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。通过综合设计要求达到下列基本技能: 1.培养查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。 2.通过对所选题目方案分析比较,确立方案,编制与调试程序,初步掌握程序设计的方法,能熟练调试程序。 3.系统设计编程简练,可用,功能全面,并有一定的容错能力。用户界面良好,有较好的输出功能。在完成课题基本要求后,具有创新型设计,具有一定的实用价值。 4.根据个人的设计调试过程,撰写设计报告。 三、课程设计内容 利用已掌握的VB程序设计语言基础,以及面向对象的程序设计方法、事件驱动的编程方式,进行应用程序和系统的开发设计。在强化巩固已有编程知识基础之上,训练新的设计与编程思路,通过综合应用所学知识设计、编制、调试实用的Visual Basic程序。 四、课程设计要求 1.要求每个同学都要认真对待,积极参与。 2.课程设计结束时,提交完成的所有源程序、相关文件和可执行文件。同 时填写并完成《课程设计报告册》。 3.不符合要求的程序、设计报告、抄袭的设计报告或源程序代码、在设计 中完全未参与的将作不及格处理。 五、考核方式

C语言程序课程设计猜数字游戏

C语言程序设计课程设计 : 自 动 化 级 : 名: 学号: 指导教师: 兰州交通大学自动化与电气工程学院 2015年07月21日

一.引言 设计目的 复习和巩固C语言基础知识,进一步加深对C语言的理解和掌握。提高同学将课本上的理论知识和实际结合的能力,锻炼同学的分析解决实际问题的能力,提高同学团队合作的能力。使同学们善于观察和思考,善于合作,具备实践编程的基础素质,和实际问题分析的思考方式。 设计要求 在设计时充分地分析和理解问题本身,综合考虑系统功能,怎样使系统结构清晰、合理、简单和易于调试。然后详细设计,确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。最后认真完成课程设计说明书,并对设计方法,结果等进行总结。 充分地分析和理解问题本身,弄清要求做什么(What to do)。在确定解决方案框架过程中(How to do),综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。 确定算法的主要流程,在此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。 上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。静态检查主要有两种途径:(1)用一组测试数据手工执行程序;(2)通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。 二.基础题 题目 用选择法对10个数进行排序。 有一个已排好序的数组。现输入一个数,要求按原来的规律插入到原数组中。解题思路 程序的主要功能是对数组元素用排序函数按从小到大的顺序进行排序。 先定义一个10个元素的一维数组a[10],然后从电脑输入10个数(也就是对数组赋值),然后使用一次fun()函数,对这10个数进行排序;然后再定义一个11个元素的一维数组b[11],同时再从电脑输入一个数同a[10]一起赋值给b[11],然后再使用fun()函数,重新排序的到最后的有顺序的一组数据。 流程图 子函数流程图如图1所示:

高级语言课程设计论文

青岛农业大学 理学与信息科学学院 高级语言课程设计报告 设计题目学生通讯录设计与实现 学生专业班级电子信息工程专业2012级02班 学生姓名(学号)刘涛(20123134) 设计小组其他同学姓名(学号)王博宸(20123190)于勐涛(20123294)周巧丽(20123288)周倩(20123287)邓楚玉(20120822) 指导教师孙华丽 完成时间2014.12.25 设计地点理信学院软件实验室 2014 年 12 月 25 日

学生通讯录设计与实现 一、课程设计目的和意义 高级语言课程设计是计算机科学与技术专业的主要实践性教学环节。其目的在于加深对面向对象程序设计语言程序设计理论和基本知识的理解,掌握使用C++语言进行面向对象程序设计的基本方法,提高运用面向对象知识解决实际问题的能力。为毕业设计和以后的工程实践打下良好的基础。该课程设计的意义也十分重大,它可以充分锻炼自己的逻辑思维,提升自己对编程语言的认识和运用,我在设计过程中充分的与其他的学科进行了整合,使自己加深了对程序语言的认识,自己的治学态度也得到了提升。 二、需求分析与设计 1.设计任务分析 设计任务为学生通讯录设计与实现。学生通讯录拥有以下几种功能:添加记录、查找记录、删除记录、修改记录。添加功能可以向数据库中追加数据,查找功能能够根据要求超找记录,删除能够删除数据库中的指定记录,修改功能能够修改制定记录的指定内容。 记录储存在文本数据库中,每个记录记录一个联系人的详细信息,记录内容分别为姓名、年龄、电话、邮箱、地址。 我们小组每个人都有明确的任务分工,本次课程设计我主要负责添加纪录模块的设计与实现。 该程序使用Python语言来进行设计。Python,是一种面向对象、解释型计算机程序设计语言,应用于设计各种各样的应用程序。Python在设计上坚持了清晰划一的风格,语法简洁而清晰,具有丰富和强大的类库,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。 2.设计方案论证 程序通过调用4个函数来实现通讯录的4个模块功能,通过一个home()函数来实现主界面。 home()函数使用一个while循环,根据用户的输入来选定通讯录的功能。 addMes()函数用来添加记录,通过input()函数来获取用户的输入,将一个用户的记录写到一个字典对象中,然后将字典对象字符串化存储到数据库文件中。 findMes()函数用来查找记录,通过input()函数获取要查询的关键类型和关键字,通过字典的键-值映射来查询数据并输出到屏幕上。 delMes()函数用来删除记录,通过input()函数获取要删除的用户的用户名,在循环中通过字典的键-值映射找到要删除的记录,将其余的记录储存在一个list列表中,循环结束后再将列表重新写入数据库文件中。 changeMes()函数用来修改记录,通过input()函数获取要修改的关键类型和关键字,在循环中通过字典的键-值映射找到要修改的记录,将其值修改后与其他记录一同储存在一个list列表中,循环结束后再将列表重新写入数据库文件中。 几大模块功能相辅相成,利用Python语言函数进行纪录的添加,查找,删除和修改,共同实现学生通讯录的设计与实现。 三、设计代码 #!/usr/bin/python # -*- coding: cp936 -*- #Filename : 学生通讯录

(新)汇编语言课程设计四则运算

计算机与信息工程学院《汇编语言》课程设计四则运算器的设计 专业:计算机科学与技术 班级:控制11-2班 姓名: 倪天天 学号:2011025745 指导教师:郝维来 2013年6月28日

摘要 计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,设计各个功能模块。当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。 关键词:计算器,汇编语言,四则运算,功能模块

Abstract Calculator is the easiest calculation tools, a simple calculator with addition, subtraction, multiplication, division four arithmetic functions. Want to use assembly language to achieve a simple calculator, you must pass on the data storage, register usage, addition, subtraction, and related instructions such as assembly language module calls the use of knowledge in order to achieve a basic functional, user-friendly, easy to operate easy calculator. Using assembly language to achieve a simple calculator also involves the design of input and output modules, the judgment of arithmetic operations and exit the program to judge design. Through the rational use of various commands, design various functional modules. When implementing various program modules, through a call to the ultimate realization of the program a simple calculator. Keyword:Calculator, assembly language, four arithmetic, functional modules

程序设计语言 课程设计题目(补充)

课程设计题目 题目七:销售管理系统 问题描述:设计一个日用商品销售管理系统,以小型超市商品销售为管理对象来设计系统。实现功能:根据销售信息(包含如下内容:商品编号、销售数量、销售单价、销售日期、销售人员;保存为磁盘文件),实现对商品日常信息的管理。 1、日用商品销售信息输入 运用人机对话方式实现商品的商品编号、销售数量、销售单价、销售日期、销售人员的信息录入,以文件的形式保存其信息 2、商品销售信息查询: a) 根据商品编号查询所售商品明细(数量,单价,金额) b) 根据销售日期查询当天所售商品明细(数量,单价,金额) c) 根据销售人员查询某营业员所售商品明细(数量,单价,金额) 3、商品销售信息统计 a) 日销售额统计(按商品编号,销售人员,全部商品)及总销售额统计 b) 月销售额(按商品编号,销售人员,全部商品)及总销售额统计 c) 月度销售排名(按商品编号,销售人员) 知识点:结构体类型变量的应用,文件操作,数据的查询,函数的应用 说明:以十组商品三个营业员构成二十组商品数据 题目八:职工工作量统计系统 问题描述:设计一个以班组职工日常工作量统计为对象的管理系统。 实现功能:根据组内职工日常工作信息(包含如下内容:职工编号,职工姓名,工作内容,完成数量,完成质量,完成日期;保存为磁盘文件),实现对职工日常工作量信息的管理。 1、职工日常工作量信息输入 运用对话方式分别输入职工编号,职工姓名,完成数量,完成质量(优、良、中),完成日期,对就多个完成质量的信息录入,以文件的形式保存其信息 2、职工日常工作量信息统计与输出 a) 以完成工作数量及完成质量进行工作量当日统计排序。名次相同,以完成数量多者优先,再次相同,以职工编号小者优先。 b) 以一个星期为一时间段按上述规则进行排序。 知识点:结构体类型变量的应用,文件操作,数据的查询与排序。 说明:以十人构成一个班组,每天大家都做同一工作来构成数据 题目九:通讯录管理系统 建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。 功能要求 (1) 通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ等。 (2) 输入功能:可以一次完成若干条信息的输入。 (3) 显示功能:完成全部通讯录信息的显示(一屏最多显示10条,超过十条应能够自动分

相关文档
相关文档 最新文档