中南大学
本科生课程设计(实践)任务书、设计报告
(C++程序设计)
计算机基础教学实验中心
20##年7月4日
一元二次方程求解系统
摘要: MFC,全称为 Microsoft Foundation Classes,是一个微软公司提供的类库,以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
关键词 :MFC,一元二次方程求解
1. 一元二次方程求解系统开发设计思想
众所周知,一元二次方程作为一种基本方程,大量出现于物理数学等领域,其求根公式为,若直接根据公式计算的话,计算量较大,不方便。因此在这次c++实践中,我选择用MFC做了一个一元二次方程求解系统,只需在对应的位置中输入一元二次方程的系数,即可求出方程的解,降低了运算的麻烦,为广大学生及相应学科工作者提供方便。
2. 一元二次方程系统功能及系统设计介绍
一元二次方程 双击打开系统,在对应位置输入a,b,c的值,点击计算,即可得到方程的解,再点击重置,则所有值归零。
操作步骤
1. 建立对话框窗口,通过控件面板设计合适的对话框样式;
2. 为编辑框(Edit box)添加成员变量;
3. 为命令按钮添加函数,编辑代码。
应注意的是,根据求根公式,若0,则方程有两个实根;若0,则方程无解;若a=0,则方程变为为一元一次方程,此时不能通过求根公式计算方程结果;因此在编辑代码时要考虑到这三种情况,这样才能避免运行时出现错误。
在我设计的一元二次方程求解系统中,若0,点击计算会正常输出两实根;若0,点击计算后,会显示x1=x2=999999999999,以此表示方程无解;若a=0,点击计算,则会把一元二次方程当做一元一次方程进行计算,从而得到两个相等的跟。
3. 一元二次方程求解系统开发的体会
这次的课程设计在我看来是一次非常珍贵的机会,这可以让我们把所学的理论与实际相结合,让我们通过对一个程序的设计,走出纯理论的学习,在实际操作中发现并解决问题,收获课堂上学不到的东西。
就个人而言,我体会较深的一点是自己看书学习的过程。MFC对我们而言是一个新东西,要想用它做出令人满意的系统,就得自己看书摸索,或从网上及其他各种途径获得信息和知识。这种理论与实际相结合的模式,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼。
为期三周不到的MFC课程设计就要画上一个句号了,从一开始的一筹莫展到现在成功做出东西,在这短短的三周中,我获得了知识,学会了坚持,这四周不仅仅是交出了一份作业,还对自己有了新的认识,这是一次难得的机遇与经历
第二篇:MFC选修 计算器实验报告
六、源程序清单、测试数据、结果
主要代码:
//1-9与0的消息响应函数相同,如下:
void CCaculatorDlg::OnButton0()
{
// TODO: Add your control notification handler code here
m_StrBegin = m_StrBegin+"0";
if (!m_IsCheckPoint) m_DspEdit.OnDisplay(m_StrBegin+".");
else m_DspEdit.OnDisplay(m_StrBegin);
}
//清除显示框中内容
void CCaculatorDlg::OnButtonClr()
{
// TODO: Add your control notification handler code here
m_IsCheckPoint = false; m_StrBegin = "";
m_begin = 0.0; m_end = 0.0;
m_bit = 0; m_DspEdit.OnDisplay("0.");
}
//实现“+”运算,“-、*、/、平方、开方”等运算的消息函数大体相同
void CCaculatorDlg::OnButtonPlus()
{
// TODO: Add your control notification handler code here
Result(); m_bit = 1;
}
//核心函数:实现按钮到显示功能的中间计算过程
Void CCaculatorDlg::Result()//用来处理按下符号键时的函数,是计算的核心函数
{
m_IsCheckPoint = false; m_begin = atof(m_StrBegin);//将字符串转化为浮点数,确保精度
switch(m_bit)
{
case 1: //处理+号
m_end += m_begin;
break;
case 2: //处理-号
m_end -= m_begin;
break;
case 3: //处理*号,即乘法
m_end *= m_begin;
break;
case 4: //处理/号,即除法
if (m_begin==0)
{
m_DspEdit.OnDisplay("除数不能为零!");
return;
}
m_end /= m_begin;
break;
case 5: //处理sqrt号,即开方
if (m_end<0)
{
m_DspEdit.OnDisplay("函数输入无效!");
return;
}
m_end = sqrt(m_end);
break;
case 6: //处理1/x号,即求倒数
m_end = 1/m_end;
case 7: //处理=号
break;
case 8: //处理sin号
m_end = sin(m_end);
break;
case 9: //处理cos号
m_end = cos(m_end);
break;
case 10: //处理tan号
m_end = tan(m_end);
break;
case 11: //处理x^2号,即平方
m_end = m_end*m_end;
break;
case 12: //处理x^3号,即立方
m_end = m_end*m_end*m_end;
break;
case 13: //处理x^y号,即求x的y次方
m_end = pow(m_end,m_begin);
break;
case 14: //处理Exp号,即求e的x次方
m_end = exp(m_end);
break;
case 15: //处理ln号
if (m_end<=0)
{
m_DspEdit.OnDisplay("函数输入无效!");
return;
}
m_end = log(m_end);
break;
case 16: //处理log号
if (m_end<=0)
{
m_DspEdit.OnDisplay("函数输入无效!");
return;
}
m_end = log10(m_end);
break;
default: //
m_end = m_begin;
break;
}
m_begin = 0.0; m_bit = 0; m_StrBegin = "";
int i = sprintf(m_buffer,"%10.12f",m_end);//将结果转换为字符串
TrimZero(m_buffer,i);//去掉字符串尾部多余的零
m_DspEdit.OnDisplay(m_buffer);
}
//实现简单和扩展计算器的切换功能
void CCaculatorDlg::OnExtend()
{//功能拓展按钮
// TODO: Add your command handler code here
CRect rect;
if(!m_IsExtend)
{ SetWindowPos(&wndTop,0,0,oldrect.Width(),oldrect.Height(),SWP_NOMOVE|SWP_NOZORDER);
m_DspEdit.GetWindowRect(&rect); m_DspEdit.SetWindowPos(NULL,rect.left,rect.top,361,rect.Height(),SWP_NOMOVE|SWP_NOZORDER);
m_DspStatic.GetWindowRect(&rect);
m_DspStatic.SetWindowPos(NULL,rect.left,rect.top,381,rect.Height(),SWP_NOMOVE|SWP_NOZORDER);
m_Menu ->ModifyMenu(ID_EXTEND,MF_BYCOMMAND|MF_STRING,ID_EXTEND,"标准");
m_IsExtend = TRUE;
}
else
{ SetWindowPos(&wndTop,0,0,newrect.Width(),newrect.Height(),SWP_NOMOVE|SWP_NOZORDER);
m_DspEdit.GetWindowRect(&rect);
m_DspEdit.SetWindowPos(NULL,rect.left,rect.top,182,rect.Height(),SWP_NOMOVE|SWP_NOZORDER);
m_DspStatic.GetWindowRect(&rect); m_DspStatic.SetWindowPos(NULL,rect.left,rect.top,202,rect.Height(),SWP_NOMOVE|SWP_NOZORDER);
m_Menu ->ModifyMenu(ID_EXTEND,MF_BYCOMMAND|MF_STRING,ID_EXTEND,"扩展");
m_IsExtend = FALSE;
}
}
void CCaculatorDlg::OnButtonDot()
{//小数点的处理
// TODO: Add your control notification handler code here
if (!m_IsCheckPoint && m_StrBegin != "")
{
m_StrBegin = m_StrBegin+".";
m_DspEdit.OnDisplay(m_StrBegin);
m_IsCheckPoint = true;
}
}
测试结果:
标准界面:
拓展界面: