Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510

Сервис обмена валюты Spring

29.11.2020, 20:22. Показов 3574. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть техническое задание:
С использованием фреймворка Spring необходимо разработать сервис для конвертации валют и сбора статистики операций.

API: /exchange, /stats

/exchange

Запрос: id пользователя, сумма в исходной валюте, исходная валюта, целевая валюта.

Ответ: id запроса, сумма в целевой валюте.

Можно использовать внешние api для конвертации или для получения курса конвертации.

/stats

Предоставление доступа к выборочной информации по запросам.

Примеры запросов:

Пользователи, запросившие конвертацию больше 10 000 $ за один запрос.

Пользователи, суммарный запрошенный объём которых больше 100 000 $.

Рейтинг направлений конвертации валют по популярности.
Его я выполнил. Пытаюсь понять фидбек по /stats (Пользователи, запросившие конвертацию больше 10 000 $ за один запрос):
захардкожена пороговая сумма и валюта запроса. Предполагалось, что сумма передаётся как параметр. Подразумевалось, что пороговая сумма задаётся в долларах, но поиск идёт по конвертациям в любых валютах.
Как понимать? Допустим, сервис работает продолжительное время. Курс меняется. Допустим, пользователь обменял 1000000 рублей в евро по курсу 70.5544 р/$ (29.11.2019). В долларах это $15565 (курс 64.2454926243 р/евро). Сейчас эти 14173 евро обмениваются в $16897 (курс 1.1922 $/евро, 29.11.2020).

Вопрос: сколько пользователей запросило конвертацию >$16k, если запрос поступил сейчас (29.11.2020)?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2020, 20:22
Ответы с готовыми решениями:

Веб сервис на Spring
Нужен веб сервис, который должен выполнять две задачи: по расписанию загружать содержимое определенного сайта, отвечать на GET запросы....

Spring Boot REST сервис
Создаю в учебных целях REST сервис и постоянно возникают различные вопросы, каждый раз создавать тему не хочется по этому буду спрашивать...

Нужно на Spring написать сервис логирования запросов Hibernate сучностей
Добрый день, Нужно на Spring написать сервис логирования запросов Hibernate сучностей. Например, если сущность меняется в...

7
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.11.2020, 01:17
ничего непонятно
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
30.11.2020, 01:47
Arsegg, очевидно, нужно сохранять использованный курс обмена для каждого запроса.
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
30.11.2020, 04:52  [ТС]
xoraxax, korvin_, я так оформил сущности:
Кликните здесь для просмотра всего текста
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
import javax.persistence.*;
 
@Entity
public final class Exchange {
    @Id
    @GeneratedValue
    private int id;
    private int userId;
    @Embedded
    private Money money;
    @AttributeOverrides({
            @AttributeOverride(name = "amount", column = @Column(name = "converted_amount")),
            @AttributeOverride(name = "currency", column = @Column(name = "converted_currency")),
    })
    @Embedded
    private Money convertedMoney;
 
    @Override
    public String toString() {
        return "Exchange{" +
                "id=" + id +
                ", userId=" + userId +
                ", money=" + money +
                ", convertedMoney=" + convertedMoney +
                '}';
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public int getUserId() {
        return userId;
    }
 
    public void setUserId(int userId) {
        this.userId = userId;
    }
 
    public Money getMoney() {
        return money;
    }
 
    public void setMoney(Money money) {
        this.money = money;
    }
 
    public Money getConvertedMoney() {
        return convertedMoney;
    }
 
    public void setConvertedMoney(Money convertedMoney) {
        this.convertedMoney = convertedMoney;
    }
}
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
import javax.persistence.Embeddable;
import java.math.BigDecimal;
import java.util.Currency;
 
@Embeddable
public final class Money {
    private BigDecimal amount;
    private Currency currency;
 
    @Override
    public String toString() {
        return "Money{" +
                "amount=" + amount +
                ", currency=" + currency +
                '}';
    }
 
    public BigDecimal getAmount() {
        return amount;
    }
 
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
 
    public Currency getCurrency() {
        return currency;
    }
 
    public void setCurrency(Currency currency) {
        this.currency = currency;
    }
}
Ресурсы:
Кликните здесь для просмотра всего текста
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
import java.math.BigDecimal;
import java.util.Currency;
 
public final class ExchangeDTO {
    private final int userId;
    private final BigDecimal amount;
    private final Currency source;
    private final Currency destination;
 
    private ExchangeDTO(int userId, BigDecimal amount, Currency source, Currency destination) {
        this.userId = userId;
        this.amount = amount;
        this.source = source;
        this.destination = destination;
    }
 
    public static ExchangeDTO createExchangeDTO(int userId, BigDecimal amount, Currency source, Currency destination) {
        return new ExchangeDTO(userId, amount, source, destination);
    }
 
    @Override
    public String toString() {
        return "ExchangeDTO{" +
                "userId=" + userId +
                ", amount=" + amount +
                ", source=" + source +
                ", destination=" + destination +
                '}';
    }
 
    public int getUserId() {
        return userId;
    }
 
    public BigDecimal getAmount() {
        return amount;
    }
 
    public Currency getSource() {
        return source;
    }
 
    public Currency getDestination() {
        return destination;
    }
 
}
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
import java.math.BigDecimal;
import java.util.Currency;
 
public class ExchangeDTOBuilder {
    private int userId;
    private BigDecimal amount;
    private Currency source;
    private Currency destination;
 
    public ExchangeDTOBuilder setUserId(int userId) {
        this.userId = userId;
        return this;
    }
 
    public ExchangeDTOBuilder setAmount(BigDecimal amount) {
        this.amount = amount;
        return this;
    }
 
    public ExchangeDTOBuilder setSource(Currency source) {
        this.source = source;
        return this;
    }
 
    public ExchangeDTOBuilder setDestination(Currency destination) {
        this.destination = destination;
        return this;
    }
 
    public ExchangeDTO createExchangeDTO() {
        return ExchangeDTO.createExchangeDTO(userId, amount, source, destination);
    }
}
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
import java.math.BigDecimal;
 
public final class ExchangeResponseDTO {
    private final int id;
    private final BigDecimal amount;
 
    private ExchangeResponseDTO(int id, BigDecimal amount) {
        this.id = id;
        this.amount = amount;
    }
 
    public static ExchangeResponseDTO createExchangeResponseDTO(Exchange exchange) {
        return createExchangeResponseDTO(exchange.getId(), exchange.getConvertedMoney().getAmount());
    }
 
    private static ExchangeResponseDTO createExchangeResponseDTO(int id, BigDecimal amount) {
        return new ExchangeResponseDTO(id, amount);
    }
 
    @Override
    public String toString() {
        return "ExchangeResponseDTO{" +
                "id=" + id +
                ", amount=" + amount +
                '}';
    }
 
    public int getId() {
        return id;
    }
 
    public BigDecimal getAmount() {
        return amount;
    }
}
Репозиторий:
Кликните здесь для просмотра всего текста
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
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
 
import javax.persistence.Tuple;
import java.math.BigDecimal;
import java.util.Currency;
import java.util.List;
import java.util.Set;
 
public interface ExchangeRepository extends CrudRepository<Exchange, Integer> {
    @Query("SELECT DISTINCT e.userId FROM Exchange e WHERE e.money.amount > :amount and e.money.currency = :currency")
    Set<Integer> getUsersRequestedGreaterThan(@Param(value = "amount") BigDecimal amount,
                                              @Param(value = "currency") Currency currency);
    @Query("SELECT e.userId " +
            "FROM Exchange e " +
            "WHERE e.money.currency = :currency " +
            "GROUP BY e.userId " +
            "HAVING SUM(e.money.amount) > :amount")
    Set<Integer> getUsersRequestedSummaryGreaterThan(@Param(value = "amount") BigDecimal amount,
                                                     @Param(value = "currency") Currency currency);
    @Query("SELECT e.money.currency AS s, e.convertedMoney.currency AS d " +
            "FROM Exchange e " +
            "GROUP BY s, d " +
            "ORDER BY COUNT(e)")
    List<Tuple> getRating();
}
Сервисы:
Кликните здесь для просмотра всего текста
Java
1
2
3
public interface ExchangeService {
    Exchange exchange(ExchangeDTO exchangeDTO);
}
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
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
 
import javax.money.convert.MonetaryConversions;
import java.util.Currency;
import java.util.Objects;
 
@Service
public class ExchangeServiceImpl implements ExchangeService {
    private static final Logger log = LoggerFactory.getLogger(ExchangeServiceImpl.class);
 
    private final ExchangeRepository exchangeRepository;
 
    private ExchangeServiceImpl(ExchangeRepository exchangeRepository) {
        this.exchangeRepository = exchangeRepository;
    }
 
    private static Money exchange(Money money, Currency to) {
        Objects.requireNonNull(money, "money can't be null");
        Objects.requireNonNull(to, "to can't be null");
 
        final var amount = money.getAmount();
        final var source = money.getCurrency().toString();
        final var monetaryAmount = org.javamoney.moneta.Money.of(amount, source);
 
        final var destination = to.toString();
        final var conversion = MonetaryConversions.getConversion(destination);
        final var convertedMonetaryAmount = monetaryAmount.with(conversion);
 
        final var convertedMoney = new Money();
        convertedMoney.setAmount(convertedMonetaryAmount.getNumberStripped());
        convertedMoney.setCurrency(to);
 
        return convertedMoney;
    }
 
    @Override
    public Exchange exchange(ExchangeDTO exchangeDTO) {
        Objects.requireNonNull(exchangeDTO, "exchangeDTO can't be null");
 
        log.info("Exchanging: " + exchangeDTO + "...");
        final var exchange = new Exchange();
        exchange.setUserId(exchangeDTO.getUserId());
 
        final var money = new Money();
        money.setAmount(exchangeDTO.getAmount());
        money.setCurrency(exchangeDTO.getSource());
        exchange.setMoney(money);
 
        final var destination = exchangeDTO.getDestination();
        final var convertedMoney = exchange(money, destination);
        exchange.setConvertedMoney(convertedMoney);
        log.info("Exchanged as: " + exchange);
 
        log.info("Saving to repository...");
        final var result = exchangeRepository.save(exchange);
        log.info("Saved as: " + result);
 
        return result;
    }
}
Java
1
2
3
4
5
6
7
8
9
import javax.persistence.Tuple;
import java.util.List;
import java.util.Set;
 
public interface StatisticsService {
    Set<Integer> getUsersRequestedGreaterThan$10kPerRequest();
    Set<Integer> getUsersRequestedSummaryGreaterThan$100k();
    List<Tuple> getRating();
}
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
import org.springframework.stereotype.Service;
 
import javax.persistence.Tuple;
import java.math.BigDecimal;
import java.util.Currency;
import java.util.List;
import java.util.Set;
 
@Service
public class StatisticsServiceImpl implements StatisticsService {
    private static final BigDecimal TEN_THOUSAND = BigDecimal.valueOf(10_000);
    private static final BigDecimal ONE_HUNDRED_THOUSAND = BigDecimal.valueOf(100_000);
    private static final Currency USD = Currency.getInstance("USD");
 
    private final ExchangeRepository exchangeRepository;
 
    private StatisticsServiceImpl(ExchangeRepository exchangeRepository) {
        this.exchangeRepository = exchangeRepository;
    }
 
    @Override
    public Set<Integer> getUsersRequestedGreaterThan$10kPerRequest() {
        return exchangeRepository.getUsersRequestedGreaterThan(TEN_THOUSAND, USD);
    }
 
    @Override
    public Set<Integer> getUsersRequestedSummaryGreaterThan$100k() {
        return exchangeRepository.getUsersRequestedSummaryGreaterThan(ONE_HUNDRED_THOUSAND, USD);
    }
 
    @Override
    public List<Tuple> getRating() {
        return exchangeRepository.getRating();
    }
}
Контроллеры:
Кликните здесь для просмотра всего текста
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
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import java.math.BigDecimal;
import java.util.Currency;
import java.util.Objects;
 
@RestController
public class ExchangeController {
    private final ExchangeService exchangeService;
 
    private ExchangeController(ExchangeService exchangeService) {
        this.exchangeService = exchangeService;
    }
 
    @GetMapping("/exchange")
    public ExchangeResponseDTO exchange(@RequestParam("user_id") int userId, @RequestParam("amount") BigDecimal amount,
                                        @RequestParam("source") Currency source, @RequestParam("destination") Currency destination) {
        Objects.requireNonNull(amount, "amount can't be null");
        Objects.requireNonNull(source, "source can't be null");
        Objects.requireNonNull(destination, "destination can't be null");
 
        final var exchangeDTOBuilder = new ExchangeDTOBuilder();
        final var exchangeDTO = exchangeDTOBuilder
                .setUserId(userId)
                .setAmount(amount)
                .setSource(source)
                .setDestination(destination)
                .createExchangeDTO();
        final var exchange = exchangeService.exchange(exchangeDTO);
 
        return ExchangeResponseDTO.createExchangeResponseDTO(exchange);
    }
}
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
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import javax.persistence.Tuple;
import java.util.List;
import java.util.Set;
 
@RestController
@RequestMapping("/stats")
public class StatisticsController {
    private final StatisticsService statisticsService;
 
    private StatisticsController(StatisticsService statisticsService) {
        this.statisticsService = statisticsService;
    }
 
    @GetMapping("/1")
    public Set<Integer> getUsersRequestedGreaterThan$10kPerRequest() {
        return statisticsService.getUsersRequestedGreaterThan$10kPerRequest();
    }
 
    @GetMapping("/2")
    public Set<Integer> getUsersRequestedSummaryGreaterThan$100k() {
        return statisticsService.getUsersRequestedSummaryGreaterThan$100k();
    }
 
    @GetMapping("/rating")
    public List<Tuple> getRating() {
        return statisticsService.getRating();
    }
}
Само приложение:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Зависимости:
Кликните здесь для просмотра всего текста
Code
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
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-all</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.javamoney</groupId>
            <artifactId>moneta</artifactId>
            <version>1.4.2</version>
            <type>pom</type>
        </dependency>
    </dependencies>

Не по теме:

Сильно не смейтесь над кодом, только недавно начал изучение Spring.


P. S. Дропнул пакеты, т. к. сенситив.

Не по теме:

P. P. S. Без слез не могу теперь взглянуть на свой код, особенно код контроллеров: чего только стоят названия методов и эндпоинтов - треш, угар и содомия. Тут даже мелкие грехи, типа невыделения интерфейсов контроллеров и т.п., меркнут перед этим.

0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.11.2020, 09:57
сформулируй пожалуйста конкретный вопрос
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
30.11.2020, 10:29  [ТС]
Цитата Сообщение от Arsegg Посмотреть сообщение
Пользователи, запросившие конвертацию больше 10 000 $ за один запрос.
Пользователи, суммарный запрошенный объём которых больше 100 000 $.
xoraxax, как это сделать?

Не могу понять, что требуется в задаче. Какие данные на вход подаются я выяснил - сумма. Но что с этим делать совершенно не ясно. Как и что должно быть на выходе.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
30.11.2020, 10:39
Цитата Сообщение от Arsegg Посмотреть сообщение
что должно быть на выходе.
Цитата Сообщение от Arsegg Посмотреть сообщение
Пользователи
...
2
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.11.2020, 10:41
Лучший ответ Сообщение было отмечено Arsegg как решение

Решение

ну вот заказчик тебе говорит: "сделай мне какую-то непонятную хрень", ты, наверно, у заказчика же спросишь, что он имеет ввиду, а не пойдешь гуглить, например?
Цитата Сообщение от Arsegg Посмотреть сообщение
Пользователи, запросившие конвертацию больше 10 000 $ за один запрос.
Цитата Сообщение от Arsegg Посмотреть сообщение
Пользователи, суммарный запрошенный объём которых больше 100 000 $.
тут, видимо, нужно вернуть лист пользователей, отфильтрованный по заданному условию.
Соответственно будут например 2 ендпоинта
List<User> getUsersConvertingMoreThan(BigDecimal amount);
List<User> getUsersWithTotalCashFlowMoreThan(BigDec imal amount);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.11.2020, 10:41
Помогаю со студенческими работами здесь

Сервис загрузки файлов Spring
Добрый день. Необходимо реализовать загрузку файлов в виде сервиса. Использую Spring версии 4.3.3. В контроллере следующая функция: ...

Реализация обмена валюты на сайте
Доброго времени суток! Вот хочу сделать так чтобы можно было менять доллары на бонусные баллы. На сайте при регистрации дается $300 и 7...

Приложение для кассы обмена валюты vs 2010
Приложение для кассы обмена валюты. Исходное значение (доллары или рубли) вводится в текстовое поле (TextBox). Курс доллара задан в...

В нарушении правил обмена валюты подозреваются четыре работника банка
пожалуйста помогие решить задачу=( В нарушении правил обмена валюты подозреваются четыре работника банка A, B, C и D. Известно, что ...

В нарушении правил обмена валюты подозреваются четыре работника банка
кто-нибудь помогите решить задачу на прологе. сколько ни бился, ничего не выходит В нарушении правил обмена валюты подозреваются четыре...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru