Java - Base de datos y Socket

 
Vista:
sin imagen de perfil
Val: 13
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Base de datos y Socket

Publicado por Cristina (7 intervenciones) el 30/08/2019 21:36:06
Estoy desarrollando una aplicación de gestión de llamadas telefónicas cuya lógica es:
1.- El cliente envía un id al servidor.
2.- El servidor hace una consulta a la base de datos y reenvía al cliente: las llamadas que ha realizado y la duración de las mismas.
3.- El cliente debe calcular el importe parcial de cada llamada y el total de todas ellas.

No se como puedo calcular el importe total, ¿Alguna idea?
Este es el código:

package cliente;

1
2
3
4
5
6
7
8
9
10
11
12
public interface Calculadora {
	static final double COSTE1 = 0.1705;
	static final double COSTE2 = 0.3678;
	static final double PLUS = 0.50;
 
	static double costeLlamada(String tipo,int duracion) {
		double res = 0.0;
		if(tipo.equals("L")) res = duracion * COSTE1;
		if(tipo.equals("P")) res = (duracion * COSTE2) + PLUS;
		return res;
	}
}

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
package cliente;
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
 
import java.io.*;
import java.net.*;
import java.text.DecimalFormat;
import java.util.*;
 
public class InterfazCliente extends JFrame implements ActionListener{
	private JLabel id;
	private JLabel resultado;
	private JTextArea areaTexto;
	private JTextField texto;
	private JButton enviar;
 
	private Socket cliente = null;
	private DataOutputStream salida = null;
	private DataInputStream entrada = null;
 
	public InterfazCliente() {
		this.setTitle("Informacion telefonica");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.getContentPane().setLayout(new BorderLayout());
 
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(1,2));
		id = new JLabel("DNI->");
		texto = new JTextField(8);
		texto.setHorizontalAlignment(SwingConstants.LEFT);
		texto.addActionListener(this);
		panel.add(id); panel.add(texto);
 
		this.getContentPane().add(panel, BorderLayout.NORTH);
 
		panel = new JPanel();
		TitledBorder border = new TitledBorder("Extracto de llamadas");
        // indicamos la posicion del mismo
        border.setTitleJustification(TitledBorder.CENTER);
        border.setTitleColor(Color.black);
		panel.setBorder(border);
 
 
		areaTexto = new JTextArea(10,25);
		JScrollPane jsp = new JScrollPane(areaTexto);
		panel.add(jsp);
 
		this.getContentPane().add(panel, BorderLayout.CENTER);
 
		panel = new JPanel();
		panel.setLayout(new GridLayout(2,1));
		resultado = new JLabel();
		enviar = new JButton("Enviar");
		enviar.addActionListener(this);
		panel.add(resultado); panel.add(enviar);
 
		this.getContentPane().add(panel, BorderLayout.SOUTH);
	}
 
	public void actionPerformed(ActionEvent ev) {
		Object o = ev.getSource();
		if((o instanceof JButton) || (o instanceof JTextField)) {
			try {
				salida.writeUTF(texto.getText());
				areaTexto.setText("");
				texto.setText("");
			}catch(IOException ex) {
				ex.printStackTrace();
			}
		}
	}
 
	public void arrancar() {
		try {
			cliente = new Socket("localhost",1234);
			entrada = new DataInputStream(cliente.getInputStream());
			salida = new DataOutputStream(cliente.getOutputStream());
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		while(true) {
			try {
				DecimalFormat df = new DecimalFormat("0.00");
				String linea = entrada.readUTF();
				if(linea.startsWith("1")) areaTexto.append(linea.substring(1));
				if(linea.startsWith("2")) {
					String tipo = entrada.readUTF();
					int duracion = entrada.readInt();
					areaTexto.append(linea.substring(1) + df.format(Calculadora.costeLlamada(tipo,duracion)) + " Euros\n");
					int parcial = (int)Calculadora.costeLlamada(tipo,duracion);
					int total = 0;
					total +=parcial;
					System.out.println(total);
 
 
				}
			}catch(IOException ex) {
				ex.printStackTrace();
			}
		}
	}
 
	public static void main(String[]args) {
		InterfazCliente ic = new InterfazCliente();
		ic.pack();
		ic.setVisible(true);
		ic.arrancar();
	}
}

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
package servidor;
 
import java.io.*;
import java.net.*;
import java.sql.*;
 
public class ThreadServidor extends Thread {
	private DDBB conexion = new DDBB();
	Connection con = null;
	private Socket cliente = null;
	private DataInputStream entrada = null;
	private DataOutputStream salida = null;
	private String id = null;
 
	public ThreadServidor(Socket cliente) {
		this.cliente = cliente;
	}
 
	public void run() {
		con = conexion.getDDBB();
		try {
			entrada = new DataInputStream(cliente.getInputStream());
			salida = new DataOutputStream(cliente.getOutputStream());
		} catch(IOException ex) {
			System.out.println("Error al abrir flujos");
			ex.printStackTrace();
		}
		while(true) {
			try {
				boolean existe = false;
				id = entrada.readUTF();
				if(id == null) return;
				PreparedStatement pstm = con.prepareStatement("SELECT DNI FROM LLAMADAS WHERE DNI = '" + id +"'");
				ResultSet rs = pstm.executeQuery();
				while(rs.next()) {
					existe = true;
					int i = 1;
					pstm = con.prepareStatement("SELECT * FROM LLAMADAS WHERE DNI = '" + id + "'");
					rs = pstm.executeQuery();
					while(rs.next()) {
						salida.writeUTF("2" + i + "-> A: " + rs.getString("DESTINO") + " -- " + rs.getInt("DURACION") + " seg. -- ");
						i++;
						salida.writeUTF(rs.getString("TIPO"));
						salida.writeInt(rs.getInt("DURACION"));
					}
				}
				if(existe == false) salida.writeUTF("1" + "No existen datos almacenados");
			} catch(IOException ex) {
				break;
			} catch(SQLException e) {
				e.printStackTrace();
			}
 
		}
		try {
			con.close();
			entrada.close();
			cliente.close();
		}catch(IOException ex) {
			System.out.println("IOException: " + ex);
		}catch(SQLException ex) {
			System.out.println("SQLException: " + ex);
		}
	}
}

*NOTA: no pongo el código de la clase DDBB ni Servidor (donde está el main)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder