alterar cadastro em C
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
Discussão (1)
Carregando comentários...