elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Top 20 herramientas Hacking más populares de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Como guardar productos nuevos introducidos desde teclado? java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como guardar productos nuevos introducidos desde teclado? java  (Leído 2,430 veces)
ibai92

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Como guardar productos nuevos introducidos desde teclado? java
« en: 26 Enero 2018, 12:35 pm »

Buenas estoy empezando con java y tengo que resolver un problema. Pero es el primero que me han puesto y es demasiado dificil para ser la primera vez. Les voy a dejar el problema en cuestion, y el codigo que he llegado a escribir.
La duda que querria que me resolvieran es como hago para que al introducir datos desde el teclado, estos se guarden en determinados atributos. Cuando vean el enunciado lo entenderan.

A por cierto, agradeceria que si no saben como ayudarme al menos me pasaran algun enlace, o dijeran pues mira no lo se. No esta bien preguntar algo y que no te respondan cuando tienes prisa por seguir estudiando otras cosas.


Crea una aplicación en Java que permita almacenar la información de los productos de una empresa. La información que se desea almacenar de cada producto es: el código (entero), la descripción (texto) y el peso (valor real con parte decimal).
El programa ofrecerá cinco opciones: 1. Introducir los productos; 2. Visualizarlos en pantalla; 3. Guardar archivo de texto; 4. Leer archivo; y 5. Salir.

Realiza las siguientes acciones:

1. Crea la clase producto con las propiedades y el constructor que permita inicializar con todos los campos.

2. Crea un método o función que visualice el menú.

3. Crea un método o función por cada opción del menú (introducirProds(), visualizaProds(), guardaProds(), leeProds()).

4. Crea el programa principal que use los métodos anteriores.

El archivo de texto tendrá el siguiente formato:

Debes tener en cuenta los siguientes aspectos:

Supón que se dispone de los siguientes métodos (es decir, se pueden usar aunque no se implementen):

inputInt() // Devuelve un entero introducido por teclado Ej a =inputInt();

inputFloat() // Devuelve un float introducido por teclado Ej b =inputInt();

inputString() // Devuelve un String introducido por teclado Ej str =inputString();

output/outptln(String txt) // Equivalente a System.out.print/println()

Se ofrece la siguiente información para almacenar / leer el fichero:   //Yo use Scanner, al menos para el menu

BufferedWriter bw = new BufferedWriter(new FileWriter(nombreFichero, true));

PrintWriter pw = new PrintWriter(bw);

BufferedReader bw = new BufferedReader(new FileReader(nombreFichero, true));

PrintWriter pw = new PrintWriter(bw);

Para almacenar la información de los productos en memoria, se puede utilizar un array o un ListArray..

Lo que llevo hecho hasta ahora:

import java.util.Scanner;
/**
 *
 * @author ibai
 */
public class Main {
    static int num;        
    static Scanner sc = new Scanner(System.in);
    
    
    public static void main(String [] args) {
        
            do{                  
                System.out.println("\n1-Introducir nuevo producto.\n2-Visualizar productos.\n3-Guardar archivo de texto."
+ "\n4-Leer archivo.\n5-Salir");
                num= sc.nextInt();
            }while(num < 0 || num > 5);
            
            do{
                switch(num){
                    case 1:                        
                        System.out.println("Ingrese el nombre y el peso del nuevo producto");                            
                        
                        do{
                      
                            
                        }while(num<0 || num>5);
                    break;
                
                    case 2:
                        System.out.println("Estos son los productos existentes");
                        
                        do{
                            
                        }while(num<0 || num>5);
                    break;

                    case 3:
                        System.out.println("Guardando productos desde archivo externo");
                        
                        do{
                            
                        }while(num<0 || num>5);
                    break;

                    case 4:
                        System.out.println("Visualizando productos desde archivo externo");
                        
                        do{
                            
                        }while(num<0 || num>5);
                    break;

                    
                }

            }while(num != 5);      
    }    
}

-----------------------------------------------------------------------Producto

public class Producto extends Main{
    private int codigo=numProds;
    private static int numProds;
    Producto(){
        numProds++;
    }
        
    private String descripcion;
        public String getDescripcion(String desc) {
        return descripcion=desc;
    }
        public void setDescripcion(String desc) {
        this.descripcion = desc;
    }
        
    private float peso;
    public float getPeso(float peso) {
        return peso;
    }
    public void setPeso(float peso) {
        this.peso = peso;
    }
        
}


« Última modificación: 26 Enero 2018, 12:38 pm por ibai92 » En línea

rub'n


Desconectado Desconectado

Mensajes: 1.116


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Como guardar productos nuevos introducidos desde teclado? java
« Respuesta #1 en: 27 Enero 2018, 20:54 pm »

Hola homie,

Resolviste con la misma clase Scanner puedes leer y escribir ficheros, guardar leer

tengo un ejemplo que te va a servir.

Para la próxima cuando quieras introducir código aquí usa Código GeSHi y escoge en este  caso java


En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen King.
ibai92

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Como guardar productos nuevos introducidos desde teclado? java
« Respuesta #2 en: 28 Enero 2018, 13:36 pm »

Valee muchas gracias Rub'n ,  no sabia la manera de poner el codigo sorry.

Entiendo seguire estudiando el Scanner, muchas gracias

El caso es que pretenden que haga el ejercicio sin haber dado muchas cosas de java,como Scanner. Pero me da igual voy a estudiar java y cuando tenga todos los conceptos lo hare como mejor crea.
Vuelvo a poner el codigo con el GeSHi, para verlo yo al menos
Saludos.

Código
  1. import java.util.Scanner;
  2. /**
  3.  *
  4.  * @author ibai
  5.  */
  6. public class Main {
  7.    static int num;        
  8.    static Scanner sc = new Scanner(System.in);
  9.  
  10.  
  11.    public static void main(String [] args) {
  12.  
  13.            do{                  
  14.                System.out.println("\n1-Introducir nuevo producto.\n2-Visualizar productos.\n3-Guardar archivo de texto."
  15. + "\n4-Leer archivo.\n5-Salir");
  16.                num= sc.nextInt();
  17.            }while(num < 0 || num > 5);
  18.  
  19.            do{
  20.                switch(num){
  21.                    case 1:                        
  22.                        System.out.println("Ingrese el nombre y el peso del nuevo producto");                            
  23.  
  24.                        do{
  25.  
  26.  
  27.                        }while(num<0 || num>5);
  28.                    break;
  29.  
  30.                    case 2:
  31.                        System.out.println("Estos son los productos existentes");
  32.  
  33.                        do{
  34.  
  35.                        }while(num<0 || num>5);
  36.                    break;
  37.  
  38.                    case 3:
  39.                        System.out.println("Guardando productos desde archivo externo");
  40.  
  41.                        do{
  42.  
  43.                        }while(num<0 || num>5);
  44.                    break;
  45.  
  46.                    case 4:
  47.                        System.out.println("Visualizando productos desde archivo externo");
  48.  
  49.                        do{
  50.  
  51.                        }while(num<0 || num>5);
  52.                    break;
  53.  
  54.  
  55.                }
  56.  
  57.            }while(num != 5);      
  58.    }    
  59. }

Código
  1. public class Producto extends Main{
  2.    private int codigo=numProds;
  3.    private static int numProds;
  4.    Producto(){
  5.        numProds++;
  6.    }
  7.  
  8.    private String descripcion;
  9.        public String getDescripcion(String desc) {
  10.        return descripcion=desc;
  11.    }
  12.        public void setDescripcion(String desc) {
  13.        this.descripcion = desc;
  14.    }
  15.  
  16.    private float peso;
  17.    public float getPeso(float peso) {
  18.        return peso;
  19.    }
  20.    public void setPeso(float peso) {
  21.        this.peso = peso;
  22.    }
  23.  
  24. }
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.116


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Como guardar productos nuevos introducidos desde teclado? java
« Respuesta #3 en: 28 Enero 2018, 19:00 pm »

Hola homie que talco? bueno si por lo menos veo tu interés, el primer post era el que tenias que actualizar  ;D pero buee  :rolleyes:

mira esto


Código
  1. package util;
  2. public interface ShowData {
  3.  
  4.    static <T> void print(final T s)   {System.out.print(s);}
  5.    static <T> void println(final T s) {System.out.println(s);}
  6.    static <T> void err(final T s)     {System.err.println(s);}
  7.    static <T> void printf(final String format,final T ...s) {
  8.        System.out.printf(format,s);
  9.    }
  10.    }
  11.    default void mostrar(String s) {
  12.        System.out.println(s);
  13.    }
  14. }
  15.  

Aquí un ejemplo con la interface java.nio.file.Path, es el entry point para trabajar con la Api NIO.2, Un objeto Path representa una ruta jerárquica en el sistema de almacenamiento a un archivo o directorio.


Código
  1. package testing;
  2.  
  3. import util.ShowData;
  4. import javax.swing.*;
  5. import java.io.IOException;
  6. import java.nio.file.*;
  7. import java.util.Scanner;
  8.  
  9. //La clase Files, no confundir con File de java.io se usa para obtener información sobre archivos y directorios
  10. public class InfoArchivoDirectorio {
  11.  
  12.    private static final Scanner LEER = new Scanner(System.in);
  13.  
  14.    public InfoArchivoDirectorio() throws IOException {
  15.        init();
  16.    }
  17.   private void init() throws IOException {
  18.        ShowData.print("Introduce un nombre de directorio o archivo: ");
  19.        String s = LEER.next();
  20.  
  21.        //create a PathObject
  22.        Path path = Paths.get(s); //Clase Factoria Paths para obtener una referencia a un archivo o directorio
  23.  
  24.        if(Files.exists(path)) { //si la ruta existe, mostrar salida acerca de ella
  25.            final StringBuilder sb = new StringBuilder();
  26.            sb.append(path.getFileName()).append(" Existe\n");
  27.            sb.append(Files.isDirectory(path) ? "Es un directorio": "No es un directorio" ).append("\n");
  28.            sb.append(path.isAbsolute() ? "Es una ruta absoluta":"NO es una ruta absoluta").append("\n");
  29.  
  30.            //LinkOption.NOFOLLOW_LINKS para ignorar enlaces simbolicos
  31.            //Files.getLastModifiedTime(path,LinkOption.NOFOLLOW_LINKS);
  32.            sb.append("Ultima modificación: ").append(Files.getLastModifiedTime(path,LinkOption.NOFOLLOW_LINKS)).append("\n");
  33.            sb.append("Tamaño: ").append(Files.size(path)).append(" bytes\n");
  34.            sb.append("Obtener ruta absoluta: ").append(path.toAbsolutePath()).append("\n");
  35.            ShowData.println(sb.toString());
  36.  
  37.            if(Files.isDirectory(path)) { // listando la salida del directorio
  38.                ShowData.println("Directory contents: ");
  39.                //objeto para iterar a través de contenidos de los directorios
  40.                DirectoryStream<Path> ds = Files.newDirectoryStream(path);
  41.                ds.forEach(ShowData::println);
  42.            }
  43.        } else {
  44.            JOptionPane.showMessageDialog(null,"No existe "+path);
  45.        }
  46.    }
  47.    public static void main(String ...PoC) throws IOException {
  48.        new InfoArchivoDirectorio();
  49.    }
  50. }
  51.  
  52.  



Esto es lectura de un archivo de acceso secuencial(En tu caso), existe también de acceso directo o Aleatorio

Código
  1. package testing;
  2.  
  3. import testing.Producto;
  4. import util.ShowData;
  5. import javax.swing.*;
  6. import java.io.FileNotFoundException;
  7. import java.util.Formatter;
  8. import java.util.FormatterClosedException;
  9. import java.util.NoSuchElementException;
  10. import java.util.Scanner;
  11.  
  12. /*
  13. Archivo de acceso secuencial
  14.  */
  15. public class CreateTextFile {
  16.  
  17.   private static Scanner leer;
  18.    private static Formatter output; // salida al text del archivo, con formato
  19.    private Producto producto = new Producto();
  20.  
  21.    public CreateTextFile(final Scanner scanner) {
  22.        this.leer = scanner;
  23.        abrirArchivo();
  24.        agregarItems();
  25.        cerrar();
  26.    }
  27.  
  28.    private void abrirArchivo() {
  29.        try {                               //path relativo
  30.            output = new Formatter("Producto.txt"); //open de File , la JVM asume que el directorio completo es donde esta aplicación se ejecuta
  31.  
  32.        } catch (SecurityException ex) {
  33.            ShowData.err("Acceso denegado. terminando...");
  34.            //se origina si el usuario no tiene permisos para escribir aqui
  35.            System.exit(1); //termiando el soft
  36.        } catch (FileNotFoundException e) {
  37.            ShowData.err("Error al abrir, terminando...");
  38.            System.exit(1);
  39.        }
  40.    }
  41.  
  42.    //add info
  43.    private void agregarItems() {
  44.        int contador = 0;
  45.  
  46.        ShowData.println("Código - " + "Descripción - " + "Peso ");
  47.        ShowData.print("_");
  48.        while (true) {
  49.            try {
  50.                //seteamos los valores de producto
  51.                producto.setCodigo(leer.nextInt());
  52.                producto.setDescripcion(leer.next());
  53.                producto.setPeso(leer.nextFloat());
  54.  
  55.                //podemos tambien instanciar asi
  56.                //Producto producto = new Producto(leer.nextInt(),leer.next(),leer.nextFloat());
  57.  
  58.                output.format("%d %s %.2f%n", producto.getCodigo(), producto.getDescripcion(), producto.getPeso());
  59.  
  60.                contador ++;
  61.            } catch (FormatterClosedException ex) {
  62.                ShowData.err("Error escribiendo archivo, terminado");
  63.                break;
  64.            } catch (NoSuchElementException ex) {
  65.                ShowData.err("Entrada invalida, intenta de nuevo"); //Solo si datos incorrectos por teclado
  66.                leer.nextLine();// se habilitara el input de nuevo
  67.            }
  68.  
  69.            ShowData.print("_");
  70.  
  71.            if (contador > 1) {
  72.                ShowData.print("salir ? ");
  73.                String salir = leer.next();
  74.                if (salir.equalsIgnoreCase("si")) {
  75.                    break;
  76.                } else {
  77.                    contador = 0; //resetemos el contador para pedir 3 productos mas
  78.                    leer.nextLine();
  79.                    ShowData.print("_");
  80.                    continue;
  81.                }
  82.            }
  83.        }
  84.  
  85.        ShowData.println("Escritura en archivo lista");
  86.        JOptionPane.showMessageDialog(null, "Escritura lista");
  87.  
  88.    }
  89.  
  90.    private void cerrar() {
  91.        if (output != null)
  92.            output.close();
  93.    }
  94.  
  95.        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  96.        new CreateTextFile(new Scanner(System.in));
  97.    }
  98.  




Luego para leer el archivo Producto.txt haces así

Código
  1.  
  2. import util.ShowData;
  3.  
  4. import java.io.IOException;
  5. import java.nio.file.Paths;
  6. import java.util.NoSuchElementException;
  7. import java.util.Scanner;
  8.  
  9. public class LeerArchivo{
  10.  
  11.    private static Scanner leer;
  12.  
  13.    public LeerArchivo() {
  14.        abrir();
  15.        leer();
  16.        cerrar();
  17.    }
  18.  
  19.    private void abrir() {
  20.        try {
  21.            //abrir Archivo Producto.txt , la JVM busca en el mismo directorio donde se
  22.           //ejecuta la app, cuando el path no se indica
  23.            leer = new Scanner(Paths.get("Producto.txt"));  
  24.        }catch (IOException e) {
  25.            ShowData.err("Error al abrir archivo, terminando...");
  26.            System.exit(1);
  27.        }
  28.    }
  29.    //leer info de archivo
  30.    private void leer() {                                                          
  31.        ShowData.printf("%-10s%-12s%10s%n","Codigo","Descripción","Peso");
  32.        try {
  33.            while(leer.hasNext()) {
  34.                //mostrando contenido del archivo
  35.                ShowData.printf("%-10d%-12s%10.2f%n",leer.nextInt(),leer.next(),leer.nextFloat());
  36.            }
  37.        }catch (NoSuchElementException ex) {
  38.            ShowData.err("Archivo con formado de manera incorrecta, terminando...");
  39.  
  40.        }catch (IllegalStateException ex) {
  41.            ShowData.err("Error leyendo Archivo, terminando...");
  42.        }
  43.    }
  44.  
  45.    private void cerrar() {
  46.        if(leer != null)
  47.            leer.close();
  48.    }
  49.  
  50.    public static void main(String ...PoC) throws IOException {
  51.        new LeerArchivo();
  52.    }
  53. }
  54.  

« Última modificación: 30 Enero 2018, 05:44 am por rub'n » En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen King.
ibai92

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Como guardar productos nuevos introducidos desde teclado? java
« Respuesta #4 en: 29 Enero 2018, 11:41 am »

Oye amigo gracias por pasarme ese codigo  :o , dejame echarle un vistazo. Y seguramente tendre bastantes dudas en su ejecucion, ya que veo algunas cosas que aun no he visto.
Saludos
En línea

ibai92

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Como guardar productos nuevos introducidos desde teclado? java
« Respuesta #5 en: 4 Febrero 2018, 17:30 pm »

Buenas encontre la horna del zapato, justo lo que me pedian hacer en un video de mi curso. Asique avanze bastante. Voy a poner el codigo como muestra de gratitud a la informacion que me facilitaron, seguramente la pondre en practica tambien en la aplicacion. Saludos  ;D

Aunque en realidad el bucle del menu no esta bien hecho y se repite constantemente, por eso no esta del todo terminado algun codigo, estoy en ello y la clase producto no la incluyo porque no tiene nada de especial solo los contructores, getter , setter.
Cuando lo tenga hecho y funcione correctamente lo colgare, editando para que se quede el final. Y por si le puede servir a alguien

Modificacion , bucle funcional:

Código
  1. package pruebalibreceac;
  2. /**
  3.  *
  4.  * @author ibai
  5.  */
  6. import java.io.BufferedReader;
  7. import java.io.BufferedWriter;
  8. import java.io.FileNotFoundException;
  9. import java.io.FileReader;
  10. import java.io.FileWriter;
  11. import java.io.IOException;
  12. import java.io.PrintWriter;
  13. import java.util.ArrayList;
  14. import java.util.Iterator;
  15. import java.util.Scanner;
  16.  
  17.  
  18. public class Main {
  19.  
  20.    static int num;        
  21.    static Scanner sc = new Scanner(System.in);
  22.    static ArrayList<Producto> lproductos = new ArrayList<Producto>();  
  23.  
  24.    public static void main(String [] args) throws IOException {
  25.  
  26.            do{                  
  27.                System.out.println("\n1-Introducir nuevo producto.\n2-Visualizar productos.\n3-Guardar archivo de texto."
  28. + "\n4-Leer archivo.\n5-Salir.");
  29.                num= sc.nextInt();
  30.            }while(num < 0 || num > 5);
  31.  
  32.            do{
  33.                switch(num){
  34.                    case 1:                                        
  35.  
  36.                        System.out.println("Ingrese el nombre y luego el peso del nuevo producto.");
  37.  
  38.                            creaProducto();
  39.                            if(guardaProducto()){
  40.                                System.out.println("Fichero almacenado correctamente");
  41.                            }
  42.                            else{
  43.                                System.out.println("Error guardando fichero");
  44.                            }
  45.  
  46.                        do{                            
  47.                            System.out.println("\n1-Introducir nuevo producto.\n2-Visualizar productos.\n3-Guardar archivo de texto."
  48.                            + "\n4-Leer archivo.\n5-Salir");
  49.                            num= sc.nextInt();                            
  50.                        }while(num<0 || num>5);
  51.  
  52.                    break;                        
  53.                    case 2:
  54.  
  55.                        System.out.println("Estos son los productos existentes.");
  56.  
  57.                        muestraContenido("C:\\Users\\ibai\\Documents\\NetBeansProjects\\Programa1\\pruebaLibre\\Productos.txt");
  58.  
  59.                        do{    
  60.                            System.out.println("\n1-Introducir nuevo producto.\n2-Visualizar productos.\n3-Guardar archivo de texto."
  61.                            + "\n4-Leer archivo.\n5-Salir");
  62.                            num= sc.nextInt();                          
  63.                        }while(num<0 || num>5);
  64.  
  65.                    break;
  66.                    case 3:
  67.  
  68.                        System.out.println("Guardando productos desde archivo externo.");
  69.  
  70.                        do{  
  71.                          System.out.println("\n1-Introducir nuevo producto.\n2-Visualizar productos.\n3-Guardar archivo de texto."
  72.                            + "\n4-Leer archivo.\n5-Salir");
  73.                            num= sc.nextInt();
  74.                        }while(num<0 || num>5);
  75.  
  76.                    break;
  77.                    case 4:
  78.  
  79.                        System.out.println("Visualizando productos desde archivo externo.");
  80.  
  81.                        do{  
  82.                            System.out.println("\n1-Introducir nuevo producto.\n2-Visualizar productos.\n3-Guardar archivo de texto."
  83.                            + "\n4-Leer archivo.\n5-Salir");
  84.                            num= sc.nextInt();
  85.                        }while(num<0 || num>5);
  86.  
  87.                    break;                    
  88.                }
  89.            }while(num != 5);      
  90.    }
  91.  
  92.    private static void creaProducto(){                 //case 1
  93.        Scanner sca = new Scanner(System.in);
  94.  
  95.        Producto p1 = new Producto(1,"Arroz", (float) 30.00);
  96.        Producto p2 = new Producto(2,"Maíz", (float) 56.89);
  97.        Producto p3 = new Producto();  
  98.  
  99.        p3.setDescripcion(sca.nextLine());
  100.        p3.setPeso(sca.nextFloat());
  101.  
  102.                    //Añadir setter de p3 introducido por teclado
  103.        lproductos.add(p1);
  104.        lproductos.add(p2);
  105.        lproductos.add(p3);  
  106.  
  107.        lproductos.add(new Producto());
  108.    }
  109.  
  110.    private static boolean guardaProducto(){           //case 1
  111.        boolean ok = false;
  112.        try{
  113.            String nombreFichero = "Productos.txt";
  114.            BufferedWriter bw = new BufferedWriter(new FileWriter(nombreFichero));
  115.            PrintWriter pw = new PrintWriter(bw);
  116.  
  117.            Iterator it = lproductos.iterator();
  118.            while(it.hasNext()){
  119.                Producto p = (Producto) it.next();
  120.                pw.println(p.getCodigo());
  121.                pw.println(p.getDescripcion());
  122.                pw.println(p.getPeso());
  123.            }
  124.            pw.close();
  125.            ok = true;
  126.        }  
  127.        catch(Exception e){
  128.            System.out.println("Error: "+ e.getMessage());
  129.        }
  130.        return (ok);
  131.    }
  132.                                                            //case 2
  133.    public static void muestraContenido(String archivo) throws FileNotFoundException, IOException {
  134.        String nombreFichero;
  135.        FileReader f = new FileReader(archivo);
  136.        BufferedReader b = new BufferedReader(f);
  137.        while((nombreFichero = b.readLine())!=null) {
  138.            System.out.println(nombreFichero);
  139.        }
  140.        b.close();
  141.    }
  142. }
  143.  
« Última modificación: 9 Febrero 2018, 19:03 pm por ibai92 » En línea

ibai92

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Como guardar productos nuevos introducidos desde teclado? java
« Respuesta #6 en: 5 Marzo 2018, 17:20 pm »

Buenas no queria abrir un nuevo tema para una pregunta parecida. La verdad el codigo que subi esta bastante mal y nose en que forma modificarlo en el post para que se entienda.
Estoy teniendo un problema para escribir los productos en un archivo txt, solo escribe el primero que introduzco y no se si es porque me falta alguna variable por sacar de alguna funcion, o por que es mejor con otra funcion, pero .write() no me sirve.  Nose si el array tengo que ponerlo en la clase principal o en producto. Que nose si estoy escribiendo bien el codigo para acceder a lo que yo quiero desde cualquier funcion.

La funcion es guardaProd();

Código
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.*;
  5. import java.util.Scanner;
  6.  
  7.  
  8.  
  9. public class Main {
  10.    static int num;        
  11.    static Scanner sc = new Scanner(System.in);
  12.    static Producto[] listProd= new Producto[100];
  13.  
  14.    static Producto p = new Producto();
  15.    static int nProd = 0;
  16.  
  17.        public static void main(String[] args) throws IOException {
  18.           funcionSwitch();
  19.        }    
  20.        public static void funcionMenu(){
  21.            do{
  22.                System.out.println("Teclee la opción que desee." + "\n1-Introducir nuevo producto.\n2-Visualizar productos."
  23.        + "\n3-Guardar en archivo de texto.\n4-Leer archivo de texto con productos guardados.\n5-Salir.");
  24.                num= sc.nextInt();
  25.            }while(num < 0 || num > 5);        
  26.        }    
  27.        public static void funcionSwitch() throws IOException{
  28.  
  29.            funcionMenu();
  30.  
  31.            do{
  32.                switch(num){
  33.                    case 1:
  34.  
  35.                       introducirProds();
  36.                       funcionMenu();
  37.  
  38.                    break;                        
  39.                    case 2:
  40.  
  41.                        visualizarProds();
  42.                        funcionMenu();
  43.  
  44.                    break;  
  45.                    case 3:
  46.                        guardaProds();
  47.                        funcionMenu();
  48.  
  49.                    break;
  50.                    case 4:
  51.  
  52.                        leeProds();
  53.                        funcionMenu();
  54.  
  55.                    break;                    
  56.                }
  57.            }while(num != 5);
  58.        }
  59.  
  60.  
  61.        public static void introducirProds(){  
  62.  
  63.            int cierraWhile = 0;
  64.                while(nProd<listProd.length && cierraWhile != 1){
  65.                    Producto P = new Producto();
  66.  
  67.                    System.out.println("Introduzca las variables del nuevo producto.");
  68.                    System.out.println("Código:");      P.setCodigo(sc.nextInt());
  69.                    System.out.println("Nombre:");      P.setDescripcion(sc.next());
  70.                    System.out.println("Peso:");        P.setPeso(sc.nextFloat());
  71.  
  72.                    System.out.println("¿Quiere dejar de introducir productos? teclee: 1 = si ,0 = no.");
  73.                    cierraWhile = sc.nextInt();
  74.  
  75.                    listProd[nProd]= P ;  
  76.                    nProd++;
  77.  
  78.                    if(nProd==listProd.length){
  79.                        System.out.println("Almacenamiento lleno.");}
  80.                }
  81.        }    //Case 1
  82.        public static void visualizarProds(){
  83.            System.out.println("Productos introducidos en esta sesión: ");
  84.                for(int i=0;i<nProd;i++)
  85.                    System.out.println("Producto "+ listProd[i].getDescripcion() +"; con código: "
  86.                        + listProd[i].getCodigo()+"; y peso: "+ listProd[i].getPeso()+" .");
  87.        }   //Case 2
  88.        public static void guardaProds() throws IOException{
  89.            System.out.println("Guardando los productos en: Productos.txt");
  90.  
  91.            File nombreFichero = new File("Productos.txt");
  92.            FileWriter fw = new FileWriter(nombreFichero,true);      
  93.            BufferedWriter bw = new BufferedWriter(fw);        
  94.            PrintWriter pw = new PrintWriter(bw);
  95.  
  96.            listProd[nProd] = p;      //Antes no tenia esto y solo escribia el primer producto, con esto escribe: 0 , "desconocido" y 0.0.
  97.  
  98.                for (int nProd = 0; nProd < listProd.length; nProd++) {
  99.                    pw.println(p.getCodigo());//Y al no estar p, estas lineas se escribirian pw.println(listProd.getCodigo()); para que el programa escriba...
  100.                    pw.println(p.getDescripcion());                                                      //...al menos el primer producto introducido
  101.                    pw.println(p.getPeso());
  102.  
  103.                        pw.close();
  104.                }
  105.        }            //Case 3
  106.        public static void leeProds(){
  107.            System.out.println("Estoy dentro del case 4");
  108.  
  109.        }                                 //Case 4
  110.  
  111. }
  112.  

clase producto

Código
  1. public class Producto {
  2.    private int codigo;
  3.    private String descripcion;
  4.    private float peso;
  5.  
  6.  
  7.    public Producto(int codigo, String descripcion, float peso) {
  8.        this.codigo = codigo;
  9.        this.descripcion = descripcion;
  10.        this.peso = peso;
  11.    }    
  12.    public Producto(){
  13.        this.codigo=0;
  14.        this.descripcion="Desconocido";
  15.        this.peso=0;
  16.    }
  17.  
  18.    public int getCodigo() {
  19.        return codigo;
  20.    }
  21.    public void setCodigo(int codigo) {
  22.        this.codigo = codigo;
  23.    }
  24.  
  25.    public String getDescripcion() {
  26.        return descripcion;
  27.    }
  28.    public void setDescripcion(String descripcion) {
  29.        this.descripcion = descripcion;
  30.    }
  31.  
  32.    public float getPeso() {
  33.        return peso;
  34.    }
  35.    public void setPeso(float peso) {
  36.        this.peso = peso;
  37.    }
  38.  
  39. }
  40.  
Un saludo y gracias
En línea

ibai92

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Como guardar productos nuevos introducidos desde teclado? java
« Respuesta #7 en: 12 Marzo 2018, 15:07 pm »

Por favor sabrian decirme alguna pista para que nProd, en la funcion guardarProd(), le indique al programa el numero de elementos en la matriz  listProd[] ??

En la funcion introducirProd() es un contador que incrementa cada vez que se añade un producto en la sesion. Y nProd en la funcion visualizaProd() si se relaciona con introducirProd(), pero no en guardaProd()...

Tan solo una pistta, he probado muchas cosas ya y no quiero entregar el ejercicio despues de aver llegado hasta aqui sin tener todas las funciones.
Saludos y gracias
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Creación de objetos con nombres introducidos por teclado
Java
NelxoN 4 3,485 Último mensaje 16 Mayo 2009, 18:18 pm
por Amerikano|Cls
guardar imagenes en access desde java
Java
CAPN 0 1,570 Último mensaje 3 Octubre 2012, 18:56 pm
por CAPN
50 números enteros introducidos por teclado
Programación C/C++
douglascarvallo 4 3,623 Último mensaje 23 Junio 2013, 06:58 am
por douglascarvallo
listar, guardar en base datos un archivo desde java
Java
washington8277 4 2,742 Último mensaje 1 Febrero 2014, 14:48 pm
por washington8277
[DUDA] Guardar datos introducidos
Programación C/C++
Kougami 7 1,228 Último mensaje 13 Enero 2017, 00:47 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines