当前位置:文档之家› mfc飞机大战课程设计文档

mfc飞机大战课程设计文档

mfc飞机大战课程设计文档
mfc飞机大战课程设计文档

程序设计综合实践报告

信息科学与工程学院

年月日

目录

1. 概述 (3)

2. 相关技术 (3)

2.1 建立基类CGameObject (3)

2.2 透明图片贴图 (4)

2.3 CObList链表 (4)

2.4获得矩形区域函数 (4)

2.5发射子弹或导弹函数 (4)

2.6 添加爆炸效果技术 (5)

2.7对于对象的绘制以及越出边界的处理 (5)

2.8字体的个性化输出函数 (6)

2.9获取键盘操作函数 (6)

2.10用键盘控制战机的移动 (6)

2.11 设置定时器 (7)

2.12 双缓冲技术 (8)

2.13内存释放技术 (8)

3. 需求分析 (8)

4. 总体设计与详细设计 (8)

4.1 系统模块划分 (9)

4.2 主要功能模块 (11)

4.3 扩展功能设计思路 (11)

4.4 软件结构设计体会 (12)

5. 编码实现 (12)

5.1游戏初始创建 (12)

5.2游戏结束处理 (13)

5.3 背景设定 (13)

5.4 创建游戏对象 (14)

5.4 战机技能的创建 (15)

5.5 发射模块使用(以发射战机导弹为例,敌机、BOSS发射子弹,乘客逃离客机类似)

(16)

5.6碰撞检测(以战机与敌机相撞为例,导弹炸毁敌机、子弹命中战机与战机、BOSS

或敌机相撞与战机吃到各种道具等情况类似) (17)

5.7 定时器的创建 (18)

5.8 难度的事件处理程序的创建 (18)

6.测试情况说明。 (19)

7. 实训中遇到的主要问题及解决方法 (19)

8. 实训收获与体会 (20)

1. 概述

飞机大战游戏是基于Windows桌面的射击类游戏,其需要实现的功能为:实现游戏对象的爆炸特效、文字提示功能和界面背景特效,其主要是遵循一定的游戏规则进行游戏。

游戏中的主要角色可分为如下几个基本部分:战机、敌机(普通敌机、小BOSS和大BOSS)、战机的导弹、敌机的子弹。其主要遵循的游戏规则为:战机数量为1,由玩家通过键盘控制(方向键控制位置、空格键发射导弹)战机;导弹释放存在间隔,有一定的运行速度;导弹遇到敌机发生爆炸,敌机被炸毁,导弹消失,玩家得分;由计算机控制敌机自动向战机发动攻击;敌机数量可以根据难度大小随机生成,计算机生成敌机时随机选择类别;敌机从游戏区域的上端进入,左右位置随机;普通敌机被导弹攻击即死,作为进入第二关的标志的小BOSS的血量稍多一些但是数量较多发射子弹的频率也较高,第三关中的大BOSS不仅比小BOSS血量更厚而且它发射伞状的子弹;敌机行驶期间,不左右移动,不反向移动;运行线路为直线,方向为从上至下,不可左右移动。纵向由发射位置起至游戏区域结束;敌机子弹遇到战机时发生爆炸,战机被炸毁,子弹消失,游戏结束。

游戏最后根据功能要求,在大BOSS死亡后会生成客机,被击中引擎后改变飞行轨迹,击中油箱后爆炸,战机还要拯救随机从客机上跳机的乘客。

2. 相关技术

此次实训的飞机大战游戏其中的技术主要就是一些函数、双向链表的使用、内存释放和双缓冲技术。

2.1建立基类CGameObject

建立基于所有类的父类CGameObject,其中定义了两个纯虚函数作为继承CGameObject类的其他类的某些声明,例如://绘制对象

virtual BOOL Draw(CDC* pDC,BOOL bPause)=0;

还有//获得矩形区域

virtual CRect GetRect()=0;

另外还定义了//获得左上角坐标

CPoint GetPoint(){return m_ptPos;}以及

//加载图像

static BOOL LoadImage(CImageList& imgList,UINT bmpID,COLORREF crMask,int cx,int cy,int

nInitial);

2.2 透明图片贴图

此次实训中用于贴图的函数:

static BOOL LoadImage(CImageList& imgList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial);//此函数主要用于将图片放入图像链表imageList中。

m_Images.Draw(pDC,0,m_ptPos,ILD_TRANSPARENT); //此函数主要是讲m_Images链表中的图像显示在pDC这个句柄中。ILD_TRANSPARENT表示是透明贴图。其中主要就是CImageList 图像列表。它是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。

2.3 CObList链表

CObList m_ObjList[11];//主要是定义一个CObList类的一个链表对象用于存储所有此种相关的对象,易于后续的添加删除和提取数据。

POSITION bPos1=NULL,bPos2=NULL;//定义指针

bPos1=m_ObjList[enBall].GetHeadPosition();//指针读取头结点

CBall* pBall = (CBall*)m_ObjList[enBall].GetNext(bPos1);//指针读取下一个节点

2.4获得矩形区域函数

CRect mRect = m_pMe->GetRect();

CRect bRect = pBall->GetRect();

CRect tmpRect;

tmpRect.IntersectRect(&bRect,mRect)//判断矩形是否有交接

CRect GetRect(){

return CRect(m_ptPos,CPoint(m_ptPos.x+ENEMY_HEIGHT,m_ptPos.y+ENEMY_HEIGHT));

}//例子为获得敌机的矩形区域

2.5发射子弹或导弹函数

BOOL CMyPlane::Fired()

{

if(m_nWait==0)

return TRUE;

else

return FALSE;

}其中的m_nWait未定义的发射延时变量,即在Draw中m_nWait++;

if(m_nWait>3)

m_nWait=0;可以控制子弹定时发射

2.6 添加爆炸效果技术

其实是一种链表的灵活运用,m_ObjList[enExplosion].AddTail(new CExplosion(mRect.left, mRect.top));设置一个放有爆炸对象的链表,在使用的时候直接NEW 一个爆炸对象添加到该链表中方便又实用。

2.7对于对象的绘制以及越出边界的处理

//绘制导弹、爆炸、敌机、子弹

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

{

POSITION pos1,pos2;

for( pos1 = m_ObjList[i].GetHeadPosition(); ( pos2 = pos1 ) != NULL; )

{

CGameObject* pObj = (CGameObject*)m_ObjList[i].GetNext( pos1 );

if(!pObj->Draw(pMemDC,FALSE))

{

m_ObjList[i].RemoveAt(pos2);

delete pObj;

}

}

}对于所有链表进行遍历,定义Draw函数,并在Draw函数中对于越出边界的对象在FALSE是进行m_ObjList[i].RemoveAt(pos2);删除。

实例:对于敌机的绘制

BOOL CEnemy::Draw(CDC* pDC,BOOL bPause)

{

m_nWait++;

if(m_nWait>20)

m_nWait=0;

if(!bPause)

{

m_ptPos.y = m_ptPos.y + m_nMotion * m_V;

}

if(m_ptPos.y > GAME_HEIGHT+ENEMY_HEIGHT )

return FALSE;

if(m_ptPos.y < -ENEMY_HEIGHT)

return FALSE;

m_Images.Draw(pDC,m_nImgIndex,m_ptPos,ILD_TRANSPARENT);

return TRUE;

}

2.8字体的个性化输出函数

CRect tc;

CFont nfont;

HFONT oldfont;

pMemDC->SetBkMode(TRANSPARENT);

nfont.CreatePointFont(280, _T("正楷"), pMemDC);

oldfont = (HFONT)pMemDC->SelectObject(nfont);

pMemDC->SetTextColor(255 * 256);

pMemDC->SetBkMode(TRANSPARENT);//设置绘图dc的背景模式为透明模式pMemDC->SetTextAlign(TA_CENTER); //设置基准点与限定矩形的中心水平对齐pMemDC->TextOut(GAME_WIDTH / 10, GAME_HEIGHT / 8, _T("SCORE:")); CString SCORE_STR;

SCORE_STR.Format(_T("%d"), score);

pMemDC->TextOut(GAME_WIDTH / 10+100, GAME_HEIGHT / 8, SCORE_STR); 2.9获取键盘操作函数

//获得键的状态1->down

int GetKey(int nVirtKey)

{

return (GetKeyState(nVirtKey) & 0x8000)? 1 : 0;

}

2.10用键盘控制战机的移动

//检测四个方向键,移动战机

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

{

int nMeMotion=0;

m_pMe->SetVerMotion(0);

m_pMe->SetHorMotion(0);

nMeMotion = GetKey(VK_UP);

if(nMeMotion==1)

m_pMe->SetVerMotion(1);

nMeMotion = GetKey(VK_DOWN);

if(nMeMotion==1)

m_pMe->SetVerMotion(-1);

nMeMotion = GetKey(VK_RIGHT);

if(nMeMotion==1)

m_pMe->SetHorMotion(1);

nMeMotion = GetKey(VK_LEFT);

if(nMeMotion==1)

m_pMe->SetHorMotion(-1);

}

在MyPlane类中定义了:

int m_nHorMotion;//飞机水平运行方向0->静止,1->右 -1->左

int m_nVerMotion;//飞机垂直运行方向0->静止,1->上 -1->下

void SetHorMotion(int nMotion)

{

m_nHorMotion = nMotion;

}

int GetHorMotion() const

{

return m_nHorMotion;

}

void SetVerMotion(int nMotion)

{

m_nVerMotion = nMotion;

}

int GetVerMotion() const

{

return m_nVerMotion;

}

2.11 设置定时器

定时器告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。SetTimer(1,30,NULL); //设置每30毫秒刷新一次

通过定时器可以控制游戏对象的自行移动以及某些定时控制的实现。

2.12 双缓冲技术

关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟的区域,然后再一次性的将所有的虚拟缓存中的东西都放入实在的存储器

中。CDC*pDC=GetDC(); CDC dcMem;

dcMem.CreateCompatibleDC(pDC);//依附窗口DC创建兼容内存DC 依次,所有的图像文字均存入dcMem中,然后一次性的通过pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);将内存上的图像拷贝到前台。

dcMem.DeleteDC();

bmp.DeleteObject();

ReleaseDC(pDC);

dcMem.FillSolidRect(rc,RGB(255,255,255));

2.13内存释放技术

在此次实训项目中有太多的对象的生成和运用,造成了内存的极度的紧张,当游戏进行到一定的程度的时候就会出现内存溢出现象。解决此问题的技术就是内存释放。内存释放技术的实现主要是通过释放各个满足一定条件的对象和链表来实现的,

//删除子弹

m_ObjList[enBOSSBomb].RemoveAt(bbPos2);//用于删除指针

delete pBomb;//用于删除对象

3. 需求分析

3.1功能需求分析

4.总体设计与详细设计

有三个主要的部分组成,分别是规则子系统、游戏对象子系统。

系统的总体结构图如下:

该子系统主要是实现飞机大战各项游戏规则。实现了需求中的游戏规则。

组成结构如下图所示:

这个系统包含1个重要的模块,人工智能,它实现了敌机对战机的攻击以及游戏对象碰撞监测规则,其实实现的是代表计算机方玉玩家进行对战。

?攻击规则

?敌机在战机上方或下方时发射炸弹,炸弹从下至上或从上至下射向战

?攻击时发出声音

?碰撞规则

?导弹或炸弹本身的矩形区域和敌机或战机的矩形区域相交时,表示导

弹或炸弹射中了战机或敌机

?战机被炸毁,游戏结束。

?敌机被炸毁,战机10分,出现文字提示。

?爆炸时产生声音

游戏对象子系统包含了各个游戏对象的实现,它实现了需求中的部分规则以及游戏特效。

本子系统的组织结构图如下:

?应用程序对象

●游戏程序的加载

●游戏对象的绘制

●游戏规则的调用

●玩家的键盘事件获取

?游戏对象

●敌机图像加载

●敌机贴图

●位置存储

4.1 系统模块划分

其简单类图如下:

4.2 主要功能模块

主要功能模块主要就是那些类的功能模块,主要有:

1、人工智能模块用来定义人机对战规则。

2、应用程序对象模块用来对游戏程序的加载、游戏对象的绘制、游戏规则的调用、玩家的键盘事件获取。

3、游戏对象模块是各个游戏对象的抽象父类。

4、战机对象模块是战机类,用来完成战机图像加载、贴图、位置存储。

5、敌机对象模块时用来完成敌机图像加载、贴图、位置存储。

6、导弹对象模块时用来完成战机导弹图像加载、贴图、位置存储。

7、爆炸对象模块时用来完成爆炸效果图像加载、贴图、位置存储。

8、敌机子弹对象模块时用来完成敌机子弹图像加载、贴图、位置存储。

9、文字对象模块时用来完成文字的图像加载、贴图、位置存储。

10、敌机、子弹和战机、导弹的碰撞检测模块。

11、背景添加模块。

12、游戏关卡游戏难易度设置和游戏关卡选择。

13、游戏得分和生命值控制以及游戏关卡进入控制和游戏结束。

4.3 扩展功能设计思路

本次实训由于时间问题还有些扩展功能可进行增加,主要有:

1给游戏增加敌机类型,丰富画面,增加难度。

2、给游戏进行增加boss,通过boss的添加进行游戏的关卡和难度的更加进一步的提升。

主要思路是:再增加一个类让它继承敌机类,然后再敌机类的基础上进行增加其生命值

和被打死后的得分。当战机得分到达一定的值以后boss出现并进行和敌机一个队伍发射另类的子弹进行攻击战机。

3、完善暂停/重新开始/继续游戏等功能。

4、设置关卡,关卡越往后,难度越大,增加游戏的挑战性。

5、增添多种游戏道具产生各种效果从而增加游戏的趣味性。主要思路:可以设计增加新的道具类并让其继承敌机类在满足一定条件时随机从游戏上方落下然后检测道具与战机的碰撞,然后实现道具功能即可。

6、增加一些战机的技能以及男足这些技能所需的条件例如蓝值、能量等模块。

4.4 软件结构设计体会

个人认为可以将敌机类、导弹类、道具类等继承CGameObject类的所有类设计成大体规格相同的形式,然后对于View中的函数等模块加以注释区分,将类结构明显的突出出来以便于扩充新功能,其次若要改为通用对战类游戏,只需改变贴图,某些函数的参数使移动轨迹改变,然后对游戏框架进行合理的,灵活的运用。

5. 编码实现

5.1游戏初始创建

BOOL CPlaneGameView::InitGame()

{

CRect rc;

GetClientRect(rc);

//产生随机数种子

srand( (unsigned)time( NULL ) );

//建立设备DC

m_pDC = new CClientDC(this);

//建立内存DC

m_pMemDC = new CDC;

m_pMemDC->CreateCompatibleDC(m_pDC);

//建立内存位图

m_pMemBitmap = new CBitmap;

m_pMemBitmap->CreateCompatibleBitmap(m_pDC,GAME_WIDTH,GAME_HEIGHT);

//将位图选入内存DC

m_pMemDC->SelectObject(m_pMemBitmap);

CMyPlane::LoadImage();

CEnemy::LoadImage();

CBomb::LoadImage();

CBall::LoadImage();

CExplosion::LoadImage();

CBOSS1::LoadImage();

CBOSS2::LoadImage();

CBOSSBomb::LoadImage();

CAirLiner::LoadImage();

CPassenger::LoadImage();

CBallProp::LoadImage();

CBLOODPROP::LoadImage();

//产生主角(战机)

m_pMe = new CMyPlane;

//启动游戏

SetTimer(1,30,NULL);

return TRUE;

}

5.2游戏结束处理

void CPlaneGameView::StopGame()

{

delete m_pMe;

delete m_pMemDC;

delete m_pDC;

delete m_pMemBitmap;

}

5.3 背景设定

bool CPlaneGameView::DrawBlack(CDC* pDC, UINT bmpID, CRect DestRect, int pos) {

CBitmap bitmap;

bitmap.LoadBitmap(bmpID);

BITMAP BitMap;

bitmap.GetBitmap(&BitMap);

CDC dcMem;

dcMem.CreateCompatibleDC(pDC);

dcMem.SelectObject(&bitmap);

pDC->StretchBlt(DestRect.left, DestRect.top, DestRect.Width(),

DestRect.Height(), &dcMem, 0, -pos, BitMap.bmWidth, BitMap.bmHeight, SRCCOPY);

pDC->StretchBlt(DestRect.left, DestRect.top, DestRect.Width(),

DestRect.Height(), &dcMem, 0, BitMap.bmHeight - pos, BitMap.bmWidth,

BitMap.bmHeight, SRCCOPY);

return true;

}

void CPlaneGameView::UpdateFrame(CDC* pMemDC)

{

//绘制背景

CRect rect;

CRect rc;

GetClientRect(&rect);

DrawBlack(pMemDC, IDB_BEIJING3, rect, pos);

}

在定时器中可以实现背景的滚动

TimerCount++;

pos++;

if (pos > 600) //背景宽度为640,故640为一个周期

pos = 0;

5.4 创建游戏对象

//绘制我方战机

m_pMe->Draw(m_pMemDC, FALSE);

static int nCreator = rand() %5+10;

//随机产生敌机

if (nCreator <= 0/* && score<=20*/)

{

nCreator = rand() % 5 + (int)25-level;

m_ObjList[enEnemy].AddTail(new CEnemy);

}

nCreator--;

//添加boss1

if (score>10&&ctr1<0)

{

ctr1 = rand() % 5 + 40;

m_ObjList[enBOSS1].AddTail(new CBOSS1);

}

ctr1--;

//添加boos2

if (score>50 &&ctr13<0)

{

m_ObjList[enBOSS2].AddTail(new CBOSS2);

ctr13 = 200;

}

ctr13--;

//添加客机

if (score>100&&ctr11<0)

{

m_ObjList[enAir].AddTail(new CAirLiner);

ctr11 = 300;

}

ctr11--;

//添加子弹包

if (BULLET <= 100 && ctr12 < 0)

{

ctr12 = rand() % 5 + 40;

m_ObjList[enBallProp].AddTail(new CBallProp);

}

ctr12--;

//添加生命包

if (BLOOD <= 20 && ctr12 < 0)

{

ctr12 = rand() % 5 + 40;

m_ObjList[enBLOODPROP].AddTail(new CBLOODPROP);

}

ctr12--;

5.4 战机技能的创建

//全屏秒杀

if (GetKey('C') == 1 )//按下了C键

{

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

{

POSITION ePos1 = NULL, ePos2 = NULL;

for(ePos1 = m_ObjList[enEnemy].GetHeadPosition(); (ePos2 = ePos1) != NULL;)

{

CEnemy* pEnemy = (CEnemy*)m_ObjList[enEnemy].GetNext(ePos1);

CRect mRect = pEnemy->GetRect();

CRect tmpRect;

score++;

//添加爆炸效果

m_ObjList[enExplosion].AddTail(

new CExplosion(mRect.left, mRect.top)

);

//删除敌机

m_ObjList[enEnemy].RemoveAt(ePos2);

delete pEnemy;

break;

}

POSITION bbPos1 = NULL, bbPos2 = NULL;

for (bbPos1 = m_ObjList[enBOSS1].GetHeadPosition(); (bbPos2 = bbPos1) != NULL;)

{

CBOSS1* pBOSS = (CBOSS1*)m_ObjList[enBOSS1].GetNext(bbPos1);

CRect mRect = pBOSS->GetRect();

CRect tmpRect;

score+=10;

//添加爆炸效果

m_ObjList[enExplosion].AddTail(

new CExplosion(mRect.left, mRect.top)

);

//删除敌机

m_ObjList[enBOSS1].RemoveAt(bbPos2);

delete pBOSS;

break;

}

POSITION bPos1 = NULL, bPos2 = NULL;

for (bPos1 = m_ObjList[enBall].GetHeadPosition(); (bPos2 = bPos1) != NULL;)

{

CBall* pBall = (CBall*)m_ObjList[enBall].GetNext(bPos1);

CRect bRect = pBall->GetRect();

CRect tmpRect;

//删除子弹

m_ObjList[enBall].RemoveAt(bPos2);

delete pBall;

}

}

}

5.5 发射模块使用(以发射战机导弹为例,敌机、BOSS发射子弹,乘客逃离客机类似)

if(GetKey(VK_SPACE)==1&&BULLET>0)//按下了空格键

{

if(m_pMe!=NULL && m_pMe->Fired())

{

CPoint pt = m_pMe->GetPoint();

if (score<= 10)

{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, -1));

BULLET--;

}

else if (score > 10 && score <= 50){

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 10 + 5, pt.y + 10, 2));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30 + 5, pt.y + 10, 3));

BULLET -= 2;

}

else if (score > 50 && score <= 100){

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 10 + 5, pt.y + 10, 2));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, -1));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30 + 5, pt.y + 10, 3));

BULLET -= 3;

}

else if (score > 100 && score <= 150) {

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 0 + 5, pt.y + 10, 2));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 10 + 5, pt.y + 10, -1));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, -1));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 30 + 5, pt.y + 10, 3));

BULLET -= 4;

}

else if (score > 150){

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, 0));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, 1));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, 2));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, 3));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, 4));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 20 + 5, pt.y + 10, 5));

BULLET -= 5;

}

}

}

5.6碰撞检测(以战机与敌机相撞为例,导弹炸毁敌机、子弹命中战机与战机、BOSS或敌机相撞与战机吃到各种道具等情况类似)

///////////////////////////敌机与战机相撞

POSITION cPos1 = NULL, cPos2 = NULL;

for (cPos1 = m_ObjList[enEnemy].GetHeadPosition(); (cPos2 = cPos1) != NULL;)

CEnemy* Enemy = (CEnemy*)m_ObjList[enEnemy].GetNext(cPos1);

CRect bRect = Enemy->GetRect();

CRect tmpRect;

if (tmpRect.IntersectRect(&bRect, mRect))

{

score++;

//添加爆炸效果

m_ObjList[enExplosion].AddTail(

new CExplosion(mRect.left, mRect.top)

);

//删除子弹

m_ObjList[enEnemy].RemoveAt(cPos2);

delete Enemy;

if (m_pMe->isInvincible)

{

BLOOD--;

}

if (m_pMe->isInvincible &&BLOOD <= 0)

{

//删除战机

delete m_pMe;

m_pMe = NULL;

break;

}

}

}

5.7 定时器的创建

void CPlaneFightView::OnInitialUpdate()//此函数用于进行定时器的设定

void CPLANEBOMPView::OnTimer(UINT_PTR nIDEvent) //在此设定器中进行各种函数的实现和调用进行相应时间的刷新

5.8 难度的事件处理程序的创建

void CPlaneGameView::On32771()

{

// TODO: 在此添加命令处理程序代码

MyLevel dlg;

dlg.mlevel = level;

if (dlg.DoModal() == IDOK)

{

level = dlg.mlevel;

}

6.测试情况说明。

● 6.1主要模块测试情况(白盒)

模块1、碰撞检测模块测试

● 6.2 主要功能测试情况(黑盒)

7. 实训中遇到的主要问题及解决方法

此次实训中遇到的问题一共有五个,一个是C++的面向对象的思想和逻辑思路的还是没有掌握好,后来主要是通过向老师和同学进一步理解了些面向对象的思想和思路以及其好处。

其次就是一些关于C++的语法问题,例如静态成员和静态变量的声明问题,最后还是在同学那里理解到其不仅需要在头文件中声明,其在源文件中也是需要声明的,应为其在头文件中进行声明在源文件中不进行声明则表示其根本就没有被分配内存空间,致使出现错误。

还有就是在运行过程中经常发生中断,后来经过多次调试发现是链表的声明问题,有时候想当然的随便使用链表,结果发现还没有声明,解决后才发现在此次飞机大战中共用了11个链表,觉得对于链表的认识有了加强。

对于在碰撞检测中避免游戏对象多次删除的问题,虽然我没有遇到的,但是我觉的还是代码规范的问题,只要在使用完游戏对象后及时删除并对其进行检查应该就可以避免了。

开始战机以及敌机的导弹没有间隔的发出,后来通过控制m_nWait,来进行控制。

战机会移出界面,原因是没有设置边界,需要在绘制战机时判断战机位置,当位置大于

窗体边界时要进行判断,为战机位置赋值为窗体边界。

8. 实训收获与体会

对于c++的不熟悉导致对程序制作和运行的陌生,很多东西都是现学现用,还有很多问的同学才勉强解决。这次实训让我认识到,知识在于积累,平时不努力,临时是要付出代价的,以后应认真学习知识,不能临时抱佛脚。

java记事本课程设计论文附源码

设计题目:记事本课程设计 专业:电子信息科学与技术 班级:电子1202班 学号:20121210606 姓名:王鹏 2015 年7月

XXX学院本科学生课程设计任务书

摘要 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言。此次课程设计主要通过编写一个简单的记事本程序使我们深入理解并实践在本课程中所学的有关JAVA程序设计方面的语言基础、异常处理、事件处理、小应用程序以及图形用户界面设计等内容。此简易记事本程序,使用Java程序编写,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切等功能。该程序主要用到了Java swing和事件监听等。 关键词记事本程序,java语言,Java swing

目录 摘要 (1) 1 需求分析 (3) 1.1需求分析 (3) 1.2功能设计 (3) 2 概要分析 (4) 2.1概要设计思想 (4) 2.2程序运行界面 (4) 2.3程序模块说明 (4) 2.4流程图 (5) 2.5程序相关说明 (6) 3 程序详细设计与分析 (8) 3.1构建菜单栏及其下拉菜单 (8) 3.2“文件”菜单操作的事件监听 (8) 3.3“编辑”、“格式”等菜单的事件监听 (10) 3.4异常处理 (11) 4 测试分析 (12) 5 源程序清单 (15) 结论 (22) 参考文献 (23)

1 需求分析 1.1需求分析 现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的记事本程序。 1.2功能设计 本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面: 1、菜单中有“文件”,“编辑”,“格式”,“查看”,“帮助”五个主菜单。 2、“文件”有“新建”“打开”“保存”“另存为”“退出”五个子菜单:分别用于新建文件,打开文件,保存文件,另存文件,退出记事本。 3、“编辑”中有“撤销”“剪切”“复制”“粘贴”“全选”“时间/日期”六个字菜单:用于撤销操作,剪切文字,复制文字,粘贴文字。全部选择,插入日期、时间。 4、“格式”菜单中有“自动换行”和“字体”两个子菜单。 5、“查看”菜单只是显示状态栏。 6、“帮助”菜单中只有“关于记事本”子菜单,主要用于显示该程序的名字,版本等信息。

MFC课程设计报告一个简单的计算器应用程序样本

设计一个简单的计算器应用程序 一、设计目标与内容 1.了解Windows编程的基础知识, 掌握MFC应用程序的基本知识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识,设计一个简单的计算器应用程序, 实现基本的加、减、乘、除、求平方根, 求倒数等基本运算( 必须实现的功能) , 实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常见对数等基本运算( 这部分功能选做) 。 5.在程序中注意处理数据和运算符的输入, 计算结果的显示。二,设计要求 1.用VC++进行编码, 实现应用程序的功能。注重编码质量, 代码要有适当的注释; 2.提交设计报告一份( 课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献) 。

一个简单的计算器应用程序 总体设计 能够利用所学的基本知识,设计一个简单的计算器应用程序, 实现基本的加、减、乘、除、求平方根, 求倒数等基本运算( 必须实现的功能) , 实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常见对数等基本运算( 这部分功能选做) 。在程序中注意处理数据和运算符的输入, 计算结果的显示。 详细设计 ◆新建工程Counter 新建工程, 选择对话框应用程序。 ◆程序运行主界面

图2-1 在对话框内添加相应的控件, 分别给编辑框添加三个变量m_N1,m_N2和m_Result。 然后添加一个组合框, 在里面添加十二个单选按钮设置第一个单选按钮为组, 如图 图2-2 然后给对话框类添加一个int变量Operator用来作相应运算时的标记。 给控件添加相应的函数 1、给单选按钮添加相应的函数 void CCounterDlg::OnRadio1() { Operator=1; } void CCounterDlg::OnRadio2()

大学课程实验心得体会集锦

大学课程实验心得体会集锦 实验心得体会 在做测试技术的实验前,我以为不会难做,就像以前做物理实验一样,做完实验,然后两下子就将实验报告做完.直到做完测试实验时,我才知道其实并不容易做,但学到的知识与难度成正比,使我受益匪浅. 在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间.比如做应变片的实验,你要清楚电桥的各种接法,如果你不清楚,在做实验时才去摸索,这将使你极大地浪费时间,使你事倍功半.做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做.做实验时,老师还会根据自己的亲身体会,将一些课本上没有的知识教给我们,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛. 通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅. 实验心得体会 这个学期我们学习了测试技术这门课程,它是一门综合应用相关课程的知识和内容来解决科研、生产、国防建设乃至人类生活所面临的测试问题的课程。测试技术是测量和实验的技术,涉及到测试方法的分类和选择,传感器的选择、标定、安装及信号获取,信号调理、变换、信号分析和特征识别、诊断等,涉及到测试系统静动态性能、测试动力学方面的考虑和自动化程度的提高,涉及到计算

机技术基础和基于LabVIEW的虚拟测试技术的运用等。 课程知识的实用性很强,因此实验就显得非常重要,我们做了金属箔式应变片:单臂、半桥、全桥比较,回转机构振动测量及谱分析,悬臂梁一阶固有频率及阻尼系数测试三个实验。刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。但是我并没有气垒,在实验中发现问题,自己看书,独立思考,最终解决问题,从而也就加深我对课本理论知识的理解,达到了“双赢”的效果。 实验中我学会了单臂单桥、半桥、全桥的性能的验证;用振动测试的方法,识别一小阻尼结构的(悬臂梁)一阶固有频率和阻尼系数;掌握压电加速度传感器的性能与使用方法;了解并掌握机械振动信号测量的基本方法;掌握测试信号的频率域分析方法;还有了解虚拟仪器的使用方法等等。实验过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的工程素质和科学道德,例如团队精神、交流能力、独立思考、测试前沿信息的捕获能力等;提高了自己动手能力,培养理论联系实际的作风,增强创新意识。 实验体会 这次的实验一共做了三个,包括:金属箔式应变片:单臂、半桥、全桥比较;回转机构振动测量及谱分析;悬臂梁一阶固有频率及阻尼系数测试。各有特点。 通过这次实验,我大开眼界,因为这次实验特别是回转机构振动测量及谱分析和悬臂梁一阶固有频率及阻尼系数测试,需要用软件编程,并且用电脑显示输出。可以说是半自动化。因此在实验过程中我受易非浅:它让我深刻体会到实验前的理论知识准备,也就是要事前了解将要做的实验的有关质料,如:实验要求,实验内容,实验步骤,最重要的是要记录什么数据和怎样做数据处理,等等。虽然做实验时,指导老师会讲解一下实验步骤和怎样记录数据,但是如果自己没有一些基础知识,那时是很难作得下去的,惟有胡乱按老师指使做,其实自己也不知道做什么。

心得体会 机械设计课程设计小结

机械设计课程设计小结 课程设计实习小结 “机械制造技术基础课程设计实习小结 这次课程设计,由于理论知识的不足,再加上平时没有什么设计经验,一开始的时候有些手忙脚乱,不知从何入手。在老师的谆谆教导,和同学们的热情帮助下,使我找到了信心。现在想想其实课程设计当中的每一天都是很累的,其实正向老师说得一样,机械设计的课程设计没有那么简单,你想copy或者你想自己胡乱蒙两个数据上去来骗骗老师都不行,因为你的每一个数据都要从机械设计书上或者机械设计手册上找到出处。虽然种种困难我都已经克服,但是还是难免我有些疏忽和遗漏的地方。完美总是可望而不可求的,不在同一个地方跌倒两次才是最重要的。抱着这个心理我一步步走了过来,最终完成了我的任务。 十几天的机械原理课程设计结束了,在这次实践的过程中学到了一些除技能以外的其他东西,领略到了别人在处理专业技能问题时显示出的优秀品质,更深切的体会到人与人之间的那种相互协调合作的机制,最重要的还是自己对一些问题的看法产生了良性的变化. 在社会这样一个大群体里面,沟通自然是为人处世的基本,如何协调彼此的关系值得我们去深思和体会.在实习设计当中依靠与被依靠对我的触及很大,有些人很有责任感,把这样一种事情当成是自己的重要任务,并为之付出了很大的努力,不断的思考自己所遇到的问题.而有些人则不以为然,总觉得自己的弱势…..其实在生活中这样的事情也是

很多的,当我们面对很多问题的时候所采取的具体行动也是不同的,这当然也会影响我们的结果.很多时候问题的出现所期待我们的是一种解决问题的心态,而不是看我们过去的能力到底有多强,那是一种态度的端正和目的的明确,只有这样把自己身置于具体的问题之中,我们才能更好的解决问题. 在这种相互协调合作的过程中,口角的斗争在所难免,关键是我们如何的处理遇到的分歧,而不是一味的计较和埋怨.这不仅仅是在类似于这样的协调当中,生活中的很多事情都需要我们有这样的处理能力,面对分歧大家要消除误解,相互理解,增进了解,达到谅解…..也许很多问题没有想象中的那么复杂,关键还是看我们的心态,那种处理和解决分歧的心态,因为毕竟我们的出发点都是很好的. 课程设计也是一种学习同事优秀品质的过程,比如我组的纪超同学,人家的确有种耐得住寂寞的心态.确实他在学习上取得了很多傲人的成绩,但是我所赞赏的还是他追求的过程,当遇到问题的时候,那种斟酌的态度就值得我们每一位学习,人家是在用心造就自己的任务,而且孜孜不倦,追求卓越.我们过去有位老师说得好,有有些事情的产生只是有原因的,别人能在诸如学习上取得了不一般的成绩,那绝对不是侥幸或者巧合,那是自己付出劳动的成果的彰显,那是自己辛苦过程的体现.这种不断上进,认真一致的心态也必将导致一个人在生活和学习的各个方面做的很完美,有位那种追求的锲而不舍的过程是相同的,这就是一种优良的品质,它将指引着一个人意气风发,更好走好自己的每一步.

学生信息管理系统java课程设计含源代码完整版

学生信息管理系统j a v a 课程设计含源代码 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

JAVA程序设计课程设计报告 课题: 学生信息管理系统 姓名: 学号: 同组姓名: 专业班级: 指导教师: 1 2 1、功能模块划分 (3) 2、数据库结构描述 (4) 3、系统详细设计文档 (6) 4、各个模块的实现方法描述 (9) 5、测试数据及期望结果 (11)

一、系统描述 1、需求实现的功能 、录入学生基本信息的功能 学生基本信息主要包括:学号、姓名、年龄、出生地、专业、班级总学分,在插入时,如果数据库已经存在该学号,则不能再插入该学号。 、修改学生基本信息的功能 在管理员模式下,只要在表格中选中某个学生,就可以对该学生信息进行修改。 、查询学生基本信息的功能 可使用“姓名”对已存有的学生资料进行查询。 、删除学生基本信息的功能 在管理员模式下,只要选择表格中的某个学生,就可以删除该学生。 、用户登陆 用不同的登录权限可以进入不同的后台界面,从而实现权限操作。 、用户登陆信息设置 可以修改用户登陆密码 2、设计目的 学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要。所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据,这种管理方式存在着许多缺点,如:效率低、保密性差、人工的大量浪费;另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的

计算机操作系统综合设计实验报告实验一

计算机操作系统综合设计 实验一 实验名称:进程创建模拟实现 实验类型:验证型 实验环境: win7 vc++6.0 指导老师: 专业班级: 姓名: 学号: 联系电话: 实验地点:东六E507 实验日期:2017 年 10 月 10 日 实验报告日期:2017 年 10 月 10 日 实验成绩:

一、实验目的 1)理解进程创建相关理论; 2)掌握进程创建方法; 3)掌握进程相关数据结构。 二、实验内容 windows 7 Visual C++ 6.0 三、实验步骤 1、实验内容 1)输入给定代码; 2)进行功能测试并得出正确结果。 2、实验步骤 1)输入代码 A、打开 Visual C++ 6.0 ; B、新建 c++ 文件,创建basic.h 头文件,并且创建 main.cpp 2)进行功能测试并得出正确结果 A 、编译、运行main.cpp B、输入测试数据 创建10个进程;创建进程树中4层以上的数型结构 结构如图所示:。

createpc 创建进程命令。 参数: 1 pid(进程id)、 2 ppid(父进程id)、3 prio(优先级)。 示例:createpc(2,1,2) 。创建一个进程,其进程号为2,父进程号为1,优先级为2 3)输入创建进程代码及运行截图 4)显示创建的进程

3、画出createpc函数程序流程图 分析createpc函数的代码,画出如下流程图:

四、实验总结 1、实验思考 (1)进程创建的核心内容是什么? 答: 1)申请空白PCB 2)为新进程分配资源 3)初始化进程控制块 4)将新进程插入到就绪队列 (2)该设计和实际的操作系统进程创建相比,缺少了哪些步骤? 答:只是模拟的创建,并没有分配资源 2、个人总结 通过这次课程设计,加深了对操作系统的认识,了解了操作系统中进程创建的过程,对进程创建有了深入的了解,并能够用高 级语言进行模拟演示。一分耕耘,一分收获,这次的课程设计让 我受益匪浅。虽然自己所做的很少也不够完善,但毕竟也是努 力的结果。另外,使我体会最深的是:任何一门知识的掌握, 仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能 达到功效。

MFC课程设计报告-一个简单的五子棋游戏

设计一个简单的五子棋游戏 一、设计目标与内容 1.了解Windows编程的基础知识,掌握MFC应用程序的基本 知识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识, 设计一个简单的五子棋游戏,具有 以下功能:①数据结构的设计;五子棋棋盘的绘制。②两人下棋时,两人下棋算法的设计。③两人下棋时,判断任一方获胜的算法的设计。 二、设计要求 1.用VC++进行编码,实现应用程序的功能。注重编码质量, 代码要有适当的注释; 提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。总体设计 运行时效果如下:

图3-1 这个程序只能进行两个人之间的对弈,不能进行人机对弈,由于时间和个人能力的原因所以人机对弈的算法就没有写出。同时程序中也存在着很多漏洞,但基本的功能都已经实现,还有待继续改进。 详细设计 新建工程game_wzq

选择单文档应用程序,在Step 4 of 6中先中Windows Sockets 复选框。如下图: 图3-2 资源编辑 黑白位图Bitmap以表示棋盘上面的棋子: IDB_BLACK DB_WHITE 黑白鼠标Cursor以替换当前鼠标: IDC_CURSOR1 黑棋子

IDC_CURSOR2 白棋子 黑白图标Icon以显示在状态栏供以提示 IDI_BLACK IDI_WHITE 菜单以供操作: 开始:ID_START 保存:ID_SAVE 打开:ID_OPEN 如下图所示: 图3-3 变量函数 首先,为了实现状态栏的应用,我们必须更改它的变量:

大学生课程设计心得体会范文

( 心得体会 ) 单位:_________________________ 姓名:_________________________ 日期:_________________________ 精品文档 / Word文档 / 文字可改 大学生课程设计心得体会范文College Students' experience in curriculum design

大学生课程设计心得体会范文 大学生课程设计心得体会 时光匆匆而过,一周转瞬即逝。在过去的这一周时间里面,原本以为会比较轻松的设计任务却让我觉得有点措手不及。虽然困难重重,但是在遇到的各种各样的问题中,我学会了耐心,学会了坚持,也学会了以前掌握得不太牢固的数电和模电知识。收获颇丰。 在这次电子课程设计中,我们小组的设计题目是汽车尾灯控制。在设计中我们使用了基本的芯片:双向移位寄74LS194,二输入与非门74LS00、四输入与非门74LS20、六反相器74LS04、3-8译码器,555定时器及电阻电容进行搭建。设计的时候并不是特别顺利,芯片的选择和电路的接法对于我这样从来没有实际操作过的学生还是有一定的难度的。经过我们大家集体的讨论过后,我们还是把最终的电路图拿出来了。这让我充分体会到团队的力量,团结才能让大家

把事情干好。一个人的力量始终太渺小,集思广益才能让我们进步得更快,让我们学到更多的知识。 最让我头疼的是在实际操作的过程中,我们经常会因为一个小的失误,比如线接错了,有些地方的线没有接上等等问题而让实验板上的灯无法亮起来。这些都是让我始料不及的。由于不细心的地方太多,当时甚至有过要放弃的念头。但是我坚持了下来,当最终看到成果的时候,我觉得这一切都是值得的。记得汪中求说过细节决定成败。以前感触不深,没有注意太多的细节,总是抱着差不多就行了或者放纵自己的心态来面对生活学习中的许多问题。但是我现在明白了,这是不对的。对于科学我们就应该保持严谨的态度。课程设计中的许多细节都没有注意,老是求快,想早点完成设计和连接实验板的工作,但是这反而导致了很多次的失败。好在最终摆正了心态,细心检查之后,最终完成了连线。 我从这次的设计中还感受到坚持的重要性。做事情不能轻言谈放弃,虽然过程不顺利,与想象中相去甚远。但是只要我们能坚持,朝着自己既定的目标前进,就一定会走到终点。一点小小的挫折实

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

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

学生信息管理系统java课程设计(含源代码)

JAVA程序设计课程设计报告 课题: 学生信息管理系统 姓名: 学号: 同组姓名: 专业班级: 指导教师: 设计时间: 评阅意见: 评定成绩:

目录 一、系统描述 (2) 1、需要实现的功能 (3) 2、设计目的 (3) 二、分析与设计 (3) 1、功能模块划分 (3) 2、数据库结构描述 (4) 3、系统详细设计文档 (6) 4、各个模块的实现方法描述 (9) 5、测试数据及期望结果 (11) 三、系统测试 (16) 四、心得体会 (23) 五、参考文献 (24) 六、附录 (24)

一、系统描述 1、需求实现的功能 、录入学生基本信息的功能 学生基本信息主要包括:学号、姓名、年龄、出生地、专业、班级总学分,在插入时,如果数据库已经存在该学号,则不能再插入该学号。 、修改学生基本信息的功能 在管理员模式下,只要在表格中选中某个学生,就可以对该学生信息进行修改。 、查询学生基本信息的功能 可使用“姓名”对已存有的学生资料进行查询。 、删除学生基本信息的功能 在管理员模式下,只要选择表格中的某个学生,就可以删除该学生。 、用户登陆 用不同的登录权限可以进入不同的后台界面,从而实现权限操作。 、用户登陆信息设置 可以修改用户登陆密码 2、设计目的 学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要。所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据,这种管理方式存在着许多缺点,如:效率低、保密性差、人工的大量浪费;另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,

MFC课程设计之拼图游戏设计报告

拼图游戏 实验报告 一、实验目的

1、通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。 2、通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC变成的基本功能。 3、通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。 二、小组分工 为了发挥组内同学的各自特长,我们小组分工如下: 1、苏嘉彬——前期进行系统需求分析,系统结构设计,完成拼图界面的设计工作, 后期完成课程设计报告 2、嵇鹏飞(组长)——完成主要程序的编写工作(图形分割、存储、拼图) 3、依代吐力·艾尼——搜集资料,完成计时器的设计工作,软件接口的设计及测 试 三、程序设计思路 1、初步方案讨论 拼图游戏是同学们喜欢的益智游戏之一,带着浓厚的兴趣,我们选择拼图游戏设计 作为我们小组本次MFC课程设计的课题。在讨论中,有的同学希望用单文档(SDI) 的形式完成本次设计,有的同学则偏向于用对话框(Dialogue)的形式,最终我们小组 讨论决定最终的设计采用对话框形式实现拼图功能。 2、方案变更、疑难解决 (1)最初我们决定采用对话框形式来实现拼图的基本功能,但是在实施过程中出 现了几次很严重的错误:Debug Assertion Failed,缺少ivewers.dll文件等等,在最后的 尝试中我们发现如果采用单文档(SDI)形式写拼图的话,可以实现最基本的功能,因 此我们最终决定使用单文档来完成该课程设计。 (2)一开始我们讨论决定采用的方式是将位图读入后再进行图片的分割,而在实 际的操作过程中由于图片的分割有一定的困难,因此我们最后采用的方式是将位图进行 分割完毕后再逐个用Brush在指定位置上进行绘画,实现图形的分割。 3、系统需求分析 (1)系统功能 简单的拼图游戏应该有拼图、计时、判断拼图成功、游戏者用时统计排名等功能, 拼图内部还应该有难度选择、相邻拼图块自动拼图等功能。图1所示是拼图游戏的用例 图,表明拼图游戏的主要功能。 图1 (

大学生课程设计心得体会范文(标准版)

编号:YB-TH-0172 ( 心得体会) 部门:_____________________ 姓名:_____________________ 日期:_____________________ WORD文档/ A4打印/ 可编辑 大学生课程设计心得体会范文 (标准版) Being good at summarizing can enable you to choose the most reasonable ability to handle affairs when encountering the same or similar problems.

大学生课程设计心得体会范文(标准 版) 心得体会作用:善于总结可以使你在遇到相同或类似问题的时候可以选择最合理的处理事务能力,可以锻炼 你的逻辑思考能力,和判断能力。一个善于总结的人是很少会犯错误。本内容可以放心修改调整或直接使用。 大学生课程设计心得体会 时光匆匆而过,一周转瞬即逝。在过去的这一周时间里面,原本以为会比较轻松的设计任务却让我觉得有点措手不及。虽然困难重重,但是在遇到的各种各样的问题中,我学会了耐心,学会了坚持,也学会了以前掌握得不太牢固的数电和模电知识。收获颇丰。 在这次电子课程设计中,我们小组的设计题目是汽车尾灯控制。在设计中我们使用了基本的芯片:双向移位寄74LS194,二输入与非门74LS00、四输入与非门74LS20、六反相器74LS04、3-8译码器,555定时器及电阻电容进行搭建。设计的时候并不是特别顺利,芯片的选择和电路的接法对于我这样从来没有实际操作过的学生还是有一定的难度的。经过我们大家集体的讨论过后,我们还是把最

课程设计的总结报告

课程设计的总结报告 ----WORD文档,下载后可编辑修改---- 下面是小编收集整理的范本,欢迎您借鉴参考阅读和下载,侵删。您的努力学习是为了更美好的未来! 课程设计的总结报告篇一首先我们由衷的感谢老师提供给我们这样一个锻炼自己的机会,经过这四周的学习,本次课程设计即将结束,总的来说,经过这门课的学习收获还是相当大的。回顾这段时间的课程设计,至今我仍感慨万分。的确,从选材到开始制作,从理论到实践,在四周的实训日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我们都更加懂得并亲身体会到了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从实践中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到很多问题,可以说是困难重重,并且在设计的过程中发现了自己的很多不足之处,发现自己对之前所学过的知识理解得不够深刻,掌握得不够牢固,有待加强。 生活就是这样,汗水预示着结果但是也见证着收获,劳动是人类生存、生活永恒不变的话题,通过实训,我才真正领略到“艰苦奋斗”这一词的真正含义。我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以。而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少欢乐在这里洒下。我想说,之前的时间确实很累,但当我们看到自己所做的劳动成果时,心中也不免产生兴奋。也许有人不喜欢这类的工作,也许有人认为编程的工作有些枯燥,但我们认为无论干什么,只要人生活的有意义就够了,而且这也是最主要的,社会需要我们,我们也可以为社会而工作。 我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神,某个人的离群都可能导致整项工作的失败。实训中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个项目失败,团结协作是我们实训成功的一项非常重要的保证。而这次实

Java课程设计实验报告及全部源码流程图

课程设计 一、实验目的 1.加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2. 使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3.在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 二、实验要求 1.问题描述准确、规范。 2.程序结构合理,调试数据准确、有代表性.。 3.界面布局整齐,人机交互方便。 4.输出结果正确。 5.正确撰写实验报告。 三、实验内容 编写一个GUI程序实现日历的功能。一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报

时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 四、实验步骤 1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2.在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3.各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4. 根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5.详细的上机实验步骤见任务分工及程序设计进度表。 五、实验结果 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片):

MFC课程设计报告-一个简单的通讯录应用程序

一、设计目标与内容 1.了解Windows编程的基础知识,掌握MFC应用程序的基本知 识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识,设计一个简单的通讯录应用程序, 具有以下功能:①用文件来保存通讯录信息(必须实现的功能)②编程实现通讯录记录的添加、删除、修改、浏览和查询(必须实现的功能)。 二、设计要求 1.用VC++进行编码,实现应用程序的功能。注重编码质量, 代码要有适当的注释; 2.提交设计报告一份(课程设计任务书、目录、主要的数据结 构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。 总体设计 通讯录应用程序,是一个基于单文档单视图的应用程序。 我们在基于但文档视图开发的同时,通过对文档菜单的操作和相应函数的响应实现一个简单的通讯录功能。在通讯录中,我们能够添加学生信息、修改学生信息、删除学生信息、预览学生信息和保存学生信息。进行一系列简单的操作。

详细设计 新建工程COM_book2 新建工程COM_kook2,默认选择单文档应用程序,完成。 在COM_book2View.cpp中初始化文档视图界面 添加函数如下: void CCOM_book2View::OnInitialUpdate() { CListView::OnInitialUpdate(); CListCtrl &m_ListCtrl=GetListCtrl(); CString strHeader[5]={"姓名","专业","电话","QQ","生日"}; int nLong[]={150,200,250,200,200}; for(int nCol=0;nCol<5;nCol++) m_ListCtrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_ LEFT,nLong[nCol]); UpdateData(FALSE); } 程序运行后,界面如下

【2018】《大学计算机》实验报告

大学计算机 实验报告 编制教师:信息技术基础教研室全体教师审定:唐年庆 2018至2019学年第1学期 计算机科学学院

实验报告说明 本课程实验从开课学期第四周开始,每次课需要扫码签到、完成【勤学网】每周任务,十八周结束,共32学时。除统一安排的时间外,学生还可根据自己的实际适当安排课余时间上机。实验课注意事项如下: (1)每次实验前学生必须充分准备 ..每次的实验内容,以保证每次上机实验的效果。 实验过程中必须独立 ..完成。 (2)每次实验课将考勤 ..,并作为实验成绩的重要依据。 (3)每次实验完成后,亲自 ..批阅 ..,否则实验成绩无 ..将实验报告交实验指导老师检查 效。 (4)实验报告中学生必须填写【实验地点 ..完成。 ....】,注意:必须手写 ....】、【实验时间 (5)每次实验完成后,请将实验结果压缩后上传 .....到服务器。 (6)学期结束时,每位同学应将自己的《实验报告册》交各班级班长或学习委员, 由班长或学习委员以班级为单位、按学号从小到大排列 ........好统一交给实验指导老师,否则无实验成绩。 附实验成绩登记表

实验一:操作系统基本练习 实验日期:2018年月日实验地点:第三实验楼机房 一、实验目的: 1.掌握Windows 7 的启动和退出。 2.学会资源管理器、我的电脑的使用方法。 3.掌握控制面板的使用、Windows 7 系统设置。 4.掌握文件和文件夹的新建、选定、复制、重命名、删除和查找等操作。 二、实验任务: 1.实验准备:在【勤学网】(网址:http://17 2.16.26.3)下载“实验1”资料包,并解压于D盘,并将解压后的文件夹重新命名为你的姓名。 2.在“Text”文件夹中建立名为Test1.Txt文本文件。在所建立文本文件中用一种输入法输入以下文字内容: 3.查找C盘中所有jpg图片,然后按照大小排列,拷贝前.两.个到“Image”文件夹下;把资料包中audio文件夹下的css文件的扩展名修改为.txt类型,并设置为隐藏属性。 4.把任务栏调整在左边并取消“显示时钟”,然后抓取当前桌面图像,利用画图程序保存,命名为“窗口图像.jpg”,放在Image文件夹下。 5.在桌面上分别为“记事本”和“画图”两个应用程序建立快捷方式,并把这两个快捷方式复制到Text文件夹下。 6.查询磁盘的状态后然后回答下列问题:C盘:文件系统类型、已用空间、可用空间、容量。 7.选择合适的适配器模式,模式为:分辨率为800×600,增强色(16位),60赫兹。 8.给当前计算机添加一个用户,用户名为:JKXY,密码为:jkxy2340,账户图

5_Java课程设计源代码

package zhouchuan; import java.applet.*; import java.awt.*; import java.awt.event.*; import https://www.doczj.com/doc/0c14371273.html,.*; public class zhouchuan extends Applet implements ActionListener { AudioClip clip; Button buttonPlay, buttonLoop, buttonStop; public void init(){ try{ URL url=new URL("file:"+"F://ding.wav"); clip=getAudioClip(url);}catch(Exception e){ } buttonPlay=new Button("开始播放"); buttonLoop=new Button("循环播放"); buttonStop=new Button("停止播放"); buttonPlay.addActionListener(this); buttonStop.addActionListener(this); buttonLoop.addActionListener(this); add(buttonPlay); add(buttonLoop); add(buttonStop); } public void stop(){ clip.stop(); } public void actionPerformed(ActionEvent e){ if(e.getSource()==buttonPlay) clip.play(); else if(e.getSource()==buttonLoop) clip.loop();

MFC计算器编程课程设计实践报告

中南大学本科生课程设计(实践)设计报告(程序设计基础) 题目MFC编程科学计算器学生学号1104120502 学生姓名郭斌繁 指导教师蔡旭晖 学院交通运输工程学院专业班级交通运输类1205班 计算机基础教学实验中心 2013 年 7 月 1 日

程序设计(C++)实践报告 1.引言 C++语言的主要特点表现在两个方面,一是全面兼容C 语言,二是支持面向对象的程序: (1) C++是一个更好的C,它保持了C 语言的优点,大多数的C 程序代码略作修改或不作修改就可在C++的集成环境下调试和运行。这对于继承和开发当前已在广泛的软件是非常重要的,可以节省大量的人力和物力。 (2) C++是一种面向对象的程序设计语言它使得程序的各个模块的独立性更强,程序的可读性和可移植性更强,程序代码的结构更加合理,程序的扩充性更强。这对于设计、编制和调试一些大型的软件尤为重要。 (3) C++集成环境不仅支持C++程序的编译和调试,而且也支持C 程序的编译和调试。通常,C++程序环境约定:当源程序文件的扩展名为c.时,则为C 程序;而当源程序文件的扩展名为cpp.时,则为C++程序。 (4) C++语句非常简练,对语法限制比较宽松,因此C++语法非常灵活。其优点是给用户编程带来书写上的方便。其缺点是由于编译时对语法限制比较宽松,许多逻辑上的错误。 次课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。 (1).设计目标 利用MFC程序开发工具设计一款可以进行简单计算及部分科学计算的计算器。在设计当中将综合“面向对象程序设计与结构化程序设计”的思想方法和知识点,编制一个小型的应用程序系统。通过此设计进一步提高自己的动手能力,并能使自己清楚的知道开发一个应用程序的思想、方法和流程。 (2).选题分析 此次实践所选题目中除了简单的加减乘除运算程序之外还包括了余弦函数、双曲余弦函数、度分秒的转换和X的y次方及y次根号下x的运算程序。除去四

大学毕业生课程设计总结与展望

大学毕业生课程设计总结与展望 工作总结 珍贵的三年大学学习生活即将接近尾声,我们迎来了大学最后一个比较关键的课程——毕业设计,因为它是衡量每个大学生知识掌握程度的关键,而且是对前面所学知识的一种检验,更是对自己能力的一种提高.毕业设计是学校对我们在大学中所学知识的一个检验,它几乎包含了我们学习的全部专业知识.毕业设计工作做的好坏,直接体现了个人现阶段实力的强弱,我们必须拿出百分之百的热情,用心搞好毕业设计. 经过几个月的奋战我的毕业设计终于完成了.但是现在回想起来做毕业设计的整个过程,颇有心得,其中有苦也有甜,不过乐趣尽在其中! 接到任务书以后进行选题,选择方案,了解课题思路.刚刚拿到课题——《多路可寻址遥控开关系统设计》的时候觉得有点恍惚,当时我有一种想法:觉得这么高难度的东西凭我的实力要完成简直是不可能,题目确定后就是找资料,完成图纸初稿.资料是做毕业设计的前期准备工作,好的开端就相当于成功了一半,因此资料是否全面、可靠,关系到整个毕业设计的进程.总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用.在图书馆和百度搜

索中我查到了相关的资料和电路图,但是还是不太完善,后来又去找老师找到了相关的书籍. 通过前面几周不断搜索资料的过程中,我已经对所选的课题有了一定的了解,并且大概的设计思路已经确定了.于是和我们组的成员找到毕业设计指导老师周红兵老师,说明了我们对整个系统电路的设计与想法,指导老师给我们系统的设计思路讲述了在设计中需要注意的地方.经过老师的指导,我们的思路就越加清晰了,这不得不让我相信万事开头难的道理了,也坚定了我做毕业设计的信心.,这一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目,最后完成图纸初稿. 在本次设计的过程中,我发现很多的问题,给我的感觉就是很难很不顺手,看似很简单的电路,要动手把它给设计出来,是很难的一件事,特别是整个电路图的设计,同时,通过本次课程设计,巩固了我们学习过的专业知识,也使我们把理论与实践从真正意义上相结合起来;考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力;从中可以自我测验,认识到自己哪方面有欠缺、不足,以便于在日后的学习中得以改进、提高;这也使我明白要对以前学过的知识温故知新. 展望 通过这次毕业设计使我明白了自己原来知识还比较欠

相关主题
文本预览
相关文档 最新文档