Thread: Write in txt...

  1. #1
    Registered User
    Join Date
    Aug 2008
    Posts
    23

    Write in txt...

    I make this contact phonebook, i want to learn how to write in a txt and read,
    my program do this...

    1 - register a contact
    2 - delete a contact
    3 - search for a contact
    4 - list contacts
    5 - i want to write in a txt
    6 - read txt

    5 and 6 i don´t have a clue how to do...

    Code:
    // Projeto_Veiculos.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "tool.h"
    #include <dos.h>
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    #include <iostream>
    
    /* ---------------------------------------------------------------- */
    
    struct _no	// define a estrutura do processo
    {
    	struct _no *anterior;
    	char nome[40];
    	char rua[100];
    	char bairro[50];
    	char cidade[50];
    	char estado[10];
    	char cep[15];
    	char telefone[15];
    	struct _no *proximo;
    };
    
    /* ---------------------------------------------------------------- */
    
    typedef struct _no No;
    
    No *Raiz=NULL;		// define um ponteiro para o numero raiz
    No *Ultimo=NULL;	// define um ponteiro para o ultimo numero
    
    /* ---------------------------------------------------------------- */
    
    void Insere(char *nome, char *rua, char *bairro, char *cidade, char *estado, char *cep, char *telefone) 
    {
    	No *Atual;
    	No *NoAnterior;
    	No *NoPosterior;
    	No *NovoNo;
    
    	// Verifica se o nó na raiz é nulo, que é o caso quando a lista está vazia.
    	// Se for, cria nó na raiz com os dados fornecidos e faz o último nó coincidir com ele.
    	if (Raiz==NULL) 
    	{
    		Raiz = new No;
    		strcpy (Raiz->nome,nome);
    		strcpy (Raiz->rua,rua);
    		strcpy (Raiz->bairro,bairro);
    		strcpy (Raiz->cidade,cidade);
    		strcpy (Raiz->estado,estado);
    		strcpy (Raiz->cep,cep);
    		strcpy (Raiz->telefone,telefone);
    		Raiz->proximo = NULL;
    		Raiz->anterior = NULL;
    		Ultimo = Raiz;
    	}
    	else 
    	{  
    		// se já houver raiz percorre a lista duplamente encadeada, comecando da raiz.
    		// inicialmente, não há nó anterior.
    		NoAnterior = NULL;
    		Atual = Raiz;
    		while (Atual!=NULL) 
    		{
    			if (strcmp(Atual->nome,nome)>=0) break; // verifica se o nó atual é igual, se for superior pára
    			else 
    			{
    				NoAnterior = Atual;
    				Atual = Atual->proximo;
    			}
    		}
    
    		if (Atual!=NULL) // só faz a comparação abaixo se existe o nó Atual
    			if (strcmp(Atual->nome,nome)==0) 
    			{
    				printf ("\n\n Nome ja existente!\n");
    				printf ("\n\n\n\n ");
    				system("pause");
    				system("cls");
    				return;
    			}
    
    			NoPosterior = Atual;		// insere um novo nó entre o nó atual e o nó anterior		
    			NovoNo = new No;			// aloca memória para o novo nó			
    			strcpy (NovoNo->nome,nome);	// coloca dados no nó a ser inserido
    			strcpy (NovoNo->rua,rua);
    			strcpy (NovoNo->bairro,bairro);
    			strcpy (NovoNo->cidade,cidade);
    			strcpy (NovoNo->estado,estado);
    			strcpy (NovoNo->cep,cep);
    			strcpy (NovoNo->telefone,telefone);
    
    			// atualiza ponteiros do novo nó
    			NovoNo->proximo = NoPosterior;	
    			NovoNo->anterior = NoAnterior;
    
    			// atualiza ponteiros dos nós vizinhos
    			if (NoAnterior != NULL)			
    				NoAnterior->proximo = NovoNo;
    			if (NoPosterior != NULL)
    				NoPosterior->anterior = NovoNo;
    
    			// verifica se o novo nó foi inserido no início ou no fim da lista se foi, atualiza referências
    			if (NovoNo->anterior == NULL)
    				Raiz = NovoNo;
    			if (NovoNo->proximo == NULL)
    				Ultimo = NovoNo;
    	}
    }
    
    /* ---------------------------------------------------------------- */
    
    void Lista() 
    {
    	int ciclos;
    	No *Atual;
    	Atual = Raiz;
    	ciclos=1;
    	
    	while(Atual!=NULL)		// percorre a lista duplamente encadeada desde a raiz
    	{
    		system("cls");
    		printf("\n\n Reg. N: %d",ciclos);
    		printf("\n Nome: %s\n Rua: %s\n Bairro: %s\n Cidade: %s\n Estado: %s\n CEP: %s\n Telefone: %s\n",Atual->nome,Atual->rua,Atual->bairro,Atual->cidade,Atual->estado,Atual->cep,Atual->telefone);
    		Atual=Atual->proximo;
    		ciclos++;
    	}
    	printf ("\n\n\n\n ");
    	system("pause");
    	system("cls");
    }
    
    /* ---------------------------------------------------------------- */
    
    void Deleta(char *nome) 
    {
    	No *Atual;
    	No *Anterior=NULL;
    	No *Posterior;
    
    	Atual = Raiz;
    
    	// primeiro, percorre a lista duplamente encadeada desde a raiz
    	while (Atual!=NULL) 
    	{
    		// verifica se já encontrei ou já passei do nome procurado
    		if (strcmp(Atual->nome,nome)>=0) break;
    		else  
    		{  // se ainda não passou
    			Anterior = Atual;
    			Atual = Atual->proximo;
    		}
    	}
    
    	if (Atual!=NULL)
    		Posterior = Atual->proximo;
    
    	// verifica se o nó atual é mesmo o nó procurado
    	if (Atual != NULL)
    		if (strcmp(Atual->nome,nome)==0) {  // se for, deleta
    			// faz com que o nó subsequente ao atual seja o subsequente ao nó anterior para manter a integridade da lista
    			if (Atual != Raiz)
    				Anterior->proximo = Atual->proximo;
    			else  // se o no atual é a raiz, atualizo a referência para a raiz
    				Raiz = Atual->proximo;
    			// faz com que a referência para o nó anterior do próximo nó seja
    			// o nó anterior ao que será deletado, para manter a integridade
    			if (Atual != Ultimo)
    				Posterior->anterior = Anterior;
    			else  // se o nó atual é o último, atualiza a referência para o último
    				Ultimo = Anterior;
    			// agora, o nó atual morreeeee!!!!
    			free(Atual);
    			printf ("\n\n Nome deletado! \n\n");
    			printf ("\n\n ");
    			system("pause");
    			system("cls");
    			return;
    		}
    
    		printf("\n\n Nao achei!\n");
    		printf ("\n\n\n\n ");
    		system("pause");
    		system("cls");
    }
    
    /* ---------------------------------------------------------------- */
    
    void Pesquiza(char *nome)
    {        
    	No *Atual;
    
    	Atual = Raiz;
    	while (Atual!=NULL)
    	{
    		if (strcmp(Atual->nome,nome)>=0) break;
    		else
    			Atual = Atual->proximo;
    	}
    
    	if (Atual!=NULL)
    		if (strcmp(Atual->nome,nome)==0)
    		{
    			system("cls");
    			printf("\n Nome: %s\n Rua: %s\n Bairro: %s\n Cidade: %s\n Estado: %s\n CEP: %s\n Telefone: %s\n",Atual->nome,Atual->rua,Atual->bairro,Atual->cidade,Atual->estado,Atual->cep,Atual->telefone);
    			printf("\n\n\n\n ");
    			system("pause");
    			system("cls");
    			return;
    		}
    
    		printf("\n\n Nome nao encontrado!");	
    
    		printf("\n\n ");
    		system("pause");
    		system("cls");
    }
    
    /* ---------------------------------------------------------------- */
    
    void main () 
    {
    	int opcao;
    	char nome[40];
    	char rua[100];
    	char bairro[50];
    	char cidade[50];
    	char estado[10];
    	char cep[15];
    	char telefone[15];
    
    	do 
    	{
    		printf("\n\n *************************************** \n *          AGENDA DE TELEFONE         * \n *************************************** \n *  (1) -> Inserir Novo Cadastro:      * \n *  (2) -> Excluir um Cadastro:        * \n *  (3) -> Pesquizar um Cadastro:      * \n *  (4) -> Listar Todos os Cadastros:  * \n *  (5) -> Gravar no Arquivo:          * \n *  (6) -> Ler do Arquivo              * \n *  (0) -> Para Sair                   * \n *************************************** \n\n --> ");
    		scanf("%d",&opcao);
    
    		if (opcao == 1 || opcao == 2 || opcao == 3) 
    		{
    			fflush(stdin);
    			printf("\n\n Digite o Nome: " );			
    			gets(nome);			
    		}
    
    		switch (opcao) 
    		{
    		case 1: 
    			{	
    			fflush(stdin);				
    			printf(" Digite a Rua e o N da casa: " );			
    			gets(rua);
    			fflush(stdin);
    			printf(" Digite o Bairro: " );			
    			gets(bairro);	
    			fflush(stdin);
    			printf(" Digite a Cidade: " );			
    			gets(cidade);	
    			fflush(stdin);
    			printf(" Digite o Estado: " );			
    			gets(estado);	
    			fflush(stdin);
    			printf(" Digite o CEP: " );			
    			gets(cep);
    			fflush(stdin);
    			printf(" Digite o Telefone: " );			
    			gets(telefone);
    			fflush(stdin);
    			system("cls");
    			Insere(nome,rua,bairro,cidade,estado,cep,telefone); 
    			break;
    			}
    
    		case 2: 
    			{
    				Deleta(nome); 
    				break;
    			}
    		case 3: 
    			{
    				Pesquiza(nome); 
    				break;
    			}
    		case 4: 
    			{
    				Lista();				
    				break;
    			}
    		case 5: 
    			{												
    				break;
    			}
    		case 6: 
    			{								
    				break;
    			}
    
    
    
    		}
    	} while (opcao != 0);
    } 
    
    /* ---------------------------------------------------------------- */

  2. #2
    {Jaxom,Imriel,Liam}'s Dad Kennedy's Avatar
    Join Date
    Aug 2006
    Location
    Alabama
    Posts
    1,065
    looks like
    Quote Originally Posted by Erviha
    Code:
    		if (Atual!=NULL) // só faz a comparação abaixo se existe o nó Atual
    			if (strcmp(Atual->nome,nome)==0) 
    			{
    				printf ("\n\n Nome ja existente!\n");
    				printf ("\n\n\n\n ");
    				system("pause");
    				system("cls");
    				return;
    			}
    
    			NoPosterior = Atual;		// insere um novo nó entre o nó atual e o nó anterior		
    			NovoNo = new No;			// aloca memória para o novo nó			
    			strcpy (NovoNo->nome,nome);	// coloca dados no nó a ser inserido
    			strcpy (NovoNo->rua,rua);
    			strcpy (NovoNo->bairro,bairro);
    			strcpy (NovoNo->cidade,cidade);
    			strcpy (NovoNo->estado,estado);
    			strcpy (NovoNo->cep,cep);
    			strcpy (NovoNo->telefone,telefone);
    
    			// atualiza ponteiros do novo nó
    			NovoNo->proximo = NoPosterior;	
    			NovoNo->anterior = NoAnterior;
    
    			// atualiza ponteiros dos nós vizinhos
    			if (NoAnterior != NULL)			
    				NoAnterior->proximo = NovoNo;
    			if (NoPosterior != NULL)
    				NoPosterior->anterior = NovoNo;
    
    			// verifica se o novo nó foi inserido no início ou no fim da lista se foi, atualiza referências
    			if (NovoNo->anterior == NULL)
    				Raiz = NovoNo;
    			if (NovoNo->proximo == NULL)
    				Ultimo = NovoNo;
    you mean this to be in the " if (Atual!=NULL) // só faz a comparação abaixo se existe o nó Atual" but you don't surround it with {}.

    Start there, if you've done it once, you've probably done it multiple times.

    [edit]Also, is this C or C++? If this is supposed to be C, then this
    Code:
    			NovoNo = new No;			// aloca memória para o novo nó
    isn't.

    You'll want NovoNo = malloc(sizeof(*NovoNo)); at a minimum.[/edit]
    Last edited by Kennedy; 10-07-2009 at 12:20 PM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Read from txt and write in an external program
    By sombrancelha in forum C Programming
    Replies: 8
    Last Post: 06-01-2009, 09:04 PM
  2. Replies: 12
    Last Post: 10-17-2005, 06:49 AM
  3. Reroute where programs write to
    By willc0de4food in forum C Programming
    Replies: 7
    Last Post: 09-21-2005, 04:48 PM
  4. Help...using strings and txt files
    By Juicehead in forum C Programming
    Replies: 0
    Last Post: 11-26-2002, 09:01 AM
  5. write in c
    By PutoAmo in forum C Programming
    Replies: 6
    Last Post: 04-03-2002, 07:53 PM