MFC报告.doc

上传人:聆听****声音 文档编号:899912 上传时间:2023-04-30 格式:DOC 页数:15 大小:469KB
下载 相关 举报
MFC报告.doc_第1页
第1页 / 共15页
MFC报告.doc_第2页
第2页 / 共15页
MFC报告.doc_第3页
第3页 / 共15页
MFC报告.doc_第4页
第4页 / 共15页
MFC报告.doc_第5页
第5页 / 共15页
MFC报告.doc_第6页
第6页 / 共15页
MFC报告.doc_第7页
第7页 / 共15页
MFC报告.doc_第8页
第8页 / 共15页
MFC报告.doc_第9页
第9页 / 共15页
MFC报告.doc_第10页
第10页 / 共15页
MFC报告.doc_第11页
第11页 / 共15页
MFC报告.doc_第12页
第12页 / 共15页
MFC报告.doc_第13页
第13页 / 共15页
MFC报告.doc_第14页
第14页 / 共15页
MFC报告.doc_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MFC报告.doc

《MFC报告.doc》由会员分享,可在线阅读,更多相关《MFC报告.doc(15页珍藏版)》请在冰点文库上搜索。

MFC报告.doc

面向对象课程设计指导书

《面向对象程序设计》

课程设计报告

学号:

班级序号:

姓名:

指导老师:

成绩:

XXX大学

XXX学院XXX系

2010年7月

实习题目一

1、橡皮筋画线程序,要求:

²利用鼠标在视图上绘制线,能够设置线的颜色和宽度;

²能够用鼠标拾取绘制的某条线,被选中的线能够高亮显示,并且弹出对话框,输入线的属性保存起来;

²能够将绘制的线数据保存在Line.dat文本文件中;

²打开线数据文件Line.dat,可以显示出文件里面的线图形。

【算法设计】

(1)设计思想:

首先自己定义一支画笔,通过对话框改变其宽度,颜色(RGB值).当点击划线按钮时开始划线,点击设置按钮能够改变线的各种属性,划线完成后点击拾取按钮,用鼠标左键点击你要选中的线条,可以发现选中的线条会变成黄色的,高亮度显示,然后弹出对话框,通过它课以改变这条线的属性,最后是文件管理按钮,里面包含有保存和打开两个选项,当你划线完成后点击保存所画的线条各个属性通过OnSave()函数就会保存在line.dat文件中.其中的拾取需要一个确定你选的点是不是在画的线条上,设计的算法为:

选中的点到所画线条的两个端点的距离之和(A+B)是否等于线段的长度C,由于一次选中可能较小,于是可以让(A+B)-C在一个范围里变成一个扁的椭圆.重点就是这个选中算法.

(2)设计表示:

线

点击开始划线否则不能执行此操作

设置线条属性

对选中的线条高亮显示并可以改变属性

存线条属性

打开线条

【调试报告】

菜单栏:

点击开始,所画线条:

点击设置按钮:

宽度设置为110颜色改变为(255,0,0)后所画线条:

点击拾取按钮所画线条高亮显示并弹出改变属性按钮:

点击保存按钮:

【附录】

添加消息响应函数:

voidCDrawlineView:

:

OnLButtonDown(UINTnFlags,CPointpoint)鼠标左键点下响应

voidCDrawlineView:

:

OnLButtonUp(UINTnFlags,CPointpoint)鼠标左键弹起响应

voidCDrawlineView:

:

OnMouseMove(UINTnFlags,CPointpoint)鼠标移动响应

创建画笔画笔的线性,颜色,宽度和划线功能的实现:

CClientDCdc(this);

CPenMypen;

CPen*pOldPen;

Mypen.CreatePen(PS_SOLID,width,RGB(red,green,blue));

pOldPen=dc.SelectObject(&Mypen);

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

dc.SelectObject(pOldPen);

保存线条属性:

CGraph*pGraph=newCGraph(m_ptOrigin,m_ptEnd,width,red,green,blue);

m_ptrArray.Add(pGraph);新建一个指针型类对象保存各个属性。

窗口重绘使得窗口放大后依然显示所画的图像在OnDraw()函数中实现:

voidCDrawlineView:

:

OnDraw(CDC*pDC)

{

CDrawlineDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

for(inti=0;i

{

CClientDCdc(this);

CPenMypen;

CPen*pOldPen;

还原划线时的画笔的属性值以便重新划线:

Mypen.CreatePen(PS_SOLID,((CGraph*)m_ptrArray.GetAt(i))->width,RGB(((CGraph*)m_ptrArray.GetAt(i))->red,((CGraph*)m_ptrArray.GetAt(i))->green,((CGraph*)m_ptrArray.GetAt(i))->blue));

pOldPen=dc.SelectObject(&Mypen);

dc.MoveTo(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin);

dc.LineTo(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd);

dc.SelectObject(pOldPen);

}

//TODO:

adddrawcodefornativedatahere

}

设置对话框中传值函数,通过对话框设置线条的各个属性:

CGetDlggetdlg;设置对话框的调用。

getdlg.m_nwidth=width;

getdlg.m_nred=red;

getdlg.m_ngreen=green;

getdlg.m_nblue=blue;

if(IDOK==getdlg.DoModal())

{

width=getdlg.m_nwidth;线宽传值

red=getdlg.m_nred;

green=getdlg.m_ngreen;传值的实现

blue=getdlg.m_nblue;传值的实现

}

拾取函数,确定是否选中的是所画的线条:

boolCGraph:

:

GetLength(CPointpoint)

{

doubledistent1,distent2,distent3;声明三个变量

distent1=sqrt((point.x-m_ptOrigin.x)*(point.x-m_ptOrigin.x)+(point.y-m_ptOrigin.y)*(point.y-m_ptOrigin.y));

distent2=sqrt((point.x-m_ptEnd.x)*(point.x-m_ptEnd.x)+(point.y-m_ptEnd.y)*(point.y-m_ptEnd.y));

distent3=sqrt((m_ptEnd.x-m_ptOrigin.x)*(m_ptEnd.x-m_ptOrigin.x)+(m_ptEnd.y-m_ptOrigin.y)*(m_ptEnd.y-m_ptOrigin.y));线段的长度

if(((distent1+distent2)-distent3)<0.1&&((distent1+distent2)-distent3)>-0.1)计算距离

{

return1;返回的值用以响应是否高亮显示函数

}

else

{

return0;

}

}

保存与打开函数的实现:

voidCDrawlineView:

:

OnSave()

{

//TODO:

Addyourcommandhandlercodehere

char*filename="D:

\\Line.dat";

CStdioFileLine;

CFileExceptionfileException;

if(Line.Open(filename,CFile:

:

typeText|CFile:

:

modeCreate|CFile:

:

modeReadWrite),&fileException)

{

CStringstr;

for(inti=0;i

{

str.Format("%d,%d,%d,%d,%d,%d,%d,%d,",((CGraph*)m_ptrArray.GetAt(i))->width,((CGraph*)m_ptrArray.GetAt(i))->red,((CGraph*)m_ptrArray.GetAt(i))->green,((CGraph*)m_ptrArray.GetAt(i))->blue,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y);

保存的线条的各个属性值

Line.WriteString(str);

}

}

Line.Close();

MessageBox("文件已成功保存在D盘得line.dat中!

");

}

voidCDrawlineView:

:

OnOpen()

{

//TODO:

Addyourcommandhandlercodehere

char*filename="D:

\\Line.dat";

CStdioFileLine;

CFileExceptionfileException;

if(Line.Open(filename,CFile:

:

typeText|CFile:

:

modeReadWrite),&fileException)

{

long length=Line.GetLength();

int *Line_Array;

Line_Array=newint[length/2];

CStringstr="",str1="";

charch[1];

Line.SeekToBegin();

intm=0;

for(intj=0;j

{

Line.Read(ch,1);

if(ch[0]!

=',')

{

str=str+ch[0];

}

else

{

Line_Array[m++]=atoi(str);

str="";

}

}

Line.Close();

for(intn=0;n

{

delete(m_ptrArray.GetAt(n));

}

m_ptrArray.RemoveAll();

for(inti=0;i

{

m_ptOrigin.x=Line_Array[i+4];

m_ptOrigin.y=Line_Array[i+5];

m_ptEnd.x=Line_Array[i+6];

m_ptEnd.y=Line_Array[i+7];

CGraph*pGraph=newCGraph(m_ptOrigin,m_ptEnd,width=Line_Array[i],red=Line_Array[i+1],green=Line_Array[i+2],blue=Line_Array[i+3]);

m_ptrArray.Add(pGraph);

}

Invalidate();

}

}

主要的函数就是大体这些。

最后能够很好的运行。

实习题目二

学生学籍成绩管理系统

学生的信息包括:

姓名、学号、性别、班级、院系;学生的成绩信息包括英语、数学、程序设计及体育成绩等各门课的成绩;

定义如下类,并建立一个文本文件Student.dat,用于存储学生、课程与成绩的相关信息。

文件格式自己定义。

学生类CStudent(姓名、学号、性别、班级、院系);

课程类CLessen(课程名称、课程开设时间);

成绩类CGrade(学号、课程名称、成绩)

要求实现如下功能:

²在对话框上能够添加、删除、编辑和查询课程信息;

²在对话框上能够添加、删除、编辑和查询学生信息学生信息;

²在对话框上能够增加、删除、编辑和查询学生的选课信息;

²在对话框上能够录入和编辑学生某门课的考试成绩;

²在对话框上能够按照学生姓名查询学生的选课信息和选课成绩,并统计出其总成绩、平均成绩,计算出该学生的成绩的标准差;

²显示全班的学生成绩排名。

²统计出各班的平均成绩,并进行排名。

【算法设计】

(1)设计思想:

本题我个人认为最主要的是对话框的设计,能够达到一个对话框多用途,通过添加信息然后能够查询。

其次是类的设计,由于这题用到得对话框较多,所以变量的申明也要有技巧,还有就是对话上的按钮了,按钮的功能要齐全,并且达到最少等都比较重要。

能够进行计算每次输入的学生信息进行计算总分,平均分和方差等,还要对所有的学生成绩进行处理排名。

(2)设计表示:

基本信息编辑

基本信息添加

全部信息显示

选课信息添加

选课信息编辑

学生信息

信息管理

【调试报告】

菜单栏:

添加信息对话框通过它可以添加学生的各类基本信息:

添加两个以上然后点击全部信息,然后查询:

点击编辑学生信息按钮来改变学生的基本信息:

对选课信息进行编辑添加一门课程:

然后可以在基本信息栏内进行查询可以看到学生的选课信息。

一些基本信息保存在student.dat文件夹中,如

文件夹内部是保存的学生信息:

代码设计:

建立学生类用来存放学生基本信息:

CStudent:

:

CStudent(CStringm_stuname,CStringm_stunum,CStringm_stusex,CStringm_stuclass,CStringm_stuyard)

{

this->m_stuname=m_stuname;

this->m_stunum=m_stunum;

this->m_stusex=m_stusex;

this->m_stuclass=m_stuclass;

this->m_stuyard=m_stuyard;

}

建立成绩类用来放学生的成绩信息:

CLesson:

:

CLesson(CStringm_lesname,CStringm_lestime)

{

this->m_lesname=m_lesname;

this->m_lestime=m_lestime;

}

添加学生信息函数的响应及保存函数的响应:

voidCStuManageView:

:

OnAddinfo()

{

//TODO:

Addyourcommandhandlercodehere

CAddinfDlgaddinf;

if(IDOK==addinf.DoModal())

{

CStudent*stu=newCStudent(addinf.m_Aname,addinf.m_Anum,addinf.m_Asex,addinf.m_Aclass,addinf.m_Ayard);

m_ptrArrayS.Add(stu);

CSocre*soc=newCSocre(addinf.m_Amath,addinf.m_Aenglish,addinf.m_Acomputer,addinf.m_Asport);

m_ptrArrayG.Add(soc);

char*filename="Student.dat";

CStdioFileStudent;

CFileExceptionfileException;

if(Student.Open(filename,CFile:

:

typeText|CFile:

:

modeCreate|CFile:

:

modeReadWrite),&fileException)

{

CStringstr;

for(inti=0;i

{

str.Format("%s,%s,%s,%s,%s,%s,%s,%s,%s",((CStudent*)m_ptrArrayS.GetAt(i))->m_stuname,((CStudent*)m_ptrArrayS.GetAt(i))->m_stunum,((CStudent*)m_ptrArrayS.GetAt(i))->m_stusex,((CStudent*)m_ptrArrayS.GetAt(i))->m_stuclass,((CStudent*)m_ptrArrayS.GetAt(i))->m_stuyard,((CSocre*)m_ptrArrayG.GetAt(i))->m_stumath,((CSocre*)m_ptrArrayG.GetAt(i))->m_stuengl,((CSocre*)m_ptrArrayG.GetAt(i))->m_stucomp,((CSocre*)m_ptrArrayG.GetAt(i))->m_stuspor);保存输入的信息

Student.WriteString(str);

str.Format("\r\n");

Student.WriteString(str);

}

}

Student.Close();

MessageBox("信息已成功保存在Student.datÎ文件中!

");

}

}

编辑键的消息响应函数:

voidCExercise5Dlg:

:

OnDelete()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

for(longi=0;i

{

查询要删除的对象信息

if(m_studentNumber!

=0&&m_studentNumber==m_studentList[i].m_CSstudentNumber)

{

m_studentList[i].clear();

删除

//while(m_studentList[i+1].m_CSstudentNumber!

=0)

//{

// i++;

//}

//¸üÐÂÊý¾Ý

if((i+1)

{

m_studentName=m_studentList[i+1].m_CSstudentName;

m_studentNumber=m_studentList[i+1].m_CSstudentNumber;

m_studentSex=m_studentList[i+1].m_CSstudentSex;

m_studentClass=m_studentList[i+1].m_CSstudentClass;

m_studentCollege=m_studentList[i+1].m_CSstudentCollege;

m_ComputerGrade=m_studentList[i+1].m_CSComputerGrade;

m_EnglishGrade=m_studentList[i+1].m_CSEnglishGrade;

m_MathGrade=m_studentList[i+1].m_CSMathGrade;

m_PEGrade=m_studentList[i+1].m_CSPEGrade;

m_totalGrade=m_MathGrade+m_EnglishGrade+m_ComputerGrade+m_PEGrade;

m_averageGrade=m_totalGrade/4;

m_standardDiffer=sqrt(((m_averageGrade-m_MathGrade)*(m_averageGrade-m_MathGrade)+(m_averageGrade-m_EnglishGrade)*(m_averageGrade-m_EnglishGrade)+(m_averageGrade-m_ComputerGrade)*(m_averageGrade-m_ComputerGrade)+(m_averageGrade-m_PEGrade)*(m_averageGrade-m_PEGrade))/4);

UpdateData(false);

break;

}

else

{

m_studentName=m_studentList[i].m_CSstudentName;

m_studentNumber=m_studentList[i].m_CSstudentNumber;

m_studentSex=m_studentList[i].m_CSstudentSex;

m_studentClass=m_studentList[i].m_CSstudentClass;

m_studentCollege=m_studentList[i].m_CSstudentCollege;

m_ComputerGrade=m_studentList[i].m_CSComputerGrade;

m_EnglishGrade=m_studentList[i].m_CSEnglishGrade;

m_MathGrade=m_studentList[i].m_CSMathGrade;

m_PEGrade=m_studentList[i].m_CSPEGrade;

m_totalGrade=m_MathGrade+m_EnglishGrade+m_ComputerGrade+m_PEGrade;

m_averageGrade=m_totalGrade/4;

m_standardDiffer=sqrt(((m_averageGrade-m_MathGrade)*(m_averageGrade-m_MathGrade)+(m_averageGrade-m_EnglishGrade)*(m_averageGrade-m_EnglishGrade)+(m_averageGrade-m_ComputerGrade)*(m_averageGrade-m_ComputerGrade)+(m_averageGrade-m_PEGrade)*(m_averageGrade-m_PEGrade))/4); UpdateData(false);

}

break;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2