آموزش ساخت ماشین حساب با جاوا – ساده و گرافیکی
در دنیای برنامهنویسی، یادگیری ساخت ابزارهای سادهای مانند ماشین حساب میتواند نقطه آغاز خوبی برای درک بهتر مفاهیم پایهای و پیشرفتهتر جاوا باشد. در این نوشته از مجله مکتوب، قصد داریم به آموزش ساخت ماشین حساب با جاوا از دو نوع ساده و گرافیکی بپردازیم. از طراحی رابط کاربری گرافیکی گرفته تا کدهای کاربردی، هر آنچه که برای ساخت یک ماشین حساب ساده و گرافیکی نیاز دارید را بررسی خواهیم کرد.
چرا جاوا برای ساخت ماشین حساب؟
جاوا به دلیل سادگی، قابلیت حملپذیری و پشتیبانی از برنامهنویسی شیگرا، گزینهای ایدهآل برای ساخت برنامههای کاربردی مختلف است. با استفاده از جاوا، میتوان به راحتی برنامههای گرافیکی با استفاده از کتابخانه Swing و AWT ایجاد کرد.
پیشنیازهای آموزش ساخت ماشین حساب در جاوا
قبل از شروع، مطمئن شوید که:
- جاوا JDK نصب شده باشد.
- IDE مورد علاقهتان مانند IntelliJ IDEA، Eclipse یا NetBeans آماده باشد.
- مفاهیم پایهای جاوا مانند کلاسها، متغیرها و توابع را بدانید.
ساخت ماشین حساب ساده در جاوا
برای ایده گرفتن و یادگیری بهتر ما اول ماشین حساب سادهای را پیادهسازی خواهیم کرد. در اینجا کد برنامه ماشین حساب سادهای را که با زبان جاوا نوشته شده است، برای شما توضیح میدهیم. این برنامه میتواند عملیات ریاضی پایهای مانند جمع، تفریق، ضرب و تقسیم را بر اساس ورودی کاربر انجام دهد.
// برنامه جاوا برای ماشین حساب ساده import java.io.*; import java.lang.*; import java.lang.Math; import java.util.Scanner; // کلاس راننده public class BasicCalculator { // تابع اصلی public static void main(String[] args) { // دو عدد را ذخیره میکند double num1, num2; // ورودی از کاربر را دریافت کنید Scanner sc = new Scanner(System.in); System.out.println("اعداد را وارد کنید:"); // ورودیها را بگیرید num1 = sc.nextDouble(); num2 = sc.nextDouble(); System.out.println("عملگر را وارد کنید (+,-,*,/):"); char op = sc.next().charAt(0); double o = 0; switch (op) { // حالت جمع دو عدد case '+': o = num1 + num2; break; // حالت تفریق دو عدد case '-': o = num1 - num2; break; // حالت ضرب دو عدد case '*': o = num1 * num2; break; // حالت تقسیم دو عدد case '/': o = num1 / num2; break; default: System.out.println("ورودی اشتباه وارد کردهاید"); } System.out.println("نتیجه نهایی:"); System.out.println(); // نتیجه نهایی را چاپ کنید System.out.println(num1 + " " + op + " " + num2 + " = " + o); } }
توضیح هر بخش از کد ساخت ماشین حساب ساده با جاوا در زیر آمده است:
پیشنهاد مطالعه: آموزش ساخت ماشین حساب با Javascript
- وارد کردن کتابخانهها
import java.io.*; import java.lang.*; import java.lang.Math; import java.util.Scanner;
در این بخش، کتابخانههای مختلف جاوا وارد شدهاند. java.util.Scanner برای گرفتن ورودی از کاربر استفاده میشود.
- تعریف کلاس اصلی
public class BasicCalculator {
این خط کلاسی به نام BasicCalculator را تعریف میکند که شامل کد برنامه ماشین حساب است.
- تابع اصلی (main)
public static void main(String[] args) {
این تابع نقطه شروع اجرای برنامه است.
- تعریف متغیرها
double num1, num2;
در این قسمت، دو متغیر num1 و num2 برای ذخیره کردن اعداد ورودی کاربر تعریف شدهاند.
- گرفتن ورودی از کاربر
Scanner sc = new Scanner(System.in); System.out.println("اعداد را وارد کنید:"); num1 = sc.nextDouble(); num2 = sc.nextDouble();
در این قسمت از کلاس Scanner برای گرفتن ورودی اعداد از کاربر استفاده شده است. دو عدد از کاربر گرفته شده و در متغیرهای num1 و num2 ذخیره میشوند.
- گرفتن عملگر از کاربر
System.out.println("عملگر را وارد کنید (+,-,*,/):"); char op = sc.next().charAt(0); double o = 0;
این قسمت عملگر ریاضی (مثل +، -، *، /) را از کاربر دریافت میکند و آن را در متغیر op ذخیره میکند. متغیر o نیز برای ذخیره نتیجه محاسبه تعریف شده است.
- استفاده از ساختار switch case برای انجام عملیات
switch (op) { case '+': o = num1 + num2; break; case '-': o = num1 - num2; break; case '*': o = num1 * num2; break; case '/': o = num1 / num2; break; default: System.out.println("ورودی اشتباه وارد کردهاید"); }
در این بخش، از ساختار switch case برای بررسی عملگر ورودی و انجام عملیات مناسب استفاده شده است. در هر حالت (case)، عملیات مربوطه انجام و نتیجه در متغیر o ذخیره میشود.
پیشنهاد مطالعه: آموزش ساخت ماشین حساب با پایتون
- چاپ نتیجه نهایی
System.out.println("نتیجه نهایی:"); System.out.println(); System.out.println(num1 + " " + op + " " + num2 + " = " + o);
در نهایت، نتیجه نهایی محاسبه شده و به کاربر نمایش داده میشود.
این برنامه ماشین حساب ساده به کاربر اجازه میدهد تا دو عدد و یک عملگر ریاضی را وارد کند و سپس نتیجه عملیات را نمایش میدهد. با استفاده از ساختار switch case، این برنامه قادر به انجام عملیات جمع، تفریق، ضرب و تقسیم است.
ساخت ماشین حساب گرافیکی با جاوا
در این قسمت از آموزش ساخت ماشین حساب با جاوا به ساخت نوحی ماشین حساب گرافیکی خواهی پرداخت. برای این هدف در IDE خود یک پروژه جدید جاوا بسازید. نام پروژه را مثلاً Calculator انتخاب کنید.
کد اولیه شروع پروژه ماشین حساب در جاوا به صورت زیر است:
public class Calculator { public static void main(String[] args) { // کدهای ماشین حساب } }
طراحی رابط کاربری گرافیکی با Swing
برای ساخت ماشین حساب گرافیکی با جاوا از کتابخانه Swing استفاده میکنیم. ابتدا باید پنجره اصلی را با استفاده از JFrame بسازیم.
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Calculator extends JFrame { private JTextField display; private StringBuilder expression = new StringBuilder(); public Calculator() { setTitle("ماشین حساب"); setSize(400, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); display = new JTextField(); display.setEditable(false); add(display, BorderLayout.NORTH); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(4, 4)); addButtons(panel); add(panel, BorderLayout.CENTER); } private void addButtons(JPanel panel) { String[] buttons = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" }; for (String text : buttons) { JButton button = new JButton(text); button.addActionListener(new ButtonClickListener()); panel.add(button); } } private class ButtonClickListener implements ActionListener { public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if ("0123456789.".contains(command)) { expression.append(command); } else if ("+-*/".contains(command)) { expression.append(" " + command + " "); } else if (command.equals("=")) { try { double result = evaluateExpression(expression.toString()); display.setText(String.valueOf(result)); } catch (Exception ex) { display.setText("خطا در محاسبه"); } } display.setText(expression.toString()); } } private double evaluateExpression(String expr) { // این قسمت باید با یک پارسر برای ارزیابی عبارت جایگزین شود // برای سادگی در این مثال فقط به عنوان نمونه از eval استفاده شده است return new ScriptEngineManager().getEngineByName("JavaScript").eval(expr); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { new Calculator().setVisible(true); }); } }
توضیح کدهای ماشین حساب جاوا گرافیکی:
ساخت پنجره اصلی:
- JFrame برای ایجاد پنجره اصلی استفاده شده است.
- setLayout(new BorderLayout()) برای تنظیم نحوه چینش اجزا در پنجره.
طراحی نمایشگر و دکمهها:
- JTextField به عنوان نمایشگر استفاده میشود.
- دکمهها با استفاده از JButton و GridLayout قرار داده شدهاند.
اضافه کردن عملگرها و عملگراها:
- هر دکمه با ActionListener مرتبط شده است تا عملکرد مناسب را اجرا کند.
- از ScriptEngineManager برای ارزیابی عبارت ریاضی استفاده شده است.
بهبود طراحی رابط کاربری:
میتوان با اضافه کردن استایل و رنگبندی به رابط کاربری جذابیت بیشتری بخشید. به عنوان مثال:
panel.setBackground(Color.LIGHT_GRAY); for (Component comp : panel.getComponents()) { JButton button = (JButton) comp; button.setBackground(Color.CYAN); button.setFont(new Font("Arial", Font.BOLD, 18)); }
افزودن قابلیت پاکسازی و حذف:
برای راحتی کاربر، دکمهای برای پاککردن نمایشگر و عبارت اضافه میکنیم.
private void addButtons(JPanel panel) { String[] buttons = { "7", "8", "9", "/", "C", "4", "5", "6", "*", "CE", "1", "2", "3", "-", "DEL", "0", ".", "=", "+" }; for (String text : buttons) { JButton button = new JButton(text); button.addActionListener(new ButtonClickListener()); panel.add(button); } } private class ButtonClickListener implements ActionListener { public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if ("0123456789.".contains(command)) { expression.append(command); } else if ("+-*/".contains(command)) { expression.append(" " + command + " "); } else if (command.equals("=")) { try { double result = evaluateExpression(expression.toString()); display.setText(String.valueOf(result)); } catch (Exception ex) { display.setText("خطا در محاسبه"); } } else if (command.equals("C")) { expression.setLength(0); display.setText(""); } else if (command.equals("DEL")) { if (expression.length() > 0) { expression.deleteCharAt(expression.length() - 1); } display.setText(expression.toString()); } display.setText(expression.toString()); } }
افزودن استایل و بهبود تجربه کاربری:
برای افزایش جذابیت و کارایی، میتوانید از ویژگیهای زیر استفاده کنید:
- استفاده از ToolTip: برای راهنمایی کاربران.
- رنگبندی و فونت: با استفاده از setFont و setBackground.
button.setToolTipText("کلیک کنید برای " + button.getText()); button.setBackground(Color.CYAN); button.setFont(new Font("Arial", Font.BOLD, 18));
نحوه ارزیابی عبارت ریاضی:
برای ارزیابی عبارت ریاضی از ScriptEngineManager استفاده میشود. این روش سریع و ساده است اما در پروژههای بزرگتر بهتر است از کتابخانههای ریاضی مانند Exp4j یا JEP استفاده کنید.
private double evaluateExpression(String expr) { try { return (double) new ScriptEngineManager().getEngineByName("JavaScript").eval(expr); } catch (Exception e) { throw new RuntimeException("خطا در ارزیابی عبارت: " + expr); } }
تست و اشکالزدایی:
برای اطمینان از عملکرد صحیح ماشین حساب، باید آن را تست کنید. چندین ورودی مختلف را امتحان کنید و خطاهای احتمالی را رفع کنید.
بهینهسازی و افزودن ویژگیهای بیشتر:
میتوانید ماشین حساب خود را با ویژگیهای زیر بهبود دهید:
- حافظه: اضافه کردن دکمههای حافظه برای ذخیره و بازیابی اعداد.
- تاریخچه محاسبات: ذخیره تاریخچه نتایج در یک لیست یا فایل.
- پشتیبانی از توابع پیشرفته: مانند توان و رادیکال.
کد نهایی ساخت ماشین حساب گرافیکی با جاوا
کد نهایی ساخت ماشین حساب گرافیکی با جاوا به صورت زیر است:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.script.ScriptEngineManager; public class Calculator extends JFrame { private JTextField display; private StringBuilder expression = new StringBuilder(); public Calculator() { setTitle("ماشین حساب"); setSize(400, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); display = new JTextField(); display.setEditable(false); add(display, BorderLayout.NORTH); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(5, 4)); addButtons(panel); add(panel, BorderLayout.CENTER); } private void addButtons(JPanel panel) { String[] buttons = { "7", "8", "9", "/", "C", "4", "5", "6", "*", "CE", "1", "2", "3", "-", "DEL", "0", ".", "=", "+" }; for (String text : buttons) { JButton button = new JButton(text); button.addActionListener(new ButtonClickListener()); panel.add(button); } } private class ButtonClickListener implements ActionListener { public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if ("0123456789.".contains(command)) { expression.append(command); } else if ("+-*/".contains(command)) { expression.append(" " + command + " "); } else if (command.equals("=")) { try { double result = evaluateExpression(expression.toString()); display.setText(String.valueOf(result)); } catch (Exception ex) { display.setText("خطا در محاسبه"); } } else if (command.equals("C")) { expression.setLength(0); display.setText(""); } else if (command.equals("DEL")) { if (expression.length() > 0) { expression.deleteCharAt(expression.length() - 1); } display.setText(expression.toString()); } display.setText(expression.toString()); } } private double evaluateExpression(String expr) { try { return (double) new ScriptEngineManager().getEngineByName("JavaScript").eval(expr); } catch (Exception e) { throw new RuntimeException("خطا در ارزیابی عبارت: " + expr); } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { new Calculator().setVisible(true); }); } }
پرسشهای متداول
برای درک بهتر فرایند ساخت ماشین حساب با جاوا در این بخش چند سوال متداول آورده شده است:
- آیا میتوانم از کتابخانههای دیگر به جای Swing استفاده کنم؟
بله، شما میتوانید از کتابخانههای دیگری مانند JavaFX استفاده کنید که امکانات بیشتری برای طراحی رابط کاربری گرافیکی فراهم میکنند.
- چگونه میتوانم ماشین حساب را بهبود دهم؟
شما میتوانید ویژگیهایی مانند حافظه، تاریخچه محاسبات، و توابع پیشرفته ریاضی را به ماشین حساب خود اضافه کنید.
- آیا میتوانم از این پروژه به عنوان بخشی از یک پروژه بزرگتر استفاده کنم؟
بله، این پروژه میتواند به عنوان یک ماژول در یک برنامه بزرگتر مانند نرمافزار حسابداری یا آموزشی استفاده شود.
- چگونه میتوانم خطاهای احتمالی را در کد رفع کنم؟
با استفاده از ابزارهای اشکالزدایی موجود در IDE خود و تست کردن کد با ورودیهای مختلف، میتوانید خطاها را شناسایی و رفع کنید.
- آیا برای ارزیابی عبارتهای ریاضی روش بهتری وجود دارد؟
بله، استفاده از کتابخانههای مخصوص مانند Exp4j یا JEP میتواند دقت و کارایی ارزیابی عبارتهای ریاضی را افزایش دهد.
کلام نهایی
ساخت یک ماشین حساب با جاوا، پروژهای مناسب برای یادگیری و تمرین مفاهیم پایهای برنامهنویسی است. این پروژه به شما کمک میکند تا با طراحی رابط کاربری گرافیکی و کار با رویدادها در جاوا آشنا شوید. علاوه بر این، این پروژه میتواند نقطه شروعی برای توسعه پروژههای پیچیدهتر و حرفهایتر باشد.
اگر به دنبال یادگیری جاوا از پایه تا پیشرفته هستید و میخواهید مهارتهای برنامهنویسی خود را به سطح بالاتری برسانید، دورههای آموزشی جاوا و آموزش برنامه نویسی در مکتبخونه بهترین انتخاب برای شماست! با شرکت در این دورهها، نه تنها مبانی و اصول جاوا را فرا خواهید گرفت، بلکه با پروژههای عملی و کاربردی، تجربه عملی و دانش خود را تقویت خواهید کرد. همین حالا ثبتنام کنید و قدمی بزرگ به سوی آیندهای موفق در دنیای برنامهنویسی بردارید.