您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > Visual-C++-MFC-设计报告--课程成绩直方图
1VisualC++可视化程序设计报告——课程成绩直方图系别:班级:姓名:学号:2目录一、设计内容介绍………………3二、设计思路方法、过程…………3三、设计结果示范…………………3四、设计心得体会…………………4五、附:设计中的关键源程序……4-73一、设计内容介绍用VisualC++绘图的方法绘制直方图,表示一个班级某门课程的成绩分布,反映60、60~69、70~79、80~89及90的五个分数段的人数。总共绘制五个矩形,相邻矩形的填充样式要有所区别,并要显示各分数段的人数。二、设计思路方法、过程用VisualC++绘图的方法绘制直方图,用画刷填充矩形(填充前判断相邻矩形的填充样式是否相同)。主要过程:1.用MFCAppWizard创建一个默认的单文档应用程序09125huijinyao。2.为C09125huijinyaoDrawView类添加一个成员函数DrawScore,用于根据成绩来绘制直方图,增加代码。3.在C09125huijinyaoView::OnDraw函数中添加代码,调用DrawScore函数。三、设计结果示范4四、设计心得体会通过这次课程设计,我掌握了VisualC++绘制平面图形的方式方法,了解了画笔和画刷的使用,认识了VisualC++编程的过程和解决实际问题的方式方法,体会到了VisualC++编程在日常生活中的应用及VisualC++编程对于生活各方面的重要性。为将来的学习打好了基础。五、附:设计中的关键源程序1.voidCEx_DrawView::DrawScore(CDC*pDC,float*fScore,intnNum)//fScore是成绩数组指针,nNum是学生人数{intnScoreNum[]={0,0,0,0,0};//各成绩段的人数的初始值//下面是用来统计各分数段的人数for(inti=0;inNum;i++){intnSeg=(int)(fScore[i])/10;//取数的十位上的值if(nSeg6)nSeg=5;//60分if(nSeg==10)nSeg=9;//当为100分,算为90分数段nScoreNum[nSeg-5]++;//各分数段计数}intnSegNum=sizeof(nScoreNum)/sizeof(int);//计算有多少个分数段5//求分数段上最大的人数intnNumMax=nScoreNum[0];for(i=1;inSegNum;i++){if(nNumMaxnScoreNum[i])nNumMax=nScoreNum[i];}CRectrc;GetClientRect(rc);rc.DeflateRect(40,40);//缩小矩形大小intnSegWidth=rc.Width()/nSegNum;//计算每段的宽度intnSegHeight=rc.Height()/nNumMax;//计算每段的单位高度COLORREFcrSeg=RGB(0,0,192);//定义一个颜色变量CBrushbrush1(HS_FDIAGONAL,crSeg);CBrushbrush2(HS_BDIAGONAL,crSeg);CPenpen(PS_INSIDEFRAME,2,crSeg);CBrush*oldBrush=pDC-SelectObject(&brush1);//将brush1选入设备环境CPen*oldPen=pDC-SelectObject(&pen);//将pen选入设备环境CRectrcSeg(rc);rcSeg.right=rcSeg.left+nSegWidth;//使每段的矩形宽6度等于nSegWidthCStringstrSeg[]={60,60-70,70-80,80-90,=90};CRectrcStr;for(i=0;inSegNum;i++){//保证相邻的矩形填充样式不相同if(i%2)pDC-SelectObject(&brush2);elsepDC-SelectObject(&brush1);rcSeg.top=rcSeg.bottom-nScoreNum[i]*nSegHeight-2;//计算每段矩形的高度pDC-Rectangle(rcSeg);if(nScoreNum[i]0){CStringstr;str.Format(%d人,nScoreNum[i]);pDC-DrawText(str,rcSeg,DT_CENTER|DT_VCENTER|DT_SINGLELINE);}rcStr=rcSeg;rcStr.top=rcStr.bottom+2;rcStr.bottom+=20;pDC-DrawText(strSeg[i],rcStr,DT_CENTER|DT_VCENTER|DT_SINGLELINE);7rcSeg.OffsetRect(nSegWidth,0);//右移矩形}pDC-SelectObject(oldBrush);//恢复原来的画刷属性pDC-SelectObject(oldPen);//恢复原来的画笔属性}2.voidCEx_DrawView::OnDraw(CDC*pDC){CEx_DrawDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);FloatfScore[]={66,82,69,74,86,82,67,60,45,44,77,98,65,90,86,76,66,62,83,84,97,43,67,57,60,60,81,74,60,72,81,69,79,91,69,71,81};DrawScore(pDC,fScore,sizeof(fScore)/sizeof(float));}
本文标题:Visual-C++-MFC-设计报告--课程成绩直方图
链接地址:https://www.777doc.com/doc-3595680 .html