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;
*NOTA: no pongo el código de la clase DDBB ni Servidor (donde está el main)
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


0