Visitas


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ú.


  1.    import java.io.*;
  2.    import java.util.*;
  3.    import java.util.StringTokenizer;
  4.    import cs1.Keyboard;
  5.        
  6.    public class Visitas   {
  7.    
  8.    //Nos encuentra una determinada Palabra
  9.       public static void EncuentraPalabra (String frase, String palabra)       
  10.       {
  11.          String par;
  12.          StringTokenizer toke;
  13.          int ParCops = 0;
  14.      
  15.          frase = frase.toLowerCase();
  16.          toke = new StringTokenizer (frase);
  17.        
  18.          while (toke.hasMoreTokens())
  19.          {
  20.             par = toke.nextToken();
  21.             if (par.equals(palabra))
  22.                ParCops++;      
  23.          }                     
  24.          System.out.println(ParCops);
  25.      
  26.       }
  27.        
  28.         //Contador de lineas para utilizar en el bucle donde representaremos los resultados
  29.       public static int conta_linies(String ruta_arxiu){
  30.          BufferedReader fitxer;
  31.          String linia="", missatge="";
  32.          int i;
  33.      
  34.          try{
  35.             FileReader fr = new FileReader(ruta_arxiu);
  36.             fitxer = new BufferedReader(fr);
  37.             linia = fitxer.readLine();
  38.             i=0;
  39.             while (linia != null){
  40.                i++;
  41.                linia = fitxer.readLine();
  42.             }
  43.             return i;
  44.          }
  45.            
  46.             catch(java.io.FileNotFoundException fnfex){
  47.                System.out.println("Arxiu no trobat: " + fnfex);
  48.                return (0);
  49.             }
  50.             catch(java.io.IOException ioex) {
  51.                return (0);
  52.             }
  53.      
  54.       }
  55.    
  56.         //Nos devuelve una linea determinada en un String
  57.       public static String devolver_linea(String info, int num_linea)
  58.       {
  59.          String word;
  60.          StringTokenizer tokenizer;
  61.          int wordCount=0;
  62.          String retorno="";
  63.          tokenizer = new StringTokenizer (info, "\n");
  64.          while (tokenizer.hasMoreTokens())
  65.          {             word = tokenizer.nextToken();
  66.          
  67.             if (num_linea == wordCount) {
  68.                retorno = word;
  69.             }
  70.             wordCount++;
  71.          
  72.          }
  73.          return (retorno);
  74.      
  75.      
  76.       }
  77.    
  78.         //Separa por Tokens cada linea
  79.       public static String coger_token(String line, int num)
  80.       {
  81.          String word="";
  82.          StringTokenizer tokenizer;
  83.          int wordCount=0;
  84.      
  85.          tokenizer = new StringTokenizer (line);
  86.          while (tokenizer.hasMoreTokens())
  87.          {
  88.             word = tokenizer.nextToken();
  89.             wordCount++;
  90.             if (wordCount==num)
  91.                return(word);
  92.          }
  93.          return(word);
  94.      
  95.       }
  96.    
  97.         //Nos muestra las fechas en formato DD/MM/AAAA                                         
  98.       public static String ordena_fechas (String vector) {
  99.          String mes=vector.substring(6)+"/"+vector.substring(4,6)+"/"+vector.substring(0,4);
  100.      
  101.          return(mes);
  102.       }
  103.       public static String anyo_fecha (String vector) {
  104.          String anyo=vector.substring(0,4);
  105.      
  106.          return(anyo);
  107.       }
  108.         //Nos coge el mes
  109.       public static String mes_fecha (String vector) {
  110.          String mes=vector.substring(4,6);
  111.          return(mes);
  112.       }
  113.         //Nos muestra la hora con :
  114.       public static String dividir_hora (String vector) {
  115.          String hora=vector.substring(0,2)+":"+vector.substring(2);
  116.          return(hora);
  117.       }
  118.        
  119.         //Muestra la facturacion por String (Si/No)
  120.       public static String facturar (String vector) {
  121.          String facturar="";
  122.          if (vector.equals("0")) {
  123.             facturar="No";
  124.          }
  125.          else {
  126.             facturar ="Si";
  127.          }
  128.          return(facturar);
  129.       }
  130.    
  131.    //CALCULO DE PRIMERA PARTE
  132.       public static void Coge_Textos (String texto, String ruta, String cod, String entrada_mes)  {
  133.      
  134.      
  135.          int lineas, tel,aig,gas,park;
  136.          String String_linea="", linea_1="", linea_2="", linea_3="", linea_4="",
  137.            
  138.             mes="",anyo="",categoria="",precio="" ,mes_final="", facturar_1="", div_hora="";
  139.      
  140.      
  141.          lineas=conta_linies(ruta);
  142.          String [][] vector = new String [lineas][5];
  143.      
  144.          System.out.println("Codigo:            Fecha:                  Hora:           Duracion:               Hace falta facturar: ");
  145.          for (int i=0; i<lineas; i++) {
  146.          
  147.             String_linea = devolver_linea(texto,i);
  148.          
  149.          
  150.             vector[i][0]=coger_token(String_linea,1);
  151.             vector[i][1]=coger_token(String_linea,2);
  152.             vector[i][2]=coger_token(String_linea,3);
  153.             vector[i][3]=coger_token(String_linea,4);
  154.             vector[i][4]=coger_token(String_linea,5);
  155.             mes_final=vector[i][1];
  156.             facturar_1 = vector[i][4];
  157.             div_hora = vector[i][2];
  158.          
  159.          
  160.             if (vector[i][0].equals(cod)&& mes_fecha(mes_final).equals(entrada_mes)){
  161.              
  162.                        
  163.                System.out.println(vector[i][0]+ "               "+ordena_fechas(mes_final)+ "           "+dividir_hora(div_hora)+"              "+vector[i][3]+" segundos               "+
  164.                  
  165.                   "             "+facturar(facturar_1));
  166.            
  167.             }  
  168.                 /*System.out.println("Fecha: "+vector[i][1]);
  169.             System.out.println("Hora: "+vector[i][2]);
  170.          
  171.             System.out.println("Duracion"+vector[i][3]);
  172.              System.out.println("Hace falta facturar: "+vector[i][3]);*/
  173.          }
  174.       }
  175.        
  176.         //Da nombre de Mes
  177.       public static String mes_nombre (String vector) {
  178.          String mes=vector.substring(4,6);
  179.          if (mes.equals("01")){
  180.             mes="Enero";
  181.          }
  182.          else if (mes.equals("02")) {
  183.             mes="Febrero";
  184.          }  
  185.          else if (mes.equals("03")) {
  186.             mes="Marzo";
  187.          }
  188.          else if (mes.equals("04")) {
  189.             mes="Abril";
  190.          }
  191.          else if (mes.equals("05")) {
  192.             mes="Mayo";
  193.          }
  194.          else if (mes.equals("06")) {
  195.             mes="Junio";
  196.          }
  197.          else if (mes.equals("07")) {
  198.             mes="Julio";
  199.          }
  200.          else if (mes.equals("08")) {
  201.             mes="Agosto";
  202.          }
  203.          else if (mes.equals("09")) {
  204.             mes="Septiembre";
  205.          }
  206.          else if (mes.equals("10")) {
  207.             mes="Octubre";
  208.          }
  209.          else if (mes.equals("11")) {
  210.             mes="Noviembre";
  211.          }
  212.          else if (mes.equals("12")) {
  213.             mes="Diciembre";
  214.          }
  215.      
  216.          return(mes);
  217.       }
  218.    
  219.    //guardar strings de calculo segunda parte
  220.       public static void Editar_Texto_In(String frase, String arxiu){
  221.          try {
  222.             BufferedWriter bw = new BufferedWriter(new FileWriter(arxiu,true));
  223.             bw.append(frase);
  224.             bw.newLine();
  225.             bw.close();
  226.          }
  227.             catch (IOException e) {System.out.print("Error al escribir!");}
  228.       }
  229.    //CALCULO DE SEGUNDA PARTE
  230.    
  231.       public static void Coge_Textos_Mes (String texto, String ruta, String cod)  {
  232.      
  233.      
  234.          int lineas, tel,aig,gas,park;
  235.          String String_linea="", linea_1="", linea_2="", linea_3="", linea_4="",
  236.            
  237.             mes="",anyo="",categoria="",precio="" ,mes_final="", facturar_1="", div_hora="";
  238.          String crear_arxivo="";
  239.      
  240.          lineas=conta_linies(ruta);
  241.          String [][] vector = new String [lineas][5];
  242.      
  243.      
  244.          System.out.println("Fecha:             Num Visitas Fact:               Duracion:               Num Visitas Gratis::            Duración:               ");
  245.          int durac_fact=0, durac_gratis=0,visitas_fact=0, visitas_gratis=0;
  246.          String codigo_1="", texto_retorno="";
  247.          System.out.println("           Crear archivo en ruta c:/temp/resultado.txt: s/n");crear_arxivo=Keyboard.readString();
  248.      
  249.          for (int i=0; i<lineas; i++) {
  250.             String_linea = devolver_linea(texto,i);
  251.             codigo_1 = coger_token(String_linea,1);
  252.             if (codigo_1.equals(cod)){
  253.             //  vector[i][0]=coger_token(String_linea,1); //Codigo
  254.            
  255.            
  256.                if (mes_nombre(coger_token(String_linea,2)).equals(mes_final)==false &&mes_final.equals("")==false) {
  257.                   System.out.println(mes_final+ "               "+visitas_fact+"                "+durac_fact+" segundos         "+
  258.                      
  259.                      "          "+visitas_gratis+"              "+durac_gratis+" segundos");
  260.                        
  261.                        
  262.                   if (crear_arxivo.equals("s")) {
  263.                      Editar_Texto_In(mes_final+ "               "+visitas_fact+"                        "+durac_fact+" segundos         "+
  264.                        
  265.                         "               "+visitas_gratis+"                      "+durac_gratis+" segundos","c:/temp/resultado.txt");
  266.                   }
  267.                   else if (!crear_arxivo.equals("s")){
  268.                  
  269.                   }
  270.                        
  271.                   durac_gratis=0;
  272.                   visitas_gratis=0;
  273.                   durac_fact=0;
  274.                   visitas_fact=0;
  275.                }
  276.                
  277.                facturar_1 = coger_token(String_linea,5);    //Facturar o Gratis
  278.                mes_final=mes_nombre(coger_token(String_linea,2));
  279.                if (facturar_1.equals("0")) {
  280.                   durac_gratis =Integer.parseInt( coger_token(String_linea,4));
  281.                   visitas_gratis = visitas_gratis + 1;
  282.                }
  283.                else {
  284.                   durac_fact = Integer.parseInt(coger_token(String_linea,4));
  285.                
  286.                   visitas_fact = visitas_fact + 1;
  287.                }              
  288.             }  
  289.          
  290.          
  291.          
  292.          }
  293.          if (crear_arxivo.equals("s")) {
  294.             System.out.println("\nArchivo creado con exito\n");
  295.          }
  296.          else if (!crear_arxivo.equals("s")){
  297.             System.out.println("\nNo se ha creado ningun archivo\n");                          
  298.          }
  299.       }
  300.    
  301.    //CALCULO DE TERCERA PARTE
  302.       public static void Coge_Textos_Anyo (String texto, String ruta, String anyo)  {
  303.      
  304.      
  305.          int lineas, tel,aig,gas,park;
  306.          String String_linea="";
  307.      
  308.      
  309.          lineas=conta_linies(ruta);
  310.          int [][] vector = new int [lineas][2];
  311.      
  312.          System.out.println("Codigo Cliente:            N Total Visites: ");
  313.      
  314.          for (int i=0; i<lineas; i++) {
  315.          
  316.             String_linea = devolver_linea(texto,i);
  317.             if (anyo_fecha(coger_token(String_linea,2)).equals(anyo)) {
  318.            
  319.                //validamos si el cliente ya sta en el array->
  320.                int ivector_cliente=-1;
  321.                for (int ivector=0; ivector<lineas; ivector++) {
  322.                   if (Integer.parseInt( coger_token(String_linea,1))==vector[ivector][0]){
  323.                      ivector_cliente=ivector;//me guardo la fila donde esta dado de alta el cliente en el array
  324.                   }
  325.                }
  326.                boolean blnExit=false;
  327.                if   ( ivector_cliente==-1){
  328.                   for (int ivector=0; ivector<lineas; ivector++) {
  329.                      if (vector[ivector][0]==0 && blnExit==false){
  330.                         ivector_cliente=ivector;//me guardo la fila donde daremos de alta el cliente
  331.                         blnExit=true;
  332.                      }
  333.                   }
  334.                }
  335.                vector[ivector_cliente][0]= Integer.parseInt( coger_token(String_linea,1));
  336.                vector[ivector_cliente][1]= vector[ivector_cliente][1]+1;
  337.            
  338.             }
  339.          
  340.          }
  341.          for (int ivectorito=0; ivectorito<lineas;ivectorito++){
  342.             if (vector[ivectorito][0]>0) {
  343.                System.out.println("             "+vector[ivectorito][0]+"               "+ vector[ivectorito][1]);
  344.             }}
  345.        
  346.       }
  347.    
  348.    
  349.    //Lee el fichero de texto
  350.       public static String Reader (String arxiu) {
  351.          int i = 1, num_lletres;  String s = "";
  352.      
  353.          BufferedReader entrada;
  354.          boolean error = false;;
  355.          
  356.          try {
  357.             String info = "";
  358.             FileReader fr = new FileReader(arxiu);  // Ruta l?gica de l'arxiu que volem llegir
  359.             entrada = new BufferedReader(fr);
  360.             while((= entrada.readLine()) != null)  // Mentre trobi linees en l'arxiu
  361.             {
  362.                info = info + s +"\n";
  363.              
  364.                
  365.            
  366.             }
  367.             entrada.close();
  368.             return(info);
  369.          }
  370.             catch(java.io.FileNotFoundException fnfex) {
  371.                System.out.println("Arxiu no trobat: " + fnfex);}
  372.          
  373.             catch(java.io.IOException ioex) {}
  374.          return"";
  375.       }
  376.        
  377.         //Accion para crear un archivo .txt//
  378.          
  379.    
  380.    
  381.    
  382.       public static void main(String[] args)throws IOException {
  383.          String ruta="", texto="", palabra="gas", codigo="", mes="", anyo="";
  384.          System.out.println("Entra el nom del fitxer de dades (entrada): ");
  385.          ruta = Keyboard.readString();
  386.          ruta = "c:\\temp\\"+ruta;
  387.        
  388.          texto = Reader(ruta);
  389.      
  390.        
  391.          int opcion=0;
  392.          boolean blnexit=false;
  393.        
  394.        
  395.      
  396.          while(blnexit==false){
  397.          
  398.          
  399.             System.out.println("1.- Filtrar por codigo y mes");
  400.             System.out.println("2.- Filtrar por mes comparando visitas");
  401.             System.out.println("3.- Filtrar por anyos comparando visitas");
  402.             System.out.println("4.- Salir");
  403.          
  404.             opcion=Keyboard.readInt();
  405.          
  406.          
  407.             switch (opcion) {
  408.              
  409.                case 1:
  410.                   String tecla;
  411.                   System.out.println("----------------------------------------------------------------------------------");            
  412.                   System.out.println("El fitxer conte el seguent: ");
  413.                   System.out.println("----------------------------------------------------------------------------------");            
  414.                   System.out.println("Escribe el codigo que buscas: ");
  415.                   codigo=Keyboard.readString();
  416.                   System.out.println("Escribe el mes que buscas: ");
  417.                   mes=Keyboard.readString();
  418.                   Coge_Textos(texto,ruta,codigo,mes);
  419.                   System.out.println("\n                                Escribe una tecla para volver al menu.");
  420.                   tecla = Keyboard.readString();
  421.                
  422.                   break;
  423.                case 2:
  424.                
  425.                   System.out.println("----------------------------------------------------------------------------------");            
  426.                   System.out.println("El fitxer conte el seguent: ");
  427.                   System.out.println("----------------------------------------------------------------------------------");            
  428.                
  429.                   System.out.println("Escribe el codigo que buscas: ");
  430.                   codigo=Keyboard.readString();
  431.                   Coge_Textos_Mes(texto,ruta,codigo);  //textos por mes - facturados y no facturados...
  432.                
  433.                
  434.                   break;
  435.            
  436.                case 3:
  437.                   String tecla2="";
  438.                   System.out.println("----------------------------------------------------------------------------------");            
  439.                   System.out.println("El fitxer conte el seguent: ");
  440.                   System.out.println("----------------------------------------------------------------------------------");            
  441.                   System.out.println("Escribe el anyo que buscas: ");
  442.                   anyo=Keyboard.readString();
  443.                   Coge_Textos_Anyo(texto,ruta,anyo);
  444.                   System.out.println("\n                                Escribe una tecla para volver al menu.");
  445.                   tecla2 = Keyboard.readString();
  446.                
  447.                   break;
  448.            
  449.                case 4:
  450.                   blnexit=true;
  451.                   break;
  452.             }  
  453.          }
  454.        
  455.       }}

No hay comentarios:

Publicar un comentario