飞机大战游戏 模块设计报告

时间:2024.3.31

飞机大战游戏

模块设计报告

目 录

0. 文档介绍... 4

0.1 文档目的... 4

0.2 文档范围... 4

0.3 读者对象... 4

0.4 参考文献... 4

0.5 术语与缩写解释... 4

1. 模块命名规则... 5

2. 模块汇总... 5

2.1 模块汇总表... 5

2.2 UML活动图... 6

2.3类体系... 6

3. 游戏规则子系统... 6

3.1 人工智能... 6

4. 3游戏对象子系统... 7

4.1 应用程序对象... 7

4.2 游戏对象... 8

4.3 战机对象... 9

4.4 敌机对象... 10

4.5 导弹对象... 11

4.6 炸弹对象... 12

4.7 爆炸对象... 13

4.4 文字对象... 14


0. 文档介绍

0.1 文档目的

指导模块编码人员编码。

0.2 文档范围

模块功能介绍及实现要求

0.3 读者对象

模块编码人员

0.4 参考文献

0.5 术语与缩写解释

1. 模块命名规则

 

2. 模块汇总

2.1 模块汇总表

2.2 UML活动图

2.3类体系

3. 游戏规则子系统

3.1 人工智能

4. 3游戏对象子系统

4.1 应用程序对象

4.2 游戏对象

4.3 战机对象

4.4 敌机对象

4.5 导弹对象

4.6 炸弹对象

4.7 爆炸对象

4.4 文字对象


第二篇:飞机大战程序设计报告


程序设计综合实践

实习报告

一、实习题目:        飞机大战游戏                     

二、实习时间:20##.9.20-20##.9.30实习地点:  J13-132、232  

三、实习任务:通过项目实战,掌握C++面向对象编程的基础技术和Windows应用程序的编程方法,能够运用MFC技术及其开发环境进行小项目的开发。 

四、小组分工说明:                               

五、实习成绩                                                            

六、指导教师对实习的评语:                                                                                    

                           指导教师(签章):               

年    月    日

飞机大战游戏

1.        实习目的

1.1使学生全面了解软件项目实施的过程,理解软件企业对于程序员的基本素质和技术能力要求。

1.2使学生掌握C++及Window程序设计的基本技术,能够运用MFC技术及其开发环境进行小型项目的开发。

1.3重点培养学生的独立创新精神和查阅资料能力,提高其口头和书面的沟通能力。

1.4使学生掌握快速学习新知识、新技术方法,培养良好的分析问题和解决问题的能力

1.5重点提高学生的编程能力,使学生建立正确的编程理念,养成规范的编程习惯。

2.  实习计划

   1、9.20—9.21先建立CGameObject 类,利用继承机制,根据此类进行依次的派生。

2、9.22—9.25再建立派生类:Bomb,Ball,Enemy,MyPlane,Explosion等,并实现各自功能。

3、9.26—9.29在xxView.cpp中的OnTimer中实现背景的设置,对敌机,导弹,敌机子弹,爆炸效果的绘制,以及敌机子弹和战机,导弹和敌机的碰撞检验,并添加爆炸效果

4、9.29—9.30最后释放pDC以及定时器

3.实习过程

3.1 技术准备

透明贴图技术

绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。

在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个绘制过程需要使用到BitBlt()函数。整个功能的实现过程如下:

 (1) 创建一张大小与需要绘制图像相同的位图作为“掩码”位图;

(2) 将新创建的“掩码”位图存储至掩码位图的设备描述表中;

(3) 把位图设备描述表的背景设置成“透明色”,不需要显示的颜色;

(4) 复制粘贴位图到“掩码”位图的设备描述表中,这个时候“掩码”位图设备描述表中存放的位图与位图设备描述表中的位图一样;

(5) 把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;

(6) 把“掩码”位图与这个时候对话框相应区域的背景进行逻辑与的操作;

(7) 重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;

(8) 最后把系统的画笔还给系统,删除使用过的GDIObject,释放非空的指针,最后把新建的设备描述表也删除。

BOOL CGameObject::LoadImage(CImageList& imgList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial)

{

    CBitmap bmp;

    if(!bmp.LoadBitmap(bmpID))

       return FALSE;

    if(!imgList.Create(cx, cy, ILC_COLOR24|ILC_MASK, nInitial, 0))//图像的长、宽、显示样式、图像可控数

       return FALSE;

   

    imgList.Add(&bmp, crMask);//滤掉底色

    return TRUE;

}

CObList链表

在本程序中使用了CObList链表来分别存储敌机,炸弹,导弹,爆炸效果。CObList 链表类似于一个双向链表,POSITION类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得莫元素的POSITION()来访问它。

本程序中主要用到的函数有:

GetHeadPosition()——获取链表首元素的POSITION

AddTail()——向链表尾部添加新的元素

GetNext( POSITION& rPosition )——返回当前rPosition指向的元素,并使rPosition指向下一个元素

碰撞检验相关函数

用CRect类中的GetRect()函数可以获得当前对象的矩形区域,IntersectRect()函数判断战机与敌机、子弹与战机,导弹与敌机,导弹与子弹是否相撞。

设置定时器、销毁定时器

Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。程序将时间间隔告诉Windows,然后Windows给您的程序发送周期性发生的WM_TIMER消息,以表示时间到了。

SetTimer()函数来设置定时器,控制每隔多少毫秒执行一次什么任务。用KillTime函数来销毁定时器。

键盘控制

添加OnKeyDown()和OnKeyUp()函数,通过修改战机的相应参数来实现对战机的控制,如上下左右运动,发射子弹等等。

双缓冲技术

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

CDC* pDC=GetDC();

CDC cdc;

cdc.CreateCompatibleDC(pDC);//依附窗口DC创建兼容内存DC

所有的图像文字均存入cdc中,然后一次性的通过

cdc.BitBlt(0,0,rc.Width(),rc.Height(),&cdc,0,0,SRCCOPY);//双缓冲BitBlt()函数,防止窗口刷新而闪烁

将内存DC上的图像拷贝到前台

cdc.DeleteDC();

bitmap1.DeleteObject();

ReleaseDC(pDC);

添加爆炸效果函数

   PlaySound("H:\\xx1\\Explode",NULL,SND_FILENAME|SND_ASYNC);

弹出对话框函数

if(life == 0)

              {

                 AfxMessageBox("Game Over!",0,0);

                 break; 

              }  

3.2 项目实施

   3.2.1 功能需求

战机数量为1

由玩家通过键盘控制(方向控制位置、默认开启炸弹,空格键发射清屏导弹)战机

导弹遇到敌机发生爆炸,敌机被炸毁,导弹消失,玩家得分

有计算机控制敌机自动向战机发动攻击,战机有10条生命

敌机数量随机,计算机生成敌机时随机选择类别

敌机行驶期间,不左右移动,不反向移动

在游戏界面输出当前游戏进行信息,包括当前得分、击中敌机数量

游戏过程中添加了声效                         

  

3.2.2 总体设计

                系统模块划分

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

                 

类体系

  系统对象类图

UML

      产生敌机并绘制敌机流程图

   3.2.3 详细设计与编码

        BOOL CXxView::PreCreateWindow(CREATESTRUCT& cs)

{

   // TODO: Modify the Window class or styles here by modifying

   //  the CREATESTRUCT cs

   return CView::PreCreateWindow(cs);

}

/////////////////////////////////////////////////////////////////////////////

// CXxView drawing

void CXxView::OnDraw(CDC* pDC)

{

   CXxDoc* pDoc = GetDocument();

   ASSERT_VALID(pDoc);

/*//CDC* pDC=GetDC();

   static int x=0;

   RECT rc;

   GetClientRect(&rc);//获得窗体的尺寸

CBitmap bmp1;

   bmp1.LoadBitmap(IDB_BITMAP9); //创建位图

    CBrush brush;

   brush.CreatePatternBrush(&bmp1);

    CBrush *pbrush=pDC->SelectObject(&brush); //将刷子选入pDC

   pDC->Rectangle(&rc);

   pDC->SelectObject(pbrush);//回复原来的刷子,规则

   /* CDC* m_pMemDC1;//为绘图提供成员函数

   m_pMemDC1 = new CDC;//为绘图申请内存空间

   m_pMemDC1->CreateCompatibleDC(pDC);

   CBitmap bmp1;

/* bmp1.LoadBitmap(IDB_BITMAP11); //创建位图

   m_pMemDC1->SelectObject(&bmp1);

   pDC->BitBlt(0,0,480,644,m_pMemDC1,0,0,SRCCOPY);

   DeleteObject(bmp1);

   delete m_pMemDC1;//释放内存*/

   

   /*myplane.Draw(pDC,0);

   enemy.Draw(pDC,0);

    ball.Draw(pDC,0);

   bomb.Draw(pDC,0);

   explosion.Draw(pDC,0);*/

   // TODO: add draw code for native data here

}

/////////////////////////////////////////////////////////////////

// CXxView printing

BOOL CXxView::OnPreparePrinting(CPrintInfo* pInfo)

{

   // default preparation

   return DoPreparePrinting(pInfo);

}

void CXxView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

{

   // TODO: add extra initialization before printing

}

void CXxView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

{

   // TODO: add cleanup after printing

}

/////////////////////////////////////////////////////////////////

// CXxView diagnostics

#ifdef _DEBUG

void CXxView::AssertValid() const

{

   CView::AssertValid();

}

void CXxView::Dump(CDumpContext& dc) const

{

   CView::Dump(dc);

}

CXxDoc* CXxView::GetDocument() // non-debug version is inline

{

   ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CXxDoc)));

   return (CXxDoc*)m_pDocument;

}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////

// CXxView message handlers

 int fireflag=0;

void CXxView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

{

   // TODO: Add your message handler code here and/or call default

   if(nChar==VK_RIGHT)  //VK_LEFT、VK_DOWN、VK_UP

   {

       myplane.SetHorMotion(1);

   }

   if(nChar==VK_LEFT)  //VK_LEFT、VK_DOWN、VK_UP

   {

       myplane.SetHorMotion(-1);

   }

   if(nChar==VK_UP)  //VK_LEFT、VK_DOWN、VK_UP

   {

       myplane.SetVerMotion(1);

   }

   if(nChar==VK_DOWN)  //VK_LEFT、VK_DOWN、VK_UP

   {

       myplane.SetVerMotion(-1);

   }

   if(nChar==VK_SPACE)

   {

       fireflag=1;

         

   }

   CView::OnKeyDown(nChar, nRepCnt, nFlags);

}

void CXxView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)

{

   // TODO: Add your message handler code here and/or call default

    if(nChar==VK_RIGHT || nChar==VK_LEFT || nChar==VK_UP || nChar==VK_DOWN)  //VK_LEFT、VK_DOWN、VK_UP

   {

  

if(nChar==VK_RIGHT)  //VK_LEFT、VK_DOWN、VK_UP

   {

       myplane.SetHorMotion(0);

   }

   if(nChar==VK_LEFT)  //VK_LEFT、VK_DOWN、VK_UP

   {

       myplane.SetHorMotion(0);

   }

   if(nChar==VK_UP)  //VK_LEFT、VK_DOWN、VK_UP

   {

       myplane.SetVerMotion(0);

   }

   if(nChar==VK_DOWN)  //VK_LEFT、VK_DOWN、VK_UP

   {

       myplane.SetVerMotion(0);

   }

    

   }

// TODO: Add your message handler code here and/or call default

 if(nChar==VK_SPACE)

      {

       fireflag=0;

         

      }

  

   CView::OnKeyUp(nChar, nRepCnt, nFlags);

}

int CXxView::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

   if (CView::OnCreate(lpCreateStruct) == -1)

       return -1;

  

   // TODO: Add your specialized creation code here

   //安装定时器

   SetTimer(2,45,NULL);

   /*MyPlane::LoadImage();

   Enemy::LoadImage();

   Bomb::LoadImage();

   Ball::LoadImage();

   Explosion::LoadImage();*/

  

   //1是定时器的标示符,30ms的间隔,NULL表示让窗体接受消息,而不是函数

   return 0;

}

void CXxView::OnTimer(UINT nIDEvent)

{

   // TODO: Add your message handler code here and/or call default

      

   CXxDoc* pDoc = GetDocument();

   ASSERT_VALID(pDoc);

    CDC* pDC=GetDC();

   static int x=0;

   CRect rc;//定义客户区

   GetClientRect(&rc);//获得窗体的尺寸

    CDC cdc;//设备环境对象

   CBitmap bitmap1;//内存位图

   cdc.CreateCompatibleDC(pDC);//建立与位图相应的内存设备上下文

   bitmap1.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());

   CBitmap *pOldBit = cdc.SelectObject(&bitmap1);

   cdc.FillSolidRect(rc,RGB(51,255,255));

   //绘制蓝天

   //创建一个蓝色的刷子

   /*CBrush brush;

   brush.CreateSolidBrush(RGB(84,142,239));

   CBrush *pbrush=pDC->SelectObject(&brush); //将刷子选入pDC

   pDC->Rectangle(&rc);

   pDC->SelectObject(pbrush);//回复原来的刷子,规则*/

    CBitmap bmp1;

   bmp1.LoadBitmap(IDB_BITMAP8); //创建位图

    CBrush brush;

   brush.CreatePatternBrush(&bmp1);

    CBrush *pbrush=pDC->SelectObject(&brush); //将刷子选入pDC

   pDC->Rectangle(&rc);

   pDC->SelectObject(pbrush);//回复原来的刷子,规则

   /*if(life!=0)

   {

   myplane.Draw(pDC,0);

   }*/

   static int life = 10;

   static int score  = 0;

//-----------------------------------------------绘制战机---------------------------------------------------//

   if(life!=0)

   {

   myplane.Draw(pDC,0);

   }

   /*enemy.Draw(pDC,0);

   bomb.Draw(pDC,0);

   ball.Draw(pDC,0);

   explosion.Draw(pDC,0);*/

//--------------------------------------------------绘制敌机---------------------------------------------------//

    if(life!=0)

   {

   static int m=0;

   if(m<=0)

   {

       m=rand()%40;

       listenemy.AddTail(new Enemy);

   }

   m--;

   POSITION penemy1=NULL,penemy2=NULL;//POSITION是一个空结构体的指针POSITION类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。

     penemy1=listenemy.GetHeadPosition();

   while((penemy2=penemy1)!=NULL)     //  GetHeadPosition  返回列表中首元素的位置

   {

       enemy=(Enemy*)listenemy.GetNext(penemy1);//遍历链表

     

       if(!enemy->Draw(pDC,0))

       {

          listenemy.RemoveAt(penemy2);

          delete enemy;

       }

       int x=rand()%40;//子弹距离

       if(x==1)

       {

          listball.AddTail(new Ball(enemy->GetPoint().x+12,enemy->GetPoint().y,enemy->GetMontion()));   

       }

   }

   }

   //--------------------------------------------------添加战机导弹--------------------------------------------//

   if(fireflag==1)

       {

       PlaySound("H:\\xx1\\FIRE",NULL,SND_FILENAME|SND_ASYNC);

              listbomb.AddTail(new Bomb(myplane.GetPoint().x+10,myplane.GetPoint().y));

              listbomb.AddTail(new Bomb(myplane.GetPoint().x+30,myplane.GetPoint().y));

       }

   POSITION pbomb1=NULL,pbomb2=NULL;

   pbomb1=listbomb.GetHeadPosition();

   while((pbomb2=pbomb1)!=NULL)

   {

       bomb=(Bomb *)listbomb.GetNext(pbomb1);

   if(!bomb->Draw(pDC,0))

   {

       listbomb.RemoveAt(pbomb2);

       delete bomb;

   }

   }

//-------------------------------------------------添加敌机子弹----------------------------------------------//

   if(life != 0)

   {

      POSITION posball=listball.GetHeadPosition();

   while(posball!=NULL)

   {

       ball=(Ball *)listball.GetNext(posball);//返回链表元素

       if(!ball->Draw(pDC, 0))

       {

            listball.RemoveAt(posball);

          delete ball;

       }

   }

   }

//------------------------------------------------添加爆炸效果----------------------------------------------------//

   POSITION explosion1=NULL,explosion2=NULL;

   explosion1=listexplosion.GetHeadPosition();

      while((explosion2=explosion1)!=NULL)

      {

      explosion=(Explosion *)listexplosion.GetNext(explosion1);

       if(!explosion->Draw(pDC,0))

      {

          listexplosion.RemoveAt(explosion2);

          delete explosion;

      }

      }

//-----------------------------------------------------导弹炸掉敌机--------------------------------------------------//

POSITION b1=NULL,b2=NULL;

b1=listbomb.GetHeadPosition();//GetHeadPosition 

while((b2=b1)!=NULL)

{

     bomb=(Bomb *) listbomb.GetNext(b1);

    CRect brect=bomb->GetRect();//获取导弹区域

    POSITION e1=NULL,e2=NULL;

     e1=listenemy.GetHeadPosition();

    while((e2=e1)!=NULL)

   {

     enemy=(Enemy *)listenemy.GetNext(e1);//GetNext获取循环链表中下一个元素

    CRect erect=enemy->GetRect();//获得敌机区域

     CRect beRect;//定义一个区域,该区域作用为获得导弹和敌机区域的交集

    if(beRect.IntersectRect(&brect,erect))//若导弹和敌机有交集,添加爆炸效果,删除导弹和敌机

    {

        score+=10;      

        listexplosion.AddTail(new Explosion(erect.left, erect.top));

        listbomb.RemoveAt(b2);//RemoveAt  从列表中删除指定位置的元素

        delete bomb;

        listenemy.RemoveAt(e2);

        delete enemy;

        break;

   PlaySound("H:\\xx1\\Explode",NULL,SND_FILENAME|SND_ASYNC);

    }

   }

//--------------------------------------------敌机子弹炸掉战机----------------------------------------------------//

POSITION ba1=NULL,ba2=NULL;

CRect prect=myplane.GetRect();

if(life!=0)

{

for(ba1=listball.GetHeadPosition();(ba2=ba1)!=NULL;)

{

   ball=(Ball *)listball.GetNext(ba1);

   CRect barect=ball->GetRect();

   CRect baprect;

   if(baprect.IntersectRect(barect,prect))

   {

       listexplosion.AddTail(new Explosion(prect.left,prect.top));

       listball.RemoveAt(ba2);

       delete ball;

       life--;

       //break;

   PlaySound("H:\\xx1\\Explode",NULL,SND_FILENAME|SND_ASYNC);

       /*if(life == 0)

       {

          //delete myplane;

    

          //myplane = NULL;

       }*/

       if(life == 0)

       {

       AfxMessageBox("Game Over!",0,0);

  

       break;

   }

   }

}

}

//-----------------------------------------------敌机与战机相撞后销毁--------------------------------------------------//

      

 POSITION bPos1 = NULL,bPos2 = NULL;

 CRect mRect = myplane.GetRect();//获得战机区域

   if(life!=0)

   {

      

       for(bPos1=listenemy.GetHeadPosition();( bPos2 = bPos1 ) != NULL;)

  

       {

           enemy = (Enemy*)listenemy.GetNext(bPos1);

          CRect eRect = enemy->GetRect();//获得敌机区域

          CRect tmpRect;

          if(tmpRect.IntersectRect(&eRect,mRect))//敌机区域与战机区域相交

          {

              score += 10;

              life -= 1;

              //添加炸弹效果

          listexplosion.AddTail(new Explosion(mRect.left,mRect.top));

              //删除敌机

              listenemy.RemoveAt(bPos2);

              delete enemy;

     PlaySound("H:\\xx1\\res\\Explode",NULL,SND_FILENAME|SND_ASYNC);

             

               if(life == 0)

              {

               AfxMessageBox("Game Over!",0,0);

                 break;

              }  

          }

       }

   }

 //-----------------------------------------------------导弹与子弹互撞后销毁------------------------------------------------//

   POSITION bomPos1=NULL,bomPos2=NULL;

   if(life!=0)

   {

   for(bomPos1=listbomb.GetHeadPosition();(bomPos2 = bomPos1) != NULL;)

   {

        bomb = (Bomb*)listbomb.GetNext(bomPos1);

       CRect bombRect = bomb->GetRect();

       POSITION balPos1=NULL,balPos2=NULL;

       for(balPos1=listball.GetHeadPosition();(balPos2 = balPos1)!=NULL;)

       {

          ball = (Ball*)listball.GetNext(balPos1);

          CRect ballRect = ball->GetRect();

          CRect tmpRect;

          if(tmpRect.IntersectRect(&bombRect,ballRect))

          {

              listexplosion.AddTail(new Explosion(bombRect.left,bombRect.top));

              listbomb.RemoveAt(bomPos2);

              delete bomb;

              listball.RemoveAt(balPos2);

              delete ball;

              break;

          }

       }

   }

   }

//------------------------------------游戏界面输出-----------------------------------------------//

   if(life != 0)

   {

       HFONT font;

       //CRect rect;

       //GetClientRect(&rect);

       font = CreateFont(20,10,0,0,0,0,0,0,0,0,0,100,10,0);

       pDC->SelectObject(font);

       CString str;

       pDC->SetBkMode(TRANSPARENT);//设置文字背景透明色

       pDC->SetTextColor(RGB(255,0,0));//设置文字颜色

       str.Format(("得分:%d"),score);

       pDC->TextOut(40,40,str);

       pDC->SetBkMode(TRANSPARENT);

       str.Format("生命:%d",life);

       pDC->TextOut(40,20,str);

   }

   cdc.BitBlt(0,0,rc.Width(),rc.Height(),&cdc,0,0,SRCCOPY);//双缓冲BitBlt()函数,防止窗口刷新而闪烁

   cdc.DeleteDC();

   bitmap1.DeleteObject();

   ReleaseDC(pDC);

       CView::OnTimer(nIDEvent);

  

   }

/*void CXxView::OnLButtonDown(UINT nFlags, CPoint point)

{

   // TODO: Add your message handler code here and/or call default

  

   CView::OnLButtonDown(nFlags, point);

}*/

void CXxView::OnDestroy()

{

   //释放定时器

   KillTimer(2);

    delete pDC;

   CView::OnDestroy();

  

   // TODO: Add your message handler code here

  

}

   3.2.4 测试

      

实习总结:

    通过这次实训我发现自己掌握知识不足,很多知识都是现学现用,许多问题都勉强解决,动手实践能力不强,以后一定要在注意在保证自己的基础文化知识精通下,通过具体实践提高自己的能力。

更多相关推荐:
模块设计报告1

综合学校网站模块设计报告项目名称模块设计报告目录0文档介绍301文档目的302文档范围303读者对象31模块命名规则42模块汇总521模块汇总表522模块关系图63子系统前台的模块设计74子系统后台的模块设计8...

设计报告模板

广西水利电力职业技术学院题目交通灯系统设计姓名系院班级指导老师年月日摘要本作品主要由宏晶公司最新STC15系列IAP15F2K61S2单片机为核心的CPU板电磁波检测传感器模块运算放大电路降压模块反射型光电传感...

附录I-4 模块设计报告

济南历下区商贸旅游局网模块设计报告济南市历下区商贸旅游局网模块设计报告版本历史0文档介绍301文档目的302文档范围303读者对象304参考文献311模块汇总表32分页子系统的模块设计421模块分页子系统143...

系统设计报告样例模板

管理信息系统课程第二次大作业题目:沈阳红光物资有限公司CRM系统设计学院:管理学院专业:工程管理10学号:姓名:1.功能模块划分及描述客户关系管理系统是一个典型的数据库开发应用程序,由客户管理模块、库存管理模块…

GPS模块设计报告

GPS模块设计实验报告姓名何探学号3090731126班级通信091班指导教师杨小平一GPS定位系统简介GPS是英文GlobalPositioningSystem全球定位系统的简称而其中文简称为球位系GPS是2...

软件详细设计报告文档模板

软件详细设计报告文档模板1.引言1.1编写目的说明编写详细设计方案的主要目的。说明书编制的目的是说明一个软件系统各个层次中的每个程序(每个模块或子程序)和数据库系统的设计考虑,为程序员编码提供依据。如果一个软件…

软件设计报告

题专学班指指日软件设计报告20xx20xx学年第二学期目图书管理系统实现业生姓名级学号导教师导单位期20xx年目录一引言二可行性分析三需求规格说明书四概要设计说明五详细设计一引言图书管理系统是图书管理工作中不可...

汽车点火模块项目可行性研究报告评审方案设计(20xx年发改委标准案例范文)

汽车点火模块项目可行性研究报告评审方案设计20xx年发改委标准案例范文编制机构博思远略咨询公司360投资情报研究中心研究思路关键词识别1汽车点火模块项目可研2汽车点火模块市场前景分析预测3汽车点火模块项目技术方...

工资管理系统 模块设计报告

工资管理系统模块设计报告机构公开信息项目名称模块设计报告版本历史机构名称20xx第2页共8页项目名称模块设计报告目录0文档介绍401文档目的402文档范围403读者对象404参考文献405术语与缩写解释41模块...

基于nRF24L01的无线通信模块设计报告正文

1前言本次我们三人小组设计的是无线通信模块根据设计要求我们选择了无线收发模块nRF24L01单片机STC89C52LCD1602和键盘模块等作为本次设计的硬件需求首先我们与老师一起讨论了一些设计的相关事宜和设计...

飞机大战游戏 模块设计报告

飞机大战游戏模块设计报告目录0文档介绍301文档目的302文档范围303读者对象304参考文献305术语与缩写解释31模块命名规则42模块汇总421模块汇总表422UML活动图523类体系53游戏规则子系统53...

网络在线投票模块设计报告

设计报告题目班级姓名学号日期

模块设计报告(36篇)