Как написать простой калькулятор ч.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; }
Теперь можно запустить проект и проверить его на работоспособность. У нас получился самый простенький калькулятор. В следующих статьях мы его немного усложним работая уже с имеющиейся основой.
Доброго дня