Agenda telefonica em C

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Agenda telefonica em C

Mensagempor vascovx3 » Quinta Fev 09, 2006 14:24

Boas pessoal!
Tenho k fazer agenda telefonica em c, e falta-me a parte para apagar um contacto, de resto já a funcionar, podem-me ajudar????



#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include <dos.h>

int mostralista()
{
char ch;
printf("Lista de contactos :\n\n");
FILE *vx3;
vx3 = fopen("pap.txt" , "r");
ch=getc(vx3); // Lê um caracter do ficheiro "pap.txt".
while(ch!=EOF) //Enquanto o caracter nao chegar ao fim do ficheiro...
{
putchar(ch); // Mostra no monitor o ficheiro "pap.txt".
ch=getc(vx3); // Guarda o caracter ch no ficheiro "pap.txt"
}
fclose(vx3); // Fecha o ficheiro "pap.txt".
getch();
}

char inserir()
{

char nome[10];
char morada[25];
char opcao;
int telefone;

FILE *vx3;
fflush(stdin); // Despeja os dados no disco
vx3 = fopen("pap.txt" , "a"); // Abre o ficheiro "pap.txt".
printf("Insira o nome do contacto: ");
gets(nome); // Guarda o nome do contacto na variavel "nome".
fflush(stdin); // Despeja os dados no disco
printf("Insira o numero de telefone: ");
scanf("%d", &telefone); // Guarda o numero do telefone na variavel"telefone".
fflush(stdin); // Despeja os dados no disco
printf("Insira a morada: ");
gets(morada);
fflush(stdin);
fprintf(vx3, "Nome do contacto: %s \n",nome); // Escreve no ficheiro "pap.txt"o nome do contacto que foi inserido anteriormente.
fprintf(vx3, "Numero de telefone: %d \n", telefone); // Escreve no ficheiro"pap.txt" o numero de telefone do contacto que foi inserido anteriormente.
fprintf(vx3, "Morada: %s \n\n", morada); // Escreve no ficheiro "pap.txt" amorada que foi inserida anteriormente.
printf("Deseja inserir mais contactos? S/N \n");
fflush(stdin); // Despeja os dados no disco
scanf(" %c", &opcao); // Guarda a opção na variavel "opcao".

switch(opcao) // Verifica se a opção é "n" ou "s".
{
case 's' :
case 'S' : inserir() ; break; // Se for "s" chama outra vez a função"inserir" para inserir mais um contacto
case 'n' :
case 'N' : exit(1); break; // Se for "n" sai.
}

fclose(vx3); // Fecha o ficheiro "pap.txt".
}


int main()
{
printf("\t\t\tAgenda Telefonica\n"); // Mostra o menu.
printf(" Carregue no numero para ir para a opção desejada :\n\n"); // Aparece amesagem "Carregue no numero para ir para a opção desejada :"
printf("1 - Inserir/adicionar contacto na lista\n"); // Aparece a mensagem "1 -Inserir/adicionar contacto na lista"
printf("2 - Consultar a agenda telefonica\n"); // Aparece a mensagem "2 -Consultar a agenda telefónica"
printf("0 - Sair\n\n\n"); // Aparece a mensagem "0 - Sair"
char escolha;
scanf(" %s", &escolha); // Guarda a opção escolhida.
switch(escolha) // Verifica qual foi a opção.
{
case '1' :
inserir();
break; // Caso a operação escolhida seja a "1" inicia o procedimento"inserir".

case '2' :
mostralista(); // Caso a opção escolhida seja "2" chama o procedimento"mostralista".
break;

case '0' :
exit(1); // Caso a opção escolhida seja "0" sai.
break;
}
}
Thermaltake Soprano; LC Power Super Silent 550W
Athlon64 3500+
DFI LanParty UT nF4 Ultra-D
XpertVision HD2600XT Sonic
G.SKILL 2x1GB PC4000 HZ SERIES DUAL CHANNEL
vascovx3
Membro de Prata
Membro de Prata
 
Mensagens: 112
Registado: Sábado Nov 26, 2005 14:09
Localização: Ferreira do Zêzere

Mensagempor DexterHolland » Quinta Fev 09, 2006 21:13

Olhei para isso meio na diagonal, e pelo q percebi é tudo manipulado directamente em ficheiro. Alguma razão especial para isso? Ainda por cima caracter a caracter, se é para ser tudo em ficheiro acho q é melhor pelo menos ser linha a linha.

Não me lembro de haver um comando directo para apagar uma linha dentro de um ficheiro, se calhar até há. Uma maneira meio para desenrascar para apagares pode ser leres o ficheiro dos contactos e ires passando-os para outro ficheiro auxiliar (com excepção daquele que queres apagar). Depois passas o auxiliar para o primeiro (mudando o nome do ficheiro, ou fazendo o mesmo processo)

Só mais uma dica. Aquele switch no final para fazer repetir não tem muito jeito. Se inseres "mtos" vais ter stack overflow. Faz antes um while (opcao!='n') a apanhar o processo todo de inserção.
Acer - Aspire 1694WLMi
Pentium M 760 (2.0GHz), 2x512Mb DDRII, 100Gb, 15,4 Pol WXGA Acer CristalBrite
128Mb ATI Mobility Radeon X700, DVD-Dual DL Slot-in, 56K, Lan 10/100/1000, WiFi 802.11b/g, Bluetooth
DexterHolland
Membro de Prata
Membro de Prata
 
Mensagens: 160
Registado: Quinta Abr 07, 2005 22:11

Mensagempor bvmzinho » Sexta Fev 10, 2006 15:13

DexterHolland Escreveu:Não me lembro de haver um comando directo para apagar uma linha dentro de um ficheiro, se calhar até há. Uma maneira meio para desenrascar para apagares pode ser leres o ficheiro dos contactos e ires passando-os para outro ficheiro auxiliar (com excepção daquele que queres apagar). Depois passas o auxiliar para o primeiro (mudando o nome do ficheiro, ou fazendo o mesmo processo)


concordo!!
mas tb nunca fiz carácter a carácter!
bvmzinho
Membro de Prata
Membro de Prata
 
Mensagens: 362
Registado: Sábado Jan 15, 2005 17:25


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron