当前位置:文档之家› C++课程设计报告--图像浏览器的设计与实现

C++课程设计报告--图像浏览器的设计与实现

C++课程设计报告--图像浏览器的设计与实现
C++课程设计报告--图像浏览器的设计与实现

浙江工商大学计算机与信息工程学院课程设计报告

课程名称:面向对象程序设计

专业:计算机科学与技术

班级:计科0902 ______

学号: 0912300219 _

姓名:徐雪琳

题目:图像浏览器的设计与实现

指导教师:刘春晓

2011年1月

计算机与信息工程学院2009级《面向对象程序设计》课程设计任务书

设计说明书

一、问题描述

图像浏览器的设计与实现:

设计一个能实现图像浏览与编辑功能的Java/C++程序,包括如下功能:1)从已有的图像文件列表中选择某一个,即可显示该图像,并可做旋转等变换。

2)在画布区域上可以进行各种规则图形的绘制(如:线段、矩形、多边形、圆等),还可通过鼠标的拖动自由绘图。

3)可以连续播放所选文件夹下的所有图像。

二、需求分析

随着数字产品渐进人们的生活,网络通信技术、图像处理技术以及多媒体技术的发展,越来越多的用户希望能够对已有的数字图片进行查看并能够实现简单的操作。此图片游览器以C++ Windows编程及OpenCV 为基础,在MFC 的单文档上实现,面向对象的设计及其简洁明了易操作的特点实现图片查看的基本功能,从而也就满足了用户对图片查看的基本要求。

(1)MFC:MFC是用来编写Windows应用程序的C++类集,该类集以层次结构组织起来,其中封装了大部分Windows控件,它所包含的功能涉及到整个Windows操作系统。MFC不仅为用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。应用MFC类库和Visual C++提供的高度可视的应用程序开发工具,可使应用程序开发变得更简单,开发周期极大地缩短,提高代码的可靠性和可重用性。

创建一个名为ImageViewer的MFC单文档程序,步骤为首先在新建工程框中选择MFC AppWizard(exe),工程名为ImageViewer,点下一步后选择基于单个文档的程序,其余的基本选择默认,除了最后选择基类是不是默认的CView而选择CScrollView类,因为在显示图片时可能会出现图片大小比视窗大小还要大,这是就要用到滚动条,所以选择了这个基类。创建好后会自动产生5个类:CAboutDlg、CImageViewerApp、CImageViewerDoc、CImageViewerView、CMainFrame。

(2)OpenCV里提供了大量图像处理和计算机视觉库,所以在opencv中显示一个图像简单,但是想在MFC的单文档框架中可不是件容易的事。所以我在MFC单文档的基础上应用了OpenCV类。在imageViewer程序中添加库文件:cv.lib、cxcore.lib、highgui.lib。

经过上面两步后,就可以在此基础上开始添加功能。

该程序重要功能:

1、旋转图像:顺时针旋转90°,逆时针旋转90°,旋转180°。

2、图像缩放:放大,缩小和显示原图。

3、图像标记:规则图形(线段,椭圆,矩形),鼠标自由画图,鼠标

恢复自由。

4、画笔颜色选择(无,白,黑),画刷颜色选择(无,白,黑,灰)。

5、连续显示同一文件夹下的图片,并且提示已经到第一张和最后一

张。

6、图形文件的打开,保存。

其中用到的主要的类CvvImage(CImage)定义为:(定义在highgui.h头文件中)

#define CImage CvvImage

/* CvvImage class definition */

class CV_EXPORTS CvvImage

{

public:

CvvImage();

virtual ~CvvImage();

/* Create image (BGR or grayscale) */

virtual bool Create( int width, int height, int bits_per_pixel, int image_origin = 0 );

/* Load image from specified file */

virtual bool Load( const char* filename, int desired_color = 1 );

/* Load rectangle from the file */

virtual bool LoadRect( const char* filename,

int desired_color, CvRect r );

#ifdef WIN32

virtual bool LoadRect( const char* filename,

int desired_color, RECT r )

{

return LoadRect( filename, desired_color,

cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ));

}

#endif

/* Save entire image to specified file. */

virtual bool Save( const char* filename );

/* Get copy of input image ROI */

virtual void CopyOf( CvvImage& image, int desired_color = -1 );

virtual void CopyOf( IplImage* img, int desired_color = -1 );

IplImage* GetImage() { return m_img; };

virtual void Destroy(void);

/* width and height of ROI */

int Width() { return !m_img ? 0 : !m_img->roi ? m_img->width : m_img->roi->width; };

int Height() { return !m_img ? 0 : !m_img->roi ? m_img->height : m_img->roi->height;};

int Bpp() { return m_img ? (m_img->depth & 255)*m_img->nChannels : 0; };

virtual void Fill( int color );

/* draw to highgui window */

virtual void Show( const char* window );

#ifdef WIN32

/* draw part of image to the specified DC */

virtual void Show( HDC dc, int x, int y, int width, int height,

int from_x = 0, int from_y = 0 );

/* draw the current image ROI to the specified rectangle of the destination DC */

virtual void DrawToHDC( HDC hDCDst, RECT* pDstRect );

#endif

protected:

IplImage* m_img;

};

而在OpenCV里图像信息保存在IplImage结构里,定义如下:

typedef struct _IplImage

{

int nSize; /* sizeof(IplImage) */

int ID; /* version (=0)*/

int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */

int alphaChannel; /* ignored by OpenCV */

int depth; /* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,

IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */

char colorModel[4]; /* ignored by OpenCV */

char channelSeq[4]; /* ditto */

int dataOrder; /* 0 - interleaved color channels, 1 - separate color channels.

cvCreateImage can only create interleaved images */

int origin; /* 0 - top-left origin,

1 - bottom-left origin (Windows bitmaps style) */

int align; /* Alignment of image rows (4 or 8).

OpenCV ignores it and uses widthStep instead */

int width; /* image width in pixels */

int height; /* image height in pixels */

struct _IplROI *roi;/* image ROI. if NULL, the whole image is selected */

struct _IplImage *maskROI; /* must be NULL */

void *imageId; /* ditto */

struct _IplTileInfo *tileInfo; /* ditto */

int imageSize; /* image data size in bytes

(==image->height*image->widthStep

in case of interleaved data)*/

char *imageData; /* pointer to aligned image data */

int widthStep; /* size of aligned image row in bytes */

int BorderMode[4]; /* ignored by OpenCV */

int BorderConst[4]; /* ditto */

char *imageDataOrigin; /* pointer to very origin of image data

(not necessarily aligned) -

needed for correct deallocation */ }

IplImage;

所以从文件读取中得到一个图像文件,记录为CImage类,其中的图像信息保存在CImage的保护成员中,所以要得到IplImage的数据,必须使用CImage 的成员函数GetImage();修改好IplImage的数据后,要把IplImage放回到CImage 类中,则要使用CImage的成员函数CopyOf(IplImage* img, int desired_color = -1);

在此程序的功能函数如图像放大,缩小,还有图像旋转都要用到CImage 和IplImage之间信息的拷贝。所以了解清楚CImage类和IplImage结构的定义很重要。

三、概要设计

1、类的继承关系图:

由MFC产生的5个类,CAboutDlg,CImageViewerApp,CImageViewerDoc,CImageViewerView,CMainFrame,归根结底都继承自CObject类。其中关系图为:

2、类的UML图:CAboutDlg类:

CImageViewerApp类:

CImageViewerDoc类:

CImageViewerView类:

CMainFrame类:

CvvImage类:

四、详细设计

1、打开、保存图像文件:

为了使程序能使用OpenCV,除了添加库文件cv.lib,cxcore.lib,highgui.lib,在开头加上Highgui.h的头文件包含,还要在CImageViewerDoc 类中添加变量CImage m_image,添加两个虚函数,分别用来打开图片文件和保

存图片文件。为了能够得到CImageViewerView类中的图像,要添加两个头文件:MainFrm.h和ImageViewerView.h。这两个虚函数的添加内容如下:BOOL CImageViewerDoc::OnOpenDocument(LPCTSTR lpszPathName)

{

if (!CDocument::OnOpenDocument(lpszPathName))

return FALSE;

// TODO: Add your specialized creation code here

m_image.Load(lpszPathName);/*从文件夹中读一个图像文件,并把图像信息传给m_image*/

CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;

CImageViewerView *pView=(CImageViewerView *)pMain->GetActiveView();

pView->m_pView.CopyOf(m_image.GetImage(),m_image.GetImage()->nCh annels);/*拷贝m_image信息到pView中*/

return TRUE;

}

BOOL CImageViewerDoc::OnSaveDocument(LPCTSTR lpszPathName)

{

// TODO: Add your specialized code here and/or call the base class

CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;

CImageViewerView *pView=(CImageViewerView *)pMain->GetActiveView();

pView->m_pView.Save(lpszPathName);/*保存图像*/

return TRUE;

}

2、图像显示到窗口:

主要代码在CImageViewerView类的OnDraw函数中,但首先在CImageViewerView类中定义一个公有成员CImage m_pView,使之在后面的很多功能函数中可以改变m_pView的信息。

void CImageViewerView::OnDraw(CDC* pDC)

{

//CImageViewerDoc* pDoc = GetDocument();

//ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

CImage & img =m_pView;

HDC hDC = pDC->GetSafeHdc();/*MFC中封装了HDC 但为了和Win32 兼容, 就用这个函数得到它,以备用户操作HDC*/

CRect rect1(0,0,img.Width()*size,img.Height()*size);/*size为图像缩放的比例,后面讲到图像缩放时会提到*/

img.DrawToHDC(hDC,rect1);

int x;

if(img.Height()>img.Width())

{

x=img.Height();

}

else

x=img.Width();

CSize sizeTotal;/*设置视窗内的滚动条的大小,以防图像大小比视窗大的情况*/

sizeTotal.cx = x*size;

sizeTotal.cy = x*size;

SetScrollSizes(MM_TEXT,sizeTotal);

}

3、图像旋转:

图像旋转分为3种情况,顺时针旋转90°,逆时针旋转90°和旋转180°。但原理是一样的,就只是图像的像素处理不同,所以以下,我只选择逆时针旋转90°来解释,说明代码。主要原理为:读m_pView中的信息拷贝到CImage img 中,再利用CImage类中的成员函数GetImage把img里的IplImage结构信息拿出来,拷到img0中,以便接下来的像素处理。创建一个空的IplImage img1,其中它的width为img0的height,它的height为img0的width,深度和通道数不变,再通过循环把img0的(i,j)像素拷到img1的(img0->width-j-1,i)像素。全循环好后,把得到的旋转好后的图像信息img1拷回到m_pView类中。再调用Ondraw(pDc),把旋转好的图像显示在视窗中,最后刷新视窗。这样就完成了图像的旋转了。代码为:

void CImageViewerView::Onleft90()

{

// TODO: Add your command handler code here

CDC *pDC = GetDC();

CImage & img =m_pView;

HDC hDC = pDC->GetSafeHdc();

IplImage *img0=img.GetImage();

IplImage

*img1=cvCreateImage(cvSize(img0->height,img0->width),img0->depth,img0->nCha nnels);

int i,j;

for(i=0;iheight;i++)

{

for(j=0;jwidth;j++)

{

((uchar

*)(img1->imageData+(img0->width-j-1)*img1->widthStep))[i*img1->nChannels+0]=( (uchar *)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+0];

((uchar

*)(img1->imageData+(img0->width-j-1)*img1->widthStep))[i*img1->nChannels+1]=( (uchar *)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+1];

((uchar

*)(img1->imageData+(img0->width-j-1)*img1->widthStep))[i*img1->nChannels+2]=( (uchar *)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+2];

}

}

m_pView.CopyOf(img1,3);

OnDraw(pDC);

ReleaseDC(pDC);

Invalidate();

}

其中顺时针旋转90°的像素处理的代码为:

int i,j;

for(i=0;iheight;i++)

{

for(j=0;jwidth;j++)

{

((uchar

*)(img1->imageData+j*img1->widthStep))[(img0->height-i-1)*img1->nChannels+0]= ((uchar *)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+0];

((uchar

*)(img1->imageData+j*img1->widthStep))[(img0->height-i-1)*img1->nChannels+1]= ((uchar *)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+1];

((uchar

*)(img1->imageData+j*img1->widthStep))[(img0->height-i-1)*img1->nChannels+2]= ((uchar *)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+2];

}

}

旋转180°的像素处理的代码为:

int i,j;

for(i=0;iheight;i++)

{

for(j=0;jwidth;j++)

{

((uchar

*)(img1->imageData+(img0->height-i-1)*img1->widthStep))[(img0->width-j-1)*img1

->nChannels+0]=((uchar

*)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+0];

((uchar

*)(img1->imageData+(img0->height-i-1)*img1->widthStep))[(img0->width-j-1)*img1 ->nChannels+1]=((uchar

*)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+1];

((uchar

*)(img1->imageData+(img0->height-i-1)*img1->widthStep))[(img0->width-j-1)*img1 ->nChannels+2]=((uchar

*)(img0->imageData+i*img0->widthStep))[j*img0->nChannels+2];

}

} }

4、图像缩放:

在介绍Ondraw函数中就看到了size变量,其实在图像缩放的函数就这个size变量起了作用。定义了一个double类型的size,只要在图像缩放的响应函数中,改变size(原图时为1.0)的值,再重新调用OnDraw函数,最后刷新就完成了图像缩放的功能。代码如下:

void CImageViewerView::OnImageBig()

{

// TODO: Add your command handler code here

CDC* pDC=GetDC();

size=size*1.5;

OnDraw(pDC);

Invalidate();

}

void CImageViewerView::OnImageSmall()

{

// TODO: Add your command handler code here

CDC* pDC=GetDC();

size=size/1.5;

OnDraw(pDC);

Invalidate();

}

void CImageViewerView::OnImageyuan()

{

// TODO: Add your command handler code here

CDC* pDC=GetDC();

size=1.0;

OnDraw(pDC);

Invalidate();

}

5、图像标记处理:

在浏览图像时,可能会对图像进行标记什么的,所以该程序添加了图像标记功能。首先标记的可以是规则图形,也可以鼠标自由画图。画的笔可以选择颜色(无、白、黑三种),画规则图形时图形的填充颜色也可以选择(无、白、黑、灰四种)。

所以定义了UINT类型的m_PenColor来记录画笔的颜色,默认0为BLACK_PEN,1为NULL_PEN,2为WHITE_PEN。

定义了UINT类型的m_BrushColor来记录画刷的颜色,默认0为NULL_BRUSH,1为WHITE_BRUSH,2为BLACK_BRUSH,3为GRAY_BRUSH。

定义了UINT类型的m_DrawType来记录画的图形类型。0为鼠标模式,不画图,1为画线段,2为画矩形,3为画椭圆,4为鼠标自由画图。

画图部分的算法就是在CImageViewerView类中添加鼠标按键响应函数OnLButtonDown,OnLButtonUp,OnMouseMove三个函数。

在OnLButtonDown函数中,记录鼠标按下的点。代码如下:

void CImageViewerView::OnLButtonDown(UINT nFlags, CPoint point)

{

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

m_ptPrev=point;

m_ptOld=point;

SetCapture();

CScrollView::OnLButtonDown(nFlags, point);

}

在OnLButtonUp函数中,利用switch-case选择画笔,画刷,并把这两个设备选入设备环境中。最后利用switch-case选择画的图形类型。利用OnLButtonUp 得到的最终点和原先记录的起始点,画出图形。代码如下:

void CImageViewerView::OnLButtonUp(UINT nFlags, CPoint point)

{

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

if(GetCapture()!=this)

return;

CClientDC dc(this);

CPen *Pen=CPen::FromHandle((HPEN)GetStockObject(BLACK_PEN));

switch(m_PenColor)/*选择画笔*/

{

case 0:

case 1:

Pen=CPen::FromHandle((HPEN)GetStockObject(NULL_PEN));

break;

case 2:

Pen=CPen::FromHandle((HPEN)GetStockObject(WHITE_PEN));

break;

}

dc.SelectObject(Pen);

CBrush

*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

switch(m_BrushColor)/*选择画刷*/

{

case 0:

break;

case 1:

pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH));

break;

case 2:

pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH));

break;

case 3:

pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(GRAY_BRUSH));

break;

}

dc.SelectObject(pBrush);

switch(m_DrawType)/*选择画的类型*/

{

case 0:

break;

case 1:

dc.MoveTo(m_ptPrev);

dc.LineTo(point);

break;

case 2:

dc.Rectangle(CRect(m_ptPrev,point));

break;

case 3:

dc.Ellipse(CRect(m_ptPrev,point));

break;

case 4:

}

ReleaseCapture();

CScrollView::OnLButtonUp(nFlags, point);

}

在OnMouseMove函数中,原理和OnLButtonUp差不多,就只是在处理图形类型时算法不同。其中关键部分的代码为:

switch(m_DrawType)

{

case 0:

break;

case 1:

dc.MoveTo(m_ptPrev);

dc.LineTo(m_ptOld);

dc.MoveTo(m_ptPrev);

dc.LineTo(point);

m_ptOld=point;

break;

case 2:

dc.Rectangle(CRect(m_ptPrev,m_ptOld));

dc.Rectangle(CRect(m_ptPrev,point));

m_ptOld=point;

break;

case 3:

dc.Ellipse(CRect(m_ptPrev,m_ptOld));

dc.Ellipse(CRect(m_ptPrev,point));

m_ptOld=point;

break;

case 4:

m_ptOld=point;

dc.MoveTo(m_ptPrev);

dc.LineTo(m_ptOld);

m_ptPrev=m_ptOld;

break;

}

6、图片浏览:

首先要添加头文件Mainfrm.h、io.h、和direct.h。有了这三个头文件就可以完成下面的算法。为了方便,写了一个函数Search,用来查找同一个文件夹中图像文件的文件名,返回值为查找到的文件的文件名。该文件定义如下:char buffer[1000];

CString Search(CString curstr,bool b_after)

{

long handle;

if(curstr.IsEmpty())

return "";

if(_getcwd( buffer, 1000)==NULL)

{

AfxMessageBox("没有当前路径,请打开一个图像文件!");

return "";

}

CString m_sbefore="";

CString m_sPartname;

int len = curstr.GetLength();

int i;

for(i = len-1;curstr[i] != '\\';i--)

m_sPartname.Insert(0,curstr[i]);

i++;

while(i--<0)

buffer[i]=curstr[i];

if (_chdir(buffer) != 0)

return "";

bool b_notfinde=false;

struct _finddata_t filestruct;

//表示查找到的路径结果

// 开始查找工作, 找到当前目录下的第一个实体(文件或子目录),

// “*”表示查找任何的文件或子目录, filestruct为查找结果

//handle = _findfirst("*.bmp", &filestruct);

// 如果handle为-1, 表示当前目录为空, 则结束查找而返回

// 检查找到的第一个实体是否是一个目录(https://www.doczj.com/doc/7d18110628.html,为其名称) handle = _findfirst("*", &filestruct);

do{

if((handle ==-1))

break;

if( ::GetFileAttributes(https://www.doczj.com/doc/7d18110628.html,) & FILE_ATTRIBUTE_DIRECTORY )

{

continue ;

}

CString Filename=https://www.doczj.com/doc/7d18110628.html,;

{

CString tailstr;

tailstr = Filename.Mid(Filename.GetLength()-3);

tailstr.MakeUpper();

Filename.MakeUpper();

m_sPartname.MakeUpper();

//BMP Files(*.BMP)|*.BMP|GIF Files(*.GIF)|*.GIF|PCX Files(*.PCX)|*.PCX|Targa Files(*.TGA)|*.TGA|Jpeg Files(*.JPG)|*.JPG|Tif Files(*.TIF)|*.TIF||";

if((tailstr=="BMP")||(tailstr=="BMP")||(tailstr=="GIF")||(tailstr=="PCX")\

||(tailstr=="TGA")||(tailstr=="TIF")||(tailstr=="JPG"))

{

//

if(b_after)

{

if(b_notfinde==false)

{

if(m_sPartname==Filename)

b_notfinde=true;

}

else

{

_findclose(handle);

return Filename;

}

}

else

{

if(m_sPartname==Filename)

{

_findclose(handle);

if(m_sbefore=="")

{

AfxMessageBox("已经到达第一个图像文件!");

}

return m_sbefore;

}

b_notfinde=true;

m_sbefore = Filename;

}

}

}

} while(_findnext(handle, &filestruct)==0);

_findclose(handle);

if(b_after)

{

AfxMessageBox("已经到达最后一个图像文件!");

}

else

{

AfxMessageBox("已经到达第一个图像文件!");

}

return "";

}

char szFilter[] = "BMP Files(*.BMP)|*.BMP|GIF Files(*.GIF)|*.GIF|PCX Files(*.PCX)|*.PCX|Targa Files(*.TGA)|*.TGA|Jpeg Files(*.JPG)|*.JPG|Tif Files(*.TIF)|*.TIF||";

有了这个函数后,两个“上一张”“下一张”的函数就很简单了,只要用Search函数查找文件,再得到该文件的图像信息,显示在视窗上就可以了。代码如下:

void CImageViewerView::OnBefor()

{

// TODO: Add your command handler code here

CString str=Search(GetDocument()->GetPathName(),false);

if(str=="")

return;

AfxGetApp()->OpenDocumentFile(str);

}

void CImageViewerView::OnAfter()

{

// TODO: Add your command handler code here

CString str=Search(GetDocument()->GetPathName(),true);

if(str=="")

return;

AfxGetApp()->OpenDocumentFile(str);

}

7、Menu和Toolbar设计:

课程设计实验报告

竭诚为您提供优质文档/双击可除 课程设计实验报告 篇一:课程设计(综合实验)报告格式 课程设计报告 (20XX--20XX年度第一学期) 名称:题目:院系:班级:学号:学生姓名:指导教师:设计周数: 成绩:日期:《软件设计与实践》课程设计计算机系软件设计与实践教学组 20XX年1月14 日 《软件设计与实践》课程设计 任务书 一、目的与要求 1.了解网络爬虫的架构和工作原理,实现网络爬虫的基本框架;2.开发平台采用JDK1.60eclipse集成开发环境。 二、主要内容 1.了解网络爬虫的构架,熟悉网页抓取的整个流程。

2.学习宽度优先和深度优先算法,实现宽度crawler应用程序的编写、调试和运行。 3.学习主题爬行及内容分析技术。 4.实现网络爬虫的基本框架。 三、进度计划 四、设计成果要求 1.要求按时按量完成所规定的实验内容; 2.界面设计要求友好、灵活、易操作、通用性强、具有实用性; 3.基本掌握所采用的开发平台。五、考核方式 平时成绩+验收+实验报告。 学生姓名:于兴隆指导教师:王蓝婧20XX年1月2日 一、课程设计的目的与要求1.目的: 1.1掌握crawler的工作原理及实现方法;1.2了解爬虫架构; 1.3熟悉网页抓取的整个流程及操作步骤; 1.4掌握宽度优先,深度优先算法,并实现宽度crawler 应用程序的编写、调试和运行;1.5掌握主题爬行及内容分析技术;1.6实现一个最基础的主题爬虫的过程;1.7理解pageRank算法,并编程验证;二、设计正文 网络爬虫研究与应用 [摘要]:本文通过对网络爬虫研究的逐步展开,讨论了爬虫的相关概念与技术,并通过实验设计了简单的基于宽度

课程设计报告模板)

课程设计报告模板()

————————————————————————————————作者: ————————————————————————————————日期: ?

课程设计(论文)任务书 软件学院软件+电商专业09级(2)班 一、课程设计(论文)题目基本模型机设计与实现 二、课程设计(论文)工作自2011年6月 20 日起至2011年 6月 24日止。 三、课程设计(论文) 地点:计算机组成原理实验室(5#301) 四、课程设计(论文)内容要求: 1.课程设计的目的 通过课程设计的综合训练,在掌握部件单元电路实验的基础上,进一步掌握整机 概念。培养学生实际分析问题、解决问题和动手能力,最终目标是想通过课程设计的形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务。 2.课程设计的任务及要求 1)基本要求? (1)课程设计前必须根据课程设计题目认真查阅资料; (2)实验前准备好实验程序及调试时所需的输入数据; (3)实验独立认真完成; (4)对实验结果认真记录,并进行总结和讨论。 2)课程设计论文编写要求 (1)按照书稿的规格撰写打印课设论文 (2)论文包括目录、绪论、正文、小结、参考文献、附录等 (3)正文中要有问题描述、实验原理、设计思路、实验步骤、调试过程与遇到问题的解决方法、总结和讨论等 (4)课设论文装订按学校的统一要求完成 3)课设考核 从以下几方面来考查:

(1)出勤情况和课设态度; (2)设计思路; (3)代码实现; (4)动手调试能力; (5)论文的层次性、条理性、格式的规范性。 4)参考文献 [1]王爱英.计算机组成与结构[M]. 北京:清华大学出版社, 2007. [2] 王爱英. 计算机组成与结构习题详解与实验指导[M]. 北京:清华大学出版社, 2007. 5)课程设计进度安排 内容天数地点 构思及收集资料1图书馆 实验与调试 3 实验室 撰写论文 1 图书馆 6)任务及具体要求 设计实现一个简单的模型机,该模型机包含若干条简单的计算机指令,其中至少包括输入、输出指令,存储器读写指令,寄存器访问指令,运算指令,程序控制指令。学生须根据要求自行设计出这些机器指令对应的微指令代码,并将其存放于控制存储器,并利用机器指令设计一段简单机器指令程序。将实验设备通过串口连接计算机,通过联机软件将机器指令程序和编写的微指令程序存入主存中,并运行此段程序,通过联机软件显示和观察该段程序的运行,验证编写的指令和微指令的执行情况是否符 合设计要求,并对程序运行结果的正、误分析其原因。 学生签名: 亲笔签名 2011年6月20 日 课程设计(论文)评审意见 (1)设计思路:优( )、良()、中( )、一般()、差( ); (2)代码实现:优()、良()、中()、一般()、差();

C语言课程设计报告-游戏2048

东华理工大学C语言课程设计报告 学院:国际教育学院学院专业:电子信息工程 班级:1420606 学号:201420060638 姓名:钟天运

一、课程设计题目:游戏2048 二、课程设计要求: a)使用C语言编写2048这款游戏 b)能够正常运行,拥有游戏界面。 c)能正常进行游戏从开始到结束。 d)用户操作方便 三、设计思路: a)游戏介绍: i.2048是一款简单的数字类游戏,界面是一个 4*4的方形格子。每个格子里可以为空或者有 一个2^n的数值。 ii.用户可以输入4种指令,分别是:上下左右,游戏会根据用户的指定的方向,将格子中 的数值向对应方向进行移动,直至移动到最边 上的格子或者有其他数值占用,如果碰到等大 数值,将会进行合并。此外,成功移动后,会 在一个空格子随机生成一个2或者4 iii.游戏目标是合成2048这个数值或者更大的数值。 b)实现思路: i.可以使用二维数组来保存4*4格子中的数值 ii.指令,可以通过输入字符函数,读取用户

在键盘上的方向键,进行判断执行对应的代 码。 iii.游戏界面,可以使用简单的特殊制表符,来实现,并通过清屏函数来进行反复同位置打 印界面。 iv.需要判断游戏结束的函数,以及记录游戏分数和步骤的变量 v.当游戏结束时,能够询问用户是否重新开始。 vi.随机生成一个新数,可以调用随机函数,使用时间做种子。 c)实现难点: i.打印游戏界面,要实现灵活能根据棋盘数组里 面的数据灵活打印。 ii.执行操作时,数值的移动和合并。

四、流程图

五、C语言源代码 // 游戏2048.c #include "windows.h" #include "time.h" #include "stdio.h" #include "conio.h" #include "string.h" //宏定义常量方向键值 //const int LEFT = 75, UP = 72, RIGHT = 77, DOWN = 80; #define LEFT 75 #define UP 72 #define RIGHT 77 #define DOWN 80 const char error_str[] = "您上次输入的指令无法识别,请重新输入。"; struct board { int place[4][4]; long int stepn; long int num; //存储游戏分数 long int time; int dtk; //direction key 记录方向键,及操作方向 int over; int zeronum; }; //该函数为游戏运行函数,当只是玩游戏的时候。进入该函数,游戏控制函数。int main() { //place数组为棋盘,其中为零代表空,-1代表不能合并的牌,其他2的倍数值为本身含义,初始化为全0。 struct board board1, board_backup; int newgame(struct board *, int), show(struct board *), operate(struct board *); char str[100] = "首次运行游戏"; //用于记录系统返回给用户的信息,例如:上一步执行向左合并,按键有误等 newgame(&board1, 0); //调用函数为新局初始化,第二个

《C语言课程设计》实验报告

《C语言课程设计》报告 学院:信息工程学院 专业:信息管理与信息系统设计题目:通讯录程序设计班级:2016级一班 学号:201601510138 姓名:张进步 指导教师:杨菲菲 时间:12.24

学生通讯管理系统 1.1 设计目的 学习如何实现一个复杂的信息管理系统——学生通讯管理系统,能够实现老师对学生基本信息的记录、查询、修改。 通过本次学习,读者能够掌握: (1)如何设计主菜单和子菜单,以及各级菜单的响应与返回操作; (2)如何合理设计不同的结构体对系统中多个实体进行封装; (3)如何合理设计多个结构体数组管理不同实体对应的数据; (4)如何对复杂的函数过程进行拆分,用多个子函数进行封装; (5)进一步熟悉文件读取的相关操作。 1.2需求分析 本章的学生信息管理系统的主要功能面向老师,能够实现对学生信息进行录入、修改、查询。 学生信息方面的功能需求如下。 (1)新增学生信息,包括姓名、籍贯、电话号码(2)、电子邮箱。 (2)修改学生信息,可以选择对某个学生的某个属性值进行修改。 (3)查找学生信息,即输入要查找的学生学号,实现学生信息查询。 (4)显示所有学生信息,并以列表的形式清晰呈现。 1.3总体设计 系统功能结构图如图所示;学生信息管理系统 学生信息管理模块:包括4个子模块,分别是学生信息的录入,学生信息的修改,学生信息的查询,学生信息的浏览。

1.4详细设计与实现 1.4.1 预处理及数据结构 1.头文件 本项目涉及4个头文件,其中#include使用字符串的函数的时候需要添加此头文件,#include #include /*system使用的函数*/ #include /*getchar、getch函数使用的头文件*/ #include /*strcmp比较2个字符串是否一样*/ 2.宏定义 LEN sizeof(struct student)表示struct student的长度。DATA是按格式输出结构体的各项数据,能够方便输出操作,减少代码量。 #define_CRT_SECURE_NO_W ARNINGS #include #include #include #include #define LEN sizeof(struct student) #define FORMAT "%-8d%-15s%-15s%-15d%-15d%-15s\n" #define DATA stu[i].numb,stu[i].name,stu[i].nat,stu[i].num1,stu[i].num2,stu[i].mail 3.结构体 利用一个结构体struct student struct student/*定义学生信息结构体*/ { int numb;/*学号*/ char name[15];/*姓名*/ char nat[16];/*籍贯*/ int num1;/*电话号码1*/ int num2;/*电话号码2*/ char mail[40];/*邮箱*/ }; 4.全局变量 分别利用全局变量结构体数组struct student stu[50];来记录所有学生的基本信息,避免程序运行过程中多次初始化,方便各个式子函数调用。 struct student stu[50];

vf课程设计实验报告模板

vf 课程设计实验报告模板 经济管理学院 学生信息管理系统的设计与实现 09年12 月28 日 、课程设计的目的和意义 当今,人类正在步入一个以智力资源的占有和配置,知识生产、分配和使用为最重要因素的知识经济时代,为了适应知识经济时代发展的需要,大力推动信息产业的发展,我们通过对学生信息管理系统的设计,来提高学生的操作能力,及对理论知识的实践能力,从而提高学生的基本素质,使其能更好的满足社会需求。 学生信息管理系统是一个简单实用的系统,它是学校进行学生管理的好帮手。 此软件功能齐全,设计合理,使用方便,适合各种学校对繁杂的学生信息进行统筹管理,具有严格的系统使用权限管理,具有完善的管理功能,强大的查询功能。它可以融入学校的信息管理系统中,不仅方便了学生信息各方面的管理,同时也为教师的管理带来了极大地便利。 我们进行本次课程设计的主要目的是通过上机实践操作,熟练掌握数据库的设 计、表单的设计、表单与数据库的连接、SQL语言的使用和了解它的功能:数据定 义、数据操纵、数据控制,以及简单VF程序的编写。基本实现学生信息的管理, 包括系统的登录、学生信息的录入、学生信息的浏览、学生信息的查询、学生信息的修改和学生信息的删除,并对Visual FoxPro6.0 的各种功能有进一步的了解,为我们更进一步深入的学习奠定基础,并在实践中提高我们的实际应用能力,为我们以后的学习和工作提供方便,使我们更容易融入当今社会,顺应知识经济发展的趋势。 - 1 -

、系统功能设计 通过该系统可以基本实现学生信息的管理,包括系统的登录、学生信息的录 入、学生信息的浏览、学生信息的查询、学生信息的修改和学生信息的删除。系统 功能模块如下图所示。 学生信息管理系统主界面 登录 管理 学学学学学 生生生生生 信信信信信 息息息息息 录查浏修删 入询览改除 三、系统设计内容及步骤 3.1创建项目管理文件 1.启动foxpro 系统,建一个项目管理器,命名为“学生管理”。 哑 目f ■ 也 电 岂同左 矣 氏H. 0 存 JI 蛋誤曾

网站课程设计报告

第1节课程设计题目及背景 (3) 1.1 设计题目 (3) 1.2 设计背景 (3) 第2节网站设计的开发工具 (3) 第3节网站建设过程 (4) 3.1 网站系统分析 (4) 3.2 数据库的设计 (5) 3.3 功能模块介绍 (8) 第4节网站工作流程 (11) 4.1 连接数据库 (11) 4.2 用户登录 (12) 4.3 歌曲显示,以最新歌曲为例 (12) 4.4 音乐搜索 (12) 第5节网站显示效果 (15) 5.1 网站主页 (15) 5.2 歌曲分类页面 (16) 5.3 音乐搜索页面 (17) 5.4 用户留言页面 (17) 5.5 音乐播放器页面 (18) 5.6 后台管理主页面 (19) 5.7 用户管理页面 (19) 第6节总结和设计体会 (21)

第1节课程设计题目及背景 1.1 设计题目 构架一个音乐网站,要求网站必须包含音乐网站的一些基本功能,即前台的用户申请登陆功能,听歌功能,音乐搜索,音乐收藏功能,提交留言和后台的用户管理,歌曲管理,留言管理,系统管理。 1.2 设计背景 在互联网发展迅猛的今天,我们无时无刻不与网络接触,可以从中查找我们需要的信息,可以发布想让别人知道的信息,可以找到你不认识但真心的朋友,也可以第一时间看到国内外的重大事件。当我们无事可做的时候,便开始了娱乐方式的搜索,由此,很多音乐网站和视频网站应运而生,服务大家,为我们的生活增添了色彩。随着我国网民的增加,也促进了音乐网站的开发。 第2节网站设计的开发工具 2.1 Dreamweaver 8.0 2.2 Flash 8.0 2.3 Firework 8.0 2.4 Access数据库 2.5 IIS服务器 说明:Dreamweaver用于网站的开发,Flash用于网站flash 效果的制作,firework对图片进行处理,IIS作为我们的asp 网站服务器,数据库则采用微软的Access数据库。 第3节网站建设过程

c语言课程设计报告学生成绩信息管理系统源代码

实验报告 一、问题陈述及其需求分析 (一)问题陈述 学生信息管理系统是对学生信息的基本管理,其中包括以下及模块: (1)增加一个学生的信息(需输入要增加学生的所有信息); (2)统计本班学生总人数及男女生人数。 (3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。 (4)按学号对所有学生信息排序,并输出结果; (5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。( 二) 功能需求分析 学生信息管理系统设计 学生信息包括:学号,姓名,性别,出生年月,电话 使之提供以下功能: 1、系统以菜单方式工作 2、建立链表并显示 3、插入新的学生信息 4、删除某学号的学生信息 5、查找某学号的学生信息 6、对学生信息排序 7、统计学生人数 8、输出学生信息 二总体设计 (一)模块 依据程序的数据结构,描述该程序的层次结构,如下图:

1、建立链表并显示 void createlist(struct stucode **r); 2、插入新的学生信息 void insert(struct stucode **r); 3、删除某学号的学生信息 void del(struct stucode **r); 4、查找某学号的学生信息 void search1(struct stucode *r); 5、对学生信息排序 void sort(struct stucode **r); 6、统计学生人数 void search2(struct stucode *r); 7、输出学生信息 void out(struct stucode *r); 1 建立链表并显示 2 添加学生信息 3 删除学生信息 息 4 按学号查找学生信 5 对学生信息排序 6统计学生人数 7输出学员信息 8 学生信息写入文件 0退出 main() 菜单函数

华中科技大学计算机学院C语言课设实验报告

华中科技大学计算机科学与技术学院 《C语言程序设计》课程设计 实验报告 题目:科研项目信息管理系统 专业:计算机 班级: 学号: 姓名: 成绩: 指导教师:李开 完成日期:2009年10 月20 日

科研项目信息管理系统一、系统功能结构模块图 二、数据结构设计及其用法说明 typedef struct lakey{ char name[30];/*团队名称*/ int total;/*自然科学基金的科研项目数*/ float dudu;/*经费数*/ struct lakey *next; }*plakey;/*统计3中用到的数据结构*/ typedef struct emmey{ char name[30];/*团队名称*/ int teacher;/*老师人数*/ int harden;/*项目数*/ float bizhi;/*比值*/ struct emmey *next; }*pemmey;/*统计4中用到的数据结构*/ typedef struct kPro{ char code[15];/*项目编号*/ char sort;/*项目种类*/ int aking1; char time[8];/*项目时间*/ float dudu;/*项目经费*/ int aking2;

char beiler[15];/*负责人*/ int aking3; char keynoName[30];/*所在团队名称*/ struct kPro *next; }harden,*pHarden; typedef struct Komo{ int teacher;/*老师人数*/ char name[20];/*院系名称*/ int student;/*学生人数*/ float bizhi;/*二者比值*/ struct Komo *next; }*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/ typedef struct kTea{ char name[30];/*团队名称*/ char beiler[15];/*负责人*/ int stuNum;/*学生人数*/ int aking2; int coco;/*老师人数*/ char colName[20];/*所在院系的名称*/ int aking1; struct kTea *next; pHarden child; }keyno,*pKeyno; typedef struct edward{ char name[20];/*院系名称*/ int totalnum;/*项目总数*/ int num973;/*973项目数*/ int num863;/*863项目数*/ float amount;/*经费数*/ struct edward *next; }*pedward;/*统计2中用到的数据结构*/ typedef struct kCol{ char name[20];/*院系名称*/ int aking; char beiler[15];/*院系负责人*/ struct kCol *next; char call[15];/*负责人电话号码*/ pKeyno child; }kekey,*pKekey;

网页设计课程设计报告

课程设计 课程名称:HTML5开发技术课程设计 专业班级:计科1201 学生姓名:伍志强 学号: 201216010506 指导教师:刘宏月 学期:2013-2014学年第一学期

HTML5开发技术专业课程设计任务书 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页

1 需求分析 本课程设计为一个商业网站,大的框架为整个网站分为5个页面,分别为:主页面、公司的业务面,公司产品问题咨询面,公司产品的技术支持面,校园招聘界面。各个页面间都是相互连接的,方便读者更快捷地找到想了解的信息。在每个界面拥有的公司logo ,登陆界面,和一些视频的宣传和校园招聘网页的背景音乐,友情链接,插入的各种静动态图片,搜索栏。每个界面链接的公司的最新各种动态,和基本的各种文字说明,采用的是中英双板模式书写。 网站的目录结构如下: 伍志强------网站根目录 Css ------存放外置CSS文件 Images ------存放图片文件 Music ------存放背景音乐 JS------存放的javascript代码 .project------编译时建立的一个工程 Index系列------存放的网站的各个网页 2 概要设计

3 详细设计 页面的布局和风格 DIV+CSS的基本过程是先布局,对网页进行总体设计,再设计内容,对布局的每一部分进行设计。 DIV+CSS对内容的设计也体现内容和表现相分离的思想。对内容的表现的描述都在CSS中,内容可以应用CSS样式,不需要额外的HTML标签进行内容的修饰。 CSS网页布局的原理,就是按照HTML5代码中对象声明的 body { background:#131b20; font-family:Arial, Helvetica, sans-serif; font-size:100%;

c语言课程设计报告

C语言程序设计B 课程设计报告 设计题目:学生成绩管理系统年级班级: 学号: 姓名: 指导教师: 2020 年 6 月 18 日

目录 一、设计目的 (3) 二、课程设计内容和要求 (4) 三、总体设计 (5) 四、主要步骤 (12) 五、功能实现 (13) 六、功能测试 (64) 七、评价程序 (83) 八、课程设计体会 (84)

一、设计目的 程序设计能力是当代理工类大学生的必备能力,当学生学习了C语言之后,编程能力远远不能达到开发实际应用程序的要求,特备是对其中的指针、结构体、链表和文件部分的理解和应用都比较弱。 程序设计的目的是通过对面向过程的学习,将C语言的主要知识点进行综合,针对提高学生C语言程序设计能力,强化编写较大的应用软件能力,熟练运用已掌握的知识解决实际需要解决的问题,以达到更加熟知指针、链表、结构体、文件读取、标准库的使用。 主要目的为以下几点: 1、熟练掌握面向过程(结构化)程序设计基本知识; 2、综合运用所学知识解决实际问题; 3、受到面向过程(结构化)程序设计的基本训练; 4、体会面向过程(结构化)开发程序的过程。

二、课程设计内容和要求 1.课程设计内容: 学生通过使用C语言进行编写算法,开发学生成绩管理系统,以实现对学生成绩的管理。 2.课程设计要求 1)具有菜单,可以在菜单上进行选择; 2)能实现学生数据录入、修改、删除、查询; 3)能实现数据排序; 4)有数据输出功能; 5)有数据读取与存储功能; 6)一个学生的数据(称为:每条记录)包含姓名、学号、语文、数 学、英语、总分、名次等信息; 7)以结构方式存储每条记录; 8)多条记录以链表方式存储到内存; 9)随时可将全部数据存储到磁盘文件中,方便下次从磁盘读取数据。

程序设计课程设计实验报告

《程序设计》课程设计姓名: 学号: 班级:软件工程14班 指导教师: 成绩:

1.消除类游戏 【问题描述】 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 【基本要求】 现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被消除。 输入数据格式: 输入的第一行包含两个整数n,m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m 个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出数据格式: 输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 【测试数据】 为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。 测试数据一 输出说明: 棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 测试数据二 输出说明: 棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。 【功能实现】 #include #include<> usingnamespacestd;

{ intm,n,i,j; inttemp; cin>>n>>m; temp=m; m=n; n=temp; int*map=newint[m*n]; int*mark=newint[m*n]; int*tmap=map; int*tmark=mark; intdif=0; ount=0; } p rintf("请输入要输入数的个数\n"); s canf("%d",&n);/*输入要输入数的个数*/ f or(i=0;idata1[j+1].number)

C语言课程设计报告-模板

C语言课程设计报告 班级:16 物联网 一、题目说明 (1)读取输入信息,能正确进行数字运算

(2)拥有记忆功能,可查询最近几次计算结果并继续进行数字运算。 二、基本功能实现 (1)能实现两个数之间的加减,乘,除,乘方,开方等运算。 (2)实现记忆功能,可保留近十位结果,可用#键查看。(3)*键作为清0键,清除当前屏幕上的值为0表示重新开三、设计流程(可以画流程图,可以直接写说明)

四、代码 #include #include #include #include double yunsuan(double a, char operate, double b); //处理数值之间的运算void PutRes(double array[], double res, int *i); //保存该次运算结果 int main() { char str[40]; double a = 0; double b = 0; double res = 0; double history[10] = {0,0,0}; char opt; int i = 0; printf("欢迎进入计算功能(eg: 1 \n+ 1 ; '#':查询历史结果; 'q':退出程序)·\n"); while(1){

fgets(str,40,stdin); //将从键盘的一整行标准输入保存在字符串str中 if(sscanf(str,"%lf", &a) == 1){ //将str以长浮点型的格式放入a中,如果返回值为1,说明输入的是数值, scanf("%c %lf", &opt, &b); //获取操作符的值和另外一个操作数的值 res = yunsuan(a,opt,b); //调用yunsuan()函数计算,并将结果给res printf("%lf %c %lf = %lf\n\n",a, opt, b, res); PutRes(history, res, &i); //调用函数PutRes()将本次结果保存到数组history中(i用引用传递) // printf("%d\n", i); }else if(sscanf(str,"%c",&opt) == 1){ //将str以字符型的格式放入opt中,如果返回值为1,说明输入的是字符 if(opt == '#'){ //如果opt为‘#’,则显示history 中的数值 int j = 0; for(j = 0; j < i; ++j){ //i为history中存放的数值个数 printf(" %lf ", history[j]); } printf("\n");

89C51单片机课程设计之秒表设计实验报告

单片机课程设计报告 单 片 机 秒 表 系 统 课 程 设 计 班级: 课程名称:秒表设计 成员: 实训地点:北校机房 实训时间:6月4日至6月15日

目录 1课程设计的目的和任务 1.1 单片机秒表课程设计的概述 1.2课程设计思路及描述 1.3 课程设计任务和要求 2硬件与软件的设计流程 2.1系统硬件方案设计 2.2所需元器件 3 程序编写流程及课程设计效果 3.1源程序及注释 3.2原理图分析 3.3课程设计效果 4 心得体会

1. 课程设计的目的和任务 1.1单片机秒表课程设计的概述 一、课程设计题目 秒表系统设计——用STC89C51设计一个4位LED数码显示“秒表”,显示时间为000.0~9分59.9秒,每10毫秒自动加一,每1000毫秒自动加一秒。 二、增加功能 增加一个“复位”按键(即清零),一个“暂停”和“开始”按键。 三、课程设计的难点 单片机电子秒表需要解决几个主要问题,一是有关单片机定时器的使用;二是如何实现LED的动态扫描显示;三是如何对键盘输入进行编程;四是如何进行安装调试。 四、课程设计内容提要 本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及课程箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本课程设计有三个开关按键:其中key1按键按下去时开始计时,即秒表开始键,key2按键按下去时数码管清零,复位为“00.00”. key3按键按下去时数码管暂停。 五、课程设计的意义 1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的 应用进一步的了解。 2)掌握定时器、外部中断的设置和编程原理。 3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。 4)该课程通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统, 拥有正确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义 1.2课程设计思路及描述

个人信息管理系统毕业课程设计实验报告

(此文档为word格式,下载后您可任意编辑修改!) 山东交通学院 目录 1.系统分析 (2) 1.1系统需求分析 (2) 1.2项目规划 (2) 1.3系统功能结构分析 (3) 1.4设计目的分析 (3) 2.数据库系统设计 (4) 2.1数据表概要设计 (4) 2.2数据库逻辑结构设计 (4) 3.应用程序设计 (5) 3.1界面设置 (5) 3.2关键技术 (15) 4.系统安装 (20) 建立数据源 (20) 5.设计体会 (21) 参考文献 (22)

摘要 随着经济社会的发展,计算机已被应用到社会生活的各个领域。与此同时,互联网作为信息技术的通信桥梁连接着全球的计算机,而网站作为网络信息主要的表现形式而且还是互联网信息的主要承载者,在网络上表现出其及其重要的地位,并发挥着极其重要的作用。无论是在国内还是国外都得以迅速的发展和壮大,并被人们重视和关注。互联网已经彻底的改变了世界,互联网的世界里蕴藏着无限的可能,在这种情况下,各行各业及其个人、单位、工厂、企事业等等在网上构筑属于自己的网络信息平台,保护自己的网络资源并在互联网上开辟自己的市场和消费群体,以及构造自己的数字化世界和加强全球范围内不同地域的人们联系交流等等活动也就显的日益重要。于是各种各样的网站便如雨后春笋般地出现鱼龙混杂且良莠不齐。因此,个人信息的管理就显得尤为重要了。不仅可以更好的保护个人信息,对日常的使用也会提供很大的方便。关键词:个人信息管理系统;数据集;数据库;Visual C++6.0。 1.系统分析 1.1系统需求分析 在做本系统前,我对系统的需求做了如下分析: 1)登录权限:在登录权限的分析上我们规定必须凭借用户名和密码才可登陆,进行管理。 2)使用者功能:首先说明一下,我们的系统用户对象是个人。关于其本系统的功能,大致可分为日记管理,通讯录管理,备忘录管理,以及个人财务管理;日记管理,其中包括用户对日记编号,时间,地点,事件、人物的查询、

土木工程课程设计报告

页眉 土木工程课程设计 学院:建筑工程学院 1142 土木班级: 号:1141401227 学 秦齐姓名: 陈宝海指导老师:

页脚 页眉 目录 1. 工程概况 施工方案2. 3. 施工准备工作计划 4. 资源需要量计划 施工准备工作计划5. 6. 施工现场平面布置主体分部分项工程 7. 附图: 施工平面布置图一、 施工进度计划图二、

页脚 页眉 1.工程概况 本工程为某高级中学综合楼,位于解放路。采用现浇柱,预制梁,整体装配式钢筋混凝土框架结构。 1.1 层高及建筑面积:总共六层,顶高23.1m,1-2层层高4.8m,3、4、5层层高为3.3m,6层层高为3.6m。总建筑面积7834m。21.2 绝对标高:±0.00相当于绝对标高425.044。 1.3 结构方案:本工程为装配整体式框架结构,横向框架梁为预制迭合梁,纵向框架梁,次梁,柱,楼梯等均为现浇。楼盖除厕所、盥洗、水箱间及二层售饭处为现浇外,其余均为预制空心板,上有4cm整浇层。墙体为非承重墙,外墙为240m厚普通粘土砖墙,内墙为大孔空心砖墙。施工时横向预制梁吊装后再现浇纵向框架梁和次梁。 1.4 楼地面:水泥砂浆地面用于厨房和库房,教室宿舍等。水磨石地面用于上述以外的其它部位,底层地面垫层为60厚100素混凝土。#1.5 顶棚及墙面:楼梯间为石膏板隔墙,贴白色塑料壁纸。其它顶棚及墙面均为石灰砂浆打底,纸筋灰罩面,喷白灰浆二道。 1.6 外墙面:为绿色水刷石,局部构件(檐口、阳台、雨蓬)及凸出墙面壁柱等贴马赛克。1.7屋面防水层:沥青胶隔汽层,水泥蛭石保温层,二毡三油防水层上铺绿豆砂。 二、施工方案

c语言课程设计报告书

课程设计报告书 所属课程:c语言 项目:库函数模拟系统 指导老师:邹姝稚 班级:软件1401 姓名:江闯 学号:141403107 分数:

1.任务描述: 本系统开发的代码模拟了下列库函数的功能: (1).模拟gets和puts的功能:能接收一个字符串,将其写入ASCII文件,并且可以读出显示。 (2).在不使用字符串库函数的条件下,编程实现字符串的拷贝,连接,求长,倒置功能。 (3).字符串加密功能:将一段明文建立到一个ASCII文件中,按加密的算法加密后写入密文文件,最终实现将明文和密文文件都显示出来。 (4).编程实现字符串与对应数字的相互转换功能。 2.总体设计: 模块调用图: 图1

函数调用图: 图2 函数功能: (1)函数gp( ):模拟gets和puts的功能 (2)函数kaobei( ):实现字符串的拷贝 (3)函数lianjie( ):实现字符串的连接 (4)函数qiuchang( ):实现字符串的求长 (5)函数daozhi( ):实现字符串的倒置 (6)函数jiami( ):实现字符串的加密功能,最后将明文和密文文件都显示出来 (7)函数zhuanhuan1( ):将数字字符串转换为对应的数字 (8)函数zhuanhuan2( ):将数字转换为对应的数字字符串 3.详细设计: (1).模仿gets和puts功能: gets和puts功能与scanf和printf函数的功能相似,但是也不是完全相同,本系统模拟功能的程序总共运用了两次函数调用技术,模拟gets运用了一次,模拟puts运用了一次。 (2)..字符串的拷贝功能: 字符串的拷贝功能程序设计源于strcpy的功能,其中运用了字符串数组和指针的相关技术,还运用了一组while语句,实现语句的循环,从而将一个字符串拷贝到一个空数组中。

计算机网络课程设计实验报告

中南大学课程设计报告 课程:计算机网络课程设计 题目:基于Winpcap的网络流量统计分析 指导教师:张伟 目录 第一章总体设计 一、实体类设计 --------P3 二、功能类设计 --------P3 三、界面设计 --------P3

第二章详细设计 一、实体类实现 --------P4 二、功能类实现 --------P4 三、界面实现 --------P5 第三章源代码清单及说明 一、CaptureUtil.java --------P7 二、MyPcapPacketHandler.java --------P9 三、PacketMatch.java --------P9 四、Windows.java --------P13 第四章运行结果 --------P19 第五章心得体会 --------P21 第一章总体设计 一、实体类设计 TCP、UPD、ICMP、ARP、广播数据包五个包的数据结构设计 二、功能类设计 (1)网卡获取 (2)包的抓捕

(3)包的处理 三、界面设计 (1)布局 (2)按钮功能连接 第二章第二章详细设计 一、实体类实现 TCP、UPD、ICMP、ARP、广播数据包五个包的数据结构设计。 本程序采用Java编写,基于win10pcap。Win10pcap是winpcap在win10系统上的适用版本。Java对于winpcap使用jnetpcap进行支持。对于TCP、UPD、ICMP、ARP、广播数据包五种类型的包,在jnetpcap的jar包中大部分已经封装好了相关的实体类型。对应如下:ARP 实体类:https://www.doczj.com/doc/7d18110628.html,work.Arp; UPD 实体类:https://www.doczj.com/doc/7d18110628.html,work.Icmp;

课程设计报告与开发

任务导向式课程设计与开发方法培训 解决任何问题的核心是:学习成长改变 学习:要有终身学习的能力,也就是学力 成长:当你的成长速度跟不上爱人时,婚姻就出现问题 当你的成长速度跟不上学生时,教育就出现问题 当你的成长速度跟不上老板时,工作就出现问题 当你的成长速度跟不上下级时,管理就出现问题 当你的成长速度跟不上市场时,公司就出现问题 改变:改变才是最伟大的历练。 情商和平台:一根绳子可以卖五块,但绑在螃蟹上就值五十块,这就是平台。想成功先发疯,头脑简单往前冲。 进入课程: 小组讨论: 问题:任务完成过程中的知识点如何体现? 开发目标 信息化 标准定位 到底对学生有没有帮助? 一、课程开发是什么? 开发一门课,包含什么 为什么有这么多问题出现?

1.没有统一的方法论。 2.每一个任课教师永远站在局部,不知专业标准是什么。 3.其实课程开发的能力是教育部对每一个教师的要求。 二、为什么是企业的人来分享职业教育课程设计与开发? 1.我国职业教育面临的挑战 一是高校专业设置,人才培养方向与市场需求变化不同步二是毕业生毕业找不工作,企业找不到人 2.中国经济发展的机遇与挑战 无法支撑整个经济的转型, 3.面对新机遇,我们能做些什么 三个对接:专业设置与产业需求、课程内容与职业 行为的改变是达成业务结果的fcwt 三、基于行为改变的课程设计开发模型--MADDIE Management课程开发项目管理 Analyses需求分析 design课程架构设计 deveiopment课程内容开发 Evaluation课程评估

提问:MADDIE 课程设计开发方法论的好处是什么? 一是提高课程质量;二是减轻开发难度;三是缩短开发周期;四是降低教学难度。 小结:概念;意义和好处。 四、课程开发项目管理 提问:在课程开发项目启动阶段,你曾经遇到哪些问题? 做好统筹规划, 做好三件核心事:A 需求分析、D 课程架构设计、D 课程内容开发。 课程开发项目管理 团队、时间和预算是三个要素 (一)课程开发计划 团队、时间和预算 团队: 1.需要什么角色的人(项目经理、教学设计者、业务内容专家、图形美化师、文档开发者、种子讲师);

(完整版)C语言课程设计实验报告

目录 目录 (1) 第1章问题描述 (2) 1.1 题目 (2) 1.2基本要求 (2) 第2章需求分析 (2) 1.1软件的基本功能 (2) 1.2输入/输出形式 (2) 1.3测试数据要求 (3) 第3章概要设计 (3) 1.1主程序 (3) 第4章详细设计 (4) 1.1数据类型 (4) 1.2伪码算法 (4) 1.3 程序流程图 (7) 第5章操作 (8) 1.1 进入足球比赛积分排行榜界面 (8) 1.2进入目录 (8) 1.3输入球队比赛信息 (10) 1.4 显示九轮比赛排行榜 (12) 1.5 保存数据 (15) 1.6 由D 盘查看数据 (16) 第6章参考文献 (16)

第1章问题描述 1.1 题目 足球比赛积分排行榜程序 1.2基本要求 (1)10个足球队进行9轮循环赛,胜一场积3分,平一场积1分,输一场积0分。 (2)如果两个队积分相同,进行净胜球的比较,如果净胜球再相同进行总进球的比较。 (3)编写一程序输入每轮比赛的比分,并可以存储。 (4)最后统计出每轮比赛的积分榜。 第2章需求分析 1.1软件的基本功能 (1)输入10个足球队的9轮比赛进球数。 (2)计算10个球队的积分,净胜球,总进球。 (3)对9轮比赛进行排序。 1.2输入/输出形式 由键盘输入,屏幕输出,并且以TXT形式保存。

1.3测试数据要求 输入九轮比赛10个足球队的进球数,由系统统计积分、净胜球、总进球数,并输出。 第3章概要设计 1.1主程序 头文件: #include 说明:main函数的头文件,控制整个程序。 #include 说明:清屏的头文件。 #include 说明:包括了大量的函数原型,调用现成的库函数。 #include 说明:基于char*的字符串处理函数。 全局变量: void input(); 输入数据函数 void sort(); 排序数据函数 void display(); 显示数据函数 void save(); 保存数据函数

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