Проблема в том, что я пытаюсь добавить себе проверку прав для пользователей, так как все новые пользователи имеют доступ администратора
Все настраивается через Docker. Build Camunda:
1 2 |
FROM camunda/camunda-bpm-platform:run-7.17.0 COPY production.yml /camunda/configuration/production.yml |
.yml setup file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
camunda.bpm: webapp: csrf: enable-same-site-cookie: true same-site-cookie-option: STRICT header-security: hsts-disabled: false content-security-policy-value: base-uri 'self'; default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; block-all-mixed-content; form-action 'self'; frame-ancestors 'none'; object-src 'none'; sandbox allow-forms allow-scripts allow-same-origin allow-popups authorization: enabled: true user-id-claim: sub administratorGroupName: camunda-admin authorizationCheckRevokes: never generic-properties: properties: enable-password-policy: true admin-auth: enabled: true administrator-user-name: admin administrator-group-name: admins |
Проект строится, но авторизация до сих пор не работает, судя по документации, то все эти настройки максимум, что нужно сделать, чтобы он заработал. Кто настраивал авторизацию, подскажите что не так?
Форумчане выручайте,не имею не малейшего понятия как это выполнить без условных операторов.
Полное задание:
Известны оценки по информатике каждого из 20 учеников класса.В начале списка перечислены все пятерки,затем
все остальные оценки.Сколько учеников имеют по информатике оценку 5?Условный оператор не использовать.Рассмотреть два
случая:
1)известно,что пятерки имеют не все ученики класса;
2)допускается,что пятерки могут иметь все ученики класса
Выполни на c# и обьясни каждую строчку.
Я хочу создать приложения, которая при помощи камеры сканирует QR код на учебном месте и отмечает, что он был на занятиях. Но проблема в том, что я новичок в Android Studio. Мне нужна реализовать RecyclerView, который имеет id - scheduleRecycler так, чтобы он показывал содержимое базы данных, в виде посещаемости.
Мне бы ещё не помещала помощь как правильно настроит таблицы в базе данных с помощью phpMyAdmin.
Как вернуть часть массива в java, например есть массив целых чисел от 1 до 7, как вернуть элементы с 3 по 7
Создается приложение бухгалтерии. там программа должна предлагать 6 действий. 1) считать все месячные ответы
2) считать годовой отчет
3) сверить отчеты
4) вывести информацию обо всех месячных отчетах (название месяца, самый прибыльный товар и самая большая трата)
5) вывести информацию о годовом отчете (год, прибыль, средних расход и средних доход)
6) выход из приложения
Меню должно лежать в классе Main
[JAVA]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import java.util.Scanner; public class Main { public static void main(String[] args) { ReportEngine reportEngine = new ReportEngine(); Scanner scanner = new Scanner(System.in); while (true) { printMenu(); int userInput = scanner.nextInt(); if (userInput == 1) { System.out.println("Выполняется ко***** 1"); } else if (userInput == 2) { System.out.println("Выполняется ко***** 2"); } else if (userInput == 3) { System.out.println("Выполняется ко***** 3"); reportEngine.check(); } else if (userInput == 4) { System.out.println("Выполняется ко***** 4"); System.out.println("Самый прибыльный товар " + reportEngine.getTopProduct()); System.out.println(reportEngine.biggerExpense()); } else if (userInput == 5) { System.out.println("Выполняется ко***** 5"); System.out.println("Прибыль по каждому месяцу составляет: " + reportEngine.profit()); System.out.println("Средний расход в год составляет: " + reportEngine.averageExpense()); System.out.println("Средний доход в год составляет: " + reportEngine.averageIncome()); } else if (userInput == 6) { System.out.println("Пока!"); scanner.close(); return; } else { System.out.println("Такой команды нет"); } } } public static void printMenu() { System.out.println("1) Считать все месячные отчёты "); System.out.println("2) Считать годовой отчёт"); System.out.println("3) Сверить отчёты"); System.out.println("4) Вывести информацию обо всех месячных отчётах"); System.out.println("5) Вывести информацию о годовом отчёте"); System.out.println("6) Выход из приложения"); } } |
[/JAVA]
Класс FileReader для чтения данных
[JAVA]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; public class FileReader { ArrayList<String> readFileContents(String fileName) { String path = "./resources/" + fileName; try { return new ArrayList<>(Files.readAllLines(Path.of(path))); } catch (IOException e) { System.out.println("Невозможно прочитать файл с отчётом. Возможно, файл отсутствует в нужной директории."); return new ArrayList<>(); } } } |
[/JAVA]
Для считывания месячных отчетов пользуюсь классом MonthlyReport
[JAVA]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import java.util.ArrayList; public class MonthlyReport { FileReader fileReader = new FileReader(); public ArrayList<MonthTotalPerYear> monthTotalPerYears = new ArrayList<>(); public MonthlyReport() { for (int i = 1; i <= 3; i++) { String paths = "m.20210" + i + ".csv"; ArrayList<String> lines = fileReader.readFileContents(paths); String[] lineContents = lines.get(i).split("\n"); for (int j = 1; j < lineContents.length; j++) { String line = lineContents[j]; //Коньки,TRUE,2,2000 String[] parts = line.split(","); String name = parts[0]; boolean is_expense = Boolean.parseBoolean(parts[1]); int quantity = Integer.parseInt(parts[2]); int price = Integer.parseInt(parts[3]); MonthTotalPerYear monthTotalPerYear = new MonthTotalPerYear(name, is_expense, quantity, price); monthTotalPerYears.add(monthTotalPerYear); } } } } |
[/JAVA]
И классом MonthlyTotalPerYear, где создаю конструктор в соответствии с отчетом
[JAVA]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class MonthTotalPerYear { public String name; public boolean is_expense; public int quantity; public int price; public MonthTotalPerYear(String name, boolean is_expense, int quantity, int price) { this.name = name; this.is_expense = is_expense; this.quantity = quantity; this.price = price; } } |
[/JAVA]
Для считывания годового отчета использую класс YearlyReport
[JAVA]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import java.util.ArrayList; public class YearlyReport { public ArrayList<Transaction> transactions = new ArrayList<>(); FileReader fileReader = new FileReader(); public YearlyReport() { ArrayList<String> lines = fileReader.readFileContents("y.2021.csv"); for (int i = 1; i < lines.size(); i++){ String[] lineContents = lines.get(i).split("\n"); for (int j = 1; j < lineContents.length; j++) { String line = lineContents[j]; //01,1593150,false String[] parts = line.split(","); String month = parts[0]; int amount = Integer.parseInt(parts[1]); boolean isExpense = Boolean.parseBoolean(parts[2]); Transaction transaction = new Transaction(month, amount, isExpense); transactions.add(transaction); } } } } |
[/JAVA]
И класс Transaction с созданием конструктора
[JAVA]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Transaction { public String month; public int amount; public boolean isExpense; public Transaction(String month, int amount, boolean isExpense) { this.month = month; this.amount = amount; this.isExpense = isExpense; } } |
[/JAVA]
Конструктора созданы на основе того, как выглядят строки в отчетах.
Отчет за январь:
item_name,is_expense,quantity,unit_price
Коньки,TRUE,50,2000
Новогодняя ёлка,TRUE,1,100000
Ларёк с кофе,TRUE,3,50000
Аренда коньков,FALSE,1000,180
Продажа билетов,FALSE,3500,300
Продажа кофе,FALSE,2421,150
Отчет за февраль:
item_name,is_expense,quantity,unit_price
Коньки,TRUE,2,2000
Заточка коньков,TRUE,50,200
Аренда коньков,FALSE,1000,180
Продажа билетов,FALSE,1500,300
Продажа кофе,FALSE,1200,150
Отчет за март:
item_name,is_expense,quantity,unit_price
Заточка коньков,TRUE,50,200
Разморозка ледопарка,TRUE,1,20000
Организация специального концерта,TRUE,1,60000
Продажа билетов,FALSE,2500,300
Продажа кофе,FALSE,1200,150
Билеты на специальный концерт,FALSE,300,5000
Годовой отчет:
month,amount,is_expense
01,1593150,false
01,350000,true
02,810000,false
02,14000,true
03,90000,true
03,2430000,false
Дальше описывала методы в классе ReportEngine
(топовый продукт, самая большая трата, прибыль, средний доход и расход и сверка (check) но чек не дописан, я не понимаю как его писать)
[JAVA]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
import java.util.ArrayList; import java.util.HashMap; public class ReportEngine { public MonthlyReport monthlyReport; public YearlyReport yearlyReport; public ReportEngine() { monthlyReport = new MonthlyReport(); yearlyReport = new YearlyReport(); } public String getTopProduct() { HashMap<String, Integer> fregs = new HashMap<>(); for (MonthTotalPerYear monthTotalPerYear : monthlyReport.monthTotalPerYears) { fregs.put(monthTotalPerYear.name, fregs.getOrDefault(monthTotalPerYear.name, 0) + monthTotalPerYear.quantity); } String maxName = null; for (String name : fregs.keySet()) { if (maxName == null) { maxName = name; continue; } if (fregs.get(maxName) < fregs.get(name)) { maxName = name; } } return maxName; } public String biggerExpense() { HashMap<String, Integer> expense = new HashMap<>(); for (MonthTotalPerYear monthTotalPerYear : monthlyReport.monthTotalPerYears) { if (monthTotalPerYear.is_expense) { expense.put(monthTotalPerYear.name, monthTotalPerYear.price); } } String nameExpense = null; for (String name : expense.keySet()) { if (nameExpense == null) { nameExpense = name; continue; } if (expense.get(nameExpense) < expense.get(name)) { nameExpense = name; } } System.out.println("Самая большая сумма траты - " + expense.get(nameExpense)); return nameExpense; } public HashMap<String, Integer> profit() { HashMap<String, Integer> product = new HashMap<>(); for (Transaction transaction : yearlyReport.transactions) { if (!(transaction.isExpense)) { product.put(transaction.month, transaction.amount); } } String maxTransaction = null; for (String name : product.keySet()) { if (maxTransaction == null) { maxTransaction = name; continue; } if (product.get(maxTransaction) < product.get(name)) { maxTransaction = name; } } return product; } public Integer averageIncome() { HashMap<String, Integer> product = new HashMap<>(); for (Transaction transaction : yearlyReport.transactions) { if (!(transaction.isExpense)) { product.put(transaction.month, transaction.amount); } } Integer result = null; for (Integer sum : product.values()) { result += sum; } return result; } public Integer averageExpense() { HashMap<String, Integer> product = new HashMap<>(); for (Transaction transaction : yearlyReport.transactions) { if (transaction.isExpense) { product.put(transaction.month, transaction.amount); } } Integer result = null; for (Integer sum : product.values()) { result += sum; } return result; } public boolean check() { if (monthlyReport.monthTotalPerYears.isEmpty()) { System.out.println("Ошибка! Для начала необходимо считать файлы! :)"); return false; /* } else { if ((sum_income == sum_incomeYear) && (sum_expense == sum_expenseYear)){ System.out.println("Успех! Сверка отчётов прошла успешно!"); } else { System.out.println("Ошибка! Сверка отчётов обнаружела несоответствие в "); } }*/ } return false; } } |
[/JAVA]
Главные вопросы как все-таки реализовать считку файлов, в чем ошибка и как сверить отчеты
Всех с прошедшими
Ребенку, потребовался сайт для школьного проекта. Я занимался программированием "цать" лет назад. Пришлось поднимать старые архивы покрытые пылью. Кое как смог вспомнить и написать сайт. Благо с дизайном сложностей нет. Однако возникла сложность с которой мне не удается разобраться. Пожалуйста, подсобите, если не сложно.
На сайте обязательно должен быть теск. В интернете, в общем доступе, нашел интересный вариант. Особенно понравился способ вывода результатов теста. Понравился и мне и ребенку. Но. Я уже второй день ломаю голову над одним нюансом - не могу сделать промежуток между вопросом и вариантами ответа и сами вопросы сделать выделенными. Уже мозг вспух.
Вот, собственно сам тест:
<div style="padding: 0px; margin:0.5cm;">
<script>
// Заголовок страницы (h2)
var subtitle = "Слова Л.Н. Толстого об образовании";
// Это ваши вопросы
var questions=[
{
text: " - Толстой говорил - Образование это не...:",
answers: ["«как стакан с водой для красок»",
"«свеча в доме которая горит»",
"«не заполненное ведро, а зажжение огня»"],
correctAnswer: 2 // нумерация ответов с нуля!
},
{
text: " - Толстой говорил - Образование это не...:",
answers: ["заполняет пустоты мозга",
"то, что принимается, а то, что дается",
"сила, которая не пригодится"],
correctAnswer: 1
},
{
text: " - Толстой говорил - Образование это...",
answers: ["развитие способности мыслить",
"способ устроиться на работу",
"получать мзду с дураков"],
correctAnswer: 0
},
{
text: "Образование – это не конечный результат:",
answers: ["а, средство обогащения",
"а бесконечный процесс",
"а, единовременное явление"],
correctAnswer: 1
}
];
var yourAns = new Array;
var score = 0;
function Engine(question, answer) {yourAns[question]=answer;}
function Score(){
var answerText = "Результаты:\n";
for(var i = 0; i < yourAns.length; ++i){
var num = i+1;
answerText=answerText+"\n Вопрос №"+ num +"";
if(yourAns[i]!=questions[i].correctAnswer){
answerText=answerText+"\n Правильный ответ: " +
questions[i].answers[questions[i].correctAnswer] + "\n";
}
else{
answerText=answerText+": Верно! \n";
++score;
}
}
answerText=answerText+"\nВсего правильных ответов: "+score+"\n";
alert(answerText);
yourAns = [];
score = 0;
clearForm("quiz");
}
function clearForm(name) {
var f = document.forms[name];
for(var i = 0; i < f.elements.length; ++i) {
if(f.elements[i].checked)
f.elements[i].checked = false;
}
}
</script>
<h3><script>document.write(subtitle)</script></h3>
<form name="quiz">
<script>
for(var q=0; q<questions.length; ++q) {
var question = questions[q];
var idx = 1 + q;
document.writeln('<li><span class="quest">' + question.text + '</span><br>');
for(var i in question.answers) {
document.writeln('<label><input type=radio name="q' + idx + '" value="' + i +
'" onClick="Engine(' + q + ', this.value)"> ' + question.answers[i] + '</label><br>');
}
document.writeln('</li>');
}
</script>
<center><input type="button" align="right" onClick="Score()" value="Проверить результаты"></center>
</form>
</div>
я создал паблик который ничего не возвращает(void) с названием setLoaded, ещё такой же паблик но с названием getLoaded. Но при вводе "truck.getLoaded(true); truck.setLoaded();" truck если что это переменная которую я создал. Ну так вот, при вводе их в переменную мне пишут что нету такого метода и ошибка в обеих командах
На хекслете решаю очередную задачу и застрял немного. Сначала упал один тест, потом после рефакторинга упал совершенно другой тест. Уже запутался. По заданию я должен писать методом "черный ящик" , кажется так называется, или же TDD. Тест написал, потом написал класс с инициализацией перегруженных методов. Вроде всё так, но будто что-то упустил т.к все равно не прохожу проверку.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
package io.hexlet; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeEach; import static org.junit.jupiter.api.Assertions.assertEquals; import static io.hexlet.implementations.Methods.fill; import java.util.List; import java.util.ArrayList; import java.util.Arrays; class MethodsTest { private List<String> coll = new ArrayList<>(); private List<String> emptyColl = new ArrayList<>(); @BeforeEach public void beforeEach() { coll.addAll(Arrays.asList("a", "b", "c", "d")); } @Test public void testFill() { fill(coll, "*", 1, 3); assertEquals(Arrays.asList("a", "*", "*", "d"), coll); } @Test public void testFill1() { fill(coll, "*"); assertEquals(Arrays.asList("*", "*", "*", "*"), coll); } @Test public void testFill2() { fill(coll, "*", 4, 6); assertEquals(Arrays.asList("a", "b", "c", "d"), coll); } @Test public void testFill3() { fill(coll, "*", 0, 10); assertEquals(Arrays.asList("*", "*", "*", "*"), coll); } @Test public void testFill4() { fill(coll, "*", 2); assertEquals(Arrays.asList("a", "b", "*", "*"), coll); } @Test public void testFill5() { fill(coll, "*", -1, 4); assertEquals(Arrays.asList("*", "*", "*", "*"), coll); } @Test public void testFill6() { fill(emptyColl, "*"); assertEquals(Arrays.asList(), emptyColl); } @Test public void testFill7() { fill(coll, "*", 5, 6); assertEquals(Arrays.asList("a", "b", "c", "d"), coll); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Failures (1): JUnit Jupiter:TestsTest:testRightImplementation() MethodSource [className = 'io.hexlet.TestsTest', methodName = 'testRightImplementation', methodParameterTypes = ''] => org.opentest4j.AssertionFailedError: [The tests should have passed, but they failed] Expecting value to be true but was false java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) io.hexlet.TestsTest.testRightImplementation(TestsTest.java:44) java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) java.base/java.lang.reflect.Method.invoke(Method.java:580) org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727) org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) [...] |
Как покрыть тестами конструктор класса в java?