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

dianaalbano

Dúvidas com inserção, alteração e eliminação de clientes num vector

14 mensagens neste tópico

Boas noites

Estou aqui com algumas (senão muitas dúvidas) com algumas funções.

No meu trabalho tenho funções como inserir, eliminar e alterar clientes. Eu crio um ficheiro para onde esses dados são guardados mas pelo que me disseram eu tb vou precisar de ter vectores para depois fazer comparações (entre outras coisas).

A minha dúvida é que eu acho que não estou a definir bem estas funções, podem me ajudar?

Este é o código que tenho para as funções:

void insereCliente()
{

Clientes cli;

	cout << endl << "Nome: ";
	cin >> cli.cl_nome;
	fflush(stdin);
	cout << endl << "Morada: ";
	cin >> cli.cl_morada;
	fflush(stdin);
	cout << endl << "Data de Nascimento (dd-mm-aaaa): ";
	cin >> cli.data_nasc;
	fflush(stdin);
	cout << endl << "Numero de Identificacao Fiscal: ";
	cin >> cli.cl_nif;
	fflush(stdin);
	cout << endl << "Contacto: ";
	cin >> cli.cl_contacto;
	fflush(stdin);
	cout << endl;
	clientes.push_back();
}

void Clientes::alteraCliente()
{

Clientes cli;
cout << endl << "Nome: ";
cin >> cli.cl_nome;
fflush(stdin);
cout << endl << "Morada: ";
cin >> cli.cl_morada;
fflush(stdin);
cout << endl << "Data de Nascimento (dd-mm-aaaa): ";
cin >> cli.data_nasc;
fflush(stdin);
cout << endl << "Numero de Identificacao Fiscal: ";
cin >> cli.cl_nif;
fflush(stdin);
cout << endl << "Contacto: ";
cin >> cli.cl_contacto;
fflush(stdin);
cout << endl;
clientes.push_back(cli);
}

void Clientes::eliminaCliente()
{

	Clientes cli;

	clientes.erase();


}

Posso fazer isto?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tanto fflush(stdin)  :s 

Para ler linhas de texto, eu costumo usar o

fgets( char * s , numBytes , stdin)

 

do C.  Podes usar o getline para ler dados para strings.

Com esses cin >> nome só lês o primeiro nome da pessoa ( a string é preenchida ate encontrar um espaço).

no insere, estás a armazenar as informações na classe e depois fazes

clientes.push_back();

Isto não te dá erro ? :O

No altera cliente não estás a alterar nada !  Isso é um inserir. Tens de perguntar que cliente é que é para alterar e depois alterar o vector clientes.

O elimina também nao está a fazer nada , mas isso deves saber...  o erase recebe um iterador do vector clientes. Não podes fazer isso assim.

Podes ler alguma coisa sobre essas funções em

http://www.cppreference.com

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Eu estou a utilizar o c++, posso utilizar funções de c? Não há problema?

Os dados eu queria inseri-los num ficheiro com o nome Clientes.txt como faço isso? Depois (o resto do programa ta definido no main) e para fazer comparações tenho que passar esses dados para um vector, certo?

Nas funções altera e elimina não estou a pedir nome ou numero do cliente que se deseja apagar pk no main.cpp tenho isso como menu. No fim de pedir isso é que chamo as funções.

Achas que não devo fazer o push_back? Foi uma coisa que disseram p eu fazer...

o erase tb n se deve utilizar? Ai meu Deus... Só tou a ver a minha vida a andar p trás...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não faças fflush stdin.....

Faz

cin.ignore(numeric_limits<streamsize>::max(), '\n')

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e o que é que tenho de por dentro de cin.ignore? pode ficar so assim?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fica assim....

o cin.ignore pode levar só um argumento numérico, ou um numérico e outro caracter. O que ele faz é "limpar" do buffer de input o numero de bytes que defines. numerix_limits<streamsize>::max() define o máximo de bytes para uma stream. Se definires um caracter quer dizer que, quando esse caracter for encontrado, pode-se parar... No caso de input da consola, '\n' é o mais inteligente, pois o input acaba com <enter>

normalmente cin.ignore(1000, '\n') é mais do que suficiente, mas um programa 100% correcto usa o que defini antes... Se mantiveres à mão ou olhares para o sentido do que está definido, nunca te esqueces....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já agora podias analisar o resto do codigo e ver o que tenho errado?

Desculpa se tou a abusar

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu estou a utilizar o c++, posso utilizar funções de c? Não há problema?

O C++ é uma extensão do C. Podes fazer um programa em C e compila-lo como se fosse C++.  O nome é mesmo "C" mais umas coisas (muitas coisas por sinal) ;)

Os dados eu queria inseri-los num ficheiro com o nome Clientes.txt como faço isso? Depois (o resto do programa ta definido no main) e para fazer comparações tenho que passar esses dados para um vector, certo?

Nas funções altera e elimina não estou a pedir nome ou numero do cliente que se deseja apagar pk no main.cpp tenho isso como menu. No fim de pedir isso é que chamo as funções.

Achas que não devo fazer o push_back? Foi uma coisa que disseram p eu fazer...

o erase tb n se deve utilizar? Ai meu Deus... Só tou a ver a minha vida a andar p trás...

Calma :(

Sim, para guardar os dados tens de fazer o push_back... mas tavas a fazer  clientes.push_back()  sem colocar o objecto  "cli" como argumento...

O erase também deves usar. O que eu estava a dizer, é que não é assim que se usa. Aquele site que eu dei tem uns exemplos. Se calhar até aprendias mais se tentasses procurar nesse site. (Temos de conseguir procurar a informação que pretendemos na net :( )

Sabes o que é um "iterador" ? Senão souberes é preciso explicar-te antes de poderes usar o erase(..) correctamente...

PS: acho que é melhor dominares melhor estas questões de adicionar, alterar e remover dados no vector de Clientes, antes de tentares guardar a informação em ficheiros (que até é bastante simples... mas é melhor deixar para o fim)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o Meu problema é mesmo esse... É não perceber nada de C++, o que aprendi n foi em aulas foi em casa sozinha e acredito que n sei quase nada por isso é que tento pedir ajuda aqui.

Já andei a ver alguns sites sobre vectores mas parece que qto mais leio menos entendo...

Ajudas-me?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa, mas não posso escrever aqui a explicação do que é um apontador, diferenças entre apontador e iterador, classe vector , etc...

mas tenho a certeza que estes assuntos já devem ter sido discutidos aqui no forum... é procurar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha sugestão é "voltar atrás uns capítulos".... Estás a fazer exercícios interessantes, mas nem sequer tens um bom raciocínio nem conheces bem a linguagem, portanto volta atrás, começa de novo com coisas mais simples, troca de livro, talvez, se é que estás a ler algum.....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Está aqui uma grande confusão. Em primeiro lugar lembro que todo o código fnte aqui no fórum deve ser afixado usando o geshi.

Tanta informação assim toda ao mesmo tempo e querer fazer tudo à pressa de qualquer maneira só complica mais, como diz o velho ditado: depressa e bem não há quem.

Diana, infelizmente o nosso wiki ainda não está pronto e tambem ainda não temos conteudo muito completo nessa área, a seu tempo teremos. Por agora aconselho-te a leres sobre esses assuntos noutros sites. Espero que não tenhas problemas com o ingles.

http://www.cprogramming.com/tutorial.html#c++tutorial

Segue o link que acabei de afixar, lê calmamente e PERCEBE o que lá está escrito sobre:

-Arrays

-Ponteiros

-structs

-listas

Na verdade o melhor é mesmo guardares o link e sempre que tiveres uma duvida sobre alguma coisa ires lá ver.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que te referias aos meus posts... eu não usei o geshi, porque estava a falar de uma só instrução... No futuro, usarei o geshi mesmo neste caso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que ele se estava a referir ao da dianaalbano. Agora já tem o GeSHI, mas não tinha.

Quando é só uma linha não faz confusão (a não ser que tenha acesso a arrays), mas para grandes listagens de código é mais difícil de ler.

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