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