Маленькая внеурочная заметка. Вызвана она, прежде всего, вопросами студентов, а зачем нам учить эту «джаву,» мы же будущие юристы, а не программисты. Где нам это пригодится?
Специально для группы ЮП-31 и публикую данную статью. Давайте рассмотрим простейший пример того, как же программирование может автоматизировать профессиональную деятельность юриста.
Вот такой случай: один человек просит у другого в долг деньги под расписку на определённое время. По окончании срока возвращать сумму не собирается, при этом является собственником гараж и автомобиля. Добросовестному заимодавцу ничего не остаётся, как подать исковое заявление в суд с тем, чтобы не деньгами, так автомобилем вернуть долг. Возникает спор имущественного характера, подлежащий оценки.
И тут, внезапно, заимодавец узнаёт, что подать исковое заявление — это не так просто. Нужно заплатить государственную пошлину. Эту самую пошлину впоследствии можно будет взыскать с должника, но чтобы подать иск изволь выложить здесь и сейчас. И если сумма займа была большой, то и пошлина будет не маленькой.
Размеры государственной пошлины по делам, рассматриваемым Верховным Судом Российской Федерации, судами общей юрисдикции, мировыми судьями регламентируются ст. 333.19 НК РФ:
1. По делам, рассматриваемым Верховным Судом Российской Федерации в соответствии с гражданским процессуальным законодательством Российской Федерации и законодательством об административном судопроизводстве, судами общей юрисдикции, мировыми судьями, государственная пошлина уплачивается в следующих размерах:
1) при подаче искового заявления имущественного характера, административного искового заявления имущественного характера, подлежащего оценке, при цене иска:
до 20 000 рублей — 4 процента цены иска, но не менее 400 рублей;
от 20 001 рубля до 100 000 рублей — 800 рублей плюс 3 процента суммы, превышающей 20 000 рублей;
от 100 001 рубля до 200 000 рублей — 3 200 рублей плюс 2 процента суммы, превышающей 100 000 рублей;
от 200 001 рубля до 1 000 000 рублей — 5 200 рублей плюс 1 процент суммы, превышающей 200 000 рублей;
свыше 1 000 000 рублей — 13 200 рублей плюс 0,5 процента суммы, превышающей 1 000 000 рублей, но не более 60 000 рублей;
Подсчитать — ничего сложного, когда таких исков 2 или 3. А когда их десятки? Вот этот процесс мы и автоматизируем, написав прооостенькую консольную программку на java.
Откроем Netbeans и выберем Файл — создать проект.
В открывшемся окне в левой части выберем Java, а в правой приложение Java. Нажмём Далее.
В открывшемся окне в разделе Имя проекта напишем, к примеру, Test1. Нажмём Готово.
Для автоматизации задачи нам понадобится вводить числа с клавиатуры. Для вывода данных на экран мы использовали System.out. (помните System.out.println(«Привет, мир?»);) Для ввода данных используется System.in. Но System.in позволяет считать с клавиатуры только коды символов. Чтобы обойти эту проблему и считывать большие порции данных за один раз, мы будем использовать более сложную конструкцию:
InputStream inputStream = System.in; Reader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String input = bufferedReader.readLine(); int chislo = Integer.parseInt(input);
Чтобы считать строку с клавиатуры, можно использовать объект BufferedReader. Но для этого в него нужно передать объект, из которого он будет вычитывать данные – System.in.
Однако System.in и BufferedReader не совместимы друг с другом, поэтому следует использовать переходник – еще один объект InputStreamReader.
Строка
String input = bufferedReader.readLine();
считывает строку с клавиатуры.
Строка
int chislo = Integer.parseInt(input);
преобразует полученную строку в число.
Далее нам остаётся передать это число в метод, который и будет производить расчёт в соответствии с ст. 333.19 НК РФ
result(chislo);
Таким образом первый блок кода у нас выглядит примерно так:
package test1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public class Test1 { public static void main(String[] args) throws IOException { InputStream inputStream = System.in; Reader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String input = bufferedReader.readLine(); int chislo = Integer.parseInt(input); result(chislo); } }
А что же такое throws IOException ? Это механизм исключений.
Исключение — это проблема(ошибка) возникающая во время выполнения программы. Исключения могут возникать во многих случаях, например:
Пользователь ввел некорректные данные.
Файл, к которому обращается программа, не найден.
Сетевое соединение с сервером было утеряно во время передачи данных.
И т.п.
Обработка исключительных ситуаций (exception handling) — механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма.
throws — ключевое слово, которое прописывается в сигнатуре метода, и обозначающее что метод потенциально может выбросить исключение с указанным типом. IOException — тип исключения, об исключениях мы поговорим позже. Такая конструкция нам нужна потому, что пользователь может ввести не только цифры.
Теперь осталось описать метод result(); в который мы передадим переменную chislo.
Для того, чтобы не создавать объект в нашей простейшей программе, при создании метода мы будем использовать ключевое слово static. О статичных методах мы также будем говорить немного позже. Таким образом пока наш код выглядит примерно так:
package test1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public class Test1 { public static void main(String[] args) throws IOException { InputStream inputStream = System.in; Reader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String input = bufferedReader.readLine(); int chislo = Integer.parseInt(input); result(chislo); } public static void result (int chislo){ } }
Осталось записать логику работы в метод public static void result (int chislo). Приступим. Итак:
при подаче искового заявления имущественного характера, административного искового заявления имущественного характера, подлежащего оценке, при цене иска:
//условно а
до 20 000 рублей — 4 процента цены иска, но не менее 400 рублей;
if (chislo <= 20000){ chislo = chislo * 4 / 100; if (chislo < 400){ chislo = 400; } }
То есть если переданная переменная chislo в методе result меньше либо равна 20000, умножаем значение на 0,04 — то есть высчитываем 4 процента от числа. Если это число меньше 400, то переменной задаётся значение 400.
Следующий пункт, условно назовём его б.
от 20 001 рубля до 100 000 рублей — 800 рублей плюс 3 процента суммы, превышающей 20 000 рублей;
//пункт б else if (chislo >= 20001 && chislo <= 100000){ chislo = chislo - 20000; chislo = chislo * 3 / 100; chislo = chislo + 800; }
Если переданное число больше или равно 20001 и при этом меньше 100000 из переданного значения вычитается 20000, а остаток умножается на 0,03, после чего прибавляет 800 рублей. Полученное значение и запишется в переменную chislo.
Условный пункт в.
от 100 001 рубля до 200 000 рублей — 3 200 рублей плюс 2 процента суммы, превышающей 100 000 рублей;
else if (chislo >= 100001 && chislo <= 200000 ){ chislo = chislo - 100000; chislo = chislo * 2 / 100; chislo = chislo + 3200; }
Если переданное значение больше или равно 100001 и при этом меньше или равно 200000, то из переданного значение вычитается 100000, остаток умножается на 0,02 и к этому значению прибавляется 3200.
Условный пункт г.
от 200 001 рубля до 1 000 000 рублей — 5 200 рублей плюс 1 процент суммы, превышающей 200 000 рублей;
//пункт г else if (chislo >= 200001 && chislo <= 1000000 ){ chislo = chislo - 200000; chislo = chislo * 1 / 100; chislo = chislo + 5200; }
Если переданное значение больше или равно 200001 и при этом меньше или равно 1000000, то из переданного значение вычитается 200000, остаток умножается на 0,01 и к этому значению прибавляется 5200.
Условный пункт д.
свыше 1 000 000 рублей — 13 200 рублей плюс 0,5 процента суммы, превышающей 1 000 000 рублей, но не более 60 000 рублей;
else if (chislo >= 1000001){ chislo = chislo - 1000000; chislo = (int) (chislo * 0.005); chislo = chislo + 13200; if (chislo > 60000){ chislo = 60000; } }
Если переданное значение больше или равно 1000001, то из переданного значение вычитается 1000000, остаток умножается на полпроцента (0.005) и к этому значению прибавляется 13200. Однако, если указанное число будет больше 60000 в переменную число запишется 60000. Обратите внимание на строку chislo = (int) (chislo * 0.005);
Значение 0.005 — это число с двойной точностью, то есть double. Переменная же chislo у нас имеет тип int — то есть целочисленное, копейки мы округляем. Поэтому в качестве учебного примера мы используем приведение типов, о чём мы ГОВОРИ ЗДЕСЬ В КОНЦЕ ЛЕКЦИИ.
Напишем ещё одно условие. Вдруг наше число вообще какое-то странно, что не выполнится ни один из условных операторов.
else { chislo = 000; }
То есть если вообще произошло нечто странное, в переменную chislo запишется три нолика.
Ну и вывод на экран:
System.out.println("Госпошлина составляет: " + chislo); } }
Целиком наша простенькая учебная программка будет выглядеть так:
package test1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public class Test1 { public static void main(String[] args) throws IOException { InputStream inputStream = System.in; Reader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String input = bufferedReader.readLine(); int chislo = Integer.parseInt(input); result(chislo); } public static void result (int chislo){ //пункт а if (chislo <= 20000){ chislo = chislo * 4 / 100; if (chislo < 400){ chislo = 400; } } //пункт б else if (chislo >= 20001 && chislo <= 100000){ chislo = chislo - 20000; chislo = chislo * 3 / 100; chislo = chislo + 800; } //пункт в else if (chislo >= 100001 && chislo <= 200000 ){ chislo = chislo - 100000; chislo = chislo * 2 / 100; chislo = chislo + 3200; } //пункт г else if (chislo >= 200001 && chislo <= 1000000 ){ chislo = chislo - 200000; chislo = chislo * 1 / 100; chislo = chislo + 5200; } //пункт д else if (chislo >= 1000001){ chislo = chislo - 1000000; chislo = (int) (chislo * 0.005); chislo = chislo + 13200; if (chislo > 60000){ chislo = 60000; } } else { chislo = 000; } System.out.println("Госпошлина составляет: " + chislo); } }
Запустив её в Netbean вводим число и получим результат.
С графическим интерфейсом:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * Created by Maksim on 10.04.2017. */ public class gosposhlina { public static JButton b1; public static JLabel jl1, jl2; public static JTextField jt1; public static int i; public static void main(String[] args) { JFrame window = new JFrame("Подсчёт госпошлины"); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.setSize(310, 150); window.setVisible(true); window.setResizable(false); JPanel panel = new JPanel(); window.add(panel); panel.setLayout(new FlowLayout()); b1 = new JButton("Рассчитать сумму"); ActionListener actionListener = new TestActionListener(); b1.addActionListener(actionListener); jl1 = new JLabel(); jl2 = new JLabel("Введите цену искового заявления:"); jt1 = new JTextField(10); panel.add(jl2); panel.add(jt1); panel.add(b1); panel.add(jl1); } public static class TestActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource()==b1){ i = Integer.parseInt(jt1.getText()); jl1.setText("Размер госпошлины составит: " + result(i) + " рублей."); } } } public static int result (int chislo){ //пункт а if (chislo <= 20000){ chislo = chislo * 4 / 100; if (chislo < 400){ chislo = 400; } } //пункт б else if (chislo >= 20001 && chislo <= 100000){ chislo = chislo - 20000; chislo = chislo * 3 / 100; chislo = chislo + 800; } //пункт в else if (chislo >= 100001 && chislo <= 200000 ){ chislo = chislo - 100000; chislo = chislo * 2 / 100; chislo = chislo + 3200; } //пункт г else if (chislo >= 200001 && chislo <= 1000000 ){ chislo = chislo - 200000; chislo = chislo * 1 / 100; chislo = chislo + 5200; } //пункт д else if (chislo >= 1000001){ chislo = chislo - 1000000; chislo = (int) (chislo * 0.005); chislo = chislo + 13200; if (chislo > 60000){ chislo = 60000; } } else { chislo = 000; } return chislo; } }