package GestaoDesportiva;
import java.util.Scanner;
import java.util.Formatter;
import java.io.File;
@author
public class GestaoDesportiva {
static final int MAX_PROVAS = 10;
static final int MAX_ATLETAS = 100;
static final String SEPARADOR = ";";
static final String EXTENSAO = ".txt";
static final String FICH_ATLETAS = "Atletas" + EXTENSAO;
static Scanner in = new Scanner(System.in).useDelimiter("\n");
static Formatter out = new Formatter(System.out);
private static String repeteTexto(String txt, int n) {
String s = "";
for (int i = 0; i < n; i++) {
s += txt;
}
return s;
}
private static int leValor(String msg, int min, int max) {
int v;
do {
out.format(msg + ":");
v = in.nextInt();
} while (v < min || v > max);
return v;
}
private static void visualizaInformacao(int n, String[] atletas, int[][] provas) {
for (int i = 0; i < n; i++) {
out.format("%s%n", atletas[i]);
}
}
private static int guardaInformacao(int n, String linha, String[] atletas) {
String[] temp = linha.split(SEPARADOR);
int idade, tam;
char categoria;
idade = Integer.parseInt(temp[2]);
if (idade <= 20) {
categoria = 'A';
} else if (idade < 30) {
categoria = 'B';
} else {
categoria = 'C';
}
tam = temp[0].trim().length() > 20 ? 20 : temp[0].trim().length();
atletas[n] = temp[1].trim().toUpperCase() +
temp[3].trim() +
categoria +
temp[0].substring(0, tam);
return n + 1;
}
private static int leInfoFicheiro(String nome_fich, String[] atletas, int [][]provas) throws Exception {
Scanner s = new Scanner(new File(nome_fich));
int n = 0;
while (s.hasNext() && n < MAX_ATLETAS) {
n = guardaInformacao(n, s.nextLine(), atletas);
}
s.close();
for(int i=0;i<n;i++){
for(int j=0;j<MAX_PROVAS;j++){
provas[i][j]=0;
}
}
return n;
}
private static void mostraInfoAtleta(int n, String[] atletas) {
int pos;
int nc = leValor("Número da camisola", 100, 999);
if ((pos = pesquisaAtletaPorNumCamisola(n, nc, atletas)) > -1) {
out.format("%n");
out.format("Nome :%s%n", atletas[pos].substring(5));
out.format("Sexo :%c%n", atletas[pos].charAt(0));
out.format("Categoria :%c%n", atletas[pos].charAt(4));
out.format("Nº de Camisola:%s%n", atletas[pos].substring(1, 4));
} else {
out.format("O atleta %d não foi encontrado!", nc);
}
}
private static int pesquisaAtletaPorNumCamisola(int n, int o_nc, String[] atletas) {
int ret = -1;
for (int i = 0; i < n; i++) {
if (atletas[i].substring(1, 4).equals(String.valueOf(o_nc))) {
ret = i;
break;
}
}
return ret;
}
public static boolean inserirTempoProva(int n, String nome_fich, int np, String[] atletas, int[][] provas) throws Exception {
int l_nc, l_tempo, pos;
if (np > 9) {
return false;
}
Scanner s = new Scanner(new File(nome_fich));
while (s.hasNext()) {
String[] temp = s.nextLine().split(SEPARADOR);
l_nc = Integer.parseInt(temp[0]);
l_tempo = Integer.parseInt(temp[1]);
if ((pos = pesquisaAtletaPorNumCamisola(n, l_nc, atletas)) > -1) {
provas[pos][np] = l_tempo;
}
}
s.close();
return true;
}
private static int menu() {
String msg;
msg = repeteTexto(" ", 35) + "Menu%n";
msg += repeteTexto("-", 80) + "%n";
msg += " 1) Ler de um ficheiro de texto a informação dos atletas para memória.%n";
msg += " 2) Mostrar no ecrã a informação de uma determinado atleta.%n";
msg += " 3) Inserir, a partir de um ficheiro de texto, o tempo dos atletas numa determinada prova.%n";
msg += " 4) Listar no ecrã toda a informação existente em memória central.%n";
msg += " 5) Remover da estrutura de dados toda a informação relativa a um atleta.%n";
msg += " Ordenar toda a informação que reside em memória organizada por:%n";
msg += " 61) número da camisola (ordem numérica)%n";
msg += " 62) ordem decrescente da média das provas.%n";
msg += " 7) Mostrar, para um determinado atleta, qual a melhor e a pior prova em que participaram.%n";
msg += " 8) Actualizar, via teclado, o tempo de uma prova de um determinado atleta dado o seu número de camisola.%n";
msg += " 9) Guardar toda a informação existente em memória num ficheiro de texto.%n";
msg += "10) Recuperar para a memória a informação guardada no ficheiro anterior.%n";
msg += "11) Inserir, via teclado, a informação de um atleta.%n";
msg += "12) Listar para o ecrã o tempo médio que um atleta, dado o seu número de camisola, realizou em todas as provas que participou.%n";
msg += "13) Listar para ficheiro de texto os três atletas que obtiveram a melhor média na classificação de todas as provas.%n";
msg += "%n";
msg += " 0) Terminar%n";
msg += "Opção?:";
out.format(msg);
return in.nextInt();
}
public static void main(String[] args) throws Exception {
String[] atletas = new String[MAX_ATLETAS];
int[][] provas = new int[MAX_ATLETAS][MAX_PROVAS];
int opcao, pos, nc, np;
int n_atletas = 0;
do {
opcao = menu();
switch (opcao) {
case 1:
n_atletas = leInfoFicheiro(FICH_ATLETAS, atletas, provas);
break;
case 2:
mostraInfoAtleta(n_atletas, atletas);
break;
case 3:
np = leValor("Número da prova", 1, MAX_PROVAS);
String n_fich = String.valueOf(np) + EXTENSAO;
inserirTempoProva(n_atletas, n_fich, np - 1, atletas, provas);
break;
case 4:
break;
case 5:
break;
case 61:
break;
case 62:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
case 11:
break;
case 12:
break;
case 13:
break;
case 0:
out.format("Fim...%n");
break;
default:
out.format("Opção inválida!%n");
}
} while (opcao != 0);
}
}