[RESOLVIDO] Sistema de licença de software

Olá, gostaria de fazer uma coluna no banco de dados com uma contagem regressiva de dias, porém não sei como fazer isso, e por isso estou aqui.

Geralmente, vc tem uma data no banco (ex.: dataPrevista), e na aplicação vc faz a conta: dataPrevista - dataAtual, e, com isso, vc terá a quantidade de dias que faltam do dia atual até a data armazenada na base de dados.

obs.: Veja como calcular a diferença de dias entre duas datas

1 curtida

Okay.

Exemplo de conta dos dias

Dia Atual: 06
Dia Vencimento: 13

Dia Atual - Dia Vencimento = Dias Restantes
06 - 13 = -7

Posso utilizar um if e caso o dia atual for maior que o dia do vencimento ele altera a conta para:

Dia Vencimento - Dia Atual = Dias Restantes
13 - 06 = 7

Assim o número sempre fica positivo.

Após a conta, vai armazenar o valor do resultado no Banco de Dados, como posso fazer para esse valor atualizar todos os dias automaticamente com -1 para ficar os dias restantes até chegar no 0?

Vc não precisar armazenar o resultado dessa conta no banco (apenas a data de vencimento), daí vc calcula isso no código do sistema e faz a validação que for necessário.

É que assim, quero fazer um sistema de licença, aí no caso ele iria checar a data de validade, caso o utilizador pagasse novamente ele teria acesso a conta e se não pagasse, ficaria uma mensagem de aviso que a licença expirou, e essa foi a única maneira que encontrei, sabe se tem um jeito mais fácil de fazer isso? Ou continuo como estou tentando fazer?

Vc vai fazer essa validação quando o usuário abrir o sistema?

Isso, no caso quando ele for logar na conta, caso a licença esteja ativa vai para a tela principal, se não, vai para a tela de aviso de licença expirada.

Veja essa ideia bem básica:

public void login(String usuario, String senha) {
	boolean loginValido = // logica de login, valida o usuário e senha
	
	if(!loginValido) {
		// enviar para a tela de login pois as credenciais são inválidas
	}
	
	LocalDateTime dataVencimento = // recupera data de vencimento
	LocalDateTime hoje = LocalDateTime.now();
	
	int diferencaDias = // recupera a diferença em dias: dataVencimento - hoje
	
	if(diferencaDias < 0) {
		// enviar para a tela de login pois a licença expirou
	}
	
	// envia para a tela inicial pois está tudo em ordem
}

Veja se te ajuda em algo. Com certeza, o código pode ser melhorado ok.

1 curtida

Perfeito, vendo seu código, já sei como posso fazer, muito obrigado :grin:

1 curtida

Como o objetivo do fórum é oferecer ajuda aos demais membros, deixarei aqui o código no qual fiz utilizando o Eclipse e o MySQL Workbench, contendo o SQL, e o código em Java, espero que seja útil para outras pessoas!

SQL

create table adm(
ID int primary key auto_increment unique not null,
Nome varchar(50) not null,
EMail varchar(50) not null unique,
Senha varchar(15) not null,
DataVencimento date not null
);

Código de verificação de licença
        public void VerificaçãoLicença() {
                String sql = "select day(DataVencimento) as DiaVencimento from adm where EMail = ?";
    try {
        pst = conexao.prepareStatement(sql);
        pst.setString(1, txtEMail.getText());
        
        rs = pst.executeQuery();
        
        if(rs.next()){
            this.setDIAVENCIMENTO(rs.getString("DiaVencimento"));
            Date data = new Date(System.currentTimeMillis());
            SimpleDateFormat formatarDate = new SimpleDateFormat("dd");
            
            int DataAtual = Integer.parseInt(formatarDate.format(data));
            int DataVencimento = Integer.parseInt(getDIAVENCIMENTO());

            	int resultado = (DataVencimento - DataAtual);
            	System.out.println(resultado);
            		if(resultado <= 0) {
            			Licença licença = new Licença(); //Nessas três linhas você chama a tela que avisa sobre a licença expirada
            			licença.setVisible(true);
        				dispose();
            		}else {
            			Logar(); // Aqui você chama o seu método de login
            		}
            }
        conexao.close();
        }
    catch (Exception e) {
    	JOptionPane.showMessageDialog(null, "Foi encontrado um erro:\n" + e);
	}
}

Agradecimentos ao @Lucas_Camara!
Aproveitem o código :grin:

1 curtida

Só uma duvida, você ta usando isso em um sistema com interface grafica e tudo? Por que se for isso é bem legal :slight_smile:

Sim, estou desenvolvendo um programa no qual ele tem uma tela de login, que é onde ele verifica a licença, segue prints da tela de login e da tela de aviso de licença expirada!

Prints

image

image

nossa mano que legal, to querendo fazer programas com interfaces gráficas mais apresentáveis (kkkk) para o usuário tb, tipo a que vc fez. Parabéns, ficou muito bom

1 curtida

Obrigado, que bom que gostou, no início a interface era feio que doía hehehe, na verdade isso é um projeto de TCC que estou concluindo, mais tem coisas que estou fazendo para distribuir futuramente, ainda mais que levei um bom tempo para fazer.

1 curtida

Mano, evite criar métodos começando com letra maiúscula e não use caracteres como ç e ã. O adequado é: public void verificarLicenca() {.

2 curtidas