Cześć.
Zaznaczam na wstępie, że studiuje kierunek , który nie ma powiązania z informatyką, mieliśmy jednak jave jako przedmiot obieralny i spodobało mi się to więc zacząłem sobie coś tam próbować w ramach zabawy.
Chciałem sobię napisać kalkulator, który szacuje ilość promili alkoholu. Napisałem go w najbardziej uproszczony sposób jednak chciałbym to teraz usprawnić. Najpierw mój kod:
Klasa modelowa:
public class CalculatorFromData {
private double coeffieicient;
private double bodyweight;
private double alcoholInGrams;
public CalculatorFromData(double coeffieicient, double bodyweight, double alcoholInGrams) {
this.coeffieicient = coeffieicient;
this.bodyweight = bodyweight;
this.alcoholInGrams = alcoholInGrams;
}
public CalculatorFromData(){}
public double getCoeffieicient() {
return coeffieicient;
}
public void setCoeffieicient(double coeffieicient) {
this.coeffieicient = coeffieicient;
}
public double getBodyweight() {
return bodyweight;
}
public void setBodyweight(double bodyweight) {
this.bodyweight = bodyweight;
}
public double getAlcoholInGrams() {
return alcoholInGrams;
}
public void setAlcoholInGrams(double alcoholInGrams) {
this.alcoholInGrams = alcoholInGrams;
}
}
Następnie klasa z metodą:
@Component
public class Calculator {
public double calculate(double alcoholInGrams,double coeffieicient, double bodyweight){
return alcoholInGrams/bodyweight*coeffieicient;
}
}
I tu już mam pierwszy problem ale o tym zaraz. Następnie Controller
@Controller
public class CalculatorController {
@Autowired
Calculator calculator;
@RequestMapping("/breathalyser")
public String createOperationModel(Model model) {
model.addAttribute("operationModel", new CalculatorFromData());
return "calculatorform";
}
@RequestMapping(path="/breathalyser", method = RequestMethod.POST)
public String add(@ModelAttribute("operationModel") CalculatorFromData calculatorFromData, Model model) {
model.addAttribute("result", calculator.calculate(calculatorFromData.getAlcoholInGrams(), calculatorFromData.getCoeffieicient(), calculatorFromData.getBodyweight()));
return "calculatorform";
}
}
I na koniec formularz
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html"
xmlns:c="http://www.w3.org/1999/XSL/Transform">
<head>
<title>Kalkulator promili we krwi</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" th:href="@{/webjars/bootstrap/3.3.7/css/bootstrap.min.css}" />
<script th:src="@{/webjars/jquery/3.2.1/jquery.min.js}"></script>
<script th:src="@{/webjars/bootstrap/3.3.7/js/bootstrap.min.js}"></script>
<div><font color="black" size="5"><center><b>WIRTUALNY ALKOMAT</b></center> </font> </caption></div>
</head>
<body style="background-color: burlywood">
<div class="container" >
<form class="list-inline" th:object="${operationModel}" th:action="@{/breathalyser}" th:method="post" >
<div class="form-group" >
<label class="control-label">Ilość wypitego alkoholu w gramach:</label>
<input type="text" class="form-control" th:field="*{alcoholInGrams}" placeholder="Alkohol podany w gramach"/>
<p th:if="${#fields.hasErrors('alcoholInGrams')}" th:errors="*{alcoholInGrams}"/>
</div>
<div class="form-group" >
<label class="control-label">Współczynnik:</label>
<input type="text" class="form-control" th:field="*{coeffieicient}" placeholder="Współczynnik"/>
<p th:if="${#fields.hasErrors('coeffieicient')}" th:errors="*{coeffieicient}"/>
</div>
<div class="form-group" >
<label class="control-label">Masa ciała:</label>
<input type="text" class="form-control" th:field="*{bodyweight}" placeholder="Masa ciała"/>
<p th:if="${#fields.hasErrors('bodyweight')}" th:errors="*{bodyweight}"/>
</div>
<div class="row">
<button type="submit" class="button">Oblicz</button>
</div>
<div>
<font size="4">
Wynik:</font> <span th:if="${result != null}" th:text="${result}"></span>
</div>
</form>
<div class="container">
<table class="table" border="5" cellpadding="7" >
<caption align="align" ><font color="black"><center><b> TABELA - DOPUSZCZALNA ILOŚĆ ALKOHOLU WE KRWI</b></center></font> </caption>
<thead>
<tr>
<td><font size="3"><b>Limit alkoholu w 100ml krwi</b></font></td>
<td><font size="3"><b>Kraje Europy</b></font></td>
</tr>
</thead>
<tbody>
<tr>
<td><b>0 promila</b></td>
<td><b>Czechy,Węgry,Włochy,Rumunia,Słowacja</b></td>
<tr>
<tr>
<td><b>0.2 promila</b></td>
<td><b>Cypr,Estonia,Polska,Szwecja</b></td>
<tr>
<tr>
<td><b>0.4 promila</b></td>
<td><b>Litwa</b></td>
<tr>
<tr>
<td><b>0.5 promila</b></td>
<td><b>Austria,Belgia,Bułgaria,Niemcy,Finlandia,Hiszpania,Włochy,Portugalia</b></td>
<tr>
<tr>
<td><b>0.8 promila</b></td>
<td><b>Malta,Wielka Brytania, Walia</b></td>
</tr>
</tbody>
</table>
</div>
<div><font size="4">INNE KALKULATORY:</font></div>
<div class="row">
<a href="/bmi"><font size="3"> KALKULATOR BMI</font></a>
</div>
<div class="row">
<a href="/bmr"><font size="3"> KALKULATOR BMR</font></a>
</div>
</div>
</body>
</html>
I teraz moich kilka pytań:
- Chciałbym żeby zamiast pola coeffiecient mieć po prostu radio button, w którym się zaznacza czy jest się kobietą czy mężczyzną i wtedy automatycznie metoda policzy dla kobiety 0.6 dla mężczyzny 0.7 . Po stronie metody wystarczy jakiegoś ifa zrobić? A jak na froncie to napisać?
2)Chciałbym żeby przy rezultacie wyższym niż 0.2 pojawiał się np komunikat "wytrzeźwiej zanim wsiądziesz do auta"
Wynik:</font> <span th:if="${result != null}" th:text="${result}"></span>
W tym wypadku muszę chyba skorzystać z choose? Tylko też mi to nie wychodzi, nie wiem czemu...
3) Nie do końca rozumiem jak korzystać z css. Stworzyłem sobie plik style css i dodałem w pliku html aby korzystał z tych styli. Chciałbym np żeby formularz znajdował się na tle jakiegoś obrazka.