MFC计算器项目——进制转换模块

 

MFC计算器项目——进制转换模块

标签: mfc 计算器开发 VC++
253人阅读  评论(0)  收藏  举报
  分类:
项目实践(3) 

计算器进制转换模块(运行效果图参见计算器项目综述

开发文档截图


该模块实现了2进制到36进制之间的任意转换,可能有人会问为什么是2到32进制之间呢?这个36是怎么来的呢?

这个是因为超出36后字母表示就不那么方便了,0-9加上a-z就是36个啦微笑       当然要表示办法总是有的,比如用大写的英文字母A-Z,但是常用的进制转换(2,8,10,16)也都没有超出36不是?

核心代码如下:

[cpp]  view plain  copy
  1. // MyDlg_2.cpp : implementation file  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include "简化调试.h"  
  6. #include "math.h"  
  7. #include "string.h"  
  8. #include "stack"  
  9. #include "简化调试Dlg.h"  
  10. #include "MyDlg_1.h"  
  11. #include "MyDlg_2.h"  
  12. #include "MyDlg_3.h"  
  13. using namespace std;  
  14.   
  15. #ifdef _DEBUG  
  16. #define new DEBUG_NEW  
  17. #undef THIS_FILE  
  18. static char THIS_FILE[] = __FILE__;  
  19. #endif  
  20.   
  21. stack <int> base_change;  
  22. /////////////////////////////////////////////////////////////////////////////  
  23. // CMyDlg_2 dialog  
  24.   
  25.   
  26. CMyDlg_2::CMyDlg_2(CWnd* pParent /*=NULL*/)  
  27.     : CDialog(CMyDlg_2::IDD, pParent)  
  28. {  
  29.     //{{AFX_DATA_INIT(CMyDlg_2)  
  30.     m_str1 = _T("");  
  31.     m_str2 = _T("");  
  32.     m_base1 = 0;  
  33.     m_base2 = 0;  
  34.     //}}AFX_DATA_INIT  
  35. }  
  36.   
  37.   
  38. void CMyDlg_2::DoDataExchange(CDataExchange* pDX)  
  39. {  
  40.     CDialog::DoDataExchange(pDX);  
  41.     //{{AFX_DATA_MAP(CMyDlg_2)  
  42.     DDX_Text(pDX, IDC_EDIT1, m_str1);  
  43.     DDX_Text(pDX, IDC_EDIT4, m_str2);  
  44.     DDX_Text(pDX, IDC_EDIT2, m_base1);  
  45.     DDX_Text(pDX, IDC_EDIT3, m_base2);  
  46.     //}}AFX_DATA_MAP  
  47. }  
  48.   
  49.   
  50. BEGIN_MESSAGE_MAP(CMyDlg_2, CDialog)  
  51.     //{{AFX_MSG_MAP(CMyDlg_2)  
  52.     ON_BN_CLICKED(IDC_BUTTON1, OnButton1)  
  53.     ON_COMMAND(ID_MENUITEM2, OnMenuitem2)  
  54.     ON_COMMAND(ID_MENUITEM0, OnMenuitem0)  
  55.     ON_COMMAND(ID_MENUITEM1, OnMenuitem1)  
  56.     ON_COMMAND(ID_MENUITEM3, OnMenuitem3)  
  57.     //}}AFX_MSG_MAP  
  58. END_MESSAGE_MAP()  
  59.   
  60. /////////////////////////////////////////////////////////////////////////////  
  61. // CMyDlg_2 message handlers  
  62.   
  63. void CMyDlg_2::OnButton1()   
  64. {  
  65.     // TODO: Add your control notification handler code here  
  66.     UpdateData();  
  67.     m_str2 = "";  
  68.     char dig2_str1[50];  
  69.     strncpy(dig2_str1,m_str1,sizeof(dig2_str1));  
  70.     int sum_base = 0,p = 0;  
  71.     if(m_base1>10)  
  72.     {  
  73.         for(int i=0;i<strlen(dig2_str1);i++)  
  74.         {  
  75.             if(dig2_str1[i] >= 'a')  
  76.                 sum_base += (dig2_str1[i]- 'a' + 10) * pow(m_base1,(strlen(dig2_str1)-i-1));  
  77.             else  
  78.                 sum_base += (dig2_str1[i]-'0') * pow(m_base1,(strlen(dig2_str1)-i-1));  
  79.         }  
  80.         while(sum_base>0)  
  81.         {  
  82.             base_change.push(sum_base%m_base2);  
  83.             sum_base = sum_base / m_base2;  
  84.         }  
  85.         if(m_base2>10)  
  86.         {  
  87.             while(!base_change.empty())  
  88.             {  
  89.                 if(base_change.top() >= 10)  
  90.                     m_str2 += (base_change.top() -10 + 'a');  
  91.                 else  
  92.                     m_str2 += (base_change.top() + '0');  
  93.                 base_change.pop();  
  94.             }  
  95.         }  
  96.         else  
  97.         {  
  98.             while(!base_change.empty())  
  99.             {  
  100.                 m_str2 += (base_change.top() + '0');  
  101.                 base_change.pop();  
  102.             }  
  103.         }  
  104.           
  105.     }  
  106.     else  
  107.     {  
  108.         for(int i=0;i<strlen(dig2_str1);i++)  
  109.         {  
  110.             sum_base += (dig2_str1[i]-'0') * pow(m_base1,(strlen(dig2_str1)-i-1));  
  111.         }  
  112.         while(sum_base>0)  
  113.         {  
  114.             base_change.push(sum_base%m_base2);  
  115.             sum_base = sum_base / m_base2;  
  116.         }  
  117.         if(m_base2>10)  
  118.         {  
  119.             while(!base_change.empty())  
  120.             {  
  121.                 if(base_change.top() >= 10)  
  122.                     m_str2 += (base_change.top() -10 + 'a');  
  123.                 else  
  124.                     m_str2 += (base_change.top() + '0');  
  125.                 base_change.pop();  
  126.             }  
  127.         }  
  128.         else  
  129.         {  
  130.             while(!base_change.empty())  
  131.             {  
  132.                 m_str2 += (base_change.top() + '0');  
  133.                 base_change.pop();  
  134.             }  
  135.         }  
  136.     }  
  137.     UpdateData(FALSE);  
  138. }  
  139.   
  140. void CMyDlg_2::OnMenuitem2()   
  141. {  
  142.     // TODO: Add your command handler code here  
  143.     MessageBox("您已处于进制转换模式!");  
  144. }  
  145.   
  146. void CMyDlg_2::OnMenuitem0()   
  147. {  
  148.     // TODO: Add your command handler code here  
  149.     CMyDlg_2::OnCancel();  
  150.     CMyDlg dlg;  
  151.     dlg.DoModal();  
  152. }  
  153.   
  154. void CMyDlg_2::OnMenuitem1()   
  155. {  
  156.     // TODO: Add your command handler code here  
  157.     CMyDlg_2::OnCancel();  
  158.     CMyDlg_1 dlg;  
  159.     dlg.DoModal();  
  160. }  
  161.   
  162. void CMyDlg_2::OnMenuitem3()   
  163. {  
  164.     // TODO: Add your command handler code here  
  165.     CMyDlg_2::OnCancel();  
  166.     CMyDlg_3 dlg;  
  167.     dlg.DoModal();  
  168. }  

猜你喜欢

转载自blog.csdn.net/weixin_40236507/article/details/79807066