c++mfc上机实习报告.docx

上传人:b****7 文档编号:25805173 上传时间:2023-06-15 格式:DOCX 页数:25 大小:540.16KB
下载 相关 举报
c++mfc上机实习报告.docx_第1页
第1页 / 共25页
c++mfc上机实习报告.docx_第2页
第2页 / 共25页
c++mfc上机实习报告.docx_第3页
第3页 / 共25页
c++mfc上机实习报告.docx_第4页
第4页 / 共25页
c++mfc上机实习报告.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

c++mfc上机实习报告.docx

《c++mfc上机实习报告.docx》由会员分享,可在线阅读,更多相关《c++mfc上机实习报告.docx(25页珍藏版)》请在冰豆网上搜索。

c++mfc上机实习报告.docx

c++mfc上机实习报告

《面向对象程序设计》

课程设计报告

学号:

201*****

班级序号:

11*****

姓名:

******

指导老师:

陈亮老师

成绩:

中国地质大学(武汉)

信息工程学院信息工程系

2014年6月17日

 

上机题目一

1、题目:

橡皮筋画线程序,要求:

(1)基本要求

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

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

(2)高阶要求

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

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

(3)可选功能

文字能够在视图任意地方点击鼠标后输入。

(提示:

可以使用STL中的容器来管理数据。

2、设计思路:

利用MFC中的单文档,在view函数中添加up和down的命令响应函数,使实现画线的功能,并在函数中增加特定代码使实现设置线宽和颜色(具体函数代码可以从书上找到),同样的添加保存和打开所画的线、能输入文字的命令函数。

3、实现情况和能改进的地方:

代码运行成果是可以改变线宽和颜色,并且在运行出的窗口的大小改变构绘制的线不会消失,可以保存并打开绘制的线,能在视图的任何地方输入文字。

用鼠标拾取绘制的线并高亮显示没有实现,保存时直接保存的绘制的线,而并没有将所画线的属性保存下来,没有dat类型的文件。

4、具体代码如下:

设置线宽的对话框的代码:

(因引入对话框,需添加头文件)

voidCHuiView:

:

OnSetting()

{

//TODO:

Addyourcommandhandlercodehere

CSettingDlgdlg;

dlg.m_nLineWidth=m_nLineWidth;

if(IDOK==dlg.DoModal()){

m_nLineWidth=dlg.m_nLineWidth;

}

}

设置颜色的代码:

voidCHuiView:

:

OnColor()

{

//TODO:

Addyourcommandhandlercodehere

CColorDialogdlg;

dlg.m_cc.rgbResult=m_clr;

dlg.m_cc.Flags|=CC_RGBINIT|CC_FULLOPEN;

if(IDOK==dlg.DoModal())

{

m_clr=dlg.m_cc.rgbResult;

}

//dlg.DoModal();

}

文件保存于打开的代码:

voidCHuiView:

:

OnFileOpen()

{

//TODO:

Addyourcommandhandlercodehere

HMETAFILEhmetaFile;

hmetaFile=GetMetaFile("meta.wmf");

m_dcMetaFile.PlayMetaFile(hmetaFile);

DeleteMetaFile(hmetaFile);

Invalidate();

}

voidCHuiView:

:

OnFileSave()

{

//TODO:

Addyourcommandhandlercodehere

HMETAFILEhmetaFile;

hmetaFile=m_dcMetaFile.Close();

CopyMetaFile(hmetaFile,"meta.wmf");

m_dcMetaFile.Create();

DeleteMetaFile(hmetaFile);

}

在视图的任何地方输入文字:

(OnCreat和OnChar函数)

intCHuiView:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

if(CView:

:

OnCreate(lpCreateStruct)==-1)

return-1;

CClientDCdc(this);

TEXTMETRICtm;

dc.GetTextMetrics(&tm);

CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);

ShowCaret();

//TODO:

Addyourspecializedcreationcodehere

return0;

}

voidCHuiView:

:

OnChar(UINTnChar,UINTnRepCnt,UINTnFlags)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

CClientDCdc(this);

TEXTMETRICtm;

dc.GetTextMetrics(&tm);

if(0x0d==nChar){

m_strLine.Empty();

m_ptOrigin.y+=tm.tmHeight;

}

elseif(0x08==nChar){

COLORREFclr=dc.SetTextColor(dc.GetBkColor());

dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

m_strLine=m_strLine.Left(m_strLine.GetLength()-1);

dc.SetTextColor(clr);

}

else{

m_strLine+=nChar;

}

CSizesz=dc.GetTextExtent(m_strLine);

CPointpt;

pt.x=m_ptOrigin.x+sz.cx;

pt.y=m_ptOrigin.y;

SetCaretPos(pt);

dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

CView:

:

OnChar(nChar,nRepCnt,nFlags);

}

在运行窗口上保存绘制的线:

voidCHuiView:

:

OnDraw(CDC*pDC)

{

CHuiDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

CPenpen(PS_SOLID,m_nLineWidth,m_clr);

CBrush*pBrush=CBrush:

:

FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

pDC->SelectObject(pBrush);

for(inti=0;i

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

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

}

HMETAFILEhmetaFile;

hmetaFile=m_dcMetaFile.Close();

pDC->PlayMetaFile(hmetaFile);

m_dcMetaFile.Create();

m_dcMetaFile.PlayMetaFile(hmetaFile);

DeleteMetaFile(hmetaFile);

//TODO:

adddrawcodefornativedatahere

}

最终的up和down函数:

voidCHuiView:

:

OnLButtonDown(UINTnFlags,CPointpoint)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

m_ptOrigin=point;

SetCaretPos(point);

m_strLine.Empty();

CView:

:

OnLButtonDown(nFlags,point);

}

voidCHuiView:

:

OnLButtonUp(UINTnFlags,CPointpoint)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

CClientDCdc(this);

CPenpen(PS_SOLID,m_nLineWidth,m_clr);

CBrush*pBrush=CBrush:

:

FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

dc.SelectObject(&pen);

dc.SelectObject(pBrush);

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

m_dcMetaFile.MoveTo(m_ptOrigin);

m_dcMetaFile.LineTo(point);

m_dcMetaFile.SelectObject(&pen);

//m_dcMetaFile.SelectObject(pBrush);

CGraph*pGraph=newCGraph(m_ptOrigin,point);

m_ptrArray.Add(pGraph);

CView:

:

OnLButtonUp(nFlags,point);

}

添加的成员变量及其初始化:

m_ptOrigin=0;

m_clr=RGB(255,0,0);

m_nLineWidth=0;

m_strLine="";

m_dcMetaFile.Create();

运行结果为:

上机题目二

1、题目:

学生学籍成绩管理系统

学生的信息包括:

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

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

文件格式自己定义。

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

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

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

要求实现如下功能:

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

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

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

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

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

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

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

2、设计思路:

对话框的应用,在对话框上添加控件,将控件与具体函数或成员变量绑定,该题中利用此来实现编辑框与列表控件的同步,从而实现录入、查询、和编辑等功能。

将学生管理系统分为三部分:

学生个人信息、成绩和选课情况,三部分在具体处理上是一样的,成绩计算时,需进行类型转换。

3、实现结果及可改进的地方:

实现结果是能在对话框上进行录入、查询、编辑和删除。

在学生成绩的对话框上没有实现学生排名情况,可以无限录入但是没有数据的保存,不能整个班级排名和不同班级排名。

该题目中查询、录入都是在同一对话框实现的,可以再不同对话框实现,实现需要变量对应。

4、具体代码如下:

单击按钮,使弹出另一对话框:

(固定,改变具体类名即可)

voidCXUESHENGDlg:

:

OnButton1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CStudentst;

st.DoModal();

}

学生信息:

对编辑框定义对应的成员变量:

m_xingming=_T("");

m_xingbie=_T("");

m_xuehao=_T("");

m_yuanxi=_T("");

m_zhuanye=_T("");

列表控件在相同对话框内,定义对用成员变量:

DDX_Control(pDX,IDC_LIST1,m_list);

DDX_Text(pDX,IDC_EDIT1,m_xingming);

DDX_Text(pDX,IDC_EDIT2,m_xingbie);

DDX_Text(pDX,IDC_EDIT3,m_xuehao);

DDX_Text(pDX,IDC_EDIT4,m_yuanxi);

DDX_Text(pDX,IDC_EDIT5,m_zhuanye);

//}}AFX_DATA_MAP

录入按钮及列表控件设置代码:

voidCStudent:

:

OnButton1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData(TRUE);//将界面的数据更新到对应的变量中

intcount=m_list.GetItemCount();//获取当前存在的数据总量

m_list.InsertItem(count,m_xingming);//插入一行

m_list.SetItemText(count,1,m_xingbie);

m_list.SetItemText(count,2,m_xuehao);

m_list.SetItemText(count,3,m_yuanxi);

m_list.SetItemText(count,4,m_zhuanye);

MessageBox("已录入学生信息!

");

}

BOOLCStudent:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//TODO:

Addextrainitializationhere

DWORDdwStyle=m_list.GetExtendedStyle();

dwStyle|=LVS_EX_FULLROWSELECT;

dwStyle|=LVS_EX_GRIDLINES;

m_list.SetExtendedStyle(dwStyle);

m_list.InsertColumn(0,"姓名",LVCFMT_LEFT,60);

m_list.InsertColumn(1,"性别",LVCFMT_LEFT,60);

m_list.InsertColumn(2,"学号",LVCFMT_LEFT,60);

m_list.InsertColumn(3,"院系",LVCFMT_LEFT,60);

m_list.InsertColumn(4,"专业",LVCFMT_LEFT,60);

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

//EXCEPTION:

OCXPropertyPagesshouldreturnFALSE

}

删除按钮:

voidCStudent:

:

OnButton2()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

BOOLfindok=FALSE;

for(inti=0;i

{

if(m_list.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)

{

m_list.DeleteItem(i);

MessageBox("已删除所选学生信息");

findok=TRUE;

}

}

if(findok!

=TRUE)

MessageBox("请先选择需要删除的学生");

UpdateData(FALSE);

}

查询按钮(按名字查询):

voidCStudent:

:

OnSearch()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

inti;

BOOLtemp=FALSE;

UpdateData(TRUE);

for(i=0;i

{

if(m_xingming==m_list.GetItemText(i,0))

{

m_xingbie=m_list.GetItemText(i,1);

m_xuehao=m_list.GetItemText(i,2);

m_yuanxi=m_list.GetItemText(i,3);

m_zhuanye=m_list.GetItemText(i,4);

UpdateData(FALSE);

temp=TRUE;

break;

}

}

if(temp==FALSE)

MessageBox("没有该学生的记录!

");

UpdateData(FALSE);

}

编辑按钮:

(按名字一样修改)

voidCStudent:

:

OnGai()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

Cgaiga;

ga.DoModal();

inti;

BOOLtemp=FALSE;

UpdateData(TRUE);

for(i=0;i

{

//if(temp=true)

if(ga.m_xingming==m_list.GetItemText(i,0))

{//m_xingming=ga.m_xingming;

intcount=m_list.GetItemCount();//获取当前存在的数据总量

//m_list.InsertItem(count,m_xingming);//插入一行

m_list.SetItemText(i,1,ga.m_xingbie);

m_list.SetItemText(i,2,ga.m_xuehao);

m_list.SetItemText(i,3,ga.m_yuanxi);

m_list.SetItemText(i,4,ga.m_zhuanye);

//m_xingbie=ga.m_xingbie;

//m_xuehao=ga.m_xuehao;

//m_yuanxi=ga.m_yuanxi;

//m_zhuanye=ga.m_zhuanye;

UpdateData(FALSE);

//temp=TRUE;

break;

}

if(ga.m_xingming!

=m_list.GetItemText(i,0))

MessageBox("修改失效!

");

}

在成绩和选课情况的对话框上,录入、查询、编辑、删除的代码只需改变给的成员变量名,具体实现是一样的。

成绩:

成员变量:

m_chengxu=_T("");

m_tiyu=_T("");

m_xingming=_T("");

m_pingjun=_T("");

m_cha=_T("");

m_shuxue=_T("");

m_yingyu=_T("");

列表控件的变量:

DDX_Control(pDX,IDC_LIST1,m_list1);

DDX_Text(pDX,IDC_EDIT3,m_chengxu);

DDX_Text(pDX,IDC_EDIT4,m_tiyu);

DDX_Text(pDX,IDC_EDIT5,m_xingming);

DDX_Text(pDX,IDC_EDIT6,m_pingjun);

DDX_Text(pDX,IDC_EDIT7,m_cha);

DDX_Text(pDX,IDC_EDIT2,m_shuxue);

DDX_Text(pDX,IDC_EDIT1,m_yingyu);

列表控件与编辑框的同步,(录入)及平均数、方差的计算,并将计算结果同时在编辑框列表控件中显示。

voidCGrade:

:

OnButton1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData(TRUE);//将界面的数据更新到对应的变量中

intcount=m_list1.GetItemCount();//获取当前存在的数据总量

m_list1.InsertItem(count,m_xingming);//插入一行

m_list1.SetItemText(count,1,m_yingyu);

m_list1.SetItemText(count,2,m_shuxue);

m_list1.SetItemText(count,3,m_chengxu);

m_list1.SetItemText(count,4,m_tiyu);

inta,b,c,d,e;

charch1[10],ch2[10],ch3[10],ch4[10],ch5[10],ch6[10],ch7[10];

GetDlgItemText(IDC_EDIT1,ch1,10);

GetDlgItemText(IDC_EDIT2,ch2,10);

GetDlgItemText(IDC_EDIT3,ch3,10);

GetDlgItemText(IDC_EDIT4,ch4,10);

GetDlgItemText(IDC_EDIT6,ch5,10);

GetDlgItemText(IDC_EDIT7,ch6,10);

GetDlgItemText(IDC_EDIT8,ch7,10);

a=atoi(ch1);

b=atoi(ch2);//类型转换

c=atoi(ch3);

d=atoi(ch4);

e=(a+b+c+d)/4;

itoa(e,ch5,10);

SetDlgItemText(IDC_EDIT6,ch5);

m_list1.SetItemText(count,5,ch5);

intm,n;

m=sqrt(((a-e)*(a-e)+(b-e)*(b-e)+(c-e)*(c-e)+(d-e)*(d-e))/4);

n=a+b+c+d;

itoa(m,ch6,1

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1