Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ build/
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
.idea
*.iws
*.iml
*.ipr
Expand Down
16 changes: 0 additions & 16 deletions .idea/gradle.xml

This file was deleted.

1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ repositories {
dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
testImplementation("org.jfree:jfreechart:1.5.3")
}

tasks.test {
Expand Down
23 changes: 12 additions & 11 deletions src/main/java/ru/urfu/Main.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package ru.urfu;
package main.java.ru.urfu;

// import main.java.ru.urfu.console.Communicator;

import main.java.ru.urfu.presentation.controller.Controller;
import main.java.ru.urfu.presentation.view.ConsoleView;
import main.java.ru.urfu.resolver.Resolver;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
public static void main(String[] args) {
//TIP Press <shortcut actionId="ShowIntentionActions"/> with your caret at the highlighted text
// to see how GIGA IDE suggests fixing it.
System.out.printf("Hello and welcome!");
// Communicator.runChampionship();
var console = new ConsoleView();
var resolver = new Resolver();

for (int i = 1; i <= 5; i++) {
//TIP Press <shortcut actionId="Debug"/> to start debugging your code. We have set one <icon src="AllIcons.Debugger.Db_set_breakpoint"/> breakpoint
// for you, but you can always add more by pressing <shortcut actionId="ToggleLineBreakpoint"/>.
System.out.println("i = " + i);
}
var controller = new Controller(console, resolver);
controller.start();
}
}
14 changes: 14 additions & 0 deletions src/main/java/ru/urfu/console/Communicator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package main.java.ru.urfu.console;


import main.java.ru.urfu.parser.CsvParser;
import main.java.ru.urfu.resolver.Resolver;
import main.java.ru.urfu.mapper.Mapper;
import main.java.ru.urfu.drawer.Drawer;

import java.util.Scanner;

public class Communicator {
public static void runChampionship() {
}
}
43 changes: 43 additions & 0 deletions src/main/java/ru/urfu/drawer/Drawer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package main.java.ru.urfu.drawer;

import main.java.ru.urfu.model.Position;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.Plot;
import org.jfree.data.general.DefaultPieDataset;

import java.awt.*;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Map;
import java.util.Scanner;

public class Drawer {
public void drawDiagramPlayersByPosition(Map<Position, Long> positionsCount) {
DefaultPieDataset<String> dataset = new DefaultPieDataset<>();

positionsCount.forEach((pos, count) ->
dataset.setValue(pos.getTitleRu(), count)
);

JFreeChart chart = ChartFactory.createPieChart("Распределение по позициям", dataset, true, true, false);

PiePlot plot = (PiePlot) chart.getPlot();
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}: {1} ({2})",
new DecimalFormat("0"),
new DecimalFormat("0.00%")
));

plot.setSimpleLabels(true);
plot.setLabelBackgroundPaint(Color.WHITE);

ChartFrame frame = new ChartFrame("Распределение по позициям", chart);
frame.pack();
frame.setAlwaysOnTop(true);
frame.setVisible(true);
}
}
23 changes: 23 additions & 0 deletions src/main/java/ru/urfu/mapper/Mapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package main.java.ru.urfu.mapper;

import main.java.ru.urfu.model.Player;
import main.java.ru.urfu.model.Position;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Mapper {

private List<Player> players = new ArrayList<>();

public void setPlayers(List<Player> players) {
this.players = players;
}

public Map<Position, Long> getPlayersByPosition() {
return players.stream()
.collect(Collectors.groupingBy(Player::position, Collectors.counting()));
}
}
16 changes: 16 additions & 0 deletions src/main/java/ru/urfu/model/Player.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package main.java.ru.urfu.model;

public record Player(
String name,
String team,
String city,
Position position,
String nationality,
String agency,
int transferCost,
int goals,
int assists,
int yellowCards,
int redCards
) {
}
19 changes: 19 additions & 0 deletions src/main/java/ru/urfu/model/Position.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package main.java.ru.urfu.model;

public enum Position {
GOALKEEPER("Вратарь"),
DEFENDER("Защитник"),
MIDFIELD("Полузащитик"),
FORWARD("Нападающий");

private final String titleRu;

Position(String title){
this.titleRu = title;
}

public String getTitleRu(){
return this.titleRu;
}

}
47 changes: 47 additions & 0 deletions src/main/java/ru/urfu/parser/CsvParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package main.java.ru.urfu.parser;

import main.java.ru.urfu.model.Position;
import main.java.ru.urfu.model.Player;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;

public class CsvParser {
public static ArrayList<Player> parserCsvToList(String pathString) {
var path = Paths.get(pathString);
var scan = getScanner(path);
var playersList = new ArrayList<Player>();

scan.nextLine();
while (scan.hasNextLine()) {
playersList.add(parseRowToPlayer(scan.nextLine()));
}
return playersList;
}

private static Scanner getScanner(Path path) {
try {
return new Scanner(path);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

private static Player parseRowToPlayer(String row) {
var cells = row.split(";");
return new Player(cells[0],
cells[1],
cells[2],
Position.valueOf(cells[3]),
cells[4],
cells[5],
Integer.parseInt(cells[6]),
Integer.parseInt(cells[7]),
Integer.parseInt(cells[8]),
Integer.parseInt(cells[9]),
Integer.parseInt(cells[10]));
}
}
83 changes: 83 additions & 0 deletions src/main/java/ru/urfu/presentation/controller/Controller.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package main.java.ru.urfu.presentation.controller;

import main.java.ru.urfu.drawer.Drawer;
import main.java.ru.urfu.mapper.Mapper;
import main.java.ru.urfu.model.Player;
import main.java.ru.urfu.parser.CsvParser;
import main.java.ru.urfu.presentation.view.ConsoleView;
import main.java.ru.urfu.resolver.Resolver;

import java.util.List;
import java.util.Scanner;

public class Controller {
private final ConsoleView view;
private final Scanner scanner;
private final Resolver resolver;
private final Mapper mapper;
private final Drawer drawer;


public Controller(ConsoleView view, Resolver resolver) {
this.view = view;
this.resolver = resolver;
scanner = new Scanner(System.in);
drawer = new Drawer();
mapper = new Mapper();
}

public void start() {
view.showWelcome();
mainCycle:
while (true) {
view.showEnterCommand();

switch (scanner.nextLine()) {
case "F" -> onEnterFile();
case "1" -> onTask1Request();
case "2" -> onTask2Request();
case "3" -> onTask3Request();
case "4" -> onTask4Request();
case "G" -> onChartRequest();
default -> {
break mainCycle;
}
}
}
}

private void onEnterFile() {
view.showFilePath();
try {
List<Player> players = CsvParser.parserCsvToList(scanner.nextLine());
resolver.setPlayers(players);
mapper.setPlayers(players);
} catch (Exception e) {
this.onFileError();
}
}

private void onFileError() {
view.showFileError();
}

private void onTask1Request() {
view.showCountWithoutAgency(resolver.getCountWithoutAgency());
}

private void onTask2Request() {
view.showMaxDefenderGoalsCount(resolver.getMaxDefenderGoalsCount());
}

private void onTask3Request() {
view.showTheExpensiveGermanPlayerPosition(resolver.getTheExpensiveGermanPlayerPosition());
}

private void onTask4Request() {
view.showTheRudestTeam(resolver.getTheRudestTeam());
}

private void onChartRequest() {
drawer.drawDiagramPlayersByPosition(mapper.getPlayersByPosition());
}
}
43 changes: 43 additions & 0 deletions src/main/java/ru/urfu/presentation/view/ConsoleView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package main.java.ru.urfu.presentation.view;

public class ConsoleView {
public void showWelcome() {
System.out.println("""
Конанды:
F - выбрать файл для анализа
1 - решение задачи 1
2 - решение задачи 2
3 - решение задачи 3
4 - решение задачи 4
G - показать график
Любая иная клавиша - завершить работу""");
}

public void showEnterCommand() {
System.out.print("Введите команду: ");
}

public void showFilePath() {
System.out.print("Полный путь до .csv файла: ");
}

public void showFileError() {
System.out.println("Неправильный путь до файла");
}

public void showCountWithoutAgency(int count) {
System.out.printf("Количество игроков без агентсва: %d\n", count);
}

public void showMaxDefenderGoalsCount(int count) {
System.out.printf("Максимальное количество голов у защитника: %d\n", count);
}

public void showTheExpensiveGermanPlayerPosition(String position) {
System.out.printf("Название позиции самого дорогого немецкого игрока: %s\n", position);
}

public void showTheRudestTeam(String team) {
System.out.printf("Команда с наибольшим средним числом удалений на одного игрока: %s\n", team);
}
}
2 changes: 1 addition & 1 deletion src/main/java/ru/urfu/resolver/IResolver.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.urfu.resolver;
package main.java.ru.urfu.resolver;

public interface IResolver {
// Выведите количество игроков, интересы которых не представляет агентство.
Expand Down
Loading