文档库 最新最全的文档下载
当前位置:文档库 › VC++课程设计报告(MFC

VC++课程设计报告(MFC

本文由牵祢ㄖㄅ佐手贡献
doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
课程设计任务书 …… 2 课程设计题目 1: : 设计一个简单的学生信息管理应用 程序 …… 2 一、设计目标与内容: …… 2 二、设计要求: …… 2 三、基本思路 …… 3 四、主要步骤 …… 3 五、设计心得 …… 24 六、参考文献 …… 25 课程设计题目 3:设计一个简单的计算器应用程序.. 25 一、设计目标与内容: …… 25 二、设计要求: …… 25 三、基本思路 …… 25 四、基本步骤 …… 26 五、设计心得 …… 31 六、参考文献 …… 32
课程设计任务书 课程设计题目 1:设计一个简单的学生信息管理应用 : 程序
一、设计目标与内容: 设计目标与内容:
1. 了解 Windows 编程的基础知识, 掌握 MFC 应用程序的基本知识; 2. 基本掌握面向对象程序设计的基本思路和方法; 3. 掌握用 VC++开发应用程序的的一般步骤和方法; 4. 能够利用所学的基本知识, 设计一个简单的学生信息管理应用 程序,具有以下功能:①实现学生信息的存储,可以用文件来实现。 ②编程实现学生信息的添加、删除、修改、浏览和查询等功能(必 须实现的功能)。
二、设计要求: 设计要求:
1. 用 VC++进行编码,实现应用程序的功能。注重编码质量,代码 要有适当的注释; 2. 采用单文档多视图方式,左边为树视图,右边为列表视图,左边 一级节点为中原工学院,二级节点为计算机学院和软件学院,三级 节点为计算机学院的三个专业。要求可以动态增加节点。楼便为列 表视图,包含学生的学号、性别、姓名各科成绩等。右边也可以实 现动态增加 3.当选中节点时,显示对应的学生信息。如当选中”中原工学院”时 选中所用的学生信息,选中“计算机学院”时,显示所有计算机学院学 生信息 4.采用序列化方式保存和读取学生信息; 提交设计报告一份(课 程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得 体会、参考文献)。 提示: 1、读文件时动态构造右边树视图方法,先构造根节点中原工
学院, 2、序列读取学生信息到一个数组,遍历数组,如果右边树视图中有该 节点的信息则不增加,没有则增加该节点,如有学生姓名为张三 计算 机学院 网络工程系学生,二右边没有计算机学院节点时,在“中原工 学院”节点下构造“计算机学院”节点,以及“网络工程系
三、基本思路
建立一个当文档的应用程序,在第六步将视图的基类选择为 CTreeList,然后再建立一个新的类 listView,用来输出学生的基本信息, 用来输

出学生的基本信息, , 用来输出学生的基本信息 用来切分窗口, 然后添加一个切分窗口的函数 OnCreateClient 用来切分窗口, 不添加相 应的控件来实现学生信息的操作,通过完善学生信息类的功能慢慢实现 应的控件来实现学生信息的操作, 程序的运行, 然后添加一个序列化类 程序的运行, 然后添加一个序列化类 CStudentInfo 来实现信息的读取与 保存,最后添加一个新的查找的对话框用来查找、删除、 保存,最后添加一个新的查找的对话框用来查找、删除、查询学生信息 的一个中介,通过姓名来实现学生信息的功能。 的一个中介,通过姓名来实现学生信息的功能。
四、主要步骤
1、新建工程:用 MFC AppWizard(exe)创建一个单文档的应用程序 StudentCheck。在第六步中将视图的基类选择为。 2、1 添加一个基于 ListView 类的新的类 listView、用于显示学生信息
2、2 为 CMainFrame 添加一个切分窗口的映射函数 OnCreateClient
并添加一个切分窗口的函数成员 CSplitterWnd m_wndSplitter;然后添 加下列代码: CRect rect; GetClientRect(&rect); CSize paneSize(rect.Width()/3,rect.Height()); m_wndSplitter.CreateStatic(this,1,2); m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CStudentChec kView),paneSize,pContext); m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(listView),CSize(0,0), pContext); return true; 2、4 创建一个 CstuInfoDlg 对话框 、
2、5 添加下列控件
并为上面控件添加变量
在 WorkSpace 中进入 ClassView 视图, CStuInfoDlg 类添加一个 BOOL 为 型的成员变量 m_bMale,并在 CStuInfoDlg 类设置该变量的初始值,添加 代码如下: : StuInfoDlg::StuInfoDlg(CWnd* pParent /*=NULL*/) : CDialog(StuInfoDlg::IDD, pParent) { m_bMale=FALSE; //{{AFX_DATA_INIT(StuInfoDlg) m_strSpecial = _T(""); m_tBirth = 0; m_strMath = 0; m_strName = _T(""); m_strNO = _T(""); m_strAcademy = _T(""); //}}AFX_DATA_INIT } 用 MFC ClassWizard 为 CStuInfoDlg 类添加 WM_INITDIALOG 消息
映射,并添加下列初始化代码: 映射,并添加下列初始化代码:
if(!m_bMale) CheckRadioButton(IDC_RADIO_MALE,IDC_RADIO_FEMALE, IDC_RADIO_FEMALE); else CheckRadioButton(IDC_RADIO_MALE,IDC_RADIO_FEMALE, IDC_RADIO_MALE);//对专业组合框进行初始化 对专业组合框进行初始化 m_comboSpecial.AddString("网络工程 网络工程"); 网络工程 m_comboSpecial.AddString("软件工程 软件工程"); 软件工程 m_comboSpecial.AddString("计算机科学 计算机科学"); 计算机科学 m_comboSpecial.AddString("服装设计 服装设计"); 服装设计 m_comboSpecial.AddString("服装表演 服装表演"); 服装表演 m_comboSpecial.AddString("艺术设计 艺术设计"); 艺术设计 m_strSpecial="网络工程 网络工程"; 网络工程 m_comboAcademy.AddString("计算机学院 计算机学院"); 计算机学院 m_comboAcade

my.AddString("服装学院 服装学院"); 服装学院 m_strAcademy="计算机学院 计算机学院"; 计算机学院 m_tBirth=CTime(1989,10,7,0,0,0); m_strMath=80; UpdateData(FALSE);//将信息显示在控件中 将信息显示在控件中 2、6 用 MFC ClassWizard 为单选按钮 IDC_RADIO_MALE 添加 BN_CLICKED 的消息映射,并添加下列初始代码: m_bMale=TRUE;
用 MFC ClassWizard 为 单 选 按 钮 IDC_RADIO_FEMALE 添 加 BN_CLICKED 的消息映射,并添加下列初始代码: m_bMale=FALSE; 用 MFC ClassWizard 为单选按钮 IDOK 添加 BN_CLICKED 的消息映 射,并添加下列初始代码: UpdateData(); m_strName.TrimLeft();//将字符串最前面的空格修整掉 将字符串最前面的空格修整掉 m_strNO.TrimLeft(); if(m_strName.IsEmpty()) MessageBox("必须要有姓名 必须要有姓名!"); 必须要有姓名 else if(m_strNO.IsEmpty()) MessageBox("必须要有学号 必须要有学号!"); 必须要有学号 Else
3、 用 MFC ClassWizard 为 CStudentCheckView 类添加 NM_CLICK 1 消息映射
通过映射来在列表视图显示学生信息。并添加下列初始化代码: CPoint point; UINT uFlags; ::GetCursorPos(&point);//该函数检取光标的位置,以屏幕坐标表 该函数检取光标的位置, 该函数检取光标的位置 示 CTreeCtrl& m_TreeCtrl = GetTreeCtrl(); m_TreeCtrl.ScreenToClient(&point); HTREEITEM hSel=m_TreeCtrl.HitTest(point,&uFlags); //测试鼠标点是否在一个节点项上,若是,则选中该点 测试鼠标点是否在一个节点项上, 测试鼠标点是否在一个节点项上 若是, if((hSel!=NULL)&&(TVHT_ONITEM & uFlags)) { m_TreeCtrl.SelectItem(hSel); CString strItem=m_TreeCtrl.GetItemText(hSel); CStudentCheckDoc *doc=GetDocument(); int nIndex=doc->m_stuObArray.GetSize();//得到数组的大 得到数组的大 小:知道储存了几个学生的信息 "); for(int n=0;nCStudentInfo *stu=(CStudentInfo*)doc->m_stuObArray.GetAt(n);// 调 取 m_stuObArray 中储存的第 n 个对象信息 CString str=stu->strSpecial;//得到该学生的专业信息 得到该学生的专业信息 CString dlg=stu->strAcademy;//得到该学生的学院信息 得到该学生的学院信息 POSITION pos=GetDocument()->GetFirstViewPosition(); GetDocument()->GetNextView(pos); listView *list=(listView*)GetDocument()->GetNextView(pos);//定义一个指 定义一个指 向列表视图类的指针 if(n==0) list->GetListCtrl().DeleteAllItems();//删除全部列表 删除全部列表 项 if(strItem==str||strItem==dlg||strItem=="中原工学院 中原工学院") 中原工学院 { list->Onprint(stu);//把息输信入到列表中 把息输信入到列表中 } } 3、2 然后为 CStudentCheckView 添加一个 void 类型的成员函数 CreateTree()函数,用来动态添加学生信息
并添加下列初始代码: CTreeCtrl& m_TreeCtrl = GetTreeCtrl();
m_TreeCtrl.DeleteAllItems(); HTREEITEM hRoot,hParent,hChild,pS; hRoot=m_TreeCtrl.InsertItem

("中原工学院 中原工学院",0,1); 中原工学院 BOOL flag=TRUE; CStudentCheckDoc *doc=GetDocument(); int i=doc->m_stuObArray.GetSize(); for(int n=0;nm_stuObArray.GetAt(n); CString str1=stu->strAcademy; CString str2=stu->strSpecial; if(!m_TreeCtrl.ItemHasChildren(hRoot))// 判 断 根 节 点 是 否 有子节点 { hParent=m_TreeCtrl.InsertItem(str2,hRoot); m_TreeCtrl.InsertItem(str1,0,1,hParent); } else { hParent=m_TreeCtrl.GetChildItem(hRoot); pS=hParent; for(;pS!=NULL;pS=m_TreeCtrl.GetNextItem(pS,TVGN_NEXT)) { CString strItem1=m_TreeCtrl.GetItemText(pS); if(strItem1==str2)flag=FALSE; } if(flag) { hParent=m_TreeCtrl.InsertItem(str2,hRoot); m_TreeCtrl.InsertItem(str1,0,1,hParent); } else {
if(!m_TreeCtrl.ItemHasChildren(hParent))//判断是 判断是 否有子节点 m_TreeCtrl.InsertItem(str1,0,1,hParent); else {hChild=m_TreeCtrl.GetChildItem(hParent); for(;hChild!=NULL;hChild=m_TreeCtrl.GetNextItem(hChild,T VGN_NEXT)) {CString strItem2=m_TreeCtrl.GetItemText(hChild); if(strItem2==str1)flag=TRUE;} if(!flag)m_TreeCtrl.InsertItem(str1,0,1,hParent); }}}} SetCtrlStyle(m_TreeCtrl.GetSafeHwnd(), TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS);} 3、3 为 CStudentCheckView 添加消息映射 OnIntialUpte,用来调用 CreateTree()函数,动态添加学生信息。
并添加下列初始代码: CTreeCtrl& m_TreeCtrl = GetTreeCtrl(); m_TreeCtrl.DeleteAllItems(); CreateTree(); 3 、 4 为 CStudentCheckView 添 加 一 个 void 类 型 的 成 员 函 数 SetCtrlStyle(HWND hWnd, DWORD dwNewStyle)//设置列表控件不同 的显示方式
并添加下列初始代码: LONG lStyle; lStyle = GetWindowLong(hWnd, GWL_STYLE);//获取当前窗 获取当前窗 口 style lStyle &= ~LVS_TYPEMASK; //清除显示方式位 清除显示方式位 lStyle |= dwNewStyle; //设置 style 设置 SetWindowLong(hWnd, GWL_STYLE, lStyle);//设置 style 4、 在 WorkSpace 中进入 ClassView 视图, listView 类添加一个 void 1 为 型的成员函数 Onprint(CStudentInfo *dlg),用来添加学生信息。
并添加下列初始代码: CListCtrl&m_listctrl=GetListCtrl();//变量 变量 m_listctrl.InsertItem(0,dlg->strName);//姓名 姓名 m_listctrl.SetItemText(0,1,dlg->strNO);//学号 学号 if(dlg->bMale) m_listctrl.SetItemText(0,2,"男"); 男 else m_listctrl.SetItemText(0,2,"女"); 女 m_listctrl.SetItemText(0,3,dlg->tBirth.Format("%Y-%m-%d"));// 出生年月 CString str;//理解 理解 str.Format("%d",dlg->strMath);//数学成绩 数学成绩 m_listctrl.SetItemText(0,4,str); m_listctrl.SetItemText(0,5,dlg->strSpecial);//专业 专业 m_listctrl.SetItemText(0,6,dlg->strAcademy);//学院 学院
4、2 然后为 listView 添加消息映射 NM_CLICK,用来通过点击或得学 生的映射,并通过点击查找学生信息。
并添加下列初始代码: int i = lpItem->iItem; if (i >= 0) { CListCtrl& ListCtrl = GetListCtrl(); CString str = ListCtrl.GetItemText(i, 0); MessageBox(str); } 4、3 为 listView 添加消息映射 OnIntialU

pte,用来在列表视图输出学 生的信息
并添加下列初始代码: CListCtrl&m_listctrl=GetListCtrl(); CString strHeader[7]={"姓名 学号 性别 出生年月 数学 姓名","学号 性别","出生年月 姓名 学号","性别 出生年月","数学 成绩","所选专业 所在学院"}; 所选专业","所在学院 成绩 所选专业 所在学院 int nWidth[7]={100,100,100,100,100,100,100}; for(int nCol=0;nCol<7;nCol++) m_listctrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT ,nWidth[nCol]); 5、1 建立序列化类 CStudentInfo 用来保存学生信息,添加 C/C++ Header File,并添加下列初始代码: class CStudentInfo:public CObject { public: CString strName; CString strNO; BOOL bMale; CTime tBirth; int strMath; CString strSpecial; CString strAcademy;
DECLARE_SERIAL(CStudentInfo) public: CStudentInfo(){}; CStudentInfo(CString name,CString id,BOOL male,CTime birth,int math,CString special,CString academy); void Serialize(CArchive &ar);}; 5、2 添加 C/C++ Source File,并添加下列初始代码: #include "stdafx.h" #include "StudentInfo.h" CStudentInfo::CStudentInfo(CString name,CString id,BOOL male,CTime birth,int math,CString special,CString academy) { strName=name; strNO=id; bMale=male; tBirth=birth; strMath=math; strSpecial=special; strAcademy=academy; } IMPLEMENT_SERIAL(CStudentInfo,CObject,1) //序列化实现 序列化实现 void CStudentInfo::Serialize(CArchive &ar)// 从 档 案 文 件 中 读 取 该对象或向档案文件中写入该对象。 该对象或向档案文件中写入该对象 。 { if(ar.IsStoring()) ar<>strName>>strNO>>bMale>>tBirth>>strMath>>strSpecial>>str Academy; } 6、1 打开该文档应用程序的菜单资源,添加顶层菜单项“学生基本 操 作 ” 并 添 加 菜 单 项 目 : 添 加 删 除 、 修 改 、 查 询 , ID 依 次 为
ID_STUINFO_ADD 、 ID_STUINFO_Del 、 ID_STUINFO_XIUGAI 、 ID_STUINFO_FIND。打开 CStudentCheckDoc,分别添加下列映射:
6、2 分别为下列函数添加下列代码用来添加、删除、修改、 查询学生的信息,
添加初始代码:
void CStudentCheckDoc::OnStuinfoAdd() //添加信息 添加信息 { StuInfoDlg dlg; if(dlg.DoModal()!=IDOK)return;//判断学生信息是不是已经添加 判断学生信息是不是已经添加 CStudentInfo*pStudent=new CStudentInfo(dlg.m_strName,dlg.m_strNO,dlg.m_bMale,dlg.m_tB irth,
dlg.m_strMath,dlg.m_strAcademy,dlg.m_strSpecial); m_stuObArray.Add(pStudent); POSITION pos=GetFirstViewPosition(); CStudentCheckView *stu=(CStudentCheckView*)GetNextView(pos); stu->CreateTree(); SetModifiedFlag(); //设置文档更改标志 设置文档更改标志 UpdateAllViews(NULL); //更新视图 更新视图 } void CStudentCheckDoc::OnSTUINFODEl() //删除学生信息 删除学生信息 { Find dlg; if(dlg.DoModal()!=IDOK)return; int i=m_stuObArray.GetSize(); for(int n=0;nstrName==dlg.m_name) { delete m_stuObArray.GetAt(n); m_stuObArray.RemoveAt(n,1); } } SetModifiedFla

g(); //设置文档更改标志 设置文档更改标志 UpdateAllViews(NULL); //更新视图 更新视图 } void CStudentCheckDoc::OnStuinfoFind() //查找学生信息 查找学生信息 { Find dlg; if(dlg.DoModal()!=IDOK)return; int i=m_stuObArray.GetSize(); if(i==0) AfxMessageBox("无学生信息 无学生信息"); 无学生信息 else
{ for(int n=0;nstrName==dlg.m_name) { /*POSITION pos=GetFirstViewPosition(); GetNextView(pos); listView *list=(listView*)GetNextView(pos); CListCtrl& m_list=list->GetListCtrl(); m_list.DeleteAllItems(); list->Onprint(stu); flag=FALSE;*/ CString strRes,strSex("女"); 女 CString str;//理解 理解 str.Format("%d",stu->strMath); if(stu->bMale) strSex="男"; 男 strRes.Format(" 姓 名 : %s,\n 学 号 : %s,\n 性 出生年月: 学院: %s,\n 专业: 专业: %s,\n 数学成绩: 数学成绩: %s", 别: %s,\n 出生年月: %s,\n 学院: stu->strName,stu->strNO,strSex, stu->tBirth.Format("%Y-%m-%d"),stu->strAcademy,stu->strS pecial,str); AfxMessageBox(strRes);}} //判断是否找到 判断是否找到}} 判断是否找到 void CStudentCheckDoc::OnStuinfoXiugai() //修改学生信息 修改学生信息 { Find dlg; StuInfoDlg dl; BOOL flag=TRUE; if(dlg.DoModal()!=IDOK)return; int i=m_stuObArray.GetSize(); if(i==0) AfxMessageBox("无学生信息 无学生信息"); 无学生信息 else
{ for(int n=0;nstrName==dlg.m_name) { dl.m_strName=stu->strName; dl.m_strNO=stu->strNO; dl.m_bMale=stu->bMale; dl.m_tBirth=stu->tBirth; dl.m_strMath=stu->strMath; dl.m_strAcademy=stu->strAcademy; dl.m_strSpecial=stu->strSpecial; dl.DoModal();//此成员函数用来显示一个模态对话框 此成员函数用来显示一个模态对话框 Dialog2 stu->strName=dl.m_strName; stu->strNO=dl.m_strNO; stu->bMale=dl.m_bMale; stu->tBirth=dl.m_tBirth; dl.m_strMath=stu->strMath; stu->strAcademy=dl.m_strAcademy; stu->strSpecial=dl.m_strSpecial; flag=FALSE; SetModifiedFlag(); //设置文档更改标志 设置文档更改标志 UpdateAllViews(NULL); //更新视图 更新视图 } } if(flag) AfxMessageBox("无此学生信息 无此学生信息");}} 无此学生信息 7、1 添加一个新的对话框 Find,通过调用该该对话框来实现删除、修 改、浏览学生信息:并添加下列控件:
添加 Find 类的映射 BN_CLICKED
并为该编辑框添加控件变量
运行程序实现改程序的功能
五、设计心得
1、通过这次课程设计,是我对 MFC 有了更进一步的了解,对消息 、通过这次课程设计, 有了更进一步的了解, 的机制有了更深刻的认识, 中的应用结构类、菜单类、 的机制有了更深刻的认识,对 MFC 中的应用结构类、菜单类、窗口以 及对话框和控件有了更深刻的认识。 及对话框和控件有了更深刻的认识。 2、也对上学期学习的 VC++进行了复习,是我对上学期学期的有了 进行了复习, 、 进行了复习 更进一步的了解和熟悉 对编程能

力有了进一步的提升。 熟悉, 更进一步的了解和熟悉,对编程能力有了进一步的提升。 3、合理的规划和设计页面对编程者是十分重要的。一个好的程序也 、合理的规划和设计页面对编程者是十分重要的。 学要便捷的操作和美观的界面, 学要便捷的操作和美观的界面,人性化设计需要我们更加细心的去设计 和美化程序。 和美化程序。 4、虽然在 MFC 课程设计是遇到了这样和那样的问题,通过我自己 课程设计是遇到了这样和那样的问题, 、 和同学的帮助,还有参考数的帮助,这次课程设计是我收获很多, 和同学的帮助,还有参考数的帮助,这次课程设计是我收获很多,不仅 对编程有了更进一步的了解, 对编程有了更进一步的了解,同时也看到了我自己编程能力的不足和与 好的同学之间的差距,需要进一步努力、 班级学习 MFC 好的同学之间的差距,需要进一步努力、才能不被他们 抛的更远。 抛的更远。
六、参考文献
[1]Visual C++ 教程 清华大学出版社 [2]C/C++程序设计教程 电子工业出版社 程序设计教程 [3] Visual C++程序设计与实践 程序设计与实践
课程设计任务书
课程设计题目 3:设计一个简单的 : 计算器应用程序
一、设计目标与内容: 设计目标与内容:
1. 了解 Windows 编程的基础知识,掌握 MFC 应用程序的基本知识; 2. 基本掌握面向对象程序设计的基本思路和方法; 3. 掌握用 VC++开发应用程序的的一般步骤和方法; 4. 能够利用所学的基本知识,设计一个简单的计算器应用程序,实现基 本的加、减、乘、除、求平方根,求倒数等基本运算(必须实现的 功能),实现求角度的正弦、余弦、正切等基本运算、实现求指数、 自然对数、常用对数等基本运算(这部分功能选做)。 5. 在程序中注意处理数据和运算符的输入,计算结果的显示。
二、设计要求: 设计要求:
1. 用 VC++进行编码,实现应用程序的功能。注重编码质量,代码要 有适当的注释; 2. 提交设计报告一份(课程设计任务书、目录、设计的基本思路、设 计的步骤及主要代码、心得体会、参考文献)。
三、基本思路
1、建立一个当文档的应用程序 CSimpleCalcDlg,添加一个对话框,然后
添加控件。并添加相应的按钮,通过点击来实现相应的功能。
四、基本步骤
1. 新建项目: 建立一个默认的当文档的应用程序 2. 定制界面: (1) 修改 MFC AppWizard 自动创建的对话框项目模板。删除模板上 自动创建的三个控件。 (2) 加入“请输入数据:”、“结果”两个静态文本框和相应的 2 个 编辑框。 (3) 加入三个 Group Box,标题修改为“请

选择运算符:”、“二元 运算” “一元运算” 并向请 、 , “选择运算符” 其中放入 8 个 Radio Button 将标题分别改为“+”、 “-”、 “*”、 “/”、 “求倒”、 “1/n”、 “sin”、 “lg”。 (4) 继续用鼠标从工具箱中向对话框添加和 3 个按钮控件, 更改按钮 的标题为“计算”、“清除”、“关闭”。 ”
3. 添加变量 本例中用到以下 4 个 CSimpleCalcDlg 类的成员变量:
变量类型 float float float char
名称 m_N1 m_N2 m_ Result Operator
用 ClassWizard 为编辑框添加变量:m_N1, m_N2, m_Result
变量 char Operator 的添加方法: 在 WorkSpace 中 进 入 ClassView 视 图 , 鼠 标 右 键 单 击 CSimpleCalcDlg, 在菜单中选择“Add Member Variable…”然后在 弹出的对话框的输入变量类型和名称:
4. 添加消息映射 用 ClassWizard 为按钮控件添加消息映射:
继续用 ClassWizard 为 Radio Button 控件添加消息映射: :
5. 加入单击按钮时的事件响应代码 在实现文件(cpp 文件)中加入单击按钮时的事件响应代码。(双击一 个按钮可直接进入函数编辑) //选择运算符 选择运算符 void CSimpleCalcDlg::OnRadio1() {Operator='+'; } void CSimpleCalcDlg::OnRadio2() {Operator='-';} void CSimpleCalcDlg::OnRadio3() {Operator='*'; } void CSimpleCalcDlg::OnRadio4() {Operator='/';} void CSimpleCalcDlg::OnRadio5() {Operator='^';} void CSimpleCalcDlg::OnRadio6() {Operator='d'; } void CSimpleCalcDlg::OnRadio7()
{Operator='s'; } void CSimpleCalcDlg::OnRadio8() {Operator='l';} void CSimpleCalcDlg::OnButton1() { UpdateData(); switch(Operator) { case '+':m_Result=m_N1+m_N2;break;//加法运算 加法运算 case '-':m_Result=m_N1-m_N2;break;//减法运算 减法运算 case '*':m_Result=m_N1*m_N2; break;//乘法运算 乘法运算 case '/': if(m_N2 == 0 ) MessageBox("除数不能为零!");//除法运算 除数不能为零! 除数不能为零 除法运算 else { m_Result = m_N1/m_N2; break; } case '^':m_Result=sqrt(m_N1);break;//求平方根 求平方根 case 'd':m_Result=1/m_N1;break;//求倒数 求倒数 case 's':m_Result=sin(m_N1*3.14/180);break;//正选运算 正选运算 case 'l':m_Result=log10(m_N1);break;//对数运算 对数运算 default:m_Result=m_N1+m_N2; } UpdateData(FALSE); } void CSimpleCalcDlg::OnButton2() { UpdateData(); m_N1=0; m_N2=0; m_Result=0; UpdateData(FALSE); } void CSimpleCalcDlg::OnButton3() {CDialog::OnOK(); }
6. 编译运行程序
五、设计心得
1、通过这次课程设计,是我对 MFC 有了更进一步的了解,对消息 、通过这次课程设计, 有了更进一步的了解, 的机制有了更深刻的认识, 中的应用结构类、菜单类、 的机制有了更深刻的认识,对 MFC 中的应用结构类、菜单类、窗口以 及对话框和控件有了更深刻的认识。 及对话框和控件有了更深刻的认识。 2、也对

上学期学习的 VC++进行了复习,是我对上学期学期的有了 进行了复习, 、 进行了复习 更进一步的了解和熟悉,对编程能力有了进一步的提升。 更进一步的了解和熟悉,对编程能力有了进一步的提升。 3、合理的规划和设计页面对编程者是十分重要的。一个好的程序也 、合理的规划和设计页面对编程者是十分重要的。 学要便捷的操作和美观的界面, 学要便捷的操作和美观的界面,人性化设计需要我们更加细心的去设计 和美化程序。 和美化程序。 4、虽然在 MFC 课程设计是遇到了这样和那样的问题,通过我自己 课程设计是遇到了这样和那样的问题, 、 和同学的帮助,还有参考数的帮助, 次课程设计是我收获很多, 和同学的帮助,还有参考数的帮助,这次课程设计是我收获很多,不仅 对编程有了更进一步的了解, 对编程有了更进一步的了解,同时也看到了我自己编程能力的不足和与 好的同学之间的差距,需要进一步努力、 班级学习 MFC 好的同学之间的差距,需要进一步努力、才能不被他们 抛的更远。 抛的更远。
六、参考文献
[1]Visual C++ 教程 清华大学出版社 [2]C/C++程序设计教程 电子工业出版社 程序设计教程

相关文档
相关文档 最新文档