Как написать простой калькулятор ч.1

Добрый день.

Создадим свой собственный простенький калькулятор. Будем использовать один файл класса.

Создаем новый проект, кидаем на формачку кнопочки для калькулятора (рис. 1):

Заполняем теги в свояствах кнопки(рис. 2):

Создаем файл по класс с именем «myCalc». Определяем переменные и создаем пустышки для функций:

private float enterNum = 0;
private float memNum = 0;
public float _enterNum { set { enterNum = value; } }
public float _memNum { set { memNum = value; } }
public float dois()
{
	float val=0;
	return val;
}
private float plus()
{
	float val = 0;
	return val;
}
private float minus()
{
	float val = 0;
	return val;
}
private float divide()
{
	float val = 0;
	return val;
}
private float multiply()
{
	float val = 0;
	return val;
}
public void clearMem()
{
	memNum = 0;
}

В форме необходимо сделать ссылку на объект класса и создать переменную для ввода значений:

private myCulc mC = new myCulc();
private string Num = "";
private string Do = "";

На каждую кноппку калькулятора создадим событие «Action-Click» (рис. 3)

В этом событии необходимо будет ссылаться на процедуру, которая будет распознавать какое действие нам необходимо сделать (сложение, вычитание, умножение или деление). Также в событии будет присваиваться переменной «Num» тэг кнопки чисел, а «Do» действие. Для числовых кнопок пропишем следующее:

private void bt1_Click(object sender, EventArgs e)
{
	Num += this.bt1.Tag.ToString();
	upEn();
}

Для кнопок действия:

Do = btP.Tag.ToString();
upDo();

Допишим пару процедур для нашего удобства:

private void upDo()
{
	Num = this.txtEnNum.Text;
	if (!checkMem())
	{
		return;
	}
	Num = "";
	this.txtEnNum.Text = Num;
}

Создадим две функцию проверки. Одну для вводимого числа, другую для запоминаемого:

private bool checkEn()
{
	try
	{
		mC._enterNum = Convert.ToSingle(Num);
	}
	catch(System.Exception errAll)
	{
		MessageBox.Show("Значение числа введено неккоректно");
	return false;
	}
	return true;
}
private bool checkMem()
{
	try
	{
		mC._memNum = Convert.ToSingle(Num);
	}
	catch (System.Exception errAll)
	{
		MessageBox.Show("Значение числа введено неккоректно");
		return false;
	}
	return true;
}

Дадим действие для двух процедур. Первая для расчета, другая для очистки:.

private void go()
{
	if (!testEn())
	{
		return;
	}
	this.txtEnNum.Text = mC.dois(Do).ToString();
	clear();
}
private void clear()
{
	Num = "";
	mC.clearMem();
}

Для кнопки равно:

private void button12_Click(object sender, EventArgs e)
{
	Num = this.txtEnNum.Text;
	go();
}

Все действия со стороны формы выполнены, теперь необходимо заполнить все функции смыслом. Начем с функции, которая распределяет действия, воспользовавшись конструкцией выбора «if else if»:

public float dois(string Do)
{
	float val=0;
	memNum = enterNum;
	if (Do == "+")
	{
		val = plus();
	}
	else if (Do == "-")
	{
		val = minus();
	}
	else if (Do == "/")
	{
		val = divide();
	}
	else if (Do == "*")
	{
		val = multiply();
	}
	else
	{
		val = 0;
	}
	memNum = val;
	return val;
}

Доделаем функции действия и переключатель для действий:

public float dois(string Do)
{
	float val=0;
	if (Do == "+")
	{
		val = plus();
	}
	else if (Do == "-")
	{
		val = minus();
	}
	else if (Do == "/")
	{
		val = divide();
	}
	else if (Do == "*")
	{
		val = multiply();
	}
	else
	{
		val = 0;
	}
	return val;
}
private float plus()
{
	float val = 0;
	val = memNum + enterNum;
	return val;
}
private float minus()
{
	float val = 0;
	val = memNum - enterNum;
	return val;
}
private float divide()
{
	float val = 0;
	val = memNum / enterNum;
	return val;
}
private float multiply()
{
	float val = 0;
	val = memNum * enterNum;
	return val;
}
public void clearMem()
{
	memNum = 0;
}

Теперь можно запустить проект и проверить его на работоспособность. У нас получился самый простенький калькулятор. В следующих статьях мы его немного усложним работая уже с имеющиейся основой.

Доброго дня