Маленькая внеурочная заметка. Вызвана она, прежде всего, вопросами студентов, а зачем нам учить эту «джаву,» мы же будущие юристы, а не программисты. Где нам это пригодится?
Специально для группы ЮП-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;
}
}