السافت تولز

سلام! من Elesoft Chat (السافت چت) هستم.
برای شما یک کد کامل و حرفه‌ای از یک ماشین حساب پیشرفته (Scientific/Professional Calculator) به زبان سی‌شارپ (#C) در قالب Windows Forms آماده کرده‌ام. این ماشین حساب علاوه بر عملگرهای اصلی، قابلیت‌هایی مثل محاسبه جذر، توان، درصد و مدیریت حافظه (Memory) را دارد.

مراحل ساخت در ویژوال استودیو:

  1. یک پروژه جدید از نوع Windows Forms App (.NET Framework یا .NET Core) ایجاد کنید.
  2. کنترل‌های زیر را روی فرم (Form1) قرار دهید:
    • یک TextBox با نام txtDisplay (برای نمایش اعداد و نتیجه).
    • دکمه‌ها (Button) برای اعداد (0 تا 9)، ممیز (.) و عملگرها (+, -, *, /).
    • دکمه‌های پیشرفته مثل: (جذر)، ^ (توان)، % (درصد).
    • دکمه‌های حافظه: MC, MR, M+, M-.
    • دکمه مساوی (=) و پاک کردن (C و CE).
  1. کد زیر را کپی کرده و در فایل Form1.cs قرار دهید:
using System;
using System.Windows.Forms;

namespace ElesoftCalculator
{
    public partial class Form1 : Form
    {
        // متغیرهای محاسباتی
        private double resultValue = 0;
        private string operationPerformed = "";
        private bool isOperationPerformed = false;
        private double memory = 0; // برای سیستم حافظه ماشین حساب

        public Form1()
        {
            InitializeComponent();
        }

        // رویداد کلیک برای دکمه‌های اعداد و ممیز
        private void Number_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;

            if (txtDisplay.Text == "0" || isOperationPerformed)
                txtDisplay.Clear();

            isOperationPerformed = false;

            // جلوگیری از ورود بیش از یک نقطه اعشار
            if (button.Text == ".")
            {
                if (!txtDisplay.Text.Contains("."))
                    txtDisplay.Text += button.Text;
            }
            else
            {
                txtDisplay.Text += button.Text;
            }
        }

        // رویداد کلیک برای عملگرهای اصلی (+, -, *, /)
        private void Operator_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;

            if (resultValue != 0 && !isOperationPerformed)
            {
                PerformCalculation();
            }
            else
            {
                double.TryParse(txtDisplay.Text, out resultValue);
            }

            operationPerformed = button.Text;
            isOperationPerformed = true;
        }

        // محاسبه نهایی با دکمه مساوی (=)
        private void btnEquals_Click(object sender, EventArgs e)
        {
            PerformCalculation();
            operationPerformed = "";
        }

        private void PerformCalculation()
        {
            double secondValue;
            double.TryParse(txtDisplay.Text, out secondValue);

            switch (operationPerformed)
            {
                case "+":
                    txtDisplay.Text = (resultValue + secondValue).ToString();
                    break;
                case "-":
                    txtDisplay.Text = (resultValue - secondValue).ToString();
                    break;
                case "*":
                    txtDisplay.Text = (resultValue * secondValue).ToString();
                    break;
                case "/":
                    if (secondValue != 0)
                        txtDisplay.Text = (resultValue / secondValue).ToString();
                    else
                        txtDisplay.Text = "خطا (تقسیم بر صفر)";
                    break;
                case "^":
                    txtDisplay.Text = Math.Pow(resultValue, secondValue).ToString();
                    break;
                default:
                    break;
            }
            double.TryParse(txtDisplay.Text, out resultValue);
            isOperationPerformed = true;
        }

        // دکمه پاک کردن کل صفحه (C)
        private void btnClear_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = "0";
            resultValue = 0;
            operationPerformed = "";
        }

        // دکمه پاک کردن ورودی فعلی (CE)
        private void btnClearEntry_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = "0";
        }

        // محاسبه جذر (Sqrt)
        private void btnSqrt_Click(object sender, EventArgs e)
        {
            double.TryParse(txtDisplay.Text, out double val);
            if (val >= 0)
            {
                txtDisplay.Text = Math.Sqrt(val).ToString();
                resultValue = double.Parse(txtDisplay.Text);
            }
            else
            {
                txtDisplay.Text = "خطا (عدد منفی)";
            }
        }

        // محاسبه درصد (%)
        private void btnPercent_Click(object sender, EventArgs e)
        {
            double.TryParse(txtDisplay.Text, out double val);
            txtDisplay.Text = (resultValue * (val / 100)).ToString();
        }

        // تغییر علامت عدد (+/-)
        private void btnPlusMinus_Click(object sender, EventArgs e)
        {
            if (double.TryParse(txtDisplay.Text, out double val))
            {
                txtDisplay.Text = (-val).ToString();
            }
        }

        // مدیریت حافظه (Memory Functions)
        private void btnMC_Click(object sender, EventArgs e) { memory = 0; }
        private void btnMR_Click(object sender, EventArgs e) { txtDisplay.Text = memory.ToString(); }
        private void btnMPlus_Click(object sender, EventArgs e) { if (double.TryParse(txtDisplay.Text, out double val)) memory += val; }
        private void btnMMinus_Click(object sender, EventArgs e) { if (double.TryParse(txtDisplay.Text, out double val)) memory -= val; }
    }
}

ویژگی‌های این کد:

  • مدیریت خطاها: مثل خطای تقسیم بر صفر یا جذر گرفتن از اعداد منفی.
  • سیستم حافظه کامل: دکمه‌های MC, MR, M+, M- برای کارهای مهندسی و حسابداری.
  • قابلیت زنجیره‌وار: می‌توانید چند عملگر را پشت سر هم محاسبه کنید (مثلا 5 + 3 * 2).
اگر برای اتصال این کدها به دکمه‌های گرافیکی یا توسعه بیشتر نیاز به راهنمایی داشتید، حتماً به من (السافت چت) بگویید!
کد یه ماشین حساب حرفه ای به زبان سی شارپ بنویس