Estamos ofreciendo un nuevo servicio por Internet, al que entran bastantes clientes durante el día.
Tenemos un archivo de log (siempre en c: \ temp \ visites.txt), con los datos de las visitas realizadas durante el año 2011.
Los datos tienen la siguiente estructura y separadas siempre por espacio / s
Código {Código del cliente}
Fecha {Día en que se hizo la visita (AAAAMMDD)}
Hora {Hora en que se hizo la visita (HHMM)}
Duración {Tiempo de la visita en segundos}
Factura {1 >> se le factura / 0 >> gratis}
Por ejemplo: 5 20110103 1152 45 1
Quiere decir >>> Cliente: 5 / Fecha: 03/01/2011 / Hora: 11:52 / Duración: 45 seg / Factura: Si
El archivo en cuestión visites.txt lo tiene colgado en la plataforma.
Nos piden crear un programa modular (acciones / funciones) en java que permita con un menú, lo siguiente:
CUENTA! Los resultados mostrados en las preguntas son de ejemplo y no tienen por qué coincidir con los del archivo.
1. -) Dado el código de un cliente, listar (en el formato indicado) todas las visitas de un único mes.
Pregunta 1 Examen S.1K
>>>>>>> Entra el código del cliente: 8 Entra el mes: 3
Código Fecha Hora Duración CalFacturar
8 02/03/2011 14:52 45s Si
8 12/03/2011 09:47 13s No
8 12/03/2011 14:22 5s Si
8 22/03/2011 08:36 745s No
8 23/03/2011 14:51 84s No
Pulsa una tecla para volver al menú.
2. -) Dado el código de un cliente, listar por pantalla todas las visitas agrupadas por meses según el formato mostrado. Nos preguntará si queremos exportar esta información a un archivo de texto. El situaremos siempre en "c: \ temp \" y el nombre será: dades_client_ #. Txt
Pregunta 2 Examen S.1K
>>>>>>> Entra el código del cliente: 3
Facturadas Gratis
Mes N Visitas Duración N Visitas Duración
Enero 2 45s 2 124s
Febrero 10 213s 5 145s
Marzo 5 65S 6 34s
Abril 12 745s 2 45s
Mayo 17 134s 2 77S
Junio 16 87s 1 45s
Julio 12 84s 0 0s
Agosto 23 884s 2 85S
Septiembre 6 124s 1 222s
Octubre 19 992s 3 45s
Noviembre 21 84s 0 0s
Diciembre 26 1084 2 37s
TOTAL: 169 4541 26 859s
Quieres exportar estos datos en c: \ temp \ dades_client_3.txt? (S / n)
3. -) En previsión de que el negocio continúe, queremos saber qué clientes han entrado durante el año "X" y el total de visitas que han realizado cada uno de forma individual.
Pregunta 3 Examen S.1K
>>>>>>> Entra en: 2011
Código Cliente N Total Visitas
2633
912 60
85 64
11 38
222 16
Pulsa una tecla para volver al menú.
- import java.io.*;
- import java.util.*;
- import java.util.StringTokenizer;
- import cs1.Keyboard;
- public class Visitas {
- //Nos encuentra una determinada Palabra
- public static void EncuentraPalabra (String frase, String palabra)
- {
- String par;
- StringTokenizer toke;
- int ParCops = 0;
- frase = frase.toLowerCase();
- toke = new StringTokenizer (frase);
- while (toke.hasMoreTokens())
- {
- par = toke.nextToken();
- if (par.equals(palabra))
- ParCops++;
- }
- System.out.println(ParCops);
- }
- //Contador de lineas para utilizar en el bucle donde representaremos los resultados
- public static int conta_linies(String ruta_arxiu){
- BufferedReader fitxer;
- String linia="", missatge="";
- int i;
- try{
- FileReader fr = new FileReader(ruta_arxiu);
- fitxer = new BufferedReader(fr);
- linia = fitxer.readLine();
- i=0;
- while (linia != null){
- i++;
- linia = fitxer.readLine();
- }
- return i;
- }
- catch(java.io.FileNotFoundException fnfex){
- System.out.println("Arxiu no trobat: " + fnfex);
- return (0);
- }
- catch(java.io.IOException ioex) {
- return (0);
- }
- }
- //Nos devuelve una linea determinada en un String
- public static String devolver_linea(String info, int num_linea)
- {
- String word;
- StringTokenizer tokenizer;
- int wordCount=0;
- String retorno="";
- tokenizer = new StringTokenizer (info, "\n");
- while (tokenizer.hasMoreTokens())
- { word = tokenizer.nextToken();
- if (num_linea == wordCount) {
- retorno = word;
- }
- wordCount++;
- }
- return (retorno);
- }
- //Separa por Tokens cada linea
- public static String coger_token(String line, int num)
- {
- String word="";
- StringTokenizer tokenizer;
- int wordCount=0;
- tokenizer = new StringTokenizer (line);
- while (tokenizer.hasMoreTokens())
- {
- word = tokenizer.nextToken();
- wordCount++;
- if (wordCount==num)
- return(word);
- }
- return(word);
- }
- //Nos muestra las fechas en formato DD/MM/AAAA
- public static String ordena_fechas (String vector) {
- String mes=vector.substring(6)+"/"+vector.substring(4,6)+"/"+vector.substring(0,4);
- return(mes);
- }
- public static String anyo_fecha (String vector) {
- String anyo=vector.substring(0,4);
- return(anyo);
- }
- //Nos coge el mes
- public static String mes_fecha (String vector) {
- String mes=vector.substring(4,6);
- return(mes);
- }
- //Nos muestra la hora con :
- public static String dividir_hora (String vector) {
- String hora=vector.substring(0,2)+":"+vector.substring(2);
- return(hora);
- }
- //Muestra la facturacion por String (Si/No)
- public static String facturar (String vector) {
- String facturar="";
- if (vector.equals("0")) {
- facturar="No";
- }
- else {
- facturar ="Si";
- }
- return(facturar);
- }
- //CALCULO DE PRIMERA PARTE
- public static void Coge_Textos (String texto, String ruta, String cod, String entrada_mes) {
- int lineas, tel,aig,gas,park;
- String String_linea="", linea_1="", linea_2="", linea_3="", linea_4="",
- mes="",anyo="",categoria="",precio="" ,mes_final="", facturar_1="", div_hora="";
- lineas=conta_linies(ruta);
- String [][] vector = new String [lineas][5];
- System.out.println("Codigo: Fecha: Hora: Duracion: Hace falta facturar: ");
- for (int i=0; i<lineas; i++) {
- String_linea = devolver_linea(texto,i);
- vector[i][0]=coger_token(String_linea,1);
- vector[i][1]=coger_token(String_linea,2);
- vector[i][2]=coger_token(String_linea,3);
- vector[i][3]=coger_token(String_linea,4);
- vector[i][4]=coger_token(String_linea,5);
- mes_final=vector[i][1];
- facturar_1 = vector[i][4];
- div_hora = vector[i][2];
- if (vector[i][0].equals(cod)&& mes_fecha(mes_final).equals(entrada_mes)){
- System.out.println(vector[i][0]+ " "+ordena_fechas(mes_final)+ " "+dividir_hora(div_hora)+" "+vector[i][3]+" segundos "+
- " "+facturar(facturar_1));
- }
- /*System.out.println("Fecha: "+vector[i][1]);
- System.out.println("Hora: "+vector[i][2]);
- System.out.println("Duracion"+vector[i][3]);
- System.out.println("Hace falta facturar: "+vector[i][3]);*/
- }
- }
- //Da nombre de Mes
- public static String mes_nombre (String vector) {
- String mes=vector.substring(4,6);
- if (mes.equals("01")){
- mes="Enero";
- }
- else if (mes.equals("02")) {
- mes="Febrero";
- }
- else if (mes.equals("03")) {
- mes="Marzo";
- }
- else if (mes.equals("04")) {
- mes="Abril";
- }
- else if (mes.equals("05")) {
- mes="Mayo";
- }
- else if (mes.equals("06")) {
- mes="Junio";
- }
- else if (mes.equals("07")) {
- mes="Julio";
- }
- else if (mes.equals("08")) {
- mes="Agosto";
- }
- else if (mes.equals("09")) {
- mes="Septiembre";
- }
- else if (mes.equals("10")) {
- mes="Octubre";
- }
- else if (mes.equals("11")) {
- mes="Noviembre";
- }
- else if (mes.equals("12")) {
- mes="Diciembre";
- }
- return(mes);
- }
- //guardar strings de calculo segunda parte
- public static void Editar_Texto_In(String frase, String arxiu){
- try {
- BufferedWriter bw = new BufferedWriter(new FileWriter(arxiu,true));
- bw.append(frase);
- bw.newLine();
- bw.close();
- }
- catch (IOException e) {System.out.print("Error al escribir!");}
- }
- //CALCULO DE SEGUNDA PARTE
- public static void Coge_Textos_Mes (String texto, String ruta, String cod) {
- int lineas, tel,aig,gas,park;
- String String_linea="", linea_1="", linea_2="", linea_3="", linea_4="",
- mes="",anyo="",categoria="",precio="" ,mes_final="", facturar_1="", div_hora="";
- String crear_arxivo="";
- lineas=conta_linies(ruta);
- String [][] vector = new String [lineas][5];
- System.out.println("Fecha: Num Visitas Fact: Duracion: Num Visitas Gratis:: Duración: ");
- int durac_fact=0, durac_gratis=0,visitas_fact=0, visitas_gratis=0;
- String codigo_1="", texto_retorno="";
- System.out.println(" Crear archivo en ruta c:/temp/resultado.txt: s/n");crear_arxivo=Keyboard.readString();
- for (int i=0; i<lineas; i++) {
- String_linea = devolver_linea(texto,i);
- codigo_1 = coger_token(String_linea,1);
- if (codigo_1.equals(cod)){
- // vector[i][0]=coger_token(String_linea,1); //Codigo
- if (mes_nombre(coger_token(String_linea,2)).equals(mes_final)==false &&mes_final.equals("")==false) {
- System.out.println(mes_final+ " "+visitas_fact+" "+durac_fact+" segundos "+
- " "+visitas_gratis+" "+durac_gratis+" segundos");
- if (crear_arxivo.equals("s")) {
- Editar_Texto_In(mes_final+ " "+visitas_fact+" "+durac_fact+" segundos "+
- " "+visitas_gratis+" "+durac_gratis+" segundos","c:/temp/resultado.txt");
- }
- else if (!crear_arxivo.equals("s")){
- }
- durac_gratis=0;
- visitas_gratis=0;
- durac_fact=0;
- visitas_fact=0;
- }
- facturar_1 = coger_token(String_linea,5); //Facturar o Gratis
- mes_final=mes_nombre(coger_token(String_linea,2));
- if (facturar_1.equals("0")) {
- durac_gratis =Integer.parseInt( coger_token(String_linea,4));
- visitas_gratis = visitas_gratis + 1;
- }
- else {
- durac_fact = Integer.parseInt(coger_token(String_linea,4));
- visitas_fact = visitas_fact + 1;
- }
- }
- }
- if (crear_arxivo.equals("s")) {
- System.out.println("\nArchivo creado con exito\n");
- }
- else if (!crear_arxivo.equals("s")){
- System.out.println("\nNo se ha creado ningun archivo\n");
- }
- }
- //CALCULO DE TERCERA PARTE
- public static void Coge_Textos_Anyo (String texto, String ruta, String anyo) {
- int lineas, tel,aig,gas,park;
- String String_linea="";
- lineas=conta_linies(ruta);
- int [][] vector = new int [lineas][2];
- System.out.println("Codigo Cliente: N Total Visites: ");
- for (int i=0; i<lineas; i++) {
- String_linea = devolver_linea(texto,i);
- if (anyo_fecha(coger_token(String_linea,2)).equals(anyo)) {
- //validamos si el cliente ya sta en el array->
- int ivector_cliente=-1;
- for (int ivector=0; ivector<lineas; ivector++) {
- if (Integer.parseInt( coger_token(String_linea,1))==vector[ivector][0]){
- ivector_cliente=ivector;//me guardo la fila donde esta dado de alta el cliente en el array
- }
- }
- boolean blnExit=false;
- if ( ivector_cliente==-1){
- for (int ivector=0; ivector<lineas; ivector++) {
- if (vector[ivector][0]==0 && blnExit==false){
- ivector_cliente=ivector;//me guardo la fila donde daremos de alta el cliente
- blnExit=true;
- }
- }
- }
- vector[ivector_cliente][0]= Integer.parseInt( coger_token(String_linea,1));
- vector[ivector_cliente][1]= vector[ivector_cliente][1]+1;
- }
- }
- for (int ivectorito=0; ivectorito<lineas;ivectorito++){
- if (vector[ivectorito][0]>0) {
- System.out.println(" "+vector[ivectorito][0]+" "+ vector[ivectorito][1]);
- }}
- }
- //Lee el fichero de texto
- public static String Reader (String arxiu) {
- int i = 1, num_lletres; String s = "";
- BufferedReader entrada;
- boolean error = false;;
- try {
- String info = "";
- FileReader fr = new FileReader(arxiu); // Ruta l?gica de l'arxiu que volem llegir
- entrada = new BufferedReader(fr);
- while((s = entrada.readLine()) != null) // Mentre trobi linees en l'arxiu
- {
- info = info + s +"\n";
- }
- entrada.close();
- return(info);
- }
- catch(java.io.FileNotFoundException fnfex) {
- System.out.println("Arxiu no trobat: " + fnfex);}
- catch(java.io.IOException ioex) {}
- return"";
- }
- //Accion para crear un archivo .txt//
- public static void main(String[] args)throws IOException {
- String ruta="", texto="", palabra="gas", codigo="", mes="", anyo="";
- System.out.println("Entra el nom del fitxer de dades (entrada): ");
- ruta = Keyboard.readString();
- ruta = "c:\\temp\\"+ruta;
- texto = Reader(ruta);
- int opcion=0;
- boolean blnexit=false;
- while(blnexit==false){
- System.out.println("1.- Filtrar por codigo y mes");
- System.out.println("2.- Filtrar por mes comparando visitas");
- System.out.println("3.- Filtrar por anyos comparando visitas");
- System.out.println("4.- Salir");
- opcion=Keyboard.readInt();
- switch (opcion) {
- case 1:
- String tecla;
- System.out.println("----------------------------------------------------------------------------------");
- System.out.println("El fitxer conte el seguent: ");
- System.out.println("----------------------------------------------------------------------------------");
- System.out.println("Escribe el codigo que buscas: ");
- codigo=Keyboard.readString();
- System.out.println("Escribe el mes que buscas: ");
- mes=Keyboard.readString();
- Coge_Textos(texto,ruta,codigo,mes);
- System.out.println("\n Escribe una tecla para volver al menu.");
- tecla = Keyboard.readString();
- break;
- case 2:
- System.out.println("----------------------------------------------------------------------------------");
- System.out.println("El fitxer conte el seguent: ");
- System.out.println("----------------------------------------------------------------------------------");
- System.out.println("Escribe el codigo que buscas: ");
- codigo=Keyboard.readString();
- Coge_Textos_Mes(texto,ruta,codigo); //textos por mes - facturados y no facturados...
- break;
- case 3:
- String tecla2="";
- System.out.println("----------------------------------------------------------------------------------");
- System.out.println("El fitxer conte el seguent: ");
- System.out.println("----------------------------------------------------------------------------------");
- System.out.println("Escribe el anyo que buscas: ");
- anyo=Keyboard.readString();
- Coge_Textos_Anyo(texto,ruta,anyo);
- System.out.println("\n Escribe una tecla para volver al menu.");
- tecla2 = Keyboard.readString();
- break;
- case 4:
- blnexit=true;
- break;
- }
- }
- }}
No hay comentarios:
Publicar un comentario