中北大学
课 程 设 计 说 明 书
学 生 姓 名: 学 号:
学 院: 信息与通信工程学院 专 业: 电子信息科学与技术
题 目: 程序设计实践:
科学计算器程序设计
指导教师: 赵英亮 职称: 讲师
2010 年 01 月 14 日
1
1
- 1--
中北大学
课程设计任务书
09/10 学年第 一 学期
学 院: 信息与通信工程学院 专 业: 电子信息科学与技术 学生姓名: 学 号:
学生姓名: 学 号:
学生姓名: 学 号:
课程设计题目: 计算器的设计 起迄日期: 2009年12月21 日~2010年1月15日 课程设计地点: 专业实验室 指 导 教 师:
2
2
- 1--
系 主 任:
下达任务书日期: 2009 年12 月 21日
课 程 设 计 任 务 书
1.设计目的: (1) 掌握VC++程序开发平台; (2) 掌握对话框模式的可视化实现和按钮消息的响应; (3) 掌握应用VC++库函数实现数字的输入、计算和显示等功能。 2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等): (1)查阅相关资料,掌握基于面向对象的编程方法; (2)主界面采用对话框模式,编辑计算器相应的控件; (3)实现数据的输入、计算和显示; (4)要求3位同学各自实现不同分工。 3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕: 3 3 - 1--
(1) 要求设计组的每个成员都要了解设计的要求和思路; (2) 编写详细的设计说明书一份; (3) 要求有正确的运行结果及结果分析。
课 程 设 计 任 务 书
4.主要参考文献: 1 1999. 2 李光明. Visual C++ 6.0 经典实例大制作. 北京:中国人事出版社,2000. 王华, 叶爱亮, 祁立学等. Visual C++ 6.0 编程实例与技巧. 北京:机械工业出版社, 3 阚能琪 VC++串口通信中多线程技术的应用研究 《西华大学学报(自然科学版)》 2005年04期 4 周晓光 ++实现计算机与GPS的通信 西安农林科技大学学报 5 陈惠玲 用vc++实现计算器运行的方法 工业技术期刊 5.设计成果形式及要求: 4 4 - 1--
提供详细的设计说明书一份 软件设计结果 6.工作计划及进度: 2009年 12月21日 ~ 12月27日: 学习VC有关编程方法; 2010年 01月05日 ~ 01月13日: 在指导教师指导下实现程序设计,并完成课程设计说明书的撰写; 01月14日:答辩。 系主任审查意见: 签字: 年 月 日
目 录
1、 设计摘要 ………………………………………………6
2、设计目的 ………………………………………………7
3、设计方案介绍 ………………………………………………7
4、设计主要步骤 ………………………………………………7
5、源程序代码 ………………………………………………10
6、运行结果 ………………………………………………22
5
5
- 1--
7、设计心得 ………………………………………………26
8、参考文献 ………………………………………………27
一、设计摘要:
本次程序设计我们设计的目的是:(1)掌握VC++程序开发平台; (2)掌握对话框模式的可视化实现和按钮消息的响应;(3)掌握应用VC++库函数实现数字的输入、计算和显示等功能。
在工作当中我们在VC++程序环境下,运用多种函数来实现程序的编程和显示。本次程序设计主要是处理计算数和计算符的输入、计算和显示问题。为此我们查阅了很多关于此方面的知识。
通过这次程序设计,我们完整的把计算器的各项功能进行了编译、运行,此次设计结束。 、设计目的简介
6 6 - 1--
在实践中掌握VC++程序开发平台,学会应用VC++库函数,编辑计算器相应的控件实现数字的输入,计算,显示等功能。 三、设计主要方案介绍
1、 在Visual C++ 6.0 环境下首先通过“新建”利用MFC向导建立一个基于模态对话框的MFC应用程序,然后再通过“资源”插入一个对话框IDD_CALCULATOR_DIALOG作为计算机器的主要运算界面,再利用ClassWizard创建与它关联的类CCalculatorDlg,并为该类添加相应的成员,设置各种属性;
2、 在对话框中添加51个按纽、2个编辑框作为输入和输出显示、8个单选按钮、3个静态文本控件,并为控件添加相关联的成员变量,整体界面见上图: 3、 分别为按纽、文本框添加VC++6.0代码,关联变量与控件之间的关系,以实现所要实现的功能。 四、设计主要步骤
1、创建应用程序
(1)选择FileNew菜单命令,并在弹出的新建对话框中单击Project标签。 (2)选择MFC AppWizard(exe),并在Project Name编辑框中输入Calculator作为工程名称。单击OK按钮,出现Step1对话框。
7 7 - 1--
2、创建对话资源
在工程工作区中单击Resource View标签显示应用程序资源。单击Dialog旁
8
8
- 1--
边的“十”,再双击IDD—CALCULATOR_DIALOG并编辑对话框资源,编辑后的对话框如图1所示。 3、添加消息处理函数
首先利用Class Wizard 为编辑框控件增加CString型成员变量m_result用于结果显示,然后使用Class Wizaed为对话框类CcalculatorDlg增加消息处理函数,ClassWizard会自动完成有关的函数声明。 4、为各按钮添加消息处理函数。 5、添加成员处理函数和成员变量。 6、添加完成各个功能的代码。 7、添加处理科学计算的功能 8、动态设置计算器大小。
9、制度的选择,程序运行默认制度选中角度,当选项中“角度”按钮时,则需将其转换为角度计算,由公式:弧度=PI*角度/180,可将表达式中角度转换为弧度既s[ll-1]=PI*s[ll-1]/180。对于反、正余弦和反正余切,由于C++math.h库函数提供的计算结果是弧度的,所以当选中默认的“弧度”按钮时可不必将计算结果转换,当选中“角度”按钮时,则由公式:角度=弧度*180/PI,既可计算出来。 10、结果进制数的转换,十进制转换为二进制、八进制和十六进制是采用的是取余法。二进制、八进制和十六进制转换为十进制采用的是加权法。其它进制的转换则遵循1位八进制相当于3位二进制,1位十六制相当于4位二进制的规律进行转换。
11、常数表,定义了11个比较多用的常数值,方便计算。11个常数值存放的位置是一个弹出式菜单m_menu。
9 9 - 1--
12、历史表达式,首先创建一个菜单使用函数CreatePopupMenu(),然后定义一个函数AddToHistr(CString strExp)将表达式strExp的内容添加到菜单,其中在函数中,GetMenuItemCount()是用来获取菜单中子菜单个数,AppendMenu(MF_STRING,IMENU_ITEM_ID+b,strExp)是用来在菜单的未尾添加子菜单中,m_menuItem.Add(strExp)是将表达式strExp显示为菜单内容。有了这些处理后,则在“计算”按钮的消息映射函数上用AddToHistr(m_strExp)将计算表达式和结果加到菜单上,在“历史表达式”按钮的消息映射函数上用GetCursorPos(&point)
获
取
光
标
所
在
位
置
,
并
用
m_menu2.TrackPopupMenu(TPM_CENTERALIGN,point.x,point.y,this)在光标所在位置上显示菜单内容。菜单存历史表达式是在内存空间中静态分配一片内存用于存放,将分配内存不够时将不再存放。
13、查错处理,主要检查表达是否为空,二元运算符是否少了操作数,一元运算符的函数表达式为空,是否缺少二元运算符,结果进制的转换是否越界。 五、部分代码 //各控件函数
void CCalculatorDlg::OnButtonSin() { }
void CCalculatorDlg::OnButtonCos() {
Paster(\"cos( )\Paster(\"sin( )\
10 10 - 1--
}
void CCalculatorDlg::OnButtonTan() { Paster(\"tan( )\
}
void CCalculatorDlg::OnButtonCot() { Paster(\"cot( )\}
void CCalculatorDlg::OnButtonSin1() { Paster(\"as( )\}
void CCalculatorDlg::OnButtonCos1() { Paster(\"ac( )\}
void CCalculatorDlg::OnButtonTan1() { Paster(\"at( )\}
void CCalculatorDlg::OnButtonLog()
11 - 1-- 11
{ Paster(\"long( )\
}
void CCalculatorDlg::OnButtonSh() { Paster(\"sh( )\}
void CCalculatorDlg::OnButtonCh() { Paster(\"ch( )\}
void CCalculatorDlg::OnButtonTh() { Paster(\"th( )\}
void CCalculatorDlg::OnButtonExp() { Paster(\"exp( )\}
void CCalculatorDlg::OnButtonLn() {
12 - 1-- 12
Paster(\"ln( )\
}
void CCalculatorDlg::OnButtonEsqr() { Paster(\"e^( )\
}
void CCalculatorDlg::OnButtonSqrt() { Paster(\"sqr( )\}
void CCalculatorDlg::OnButtonAbs() { Paster(\"abs( )\}
void CCalculatorDlg::OnButton7() { Paster(\"7\}
void CCalculatorDlg::OnButton8() {
Paster(\"8\13 - 1-- 13
}
void CCalculatorDlg::OnButton9() { Paster(\"9\
}
void CCalculatorDlg::OnButtonPlus() { Paster(\"+\
}
void CCalculatorDlg::OnButtonBack() { Paster(\"\
m_strExpc.GetSel(m_nStart,m_nEnd); m_strExp.Delete(m_nStart-1); m_strExpc.SetFocus();
m_strExpc.SetSel(m_nStart-1,m_nStart-1); }
void CCalculatorDlg::OnButtonSqr() { Paster(\"^\ }
void CCalculatorDlg::OnButton4()
14 14 - 1--
{ Paster(\"4\
}
void CCalculatorDlg::OnButton5() { Paster(\"5\ }
void CCalculatorDlg::OnButton6() { Paster(\"6\ }
void CCalculatorDlg::OnButtonMinus() { Paster(\"-\}
void CCalculatorDlg::OnButtonLparen() { Paster(\"(\}
void CCalculatorDlg::OnButtonXb() {
Paster(\"xb\
15 - 1-- 15
}
void CCalculatorDlg::OnButton1() { Paster(\"1\
}
void CCalculatorDlg::OnButton2() { Paster(\"2\ }
void CCalculatorDlg::OnButton3() { Paster(\"3\ }
void CCalculatorDlg::OnButtonMul() { Paster(\"*\}
void CCalculatorDlg::OnButtonRparen() { Paster(\")\}
void CCalculatorDlg::OnButtonXo()
16 - 1-- 16
{ Paster(\"xo\
}
void CCalculatorDlg::OnButton0() { Paster(\"0\ }
void CCalculatorDlg::OnButtonDot() { Paster(\".\}
void CCalculatorDlg::OnButtonSpace() { Paster(\" \}
void CCalculatorDlg::OnButtonDivid() { Paster(\"/\ }
void CCalculatorDlg::OnButtonMod() {
Paster(\"%\
17 - 1-- 17
}
void CCalculatorDlg::OnButtonXh() { Paster(\"xh\
}
void CCalculatorDlg::OnButtonA() { Paster(\"A\
}
void CCalculatorDlg::OnButtonB() { Paster(\"B\
}
void CCalculatorDlg::OnButtonC() { Paster(\"C\
}
void CCalculatorDlg::OnButtonD() { Paster(\"D\
}
void CCalculatorDlg::OnButtonE()
18 - 1-- 18
{ Paster(\"E\
}
void CCalculatorDlg::OnButtonF() { Paster(\"F\ }
void CCalculatorDlg::OnMenuC() { Paster(\"LS\}
void CCalculatorDlg::OnMenuE() {
Paster(\"E\
}
void CCalculatorDlg::OnMenuE0() { Paster(\"DC\}
void CCalculatorDlg::OnMenuG() {
Paster(\"GR\ 19 - 1-- 19
}
void CCalculatorDlg::OnMenuK() { Paster(\"BC\
}
void CCalculatorDlg::OnMenuKe() {
Paster(\"EF\ }
void CCalculatorDlg::OnMenuNa() { Paster(\"NA\ }
void CCalculatorDlg::OnMenuPi() { Paster(\"PI\}
void CCalculatorDlg::OnMenuR() { Paster(\"MG\}
void CCalculatorDlg::OnMenuVm() 20 20 - 1--
{ Paster(\"VM\
}
void CCalculatorDlg::OnRadioStandard() //标准型函数 { SetWindowPos(NULL,0,0,smallCrect.Width(),largeCrect.Height(),
SWP_NOMOVE | SWP_NOZORDER);
}
void CCalculatorDlg::OnRadioScientfic() //科学型函数 { SetWindowPos(NULL,0,0,largeCrect.Width(),largeCrect.Height(),
SWP_NOMOVE | SWP_NOZORDER);
}
void CAboutDlg::OnOK() { // TODO: Add extra validation here
CDialog::OnOK();
}
void CCalculatorDlg::OnButtonConst() //常数表函数 {
UpdateData(1);
21 21- 1--
CWnd * pFrame;
pFrame=AfxGetApp()->GetMainWnd(); CWnd* pWndPopupOwner = this;
VERIFY(m_menu.LoadMenu(IDR_MENU)); CPoint point; GetCursorPos(&point);
::SetForegroundWindow(m_hWnd); CMenu* pPopup = m_menu.GetSubMenu(0);
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x
,point.y,pWndPopupOwner,NULL); }
void CCalculatorDlg::OnButtonHistory() //历史表达式函数 { }
CPoint point; GetCursorPos(&point);
m_menu2.TrackPopupMenu(TPM_CENTERALIGN,point.x,point.y,this); m_menu.DestroyMenu();
六、运行结果
计算表达式:sin( 25+5 )+abs( 8 )
结果转换成十进制为:8.500000000000000
22 22 - 1--
结果转换成八进制为:10.4
23 23 - 1--
结果转换成二进制为:1000.1
24 24 - 1--
转换成十六制为:8.8
25 25 - 1--
七、设计心得
在做这个课程设计之前,我们只学过C++语言,对于C++也只是知道点皮毛,对Visual C++的设计可以说是一无所知,但通过一个月的摸索和讨论,掌握了很多Visual C++设计的知识,对于其有了初步的了解。我个人觉得VisualC++要比C++方便但比较难。我觉得此次实验主要是我们掌握面向对象技术相关的一些软件开发技术。利用MFC类库开发Windows应用程序,怎样用计算器控件实现数字的输入、计算和显示等功能。
刚开始设计时,对Visual C++无从下手只能停留在停留在C++的基础上,总也弄不对。后来经老师指导才发现C++与VC++有很大的不同。通过这次课程设计,我知道了很多知识,所以我感谢这次的课程设计。
26
26
- 1--
八、参考资料
1 王华, 叶爱亮, 祁立学等. Visual C++ 6.0 编程实例与技巧. 北京:机械工业出版社, 1999.
2 李光明. Visual C++ 6.0 经典实例大制作. 北京:中国人事出版社,2000. 3 阚能琪 VC++串口通信中多线程技术的应用研究 《西华大学学报(自然
科学版)》 2005年04期
4 周晓光 ++实现计算机与GPS的通信 西安农林科技大学学报
5 陈惠玲 用vc++实现计算器运行的方法 工业技术期刊
27 27 - 1--
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务