Lógica para Software em Java com Banco de Dados

MySQL

Java

CRUD

Banco de Dados

Lógica de programação

15/01/2019

Pessoal, qual a melhor forma de construir um software em Java com Banco de Dados de 900 pessoas, com a lógica de cada pessoa tem direito a uma cota de 80 cópias, se passar dessa cota, o sistema irá cobrar 10 centavos por cópia a mais.
Toda vez que a pessoa utilizar desse serviço, o sistema deverá salvar o valor a ser cobrado (se passou de 80) e atualizar a subtração da cota. E deve ter a opção de recarregar essa cota para cada pessoa.

Pensei em inserir nos campos jtxtfield a quantidade de cópias por vez que utilizar e o CPF da pessoa consequentemente gravar na jTable contendo todas as informações referente ao banco de dados.

Para fazer os cálculos dentro da jTable precisa de alguns UPDATES, se tiverem alguma ideia diferente...

Agradeço!
Igor

Igor

Curtidas 0

Melhor post

Marcio Souza

Marcio Souza

19/01/2019

Cria uma tabla/coluna para armazenar o numero de cópias de cada usuário. Assim, antes de inserir faça uma consulta e veja quantas cópias ele já tem, quantas faltam para 80 e depois pode fazer um update para atualizar esse valor. A tabala pode ter o id do usuário, o número atual de cópias, o número máximo de cópias e qualquer outra informação pertinente para seu processo.
GOSTEI 1

Mais Respostas

Igor

Igor

15/01/2019

Cria uma tabla/coluna para armazenar o numero de cópias de cada usuário. Assim, antes de inserir faça uma consulta e veja quantas cópias ele já tem, quantas faltam para 80 e depois pode fazer um update para atualizar esse valor. A tabala pode ter o id do usuário, o número atual de cópias, o número máximo de cópias e qualquer outra informação pertinente para seu processo.


Acabei seguindo isso mesmo, só que na parte de UPDATE queria atualizar apenas o ultimo registro inserido na tabela. Pode me ajudar?

Fiz esse SELECT chamando as duas tabelas. Tentei chamar apenas a ultimo registro.

private void ultimo_registro() {
String sql = "select\\n"
+ "X.xerox,qtd_xerox ,valor,data_s,restcota, \\n"
+ "S.nomeserv,cpfserv,tiposerv,maxcot,total_xerox\\n"
+ "from tbxerox as X\\n"
+ "inner join tbservidores as S\\n"
+ "on (X.cpf = S.cpfserv)\\n"
+ "where xerox = (select X.xerox from tbxerox as X order by X.xerox desc limit 1);";


try {
pst = conexao.prepareStatement(sql);
rs = pst.executeQuery();
tblServidores.setModel(DbUtils.resultSetToTableModel(rs));


} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);

}

}

E fiz esse UPDATE pra atualizar a ultima linha


private void calculo_ultrapassa() {
String sql = "update tbxerox\\n"
+ "inner join tbservidores on tbxerox.cpf = tbservidores.cpfserv\\n"
+ "set\\n"
+ "valor = (tbservidores.maxcot - tbservidores.total_xerox) * (-0.10)\\n"
+ "WHERE (tbxerox.restcota) < 0\\n"
+ "and (tbservidores.maxcot - tbxerox.qtd_xerox) < 0\\n"
+ "and (tbxerox.qtd_xerox) > 80\\n"
+ "and (tbservidores.total_xerox) > 80;";



try {
pst = conexao.prepareStatement(sql);

int adicionado;

adicionado = pst.executeUpdate();

} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}

Mas ainda continua atualizando todas as linhas.
GOSTEI 0
Igor

Igor

15/01/2019

Cria uma tabla/coluna para armazenar o numero de cópias de cada usuário. Assim, antes de inserir faça uma consulta e veja quantas cópias ele já tem, quantas faltam para 80 e depois pode fazer um update para atualizar esse valor. A tabala pode ter o id do usuário, o número atual de cópias, o número máximo de cópias e qualquer outra informação pertinente para seu processo.


Lembrando que chamei primeiro o SELECT e depois o UPDATE. To chamando o método abaixo num Botão.

private void emitir_xerox() {
String sql = "insert into tbxerox(qtd_xerox ,cpf) values (?,?)";

try {
pst = conexao.prepareStatement(sql);
pst.setString(1, txtCopia.getText());
//pst.setString(2, txtOsValor.getText());
pst.setString(2, txtCliId.getText());
// pst.setString(3, resultado.getText());
//pst.setString(3, txtRestCota.getText());

if ((txtCopia.getText().isEmpty())) {
JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios!");
} else {
int adicionado = pst.executeUpdate();

if (adicionado > 0) {
JOptionPane.showMessageDialog(null, "Xerox adicionado com sucesso!");
txtCopia.setText(null);
//txtOsValor.setText(null);
txtCliId.setText(null);
//resultado.setText(null);
//txtRestCota.setText(null);
// Uptade para o calculo < 0


ultimo_registro();
calculo_ultrapassa();

} else {

}
}

} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}

}
GOSTEI 0
Marcio Souza

Marcio Souza

15/01/2019

Não entendi, como assim atualizar apenas o último registro? A ideia não é manter apenas o número de cópias atualizado para cada usuário?
GOSTEI 0
POSTAR