北邮智能车实习报告

时间:2024.5.4

北京邮电大学实习报告

学生实习总结

一、实习任务要求:

1、手工焊接技术的基本训练:

   要求了解焊接用材料(焊料等)和焊接用工具(直热式电烙铁)的相关知识,熟悉二者的使用方法,并能够熟练掌握手工焊接技术,适当训练手工拆焊技术。

2、简单的发光二极管交替闪烁电路的安装调试:

   能够根据相关电路图合理布线,焊接并完成简单的发光二极管交替闪烁电路。

3、智能小车的安装与调试:

   要求能够实现定点停车,终点显示时间路程等功能。

二、手工焊接技术与的基本训练:

 1、焊接工具和焊料:

    焊接用工具:

  电烙铁、吸锡器、烙铁架、尖嘴钳、剪刀、斜嘴钳、剥线钳、镊子、切刀等

焊接用材料:

  焊料(铅锡焊料有熔点低、机械强度高、表面张力小、抗氧化性好的特点)

2、手工焊接步骤:

   手工焊接的操作一般分五个步骤,称为手工焊五步操作法

步骤一:准备施焊

左手拿焊丝,右手持电烙铁,电烙铁已经通电加热,可以随时施焊,并且要求烙铁头洁净无焊渣等氧化物,表面镀有一层焊锡。

步骤二:加热焊件

将烙铁头放在被焊接的两焊件连接处,使两个焊件都与烙铁头相接触,同时加热两个焊件焊接面至一定温度,时间大约为1~2秒钟。

步骤三:送入焊丝

焊件的焊接面被加热到一定温度时,焊锡丝从烙铁对面接触焊件,焊锡丝融化浸润两焊接面。!

步骤四:移开焊丝

当焊锡丝熔化一定的量,使焊接面布满液态焊锡后,立即向左上45°方向移开焊锡丝。注意:焊锡的量要适中,过量焊锡不但造成浪费,还增加了焊接时间,降低了工作速度,还容易造成焊点与焊点之间的短路。而焊锡过少则焊件之间不能形成牢固结合,影响焊点的质量。

步骤五:移开烙铁

焊锡丝移开后,融化的焊锡应同时也浸润焊件的施焊部位,此时应迅速将烙铁头贴刮着被焊接的焊件(元件引脚或导线)移离焊点,这样可以使焊点保持适当量的焊料。从第三步开始到第五步结束,时间大约1~2s。

3、高质量的焊点特征:

   可靠的电气连接、足够的机械强度、光洁整齐的外观。

三、简单的发光二极管交替闪烁电路的安装调测:

1、电路原理图如下图:

2、安装调试步骤:

A.根据电路规划焊接位置,合理布线。先焊电阻再布线,最后焊其他元件。

B.实际安装焊接电路

C.仔细检查电路焊接情况,并根据电路原理图对整个电路的安装、连接关系进行检查,核对无误后,通电调试。

四、智能小车的安装与调试:

1、智能小车设计原理:

                                         →           ←

                                                            ↓

 

              ↓

   本组智能小车所用单片机型号为STC90C52RC。

   单片机的计时器本质上是计数器,是对一个时间固定且已知的振荡源进行计数,通过计数值 X 振荡周期 从而得出计时时长,相对而言是比较精确的。通过此计时器即可得出小车的行驶时间。

单片机的光电计数器是利用单片机的两个外部中断,光电模块的脉冲触发中断来实现计数。由光电模块测得的脉冲数可以求得车轮转动的圈数(圈数=脉冲数/20),通过公式求得车轮周长,即可得出求出小车的行驶路程(路程=周长*圈数)。

速度由一秒内的行驶路程得出。

    定点停车是通过设定圈数来使小车停止,在程序里写一段选择语句即可实现。

而通过调节占空比来控制小车转速,使得小车有相同的速度,固定万向轮,即可实现直线行驶。

2、智能测速小车的安装调测:

以下为经过数次调试的最终程序代码:

#include<reg51.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

#define t 1

#define pi 3.14

#define r 0.03

uchar code seg_data[ ] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//0~9的段码表,0x00为熄灭符

uchar data disp_buf[7] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示缓冲区

sbit IN1 =P1^3;

sbit IN2=P1^5;

sbit IN3=P1^2;

sbit IN4=P1^0;

sbit LED1=P2^6;

sbit LED2=P2^7;  

sbit S1=P1^6;

sfr P4=0xe8;

sbit beep=P4^4;

unsigned int count=0;

unsigned int time=0;

unsigned int time1=0;                                 

unsigned int Rcount1=0,Rcount11=0,Rcount111=0;

unsigned int Lcount1=0,Lcount11=0,Lcount111=0;

unsigned int distance=0;

bit flag;  

/********延时函数********/

void Delay_ms(uint xms)         //延时程序,xms是形式参数

{                                                                                                                                                                                               

       uint i, j;

       for(i=xms;i>0;i--)                 // i=xms,即延时xms, xms由实际参数传入一个值

              for(j=115;j>0;j--);              //此处分号不可少

}

/********显示函数********/

display1(count1)

{

   P0=seg_data[count1%10];                          //显示毫秒位

   P2=0xfe;                                    //开个位显示(开第1只数码管)

   Delay_ms(t);                                       //延时10ms

   P0=seg_data[(count1/10)%10];                          //显示毫秒百位

   P2=0xfd;                                             //开十位显示(开第2只数码管)

   Delay_ms(t);     

}

display2(count2)

{

   P0=seg_data[count2%10];                          //显示秒位

   P2=0xfb;                                    //开个位显示(开第1只数码管)

   Delay_ms(t);                                       //延时10ms

   P0=seg_data[(count2/10)%6];                            //显示秒十位

   P2=0xf7;                                             //开十位显示(开第2只数码管)

   Delay_ms(t);   

}           

/*display3(count3)

{

   P0=seg_data[count3%10];                          //显示分位

   P2=0xef;                                    //开个位显示(开第1只数码管)

   Delay_ms(t);                                       //延时10ms

   P0=seg_data[(count3/10)%6];                            //显示分位

   P2=0xdf;                                             //开十位显示(开第2只数码管)

   Delay_ms(t);   

}*/

display4(uint d)                      

{

   P0=seg_data[d%10];                           //计算脉冲数 下面用此显示路程

   P2=0x2f;                                   

   Delay_ms(t);                                      

   P0=seg_data[(d/10)%10];                          

   P2=0x1f;                                            

   Delay_ms(t);   

}

/*******显示速度函数******/

void showspeed()

{  

   display1(Rcount111/20*2*pi*r*100);            //结果为右轮每秒转动的圈数

   display4(Lcount111/20*2*pi*r*100);            //结果为左轮每秒转动的圈数

}

/******显示路程函数******/   

void showdistance()

{

    display4(Rcount1/20*2*pi*r*10);

}

/*****外部中断函数*****/

void timer0() interrupt 1

{

   TH0=0xd8;

   TL0=0xf0;

   if(distance<5)

   {

      time++;

      if(time==100)

        {

           time=0;

              time1++;

              Rcount111=Rcount1-Rcount11;  //在过去1000ms中,右轮转的圈数(或脉冲数)

              Lcount111=Lcount1-Lcount11;  //在过去1000ms中,左轮转的圈数(或脉冲数)

              Rcount11=Rcount1;               //更新Rcount11

              Lcount11=Lcount1;               //更新Lcount11

        }

   }

}

/******外部中断(计光电模块脉冲数)********/

void exint1() interrupt  2

{

     Rcount1++;      //右轮转动圈数

}

void exint0() interrupt  0

{

     Lcount1++;      //左轮转动圈数

}

stop()

{

       IN1=0;

       IN2=0;

       IN3=0;

       IN4=0;

//     Delay_ms(1000);

}

houtui()

{

       IN1=1;

       IN2=0;

       IN3=0;

       IN4=1;

}           

qianjin()

{

    IN1=0;

       IN2=1;

       IN3=1;

       IN4=0;

}    

/*********微调左转函数***********/

void zuozhuan()

{

  

         IN1=0;

         IN2=1;

         IN3=0;

         IN4=0;

        

  

}

/**********微调右转函数***********/

void youzhuan()

{

          IN1=0;

          IN2=0;

          IN3=1;

          IN4=0;

         

}

//****************主程序******************//

void main()

{  beep=0;

   P0=0xff;

   P2=0xff;

   P1=0xff;

   TMOD=0x01;                    //定时器T0方式1

   EA=1; ET0=1; TR0=1;           //开总中断,开定时器T0中断,启动定时器T0

   IT1=1;EX1=1;IT0=1;EX0=1;

   count = 0;

   while(1)

   {

       LED1=0;

          Delay_ms(t);

       LED2=0;

          Delay_ms(t);

       display1(time);        //显示秒表

          display2(time1);

          showdistance();

          distance=Rcount1/20*2*3.14*0.03;

           if( distance<5 )

       {

               qianjin();

                     if(Rcount1>Lcount1)

                        {

                          youzhuan();

                             Delay_ms(15*t);

                            }

                     else if(Rcount1<Lcount1)

                        {

                           zuozhuan();

                             //Delay_ms(5*t);

                        }

       }

           else

           {

                                              

       {

              stop();

          }

}

}

}

3、函数具体功能:

   数码管显示函数:

定义4个显示函数来实现显示时间、行驶路程等功能。其中display1()为在右边两块数码管显示毫秒数,display2()为在中间两块数码管显示秒数,display3()为显示分钟(但按要求并未显示),display4()为在左边两块数码管显示路程。

   计时器:

    单片机内部有T0,T1,T2三个定时器,我们采用T0作为定时器,在主函数内设置了TMOD=0x21; EA=1; ET0=1; TR0=0;定时时间为10ms,TH0=0xd8;TL0=0xf0;每过10ms,time加一,time的单位即是十毫秒,time每数100,time1加一。即time1代表的是秒数。(time/60为分钟数,根据要求,我们没有显示分钟数。)

    外部中断函数:

光电模块每挡光一次,发出一次脉冲,一个车轮有20个遮光处。通过对脉冲计数,即可记录车轮转动的圈数。此处需要用到单片机的外部中断,我们在主函数内设置了EA=1;IT1=1;EX1=1;IT0=1;EX0=1。

  显示停车时间:

  当行驶距离达到定点距离(5m)时,启动stop函数,小车停止,计时器停止,此时时间由左边四只数码管显示,精确至毫秒。

  直线行驶:

  通过左右微调函数进行调整。若左轮转动圈数大于右轮,则启动微调左转函数,使小车左转进行调整。反之亦然。

4、测试数据结果:

  5米定点停车时间为10S左右

五、组内个人承担任务:

在本次电子工艺实习过程中,我与队友不断交流,齐心协力,最终圆满完成了任务。两人的工作量基本上是相当的。

我个人在小车的安装过程、前期的程序架构讨论、后期的程序调试以及制作小车外壳等阶段承担了一部分工作,并主要撰写实习报告。

六、问题及解决:

1、开始时发现程序无法下载:

   检查了焊接和元器件之后,我们最终发现导线的VCC接口与输入输出接口接错了。

2、编完微调程序发现小车还是无法直线行驶:

   首先我们检查了车轮的安装情况,并固定了万向轮,后来发现作用不明显,于是修改了微调程序里的占空比,并根据实际行驶情况反复调整,最终基本保证能够实现直线行驶功能。

3、发现车头LED灯亮度不够:

   经过检查发现是因为电压过低,改变相应电位参数,LED灯即可变亮

七、总结:

在本次电子工艺实习当中,我们通过实际操作熟练掌握了手工焊接技术,并在练习焊接过程中培养了自己的耐心和细心。在智能小车的安装调试过程中,我们不断学习不断进步,学会使用一款以前从未接触过的软件,编写程序完成任务,并不断调试修正以求尽善尽美。在制作最后的外壳时,我们根据图片自己动手设计裁剪卡纸,最终制作完成了漂亮的纸壳(照片见附录)。在电子工艺实习这整个过程中,我们所学到的东西,所带来的满足与欣慰是不足为外人道的。

附录:

学习资料:

《MCS-51系列单片机应用系统设计》 何立民编著 北京航空航天大学出版社

《案例学单片机C语言开发》 吴戈等著 人民邮电出版社

”十天学会单片机“视频资料 郭天祥讲解

智能车实物照片:


第二篇:北邮计算机实习报告


北京邮电大学信息与通信工程学院

计算机实习计划书

信息与通信工程学院20##级

20##年 暑期


1、教学目标

北京邮电大学信息与通信工程学院20##级暑期计算机实习,是在学习C++大学基础教程的基础上开设的,目的是使学生们进一步综合运用C++的基本概念和语法,学习C++面向对象的设计思想,并且初步学会MS Visual C++的集成开发环境的使用。

计算机实习的时间为两个星期,在这三星期内,学生们将学习复杂应用程序的设计和使用、文件流的读写、相关API的使用等,并提交一个完整的C++的作品。充分培养学生的合作意识,培养学生们发现问题、解决问题的能力,充分发挥学生的想象力、创造力,激发学生主动学习的潜能。

2、相关知识

2.1相关数据类型

实例使用的数据类型包含在库文件 <windows.h>中,该库文件主要用来描述windows环境下常用的数据结构,宏和其他数据类型。

2.1.1、相关数据结构

Ø  HANDLE:句柄

实际上是一个无符号的整型数,作为窗口的唯一标识ID,控制台的黑屏也是一个窗口,也需要这样的一个HANDLE来标识。

Ø  BOOL逻辑

                  实际结构:typedef int BOOL;

Ø  BYTE字节

            实际结构:typedef unsigned char BYTE;

Ø  WORD字

            实际结构:typedef unsigned short WORD;

Ø  DWORD双字

            实际结构:typedef unsigned long DWORD;

2.1.2、颜色标识

      实例中用来描述颜色的数据结构是WORD,根据下列宏定义可以常用的各种前景色和背景色。

      前景色:

Ø  红色:FOREGROUNT_RED

Ø  绿色:FOREGROUND_GREEN

Ø  蓝色:FOREGROUND_BLUE

Ø  颜色加重显示:FOREGROUND_INTENSITY

背景色:

Ø  红色:BACKGROUND_RED

Ø  绿色:BACKGROUND_GREEN

Ø  蓝色:BACKGROUND_BLUE

Ø  颜色加重显示:BACKGROUND_INTENSITY

根据系统提供的三元色进行组合,可以得到混合后的文本和背景颜色。

前景色:

Ø  黄色:FOREGROUNT_RED | FOREGROUND_GREEN

Ø  青色:FOREGROUNT_BLUE | FOREGROUND_GREEN

Ø  紫色:FOREGROUNT_BLUE | FOREGROUND_RED

Ø  白色:FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN

背景色:

Ø  黄色:BACKGROUNT_RED | BACKGROUNT _GREEN

Ø  青色:BACKGROUNT _BLUE | BACKGROUNT _GREEN

Ø  紫色:BACKGROUNT _BLUE | BACKGROUNT _RED

Ø  白色:BACKGROUNT _RED| BACKGROUNT _BLUE| BACKGROUNT _GREEN

2.2常用的系统函数

实例使用得系统函数大都来自文件<conio.h>,该文件包括控制台的键盘输入输出操作。常用的系统函数如下所示:

Ø  kbhit()

        检测是否有按键按下,系统函数直接调用。

Ø  getch()

        获取按键的值,但不在屏幕回显,系统函数直接调用。

Ø  getche()

       获取按键的值,但在屏幕回显,系统函数直接调用。

Ø  Sleep(DWORD n)

       使程序休眠n毫秒,系统函数直接调用。

Ø  void  srand(unsigned int seed )

       随机数的种子函数。

Ø  int  rand()

产生伪随机数序列。

2.3教师的前期工作

鉴于学生们学习C++的时间较短,了解的相关知识相对较少,为了方便同学们快速上手进行编程,需要教师提前作一些准备工作。使用控制台编程需要了解很多复杂的系统函数,因此,教师提前将这些系统函数进行了加工,封装成简单的函数提供给学生调用,包含这些函数的文件如下:

       这些文件由教师提供:

Ø  头文件 colorConsole.h(附件1)

Ø  源文件 colorConsole.cpp(附件2)

   这两个文件中实现了下面两个函数,函数接口如下:

      1)HANDLE initiate();

          输入参数:无

          输出参数:HANDLE

函数功能:初始化控制台窗口,并获取该窗口的句柄;该函数只在程序初始化时执行一次。

2)BOOL textout(HANDLE hOutput, int x, int y, WORD wColors[],int nColors, LPTSTR lpszString );

   输入参数:    窗口句柄  HANDLE hOutput

           设置窗口横坐标  int x

设置窗口列坐标  int y

              设置文本和背景色序列  WORD wColors[]

                    设置颜色序列的数目    int nColors

设置输出的字符串      LPTSTR lpszString )

        输出参数:true 表示执行成功,false表示失败

函数功能:在控制台窗口指定的(x,y)位置输出指定颜色的字符串。

实际编程中,学生们需要按照以下步骤进行:

1、  将colorConsole.h文件添加到新建的工程中

2、  将colorConsole.cpp文件添加到当前工程中

3、  新建一个源文件main.cpp,将#include “colorConsole.h”自己编写主程序中的代码调用封装后的,极大的简化了编程难度。

2.4编程技巧

2.4.1、显示彩色字符串

       编程步骤:

          1)初始化获取窗口句柄

          2)设置颜色

          3)设置坐标

          4)输出指定字符串

      

例1:显示红蓝相间的彩色字符串Happy Birthday!

  void main(void) 

{

       HANDLE handle;

       handle = initiate();

    WORD wColors[2];

       wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;

    wColors[1]=FOREGROUND_BLUE;

       textout(handle,10,10,wColors,2,"Happy Birthday!");

}

2.4.2、闪烁的彩色文字

        闪烁原理:

            1)写一遍彩色文字

            2)延时200ms

            3)写一遍空文字

            4)延时100ms

        反复该过程,则文字不断闪烁。

       

例2:彩色字符串Happy Birthday!不断闪烁

void main(void) 

{

    HANDLE handle;

    handle = initiate();

  WORD wColors[2];

    wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;

  wColors[1]=FOREGROUND_BLUE;

  while(1)

{

         textout(handle,10,10,wColors,2,"Happy Birthday!");

       Sleep(200);

       textout(handle,10,10,wColors,2, "             ");

       Sleep(100);

  }

}

2.4.3、移动的彩色文字

       移动原理:

            1)写一遍彩色文字

            2)延时100ms

            3)写一遍空文字

            4)改变坐标位置

反复该过程,则文字不断移动。

例3:水平移动彩色字符串Happy Birthday!

void main(void) 

{

       HANDLE handle;

       handle = initiate();

    WORD wColors[2];

       wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;

    wColors[1]=FOREGROUND_BLUE;

for(int x=0; x<65 ; row++)

{

            textout(handle,x,10,wColors,2,"Happy Birthday!");

         Sleep(100);

         textout(handle,x,10,wColors,2,"              ");

    }

}

2.4.4、检测键盘输入

       检测原理:

            1)检测是否有按键

            2)有:键盘处理

            3)无:屏幕处理

       反复该过程,则文字不断移动。

      例4:移动字符串的过程中,按下任意键暂停,再次按下时继续移动

void main(void) 

{

HANDLE handle;

       handle = initiate();

    WORD wColors[2];

       wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;

    wColors[1]=FOREGROUND_BLUE;

              int x=0;

bool flag=false;

while(x<65)

{

                    if (_kbhit())

{

                         _getch();

                flag=!flag;

                      textout(handle,x,10,wColors,2,"Happy Birthday!");

                    }

                    if (flag)

{

                            textout(handle,x,10,wColors,2,"Happy Birthday!");

                            Sleep(100);

                            textout(handle,x,10,wColors,2,"                           ");

                            x++;

                    }

          }

}

3、教师范例

3.1范例题目一

制作一个投骰子游戏。程序运行界面如图1所示。

1 筛子游戏界面

3.1.1程序功能

如图1所示:

Ø  游戏运行,可以显示不同点数的筛子;

Ø  游戏开始,按下“回车键”,则筛子随机出现不同的点数,产生动画效果;

Ø  按下“回车键”,筛子停止变化,记录点数;

Ø  按下“空格键”,更换游戏者,重复上述2、3步骤;

Ø  按下“q键”,游戏结束。

该游戏可以多人参加,每人可以投多次,每人每次的筛子点数自动累加,点数最高者胜。

3.1.2实现步骤

       1)搭建程序框架

Ø  新建一个空的工程,工程名称game;

Ø  将colorConsole.h(附件1)和colorConsole.cpp(附件2)拷贝到工程当前目录,添加到工程中;

Ø  新建一个主文件main.cpp,将#include “colorConsole.h”代码添加到main.cpp中。

2)代码实现(源代码见附件3

Ø  一个辅助函数

void rolldice(HANDLE hOutput, int n, int col , int row, WORD wColors[]);

输入参数:

输出屏幕:hOutput

筛子点数:n

屏幕位置:列col行row

文字颜色:wColors[]

输出参数:

功能:

在屏幕指定位置输出指定点数和指定颜色的筛子

Ø  主函数

功能:检测按键,根据不同的按键实现不同的功能,算法思想如下面的为代码所示。

void main()

{

       屏幕初始化;

       显示6个黄色的不同点数的筛子;

       在屏幕底部显示菜单;

       while(1)//游戏开始

              {

                    if (检测到按键)

                     {

                        if(检测是否按下“回车键”)

           {

                                标志位取反;

if(当前标志为false)

{

停止投筛子;

显示当前点数的筛子;

rolldice(handle,i+1,row,col,wColors);

                                          记录并显示游戏者和点数;

                                   }

                            }

                            else if (检测是否按下“空格键”)

                     {

                                   计数器清零;

                                   游戏者人数加1;

                            }

                  else if (检测是否按下“q或Q键”)

               break;

                    }

               if (标志位是true)

                     {

                            随机投筛子;

                     }

              }

}//游戏结束

3)程序编译调测运行

       不需要额外的设置,常规调试运行即可。

3.2范例题目二

    制作一个指法测试游戏。程序界面如图2所示。

2 指法测试游戏

3.2.1程序功能

如图2所示:

Ø  游戏运行,可以显示5行40列的随机字符;

Ø  按下“任意键”,游戏开始,开始计时;

Ø  从左到右,键入字符,如果与相应位置显示的字符相同,则正确字符数加1,否则错误字符数加1;

Ø  1分钟后程序自然停止,统计正确/错误字符数;并弹出窗口询问是否继续

该游戏可以用于自测指法,在规定时间内正确字符数越多,则指法越好。

3.2.2实现步骤

       1)搭建程序框架

Ø  新建一个空的工程,工程名称Finger;

Ø  将colorConsole.h(附件1)和colorConsole.cpp(附件2)拷贝到工程当前目录,并添加到工程中;

Ø  新建一个主文件main.cpp,将#include “colorConsole.h”代码添加到main.cpp中。

2)代码实现

Ø  辅助变量

const int TOP = 4;

const int LEFT = 10;

const int RIGHT = 62;

const int BOTTOM = 20;

const int TIME = 60;

char ch[5][40]={0};  //产生5行40列随机字符

Ø  六个辅助函数

1、void init (HANDLE handle)

输入参数:输出屏幕:handle

输出参数:无

功    能:初始化界面

2、void randCharacter (HANDLE handle)

输入参数:输出屏幕:handle

输出参数:无

功    能:产生5行40列随机的字符

3、void stat (HANDLE handle)

输入参数:输出屏幕:handle

输出参数:无

功    能:统计正确的字符数,并计时。

4、void clearScreem (HANDLE handle)

输入参数:输出屏幕:handle

输出参数:无

功    能:清屏,重新开始练习

5、int GetTime (HANDLE handle)

输入参数:输出屏幕:handle

输出参数:无

功    能:计算练习指法的时间

6、void WinOK (HANDLE handle)

输入参数:输出屏幕:handle

输出参数:无

功    能:确认对话框

Ø  主函数

功能:检测按键,根据不同的按键统计,算法思想如下面的为代码所示。

void main()

{

屏幕初始化;

  

       窗口初始化;

       产生随机字符;

  

     输出菜单提示;

      

       while(1)  //测试开始

       {

              统计正确/错误字符数

       loop:

              一次测试结束,询问是否继续

        if(否)

           程序停止运行;

              else if(是)

              {

                     清屏;

                     重新产生随机字符

              }

        else

           goto loop;

       }    

} //测试结束

3)程序编译调制运行

       不需要额外的设置,常规调试运行即可。

4、实习要求

4.1基本要求

4.1.1、内容要求

作品的内容可以是下面4种中的任意一种:

Ø  可以制作一个小游戏,比如俄罗斯方块、贪吃蛇、时钟、投筛子等;

Ø  可以制作一个课件,比如模拟汉诺塔游戏的过程;

Ø  可以制作一个管理系统,比如学生成绩管理、学生基本信息管理等;

Ø  其它你认为有兴趣的作品。

4.1.2、作品功能要求

    基本要求:  

Ø  能够应用文件流进行磁盘文件的读写:比如游戏分数的保存等

Ø  能够应用面向对象的设计思想和方法

Ø  能够使用多文件结构

Ø  能够播放音频文件,增强游戏的效果

4.2可选课题

    鉴于部分同学对于Windows编程非常感兴趣,并且C++基础较好,尝试完成下面的课题(选作可选课题中的任何一个,就不需要在做基本要求中的内容了)。

4.2.1、完成一个简单计算器

简单计算器的界面如图3所示,功能可以参见Windows操作系统的附件中的计算器的功能,能够完成基本的算术运算。

3 简单计算器

研究步骤:

1)  学习Windows编程框架,了解消息机制

2)  学习各种控件的使用,尤其是对话框、按钮、编辑框等

3)  学习菜单的使用

4)  如果时间允许,可以将简单计算器,扩展为如图4所示的科学计算器。

4 科学计算器

4.2.2、完成一个简单的信息管理系统

简单的信息管理系统主要能够完成对信息的读取、增、删、改、查、保存等功能,比如一个简单学生信息管理系统界面如图4所示,基本功能如下:

(1)读取文件中的学生信息,能够按照学生类别显示;

(2)能够增加、删除、修改学生信息

(3)能够按照学号精确查询学生信息

(4)能够统计不同类别、不同性别的学生人数

(5)更新后的学生信息数据保存在文件中

5 简单学生管理系统

研究步骤:

1)  学习Windows编程框架,了解消息机制

2)  学习各种控件的使用,尤其是对话框、按钮、编辑框等

3)  学习菜单的使用

4)  学习IO流的使用

5)  可以对各种信息进行管理,比如学生成绩管理系统、通讯录、图书管理系统等

4.2.3、完成一个画图软件

简单的画图软件的形式和功能可以参考Windows操作系统中“附件”里的画图软件,如图6所示。

6 画图软件

该软件能够完成如下基本功能:

(1)能够绘制直线、曲线;

(2)能够绘制各种形状,比如矩形、椭圆形等

(3)能够绘制各种实心形状,比如实心矩形、实心椭圆等

(4)能够添加文字

(5)能够设置不同的绘制颜色

研究步骤:

1)  学习使用单文档的(Single document)程序结构

2)  学习使用MFC中CDC类系列的使用,包括CPen类、CBrush类等

3)  学习使用鼠标消息处理函数的使用

4)  有能力的同学可以扩展画图软件的功能,比如能够显示磁盘上已有的图片文件、能够具备“橡皮擦”的功能,进行擦除、能够保存绘制后的图形等等

4.2.4、自选题目

学生根据自身的情况,可以自由选择感兴趣的题目,要求一要写出具体的想法以及预期完成的结果,二要征得实验教师的同意。

下面给出一些题目可供参考。

1)  可以实现一个简单的Windows游戏,比如:碰碰球游戏,游戏者可以控制木板的左右移动,迎接下落的小球,小球与模板碰撞后弹起,反复运行,直到小球下落后木板无法接起,游戏结束。参考程序如图7所示。

7 碰碰球游戏

2)  可以实现Josephus问题的求解,Josephus问题是:n个小孩围成一圈,任意假定一个数m,从第一个小孩起,顺时针方向数,每数到第m个的小孩时,该小孩便离开。小孩不断离开,圈子中的人数不断减少,最后一个离开的小孩是胜利者,请问最后一个离开的小孩的编号?实现可参考程序如图8所示。

8 Josephus问题的求解

3)  可以学习使用OpenGL等工具库实现一个动画制作,题目任意。

4)  可以学习数据库的使用,完成一个基于数据库的信息管理系统。

5)  可以学习Socket类的使用,完成一个基于网络的应用,比如一个即时消息系统、文件传输系统等。

6)  可以学习如何实现一个屏幕保护程序

7)  可以学习任何你感兴趣的相关程序设计的知识,完成一个完整的作品。

5、参考资料

可以参考以下资料。

1)  vc经典教程.chm  电子版

2)  C++到Visual C++ 6.0精彩100例,应甫臣、刘迎辉编,《电脑爱好者杂志出版社》,20##年

3)  Visual C++ 课程设计案例精选,严华峰等编著,《中国水利水电出版社》,20##年

5、实验报告

    实验报告由4部分组成,每部分的格式和要求如下:

    第一部分:封皮,包括作品名称,学生姓名、班级、班内序号、学号。

    第二部分:作品功能说明,包括作品界面、使用方法、程序执行效率等。

第三部分:程序设计说明,包括

1.程序总体框架或流程图,程序实现过程中的重点和难点

2.代码分析

如果使用面向过程的设计方法,包括功能模块划分、每个模块完成的功能、各关键函数之间的调用关系、关键函数的实现思路;

    如果使用面向对象的设计方法,包括关键类的功能说明、各类之间的关系、类中关键函数的实现思想;

3.调试方法,以及调试中的问题及其解决方法

    第四部分:总结,包括学习体会,程序目前的功能缺陷及下一步改进的思路,对于本次实习的意见等。

6、时间安排

本次计算机实习一共3周,从8月27日开始,至9月11日结束,期间集中授课两次,每位同学上机8次,每次4个小时,共32个小时。

    集中授课主要讲解计算机实习需要的相关知识,以及上机过程中出现的问题。上机期间会有辅导教师随时现场辅导。

附件1

文件ColorConsole.h

#include <windows.h>

#include <iostream>

using namespace std;

                                                                                                                        

HANDLE initiate();

BOOL textout(HANDLE hOutput,int x,int y,WORD wColors[],int nColors,LPTSTR lpszString);

附件2

文件colorConsole.cpp

#include "colorConsole.h"

HANDLE initiate()

{

       HANDLE hOutput;

       hOutput = GetStdHandle(STD_OUTPUT_HANDLE);

       return hOutput;

}

BOOL textout(HANDLE hOutput,int x,int y,WORD wColors[],int nColors,LPTSTR lpszString)

{

    DWORD cWritten;

    BOOL fSuccess;

    COORD coord;

  

       coord.X = x;              // start at first cell

    coord.Y = y;              //   of first row     

    fSuccess = WriteConsoleOutputCharacter(

        hOutput,              // screen buffer handle

        lpszString,           // pointer to source string

        lstrlen(lpszString),  // length of string

        coord,                // first cell to write to

        &cWritten);           // actual number written

    if (! fSuccess)

        cout<<"error:WriteConsoleOutputCharacter"<<endl;

       

       for (;fSuccess && coord.X < lstrlen(lpszString)+x; coord.X += nColors)

    {

        fSuccess = WriteConsoleOutputAttribute(

            hOutput,          // screen buffer handle

            wColors,          // pointer to source string

            nColors,                // length of string

            coord,            // first cell to write to

            &cWritten);       // actual number written

    }

    if (! fSuccess)

           cout<<"error:WriteConsoleOutputAttribute"<<endl;

       return 0;

}

附件3

主文件 main.cpp

#include <conio.h>

#include <stdlib.h>

#include <time.h>

#include "colorConsole.h"

//投筛子

void rolldice(HANDLE hOutput,int n,int col,int row,WORD wColors[]);

void main(void) 

{

       HANDLE handle;

       WORD wColors[1];

       int row,col;

       //初始化

handle = initiate();

       //生成6个不同骰子

       wColors[0]=FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY;

       row=col=2;

       for (int i=0;i<6;i++)

       rolldice(handle,i+1,col,row+6*i,wColors);

       //打印屏幕底部菜单

    WORD wMenuColors[1];

       wMenuColors[0]=FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY;

       textout(handle,1,24,wMenuColors,1, "游戏规则:");

       textout(handle,11,24,wMenuColors,1,"投掷开始/结束=ENTER;");

       textout(handle,34,24,wMenuColors,1,"更换游戏者=空格;");

       textout(handle,53,24,wMenuColors,1,"退出=q.");

       bool flag=false;

       int count=1;

       int sum=0;

       //随机数的种子

       srand( (unsigned)time( NULL ));

       col=15;

       row=8;

       //游戏开始

       while(1)

       {

             if (_kbhit())

              {

                     int ch=_getch();

                     if (ch==13)

            {

                            flag=!flag;

                   if (!flag)

                            {

                                   wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;

                                rolldice(handle,i+1,row,col,wColors);

                                   //记录游戏者和点数

                                   char buf[20];

                                   itoa(count,buf,10);

                    textout(handle,1,13+2*count,wMenuColors,1,buf);

                                   textout(handle,3,13+2*count,wMenuColors,1,"点数:");

                                   sum+=i+1;

                                   itoa(sum,buf,10);

                                   textout(handle,9,13+2*count,wMenuColors,1,buf);

                            }

                     }

                     else if (ch==32)//更换游戏者

                     {

                            sum=0;

                            count++;

                     }

                     else if (ch=='q' || ch=='Q')

               break;

              }

        if (flag)//随机投筛子

              {

                     i=rand() % 6;

                     wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;

            rolldice(handle,i+1,row,col,wColors);

                     Sleep(100);

                     wColors[0]=0;

                     rolldice(handle,i+1,row,col,wColors);

              }

       }

}

void rolldice(HANDLE hOutput,int n,int col ,int row,WORD wColors[])

{

       switch(n){

       case 1:    textout(hOutput,row+1,col+1,wColors,1,"●");

               break;

       case 2:     textout(hOutput,row+1,col,  wColors,1,"●");

               textout(hOutput,row+1,col+2,wColors,1,"●");

               break;

       case 3:     textout(hOutput,row,  col+2,wColors,1,"●");

                  textout(hOutput,row+1,col+1,wColors,1,"●");

                     textout(hOutput,row+2,col,  wColors,1,"●");

               break;

       case 4:     textout(hOutput,row,  col,  wColors,1,"●");

                  textout(hOutput,row,  col+2,wColors,1,"●");

                     textout(hOutput,row+2,col,  wColors,1,"●");

                     textout(hOutput,row+2,col+2,wColors,1,"●");

               break;;

       case 5:     textout(hOutput,row,  col,  wColors,1,"●");

                  textout(hOutput,row,  col+2,wColors,1,"●");

            textout(hOutput,row+1,col+1,wColors,1,"●");

                     textout(hOutput,row+2,col,  wColors,1,"●");

                     textout(hOutput,row+2,col+2,wColors,1,"●");

               break;

       case 6:     textout(hOutput,row,  col,  wColors,1,"●");

                  textout(hOutput,row,  col+1,wColors,1,"●");

            textout(hOutput,row,  col+2,wColors,1,"●");

                  textout(hOutput,row+2,col,  wColors,1,"●");

                     textout(hOutput,row+2,col+1,wColors,1,"●");

                     textout(hOutput,row+2,col+2,wColors,1,"●");

               break;

    default:cout<<"投掷骰子失败!"<<endl;     

       }

}

更多相关推荐:
车床实习报告

普通车床岗位实习报告一目的生产性岗位实习是人才培养方案中的重要组成部分是理论联系实际的重要实践教学环节是技术应用能力综合训练和提高的重要阶段生产性岗位实习的主要目的是使学生熟悉企业的组织及整体运作模式掌握普通车...

普通车床实习报告

普通车床岗位实习报告普通车床岗位实习报告一目的生产性岗位实习是人才培养方案中的重要组成部分是理论联系实际的重要实践教学环节是技术应用能力综合训练和提高的重要阶段生产性岗位实习的主要目的是使学生熟悉企业的组织及整...

车床实习报告

实习目的1、学生初步使用和操作车床,学会独立操作车床。2、了解车床各手柄的作用和操作方法。3、初步掌握车刀基本知识,了解车刀角度对车削加工的影响,基本掌握车刀刃磨的基本要领。实习材料车床、外圆车刀、游标卡尺等实…

车床实习报告 毕业报告

毕业实习报告实习报告题目关于在厦门东亚机械有限公司从事操作员实习报告学生姓名许泽洪专业机电一体化学号111012105系别光电与机电工程系班级机电一体化【1】班指导教师林新英职称助教闽南理工学院教务处制20xx…

车床实习报告

车床实习报告车床gt实习报告一我们一般采取将卡爪车掉一部分便于工件定位同时还利用在卡盘中植入专用垫块以便于保证端面尺寸通过钻床的实习我基本掌握了钻床的基本操作和钻头磨削的基本知识在给工件打中心孔时很容易偏离工件...

车床的实习报告

车床实习报告关于在福建佳通轮胎公司进行车床的实习报告一、实习目的1,在即将毕业之前,能有机会去福建佳通轮胎公司实训是一个很难得的机会。在佳通实习主要是为了了解车床的工作原理以及其实际操作,在实训中我们要掌握操作…

车床、铣床、数控机床生产实习报告

生产实习报告学院土木建筑工程学院专业工程力学081班指导老师XXX学生姓名XXX学号XXXXXXX20xx年7月16日一实习目的1了解车床铣床及相关安全知识2熟悉车床的基本操作方法常见零件的生产工艺及流程3注意...

金属切削机床工程实践报告机制1106 25 宿玉铅

承德石油高等专科学校机械工程系20xx级金属切削机床工程实践报告承德石油高等专科学校机械工程系金属切削机床工程实践报告姓名宿玉铅专业班级机制1106班学号25机械工程系20xx年3月30日1承德石油高等专科学校...

数控机床实习报告

1数控车床的工作原理与组成数控车床与普通车床一样也是用来加工零件旋转表面的一般能够自动完成外圆柱面圆锥面球面以及螺纹的加工还能加工一些复杂的回转面如双曲面等车床和普通车床的工件安装方式基本相同为了提高加工效率数...

机床厂实习报告

机加车间实习报告20xx108生产实习是机械专业学习的一个重要环节是将理论知识与实际相结合的一个很好的机会对强化我们所学到的知识和检测所学知识的掌握程度有很好的帮助为期两个月的生产实习在第一机加工车间实习当中我...

CA6140机床拆装实训报告

机床拆装实训报告姓名班级学号

实习报告

CA6140普通机床拆装实习一机床拆装实习的性质任务和目的性质机床拆装训练是机制专业学生必修的实践教学环节是机械制造工艺学金属切削机床等课程的前提是机械类学生专业技术训练的重要组成部分任务对普通机床进行拆卸观察...

车床实习报告(39篇)