Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
Mayara Andres

alterar cadastro em C

Pergunta

Estou fazendo um trabalho da faculdade e estou com vários problemas "bestas" mas que não consigo resolver. 

É um sistema para uma biblioteca, que possui os menus: Usuario, Livros, Editoras e Emprestimos. (E em cada um deles, sub-menus com cadastrar, alterar, excluir e listar)

Comecei fazendo pelo menu usuario. Ele cadastra e lista os cadastros, o código do usuario é inserido sozinho.
ERRO 1: Quando inicio o programa, digito 1 pra entrar no menu Usuario, e 1 pra cadastrar (nessa parte, eu tenho que digitar 1, dar enter e digitar 1 novamente, só assim ele entra no sub-menu de cadastro. Acontece a mesma coisa para todos os outros menus.

ERRO 1.1: Quando eu listo os cadastros, ele sempre mostra um mais, como o chamado "lixo", mesmo usando fflush.

ERRO 2: Para alterar o cadastro do usuario, preciso que o usuario insira o codigo, verificar se é igual ao cadastrado e só assim alterar, mas ele cai sempre no else.


 

/*
 ============================================================================
 Name        : biblioteca-mayara.c
 Author      : Mayara 
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int codUsuario,cpf;
    char nomeUsuario[20];
}usuario;

//INICIO FUNCOES
//FUNCAO QUE NAO RETORNA NEM RECEBE NADA, SÓ IMPRIMI O CABECALHO
void cabecalho () {
    printf ("\t\t ========================================== \n");
    printf ("\t\t = SISTEMA DE GERENCIAMENTO DE BIBLIOTECA =\n");
    printf ("\t\t ====  DESENVOLVIDO POR MAYARA ANDRES  ==== \n");
    printf ("\t\t ========================================== \n");
}
//FUNCAO QUE RECEBE A OPCAO DO MENU E RETORNA A MESMA
int menuPrincipal () {
    int opMP = 0;
    printf ("\t\t\t\t MENU PRINCIPAL \n ");
    printf ("\t\t\t\t 1 - Usuarios \n");
    printf ("\t\t\t\t 2 - Livros \n");
    printf ("\t\t\t\t 3 - Editoras \n");
    printf ("\t\t\t\t 4 - Emprestimos \n");
    printf ("\t\t\t\t 5 - Sair \n");
    scanf ("%d", &opMP);
    return opMP;
}
//FUNCAO QUE RECEBE A OPCAO DO MENU DE USUARIOS E RETORNA A MESMA
int menuUsuario () {
    int opMU = 0;
    printf ("\t\t\t\t 1 - Cadastrar \n");
    printf ("\t\t\t\t 2 - Listar \n");
    printf ("\t\t\t\t 3 - Alterar \n");
    printf ("\t\t\t\t 4 - Excluir \n");
    printf ("\t\t\t\t 5 - Sair \n");
    scanf ("%d", &opMU);
    }
//FUNCAO PARA ZERAR O VETOR DE USUARIOS
void zerarVetor (usuario *vet) {
    int i;
    for (i=0;i<20;i++) {
        vet.codUsuario = 0;
        vet.cpf = 0;
    }
}


//FUNCAO QUE RECEBE O VETOR E RETORNA EM QUE POSICAO DO VETOR
//FOI INSERIDO O ULTIMO USUARIO
int retornaUltPosicao (usuario *vet) {
    int i=0;
    //verifica se o vetor na posicao i é maior que zero
    //se for maior que zero, tem usuario cadastrado
    //acrescenta um
    while(vet[i+1].codUsuario > 0) {
        i++;
    }
    //sai do loop e retorna a ultima posicao encontrada
    return i+1;
}

//funcao para cadastro de usuarios
void cadastrarUsuario (usuario *vet) {
    int i = 0;
    //busca a ultima posicao cadastrada
    i = retornaUltPosicao(vet);
    /*if (i == 0) {
        i = 1;
    }*/
    //delimitar para 20 o numero de registros
    if (i == 20) {
        printf ("Limite de usuarios atingido \n");
        system ("PAUSE");
        return;
    }
    //aqui começa o cadastro
    printf (" \t\t\t\tCADASTRAR USUARIO:  \n");
    printf ("\t\t\t\t----------------------\n");
    printf ("\n\n\t\t\t\tCodigo do usuario: %d \n",i);
   // fflush (stdin);
    vet.codUsuario = i;
    printf ("\n \t\t\t\tDigite o nome do usuario: ");
    fflush (stdin);
    gets (vet.nomeUsuario);

    printf ("\n \t\t\t\tDigite o cpf do usuario: ");
    //fflush (stdin);
    scanf ("%d", &vet.cpf);
    printf ("\n\t\t\t\tUsuario cadastrado com sucesso!\n");
    system ("PAUSE");
}
void listaUsuarios (usuario *vet) {
    int i;
    printf (" \t\t\t\tUSUARIOS CADASTRADOS:  \n");
    printf ("\t\t ==========================================\n");
    for (i=1;i<=retornaUltPosicao(vet);i++) {
    printf ("\n\t\t\t\t Usuario Numero: %d",i);
    printf ("\n\t\t\t\t  Cod: %d", vet.codUsuario);
    printf ("\n\t\t\t\t  Nome: %s ", vet.nomeUsuario);
    printf ("\n\t\t\t\t  CPF: %d  ", vet.cpf);
    printf ("\n \n");
    }
    system ("PAUSE");
}
void excluirUsuario (usuario *vet) {
    int i,cod;
    printf("Digite o codigo do usuario: ");
    scanf("%d", &cod);
    /*for (i=0;i<20;i++) {
        if (vet.codUsuario == cod) {
            vet.nomeUsuario = "";
            vet.cpf = "";
        }*/
    }
}
void alterarUsuario (usuario *vet) {
    int i,cod;
        printf("Digite o codigo do usuario: ");
        scanf("%d", &cod);
    for (i=0;i<20;i++) {
    //CAI SEMPRE NO ELSE
    if (vet.codUsuario == cod) {
        printf("Digite o nome: ");
        fflush(stdin);
        gets(vet.nomeUsuario);
        printf("\n");
        printf("Digite o cpf: ");
        scanf("%d", vet.cpf);
        printf("Usuario alterado com sucesso!");
    }
    else {
            printf("Codigo invalido \n");
    }
    system ("pause");
    }
}
//FIM FUNCOES

int main() {
    //vetor do tipo usuario de 20 posicoes
    usuario vet[20];
  
    //variavel pra usar no switch
    int opEscolhida;
    //chamando o zerar vetor USUARIOS
    zerarVetor(vet);
   
    //while pra repetir
    while (1==1) {
        //limpa a tela
        system ("CLS");
        //chama o cabeçalho
        cabecalho();
        //op recebe o que foi escolhido no menu
        opEscolhida = menuPrincipal();
        switch (opEscolhida) {
        case 1:
        //limpa a tela
        system("CLS");
        //chama o cabecalho
        cabecalho();
        //printf pra mostrar qual o menu
        printf ("\t\t\t\t MENU USUARIOS \n");
        //chama o menu de usuarios
        menuUsuario(vet);
        int opmenuusuario;
        scanf("%d", &opmenuusuario);
        if (opmenuusuario == 1) {
            system ("CLS");
            cabecalho();
            cadastrarUsuario(vet);
        }
        if (opmenuusuario == 2) {
            system ("CLS");
            cabecalho();
            listaUsuarios(vet);
        }
        if (opmenuusuario == 3) {
            system ("CLS");
            cabecalho();
            alterarUsuario(vet);
        }
        /*if (opmenuusuario == 4) {
            system ("CLS");
            cabecalho();
            excluiUsuario (vet);
        }*/
        break;
        case 2:
        //limpa a tela
        system("CLS");
        //chama o cabecalho
        cabecalho();
        //printf pra mostrar qual o menu
        printf ("\t\t\t\t MENU LIVROS \n");
        //chama o menu de livros
        menuLivro(vet2);
        break;
        case 3:
        //limpa a tela
        system("CLS");
        //chama o cabecalho
        cabecalho();
        //printf pra mostrar qual o menu
        printf ("\t\t\t\t MENU EDITORA \n");
        //chama o menu de editoras
        menuEditora(vet3);
        break;
        case 4:
        //limpa a tela
        system("CLS");
        //chama o cabecalho
        cabecalho();
        //printf pra mostrar qual o menu
        printf ("\t\t\t\t MENU EMPRESTIMOS \n");
        //chama o menu de emprestimos
        menuEmprestimo(vet4);
        break;
        case 5:
            printf("VOCE ESCOLHEU SAIR DO PROGRAMA!\n");
            printf("\n\n");
            system ("PAUSE");
        /*
        default:
            printf("OPCAO INVALIDA, POR FAVOR SELECIONE UM ITEM DO MENU");
            printf("\n\n");
            system ("PAUSE");*/
        }//FECHA SWITCH
    }//FECHA WHILE
}//FECHA MAIN


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 resposta a esta questão

Recommended Posts

Não se usa fflush na entrada padrão (comportamento indefinido).
Gets tem o problema de buffer overflow.

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NOME 20
#define MAX_CPF 12
#define MAX_USUARIOS 20

enum OpcoesPrincipais{USUARIOS = 1, LIVROS, EDITORAS, EMPRESTIMOS, SAIR};
enum OpcoesUsuarios{CADASTRAR = 1, LISTAR, ALTERAR, EXCLUIR};

typedef struct {
  int codUsuario;
  char cpf[MAX_CPF];
  char nomeUsuario[MAX_NOME];
} usuario;


void zerarVetor (usuario *vet) {
  int i;
  for (i=0;i<MAX_USUARIOS;i++) {
    vet[i].codUsuario = -1;
    strcpy(vet[i].cpf, "");
    strcpy(vet[i].nomeUsuario, "");
  }
}

void cabecalho () {
  printf ("\t\t ========================================== \n");
  printf ("\t\t = SISTEMA DE GERENCIAMENTO DE BIBLIOTECA =\n");
  printf ("\t\t ====  DESENVOLVIDO POR MAYARA ANDRES  ==== \n");
  printf ("\t\t ========================================== \n");
}


int menuPrincipal () {
  int opMP = 0;
  printf ("\t\t\t\t MENU PRINCIPAL \n ");
  printf ("\t\t\t\t %d - Usuarios \n", USUARIOS);
  printf ("\t\t\t\t %d - Livros \n", LIVROS);
  printf ("\t\t\t\t %d - Editoras \n", EDITORAS);
  printf ("\t\t\t\t %d - Emprestimos \n", EMPRESTIMOS);
  printf ("\t\t\t\t %d - Sair \n", SAIR);
  scanf ("%d%*c", &opMP);
  return opMP;
}

int menuSecundario () {
  printf ("\t\t\t\t %d - Cadastrar \n", CADASTRAR);
  printf ("\t\t\t\t %d - Listar \n", LISTAR);
  printf ("\t\t\t\t %d - Alterar \n", ALTERAR);
  printf ("\t\t\t\t %d - Excluir \n", EXCLUIR);
  printf ("\t\t\t\t %d - Sair \n", SAIR);
}


int retornaUltimaPosicao (usuario *vet) {
  int i;
  for(i=0; i<MAX_USUARIOS && vet[i].codUsuario != -1; i++); 
  return i;
}

void lerUsuario(int pos, usuario * vet) {
  printf ("\n \t\t\t\tDigite o nome do usuario: ");
  fgets(vet[pos].nomeUsuario, MAX_NOME, stdin);
    
  printf ("\n \t\t\t\tDigite o cpf do usuario: ");
  fgets(vet[pos].cpf, MAX_CPF, stdin);
  vet[pos].cpf[MAX_CPF-1] = '\0';
}

void cadastrarUsuario (usuario *vet) {
  int i = 0;
  i = retornaUltimaPosicao(vet);
 
  if (i == MAX_USUARIOS) {
    printf ("Limite de usuarios atingido \n");
  } else {
  
    printf (" \t\t\t\tCADASTRAR USUARIO:  \n");
    printf ("\t\t\t\t----------------------\n");
    printf ("\n\n\t\t\t\tCodigo do usuario: %d \n",i);
    vet[i].codUsuario = i;
    
    lerUsuario(i, vet);
    
    printf ("\n\t\t\t\tUsuario cadastrado com sucesso!\n");
    
  }
}

void listaUsuarios (usuario *vet) {
  printf (" \t\t\t\tUSUARIOS CADASTRADOS:  \n");
  printf ("\t\t ==========================================\n");
  for(int i=0; i<MAX_USUARIOS; i++) {
    if (vet[i].codUsuario != -1) {
      printf ("\n\t\t\t\t Usuario Numero: %d",i);
      printf ("\n\t\t\t\t  Cod: %d", vet[i].codUsuario);
      printf ("\n\t\t\t\t  Nome: %s ", vet[i].nomeUsuario);
      printf ("\n\t\t\t\t  CPF: %s  ", vet[i].cpf);
      printf ("\n \n");
    }
  }
}


int pesquisarUsuario(int codigo, usuario* vet) {
  int i;
  for(i=0; i < MAX_USUARIOS; i++) {
    if (vet[i].codUsuario == codigo) break;
  }
  
  return i;
}
void alterarUsuario (usuario *vet) {
  int cod;
  printf("Digite o codigo do usuario: ");
  scanf("%d%*c", &cod);
  
  int pos = pesquisarUsuario(cod, vet);
  
  if (pos >= MAX_USUARIOS) {
    puts("Usuário não encontrado.");
  } else {
    lerUsuario(pos, vet);
    printf("Usuario alterado com sucesso!");
  }
}


int main() {
  usuario vet[MAX_USUARIOS];
  zerarVetor(vet);

 int opEscolhida;
  while (1) {
    
    cabecalho();
    opEscolhida = menuPrincipal();
    
    if (opEscolhida == SAIR) break;
    
    switch (opEscolhida) {
      case USUARIOS:
        cabecalho();
        
        printf ("\t\t\t\t MENU USUARIOS \n");
        
        int opmenuusuario;
        menuSecundario();
        scanf ("%d%*c", &opmenuusuario);
  
        if (opmenuusuario == CADASTRAR) {
          cabecalho();
          cadastrarUsuario(vet);
        } else if (opmenuusuario == LISTAR) {
          cabecalho();
          listaUsuarios(vet);
        } else if (opmenuusuario == ALTERAR) {
          cabecalho();
          alterarUsuario(vet);
        }
        break;

      default:
        printf("OPCAO INVALIDA, POR FAVOR SELECIONE UM ITEM DO MENU\n\n");

    }
  }
  return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por biza
      Ola
      Estou  a construir um datalogger em código C.Desta forma necessito passar os dados entre ficheiros. O meu problema está na inclusão de algumas variáveis no topo de um arquivo .txt onde os dados são salvos. Variáveis como tempo de data e hora, id do dispositivo e muito mais... Para isso preciso de ajuda, gostaria que os dados estivessem disponíveis para todos os arquivos, até aí é fácil, basta incluir a variável como extern, no arquivos *.h e incluí-lo em todos os outros que você deseja que a variável esteja disponível. mas como posso fazer para ter acesso a ele dentro do array que preciso?
      Exemplo: main.c
      #include "main.h" char dateTimeFormat[24]; void main(void){ dateTimeFormat = "22-02-22 13:23:04"; } main.h
      extern char dateTimeFormat[24];  
      teste.c
       
      #include "main.h" extern char dateTimeFormat[24]; /*Header .txt file initialization*/ volatile char headerFile[] ="\n\n" "# HEALT MONITORING SYSTEM \r\n" "# DEVELOPED: BIZA \r\n" "# VERSION: B \r\n" "# DATATIMECAPTURE:"+dateTimeFormat+ "\r\n" "# SAMPLINGFREQUENCY: 500 \r\n" "# SAMPLECHANNELS: 1 2 3 4 5 6 7 8 \r\n" "# SAMPLINGRESULUTION: 24 \r\n" "# IDDEVICE: HEALTHY \r\n" "# ENDOFHEADER  
      Como posso incluir a variável "dateTimeFormat" dentro do headerFile como descrevi acima?
       
    • Por Wilherme
      Boa tarde galera, preciso de uma ajuda,
       
      Tenho um gráfico no meu Power Bi porem apresenta o erro abaixo:
       

       
      já habilitei as funções porém ainda com erro.
       
       
      Obrigado.
    • Por 4Unknow
      Bom dia comunidade Imasters.

      Venho aqui tratar de um problema dúvida que estou tendo com um layout que estou tentando usar o formulário php dele.
      Quando clico em enviar ele me enviar para um arquivo .php  (assets/vendor/simple-forms/sendmail.php)

      Ele não envia o e-mail, acredito que deveria aparecer uma mensagem que o contato foi enviado corretamente.
      Vou deixar os arquivos aqui em anexo quem puder me ajudar nessa, ficaria muito grato.
       
      Link Website (wetransfer.com)
    • Por Algorithm
      Olá a todos
       
      Eu estou codificando um exemplo de uso do GraphQL com Nodejs, mas eu estou recebendo um erro de syntax relacionado a [ : ] [ Dois Pontos ], mas eu comparei meu codigo, com o da documentação oficial e esta tudo certo. Será que alguem, conseguiria achar o erro ?
       
      OBS: Esta incluso neste post [ Exemplo Documentação, Meu Exemplo, Mensagem de Erro, Código Completo ]
       
      Exemplo Documentação
      module.exports = /* GraphQL */ ` type Client { id: ID! name: String age: Int products: [Product] } type Query { clients: [Client] client(id: ID!): Client } type Mutation { addClient(name: String!, age: Int!): Client } `  
      Meu Exemplo
      const typeDefs = ` type Pessoa { _id: ID _codigo: Float _nome: String _idade: Int _email: String } input inputPessoa { _codigo: Float _nome: String _idade: Int _email: String } type Query { resposta: String saudacao(nome: String!): String findPessoaOne(codigo: Float): Pessoa findPessoa(input: inputPessoas): [Pessoa] } type Mutation { insertPessoa(input: inputPessoa): Pessoa updatePessoa(codigo: Float, input: inputPessoa) Pessoa deletePessoa(codigo: Float) [Pessoa] } `;  
      Mensagem de Erro
      C:\Users\Core\node\node_modules\graphql\language\parser.js:1413 throw (0, _syntaxError.syntaxError)( ^ GraphQLError: Syntax Error: Expected ":", found Name "Pessoa". at syntaxError (C:\Users\Core\node\node_modules\graphql\error\syntaxError.js:15:10) at Parser.expectToken (C:\Users\Core\node\node_modules\graphql\language\parser.js:1413:40) at Parser.parseFieldDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:847:10) at Parser.optionalMany (C:\Users\Core\node\node_modules\graphql\language\parser.js:1510:28) at Parser.parseFieldsDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:831:17) at Parser.parseObjectTypeDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:803:25) at Parser.parseDefinition (C:\Users\Core\node\node_modules\node_modules\graphql\language\phql\language\parser.js:171:23) at Parser.many (C:\Users\Core\node\node_modules\graphql\language\parser.js:1529:26) at Parser.parseDocument (C:\Users\Core\node\node_modules\graphql\language\parser.js:121:25) at parse (C:\Users\Core\node\node_modules\graphql\language\parser.js:32:17) { path: undefined, locations: [ { line: 26, column: 57 } ], extensions: [Object: null prototype] {} }  
      Codigo Completo
      // Requires const express = require('express'); const GraphQL_HTTP = require('express-graphql'); const { mergeSchemas } = require('@graphql-tools/schema'); // Run // const connect = MongoClient.connect(''); const app = express(); const getCode = () => { return 10 }; // GraphQL Definitions || Query and Mutation const typeDefs = ` type Pessoa { _id: ID _codigo: Float _nome: String _idade: Int _email: String } input inputPessoa { _codigo: Float _nome: String _idade: Int _email: String } type Query { resposta: String saudacao(nome: String!): String findPessoaOne(codigo: Float): Pessoa findPessoa(input: inputPessoas): [Pessoa] } type Mutation { insertPessoa(input: inputPessoa): Pessoa updatePessoa(codigo: Float, input: inputPessoa) Pessoa deletePessoa(codigo: Float) [Pessoa] } `; // Functions const resolvers = { Query: { resposta: function() { return `GraphQL Conectado com Sucesso...`; }, saudacao: function(_, args) { return `Olá ${args.nome}! Seja Muito Bem Vindo(a) a GraphQL!!!! ` }, findPessoaOne: function(_, args) { return db.collection('GraphQL-Pessoa').findOne({codigo: args.codigo}) .then((result) => { return result; }); }, findPessoa: function(_, args) { return db.collection(`GraphQL-Pessoa`).find(args.input).toArray() .then((result) => { return result; }); }, Mutation: { insertPessoa: function(_, args) { args.input.codigo = getCode(); return db.collection(`GraphQL-Pessoa`).insertOne(args.input) .then((result) => { return result.ops[0]; }); }, updatePessoa: function(_, args) { return db.collection('GraphQL-Pessoa').updateOne({codigo: args.codigo}, {$set: args.input}) .then((result) => { if(result.result.n > 0) return `Registro Alterado com Sucesso!`; else return `Ocorreu um erro ao alterar o registro`; }); }, deletePessoa: function(_, args) { return db.collection(`GraphQL-Pessoa`).deleteOne({codigo: args.codigo}) .then((result) => { if(result.result.n > 0) return `Registro Deletado com Sucesso!`; else return `Ocorreu um erro ao deletar o registro`; }); } } } }; const schema = mergeSchemas({ typeDefs: typeDefs, resolvers: resolvers }) // Listen app.listen(3005, () => { console.log(`Servidor Rodando na Porta 3005`); })  
       
      Obrigado
    • Por Kefatif
      Prezados, bom dia.
       
      Preciso da ajuda dos Srs!
       
      Não estou conseguindo localizar o erro no arquivo abaixo.
       
      Ao clicar no botão ele me envia a mensagem: "Erro ao registrar estoque !"
       
      Poderiam me ajudar?
       
      Agradeço desde já pela ajuda.
       
      <?php include_once 'autenticacao.php'; include_once'../../conexao.php'; include_once '../../funcoes.php'; include_once '../../decodepost.php'; if( !isset($_POST["cont"]) or !isset($_SESSION["cnes"]) ){ ECHO "Erro"; }else{ $cnes = $_SESSION["cnes"]; $idusuario = $_SESSION["idusuario"]; $cont = $_POST["cont"]; $sql = "insert into LESAO_ESTOQUE values(null,curdate(), '".$cnes."',".$idusuario.")"; if(mysqli_query($con, $sql)){ $idestoque = mysqli_insert_id($con); $coberturas = 0; for($i=1 ; $i<=$cont; $i++){ if(isset($_POST[$i])){ if($_POST[$i]<=0){ }else{ $qtd = $_POST[$i]; $sqlqtd = "insert into LESAO_REL_ESTOQUE_COBERTURAS values(".$idestoque.", ".$i.", ".$qtd.", ".$idusuario.")"; if(mysqli_query($con, $sqlqtd)){ $coberturas = $coberturas+1; } } } } $grav = "Registrado estoque de ".$coberturas." coberturas !"; }else{ $grav = "Erro ao registrar estoque !"; } //5- Fechar a conexão mysqli_close($con); ?> <script> alert('<?php echo $grav; ?>'); location.href="estoque-registrar.php"; </script> <?php } ?>  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.