79 / 100

ماشین حساب c# پیشرفته

ماشین حساب ساده با قابلیت عملکرد چند عدد پشت هم مشابه ویندوز و نمایش محاسبات پشت سر هم

کد آماده ماشین حساب با C#
کد آماده ماشین حساب با C# سی شارپ وژوال بیسک

برای ساخت این ماشین حساب از ویژوال استادیو 2017 استفاده شده است و نت فرم ورک 4.6 اگه اشتباه نکرده باشیم بعد از ساخت دیزاین برای ساخت دستور کلیک کافیه دوبار بری دکمه یا button کلیک کنید تا رویداد کلیک آن ساخته شود به زودی اموزش های دیگر نیز ساخته می شود هم چنین اموزش های ودئویی

نمونه ای از کد کلیک

    private void btnNum1_Click(object sender, EventArgs e)
    {
        addition(lbltxt.Text, btnNum1.Text);
    }

addition یک فانکشن برای کم کردن کد ها می باشد

در پایین کد های این تابع را می بینید

نمایش در نمایش گراصلی

    private void addition(string init1 , string init2)
    {
        if (init1 == "0" && init2 != "." || ejraAmalgar == "ok")
        {
            lbltxt.Text =  init2;
        }
        else if (init1 == "0" && init2 == ".")
        {
            lbltxt.Text = "0" + init2;
        }
        else
        {
            lbltxt.Text = init1 + init2;
        }
        ejraAmalgar = "no";

        checkAmalgarChenge = true;
    }

شرط اول : چک می کند اگر ورودی صفر و ممیز نبود یا دکمه مساوی زده بودید مقدار جدید فقط تایپ شود

شرط دوم : اگر مقدار صفر و کلید ممیز زده شد صفر و ممیز چاپ شود

شرط سوم : اگه این ها نبود دو عدد به هم بچسبند مثلا 23

عملیات مرتبط با دکمه مساوی

    private void btnMosavi_Click(object sender, EventArgs e)
    {
        funcShowProgram("=", Convert.ToDouble(lbltxt.Text));

        if(check == "+")
        {
            lbltxt.Text = "" + (inputSum + Convert.ToDouble(lbltxt.Text));
        }
        else if(check == "*"){
            lbltxt.Text = "" + (inputSum * Convert.ToDouble(lbltxt.Text));
        }
        else if (check == "/")
        {
            lbltxt.Text = "" + (inputSum / Convert.ToDouble(lbltxt.Text));
        }
        else if (check == "-")
        {
            lbltxt.Text = "" + (inputSum - Convert.ToDouble(lbltxt.Text));
        }

        inputsOld = Convert.ToDouble(lbltxt.Text);
        checkAmalgarChenge = true;
        inputSum = 0;

    }

این فانکشن تغریبا مشخص هست برای تبدیل مقدار عددی به رشته از “” + استفاده شده

برای تبدیل مقدار رشته یا string از Convert.ToDouble استفاده شده است

inputsOld برای مقادیر قبلی یعنی 2+4 = 6 که مقدار 6 درون این متغییر ذخیره می شود استفاده شده

checkAmalgarChenge یک متغییر بولین و برای چک کردن این که ایا دکمه های عملگر تغییر کرده یا خیر به عنوان مثال (+ = – * /) اگر مثلا اول + بزنید بعد نظرتون عوض بشه و – را بزنید عملیات مربوط به + کار نمی کند

inputSum مقدار عملیات دور شته مثال جمع را در خود نگه می دارد

عبارت پایین یکی از عملگر ها را نشان میدهد و بقیه عملگر ها نیز به همین صورت می باشد

عملیات مربوط به عملگر

    private void btnPlus_Click(object sender, EventArgs e)
    {
        if (checkAmalgarChenge == true)
        {
            mohasebe("+");
        }
        funcShowProgram("+", inputsOld);
        check = "+";
    }

در صورتی که عملگر برابر با صحیح بود محاصبه انجام می شود

بعد از انجام محاصبه اطلاعات به funcShowProgram ارسال می شود تا در صفحه نمایش داده شود

check عملگر چک مشخص می کند که عملیات حاظر چه چیزی هست

در پایین به علیات مر بوت به نمایش محاسبات می رسیم به طور مثلا 2+3+2=

نمایش اطلاعت نمایشگر دوم

    private void funcShowProgram(string amalgar,double inputsOlds)
    {
        ejraAmalgar = "ok";

        if (oldProgram.Text.Contains("=")) {
            oldProgram.Text = "";
        }

        if(oldProgram.Text == "")
        {
            oldProgram.Text = inputsOld + " " + amalgar;
        }
        else if(checkAmalgarChenge == false)
        {
            oldProgram.Text = oldProgram.Text.Substring(0, oldProgram.Text.Length - 2);
            oldProgram.Text = oldProgram.Text + " " + amalgar;
        }
        else
        {
            oldProgram.Text = oldProgram.Text + " " + inputsOlds + " " + amalgar ;
        }



        checkAmalgarChenge = false;

    }

ejraAmalgar یعنی یکی از کلید های (+ = – * / ) کلیک شده است

شرط اول : اگر دکمه مساوی داخل محاصبات یافت شد اطلاعات نمایش گر پاک شود

Contains یک جستجو کننده می باشد

شرط دوم : اگر هیچ عبارتی در قسمت بالایی نمایشگر نبود مقدار وارد شده را با عملگر ها نمایش بده

در غیر این صورت اگر عملگر برابر با مقدار false بود یعنی اول دکمه – و بعد دکمه + زده شد بیا اخرین مقدار که – بود را پاک کن و + را ضافه کن

و در غیر این صورت مقدار قبلی نمایش داده شده را با مقدار جدید جمع و نمایش بده مثلا 25 + 3

در هر صورت در اخر تغییر عملگر را مساوی با false قرار بده چون مطمعن هستیم تغییر عملگر تمام شده

خلاصه متغییر محاصبه

    private void mohasebe(string avalcheck)
    {

        inputsOld = Convert.ToDouble(lbltxt.Text);
        if(check == "") { check = avalcheck; }
        if (check == "+")
        {
            if (inputSum == 0)
            {
                lbltxt.Text = "" + (inputsOld);
                inputSum = Convert.ToDouble(lbltxt.Text);
            }
            else
            {
                lbltxt.Text = "" + (inputSum + Convert.ToDouble(lbltxt.Text));
                inputSum = Convert.ToDouble(lbltxt.Text);
            }
        }

در بالا تر ما دستور محاصبه را صدا کردیم اینجا بیشتر توضیح خواهیم داد

inputsOld نگه دانده مقدار قبل از دمه های عملگر می باشد (+ – * / … )

شرط اول : بررسی می کند اگه چک خالی فرستاده شد دستور ازسالی بخواند

mohasebe(“+”);

شرط دوم : چک می کند کدام عملگر انجام شده است

شرط سوم داخل شرط دوم چک می کند اگر هیچ جمعی در قبل صورت نگرفته در نمایش گر اصلی مقدار عدد را نشان بده و در مقدار جمع ذخیره کن

در غیر این صورت مقدار قبلی را با مقدار جدید جمع کن به صورت مثال

مقدا جدید 2

مقدار قدیم 5+1

که می شود 8

پاک کردن اطلاعات

    private void btnClr_Click(object sender, EventArgs e)
    {
        oldProgram.Text = "";
        inputsOld = 0;
        inputSum = 0;
        lbltxt.Text = "0";
    }

در بالا تمامی مقدار ها را پاک می کنیم

نمایش یک مسیج باکس

    private void btnSave_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Not Work");
    }

به طور مثال ما در ماشین حساب دکمه سیو را کد نویسی نکرده ایم می توانیم از این دستور استفاده نماییم

MessageBox.Show

اگر نیاز به استفاده از دکمه های کیبرد در ماشین حساب داشتید می تواند از کد زیر استفاده نمایید

استفاده از کیبرد ویندوز

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        Console.WriteLine(keyData);

        if (keyData == (Keys.NumPad1))
        {
            btnNum1.PerformClick();
            animation(btnNum1);
            return true;

Console.WriteLine این مقدار در کنسور ویژوال استادیو مقداری که نیاز داریم را چاپ می کنید برای دیباگ بهترن راه است

keyData دکمه هایی که زده شده را مشخص می کند

PerformClick دستور صدا کردن کلیک مورد نظر می باشد

animation یک فانکشن برای تغییر رنگ استفاده شده است

فانکشن تغییر رنگ

    private void animation(Button btn)
    {
        Color save = btn.BackColor;
        btn.BackColor = Color.BlueViolet;
        Task.Delay(300).Wait();
        btn.BackColor = save;
    }


Task.Delay باعث تغییر انداختن در شرط ما می شود

دانلود پروژه

دانلود فایل دانلود فایل آموزش پروژه ماشین حساب C# پیشرفته این پروژه