Java - Ejercicios resueltos de ficheros binario

 
Vista:

Ejercicios resueltos de ficheros binario

Publicado por burlon (14 intervenciones) el 08/06/2015 21:47:04
Realiza un programa en JAVA en el que muestres un menu que te permita 3 opciones:
1. Creacion de un fichero binario (con el nombre que tu quieras) en el que indiques en cada linea:
] Tu Nombre.
] Tu Edad.
]Tu Ciudad de Nacimiento.
2. Mostrar por pantalla el contenido del fichero binario creado.
3. Salir del Programa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
public class Ejercicio16Tema08 {
 
    public static void menu() {
        int opcion;
        do {
            Scanner teclado = new Scanner(System.in);
            System.out.println("1.- Crear fichero binario");
            System.out.println("2.- Mostrar Fichero");
            System.out.println("3.- Salir del pograma");
 
            opcion = teclado.nextInt();
 
            switch (opcion) {
                case 1: {
                    crearFichero();
                }
                case 2: {
                    mostrarFichero();
                }
                case 3: {
                    System.out.println("Gracias por usar el prorama");
                }
 
            }
        } while (opcion != 3);
 
    }
    public static void crearFichero() {
        DataOutputStream dos = null;
 
        try {
            FileOutputStream fos = new FileOutputStream("datos.bin");
            dos = new DataOutputStream(fos);
            escribirFichero(dos);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (dos != null) {
                    dos.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
 
            }
        }
    }
 
    public static void escribirFichero(DataOutputStream dos) throws Exception {
        Scanner teclado = new Scanner(System.in);
 
        String Nombre;
        int Edad;
        String Nacimiento;
 
        System.out.println("Introduce tu nombre:");
        Nombre = teclado.next();
        System.out.println("Introduce tu edad:");
        Edad = teclado.nextInt();
        System.out.println("Introduce tu Ciudad de nacimiento:");
        Nacimiento = teclado.next();
 
        dos.writeUTF(Nombre);
        dos.writeInt(Edad);
        dos.writeUTF(Nacimiento);
 
    }
 
    public static void mostrarFichero() {
        DataInputStream dis = null;
        try {
            FileInputStream fis = new FileInputStream("datos.bin");
            dis = new DataInputStream(fis);
            leerFichero(dis);
        } catch (Exception e) {
            System.out.println(e.getMessage());
 
        } finally {
            try {
                if (dis != null) {
                    dis.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
 
            }
        }
    }
 
    public static void leerFichero(DataInputStream dis) throws Exception {
        while (true) {
            System.out.println(dis.readUTF());
            System.out.println(dis.readInt());
            System.out.println(dis.readUTF());
 
        }
    }
 
    public static void main(String[] args) {
 
        menu();
    }
 
}


Realiza un programa en JAVA en el que le pidas al usuario su DNI y:
. En caso de que el DNI sea correcto lo introduciras en un fichero llamado dni.bin.
. En caso de que el DNI sea incorrecto avisaras al usuario del error y no lo meteras en el fichero.
. Cuando vuelvas a ejecutar el programa no se sobreescribira el fichero, sino que se seguiran anadiendo DNIs validos al final del fichero dni.bin. Ejemplos de ejecucion:
74
Introduzca un DNI: 12345678Z
DNI valido e introducido en el fichero.
]]FIN DEL PROGRAMA]]
Introduzca un DNI: 12345678A
DNI invalido
]]FIN DEL PROGRAMA]]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
public class Ejercicio19tema08 {
 
    public static String solicitarDni() {
        Scanner teclado = new Scanner(System.in);
        String dni;
        System.out.println("Introduce el DNI");
        dni = teclado.nextLine();
        return dni;
 
    }
 
    public static void rellenarTablaDni(char[] tablaDni) {
 
        tablaDni[0] = 'T';
        tablaDni[1] = 'R';
        tablaDni[2] = 'W';
        tablaDni[3] = 'A';
        tablaDni[4] = 'G';
        tablaDni[5] = 'M';
        tablaDni[6] = 'Y';
        tablaDni[7] = 'F';
        tablaDni[8] = 'P';
        tablaDni[9] = 'D';
        tablaDni[10] = 'X';
        tablaDni[11] = 'B';
        tablaDni[12] = 'N';
        tablaDni[13] = 'J';
        tablaDni[14] = 'Z';
        tablaDni[15] = 'S';
        tablaDni[16] = 'Q';
        tablaDni[17] = 'V';
        tablaDni[18] = 'H';
        tablaDni[19] = 'L';
        tablaDni[20] = 'C';
        tablaDni[21] = 'K';
        tablaDni[22] = 'E';
    }
 
    public static void comprobarLetra(char[] tablaDni, String cadenaDni) {
 
        char letraDni;
        String numeroDni;
        int numeroSinLetra;
        int resto;
        int contador = 0;
 
        letraDni = cadenaDni.charAt(8);
        //System.out.println(letraDni);
 
        numeroDni = cadenaDni.substring(0, 8);
        numeroSinLetra = Integer.parseInt(numeroDni);
        //System.out.println(numeroSinLetra);
 
        resto = numeroSinLetra % 23;
        //System.out.println(resto);
 
        for (int i = 0; i < tablaDni.length; i++) {
 
            //System.out.println(tablaDni[i]);
            if ((i == resto) && (letraDni == tablaDni[i])) {
 
                contador = 1;
            }
 
        }
 
        if (contador == 1) {
 
            System.out.println("El DNI es Valido");
            crearFichero(cadenaDni);
            System.out.println("Introducido en el fichero");
 
        } else {
 
            System.out.println("El DNI no es valido");
            System.out.println("Fin del programa");
        }
 
    }
 
    public static void crearFichero(String cadenaDni) {
 
        DataOutputStream dos = null;
 
        try {
            FileOutputStream fos = new FileOutputStream("dni.bin", true);
            dos = new DataOutputStream(fos);
            escribirFichero(dos, cadenaDni);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (dos != null) {
                    dos.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
 
    }
 
    public static void escribirFichero(DataOutputStream dos, String cadenaDni) throws Exception {
        dos.writeUTF(cadenaDni);
        System.out.println(cadenaDni);
    }
 
    public static void selecionarFichero() {
        DataInputStream dis = null;
        try {
            FileInputStream fis = new FileInputStream("dni.bin");
            dis = new DataInputStream(fis);
            leerFichero(dis);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (dis != null) {
                    dis.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
 
    public static void leerFichero(DataInputStream dis) throws Exception {
        while (true) {
            System.out.println(dis.readUTF());
        }
 
    }
 
    public static void main(String[] args) {
        char[] tablaDni = new char[23];
        rellenarTablaDni(tablaDni);
        String cadenaDni = new String(solicitarDni());
        comprobarLetra(tablaDni, cadenaDni);
        selecionarFichero();
    }
 
}


------------------------------------------------------------------

Realizar un programa que lea de teclado (la entrada estandar) los siguientes datos:
. Nombre y apellido de un supuesto becario.
. Sexo (H]M)
. Edad (20]60)
. Numero de suspensos del curso anterior (0]4).
. Residencia familiar (SI]NO)
. Ingresos anuales de la familia.
. Los datos se almacenan en un fichero binario llamado "datosbeca.bin".

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
public class Ejercicio20Tema08 {
 
    public static void crearFichero() {
 
        DataOutputStream dos = null;
 
        try {
            FileOutputStream fos = new FileOutputStream("datosbeca.bin",true);
            dos = new DataOutputStream(fos);
            escribirFichero(dos);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (dos != null) {
                    dos.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
 
    }
 
    public static void escribirFichero(DataOutputStream dos) throws Exception {
        Scanner teclado = new Scanner(System.in);
        String nombre;
        String sexo, resiFamiliar;
        int edad;
        int suspensos;
        int ingresos;
 
 
        System.out.println("Introduce Nombre y Apellidos");
        nombre = teclado.nextLine();
        dos.writeUTF(nombre);
 
        do {
            System.out.println("Introduce el sexo H/M");
            sexo = teclado.next();
            //sexoChar = sexo.toCharArray();
 
            if ((!sexo.equals("H")) && (!sexo.equals("M"))) {
                System.out.println("Error caracter");
            }
        } while ((!sexo.equals("H")) && (!sexo.equals("M")));
        dos.writeUTF(sexo);
 
        do {
 
            System.out.println("Introduce la edad");
            edad = teclado.nextInt();
            if ((edad < 20) || (edad > 60)) {
                System.out.println("edad erronea");
            }
        } while ((edad < 20) || (edad > 60));
        dos.writeInt(edad);
 
        do {
 
            System.out.println("Introduce el numero de suspensos");
            suspensos = teclado.nextInt();
            if ((suspensos < 0) || (suspensos > 4)) {
                System.out.println("suspensos erronea");
            }
        } while ((suspensos < 0) || (suspensos > 4));
        dos.writeInt(suspensos);
 
        do {
            System.out.println("Introduce residencia familiar Si/No");
            resiFamiliar = teclado.next();
            //sexoChar = sexo.toCharArray();
 
            if ((!resiFamiliar.equals("Si")) && (!resiFamiliar.equals("No"))) {
                System.out.println("Error caracter");
            }
        } while ((!resiFamiliar.equals("Si")) && (!resiFamiliar.equals("No")));
        dos.writeUTF(resiFamiliar);
 
        System.out.println("Ingresos Anuales Familiar");
        ingresos = teclado.nextInt();
        dos.writeInt(ingresos);
 
    }
 
    public static void main(String[] args) {
        crearFichero();
    }
 
}


Realizar un programa que, partiendo del fichero binario “datosbeca.bin”, calcule la cuantía de la beca (en caso de que la haya). El total de la beca se calcula como sigue:
• Base fija de 1500€
• Si los ingresos anuales de la familia son menores o iguales a la media (12.000€), la beca se incrementa en 500€, en caso contrario no lleva complementos.
• Si la edad de la persona es inferior a 23 años, 200€ de gratificación, si es mayor no hay gratificación.
• Si no hay suspensos en el curso anterior, hay una gratificación de 500€, 1 suspenso 200€, si hay 2 suspensos o más no hay beca.
• Si vive de alquiler (no residencia familiar), 1000€ más de gratificación.
• Visualizar el nombre de cada uno de los becarios y su cuantía total (sólo los que tienen beca).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
public class ejercicio21tema08 {
 
    public static void selecionarFichero() {
        DataInputStream dis = null;
        try {
            FileInputStream fis = new FileInputStream("datosbeca.bin");
            dis = new DataInputStream(fis);
            leerFichero(dis);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (dis != null) {
                    dis.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
 
    public static void leerFichero(DataInputStream dis) throws Exception {
        while (true) {
            String nombre;
            String sexo, resiFamiliar;
            int edad;
            int suspensos;
            int ingresos;
            int baseFija = 1500;
            int total = 0;
 
            nombre = dis.readUTF();
            sexo = dis.readUTF();
            edad = dis.readInt();
            suspensos = dis.readInt();
            resiFamiliar = dis.readUTF();
            ingresos = dis.readInt();
 
            //System.out.println(nombre);
            //System.out.println(sexo);
            //System.out.println(edad);
            //System.out.println(suspensos);
            //System.out.println(resiFamiliar);
            //System.out.println(ingresos);
            total = total + baseFija;
 
            // cuantia edad
            if (edad < 23) {
                total = total + 200;
            } else {
                total = total + 0;
            }
            // cuantia suspensos
            if (suspensos == 0) {
 
                total = total + 500;
 
            }
            if (suspensos == 1) {
 
                total = total + 200;
 
            } else {
                total = total + 0;
            }
 
            //cuantia residencia Familiar
            if (resiFamiliar.equalsIgnoreCase("No")) {
 
                total = total + 1000;
 
            } else {
                total = total + 0;
            }
 
            // Ingrsos anuales
            if (ingresos <= 12000) {
                total = total + 500;
            } else {
                total = total + 0;
            }
 
            if (suspensos >= 2) {
                total = 0;
                System.out.println("Para: " + nombre + " no le corresponde beca " + total + " €");
            } else {
                System.out.println("Para: " + nombre + " tiene una cuantia de " + total + " €");
            }
        }
 
    }
 
    public static void main(String[] args) {
        selecionarFichero();
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder