《MFC编程及应用》课程设计报告

时间:2024.3.31

《MFC编程及应用》课程设计报告

题目:        简易型科学计算器         

学号:              姓名:              

指导老师:            杨均匀            

时间:          20##年5月16日       

1、设计步骤

a)     工程建立

本工程建立的是一个基于对话框的应用程序。

b)    类中新增变量的作用

m_inputstr :CEdit类型,用于与程序中编辑框相关联;

m_FormerBase :用于记录上一次是出于何种进制之下,便于进制转换;

CMathString:用于对字符串进行逆波兰表达式的转换并计算结果

c)     需处理的消息的详细代码

对按钮0(OnBnClickedButton0)的响应函数:

void CMy1106840420Dlg::OnBnClickedButton0()

{

    CString temp;//定义一个CString对象

    this->UpdateData(true);//从编辑框获得m_inputstr的值

    m_inputstr.GetWindowText(temp);//获取字符串并存入temp中

    temp += '0';//在字符串末尾添加字符‘0’

    this->m_inputstr.SetWindowText(temp);//将字符串设置回m_inputstr中

    this->UpdateData(false);//更新数据,编辑框显示

}

对按钮1(OnBnClickedButton1)、2(OnBnClickedButton2)、3(OnBnClickedButton3)、4(OnBnClickedButton4)、5(OnBnClickedButton5)、6(OnBnClickedButton6)、7(OnBnClickedButton7)、8(OnBnClickedButton8)、9(OnBnClickedButton9)、A(OnBnClickedButtonA)、B(OnBnClickedButtonB)、C(OnBnClickedButtonC)、D(OnBnClickedButtonD)、E(OnBnClickedButtonE)、F(OnBnClickedButtonF)、左括号(OnBnClickedButtonLbracket)、右括号(OnBnClickedButtonRbracket)、+(OnBnClickedButtonAdd)、—(OnBnClickedButtonMinus)、×(OnBnClickedButtonMultiply)、/(OnBnClickedButtonDiv)、小数点(OnBnClickedButtonPoint)、PI(OnBnClickedButtonPi)的响应函数与按钮0类似,仅末尾添加的字符变为相应的字符。

对按钮Sqrt(OnBnClickedButtonSqrt)的响应函数:

void CMy1106840420Dlg::OnBnClickedButtonSqrt()

{

    CString temp1;

    CString temp2;//定义两个CString变量

    this->UpdateData(true);//更新数据

    m_inputstr.GetWindowText(temp1);//获得字符串并存入temp1中

    temp2 += "sqrt(";

    temp2 += temp1;

    temp2 += ")";//将字符串1改造成符合sqrt()函数样式的字符串,存入temp2

    this->m_inputstr.SetWindowText(temp2);//将temp2设为m_inputstr的值

    CMy1106840420Dlg::OnBnClickedButtonEqual();

//调用OnBnClickedButtonEqual()函数计算最终结果并显示

}

对求立方(OnBnClickedButtonCube)、平方(OnBnClickedButtonSqu)、任意次方(OnBnClickedButtonPower)、Log(OnBnClickedButtonLog)、ln(OnBnClickedButtonLn)、10的次方(OnBnClickedButton10e)、e的次方(OnBnClickedButtonExp)、取整(OnBnClickedButtonInt)、sin(OnBnClickedButtonSin)、cos(OnBnClickedButtonCos)、tan(OnBnClickedButtonTan)、arcsin(OnBnClickedButtonArcsin)、arccos(OnBnClickedButtonArccos)、arctan(OnBnClickedButtonArctan)、取模(OnBnClickedButtonMod)、绝对值(OnBnClickedButtonAbs)的消息响应函数与按钮Sqrt相类似,仅对应函数变化。

对按钮Backspace(OnBnClickedButtonBackspace)的响应函数:

void CMy1106840420Dlg::OnBnClickedButtonBackspace()

{

    CString temp1;

    CString temp2;

    this->UpdateData(true);

    m_inputstr.GetWindowText(temp1);

    for (int i=0;i<_tcslen(temp1)-1;++i)

    temp2.AppendChar(temp1[i]);//取得字符串长度减一个字符

    this->m_inputstr.SetWindowText(temp2);

    this->UpdateData(false);

}

对按钮CE的响应函数:

void CMy1106840420Dlg::OnBnClickedButtonClear2()

{

    CString temp1;

    this->UpdateData(true);

    m_inputstr.GetWindowText(temp1);

    temp1="";//字符串置为空

    this->m_inputstr.SetWindowText(temp1);

    this->UpdateData(false);

}

对按钮=(OnBnClickedButtonEqual)的消息响应函数:

void CMy1106840420Dlg::OnBnClickedButtonEqual()

{

    char str[1000];

    CString m_value;

    CMathString mathstring;//定义一个字符串计算类的对象

    m_inputstr.GetWindowText(str,m_inputstr.GetWindowTextLength()+2);

    mathstring.Initial(str);//初始化CMathString类的对象

    if(mathstring.checkString())//检查表达式是否合法

    {

        mathstring.stringToBolan();//将表达式转换成逆波兰后缀表示法

        if(!mathstring.compvalue())//计算结果

        {

            m_value.Format("%f",mathstring.getvalue());

            m_inputstr.SetWindowText(m_value);

        }

        else

            MessageBox(_T("计算时发生错误"));

    }

    else

        MessageBox(_T("表达式错误?"));

}

对单选按钮十进制(OnClickedDec)的响应函数:

void CMy1106840420Dlg::OnClickedDec()

{

    GetDlgItem(IDC_BUTTON_A)->EnableWindow(false);

    GetDlgItem(IDC_BUTTON_B)->EnableWindow(false);

    GetDlgItem(IDC_BUTTON_C)->EnableWindow(false);

    GetDlgItem(IDC_BUTTON_D)->EnableWindow(false);

    GetDlgItem(IDC_BUTTON_E)->EnableWindow(false);

    GetDlgItem(IDC_BUTTON_F)->EnableWindow(false);

    GetDlgItem(IDC_BUTTON_9)->EnableWindow(true);

    GetDlgItem(IDC_BUTTON_8)->EnableWindow(true);

    GetDlgItem(IDC_BUTTON_7)->EnableWindow(true);

    GetDlgItem(IDC_BUTTON_6)->EnableWindow(true);

    GetDlgItem(IDC_BUTTON_5)->EnableWindow(true);

    GetDlgItem(IDC_BUTTON_4)->EnableWindow(true);

    GetDlgItem(IDC_BUTTON_3)->EnableWindow(true);

    GetDlgItem(IDC_BUTTON_2)->EnableWindow(true);

   GetDlgItem(IDC_BUTTON_1)->EnableWindow(true);

    GetDlgItem(IDC_BUTTON_0)->EnableWindow(true);

 

    GetDlgItem(IDC_BUTTON_Point)->EnableWindow(true);

//将十进制下按钮显示,非十进制的按钮灰化,使其无法使用

    CString temp1;

    CString temp2;

    char temp3[100];

    int dblData = 0;

    this->UpdateData(true);

    m_inputstr.GetWindowText(temp1);

    if (this->m_FormerBase == 8){

        sscanf(temp1.GetBuffer(temp1.GetLength()), "%o",&dblData);

//以8进制方式将字符串转换为整型

        itoa(dblData,temp3,10);//转换为10进制

        temp2 = temp3;

    }else if (this->m_FormerBase == 16){

        sscanf(temp1.GetBuffer(temp1.GetLength()), "%x",&dblData);

//以16进制方式将字符串转换为10进制

        itoa(dblData,temp3,10);

        temp2 = temp3;

    }else if (this->m_FormerBase == 10){

        temp2 = temp1;

    }

    this->m_inputstr.SetWindowText(temp2);

    this->UpdateData(false);

    this->m_FormerBase = 10;//表示此次结果为十进制,为以后转换服务

}

对8进制按钮与16进制按钮的处理与10进制类似

2、遇到的问题及解决办法

(1)首先是Unicode字符集导致字符串的各种函数无法使用,上网搜寻了N多的方法之后,最终还是只能放弃Unicode字符集,使用多字节字符。

(2)但修改为多字节字符集之后,程序的窗口风格变成了古老的win95系列的风格。再次上网上搜寻N久之后,通过修改stdafx.h头文件中相关的定义之后,修改回win7的样式风格。

(3)获取编辑框的字符串之后,要对字符串进行求值。首先想到的就是使用逆波兰后缀表达式法对字符串求值。找出高中时写的代码,尝试修改接口,使之运行。但字符串求值实在是麻烦,调试了好多遍之后,还是放弃自己编写的代码,使用网络上高手提供的CMathString类。该类可以求算术表达式的值,支持各种函数,例如sin,log,sqrt,exp等。通过调用CMathString完成对表达式的求值操作。

(4)十进制、八进制、十六进制之间的进制转换可以直接调用系统的函数来实现,但二进制却没有相关的直接转换函数,如果需要实现与二进制转换相关功能,需手动对字符串修改,过于繁琐,遂放弃此功能。

3、体会与建议

(1)通过此计算器课程设计的制作,深刻感受到了使用MFC开发应用程序的方便与简单。

(2)严格说来,这个程序是我制作的第一个基于win32窗口的应用程序,与原先的命令行程序有着天壤之别。MFC高度的底层代码封装性,着实在开始使用时很不习惯,连最基本的main()函数都找不到了,程序的运行过程也是有点摸不着头脑。

 4、参考文献

侯俊杰《深入浅出MFC(第二版)》华中科技大学出版社


第二篇:孔永刚MFC课程设计报告


《MFC编程及应用》课程设计报告

题目:                                 

学号:   1104620110            姓名:      孔永刚      

指导老师:      杨均匀                       

时间:              20##年5月28日                   

总结:

  MFC课程设计报告终于完成了,它与我之前学过的C++面向程序的设计相比,更加的复杂,更加难懂,由于我之前对MFC方面的知识了解不是很透彻,所以在设计程序时遇到了很多的困难。例如:在设计一些窗口时,对着程序看了一上午,也没有把问题解决,后来不得不请教学长,有了学长的帮忙在把这个问题搞定了。还有很多不如意的地方我就不依依例举了。总之,设计这个程序花费了我很多的功夫。但同时也让我学到了不少的学习经验。计算机是一门重要的课程,它的应用十分广泛,我们只有不断的积累,才能慢慢地了解它,并掌握它。

我知道,这次设计的程序中依然存在着不少问题。例如:在开发简单程序方面,我任然感觉十分吃力,在对话框UI和工作部分不能很好的结合,接口很生涩,程序效率不高。我认为这一点又必要进行修改。还有几处微小的部分需要进行修改。但我的知识有限,同时,时间也很紧迫,所以有些问题尚需要解决。

总之,不管怎样,通过不懈的努力,完成了这次课题的设计,是值得高兴的。同时也让我明白,只要坚持不懈的去做一件事,不管结果怎样,享受过程是美好的。当克服一个个困难时,那种喜悦的气氛久久不会消逝。

此外,我认为学好计算机课程是必要的,其中的方法有很多,只要自己多编程,多思考,多研究,与其他人一起交流,细心观察别人编写的程序的方法,同是在错误中不断的调试,就一定能够编好程序,学懂计算机。

更多相关推荐:
《C语言程序设计》课程设计报告(小组)

东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:##组长:##同组成员:##目录一、目的....................…

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

C语言课程设计报告

河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名学号专业班级计算机07-2班指导教师20XX年9月12日目录1.设计任务书21.…

C语言课程设计报告范例

C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的难点及解决办法四小结五附录原程序2一课程设计题目及所涉及知识点一课程设计题目1基...

厦门理工学院11级C语言C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求1二方案实现与调试221掷骰子游戏222射击游戏323汽车...

C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期专业计算机科学与技术班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求3二方案实现与调试321掷骰子游戏322汽车加...

c语言程序贪吃蛇课程设计报告

山东工商学院信电学院自动111班第一组贪吃蛇课程设计报告高级语言程序设计课程设计报告ExperimentDesigningreporter课程名称高级语言程序设计英文名称CProgramExperimentDe...

c语言课程设计报告

青岛农业大学课程设计报告题目:使用菜单选择趣味程序姓名:学院:理学与信息科学学院专业:通信工程班级:2班学号:指导教师:年月日一设计目的进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系…

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

C语言课程设计报告_运动会分数统计系统

C语言课程设计报告_运动会分数统计系统一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前…

C语言课程设计报告---学籍信息管理系统

中国地质大学本科生课程论文封面1课程设计评语注1无评阅人签名成绩无效2必须用钢笔或圆珠笔批阅用铅笔阅卷无效3如有平时成绩必须在上面评分表中标出并计算入总成绩2目录课程设计评语2目录31课程论文题目42程序设计思...

《C语言程序设计》课程设计报告格式 (2)

C语言程序设计课程设计报告20xx20xx学年第1学期专业软件工程软件测试服务班级1班姓名学号陈家汀指导教师谢小竹成绩计算机与信息工程学院20xx年1月12日目录一课程设计的目的与要求页码二方案实现与调试页码2...

c语言程序设计课程设计报告(34篇)