Ir ao conteúdo
  • Cadastre-se

nigolino

Membro Pleno
  • Posts

    37
  • Cadastrado em

  • Última visita

posts postados por nigolino

  1. 6 horas atrás, De Los Santos disse:

    Esse erro está dizendo que ele não achou a tabela "pensionistas". O nome da sua tabela seria "pensionistas", no plural, ou "pensionista", no singular?

     

    E além disso, vi na query que "Pensionistas" está grafado assim, com a inicial maiúscula. Não sei que versão do Postgre você está usando, mas de repente essa versão que você está usando implica com letra maiúscula, letra minúscula.

    Correto, esta versão do Postgre não aceita letra inicial maiúscula, reconhece como minúscula, estava igual em ambos os programas quando apresentava erro, o que fiz foi deixar os dois programas (códigos) pgAdmin e netbeans com letras minúsculas e então validou e inseriu os dados no BD. Solucionado!

    • Obrigado 1
  2. 34 minutos atrás, De Los Santos disse:

    Os nomes dos campos "numFunc pensionista, numVinc pensionista, numPen pensionista, nome pensionista, salarioBase pensionista, email pensionista, dataNascim pensionista, banco pensionista, agencia pensionista e conta pensionista" estão corretos? Que eu saiba o Postgre não deixa criar campos com espaços no nome.

    Perfeito, está errado aqui, está faltando o underline, vou testar à noite...e vai dar certo.

  3. Estou tentando fazer a inserção de dados no banco de dados usando o netbeans mas está retornando um erro padrão, aparentemente está tudo correto, mas retorna sempre o erro: 

     

    Erro ao inserir dados, erro: org.postgresql.util.PSQLException: ERROR: syntax error at or near "Pensionista"
    posição: 34

     

    posição: 34 suponho que seja nesta classe no: pst.setString(8, mod.getBanco()); já revisei o banco de dados para deixar exatamente igual, mas não insere os dados no BD.

     

    public void Salvar(ModeloPensionista mod){
            conex.conexao();
            try {
                PreparedStatement pst = conex.con.prepareStatement("insert into Pensionistas(numFunc pensionista, numVinc pensionista, numPen pensionista, nome pensionista, salarioBase pensionista, email pensionista, dataNascim pensionista, banco pensionista, agencia pensionista, conta pensionista)values(?,?,?,?,?,?,?,?,?,?)");
                pst.setInt(1, mod.getNumFunc());
                pst.setInt(2, mod.getNumVinc());
                pst.setInt(3, mod.getNumPen());
                pst.setString(4, mod.getNome());
                pst.setDouble(5, mod.getSalarioBase());
                pst.setString(6, mod.getEmail());
                pst.setString(7, mod.getDataNascim());
                pst.setString(8, mod.getBanco());
                pst.setInt(9, mod.getAgencia());
                pst.setInt(10, mod.getConta());
                pst.execute();
                JOptionPane.showMessageDialog(null, "Dados Inseridos com Sucesso!!!");
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro ao Inserir Dados!!!/nErro:"+ex);
            }
                           
            conex.desconecta();
        }

     

  4. Pessoal, estou com mais uma dúvida com relação a conversão do ComboBoxBanco o netbeans retorna a mensagem "Objeto não pode ser convertido para String", tentei fazer o casting, mas está dando erro na execução, somente com a conta banco...o combo foi criado no banco de dados e no programa como int...

    	private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                              
            // Ação Salvar:
            mod.setNumFunc(Integer.parseInt(jTextFieldNumFunc.getText()));
            mod.setNumVinc(Integer.parseInt(jTextFieldNumVinc.getText()));
            mod.setNumPen(Integer.parseInt(jTextFieldNumPen.getText()));
            mod.setNome(jTextFieldNome.getText());
            mod.setSalarioBase(Double.parseDouble(jTextFieldSalarioBase.getText()));
            mod.setEmail(jTextFieldEmail.getText());
            mod.setDataNascim(jTextFieldDataNascim.getText());
            //mod.setBanco((Integer)jComboBoxBanco.getSelectedItem());
            mod.setBanco(Integer.parseInt(jComboBoxBanco.getSelectedItem()));
            //mod.setBanco((int) jComboBoxBanco.getSelectedItem());
            mod.setAgencia(Integer.parseInt(jTextFieldAgencia.getText()));
            mod.setConta(Integer.parseInt(jTextFieldConta.getText()));
            control.Salvar(mod);
        }                                   

     

  5. 48 minutos atrás, herbertbahia disse:

    depende a finalidade do seu sistema por exmeplo se for jdbc aqui esta um exemplo

     

    
    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>herbert.company</groupId>
    	<artifactId>jdbc-Jdev</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    
    	<name>jdbc-Jdev</name>
    	<!-- FIXME change it to the project's website -->
    	<url>http://www.example.com</url>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<maven.compiler.source>1.7</maven.compiler.source>
    		<maven.compiler.target>1.7</maven.compiler.target>
    	</properties>
    
    	<dependencies>
    		<!-- https://mvnrepository.com/artifact/junit/junit -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.13</version>
    			<scope>test</scope>
    		</dependency>
    
    
    		<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
    		<dependency>
    			<groupId>org.postgresql</groupId>
    			<artifactId>postgresql</artifactId>
    			<version>42.2.16</version>
    		</dependency>
    
    	</dependencies>
    
    	<build>
    		<pluginManagement><!-- lock down plugins versions to avoid using Maven 
    				defaults (may be moved to parent pom) -->
    			<plugins>
    				<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
    				<plugin>
    					<artifactId>maven-clean-plugin</artifactId>
    					<version>3.1.0</version>
    				</plugin>
    				<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
    				<plugin>
    					<artifactId>maven-resources-plugin</artifactId>
    					<version>3.0.2</version>
    				</plugin>
    				<plugin>
    					<artifactId>maven-compiler-plugin</artifactId>
    					<version>3.8.0</version>
    				</plugin>
    				<plugin>
    					<artifactId>maven-surefire-plugin</artifactId>
    					<version>2.22.1</version>
    				</plugin>
    				<plugin>
    					<artifactId>maven-jar-plugin</artifactId>
    					<version>3.0.2</version>
    				</plugin>
    				<plugin>
    					<artifactId>maven-install-plugin</artifactId>
    					<version>2.5.2</version>
    				</plugin>
    				<plugin>
    					<artifactId>maven-deploy-plugin</artifactId>
    					<version>2.8.2</version>
    				</plugin>
    				<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
    				<plugin>
    					<artifactId>maven-site-plugin</artifactId>
    					<version>3.7.1</version>
    				</plugin>
    				<plugin>
    					<artifactId>maven-project-info-reports-plugin</artifactId>
    					<version>3.0.0</version>
    				</plugin>
    			</plugins>
    		</pluginManagement>
    	</build>
    </project>
    
    package conexaojdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    
    public class SingleConection {
    	private static String url= "jdbc:postgresql://localhost:5432/nomebanco";
    	private static String user = "postgres";
    	private static String password= "admin";
    	private static Connection connection = null;
    	
    	static {
    		conectar();
    	}
    	
    	public SingleConection() {
    		conectar();
    	}
    	
    	private static void conectar() {
    		try {
    			if(connection==null) {
    				Class.forName("org.postgresql.Driver");
    				connection = DriverManager.getConnection(url, user, password);
    				connection.setAutoCommit(false);
    				System.out.println("Conectou com Sucesso");
    			}
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static Connection getConnection() {
    		return connection;
    	}
    	
    
    }

     

    Estou tentando configurar o "pom", mas não estou conseguindo porque não estou usando o jdbc. Vou postar meus códigos para que possam ver...

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.mycompany</groupId>
        <artifactId>ProjetoClinica</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
        </properties>
        <name>ProjetoClinica</name>
        <repositories>
            <repository>
                <id>unknown-jars-temp-repo</id>
                <name>A temporary repository created by NetBeans for libraries and jars it could not identify. Please replace the dependencies in this repository with correct ones and delete this repository.</name>
                <url>file:${project.basedir}/lib</url>
            </repository>
            
            <repository>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>VERSION</version>
            </repository>
            
        </repositories>
               
     </project>
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package controle;
    
    import java.sql.*;
    import java.sql.DriverManager;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JOptionPane;
    
    /**
     *
     * @author SCHRENK
     */
    public class ConexaoBD {
        
        public Statement stm; //pesquisa no banco de dados
        public ResultSet rs; // armazena o resultado da pesquisa
        private String driver = "org.postgresql.Driver"; //identifica o nosso serviço BD
        private String caminho = "jdbc:postgresql://localhost:5433/Postgres"; //Qual o caminho do BD
        private String usuario = "postgres";
        private String senha = "1234567";
        public Connection con; 
        
        public void conexao(){
            
            try {
                System.setProperty("jdbc.DriverClassName", driver);//setar a propriedade do driver de conexão
                con=DriverManager.getConnection(caminho, usuario, senha);
                JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso");
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro na conexão efetuada!\n"+ex.getMessage());
            }
        }
        
        public void desconecta(){
            try {
                con.close();
                JOptionPane.showMessageDialog(null, "Desconectado com sucesso");
            } catch (SQLException ex) {
               JOptionPane.showMessageDialog(null, "Erro ao desconectar efetuada com sucesso"+ex.getMessage());
            }
        }
    }
    The project com.mycompany:ProjetoClinica:1.0-SNAPSHOT (C:\ProjetoClinica\pom.xml) has 4 errors
        Malformed POM C:\ProjetoClinica\pom.xml: Unrecognised tag: 'groupId' (position: START_TAG seen ...<repository>\n            <groupId>... @22:22)  @ C:\ProjetoClinica\pom.xml, line 22, column 22 -> [Help 2]
        'repositories.repository.id' is missing. @ line 21, column 21
        'repositories.repository.[null].url' is missing. @ line 21, column 21
        Invalid artifact repository: Repository identifier missing -> [Help 3]
    
    To see the full stack trace of the errors, re-run Maven with the -e switch.
    Re-run Maven using the -X switch to enable full debug logging.

     

  6. 3 horas atrás, bngomes disse:

    Teste trocando jdbc.Drivers para jdbc.driverClassName e veja se conecta... nas minhas configurações é com essa propriedade.. 

    Eu coloquei bem como você digitou e continua aparecendo a  mesma mensagem...eu devo colocar um nome de classe no lugar de ClassName no jdbc.driver...? Será que eu não tenho um problema de biblioteca?

    Postgresql.png

  7. 8 horas atrás, nigolino disse:

    Fiz a conexão no banco de dados usando o netbeans mas não está encontrando o DRIVE, aparentemente está tudo correto, mas retorna sempre o erro: No suitable driver found for jdbc:postgresql:localhost:5432/ProjetoFolha

    
    public class ConexaoBD {
        
        public Statement stn; //pesquisa no banco de dados
        public ResultSet rs; // armazena o resultado da pesquisa
        private String driver = "org.postgresql.Driver"; //identifica o nosso serviço BD
        private String caminho = "jdbc:postgresql://localhost:5432/ProjetoFolha"; //Qual o caminho do BD
        private String usuario = "postgres";
        private String senha = "xxxxxxx";
        public Connection con; 
        
        public void conexao(){
            
            try {
                System.setProperty("jdbc.Drivers", driver);
                con=DriverManager.getConnection(caminho, usuario, senha);
                JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso");
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro na conexão efetuada!\n"+ex.getMessage());
            }
        }

     

    Moderador, ontem acabei inserindo a minha dúvida aqui no campo C, pode remove-lo daqui porque não estou conseguindo.

  8. Fiz a conexão no banco de dados usando o netbeans mas não está encontrando o DRIVE, aparentemente está tudo correto, mas retorna sempre o erro: No suitable driver found for jdbc:postgresql:localhost:5432/ProjetoFolha

    public class ConexaoBD {
        
        public Statement stn; //pesquisa no banco de dados
        public ResultSet rs; // armazena o resultado da pesquisa
        private String driver = "org.postgresql.Driver"; //identifica o nosso serviço BD
        private String caminho = "jdbc:postgresql://localhost:5432/ProjetoFolha"; //Qual o caminho do BD
        private String usuario = "postgres";
        private String senha = "xxxxxxx";
        public Connection con; 
        
        public void conexao(){
            
            try {
                System.setProperty("jdbc.Drivers", driver);
                con=DriverManager.getConnection(caminho, usuario, senha);
                JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso");
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro na conexão efetuada!\n"+ex.getMessage());
            }
        }

     

  9. Fiz a conexão no banco de dados usando o netbeans mas não está encontrando o DRIVE, aparentemente está tudo correto, mas retorna sempre o erro: No suitable driver found for jdbc:postgresql:localhost:5432/ProjetoFolha

    public class ConexaoBD {
        
        public Statement stn; //pesquisa no banco de dados
        public ResultSet rs; // armazena o resultado da pesquisa
        private String driver = "org.postgresql.Driver"; //identifica o nosso serviço BD
        private String caminho = "jdbc:postgresql://localhost:5432/ProjetoFolha"; //Qual o caminho do BD
        private String usuario = "postgres";
        private String senha = "xxxxxxx";
        public Connection con; 
        
        public void conexao(){
            
            try {
                System.setProperty("jdbc.Drivers", driver);
                con=DriverManager.getConnection(caminho, usuario, senha);
                JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso");
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro na conexão efetuada!\n"+ex.getMessage());
            }
        }

     

  10. Adriano, obrigado pela ajuda, vou postar as três classes do erro, talvez você consiga enxergar o que não vejo...

    Caused by: java.lang.NullPointerException
        at model.dao.impl.SellerDaoJDBC.update(SellerDaoJDBC.java:83)
        at model.services.SellerService.saveOrUpdate(SellerService.java:22)
        at gui.SellerFormController.onBtSaveAction(SellerFormController.java:128)
        ... 134 more

    @FXML
    	public void onBtSaveAction(ActionEvent event) {
    		// System.out.println("Ação do Botão Salvar!!!");
    		if (entity == null) {
    			throw new IllegalStateException("Entity was null");
    		}
    		if (service == null) {
    			throw new IllegalStateException("Service was null");
    		}
    		try {
    			entity = getFormData();// pegar os dados da cx e instanciar um depto
    			service.saveOrUpdate(entity);
    			notifyDataChangeListeners();
    			Utils.currentStage(event).close();
    			
    		} catch (ValidationException e) {
    			setErrorMessages(e.getErros());
    		} catch (DbException e) {
    			Alerts.showAlert("Error saving object", null, e.getMessage(), AlertType.ERROR);
    		}
    	}

     

    package model.services;
    
    import java.util.List;
    
    import model.dao.DaoFactory;
    import model.dao.SellerDao;
    import model.entities.Seller;
    
    public class SellerService {
    	
    	private SellerDao dao = DaoFactory.createSellerDao();
    	
    	public List<Seller> findAll(){
    		return dao.findAll();
    	}
    	
    	public void saveOrUpdate(Seller obj) {
    		if(obj.getId() == null) {
    			dao.insert(obj);
    		}
    		else {
    			dao.update(obj);
    		}
    	}

     

    @Override
    	public void update(Seller obj) {
    		PreparedStatement st = null;
    		try {
    			st = conn.prepareStatement(
    					"UPDATE seller "
    					+ "SET Name = ?, NumFunc = ?, NumVinc = ?, NumPen = ?,  Email = ?, BirthDate = ?, BaseSalary = ?, Banco = ?, Agencia = ?, Conta = ?, DepartmentId = ? "
    					+ "WHERE Id = ?");
    			
    			st.setString(1, obj.getName());
    			st.setInt(2, obj.getNumFunc());
    			st.setInt(3, obj.getNumVinc());
    			st.setInt(4, obj.getNumPen());
    			st.setString(5, obj.getEmail());
    			st.setDate(6, new java.sql.Date(obj.getBirthDate().getTime()));
    			st.setDouble(7, obj.getBaseSalary());
    			st.setInt(8, obj.getBanco());
    			st.setInt(9, obj.getAgencia());
    			st.setInt(10, obj.getConta());
    			st.setInt(11, obj.getDepartment().getId());
    			st.setInt(12, obj.getId());
    			
    			st.executeUpdate();
    		}
    		catch (SQLException e) {
    			throw new DbException(e.getMessage());
    		}
    		finally {
    			DB.closeStatement(st);
    		}
    	}

     

    package model.entities;
    
    import java.io.Serializable;
    import java.util.Date;
    
    public class Seller implements Serializable {
    
    	private static final long serialVersionUID = 1L;
    
    	private Integer id;
    	private String name;
    	private Integer numFunc;
    	private Integer numVinc;
    	private Integer numPen;
    	
    	private Double baseSalary;
    	private Date birthDate;
    	private String email;
    	
    	private Integer banco;
    	private Integer agencia;
    	private Integer conta;
    	
    	private Department department;
    	
    	public Seller() {
    	}
    
    	public Seller(Integer id, String name, Integer numFunc, Integer numVinc, 
    			Integer numPen, Double baseSalary, Date birthDate,
    			String email, Integer banco, Integer agencia, Integer conta, 
    			Department department) {
    		this.id = id;
    		this.name = name;
    		this.numFunc = numFunc;
    		this.numVinc = numVinc;
    		this.numPen = numPen;
    				
    		this.baseSalary = baseSalary;
    		this.birthDate = birthDate;
    		this.email = email;
    		
    		this.banco = banco;
    		this.agencia = agencia;
    		this.conta = conta;
    		
    		this.department = department;
    	}
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public Integer getNumFunc() {
    		return numFunc;
    	}
    
    	public void setNumFunc(Integer numFunc) {
    		this.numFunc = numFunc;
    	}
    		
    	public Integer getNumVinc() {
    		return numVinc;
    	}
    
    	public void setNumVinc(Integer numVinc) {
    		this.numVinc = numVinc;
    	}
    
    	public Integer getNumPen() {
    		return numPen;
    	}
    
    	public void setNumPen(Integer numPen) {
    		this.numPen = numPen;
    	}
    
    	public String getEmail() {
    		return email;
    	}
    
    	public void setEmail(String email) {
    		this.email = email;
    	}
    
    	public Date getBirthDate() {
    		return birthDate;
    	}
    
    	public void setBirthDate(Date birthDate) {
    		this.birthDate = birthDate;
    	}
    
    	public Double getBaseSalary() {
    		return baseSalary;
    	}
    
    	public void setBaseSalary(Double baseSalary) {
    		this.baseSalary = baseSalary;
    	}
    	
    	public Integer getBanco() {
    		return banco;
    	}
    
    	public void setBanco(Integer banco) {
    		this.banco = banco;
    	}
    
    	public Integer getAgencia() {
    		return agencia;
    	}
    
    	public void setAgencia(Integer agencia) {
    		this.agencia = agencia;
    	}
    
    	public Integer getConta() {
    		return conta;
    	}
    
    	public void setConta(Integer conta) {
    		this.conta = conta;
    	}
    
    	public Department getDepartment() {
    		return department;
    	}
    
    	public void setDepartment(Department department) {
    		this.department = department;
    	}
    
    	@Override
    	public int hashCode() {
    		final int prime = 31;
    		int result = 1;
    		result = prime * result + ((id == null) ? 0 : id.hashCode());
    		return result;
    	}
    
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		Seller other = (Seller) obj;
    		if (id == null) {
    			if (other.id != null)
    				return false;
    		} else if (!id.equals(other.id))
    			return false;
    		return true;
    	}
    	
    	
    	@Override
    	public String toString() {
    		return "Seller [id=" + id + ", name=" + name + ", numFunc=" + numFunc + ", numVinc=" + numVinc + ", numPen="
    				+ numPen + ", baseSalary=" + baseSalary + ", birthDate=" + birthDate + ", email=" + email + ", banco="
    				+ banco + ", agencia=" + agencia + ", conta=" + conta + ", department=" + department + "]";
    	}
    }

     

  11. Estou com problemas ao carregar os dados do banco de dados: não está carregando todos os dados para o formulário, até então não tem erros, mas ao usar o botão salvar ocasiona o seguinte erro na linha abaixo:

    Caused by: java.lang.NullPointerException
        at model.dao.impl.SellerDaoJDBC.insert(SellerDaoJDBC.java:40)
        at model.services.SellerService.saveOrUpdate(SellerService.java:19)
        at gui.SellerFormController.onBtSaveAction(SellerFormController.java:128)

    @Override
    	public void insert(Seller obj) {
    		PreparedStatement st = null;
    		try {
    			st = conn.prepareStatement(
    					"INSERT INTO seller "
    					+ "(Name, NumFunc, DepartmentId) "
    					+ "VALUES "
    					+ "(?, ?, ?)",
    					Statement.RETURN_GENERATED_KEYS);
    			
    			st.setString(1, obj.getName());
    			st.setInt(2, obj.getNumFunc());
    			st.setInt(11, obj.getDepartment().getId());
    			
    			int rowsAffected = st.executeUpdate();
    			
    			if (rowsAffected > 0) {
    				ResultSet rs = st.getGeneratedKeys();
    				if (rs.next()) {
    					int id = rs.getInt(1);
    					obj.setId(id);
    				}
    				DB.closeResultSet(rs);
    			}
    			else {
    				throw new DbException("Unexpected error! No rows affected!");
    			}
    		}
    		catch (SQLException e) {
    			throw new DbException(e.getMessage());
    		}
    		finally {
    			DB.closeStatement(st);
    		}
    	}

     

  12. @AdrianoSiqueira Ficou muito bom, está retornando o valor correto. Eu esqueci de passar para a outra classe o cálculo: double margBruPres = (cotaBruta * 0.30); como faço para passar para a classe AccountSGC? Mais um detalhe, o programa não está aceitando o separador ponto ou vírgula, é possível de usar o padrão do Brasil e não o Americano? Desde já agradeço a resposta!

  13. //PROGRAMA PRINCIPAL
    import javax.swing.JOptionPane;
    import java.util.Locale;
    import java.util.Scanner;
    import entities.AccountSGC;
    public class Main {
    
        public static void main(String[] args) throws NumberFormatException {
            Scanner sc = new Scanner(System.in);
            Locale.setDefault(Locale.US);
            AccountSGC account;
            
            int liqPst = Integer.parseInt(JOptionPane.showInputDialog("Informe o valor líquido da Pens: "));
            
            int cotaBruta = Integer.parseInt(JOptionPane.showInputDialog("Informe o valor da cota pens bruta: "));
            int somaConsig = Integer.parseInt(JOptionPane.showInputDialog("Informe a Soma Consig tipo Empréstimo N em Andam: "));
            float margBruPres = (cotaBruta * 0.30F);
           
            if(liqPst > 0.00F){
              account.margem(margemValue);
              account = new AccountSGC(liqPst);
              JOptionPane.showMessageDialog(null,"Margem Consignável: "+margemConsig,"margemConsig",JOptionPane.INFORMATION_MESSAGE);
            }else{ 
              JOptionPane.showMessageDialog(null,"Valor líquido NEGATIVO: "+liqPst,"liqPst",JOptionPane.INFORMATION_MESSAGE);
            }
     	    sc.close();
        }
    }
    //PROGRAMA SECUNDÁRIO
    package entities;
    
    public class AccountSGC{
      private float liqPst;
      private float cotaBruta;
      private float margemConsig;
      
      //
      public AccountSGC(float liqPst, float cotaBruta){
        this.liqPst = liqPst;
        this.cotaBruta = cotaBruta;
      }
      
      public float getliqPst(){
        return liqPst;
      }  
    
      public float setliqPst(){
        this.liqPst = liqPst;
      }
    
      public double getmargemConsig(){
        return margemConsig;
      }
       
      public void Margem(double cotaBruta){
        margemConsig = ((liqPst + somaConsig) - margBruPres)*1.00F;
      }
    }

    Pessoal, crie uma calculadora que funciona com apenas uma classe, quando tento fazer com duas classes (construtores)não funciona...se possível alguém tenta rodar e dar umas dicas..

  14. /* Função recursiva, soma serie (i, j, k). Esta função devolve a soma da série
    de valores do intervalo (i,j), com incremento k.
    */
    #include<stdio.h>
    #include<stdlib.h>
    
    int SomaSerie(int i, int j, int k){
    	int soma = 0;
    	if(i<j){
    	      soma i + SomaSerie(i + k, j, k);
    	}else{
    	      return soma = soma + j;
    	}
    }
    
    int main(){
    	int i, j, k;
    	
    	printf("\nInforme o intervalo fechado [i, j]: ");
    	scanf("[%d, %d]", &i, &j);
    
    	printf("\nInforme k: ");
    	scanf("%d", &k);
    
    	printf("\n");
    	printf("Soma = %d", SomaSerie(i, j, k));
    
    	return 0;
    }

    Estou tentando fazer funcionar essa função, mas tem um erro na linha: soma i + SomaSerie(i + k, j, k);

  15. #include<stdio.h>
    #include<math.h>
    
    /*Programa recursivo que receba um número inteiro positivo par N e imprima todos os números pares de 0 até N em ordem decrescente*/
    
    int paresdecres(int n, int lista){
      printf("%d\n", lista);
    
      if(n>lista && lista %2 == 0){
        return paresdecres(n -2, lista);
      }else{
        return 0;
      }
    }
    
    int main(void){
      int n;
      int lista = 0;
      printf("Digite um número\n");
      scanf("%d", &n);
    
      paresdecres(n,lista);
    
      return 0;
    }

    Fiz esse programa que deveria retornar nos números pares na ordem decrescente, mas retorna zero para cada posição, o que pode ser?

  16. #include<stdio.h>
    #include<math.h>
    
    /*Programa recursivo que receba um número inteiro positivo N e imprima todos os números naturais
    de 0 até N em ordem decrescente.*/
    //PROCESSAMENTO
    int imprimenumeros(int n, int y){
      printf("%d\n", y);
      if(n > y){
        return imprimenumeros(n,  -1);
      }else{
        return 0;
      }
    }
    
    int main(){
      //ENTRADA
      int n;
      int y = 0;
      printf("Digite um número inteiro N: \n");
      scanf("%d", &n);
      //SAÍDA
      imprimenumeros(n,y);
       
      return 0;
    }

    Pessoal, fiz um programa para listar os números na ordem crescente, tudo funcionou direito, mas quando tentei fazer na ordem decrescente, não funciona...

  17. #include<stdio.h>
    #define N 5
    //Programa com função recursiva que receba números do usuário e permita somar os elementos de um vetor de inteiros.
    
    int soma(int vet[], int tamanho){
        if(tamanho == 1){
        return vet [0];
      }else{
        return vet[tamanho - 1] + soma(vet, tamanho -1);
      }
    }
    
    int main(){
      printf("------SOMA DE VETORES-----\n");
      int resultado = soma(vet, N);
        for(int i = 0; i < 5; i++){
        printf("Informe %d/5 valor:", (i+1));
        scanf("%d", &vet[i]);
        }
      printf("Soma dos números %d \n", resultado);
      printf("-----------------FIM-----------------\n");
      return 0;
    }

    Meu problema é fazer o link entre a recursividade e o principal main. Gostaria que o programa recebesse do usuário 5 números e somasse em vetor!

  18. 2 horas atrás, nigolino disse:
    
    #include<stdio.h>
    #include<math.h>
    //Programa com função recursiva que receba dois inteiros positivos k e n e calcule kn.
    int potencia(k, n){
      
      if(k == 0){
        return 0;
      }else{
        return(pow(k,n));
      }
    }
    
    int main(){
      int k, n;
      printf("----------Calculo de Potência Kn-----------\n");
      printf("Informe um inteiro positivo K: ");
      scanf("%d", &k);
      printf("Informe um inteiro positivo n: ");
      scanf("%d", &n);
    
      printf("O valor de %d elevado a %d é :%d\n", k,n, potencia(k));
    printf("--------------------FIM--------------------\n");
      return 0;
    }

    Fiz as devidas correções, mas o resultado não é o esperado o programa está usando o próprio número como expoente...

    faltava corrigir a linha : printf("O valor de %d elevado a %d é :%d\n", k,n, potencia(k,n));

  19. #include<stdio.h>
    #include<math.h>
    //Programa com função recursiva que receba dois inteiros positivos k e n e calcule kn.
    int potencia(k, n){
      
      if(k == 0){
        return 0;
      }else{
        return(pow(k,n));
      }
    }
    
    int main(){
      int k, n;
      printf("----------Calculo de Potência Kn-----------\n");
      printf("Informe um inteiro positivo K: ");
      scanf("%d", &k);
      printf("Informe um inteiro positivo n: ");
      scanf("%d", &n);
    
      printf("O valor de %d elevado a %d é :%d\n", k,n, potencia(k));
    printf("--------------------FIM--------------------\n");
      return 0;
    }
    3 horas atrás, MB_ disse:

    A função pow(b,e) é a potência baseexpoente.

     

    Já potencia (k) não é adequada, primeiro porque já existe uma função potência, segundo a potência tem 2 argumentos.

    Sim sua função "potência" pode ter um segundo argumento -n- que é o expoente da base k.

     

    Como sugere bem aqui: 

     

    no cabeçario da função para sua chamada.

    int potencia (k,n)

    Fiz as devidas correções, mas o resultado não é o esperado o programa está usando o próprio número como expoente...

  20. 10 horas atrás, arfneto disse:

    exemplo.png.6c779bc79eca344e437739558431e52e.png

     

    Entendo. Pergunto porque talvez você fosse o caso de usar um banco de dados se precisar fazer consultas mais elaboradas no futuro. sqlite é a opção simples. E se pudesse usar outra linguagem, C++ tem várias estruturas que poderia aproveitar para indexar tudo, como listas, filas, árvores e coisas assim. Só declarar e usar.

    Sobre SQLite em C pode ver algo em https://www.sqlite.org/cintro.html.

     

    Claro, em C é mais divertido :D

     

    De volta ao tópico: Em relação ao seu exemplo:

     

    exemplo.png.6c779bc79eca344e437739558431e52e.png

     

    Acho mais produtivo usar então os argumentos direto na linha de comando, e vou deixar um exemplo com dois parâmetros, para usar assim --- imaginando que seu programa se chame cadastro:

    
    cadastro arquivo linhas 
    
    ou apenas 
    
    cadastro
    

    E se você chamar assim

    
    cadastro arquivo.txt 200    le as primeiras 200 linhas do arquivo "arquivo.txt"
    cadastro arquivo.doc        le todas as linhas de "arquivo.doc"
    cadastro                    le os campos a partir da entrada padrão mesmo
    

    Assim fica mais fácil de testar... E você pode editar direto uns arquivos de teste

     

    Seguindo a lógica de que falei, escrevi uma parte de uma possível solução em puro e simples C. Vou postar aqui agora porque já pode ser útil. Falta implementar a estrutura de dados para acumular os valores e tenho uma ideia para uma solução simples que permitiria responder sua questão. Quando eu tiver um tempo volto a postar a solução, e aí completa. Se eu tiver tempo talvez escreva amanhã.

     

    Eis o que tem aqui:

     

    O programa lê o arquivo de entrada e extrai os dados, com a opção de limitar o número de linhas... Para essas 11 linhas em "c.txt"

    
    2345678 nome  com    muitos      espacos   12345678
    12345678 nome com espacos   12345678
    
    ABCD
    3401 LUCIA GONCALVES  0017786001 00000        BR00      00000
    
    
    3401 LUCIA  GONCALVES  0017786001 00                       00000
    3402    MARTA       PEREIRA DOS SANTOS 00177   00000
    3401     LUCIA GONCALVES  0017786001 00000      00000
    3402 MARTA PEREIRA DOS SANTOS 0017786002 00000 08

    E usando cadastro c.txt 8

     

    O programa gera

    run-test.thumb.png.e1248285ae4770bc6a974b96ce79ff31.png

     

     

    Como as linhas aparecem na tela você pode ir ao arquivo texto de origem e corrigir algo ou ver o que está errado no arquivo ou no programa e continuar refinando a solução. Ou se usa linux pode ir usando grep awk sort,  pr e ir criando seus relatórios sem programar nada.

     

    Para ir a uma determinada linha do arquivo de entrada e que aparece na tela você pode, se usa linux e vi, digitar :n e ir para a linha n do arquivo direto. Se usa Visual Studio pode usar control-G e digitar a linha.

    Vendo uma linha com mais detalhe:

    linha.png.b1a5392ee7ad46860459c947d7f0e974.png

     

    Eu uso Windows 10 e Visual Studio '19 e meu compilador não é assim o máximo para rodar C, e faz isso como uma cortesia :D digamos. Até tenho máquinas Linux na mesa de trás mas não tenho tempo para criar um ambiente nelas para essas coisas que faço com meu tempo livre...

     

    De volta ao programa:

    note o nome do programa na primeira linha: trata-se do argumento zero da linha de comando e sempre tem o nome do programa executável: argv[0]. Os próximos valores são opcionais e são aqueles que você digita na lionha de comando e vai entender ao ler a fonte em main().

    Ai vem para cada linha da entrada o numero dela, o tamanho do nome e as posições de início e fim como o programa identificou. Logo depois uma linha mostra com asteriscos onde o programa acha que está o nome, para facilitar para conferir.

    Depois o programa isola o nome, descartando o que não for letra à esquerda e à direita e depois troca qualquer sequência de espaços por um espaço apenas, para poder tratar o caso em que um mesmo nome tenha sido digitado com espaços a mais ou a menos. E converte todas as letras para minúsculas para ter certeza que não vai diferenciar nomes só por uma inicial maiúscula por exemplo. Essa última linha, que tem a tag (comprimido) é a que será usada para cadastrar o nome no banco de dados.

     

    O programa tem essas 5 funções, alem de main()

    
    int acha_o_nome(int, int, char*);
    int ajusta_o_nome(int, char*);
    int completa_buffer(Buffer*);
    int trata_o_nome(int, char*);
    int uma_linha(char*, const int, Buffer*);

    e a lógica é bem simples. Não é a melhor solução, nem uma boa solução possivelmente, mas sugiro dar uma lida. Gira em torno da estrutura abaixo e gera os nomes para cadastrar depois e comparar. Na prática lê o arquivo em segmentos de um certo amanho --- como 32k no exemplo --- e aí vai caçando as linhas dentro do buffer. Quando acaba lê mais um pedaço e assim vai.

    
    typedef struct
    {
        unsigned char *        pBuffer;
        int                    disponiveis;
        int                    proximo;
        FILE *                 arquivo;
    }
    Buffer;
    

    Eis o trecho de main() que implementa a lógica

     


     

    
        buffer.pBuffer        = malloc((size_t)(_TAMANHO_BUFFER));
        buffer.disponiveis    = 0;
        buffer.proximo        = 0;
        buffer.arquivo        = Entrada;
    
        do
        {
            int t;
            status = uma_linha(linha, _LIMITE_LINHA, &buffer);
            if (status > 0)
            {    // leu uma linha: em branco?
                linhas_lidas++;
                if ((t = strlen(linha)) > 0)
                {    // tem algo na linha
                    acha_o_nome(linhas_lidas, t, linha);
                }
                else
                {
                    linhas_em_branco++;
                    fprintf(stderr, "Linha %d: Linha em branco\n", linhas_lidas);
                }    // end if
    
                if (linhas_lidas < limite_teste) continue;
                fprintf(stderr, "\n\n\n***** atingido limite de %d linhas *****\n", limite_teste);
                break;
            }    // end if
        } while (status >=0);
    
        free(buffer.pBuffer);
        fclose(Entrada);
        printf("Final: Lidas %d linhas --- %d em branco\n", linhas_lidas, linhas_em_branco);
        return EXIT_SUCCESS;
      }
    

    Na verdade é quase o programa todo :D 

    O programa chama uma_linha() para tentar ler a próxima linha e se consegue chama acha_o_nome() para isolar o nome e esta chama trata_o_nome() para continuar o serviço. Se já tem um plano para cadastrar os caras pode usar direto em ajusta_o_nome() que é onde o programa faz a compressão final do nome lido.

     

    Depois escrevo uma opção para o cadastro e a identificação final dos nomes e com as duplicatas identificadas.

     

    Eis o programa todo até aqui

    
    #define    _CRT_SECURE_NO_WARNINGS
    #define    _TAMANHO_BUFFER  (32768)
    #define    _LIMITE_LINHA    (128)
    
    #include "ctype.h"
    #include "errno.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    
    typedef struct
    {
        unsigned char *        pBuffer;
        int                    disponiveis;
        int                    proximo;
        FILE *                arquivo;
    }
    Buffer;
    
    typedef struct
    {
        unsigned int        linhas_lidas;
        unsigned int        linhas_em_branco;
        unsigned int        nomes_validos;
    }
    Base_de_dados;
    
    int acha_o_nome(int, int, char*);
    int ajusta_o_nome(int, char*);
    int completa_buffer(Buffer*);
    int trata_o_nome(int, char*);
    int uma_linha(char*, const int, Buffer*);
    
    int acha_o_nome(int n, int t, char* l)
    {
        // n = numero da linha
        // t = tamanho da linha
        // l = a linha
        int inicio = 0;
        int final = 0;
        int i;
        // linha em l com t caracteres, t>0
        for (inicio = 0; inicio < t; inicio++) if (!isdigit(l[inicio])) break;
        for (final = inicio; final < t; final++) if (isdigit(l[final])) break;
        if (inicio == final)
        {
            fprintf(stderr, "Linha %d: Nome nao identificado\n", n);
            return 1;
        }
        fprintf(stderr,"Linha %d: Nome com %d caracteres. Posicao [%d,%d]\n", n, (final - inicio), inicio, final);
        fprintf(stderr,"%s\n", l);
        for (i = 0; i < inicio; i++) fprintf(stderr, "-");
        for (i = inicio; i < final; i++) fprintf(stderr, "*");
        for (i = final; i < t; i++) fprintf(stderr, "-");
        fprintf(stderr, "\n");
    
        // cria uma string com o nome e passa para a rotina que vai 
        // cadastrar a entrada
        i = final - inicio + 1;
        char* pessoa = malloc((size_t) i);
        *(pessoa+i-1) = 0;    // pra nao esquecer: finaliza a string
        memcpy(pessoa, (l+inicio), (final-inicio) );
        fprintf(stderr, "[%s]\n", pessoa);
    
        trata_o_nome(n, pessoa);
    
        free(pessoa);
        return EXIT_SUCCESS;
    }    // end acha_o_nome()
    
    
    int ajusta_o_nome(int n, char* nome)
    {
        // a partir de um nome ok converte caracteres e comprime espacos
        int        in_space = 0;        // usado para comprimir os espacos
        int        t = strlen(nome);
        char*    pVetor = NULL;        // ponteiro para a string de saida
        char*     vetor = malloc(t+1);
    
        // copia nome para vetor comprimindo os brancos ou tabs
        *vetor = tolower(*nome);    // copia o primeiro caracter
        pVetor = vetor + 1;
        *pVetor = 0;
    
        for (int i=1; i<t-1; i++)
        {
            if (isblank(nome[i]))
            {
                if(in_space==1)
                {
                    continue;
                }
                else
                {
                    in_space = 1;
                    *pVetor = ' ';
                    pVetor++;
                    continue;
                }
            }
            else
            {
                in_space = 0;
                *pVetor = tolower(nome[i]);
                pVetor++;
            }    // end if
        }    // end for
        // copia o ultimo caracter, que com certeza nao era branco
        *pVetor = tolower(*(nome+t-1));
        pVetor++;
        *pVetor = 0;    // termina a string de saida
        fprintf(stderr, "Linha %d: Nome[%s] (comprimido)\n", n, vetor);
        free(vetor);
        return 0;
    }    // end ajusta_o_nome()
    
    
    int completa_buffer(Buffer* b)
    {
        // retorna
        //  0 ao completar o buffer ou
        // -1 se EOF ou erro no arquivo
        unsigned char* p = b->pBuffer;
        // desloca para o inicio o que tinha sobrado no buffer
         for(int i=0; i<(b->disponiveis); i++)    *(p+i) = *(p+ i + b->proximo);
        int a_ler = _TAMANHO_BUFFER - b->disponiveis;    // tenta completar
        p = b->pBuffer + b->disponiveis;    // le a partir do que ja tinha
        int lidos = fread( p, 1, a_ler, b->arquivo );
        b->disponiveis = b->disponiveis + lidos;
        b->proximo = 0;
        if (lidos == 0)    return(-1);    else return 0;    // sinaliza final
    }    // end completa_buffer()
    
    
    int trata_o_nome(int n, char* nome)
    {
        int t = strlen(nome);
        int inicio = 0;
        int final = 0;
        // linha em l com t caracteres, t>0
        for (inicio=0; inicio<t; inicio++)
        {
            if (isblank(nome[inicio]))
            {
                continue;
            }
            else
            {
                break;
            }    // end if
        }    //    end for
        
        if (inicio >= t)
        {    // pode estar toda em branco
            fprintf(stderr, "Linha %d: Nome [%s] em branco\n", n, nome);
            return -1;
        }
    
        for (final=(t-1); final>=inicio; final--)
        {
            if (!isblank(nome[final]))
            {
                break;
            }
            else
            {
                continue;
            }    // end if
        }    // end for
        if (inicio >= final) return 1;
        nome[final+1] = 0;    // trunca aqui
        fprintf(stderr, "Linha %d: Nome [%s]\n", n, nome + inicio);
        ajusta_o_nome(n, nome+inicio);
        fprintf(stderr, "__________ __________ __________ __________ __________ __________ \n\n");
    
        return 0;
    }    // end trata_o_nome()
    
    
    int uma_linha(    char* linha, const int maximo, Buffer* buf)
    {
        //
        // retorna
        // - 1 e a linha em linha ou
        // - 0 se nao tem uma linha completa no buffer
        // - -1 se acabou o arquivo
        //
        int lidos;
        unsigned char* inicio = buf->pBuffer + buf->proximo;
        unsigned char* p = inicio;
        for (int i=0; i<buf->disponiveis; i++)
        {
            if (*p == '\n')
            {
                *p = 0;
                strcpy(linha, inicio);
                lidos = strlen(linha);
                buf->proximo += 1 + i;
                buf->disponiveis -= i+1;
                return 1;
            }
            else
            {
                p++;
            }    // end if
        }    // end for
        int n = completa_buffer(buf);
        return n;
    }    // end uma_linha()
    
    int main(int argc, char** argv)
    {
        FILE*            Entrada = NULL;
        Buffer            buffer;
        Base_de_dados    base;
        int                linhas_lidas = 0;
        int                linhas_em_branco = 0;
        int                status = 0;
        char            linha[256];
        int                limite_teste;    // para em n linhas do arquivo
    
        printf("\n\nRodando: %s\n\n\n", argv[0]);
        if (argc > 1)
        {
            Entrada = fopen(argv[1], "r");
            if (Entrada == NULL)
            {
                fprintf(stderr, "Erro abrindo %s\n", argv[1]);
                return 0;
            }    // end if
            fprintf(stderr, " - Lendo a partir do arquivo %s\n", argv[1]);
            if (argc > 2)
            {
                limite_teste = atoi(argv[2]);
                fprintf(stderr, " - Limitado a %d linhas na entrada\n\n\n", limite_teste);
            }
            else
            {
                limite_teste = INT_MAX;
            }    // end if
        }
        else
        {
            fprintf(stderr, "Usando entrada padrão\n");
            Entrada = stdin;
        }// end if
    
        buffer.pBuffer        = malloc((size_t)(_TAMANHO_BUFFER));
        buffer.disponiveis    = 0;
        buffer.proximo        = 0;
        buffer.arquivo        = Entrada;
    
        do
        {
            int t;
            status = uma_linha(linha, _LIMITE_LINHA, &buffer);
            if (status > 0)
            {    // leu uma linha: em branco?
                linhas_lidas++;
                if ((t = strlen(linha)) > 0)
                {    // tem algo na linha
                    acha_o_nome(linhas_lidas, t, linha);
                }
                else
                {
                    linhas_em_branco++;
                    fprintf(stderr, "Linha %d: Linha em branco\n", linhas_lidas);
                }    // end if
    
                if (linhas_lidas < limite_teste) continue;
                fprintf(stderr, "\n\n\n***** atingido limite de %d linhas *****\n", limite_teste);
                break;
            }    // end if
        } while (status >=0);
    
        free(buffer.pBuffer);
        fclose(Entrada);
        printf("Final: Lidas %d linhas --- %d em branco\n", linhas_lidas, linhas_em_branco);
        return EXIT_SUCCESS;
      }

     

    Roda tranquilo em Windows e provavelmente no linux sem qualquer mudança.

     

    Sugiro testar o programa com o seu arquivo e ver o que acontece, ao menos com umas primeiras linhas, e depois com todas as linhas.

     

    Até ++

     

     

     

     

     

     

     

     

     

     

     

    Demais esse programa, vou levar um mês para entender todo ele..ficou 10.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!