四则运算练习器

上一个猜数游戏,大家过了把干瘾吧,今天再做了个游戏给大家玩玩“四则运算练习器”

我相信大家上学的时候,一定会遇到各种各样的计算吧,为了提高自己的口算而做大量的计算练习,从而买了许多练习书,现在还用买练习书吗?你OUT了

眼见为实

四则运算练习器界面                                           选择运算符为加法

         


选择难度为初级                                                    单击出题

        


写入答案后单击确定(当答案正确时)                   写入答案后单击确定(当答案错误时)           

         


说明:初级(0~10以内) 中级(0~50以内)  高级(0~100以内)


实现过程:

打开VC6.0--->选择Win32 DialogBasedApplication--->工程名命名为“四则运算练习”

搭建图形界面:

在搭建图形姐面前先学习两个控件 :单选按钮   组框


搭建如下图所示的图形界面:


设置单选按钮控件的属性为组:

双击单选按钮—>选择属性


勾上组


设置控件的名字和ID:

控件名

控件ID

IDC_RADIO1

IDC_RADIO2

IDC_RADIO3

IDC_RADIO4

初级

IDC_RADIO5

中级

IDC_RADIO6

高级

IDC_RADIO7

出题

IDC_START

出题框

IDC_EDIT1

答案框

IDC_EDIT2

余数框

IDC_EDIT3

确认

IDC_OK1

 

老规矩:在写代码前先学几个函数


函数名: CheckRadioButton

函数功能:指定一组单选按钮中某一个按钮的状态

函数原型:

BOOL CheckRadioButton(
  _In_  HWND hDlg,
  _In_  int nIDFirstButton,
  _In_  int nIDLastButton,
  _In_  int nIDCheckButton
);

参数:

第一个参数:对话框的句柄

第二个参数:指定的该组单选按钮控件中第一个单选按钮的ID

第三个参数:指定该组单选按钮控件中最后一个单选按钮的ID

第四个参数:id


参考文章:CheckRadioButton函数


程序代码:

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <time.h>
#include "resource.h"
#include "MainDlg.h"


BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
		HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }

    return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}

int i1 = 0;
int i2 = 0;
int i3 = 0;
int i4 = 0;

int isFlag = 0;//标示用户是否选择了除法

//得到随机数
void GetRand(void)
{
	time_t a;//保存时间

	//随机数种子
	srand((unsigned)time(&a));

	i1 = rand();
	i2 = rand();
}


//加法
void Add(HWND hwnd,int flag)
{
	TCHAR str[256];

	GetRand();

	if(1==flag)//初级
	{
		i1 = i1 % 10;
		i2 = i2 % 10;
		i3 = i1 + i2;
	}
	else if(2==flag)//中级
	{
		i1 = i1 % 50;
		i2 = i2 % 50;
		i3 = i1 + i2;
	}
	else if(3==flag)//高级
	{
		i1 = i1 % 100;
		i2 = i2 % 100;
		i3 = i1 + i2;
	}

	wsprintf(str,"%d+%d",i1,i2);

	SetDlgItemText(hwnd,IDC_EDIT1,str);
	SetDlgItemText(hwnd,IDC_EDIT2,NULL);
}


//减法
void Sub(HWND hwnd,int flag)
{
	TCHAR str[256];

	GetRand();

	if(i2>i1)//保证i2<i1
	{
		i1 = i1 ^ i2;
		i2 = i1 ^ i2;
		i1 = i1 ^ i2;
	}

	if(1==flag)//初级
	{
		i1 = i1 % 10;
		i2 = i2 % 10;
		i3 = i1 - i2;
	}
	else if(2==flag)//中级
	{
		i1 = i1 % 50;
		i2 = i2 % 50;
		i3 = i1 - i2;
	}
	else if(3==flag)//高级
	{
		i1 = i1 % 100;
		i2 = i2 % 100;
		i3 = i1 - i2;
	}

	wsprintf(str,"%d-%d",i1,i2);

	SetDlgItemText(hwnd,IDC_EDIT1,str);
	SetDlgItemText(hwnd,IDC_EDIT2,NULL);
}


//乘法
void Mul(HWND hwnd,int flag)
{
	TCHAR str[256];

	GetRand();

	if(1==flag)//初级
	{
		i1 = i1 % 10;
		i2 = i2 % 10;
		i3 = i1 * i2;
	}
	else if(2==flag)//中级
	{
		i1 = i1 % 50;
		i2 = i2 % 50;
		i3 = i1 * i2;
	}
	else if(3==flag)//高级
	{
		i1 = i1 % 100;
		i2 = i2 % 100;
		i3 = i1 * i2;
	}

	wsprintf(str,"%d*%d",i1,i2);

	SetDlgItemText(hwnd,IDC_EDIT1,str);
	SetDlgItemText(hwnd,IDC_EDIT2,NULL);
}


//除法
void Div(HWND hwnd,int flag)
{
	isFlag = 1;//表示用户选择了除法

	TCHAR str[256];

	GetRand();

	if(0 == i2)//保证除数不为0
	{
		i2++;
	}

	if(1==flag)//初级
	{
		i1 = i1 % 10;
		i2 = i2 % 10;
		i3 = i1 / i2;
		i4 = i1 % i2;
	}
	else if(2==flag)//中级
	{
		i1 = i1 % 50;
		i2 = i2 % 50;
		i3 = i1 / i2;
		i4 = i1 % i2;
	}
	else if(3==flag)//高级
	{
		i1 = i1 % 100;
		i2 = i2 % 100;
		i3 = i1 / i2;
		i4 = i1 % i2;
	}

	wsprintf(str,"%d/%d",i1,i2);

	SetDlgItemText(hwnd,IDC_EDIT1,str);
	SetDlgItemText(hwnd,IDC_EDIT2,NULL);
	SetDlgItemText(hwnd,IDC_EDIT3,NULL);
}


int Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{	
    switch(id)
    {
		case IDC_RADIO1:/*选择运算符+*/
		case IDC_RADIO2:/*选择运算符-*/
		case IDC_RADIO3:/*选择运算符**/
		case IDC_RADIO4:/*选择运算符/*/
		{
			/*指定一组单选按钮中某一个按钮的选定状态*/
			CheckRadioButton(hwnd,IDC_RADIO1,IDC_RADIO4,id);
		}
		break;

		case IDC_RADIO5:/*选择难度:初级*/
		case IDC_RADIO6:/*选择难度:中级*/
		case IDC_RADIO7:/*选择难度:高级*/
		{
			/*指定一组单选按钮中某一个按钮的选中状态*/
			CheckRadioButton(hwnd,IDC_RADIO5,IDC_RADIO7,id);
		}
		break;

        case IDC_START:/*开始*/
		{
			/*定义变量 iOperator 接收选中的运算符的id*/
			UINT iOperator = GetCheckRadioButton(hwnd,IDC_RADIO1,IDC_RADIO4);

	        /*定义变量 iDiffcult 接收选中的运算符的id*/
			UINT iDiffcult = GetCheckRadioButton(hwnd,IDC_RADIO5,IDC_RADIO7);

			if(IDC_RADIO1 == iOperator)/*加法*/
			{
				if(IDC_RADIO5 == iDiffcult)/*初级*/
				{
					Add(hwnd,1);
				}

				if(IDC_RADIO6 == iDiffcult)/*中级*/
				{
					Add(hwnd,2);
				}

				if(IDC_RADIO7 == iDiffcult)/*高级*/
				{
					Add(hwnd,3);
				}
			}

			if(IDC_RADIO2 == iOperator)/*减法*/
			{
				if(IDC_RADIO5 == iDiffcult)/*初级*/
				{
					Sub(hwnd,1);
				}

				if(IDC_RADIO6 == iDiffcult)/*中级*/
				{
					Sub(hwnd,2);
				}

				if(IDC_RADIO7 == iDiffcult)/*高级*/
				{
					Sub(hwnd,3);
				}
			}

        	if(IDC_RADIO3 == iOperator)/*乘法*/
			{
				if(IDC_RADIO5 == iDiffcult)/*初级*/
				{
					Mul(hwnd,1);
				}

				if(IDC_RADIO6 == iDiffcult)/*中级*/
				{
					Mul(hwnd,2);
				}

				if(IDC_RADIO7 == iDiffcult)/*高级*/
				{
					Mul(hwnd,3);
				}
			}

	         if(IDC_RADIO4 == iOperator)/*除法*/
			{
				if(IDC_RADIO5 == iDiffcult)/*易*/
				{
					Div(hwnd,1);
				}

				if(IDC_RADIO6 == iDiffcult)/*中*/
				{
					Div(hwnd,2);
				}

				if(IDC_RADIO7 == iDiffcult)/*难*/
				{
					Div(hwnd,3);
				}
			}
		}
        break;
  
		case IDC_OK1://确定
		{
			TCHAR str[256];
			TCHAR str1[256];

			/*得到用户输入的结果*/
			GetDlgItemText(hwnd,IDC_EDIT2,str,sizeof(str));
			GetDlgItemText(hwnd,IDC_EDIT3,str1,sizeof(str1));

			/*将用户输入的结果转换成整数*/
			int j = atoi(str);
			int k = atoi(str1);

			if(1 == isFlag)//当用户选择了除法
			{
				if(0==i4)//当余数为0时
				{
					if(i3 == j)/*用户输入的结果与标准结果判定*/
					{
						MessageBox(hwnd,TEXT("恭喜你,回答正确"),"",MB_OK);
					}
			        else
					{
						MessageBox(hwnd,TEXT("回答错误"),"",MB_OK | MB_ICONERROR);
					}
				}
				else//余数不为0
				{
					if((i3 == j) && (i4 == k))
					{
						MessageBox(hwnd,TEXT("恭喜你,回答正确"),"",MB_OK);
					}
					else
					{
						MessageBox(hwnd,TEXT("回答错误"),"",MB_OK | MB_ICONERROR);
					}
				}
			}
			else
			{
				if(i3 == j)/*用户输入的结果与标准结果判定*/
				{
					MessageBox(hwnd,TEXT("恭喜你,回答正确"),"",MB_OK);
				}
			   else
			   {
				   MessageBox(hwnd,TEXT("回答错误"),"",MB_OK | MB_ICONERROR);
			   }
			}
		}
		break;
        default:
		break;
    }
	return 0;
}

/*用于得到单选框选中后的项目的id*/
int GetCheckRadioButton(HWND hwnd, int FirstId, int LastId)
{
	int i;

	for(i = FirstId ; i <= LastId ; i++)
	{
       /*确定某个单选按钮是否选中*/
		UINT iChecked = IsDlgButtonChecked(hwnd,i);

		/*如果某个单选按钮选中,返回该单选按钮的id*/
		if(BST_CHECKED == iChecked)
		{
			return i;
		}
	}
	return -1;/*如果没选中单选按钮,则返回-1*/
}

void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}

点击下载四则运算练习器




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值