Ir para conteúdo
Fórum Script Brasil
  • 0

AJUDA COM CODIGO


João Luiz Mainardi

Pergunta

Boa noite pessoal,estou com o codigo pronto,mas nas linhas "celula *popular" e no começo do main quando abre o arquivo,eles não estao funcionando direito, era para abrir o cadastro,fazer tudo e salvar num arquivo .txt e sempre que abrir ele usar esse arquivo já mas não esta dando certo,se alguém puder ajudar.

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <time.h>
#include <fstream> 

using namespace std;

typedef struct no {
   int matricula;
   string nome;
   struct no *prox; //ponteiro para o proximo elemento
} Celula;

Celula *cadastrar(Celula *e);
Celula *inserir(Celula umNo, Celula *e);
void exibir(Celula *e);
int contarNos(Celula *e);
void localizar(int matricula, Celula *e);
Celula *remover(int matricula, Celula *e);
int existeArquivo(char nomeArquivo[]);
Celula *popular(char nomeArquivo[], Celula *e);

int main() {
   Celula *entrada = NULL;
   srand(time(NULL));
   int opcao;
   int matricula;
   FILE *procurador;
   
   if (existeArquivo("basedados.txt")) {
      cout << "Arquivo localizado e sera exibido...\n";
      entrada = popular("basedados.txt", entrada);
      exibir(entrada);
   } 
   
   do {
      cout << "1 - Inserir\n";
      cout << "2 - Exibir\n";
      cout << "3 - Localizar por matricula\n";
      cout << "4 - Localizar por nome\n";
      cout << "5 - Remover por matricula\n";
      cout << "6 - Finalizar\n";
      cout << "Opcao: ";
      cin >> opcao;
      
      switch (opcao) {
         case 1:
            cout << "Cadastrando aluno\n";
            entrada = cadastrar(entrada);
            break;
         case 2:
            cout << "Total de elementos da estrutura: " << contarNos(entrada) << "\n";
            exibir(entrada);
            cout << "\n\n";
            break;
         case 3:
		    if (entrada != NULL) {
               cout << "Localizando por matricula\n";            
               cout << "Digite matricula a ser pesquisada: ";
               cin >> matricula;
               localizar(matricula, entrada);
			} else cout << "Estrutura vazia\n\n";
            break;         
         case 4:
            cout << "Localizando por nome\n";
            
            break;
         case 5:
		    if (entrada != NULL) {
				cout << "Removendo por matricula\n";
				cout << "Digite matricula a ser removida: ";
				cin >> matricula;
				entrada = remover(matricula, entrada);            
			} else cout << "Estrutura vazia\n\n";
            break;
         case 6:
            cout << "Obrigado por usar o sistema\n";            
            break;
         default:
            cout << "Opcao invalida\n";
            break;
      }
   } while (opcao != 6);
   
   return 1;
}

Celula *remover(int matricula, Celula *e) {
   Celula *i, *iR;
   
   if (e == NULL) {
      cout << "Estrutura vazia. Matricula não encontrada\n\n";
	  return e;	
   }
   
   for (iR = NULL, i = e; i != NULL; iR = i, i = i->prox) {
      if (matricula == i->matricula) {
         cout << "Matricula localizada no sistema\n";
         //ta no inicio
         if (i == e) {
            //apagar o primeiro e reapontar a estrutura
            e = e->prox;         		
		} else if (i->prox == NULL) { //ta no fim
		   //apagar o ultimo e reapontar a estrutura
		   iR->prox = NULL;
		} else { //ta no meio
            //apagar o do meio e reapontar a estrutura
            iR->prox = i->prox;         		
        }
        free(i);
         return e;
      }
   }
   cout << "Matricula não localizada\n\n";
   return e;
}

void localizar(int matricula, Celula *e) {
   Celula *i;
   
   if (e == NULL) cout << "Estrutura vazia. Matricula não encontrada\n\n";
   
   for (i = e; i != NULL; i = i->prox) {
      if (matricula == i->matricula) {
         cout << "Matricula localizada no sistema\n";
         cout << "Nome: " << i->nome << "\n\n";
         return; //acabou a pesquisa
      }
   }
   cout << "Matricula não localizada\n\n";
}

int contarNos(Celula *e) {
   Celula *i;
   int contador = 0;
   
   if (e == NULL) return contador;
   
   for (i = e; i != NULL; i = i->prox) {
   	contador++;
   }

   return contador;
}

void exibir(Celula *e) {
   Celula *i;
   
   if (e == NULL) {
      return; //sai forcadamente
   } else {
      cout << "\nRelacao de alunos\nMatricula - Nome\n";
      for (i = e; i != NULL; i = i->prox) {
         cout << i->matricula << " - " << i->nome << "\n";
      }
   }
}

Celula *inserir(Celula umNo, Celula *e) {
   Celula *novo;
   
   //alocar
   novo = (Celula *)malloc(sizeof(Celula));
   
   //depositar
   novo->matricula = umNo.matricula;
   novo->nome = umNo.nome;
   
   //engatar
   novo->prox = e; //e contem o endereco do ultimo elemento
   
   //retornar
   return novo;
}

Celula *cadastrar(Celula *e) {
   Celula umNo;
   
   srand(time(NULL));
   umNo.matricula = (rand() % 1000) + 100;
   cout << "Matricula: " << umNo.matricula << "\n";
   cout << "Nome: ";
   cin >> umNo.nome;
      
   e = inserir(umNo, e);
   
   cout << "\nCadastro realizado com sucesso\n\n";
   
   return e;
}

int existeArquivo(char nomeArquivo[]) {
   FILE *procurador = fopen(nomeArquivo,"r");
   
   if (!procurador) return 0; //não existe o arquivo
   else {
      fclose(procurador);
      return 1; //existe o arquivo
   }
}

/*Celula *popular(char nomeArquivo[], Celula *e) {
   FILE *procurador = fopen(nomeArquivo,"r");
   char matricula[100];
   char nome[100];
   celula umNo;
   do {
      fscanf(procurador,"%s\t%s",matricula, nome);//
      if (feof(procurador)) {
         break;
      }
      e = inserir(unNo, e);
   } while (1);
   fclose(procurador);
   return e;
}*/
Celula *popular(char nomeArquivo[], Celula *e) {
   ofstream auxArquivo ("basedados.txt");
   if(auxArquivo.is_open()){
	   auxArquivo << cout << "Matricula: " << umNo.matricula <<  cout << "Nome: ";  << umNo.matricula;
	   auxArquivo.close();   	
   }else{
       cout << "\nArquivo Inválido\n\n";   	   
   }
}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...