• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Hellblazzer

Modificar Contacto

13 mensagens neste tópico

Boas pessoal.

Estou a fazer um pequeno projecto em C++ que consiste numa agenda telefónica (cujos dados desaparecem quando se fexa o programa lol...)

O código é o seguinte:

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
struct contacto {
int cod;
char nome [100];                            //declaracao da estrutura contactos
int telefone;
int telemovel;
};
int cc=0;                            /*'conta contactos' - variavel que vai contar os contactos existentes*/

void inserir_contacto (contacto *p);          //prototipo da funçao para inserir contactos
void consultar_contacto_nome (contacto *p);   //prototipo da funçao para consultar contactos por nome
void consultar_contacto_lista (contacto *p);  //prototipo da funçao para consultar contactos por listagem
void modificar_contacto (contacto *p);        //prototipo da funçao para modificar contacto
void apagar_contacto ();                      // prototipo da funçao para apagar contacto

void main () {

cout << '\t' << '\t' << '\t'<< "<- Contact Manager v1.0 ->"<<'\n'<<'\n'<<'\n';
cout << '\t' << '\t' << '\t'<< '\t'<< "   Menu"<<'\n';

int nc;
cout << "Quantos contactos tera no maximo a sua agenda?" << '\n';
cin >> nc;    									  // numero de contactos maximo a existir
contacto * p;
p = new contacto [nc];  // declaraçao de um array de contactos com a extensao nc
int op;

do{
cout << "1 - Inserir novo contacto"<<'\n';
cout << "2 - Consultar contactos por nome"<<'\n';
cout << "3 - Consultar todos os contactos"<<'\n';
cout << "4 - Modificar um contacto"<<'\n';
cout << "5 - Apagar um contacto"<<'\n';


cin >> op;

switch (op){
case 1 : inserir_contacto(p) ;break;
case 2 : consultar_contacto_nome(p) ;break;
case 3 : consultar_contacto_lista(p) ;break;                 //opcoes do menu
case 4 : modificar_contacto(p) ;break;
case 5 : apagar_contacto();break;
case 6 : break;
default : cout <<"Opçao invalida!"<<'\n';
}

}while (op != 6);

}

void inserir_contacto(contacto *p) {                //funcao de inserir contacto

cout<< "Introduza o codigo de contacto, o actual e " << cc << "."<< '\n';
cin >> (p+cc)->cod;                                             //inserir codigo
cout << "Introduza o nome do contacto ";
gets ((p+cc)->nome);                                			      //inserir nome
cout << "Introduza o numero de telefone do contacto ";
cin >> (p+cc)->telefone;                      			        //inserir telefone
cout << "Introduza o numero de telemovel do contacto ";
cin >> (p+cc)->telemovel;                        			    //inserir telemovel
cc++;                                   //incrementar o contador de contactos(cc)
}

void consultar_contacto_nome (contacto *p){

char nm[100];

cout << "Insira o nome do contacto a apresentar informacao" << '\n';
gets(nm);                                      //obtencao do nome a apresentar

for (int j=0; j<cc; j++)
{
 if( strcmp(p[j].nome, nm) == 0 )
 {
	  cout<<'\n'<<"Codigo de contacto: "<<p[j].cod;
	  cout<<'\n'<<"Nome: "<<p[j].nome;
	  cout<<'\n'<<"Telemovel: "<<p[j].telemovel;
	  cout<<'\n'<<"Telefone: "<<p[j].telefone;
 }
}
}

void consultar_contacto_lista (contacto *p){

int f;

for (f=0; f<cc; f++)
{
 cout << '\n' << "Codigo: "<< p[f].cod;
 cout << '\n' << "Nome: "<<p[f].nome;
 cout << '\n' << "Telefone: "<<p[f].telefone;
 cout << '\n' << "Telemovel: "<<p[f].telemovel<<'\n'<<'\n';
 }
}


void modificar_contacto (contacto *p){
cout<<'\n';

int f;

for (f=0; f<cc; f++)
{
 cout << '\n' << "Codigo: "<< p[f].cod;
 cout << '\n' << "Nome: "<<p[f].nome;
 cout << '\n' << "Telefone: "<<p[f].telefone;
 cout << '\n' << "Telemovel: "<<p[f].telemovel<<'\n';
 }

cout << "Para saber o contacto a modificar consulte o seu codigo na tabela acima";
cin >> (p+cc)->cod;

cout << "Introduza o novo nome do contacto ";
gets((p+cc)->nome);                                			         //inserir nome
cout << "Introduza o novo numero de telefone do contacto ";
cin >> (p+cc)->telefone;                      			           //inserir telefone
cout << "Introduza o novo numero de telemovel do contacto "; //inserir telemovel
cin >> (p+cc)->telemovel;

}
void apagar_contacto (){}; /* prototipo da funçao para apagar contacto*/   

A dúvida é a seguinte, a função modificar contacto servirá para o utilizador inserir o código do contacto a modificar (cujo pode ser obtido com a inclusão dos dados existentes antes do pedido do mesmo) e em seguida preencher os campos com os dados novos.

Isso funciona tudo, mas não altera nada lol que exprimentei a ir alterar uns dados e depois fiz consultar e não alterou nada.  :wallbash:

Outra coisa que eu precisava era a função apagar_contacto. O objectivo é inserir o código, ou nome do contacto a eliminar e assim sendo, imaginem que tenho 10 contactos, ora o último será o 9º no array de estruturas certo? Eliminando por exemplo o 5º, o sexto passará a ser o 5º, o 7º o 6º, o 8º o 7º e o 9º o 8º! Será que me entendem? lol

Qualquer ajuda será muito bem vinda, visto que a minha nota do 2º período está bastante pendente disto  ;)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Instalaste a confusão neste forum LOL.

Estas a programar em C++ mas a usar como se fosse C.

Devias ter uma classe para contacto. Mas se não sabes trabalhar com classes esquece, pode ficar mesmo assim. Quando tiveres tempo pensa nisso.

Já experimentaste inserir mais do que um contacto? Não, tenta hehe.

É engraçado a forma como metes a compilar uma coisa que nem devia compilar. Mas não vale de nada porque não funciona na mesma.

(p+cc)->cod;

para cada contacto tens de criar: new contacto(); e coloca-lo no array.

E para o meter no array terás de ter de facto um array de ponteiros para contacto:

contacto **p;

p = new contacto*[nc];

Com isto terás de alteras algumas coisas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eh pa isto está a funcionar tudo, só o modificar e o apagar (ou remover..) é que não.

Se estou a usar C++ como C não faço ideia LOL estou a usar como o stor ensina...

Ele insere os dados e mostra-os bem! Estou a usar o Turbo C++ 4.5

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para alterar terás de perguntar qual o contacto a alterar.

Porque na verdade tas a alterar o contacto cc+1 que não podes ver no ciclo for (f=0; f<cc; f++)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E se eu meter:

void modificar_contacto (contacto *p){
cout<<'\n';

int f;

for (f=0; f<cc; f++)
{
 cout << '\n' << "Codigo: "<< p[f].cod;
 cout << '\n' << "Nome: "<<p[f].nome;
 cout << '\n' << "Telefone: "<<p[f].telefone;
 cout << '\n' << "Telemovel: "<<p[f].telemovel<<'\n'<<'\n';
 }

cout << "Para saber o contacto a modificar consulte o seu codigo na tabela acima";
cin >> p.cod;

cout << "Introduza o novo nome do contacto ";
gets (p.nome);                                			      //inserir nome
cout << "Introduza o novo numero de telefone do contacto ";
cin >> p.telefone;                      			        //inserir telefone
cout << "Introduza o novo numero de telemovel do contacto "; //inserir telemovel
cin >> p.telemovel;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tive a alterar o código. Acho que está funcional mas ainda não tive tempo de verfifcar tudo.

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

struct contacto
{
     int cod;
     char nome[100];                            //declaracao da estrutura contactos
     unsigned int telefone;
     unsigned int telemovel;
};

int cc = 0;      						             /*'conta contactos' - variavel que vai contar os contactos existentes*/

void inserir_contacto (contacto p[]);          //prototipo da funçao para inserir contactos
void consultar_contacto_nome (contacto *p);   //prototipo da funçao para consultar contactos por nome
void consultar_contacto_lista (contacto *p);  //prototipo da funçao para consultar contactos por listagem
void modificar_contacto (contacto p[]);        //prototipo da funçao para modificar contacto
void apagar_contacto(contacto p[]);                      // prototipo da funçao para apagar contacto

void cls()
{
    cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
}

int main ()
{

    cout << '\t' << '\t' << '\t'<< "<- Contact Manager v1.0 ->"<<'\n'<<'\n'<<'\n';
    cout << '\t' << '\t' << '\t'<< '\t'<< "   Menu"<<'\n';

    int nc = 0;  //Número de contactos
    int op;

    cout << "Quantos contactos tera no maximo a sua agenda?" << endl;

    cin >> nc;  // numero de contactos maximo a existir


    contacto *p = new contacto[nc];  // declaraçao de um array de contactos com a extensao nc

    do
    {
    	cout << "\n\n1 - Inserir novo contacto" << endl;
    	cout << "2 - Consultar contactos por nome" << endl;
    	cout << "3 - Consultar todos os contactos" << endl;
    	cout << "4 - Modificar um contacto" << endl;
    	cout << "5 - Apagar um contacto" << endl;
    	cout << "6 - Sair" << "\n\n";

        cout << "Opcao-> "; cin >> op;

        switch (op)
        {
        	case 1 : if(cc <= nc-1) inserir_contacto(p);
                     else{ cout << "\n\nNao pode inserir mais contactos"; fflush(stdin); cout << "\nPrima enter..."; getchar(); cls();} break;
        	case 2 : consultar_contacto_nome(p); break;
        	case 3 : consultar_contacto_lista(p); break;                 //opcoes do menu
        	case 4 : modificar_contacto(p); break;
        	case 5 : apagar_contacto(p); break;
        	case 6 : break;
        	default : cout << "Opçao invalida!" << endl;
    }

    }while (op != 6);

}

void inserir_contacto(contacto p[])
{                //funcao de inserir contacto

    cout<< "\n\n\nIntroduza o codigo de contacto, o actual e " << cc << "."<< endl;
    cin >> p[cc].cod; fflush(stdin);                                             //inserir codigo
    cout << "Introduza o nome do contacto: ";
    cin.getline(p[cc].nome, 100);                                			      //inserir nome
    cout << "Introduza o numero de telefone do contacto: ";
    cin >> p[cc].telefone;                      			        //inserir telefone
    cout << "Introduza o numero de telemovel do contacto: ";
    cin >> p[cc].telemovel;                        			    //inserir telemovel
    cout << "\nContacto criado!\t\t\tPrima enter...";
    fflush(stdin);
    getchar();
    cc++;                               //incrementar o contador de contactos(cc)
    cls();
}

void consultar_contacto_nome (contacto *p){

char nm[100];

fflush(stdin);
cout << "\n\n\nInsira o nome do contacto a apresentar informacao: ";
cin.getline(nm, 100);                                      //obtencao do nome a apresentar

for (int j=0; j<cc; j++)
{
 if(strcmp(p[j].nome, nm) == 0 )
 {
	  cout<<'\n'<<"Codigo de contacto: "<<p[j].cod;
	  cout<<'\n'<<"Nome: "<<p[j].nome;
	  cout<<'\n'<<"Telemovel: "<<p[j].telemovel;
	  cout<<'\n'<<"Telefone: "<<p[j].telefone << endl;
	  fflush(stdin);
	  cout << "\nPrima enter...";
	  getchar();
          cls();
 }
}
}

void consultar_contacto_lista (contacto *p){

int f;
cls();

for (f=0; f<cc; f++)
{
 cout << '\n' << "Codigo: "<< p[f].cod;
 cout << '\n' << "Nome: "<<p[f].nome;
 cout << '\n' << "Telefone: "<<p[f].telefone;
 cout << '\n' << "Telemovel: "<<p[f].telemovel<<'\n'<<'\n';
}
fflush(stdin);
cout << "\nPrima enter...";
getchar();
cls();

}


void modificar_contacto (contacto p[]){

cls();
cls();

cout << "Para saber o contacto a modificar escolha a opcao 3 no menu principal.\nCodigo: ";
cin >> p[cc].cod;
cout << "Introduza o novo nome do contacto ";
cin.getline(p[cc].nome, 100);                              			         //inserir nome
cout << "Introduza o novo numero de telefone do contacto ";
cin >> p[cc].telefone;                      			           //inserir telefone
cout << "Introduza o novo numero de telemovel do contacto "; //inserir telemovel
cin >> p[cc].telemovel;

fflush(stdin);
cout << "\nPrima enter...";
getchar();
cls();

}


void apagar_contacto(contacto p[])
{
    int tmpcod;
    bool existe = false;
    fflush(stdin);
    cout << "Codigo do contacto a apagar: ";
    cin >> tmpcod;
    for(int i = cc; i >= 0; --i)
    {
        if(p[i].cod == tmpcod)
        {
            strcpy(p[i].nome, "Contacto Apagado");
            p[i].telefone = 0;
            p[i].telemovel = 0;
            cout << "Contacto apagado" << endl;
            existe = true;
        }
    }
if(existe == false) cout << "Contacto nao existe" << endl;
fflush(stdin);
cout << "\nPrima enter...";
getchar();
cls();
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso no meu compilador deu-me paletes de erros... lol. não conhece as funções fflush, getchar... uma data de coisas que eu também não conheço =P . Se pudesses manter mais ou menos o que tenho feito era melhor visto que isto é para a escola.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É provavel que seja devido aos:

#include <iostream>

#include <string>

#include <cctype>

Que são diferentes, e pode ser que nem os tenhas instalados. Ou então não tens referência para a localização destes no teu projecto.

Que IDE estás a usar?

Já agora, podias dar metade dessa palha aos animais, hehe, brincadeira.

Podes manter código repetido só em uma função.

Podia existir só uma função para imprimir o contacto, com um parametro de indice.

Modificar contacto também é básicamente igual ao criar contacto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bibliotecas acabadas em ".h" = C

bibliotecas sem o ".h" = C++

daí não conhecer as funções

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta incluir isto

 #include <cstdlib>

Eu uso o WxDEV C++... Tem imensas bibliotecas.

Se calhar algumas que nem é preciso fazer include.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora