网络工程认识实习指导书(1).doc
网络工程认识实习指导书一、实习基本知识【实习目的】认识实习是学生学习完第一个学年理论课程后,对于之前课程进行总结和之后进行准备必须完成的一项实践教学环节,是网络工程专业的第一个实习内容。通过认识实习,达到如下目的:1、较全面、深入地了解网络工程专业相关职业岗位的要求。2、进行程序开发的能力。3、学生能够有一个初步职业规划,能够有更加清晰的学习目标。【实习内容】综合布线、C语言综合实践、用人单位参观调研、人才招聘会、职业相关内容调研。【实习所用设施】PC计算机,每位同学一台【实习任务及要求】实习任务及要求请参考网络工程认识实习任务书。二、实习基本操作方法1、C语言综合实践;2、用人单位调研、人才招聘会,完成调研报告;3、综合布线;4、撰写实习报告。三、实习项目任务一C语言综合实践(1)案例名称:黑白棋(2)案例的目的黑白棋:练习C语言数组、函数和多重循环的相关知识,掌握C语言绘图的基本方法,通过游戏提高学生的学习兴趣,启发学生对博弈算法的思考,提高对VC+程序设计、人工智能等后续课程的学习热情。(3)案例覆盖知识点二维数组、函数和子程序设计、分支嵌套和多重循环、DOS下C语言绘图的基本方法(4)案例培养学生哪方面能力首先,作为一个简单的游戏,可以培养学生独立分析系统需求的能力,让学生进行系统功能模块划分的练习;其次,游戏中需要考虑的情况较多,可以培养学生复杂分支和多重循环的设计能力;掌握C语言绘图的基本方法,为以后进行Windows程序设计打下基础;对于有能力的学生,鼓励他们进行人机对战功能的实现,可以提高学生算法设计能力;或者鼓励学生进行游戏的Windows改进,为后续的可视化程序设计奠定基础。(5)做该案例需具体的前趋知识无(6)案例需求描述黑白棋游戏是一个深受人们喜爱的游戏,通常是人机对奕,本程序设计为人与人对奕,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。黑白棋的详细规那么:1两人对奕,以轮流方式持黑子与白子。2开辟新局者持白子,加入者持黑子,白棋先走,之后以轮流方式将棋子置于棋盘格子中。3在提示的格子中,选择一个格子下子。每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围的对方棋子将变成自己的棋子。包围的方向可以是上下左右以及左右斜线共连成一条线即可。8个方向,只要能4当轮到一个棋手摆子,而他没有可以包围对方棋子的位置时,他必须停步,让对方走棋,直到他可以走为止。5当棋盘上有一方的棋子为0(也就是被对方吃完)或下满64格,游戏结束,棋子少者输。游戏初始界面如图1-l所示。当游戏一方胜利后显示胜利信息,如图1-2所示。程序设计中用深灰色代表黑棋。图1-1游戏初始界面图1-2黑棋胜利的界面(7)需求分析描述文档黑白棋的游戏是要在一个8*8的网格中进行,而数组属于构造体类型,数组是具有相同数据类型的变量序列,序列中的每个变量成为元素,数组元素由一个统一标识的数组名和顺序好“下标来表示。需要在游戏中定义一个二维数从而实现游戏的走棋、落棋、判断棋盘的变化等。游戏不同于基于C语言的其他程序如学生成绩管理系统、教务工作管理系统、图书管理系统等由于游戏本身的问地就在于缓解压力,所以基于C语言设计的游戏需要一个良好的游戏界面,给游戏者以轻松和愉快的感觉。TURBOC提供了70多个图形函数,这些函数包括在图形库文件graphics.LIB中,被定义在graphics.h中。有了强大的图形处理能力,去设计一个良好的人机交流界面是可行的。由于此游戏采用的是“人人对战的模式,所以在游戏时,需要两个游戏者轮流下棋,棋手1走棋完毕后,经过判断棋盘变化过程后棋手2走棋,游戏过程需要在棋手间不断进行转化。在C语言中,提供了包括ifelse,switchcase等分支语句,综合运用这些分支语句,可以完成上述转化。黑白棋游戏双方共需要走棋64手,每次走棋后,都需要根据相同的标准判断棋盘变化,来判断旗子颜色的变化情况。显然需要运用循环语句来简化编程的长度。C语言中提供了whilefor等循环语句可以实现上述功能。游戏需要操作和输出显示游戏的结果,游戏的操作要由计算机的外部设备在人的操作下完成。C语言本身并不提供输入和输出语句,输入和输出的操作都是由函数来完成的,在C语言的标准库函数中提供了一些输入和输出的函数,这些函数的指针都是针对系统隐含指定的输入和输出设备的。综合运用这些输入和输出的函数可以实现上述的功能。(8)总体设计描述文档(包括子系统划分、功能划分以及对功能实现的代码化)在程序中,通过调用绘制棋盘、棋手对战、判断棋盘变化、改变棋子颜色等函数的调用来实现主函数的相应的功能,子函数功能如下:序号名称功能备注12main初始化初始化图形系统,画出棋盘DrawQp绘制棋盘和初始棋子在棋盘中绘制8*8的格子,初始棋子3456SetPlayColor设置棋子第一次的颜先走棋者持白子,后走棋黑子,色每次交替PlaytoplayMoveColorQpChange人人对战函数俩棋手交替走棋,定义键盘操作,接收棋手的按键信息俩棋手交替走棋,定棋子由初始位置到落子位置的路义键盘操作等径不改变颜色判断棋盘的变化,改每次走棋后,判断棋盘的变化情变棋子的颜色况,根据变化情况判断是否可以输出分数7DoScore处理分数根据棋盘上旗子的多少进行分数的处理89PrintScore输出成绩playWin输出胜利者结果1、main()主函数按照语法规那么,首先定义使用到的常数、全局变量、函数原型说明。棋盘状态用数组a88,初值为0,表示空格。函数的实体比较简单,因为要输出图形,所以应初始化图形系统,图形工作方式正确确定后,画出棋盘,调用playtoplay()人人对弈函数开始游戏,一旦游戏结束后,关闭图形系统,程序结束。2、DrawQp()画棋盘函数背景颜色设为蓝色,从坐标(100,100)开始每隔40个单位用白色画一条水平直线,一条垂直线,构成棋盘,用循环语句实现。画线函数线的起点和终点坐标,注意要计算正确。函数setfillstyle()式和填充颜色,fillellipse(intx,inty,intxradius,intyradius)line()的参数为可以设置填充模以x和y为圆心,xradius和yradius为水平和垂直轴画一填充椭圆,当xradius和yradius相等时,那么画出的是圆,用它表示棋子。3、SetPlayColor()设置棋子的颜色因为是两个棋手,同时棋盘也在不断变化,所以要判断棋手和棋盘变化设置了这个函数,函数的参数为整型变量t,根据t的值来设计填充棋子的当前颜色,值为l代表白棋,值为2代表黑棋。4、MoveColorl()恢复原来格子的状态由于棋手在走棋的时候,他的棋子总是首先出现在棋盘的左上角,棋手要通过移动光标键走到要落子的位置,在经过的路程上显示当前棋子,就会覆盖原来的棋盘状态,所以一旦棋子走过后,就应恢复原来的状态,是空格的依然显示空格,是棋子的就显示原来棋子的颜色。因为棋子移动过程并没有改变数组元素的值,所以可以根据数组元素的值判定原来的状态,如果值是l,就恢复白色棋子,值是2那么恢复黑色棋子,否那么恢复蓝色空格。5、playtoplay()人人对战函数这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下:按Esc键程序可以随时结束。按上下左右光标键,那么改变棋子移动的坐标值。按回车键后判断:1)如落子的位置已经有棋那么无效,继续读下一次按键。2)如落子位置是空格,可以将棋子落入格内,调用函数QpChange()判断是否引起棋盘的变化,函数值为1有变化,为0没变化。如果棋盘有变化,说明将包围的对方棋子吃掉,统计当前分数,如果棋盘没有变化,那么说明落子的位置无法包围对方的棋子也视为无效棋,可以继续寻找合适的位置,但开始统计其落子次数,一旦尝试次数超过当前棋盘的空格数,那么说明他无棋可走,那么放弃此步,让对方下棋。3)如果棋子变化后,格子己占满64格或一方棋子为0,那么游戏结束,显示胜利方信息,按任意键程序结束。重复上述步骤,直到游戏结束。这个函数中注意棋子的坐标和数组元素值的变化。playtoplay()程序流程图6、QpChange()判断棋盘变化当棋手按回车键落子后,就要分别往8个方向判断是否包围住对方棋子,如果是,那么改变棋盘,也就是棋盘上黑白棋子的个数要发生变化。表示黑白棋的图形用屏幕上的像素坐标,而棋子的状态是数组元素a,所以要根据落子的坐标x和y计算出对应数组元素a的下标i和j。i代表行,j代表列,对于8×8的棋盘,它们的值为07,如果j<6,往右边判断,从当前位置开始,用循环语句判断右边是否有一个或连续多个对方的棋子,遇到自己的棋子或空格那么结束循环,如果循环结束不是遇到空白,且列坐标小于8,那么说明这些位置的棋子是被自己包围的对方棋子,将它们吃掉,也就是改变为自己的棋子,如果有棋子发生了变化,给棋盘变化标志值yes赋值为1,同样的方法向左、上、下等8个方向进行判断,并作相应的变化。如果所有方向都判断过,并且没有引起棋盘的变化,那么棋盘变化标志值yes为0,返回yes,结束本函数。QpChange()程序流程图7、DoScore()处理分数根据当前数组元素的值判断分数,也就是各方棋子的个数,如果数组元素值为1,白棋棋子数累加;如果数组元素值为2,那么黑棋棋子数累加。8、PrintScore()输出成绩利用设置实体填充模式填充矩形条清除掉前次的成绩,再利用sprintf()函数将整数转换为字符串的形式,再利用outtextxy()函数将成绩输出。9、playWin()输出胜利者结果根据分数值scorel和score2的大小得出下棋的结果,输出赢者信息。(9)详细设计文档1、画棋盘函数图形库文件:#include"graphics.h"TurboC提供了70多个图形函数,这些函数包括在图形库文件graphics.LIB中,他们被定义在graphics.h中。编写图形程序的时候,一定高包口头文件graphics.h。图形初始化函数:initgraph(&driver,&mode,功能:装入图形驱动程序参数DRIVER指图形适配器驱动软件,用宏名或数字来表示,它实际上是一个枚举变量。当不知道所用的显示器是什么名称的时候,可将driver设置成DETECT,它将自动的检测所用的适配器的型号,并将相应的驱动程序装入,调节到最高分辨显示模式。参数MODE是每一种图形适配器的代码,可以是宏名或是数字,参数MODE不用说明具体的值,系统将采用最高的分辨率。设置背景颜色Setbkcolor(color)设置背景颜色。假设不设置,那么背景的颜色为黑色Setcolor(color)设置画线的颜色或者是调色板的颜色。如果不设置,那么系统指定为白色,其中COLOR为颜色的控制号或是颜色的宏名,为整形,设置的颜色保存到程序中遇到下一个设置颜色是为止。在本程序中,设置的背景颜色为蓝色,setbkcolor(BLUE),根据上述可知,此时,游戏界面的底色为蓝色。setcolor(0)将线的颜色设置为黑色,由此是为了取消了圆形图形周围的信息。:画线Line(x1,y1,x2,y2)从点X1,Y1到点X2,Y2画一条直线,颜色为当前的颜色,当前的位置是画线前的位置。for(i=100;i<=420;i+=40)line(100,i,420,i);/*line(i,100,i,420);/*画水平线*/画垂直线*/在本程序中,使用上述源代码实现绘制棋盘的功能,也就是以40为一个步增,以100,100为起点,以100,420、420,100、420,420为顶点画出棋盘,棋盘大下为320*320,由于步增是40,所以,棋盘上自然出现8*8的格子,由于画线的时候,没有定义线的颜色,所以线的颜色是默认的白色,所以最终出现了蓝色的底面上以白色画格子的棋盘。设置填充模式和颜色Setfillstylepattern,color设置填充模式和颜色其中:pattern=SOLID_FILL为填充实心充色,Color为颜色号码。FILLELLIPSEX,Y,RX,RY用当前颜色以X,Y为中心,RX、RY为半径画椭圆。setfillstyle(SOLID_FILL,15);/*白色实体填充模式*/fillellipse(500,200,15,15);/*setfillstyle(SOLID_FILL,8);/*setfillstyle(SOLID_FILL,WHITE);在显示得分的位置画棋子*/黑色实体填充模式*/在本程序中,使用的上述的代码来绘制棋子,棋子为半径为15的圆,颜色分别为代码为15和8的深灰色和白色棋子,分别由棋手来使用。a33=a44=1;/*a34=a43=2;/*初始两个黑棋*/初始两个白棋*/setfillstyle(SOLID_FILL,WHITE);fillellipse(120+3*40,120+3*40,15,15);fillellipse(120+4*40,120+4*40,15,15);setfillstyle(SOLID_FILL,8);fillellipse(120+3*40,120+4*40,15,15);fillellipse(120+4*40,120+3*40,15,15);开局是在8*8的棋盘的四个位置上分别设置四个棋子,位置分别为3,3|4,4两个白子,3,4、4,3两个黑子,也就是要在棋盘的120+3*40,120+3*40和120+4*40,120+4*40位置绘制半径为15的两个白子,在(120+3*40,120+4*40),(120+4*40,120+3*40)两个位置绘制两个黑色棋子。2、对战函数方向操作在主程序前,使用宏定义将UP、DOWN、LEFT、RIGHT,做了相应的定义,因此,在对战函数当中可以使用已经进行过定义的以上四个进行操作,在操作的时候,由于所画的棋盘的每一个格子的大小是40*40,所以,每次键盘操作后,棋子移动的距离是向相应的方向移动40,这样才能保证每次落子的位置都在棋盘没个格子的中心处,保证了操作的有效性,也使得在棋子在棋盘上移动的过程中,如故和已经落子的棋子有重叠,当上访旗子移走后不会在下方棋子的周围留下其他的颜色。每次移动后,在屏幕上显示的都是一个以15为半径的圆形。同时,为了满足这一点就要在棋子每次走棋的初始位置上有所考虑:x=120,y=80每次棋子一开始出来的坐标,x为行坐标,y为列坐标,设定每次走棋的初始位置为120,80,每次步增为40,以向下移动一次为例子:向下移动一次以后,中心位置变为120,120,格子的边际的Y坐标为100,一个格子的大小为40*40,所以,此时格子的中心坐标也是120,120,两个坐标吻合,保证了棋子落在棋盘位置的中央。由于走棋时,每个格子不能重复落子,所以,需要判断棋手要落子的地方是不是已经有了棋子,if(y!=80&&a(x-120)/40(y-120)/40!=1&&a(x-120)/40(y-120)/40!=2),当要落子的地方已经有棋子的时候,也就是此时的棋子将要放置的位置的X和是Y坐标已经和以前棋手1或者是2的棋子有重复,重复的时候那么不能放置棋子。落棋位置判断对战函数的主体部分,也就是俩棋手的轮换走棋。其中,T是已经落下的棋子数,当第一个人走时,T的值为1、3、5、7等,当第二个人走棋时T的值为2、4、6、8等,所以,当T%2=0的时候,也就是T的值为2、4、6、8的时候,判定是棋手2在走棋,同时,将棋子设定为黑色,反之那么为棋手1在走棋,棋的颜色也相应的变为白色。走棋后,判断棋盘的变化情况,将棋子途径的地方恢复为空格状态,并且开始统计棋手的尝试次数,当一个棋手在一次走棋的过程中尝试的次数超过空格的个数的时候,取消该棋手的本次走棋,改为下个旗手走棋,也就是跳出本次循环,进行下一次的循环。如果常识的次数没有超过空格的个数,而是落棋的位置无效,那么旗手可以继续尝试,知道到达尝试次数。if(key=ESC)/*结束游戏*/break;if(score1+score2)=64|score1=0|score2=0)/*格子已经占满或一方棋子为0判断胜负*/playWin();/*输出最后结果*/当某次走棋后,接受的按键的值为ESC的时候,那么退出游戏,当落子后在判定棋盘的变化时,一方的棋子为0,或者是双方已经下满64手,那么执行playWin函数,输出游戏的结果。判断棋盘的变化和改变棋子的颜色通过判断数aij的值来判断棋子的颜色,已经定义当aij=1的时候,棋子为白色,当aij=2的时候棋子为黑色,当aij的值不为1和2的时候,那么此时恢复为背景。以下为走棋后改变棋子颜色的函数流程图,根据游戏的游戏方法,在走棋后如果两个己方棋子中间有对放棋子的话,那么对方棋子要改变为和己方相同的颜色,由于判断相临棋子要向上、下、左、右、左上、左下、右上、右下八个方向判断,所以在落子后需要判断八次。改变棋子颜色i=(x-120)/40;/*j=(y-120)/40;/*计算数组元素的行下标*/计算数组元素的列下标*/根据以上的式子计算数组的下标的值,由于第一次的落子走棋位置是在120,120,所以在判断位置是否在棋盘的范围内的时候要在础上分别减去120,每个格子的大小是40*40,所以,做减法后所得的值的大小除120后得到当前格子的信息。X、Y的值的基根据黑白棋的游戏规那么,在上,下,左,右,左上,左下,右上,右下的八个方向上,只要有己方的俩个棋子将对手的棋子围住的话,那么对方的棋子就要改变颜色,变为和己方颜色一致。所以在判断棋盘的变化的时候,需要以新落子的位置为中心向八个方向进行判断,现在以向右判断为例,具体解释:if(j<6)/*往右边*/for(k=j+1;k<8;k+)if(aik=aij|aik=0)/*遇到自己的棋子或空格结束*/break;if(aik!=0&&k<8)for(kk=j+1;kk<k&&k<8;kk+)/*判断右边*/aikk=aij;/*改变棋子颜色*/fillellipse(120+i*40,120+kk*40,15,15);if(kk!=j+1)/*条件成立那么有棋子改变过颜色*/yes=1;当以中心向右侧判断的时候,以现在所在的位置为起点,逐一向右寻找,当遇到自己的棋子或者是空格的时候那么停止向右查找,当两个己方的棋子的X坐标值相等的时候aikk=aij,改变两子之间的对手棋子颜色,改变颜色后,意味着己方棋子以延伸到aikk+1,那么此时继续向右判断一次,以此类推,将上述过程向八个方向分别做判断。(10)开发环境普通微机,TurboC2.0开发环境。(11)用户说明书游戏运行说明:ESC退出游戏。用上下左右键来分别控制棋子的移动,移动到所定的位置后,按Enter表示下棋。棋子只能出现8*8的棋盘内,除了那些已经有了棋子的地方不能走以外,不能吃子的地方也不能下子。下子要求下在与对方棋子相邻的空位上,要求所下的棋子和原有的已方棋子夹住对方的至少一个棋子(横、竖、斜夹子均可),然后把被夹住的子变成己方的颜色。下棋过程中,任何棋子既不会从棋盘上拿走,也不会从一个格子移到另一个格子,吃子时,不会发生连锁反应,吃进的棋子不能再夹吃其他的子。当双方都无棋可下,或者方格全部占满后,棋局结束,子多的一方为胜方。(12)案例扩展实现案例的初步扩展功能:实现对局保存和回放、悔棋两个功能。完成一个功能可以评分为良好,完成两个功能评分为优秀。对于对局保存和回放功能如何实现要注意如下几个方面:1定义新的功能键来触发对局保存和回放功能,一般用F2、F3键。2对局的每一步棋都需要编号,以便保存棋谱时使用,所以需要使用一个新的数组记录棋手的每一步棋。3保存棋谱到文件中的时候,采用文本文件或二进制文件都可以,但需要设计相应的文件格式。4对局回放的时候,不仅要将每一步棋自动显示在棋盘上,还需要显示每一步棋给棋盘带来的变化。5对局回放的时候,每一步棋之间要有一定的延迟,要注意怎样实现延迟功能。6对局回放结束之后,应可以继续下棋,要注意功能之间的衔接。对于悔棋功能功能如何实现要注意如下几个方面:1需定义新的功能键来触发悔棋功能,可以用F1键。2悔棋功能不仅要撤销刚刚下的一步棋,还要撤销因这一步棋而发生改变的所有棋,这就需要在QpChange()函数中记录下所有刚刚发生改变的棋子,以便恢复这些改变。3如果要实现连续悔棋,而不仅是悔一步棋,那么需要更复杂的实现方法,而不是像上一点那样简单,要使用较复杂的数据结构来保存很多对局信息,学生可以量力而行。案例的高级要求:学生可以根据自己的能力和爱好,选择对前面的程序在如下两个方面进行改进:1完成人机对战功能,设计相应的算法,具有一定的对局水平。2完成Windows界面的人人对战功能,界面美观、操作方便。无论是完成人机对战功能还是完成Windows界面对于一年级的学生来说实现难度都很大,但对锻炼程序设计能力都很有帮助。对于有兴趣的学生可以编成小组协作完成,完成案例高级要求的学生评分为优秀。对于人机对战功能如何实现要注意如下几个方面:1棋子位置的价值评价方法;2博弈算法的基本思想和基本模式;3复杂数据结构的应用。Windows界面如何实现要注意如下几个方面:1Windows程序设计的基本架构;2Windows下画图的基本方法画圆、画位图;3Windows下鼠标操作的控制方法。任务二用人单位参观【实训目的】了解用人单位工作场景;了解相关工作岗位的工作场景;了解工作现场工作环境;了解特定岗位的工作流程;了解用人单位的知识要求、技能要求、素质要去;【实训内容】参观用人单位听用人单位讲解相关工作流程;听用人单位讲解项目运作流程;跟用人单位交流相关知识、技能要求。【预习要求】了解用人单位的背景。【考前须知】听从带队教师安排;听从参观用人单位的安排;【思考题】通过参观,自己大概有什么样的职业定位?任务三综合布线【实训目的】1、了解综合布线常用工具的使用方法。2、了解综合布线常用材料。3、熟练掌握使用网线钳制作具有RJ45接头的双绞线跳线的技能;4、能够使用网线测试仪测试双绞线跳线的正确性;【实训内容】制作超5类UTP双绞线交叉线信息模块制作与安装大对数语音线、PVC线管布线实训PVC线槽的布线工程技术实训测试桥架安装和布线工程技术实训【预习要求】人机交互界面相关知识、熟悉VisualStudio2008开发工具【实训步骤】详见综合布线视频任务四人才招聘会调研、职业相关调研【实训目的】了解人才招聘会工作场景;了解人才招聘招聘流程;了解网络工程相关职位的要求;了解网络投递简单的流程;了解通过网络招聘网站获取职业动向的方法;【实训内容】参加2次以上的人才招聘会听用人才招聘的相关工作流程;学生通过招聘网站搜索职业动向信息;通过招聘会、招聘网站了解网络工程专业的相关岗位职业技能要求。设计一份个人简历【预习要求】了解人才招聘会的相关考前须知。【考前须知】【思考题】通过这些途径,自己大概有什么样的职业定位?任务五撰写实习报告按照学校要求,撰写实习报告