Windows程序设计作业
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
设计题目:MFC计算器
系别:信息与自动化
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
专业:电子与通信工程
姓名:高小雨
学号:2013704011
一、设计目的及要求
1.1设计目的
能够熟练掌握MFC中的各个控件,消息的处理与添加,能够独立完成一些简单的算法,并且能够具体实现一些功能,真正可以利用功能比较强大的MFC编译出较好的程序代码。本设计完成的是一个具有比较齐全运算功能的计算器。
1.2设计要求
利用Microsoft Visual C++的MFC制作一个多功能计算器,要求:
(1)能够实现最基本的加、减、乘、除四则基本运算;
(2)添加了计算类型,分别是弧度制、度数制;
(3)界面有正负、清空、等于方便用户计算使用;
(4)重点是此计算器具有倒数、多次方、开方、三角函数、反三角函数、指数、阶乘等高级运算。
1.3软件、硬件环境
本程序采用Microsoft Visual C++6.0的英文版本进行编译。VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
C/C++
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。
二、课程设计步骤
2.1 Windows消息处理机制的理解
首先编写程序需要对Windows程序的消息处理机制有个比较清晰的了解。Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
2.2界面的设计
仿照Windows附件里面的计算器,在Dialog视图中画好界面,主要使用的菜单中的相关控件,并合理布置各个按钮的位置,使界面更加整洁。在各个控件的属性里依次定义好名称,之后屏幕显示的就是如图一样的可视计算器界面:
三、课程设计内容
3.1 概要设计
依次将各个功能按钮设置相关的ID和控件类,一下为各类按键的一个举例,以下为数字0的属性设置,及其ID和标题名称,其余数字键属性设置与其相似。
下图是清零键C的属性,及其ID和标题名称
下图为四则运算加、减、乘、除中“+”的ID和标题名称
下图是弧度按键的属性设置
下图为计算器中三角函数和反三角函数的属性设置
下图是做的一个简单的运算,结果如图中的显示,为double型。
3.1.1 程序总体框架描述
3.1.2程序常用类声明
按键0~9的ID设置
IDC_BUT0 IDC_BUT1 IDC_BUT2 IDC_BUT3 IDC_BUT4 IDC_BUT5 IDC_BUT6 IDC_BUT7 IDC_BUT8 IDC_BUT9
计算类型的ID设置
弧度:IDC_HUDU
角度:IDC_JIAODU
次方的ID设置
10^x:IDC_BUTTON_10X x^y:IDC_XDEY
2^x:IDC_2DEX x^2:IDC_BUTTON_SQRT
三角函数的ID设置
sin:IDC_SIN cos:IDC_COS tan:IDC_TAN
tanh:IDC_TANH arctan:IDC_ARCTAN arcos:IDC_ARCCOS
cosh:IDC_COSH arcsin:IDC_ARCSIN sinh:IDC_SINH
四则运算的ID设置
+:IDC_BUTTON_ADD -: IDC_BUTTON_MINUS
*: IDC_BUTTON_MUTIPLY /: IDC_BUTTON_DIV
清空、等于、正负号、exp、ln、Log、1/x的ID设置
C: IDC_BUTTON_CLEAR =:IDC_BUTTON_EQUAL
+/—: IDC_BUTTON_SIGN exp: IDC_BUTTON_EXP
ln: IDC_LN log: IDC_LOG 1/x: IDC_BUTTON_RECI
下图是基于基本对话框中的所有函数:
3.2 主要代码
计算器主要功能的实现,0—9 数字键的代码如下:
//用于数字按钮的调用
1. void CCounterDlg::onButtonN(int n)
2. {
3. if( m_coff == 1.0)
4. m_second = m_second*10 + n;//作为整数输入数字时
5. else
6. {
7. m_second = m_second + n*m_coff; //作为小数输入数字
8.
9. }
10. UpdateDisplay(m_second);//更新编辑框的数字显示
11. }
12. //添加各个按钮的消息响应函数
13. void CCounterDlg::OnBut0()
14. {
15. // TODO: Add your control notification handler code here
16. onButtonN(0);
17. }
18. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
19. void CCounterDlg::OnBut9()
20. {
21. // TODO: Add your control notification handler code here
22. onButtonN(9);
23. }
24. //用于显示数据
25. void CCounterDlg::UpdateDisplay(double n)
26. {
27. m_display.Format(_T("%f"),n); //将double型转换成字符型
28. int i=m_display.GetLength();
29. while(m_display.GetAt(i-1)=='0') //格式化输出,将输出结果后的零截去
30. { m_display.Delete(i-1,1); i--; }
31. UpdateData(false);//更新编辑框变量m_display
32. }
33. //用于计算结果
34. void CCounterDlg::Calculate(void)
35. {
36. //将前一次数据与当前数据进行运算,作为下一次的第一操作数,并在编辑框显示
37. switch(m_operator.GetAt(0))
38. {
39. case '+':
40. m_first+=m_second;
41. break;
42. case '-':
43. m_first-=m_second;
44. break;
45. case '*':
46. m_first*=m_second;
47. break;
48. case '/':
49. if(fabs(m_second)<=0.000001) //求m_second的绝对值 如果为零时
50. {
51. m_display="除数设置有误";
52. UpdateData(false);
53. return;
54. }
55. else
56. m_first/=m_second;break;
57. }
58. m_second=0.0;
59. m_coff=1.0;
60. m_operator=_T("+");
61. UpdateDisplay(m_first);//更新编辑框显示内容
62. }
63.
64. void CCounterDlg::OnButtonAdd()
65. {
66. // TODO: Add your control notification handler code here
67. Calculate();
68. m_operator="+"; //-*与之相同
69. }
70. void CCounterDlg::OnButtonDiv()
71. {
72. // TODO: Add your control notification handler code here
73. Calculate();
74. m_operator.Format(_T("%s"),"/");
75. }
76. //添加三角函数一个函数
77. void CCounterDlg::TrigFunction()
78. {
79. switch(m_duType)
80. {
81. case 0:
82. m_second=m_second;//弧度
83. break;
84. case 1:
85. m_second=m_second*m_PI/180;//角度
86. break;
87.
88. }
89. }
90. void CCounterDlg::OnBnClickedHudu()
91. {
92. // TODO: Add your control notification handler code here
93. m_duType=0; //系统默认m_duType=0,计算器默认为弧度计算
94. }
95.
96. void CCounterDlg::OnBnClickedJiaodu()
97. {
98. // TODO: Add your control notification handler code here
99. m_duType=1; //主要是作为以后函数算法的判断标准
100. }
101. void CCounterDlg::OnSin()
102. {
103. // TODO: Add your control notification handler code here
104. TrigFunction();
105. m_second=sin(m_second);
106. UpdateDisplay(m_second);
107. } //其余的三角函数与之类似
108. //计算阶乘的代码
109. //添加函数 int jiecheng(int n)利用递归返回阶乘值
110. int CCounterDlg::jiecheng(int n)
111. {
112. if(n==0||n==1)
113. return 1;
114. else
115. if(n>1)
116. return n*jiecheng(n-1);//递归函数求阶乘f(n)=n*f(n-1)
117. }
118. //在n!的按钮消息处理里,如果输入的不是整数则不能进行阶乘运算