LabWork_02 done

This commit is contained in:
ArtemEmelyanov 2023-03-11 20:38:01 +04:00
parent 035fadd9dc
commit d80f64a86e
11 changed files with 309 additions and 47 deletions

View File

@ -14,31 +14,41 @@
<div class="col-lg-6"> <div class="col-lg-6">
<div class="card shadow-lg"> <div class="card shadow-lg">
<div class="card-header"> <div class="card-header">
<h3 class="text-center font-weight-light my-2">Calculator</h3> <h3 class="text-center font-weight-light my-2">LabWork2</h3>
</div> </div>
<div class="card-body"> <div class="card-body">
<form> <form>
<div class="form-row"> <div class="form-row">
<div class="col"> <div class="col">
<div class="form-group"> <div class="form-group">
<label for="input1">Number 1</label> <label for="input1">Value 1</label>
<input type="number" class="form-control" id="input1" placeholder="Enter Number 1"> <input class="form-control" id="input1" placeholder="Enter Value 1">
</div> </div>
</div> </div>
<div class="col"> <div class="col">
<div class="form-group"> <div class="form-group">
<label for="input2">Number 2</label> <label for="input2">Value 2</label>
<input type="number" class="form-control" id="input2" placeholder="Enter Number 2"> <input class="form-control" id="input2" placeholder="Enter Value 2">
</div> </div>
</div> </div>
<div class="col"> <div class="col">
<div class="form-group"> <div class="form-group">
<label for="operator">Operator</label> <label for="operator">Method</label>
<select class="form-control" id="operator"> <select class="form-control" id="operator">
<option value="+">+</option> <option value="Method1">+</option>
<option value="-">-</option> <option value="Method2">-, toUpper</option>
<option value="*">*</option> <option value="Method3">*, toLower</option>
<option value="/">/</option> <option value="Method4">/, first toLower, second toUpper</option>
</select>
</div>
</div>
<div class="col">
<div class="form-group">
<label for="operator">Type</label>
<select class="form-control" id="Type">
<option value="int">Integer</option>
<option value="str">String</option>
<option value="double">Double</option>
</select> </select>
</div> </div>
</div> </div>
@ -47,7 +57,7 @@
<label for="result">Result</label> <label for="result">Result</label>
<input type="text" class="form-control result" id="result" readonly> <input type="text" class="form-control result" id="result" readonly>
</div> </div>
<button type="button" class="btn btn-primary btn-block" onclick="calculate()">Calculate</button> <button type="button" class="btn btn-primary btn-block" onclick="calculate()">Do</button>
</form> </form>
</div> </div>
</div> </div>

View File

@ -1,26 +1,16 @@
'use strict' 'use strict'
let num1 = document.getElementById("input1") async function calculate(){
let num2 = document.getElementById("input2") let num1 = document.getElementById("input1").value
let operator = document.getElementById("operator") let num2 = document.getElementById("input2").value
let result = document.getElementById("result") let operator = document.getElementById("operator").value
let result = document.getElementById("result")
let type = document.getElementById("Type").value
function FindOperator(operat){ let response = await fetch(`http://localhost:8080/${operator}?Type=${type}&value1=${num1}&value2=${num2}`)
let OperatorVal = operat let res = await response.text()
switch(OperatorVal){ result.value = res
case "+": return "add"
case "-": return "subtract"
case "/": return "divide"
case "*": return "multiply"
}
} }
function calculate(){
let number1 = num1.value
let number2 = num2.value
let oper = FindOperator(operator.value)
fetch(`http://localhost:8080/${oper}/${number1}/${number2}`)
.then(response => response.text())
.then(data => {result.value = data})
}

View File

@ -13,7 +13,4 @@ public class IpApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(IpApplication.class, args); SpringApplication.run(IpApplication.class, args);
} }
} }

View File

@ -0,0 +1,25 @@
package ru.IP_LabWorks.IP.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.IP_LabWorks.IP.domain.TypeDouble;
import ru.IP_LabWorks.IP.domain.TypeInt;
import ru.IP_LabWorks.IP.domain.TypeString;
@Configuration
public class TypeConfiguration {
@Bean(value = "int")
public TypeInt createIntType(){
return new TypeInt();
}
@Bean(value = "str")
public TypeString createStrType(){
return new TypeString();
}
@Bean(value = "double")
public TypeDouble createDoubleType(){
return new TypeDouble();
}
}

View File

@ -1,29 +1,45 @@
package ru.IP_LabWorks.IP.controllers; package ru.IP_LabWorks.IP.controllers;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import ru.IP_LabWorks.IP.domain.ITypeInterface;
import ru.IP_LabWorks.IP.service.TypeService;
@RestController @RestController
public class MainController { public class MainController {
@GetMapping("/add/{num1}/{num2}") private final TypeService Service;
public int add(@PathVariable int num1, @PathVariable int num2) {
return num1 + num2; public MainController(TypeService service) {
Service = service;
} }
@GetMapping("/subtract/{num1}/{num2}") @GetMapping("/Method1")
public int subtract(@PathVariable int num1, @PathVariable int num2) { public Object Method1(@RequestParam(value = "Type") String Type,
return num1 - num2; @RequestParam(value = "value1") Object value1,
@RequestParam(value = "value2") Object value2){
return Service.Method1(value1,value2,Type);
} }
@GetMapping("/multiply/{num1}/{num2}") @GetMapping("/Method2")
public int multiply(@PathVariable int num1, @PathVariable int num2) { public Object Method2(@RequestParam(value = "Type") String Type,
return num1 * num2; @RequestParam(value = "value1") Object value1,
@RequestParam(value = "value2") Object value2){
return Service.Method2(value1,value2,Type);
} }
@GetMapping("/divide/{num1}/{num2}") @GetMapping("/Method3")
public int divide(@PathVariable int num1, @PathVariable int num2) { public Object Method3(@RequestParam(value = "Type") String Type,
return num1 / num2; @RequestParam(value = "value1") Object value1,
@RequestParam(value = "value2") Object value2){
return Service.Method3(value1,value2,Type);
}
@GetMapping("/Method4")
public Object Method4(@RequestParam(value = "Type") String Type,
@RequestParam(value = "value1") Object value1,
@RequestParam(value = "value2") Object value2){
return Service.Method4(value1,value2,Type);
} }
} }

View File

@ -0,0 +1,8 @@
package ru.IP_LabWorks.IP.domain;
public interface ITypeInterface<T> {
T Method1(T value1, T value2);
T Method2(T value1, T value2);
T Method3(T value1, T value2);
T Method4(T value1, T value2);
}

View File

@ -0,0 +1,24 @@
package ru.IP_LabWorks.IP.domain;
public class TypeDouble implements ITypeInterface<Double> {
@Override
public Double Method1(Double value1, Double value2) {
return value1 + value2;
}
@Override
public Double Method2(Double value1, Double value2) {
return value1 - value2;
}
@Override
public Double Method3(Double value1, Double value2) {
return value1 * value2;
}
@Override
public Double Method4(Double value1, Double value2) {
return value1 / value2;
}
}

View File

@ -0,0 +1,24 @@
package ru.IP_LabWorks.IP.domain;
public class TypeInt implements ITypeInterface<Integer> {
@Override
public Integer Method1(Integer value1, Integer value2) {
return value1 + value2;
}
@Override
public Integer Method2(Integer value1, Integer value2) {
return value1 - value2;
}
@Override
public Integer Method3(Integer value1, Integer value2) {
return value1 * value2;
}
@Override
public Integer Method4(Integer value1, Integer value2) {
return value1 / value2;
}
}

View File

@ -0,0 +1,24 @@
package ru.IP_LabWorks.IP.domain;
public class TypeString implements ITypeInterface<String> {
@Override
public String Method1(String value1, String value2) {
return value1 + value2;
}
@Override
public String Method2(String value1, String value2) {
return value1.toUpperCase() + value2.toUpperCase();
}
@Override
public String Method3(String value1, String value2) {
return value1.toLowerCase() + value2.toLowerCase();
}
@Override
public String Method4(String value1, String value2) {
return value1.toLowerCase() + value2.toUpperCase();
}
}

View File

@ -0,0 +1,68 @@
package ru.IP_LabWorks.IP.service;
import ru.IP_LabWorks.IP.domain.ITypeInterface;
import org.springframework.stereotype.Service;
import org.springframework.context.ApplicationContext;
@Service
public class TypeService {
private final ApplicationContext applicationContext;
private ITypeInterface _type;
private Object _value1;
private Object _value2;
public TypeService(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
private void ValidateParams(Object value1, Object value2, String type){
_type = (ITypeInterface)applicationContext.getBean(type);
switch (type) {
case "int" -> {
try {
_value1 = Integer.valueOf(value1.toString());
_value2 = Integer.valueOf(value2.toString());
}catch (Exception ex){
_value1 = 0;
_value2 = 0;
}
}
case "double" -> {
try {
_value1 = Double.valueOf(value1.toString());
_value2 = Double.valueOf(value2.toString());
}catch (Exception ex){
_value1 = 0.0;
_value2 = 0.0;
}
}
case "str" -> {
_value1 = value1;
_value2 = value2;
}
}
}
public Object Method1(Object value1, Object value2, String type){
ValidateParams(value1,value2,type);
return String.format("%s", _type.Method1(_value1,_value2));
}
public Object Method2(Object value1, Object value2, String type){
ValidateParams(value1,value2,type);
return String.format("%s", _type.Method2(_value1,_value2));
}
public Object Method3(Object value1, Object value2, String type){
ValidateParams(value1,value2,type);
return String.format("%s", _type.Method3(_value1,_value2));
}
public Object Method4(Object value1, Object value2, String type){
ValidateParams(value1,value2,type);
return String.format("%s", _type.Method4(_value1,_value2));
}
}

View File

@ -1,13 +1,89 @@
package ru.IP_LabWorks.IP; package ru.IP_LabWorks.IP;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import ru.IP_LabWorks.IP.service.TypeService;
@SpringBootTest @SpringBootTest
class IpApplicationTests { class IpApplicationTests {
@Autowired
TypeService Service;
@Test @Test
void contextLoads() { void contextLoads() {
} }
@Test
void testIntPlus() {
final String res = (String) Service.Method1( "100", "10", "int");
Assertions.assertEquals("110", res);
}
@Test
void testIntMinus() {
final String res = (String)Service.Method2( "100", "10", "int");
Assertions.assertEquals("90", res);
}
@Test
void testIntMultiply() {
final String res = (String)Service.Method3( "100", "10", "int");
Assertions.assertEquals("1000", res);
}
@Test
void testIntDivision() {
final String res = (String)Service.Method4( "100", "10", "int");
Assertions.assertEquals("10", res);
}
@Test
void testStringPlus() {
final String res = (String)Service.Method1( "abc", "dfe", "str");
Assertions.assertEquals("abcdfe", res);
}
@Test
void testStringtoUpper() {
final String res = (String)Service.Method2( "abc", "dfe", "str");
Assertions.assertEquals("ABCDFE", res);
}
@Test
void testStringtoLower() {
final String res = (String)Service.Method3( "abc", "dfe", "str");
Assertions.assertEquals("abcdfe", res);
}
@Test
void testStringStrange() {
final String res = (String)Service.Method4( "abc", "dfe", "str");
Assertions.assertEquals("abcDFE", res);
}
@Test
void testDoublePlus() {
final String res = (String)Service.Method1( "1.01", "2.76", "double");
Assertions.assertEquals("3.7699999999999996", res);
}
@Test
void testDoubleMinus() {
final String res = (String)Service.Method2( "1.01", "2.76", "double");
Assertions.assertEquals("-1.7499999999999998", res);
}
@Test
void testDoubleMyltiply() {
final String res = (String)Service.Method3( "1.01", "2.76", "double");
Assertions.assertEquals("2.7876", res);
}
@Test
void testDoubleDivision() {
final String res = (String)Service.Method4( "1.01", "2.76", "double");
Assertions.assertEquals("0.36594202898550726", res);
}
} }