Разработка программы "Цифровой калькулятор"

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Содержание

  • Введение
  • Руководство пользователя
  • Листинг программы
  • Алгоритмы
  • Тестовые примеры
  • Источники

Введение

1) Объектно-ориентированный подход.

Объектно-ориентированное программирование или ООП (object-oriented programming) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из который является реализацией определенного типа, использующая механизм пересылки сообщений и классы, организованные в иерархию наследования.

Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности, т. н. объекта.

Объект — сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции исходного кода на выполнение).

Инкапсуляция

Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т.е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.

Сокрытие данных

Сокрытие данных — неотделимая часть ООП, управляющая областями видимости. Является логическим продолжением инкапсуляции. Целью сокрытия является невозможность для пользователя узнать или испортить внутреннее состояние объекта.

Наследование

Наследованием называется возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (прародителя, иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы. Набор классов, связанных отношением наследования, называют иерархией. Наследование призвано отобразить такое свойство реального мира, как иерархичность.

Полиморфизм

Полиморфизмом называют явление, при котором функции (методу) с одним и тем же именем соответствует разный программный код (полиморфный код) в зависимости от того, объект какого класса используется при вызове данного метода. Полиморфизм обеспечивается тем, что в классе-потомке изменяют реализацию метода класса-предка с обязательным сохранением сигнатуры метода. Это обеспечивает сохранение неизменным интерфейса класса-предка и позволяет осуществить связывание имени метода в коде с разными классами — из объекта какого класса осуществляется вызов, из того класса и берётся метод с данным именем. Такой механизм называется динамическим (или поздним) связыванием — в отличие от статического (раннего) связывания, осуществляемого на этапе компиляции.

2) Язык программирования Java.

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems. Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры.

Основные возможности

· автоматическое управление памятью;

· расширенные возможности обработки исключительных ситуаций;

· богатый набор средств фильтрации ввода/вывода;

· набор стандартных коллекций, таких как массив, список, стек и т. п. ;

· наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI);

· наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;

· встроенные в язык средства создания многопоточных приложений;

· унифицированный доступ к базам данных:

· на уровне отдельных SQL-запросов — на основе JDBC, SQLJ;

· на уровне концепции объектов, обладающих способностью к хранению в базе данных — на основе Java Data Objects (англ.) и Java Persistence API (англ.);

· поддержка шаблонов (начиная с версии 1. 5);

· параллельное выполнение программ.

Классификация платформ Java

Внутри Java существуют несколько основных семейств технологий:

· J2EE или Java EE (начиная с v1. 5) — Java Enterprise Edition, для создания программного обеспечения уровня предприятия;

· J2SE или Java SE (начиная с v1. 5) — Java Standard Edition, для создания пользовательских приложений, в первую очередь — для настольных систем;

· J2ME, Java ME или Java Micro Edition, для использования в устройствах, ограниченных по вычислительной мощности, в том числе мобильных телефонах, КПК, встроенных системах;

· Java Card для использования в устройствах без собственного человекомашинного интерфейса, например в смарт-картах.

Самыми популярными считаются серверные технологии семейства J2EE.

Последним релизом является версия 1. 6, в которой было произведено улучшение системы безопасности, улучшение поддержки XML, а также добавлена поддержка скриптового языка JavaScript на основе механизма Mozilla Rhino, улучшена интеграция с рабочим столом, добавлены некоторые новые возможности в создании графических интерфейсов.

Формулировка задачи:

Создание программы, обеспечивающей вычисление арифметических выражений. Основные функции: сложение, вычитание, умножение, деление, sin (), cos (), exp (), sqr (), sqrt (). При разработке использовать объектно-ориентированный подход.

Руководство пользователя

Содержание:

1. Управление

Осуществляется только манипулятором мышь.

2. Меню

Меню программы активируется нажатием на кнопку «Файл». Далее мышкой можно выбрать соответствующие подменю: Информация о калькуляторе (где можно посмотреть версию и разработчика и выход (с помощью которого можно завершить работу приложения)

Функции:

· Основные (Элементарные)

· Математические

· Тригонометрические

Основные (Элементарные):

§ Вычитание (-)

§ Сложение (+)

§ Деление (/)

§ Умножение (*)

Математические:

§ Вычисление числа обратного x (1/x)

§ Вычисление квадрата числа x (x2)

§ Извлечение квадратного корня из x ()

§ Вычисление процента (X%)

§ Вычисление натурального логарифма (Ln (x))

§ Возведение x в любую степень (X^Y)

§ Вычисление экспоненты числа x (Exp (x))

§ Вычисление факториала числа x (n!;! =x)

§ Вычисление y процентов от числа x (Y%X)

§ Вычисление куба числа x (x3)

§ Возведение 10 в степень числа x (10^x)

Тригонометрические:

1) Обычные:

§ Вычисление синуса числа x (sin (x))

§ Вычисление косинуса числа x (cos (x))

§ Вычисление тангенса числа x (tan (x))

§ Вычисление котангенса числа x (ctg (x))

2) Обратные:

§ Вычисление арксинуса числа x (Asin (x))

§ Вычисление арккосинуса числа x (Acos (x))

§ Вычисление арктангенса числа x (Atan (x))

4. Дополнительные замечания:

Перед использованием математических функций следует удостовериться, что калькулятор завершил предыдущую операцию. Для этого нужно предварительно несколько раз щёлкнуть мышкой по выбранной кнопке, реализующей нужную математическую функцию.

Листинг программы

import javax. swing. *; // импортируем пакет swing для работы с графическим интерфейсом (для всех ОС)

import java. awt. *; // импортируем пакет awt для работы с графическим интерфейсом (для определённых ОС)

import java. awt. event. *; // импортируем класс event для обработки событий

import java. math. *; // импортируем пакет math для работы с математическими функциями

public class Калькулятор // создаём новый класс Калькулятор

{

public static void main (String [] args) // метод main позволяет начать работу в консольном окне

{

System. out. println («It is program calculator (Version 1; Developer — Dyakonov A. V.)»); // метод println выводит на консольное окно строку в ()

MyFrame frame=new MyFrame (); // создаём экземпляр класса MyFrame

frame. setBackground (Color. blue); // задаём цвет фона

frame. setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE); // метод setDefaultCloseOperation завершает работу приложения

frame. show (); // метод show рисует наш frame

}

}

class MyFrame extends JFrame // создаём новый класс MyFrame на основе класса JFrame

{

public MyFrame () // указываем конструктор класса MyFrame

{

setTitle («Калькулятор»); // задаём имя заголовка

Container pane= getContentPane (); // группируем компоненты

MyPanel panel= new MyPanel (); // создаём экземпляр класса MyPanel

pane. add (panel); // добавляем компоненту panal

setSize (350,350); // задаём размер фрэйма

JMenu fileMenu=new JMenu («Файл»); // создаём экземпляр класса JMenu

JMenuItem newItem=fileMenu. add

(«Информация о калькуляторе: Версия 1; Разработчик — Дьяконов А. В. «);

fileMenu. addSeparator ();

JMenuItem exitItem=fileMenu. add (new AbstractAction («Выход»)

{

public void actionPerformed (ActionEvent event)

{System. exit (0);

}

});

JMenuBar menuBar=new JMenuBar ();

setJMenuBar (menuBar);

menuBar. add (fileMenu);

}

}

class MyPanel extends JPanel // создаём новый класс MyPanel на основе класса JPanel

{

private JLabel display; // создаём поле JLabel для компоненты display (текстовое поле)

private JPanel panel; // создаём поле JPanel для компоненты panel

private boolean start; // создаём переменную start типа boolean

private String lastCommand; // создаём переменную, хранящую значение последней введённой команды

private double result; // создаём переменную для хранения результата

public MyPanel () // указываем конструктор класса MyPanel

{

setLayout (new BorderLayout ()); // разместим компоненту текстового типа (компонента BorderLayout () делит панель на две части)

start=true; // проинициализируем переменную start

result=0;

lastCommand="=";

display=new JLabel («0»); // создаём компоненту display

add (display, BorderLayout. NORTH); // добавляем объект display на frame

display. setBackground (Color. green);

panel=new JPanel (); // проинициализируем компоненту panel

panel. setLayout (new GridLayout (10,4)); // задаём сеточную компановку

// добавим все необходимые кнопки на окно нашего калькулятора

addButton («7», 0);

addButton («8», 0);

addButton («9», 0);

addButton («/», 1);

addButton («4», 0);

addButton («5», 0);

addButton («6», 0);

addButton («*», 1);

addButton («1», 0);

addButton («2», 0);

addButton («3», 0);

addButton («-», 1);

addButton («0», 0);

addButton («. «, 0);

addButton («=», 1);

addButton («+», 1);

addButton («X2», 1);

addButton («sqrt», 1);

addButton («1/x», 1);

addButton («%», 1);

addButton («sin», 1);

addButton («cos», 1);

addButton («tan», 1);

addButton («ctg», 1);

addButton («X^Any», 1);

addButton («Asin», 1);

addButton («Acos», 1);

addButton («Atan», 1);

addButton («X3», 1);

addButton («LN», 1);

addButton («Exp», 1);

addButton («n!», 1);

addButton («y%x», 1);

addButton («10^x», 1);

add (panel, BorderLayout. CENTER); // добавим нашу компоненту (область) в середину

}

private void addButton (String s, int i) // создадим метод addButton (метод addButton создаёт кнопки)

{

JButton button=new JButton (s); // создаём объект button (кнопку) класса JButton

button. setBackground (Color. white); // задаём цвет кнопки

button. setForeground (Color. black); // задаём цвет названия кнопки

if (i==0) // если i=0, тогда выполняется метод addActionListener (new InsertAction ()) кнопки button, добавляющий новый объект класса InsertAction

{

button. addActionListener (new InsertAction ()); } // обработка нажатия кнопки передаётся классу InsertAction (), заполняется переменная input

if (i==1) // если i=1, тогда выполняется метод addActionListener кнопки button

{

button. addActionListener (new CommandAction ());

}

panel. add (button); // добавляем кнопку button на компоненту (область) panel

}

private class InsertAction implements ActionListener // создадим класс InsertAction, поддерживающий интерфейс ActionListener (обрабатывает нажатие на клавиши 1,2,3,4 и т. д.)

{

public void actionPerformed (ActionEvent event) // напишем метод actionPerformed как это требует ActionListener

{

String input=event. getActionCommand (); // создадим переменную, хранящую введённую команду (getActionCommand () — метод с помощью которого можно получить значение нажатой кнопки)

if (start)

{display. setText (««); // присвоим переменной display значение пустой стороки

start=false; }

if (! input. equals («. «) || (display. getText (). lastIndexOf («. «) < 0)) // проверка на вторую точку

display. setText (display. getText () +input); // присвоим переменной display значение предыдущей и следующей строки

}

}

private class CommandAction implements ActionListener // создадим класс CommandAction, поддерживающий интерфейс ActionListener (обрабатывает нажатие на клавиши действия)

{

public void actionPerformed (ActionEvent event) // напишем метод actionPerformed как это требует ActionListener

{

String command=event. getActionCommand (); (); // создадим переменную, хранящую введённую команду (getActionCommand () — метод с помощью которого можно получить значение нажатой кнопки)

if (start)

{

if (command. equals («-»)) // если переменная command содержит знак минус

{display. setText (command); // присвоим переменной display значение переменной command

start=false;

}

else lastCommand=command; // иначе присвоим переменной lastCommand значение переменной command

{if (! display. getText (). equals («-»)) // выполняем метод calculate, если display. getText () не содержит знак «-»

calculate (Double. parseDouble (display. getText ())); // иначе метод calculate проведёт все расчёты; передаём методу calculate действительное значение, получаемое преобразованием строки в число (Double. parseDouble)

lastCommand=command; // присвоим переменной lastCommand значение переменной command

start=true;

}

}

}

public void calculate (double x) // создадим (опишем) метод calculate

{double y=Math. toRadians (x); // переводим радианы в градусы

if (lastCommand. equals («+»)) result+=x; //

else if (lastCommand. equals («-»)) result-=x;

else if (lastCommand. equals («*»)) result*=x;

else if (lastCommand. equals («/»)) result/=x;

else if (lastCommand. equals («X2»)) result=Math. pow (x, 2);

else if (lastCommand. equals («1/x»)) result=1/x;

else if (lastCommand. equals («%»)) result=x/100;

else if (lastCommand. equals («X3»)) result=Math. pow (x, 3);

else if (lastCommand. equals («sqrt»)) result=Math. sqrt (x);

else if (lastCommand. equals («sin»)) result=Math. sin (y);

else if (lastCommand. equals («cos»))

{ if (x==90) result=0; else

result=Math. cos (y);

}

else if (lastCommand. equals («tan»)) result=Math. tan (y);

else if (lastCommand. equals («=»)) result=x;

else if (lastCommand. equals («ctg»)) result=1/ (Math. tan (y));

else if (lastCommand. equals («Asin»)) result= (180/Math. PI) * (Math. atan (x/Math. sqrt (1 — x*x)));

else if (lastCommand. equals («Acos»))

result= (180/Math. PI) * ((Math. PI / 2 — (Math. atan (x/Math. sqrt (1 — x*x)))));

else if (lastCommand. equals («Atan»)) result= (180/Math. PI) * (Math. atan (x));

else if (lastCommand. equals («LN»)) result=Math. log (x);

else if (lastCommand. equals («Log»)) result=Math. log (x);

else if (lastCommand. equals («10^x»))

{double S=1;

for (double u=1; u< =x; u++)

S=10*S;

result=S;

}

else if (lastCommand. equals («Exp»)) result=Math. exp (x);

else if (lastCommand. equals («X^Any»))

{

String ss=JOptionPane. showInputDialog

(«Выберете степень»);

int ii=Integer. parseInt (ss);

result=Math. exp (ii* (Math. log (x)));

result=Math. round (result*100) /100;

}else if (lastCommand. equals («n!»))

{ double P=1;

for (int t=1; t< =x; t++)

P=t*P;

result=P;

} else if (lastCommand. equals («y%x»))

{

String qq=JOptionPane. showInputDialog

(«Выберете желаемый процент от числа»);

double ww=Double. parseDouble (qq);

result=x*ww/100;

}

display. setText (««+result); // присвоим значение result переменной display для вывода на экран

}

}

руководство пользователь программа калькулятор

Алгоритмы

Алгоритм № 1.

Алгоритм № 2.

Алгоритм № 3.

Тестовые примеры

1) Скриншот программы.

2) Вычитание. (12−5=7)

3) Возведение x в любую степень (X^Y). (25=32)

4) Вычисление синуса числа x (sin (x)) (sin (90) =1)

5) Вычисление y процентов от числа x (Y%X) (11% от 300=33)

6) Вычисление факториала числа x (x!; x={N}) (7! =5040)

Источники

1. http: //ru. wikipedia. org/wiki/Java#

2. http: //ru. wikipedia. org/wiki/ Объектно-ориентированное программирование.

3. Видео уроки Java от Teach Pro (http: //videoshkola. com/video-uroki-programmirovaniya/video-uroki-java. htm)

4. http: //www. ctc. msiu. ru/materials/Book/node82. html

ПоказатьСвернуть
Заполнить форму текущей работой