Lógica para Software em Java com Banco de Dados

15/01/2019

0

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

Responder

Post mais votado

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.

Marcio Souza

Marcio Souza
Responder

Mais Posts

20/01/2019

Igor

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.
Responder

20/01/2019

Igor

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);
}

}
Responder

01/02/2019

Marcio Souza

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?
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar