Jump to content
rubenndf91

[Resolvido] Como voltar ao menu anterior

Recommended Posts

rubenndf91

Boa tarde eu estou a fazer uma agenda electronica em c(visual studio) e tenho uma duvida que nao consigo resolver. eu quero voltar de um submenu para o menu inicial mas nao estou a conseguir. coloco em baixo com cor vermelha ao que me refiro.

agradeço desde já

obs. o menu prinicipal está no fundo

oid submenu(dados *contacto)
{
char op;
do
{
 system("cls");
 printf("\n\tEscolha uma opcao\n\n\t");
 printf("1- Mostrar lista\n\n\t");
 printf("2- Acrescentar um registo na agenda\n\n\t");
 printf("3- Apagar um registo da agenda\n\n\t");
 printf("4- Qual eh o telefone e o endereco\n\t de e-mail de um NOME de aluno que conste na agenda\n\n\t");
 printf("5- Qual o telefone, a morada, e o\n\t codigo postal de um NOME de um aluno que conste na agenda\n\n\t");
 printf("6- Qual o telefone e o endereco de\n\t e-mail de um NUMERO de um aluno que conste na agenda\n\n\t");
 printf("7- Qual o telefone, a morada, e o\n\t codigo postal de um NUMERO de um aluno que conste na agenda\n\n\t");
 printf("8- Ordenar a agenda por ordem crescente\n\t do numero de aluno, para todos os registos da agenda\n\n\t");
 printf("9- Voltar ao menu principal\n\n\t");
 printf("\n\tSelecione a opcao --> ");
 op = getchar();
 switch (op)
 {
 case '1':
  system("cls");
  mostrar(contacto);
  system("pause");
  break;
 case '2':
  system("cls");
  adicionar(contacto);
  break;
 case '3':
  system("cls");
  eliminar(contacto);
  break;
 case '4':
  system("cls");
  pesquisar1(contacto);
  break;
 case '5':
  system("cls");
  pesquisar2(contacto);
  eliminar(contacto);
  break;
 case '6':
  system("cls");
  //pesquisar3(contacto);
  system("pause");
  break;
 case '7':
  system("cls");
  //pesquisar4(contacto);
  system("pause");
  break;
 case'8':
  system("cls");
  //ordenar(contacto);
  system("pause");
  break;
 case '9':
  system("cls");
  // voltar ao menu...como?
  break;
 }
} while (op != '0');
}
void abrir(dados *contacto)
{
FILE *f;
char nome[1000], morada[1000], postal[1000], email[1000], nfich[20];
int numero,telefone, FP, AM1, SD, ALGA, CM;
printf("insira o caminho do ficheiro\n");
scanf("%s", &nfich);
f = fopen(nfich, "r");
if (f == NULL)
{
 printf("erro ao abrir ficheiros");
}
else
{
 while (!feof(f))
 {
  fscanf(f, " %s %s %s %s %d %d %d %d %d", &nome,&numero, &morada, &postal, &email, &telefone, &FP, &AM1, &SD, &ALGA, &CM);
  strcpy(contacto[i].nome, nome);
  contacto[i].numero = numero;
  strcpy(contacto[i].morada, morada);
  strcpy(contacto[i].postal, postal);
  strcpy(contacto[i].email, email);
  contacto[i].telefone = telefone;
  contacto[i].FP = FP;
  contacto[i].AM1 = AM1;
  contacto[i].SD = SD;
  contacto[i].ALGA = ALGA;
  contacto[i].CM = CM;
  i++;
 }
 fclose(f);
}
}

void main(int argc, char *argv[])
{
dados contacto[total];
char op;
int j;
do
{
 system("cls");
 printf("\n\t.:: AGENDA ELECTRONICA EM LINGUAGEM C ::.\n\n\t ");
 printf("Como pretende introduzir os dados:\n\n\t\t");
 printf("1- Atraves do teclado\n\t\t");
 printf("2- Atraves de ficheiro\n\n\t\t");
 printf("0- Sair do Programa\n\n\t");
 printf("opcao--> ");
 scanf("%c", &op);
 switch (op)
 {
 case'1':
  submenu(contacto);
  break;
 case'2':
  abrir(contacto);
  submenu(contacto);
  break;
 }
} while (op != '0');

system("PAUSE");
}

Edited by Rui Carlos
GeSHi; formatação

Share this post


Link to post
Share on other sites
HappyHippyHippo
 case '9':
  system("cls");
  // voltar ao menu...como?
  op = '0'; // agora pensa porque ...
  break;


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rubenndf91

ai que estupido que sou... realmente é facil(de mais) mas eu já com tanta linha de codigo entrei em paranoia

muito obrigado

Edited by rubenndf91

Share this post


Link to post
Share on other sites
rubenndf91

uma duvida que posso estar a parecer estupido mas já tentei o que dizia na net e nao consegui.

como é que eu meto uma linha(neste caso um titulo) com outra cor?

usei o textcolor() e usei as bibliotecas <conio.h> <conio.c> e <graphics.h>(vi na net esta) mas dizia-me que as bibliotecas nao eram reconheciadas...

Share this post


Link to post
Share on other sites
rubenndf91

muito obrigado... já consegui resolver vários problemas que tive(pesquisei aqui e ali)... para conseguir acabar o trabalho apenas me falta conseguir ordenar a agenda electronica por ordem crescente...mas nao tenho a menor ideia de como fazer(vi na net coisas simples mas nao consegui aplicar). se me puder ajudar agradeço imenso.... em baixo segue o codigo total

no submenu(localizado quase no final do codigo) é a opçao 8...

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <String.h>
#include <conio.h>

int const total = 25;
int i = 0;
typedef struct {
char nome[100], email[100], morada[100], postal[100], numero[20];
int telefone, FP, SD, AM1, ALGA, CM;
}dados;
int sair()
{
char a;

fflush(stdin);
printf("deseja relamente sair do programa [s- Sim/n- Nao]: ");
scanf_s("%c", &a);
// a=getch();
if (a == 's' || a == 'S')
 exit(1);
while (a != 'n' && a != 'N');
}
void guardar(dados *contacto)
{
FILE *f;
char nfich[20];
int j = 0;
printf("insira o caminho do ficheiro\n");
scanf_s("%s", &nfich);
f = fopen(nfich, "w");

for (j = 0; j<i; j++)
{
 fprintf(f, "%s ", contacto[j].nome);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].numero);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].morada);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].postal);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].email);
 fflush(stdin);
 fprintf(f, "%d ", contacto[j].telefone);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].FP);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].AM1);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].SD);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].ALGA);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].CM);
 fflush(stdin);
}

printf("Dados guardados com suscesso!!! \n");
fclose(f);
}

void adicionar(dados* contacto)
{
if (i<total)
{
 printf("\nIntroduza o Nome:  ", i + 1);
 fflush(stdin);
 scanf("%[^\n]s", contacto[i].nome);
 printf("Introduza o Numero:  ", i + 1);
 fflush(stdin);
 scanf("%s", &contacto[i].numero);
 printf("Introduza Morada:  ", i + 1);
 fflush(stdin);
 scanf("%[^\n]s", contacto[i].morada);
 printf("Introduza o Codigo Postal:  ", i + 1);
 fflush(stdin);
 scanf("%[^\n]s", contacto[i].postal);
 printf("Introduza o email:  ", i + 1);
 fflush(stdin);
 scanf("%[^\n]s", contacto[i].email);
 printf("Introduza o telefone:  ", i + 1);
 fflush(stdin);
 scanf("%d", &contacto[i].telefone);
 printf("Nota Final de FP:  ", i + 1);
 fflush(stdin);
 scanf("%d", &contacto[i].FP);
 printf("Nota Final de AM1:  ", i + 1);
 fflush(stdin);
 scanf("%d", &contacto[i].AM1);
 printf("Nota Final de SD:  ", i + 1);
 fflush(stdin);
 scanf("%d", &contacto[i].SD);
 printf("Nota Final de ALGA:  ", i + 1);
 fflush(stdin);
 scanf("%d", &contacto[i].ALGA);
 printf("Nota Final de CM:  ", i + 1);
 fflush(stdin);
 scanf("%d", &contacto[i].CM);
 i++;
}
else
{
 printf("a lista esta cheia");
}
}
void mostrar(dados* contacto)
{
int j = 0;
printf("\t\t  Mostar dados\n\n");
fflush(stdin);
for (j = 0; j<i; j++)
{
 printf("\t%d->   \n\tNome:  %s |", j + 1, contacto[j].nome);
 fflush(stdin);
 printf(" \n\tNumero: %s |", contacto[j].numero);
 fflush(stdin);
 printf(" \n\tMorada: %s |", contacto[j].morada);
 fflush(stdin);
 printf(" \n\tCodigo Postal: %s |", contacto[j].postal);
 fflush(stdin);
 printf(" \n\tE-Mail: %s |", contacto[j].email);
 fflush(stdin);
 printf(" \n\tNumero de telefone: %d |", contacto[j].telefone);
 fflush(stdin);
 printf(" \n\tNota final de FP: %d |", contacto[j].FP);
 fflush(stdin);
 printf(" \n\tNota final de AM1: %d |", contacto[j].AM1);
 fflush(stdin);
 printf(" \n\tNota final de SD: %d |", contacto[j].SD);
 fflush(stdin);
 printf(" \n\tNota final de ALGA: %d |", contacto[j].ALGA);
 fflush(stdin);
 printf(" \n\tNota final de CM: %d\t\n\n\n |", contacto[j].CM);
 fflush(stdin);
}
}

void eliminar(dados *contacto){
char c;
mostrar(contacto);
int j, opcao;
do{
 printf("Introduza numero a eliminar:\n");
 scanf("%d", &opcao);
 if (opcao >i || opcao <= 0)
  printf("Opcao Invalida\n");
} while (opcao >i || opcao <= 0);
getchar();
do{
 printf("Deseja mesmo apagar o contacto? (s - Sim; n -Nao)");
 scanf("%c", &c);
} while (c != 's' && c != 'n' && c != 'N' && c != 'S');
if (c == 's' || c == 'S'){
 for (j = opcao; j<i; j++)
 {
  strcpy(contacto[j].nome, contacto[i - 1].nome);
  strcpy(contacto[j].numero, contacto[i - 1].numero);
  strcpy(contacto[j].morada, contacto[i - 1].morada);
  strcpy(contacto[j].postal, contacto[i - 1].postal);
  strcpy(contacto[j].email, contacto[i - 1].email);
  contacto[j].telefone = contacto[i - 1].telefone;
  contacto[j].FP = contacto[i - 1].FP;
  contacto[j].AM1 = contacto[i - 1].AM1;
  contacto[j].SD = contacto[i - 1].SD;
  contacto[j].ALGA = contacto[i - 1].ALGA;
  contacto[j].CM = contacto[i - 1].CM;
 }
 i--;
}
}

void pesquisar1(dados* contacto)
{
char proc[50];
int j;
printf("Introduza o nome que pretende pesquisar: ");
scanf("%s", proc);
for (j = 0; j<i; j++)
{// isto diz o numero total de contactos        
 if (0 == strcmp(proc, contacto[j].nome))
 {
  printf("\n\nDados: \n");
  printf("\tNome: %s", contacto[j].nome);
  printf("\n\tEmail: %s", contacto[j].email);
  printf("\n\tTelefone: %d", contacto[j].telefone);

  printf("\n----------------------------------\n");
  system("pause");
  return;
 }
}
printf("\nNome invalido\n");
system("pause");
}
void pesquisar2(dados* contacto)
{
char proc[50];
int j;
printf("Introduza o nome que pretende pesquisar: ");
scanf("%s", proc);
for (j = 0; j<i; j++)
{// isto diz o numero total de contactos        
 if (0 == strcmp(proc, contacto[j].nome))
 {
  printf("\n\nDados: \n");
  printf("\n\tNomePesquisado: %s", contacto[j].nome);
  printf("\n\tMorada: %s", contacto[j].morada);
  printf("\n\tCodigo Postal: %s", contacto[j].postal);
  printf("\n\tTelefone: %d", contacto[j].telefone);
  printf("\n----------------------------------\n");
  system("pause");
  return;
 }
}
printf("\nNome invalido\n");
system("pause");
}

void pesquisar3(dados* contacto)
{
char proc[50];
int j;
printf("Introduza o numero que pretende pesquisar: ");
scanf("%s", proc);
for (j = 0; j<i; j++)
{// isto diz o numero total de contactos        
 if (0 == strcmp(proc, contacto[j].numero))
 {
  printf("\n\nDados: \n");
  printf("\n\tNumero Pesquisado: %s", contacto[j].numero);
  printf("\tNome Pesquisado: %s", contacto[j].nome);
  printf("\n\tEmail: %s", contacto[j].email);
  printf("\n\tTelefone: %d", contacto[j].telefone);
  printf("\n----------------------------------\n");
  system("pause");
  return;
 }
}
printf("\nNome invalido\n");
system("pause");
}

void pesquisar4(dados* contacto)
{
char proc[50];
int j;
printf("Introduza o numero que pretende pesquisar: ");
scanf("%s", proc);
for (j = 0; j<i; j++)
{// isto diz o numero total de contactos        
 if (0 == strcmp(proc, contacto[j].numero))
 {
  printf("\n\nDados: \n");
  printf("\n\tNumero Pesquisado: %s", contacto[j].numero);
  printf("\n\tNome: %s", contacto[j].nome);
  printf("\n\tMorada: %s", contacto[j].morada);
  printf("\n\tCodigo Postal: %s", contacto[j].postal);
  printf("\n\tTelefone: %d", contacto[j].telefone);
  printf("\n----------------------------------\n");
  system("pause");
  return;
 }
}
printf("\nNome invalido\n");
system("pause");
}
void submenu(dados *contacto)
{
char op;
do
{
 system("cls");
 printf("\n\tEscolha uma opcao\n\n\t");
 printf("1- Mostrar lista\n\n\t");
 printf("2- Acrescentar um registo na agenda\n\n\t");
 printf("3- Apagar um registo da agenda\n\n\t");
 printf("4- Qual eh o telefone e o endereco\n\t de e-mail de um NOME de aluno que conste na agenda\n\n\t");
 printf("5- Qual o telefone, a morada, e o\n\t codigo postal de um NOME de um aluno que conste na agenda\n\n\t");
 printf("6- Qual o telefone e o endereco de\n\t e-mail de um NUMERO de um aluno que conste na agenda\n\n\t");
 printf("7- Qual o telefone, a morada, e o\n\t codigo postal de um NUMERO de um aluno que conste na agenda\n\n\t");
 printf("8- Ordenar a agenda por ordem crescente\n\t do numero de aluno, para todos os registos da agenda\n\n\t");
 printf("0- Voltar ao menu principal\n\n\t");
 printf("\n\tSelecione a opcao --> ");
 op = getchar();
 switch (op)
 {
 case '1':
  system("cls");
  mostrar(contacto);
  system("pause");
  break;
 case '2':
  system("cls");
  adicionar(contacto);
  system("pause");
  break;
 case '3':
  system("cls");
  eliminar(contacto);
  system("pause");
  break;
 case '4':
  system("cls");
  pesquisar1(contacto);
  system("pause");
  break;
 case '5':
  system("cls");
  pesquisar2(contacto);
  system("pause");
  break;
 case '6':
  system("cls");
  pesquisar3(contacto);
  system("pause");
  break;
 case '7':
  system("cls");
  pesquisar4(contacto);
  system("pause");
  break;
 case'8':
  system("cls");
  //ordenar(contacto);
  system("pause");
  break;
 case '9':
  system("cls");
  op = '0';
  break;
 }
} while (op != '0');
}
void abrir(dados *contacto)
{
FILE *f;
char nome[1000], morada[1000], postal[1000], email[1000],numero [20], nfich[20];
int telefone, FP, AM1, SD, ALGA, CM;
printf("insira o caminho do ficheiro\n");
scanf("%s", &nfich);
f = fopen(nfich, "r");
if (f == NULL)
{
 printf("erro ao abrir ficheiros");
}
else
{
 while (!feof(f))
 {
  fscanf(f, " %s %s %s %s %d %d %d %d %d", &nome,&numero, &morada, &postal, &email, &telefone, &FP, &AM1, &SD, &ALGA, &CM);
  strcpy(contacto[i].nome, nome);
  strcpy(contacto[i].numero, numero);
  strcpy(contacto[i].morada, morada);
  strcpy(contacto[i].postal, postal);
  strcpy(contacto[i].email, email);
  contacto[i].telefone = telefone;
  contacto[i].FP = FP;
  contacto[i].AM1 = AM1;
  contacto[i].SD = SD;
  contacto[i].ALGA = ALGA;
  contacto[i].CM = CM;
  i++;
 }
 fclose(f);
}
}

void main(int argc, char *argv[])
{
dados contacto[total];
char op;
int j;
do
{
 system("cls");
 printf("\n\t.:: AGENDA ELECTRONICA EM LINGUAGEM C ::.\n\n\t ");
 printf("Como pretende introduzir os dados:\n\n\t\t");
 printf("1- Atraves do teclado\n\t\t");
 printf("2- Atraves de ficheiro\n\n\t\t");
 printf("0- Sair do Programa\n\n\t");
 printf("opcao--> ");
 scanf("%c", &op);
 switch (op)
 {
 case'1':
  submenu(contacto);
  break;
 case'2':
  abrir(contacto);
  submenu(contacto);
  break;
 }
} while (op != '0');

system("PAUSE");
}

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
rubenndf91

já consegui desenvolver um codigo para ordenar mas da-me erro... nao consigo perceber o que está mal

aqui é a ordenaçao sozinha

/*void ordenar(dados *contacto)
{
char nums[total];
int aux;
int j, k;

for (i = 0; i<total; i++){
 strcpy_s(nums[i], contacto[i].numero);
}
for (j = 0; j<total - 1; j++){

 for (k = j + 1; k<total; k++){
  if (strcmp(nums[j], nums[k])>0){

   strcpy_s(aux, nums[j]);
   strcpy_s(nums[j], nums[k]);
   strcpy_s(nums[k], aux);
  }
 }
}
system("pause");
system("cls");
}*/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <String.h>
#include <conio.h>

int const total = 25;//maximo de registos
int i = 0;
typedef struct {
char nome[100], email[100], morada[100], postal[100], numero[20];
int telefone, FP, SD, AM1, ALGA, CM;
}dados;

void guardar(dados *contacto)
{
FILE *f;
char nfich[20];
int j = 0;
printf("Insira a localizacao do ficheiro\n");
scanf_s(" %s", &nfich);
f = fopen(nfich, "w");

for (j = 0; j<i; j++)
{
 fprintf(f, "%s ", contacto[j].nome);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].numero);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].morada);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].postal);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].email);
 fflush(stdin);
 fprintf(f, "%d ", contacto[j].telefone);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].FP);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].AM1);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].SD);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].ALGA);
 fflush(stdin);
 fprintf(f, "%s ", contacto[j].CM);
 fflush(stdin);
}

printf("Dados guardados com suscesso!!! \n");
fclose(f);
}

void adicionar(dados* contacto)
{
if (i<total)
{
 printf("\nIntroduza o Nome:  ", i + 1);
 fflush(stdin);
 scanf(" %[^\n]s", contacto[i].nome);
 printf("Introduza o Numero de Aluno ISEL:  ", i + 1);
 fflush(stdin);
 scanf(" %s", &contacto[i].numero);
 printf("Introduza a Morada:  ", i + 1);
 fflush(stdin);
 scanf(" %[^\n]s", contacto[i].morada);
 printf("Introduza o Codigo Postal:  ", i + 1);
 fflush(stdin);
 scanf(" %[^\n]s", contacto[i].postal);
 printf("Introduza o email:  ", i + 1);
 fflush(stdin);
 scanf(" %[^\n]s", contacto[i].email);
 printf("Introduza o telefone:  ", i + 1);
 fflush(stdin);
 scanf(" %d", &contacto[i].telefone);
 printf("Nota Final de FP:  ", i + 1);
 fflush(stdin);
 scanf(" %d", &contacto[i].FP);
 printf("Nota Final de AM1:  ", i + 1);
 fflush(stdin);
 scanf(" %d", &contacto[i].AM1);
 printf("Nota Final de SD:  ", i + 1);
 fflush(stdin);
 scanf(" %d", &contacto[i].SD);
 printf("Nota Final de ALGA:  ", i + 1);
 fflush(stdin);
 scanf(" %d", &contacto[i].ALGA);
 printf("Nota Final de CM:  ", i + 1);
 fflush(stdin);
 scanf(" %d", &contacto[i].CM);
 i++;
}
else
{
 printf("a lista esta cheia");
}
}
void mostrar(dados* contacto)
{
int j = 0;
printf("\t\t  Mostar dados\n\n");
fflush(stdin);
for (j = 0; j<i; j++)
{
 printf("\t%d->   \n\tNome:  %s |", j + 1, contacto[j].nome);
 fflush(stdin);
 printf(" \n\tNumero de Aluno ISEL: %s |", contacto[j].numero);
 fflush(stdin);
 printf(" \n\tMorada: %s |", contacto[j].morada);
 fflush(stdin);
 printf(" \n\tCodigo Postal: %s |", contacto[j].postal);
 fflush(stdin);
 printf(" \n\tE-Mail: %s |", contacto[j].email);
 fflush(stdin);
 printf(" \n\tNumero de telefone: %d |", contacto[j].telefone);
 fflush(stdin);
 printf(" \n\tNota final de FP: %d |", contacto[j].FP);
 fflush(stdin);
 printf(" \n\tNota final de AM1: %d |", contacto[j].AM1);
 fflush(stdin);
 printf(" \n\tNota final de SD: %d |", contacto[j].SD);
 fflush(stdin);
 printf(" \n\tNota final de ALGA: %d |", contacto[j].ALGA);
 fflush(stdin);
 printf(" \n\tNota final de CM: %d\t\n\n\n |", contacto[j].CM);
 fflush(stdin);
}
}

void eliminar(dados *contacto){
char c;
mostrar(contacto);
int j, opcao;
do{
 printf("Introduza numero a eliminar:\n");
 scanf("%d", &opcao);
 if (opcao >i || opcao <= 0)
  printf("Opcao Invalida\n");
} while (opcao >i || opcao <= 0);
getchar();
do{
 printf("Deseja mesmo apagar o contacto? (s - Sim; n -Nao)");
 scanf("%c", &c);
} while (c != 's' && c != 'n' && c != 'N' && c != 'S');
if (c == 's' || c == 'S'){
 for (j = opcao; j<i; j++)
 {
  strcpy(contacto[j].nome, contacto[i - 1].nome);
  strcpy(contacto[j].numero, contacto[i - 1].numero);
  strcpy(contacto[j].morada, contacto[i - 1].morada);
  strcpy(contacto[j].postal, contacto[i - 1].postal);
  strcpy(contacto[j].email, contacto[i - 1].email);
  contacto[j].telefone = contacto[i - 1].telefone;
  contacto[j].FP = contacto[i - 1].FP;
  contacto[j].AM1 = contacto[i - 1].AM1;
  contacto[j].SD = contacto[i - 1].SD;
  contacto[j].ALGA = contacto[i - 1].ALGA;
  contacto[j].CM = contacto[i - 1].CM;
 }
 i--;
}
}

void pesquisar1(dados* contacto)
{
char proc[50];
int j;
printf("Introduza o nome que pretende pesquisar: ");
scanf("%s", proc);
for (j = 0; j<i; j++)
{
 if (0 == strcmp(proc, contacto[j].nome))
 {
  printf("\n\nDados: \n");
  printf("\tNome Pesquisado: %s", contacto[j].nome);
  printf("\n\tEmail: %s", contacto[j].email);
  printf("\n\tTelefone: %d", contacto[j].telefone);
  printf("\n----------------------------------\n");
  system("pause");
  return;
 }
}
printf("\nNome invalido\n");
system("pause");
}
void pesquisar2(dados* contacto)
{
char proc[50];
int j;
printf("Introduza o nome que pretende pesquisar: ");
scanf("%s", proc);
for (j = 0; j<i; j++)
{// isto diz o numero total de contactos        
 if (0 == strcmp(proc, contacto[j].nome))
 {
  printf("\n\nDados: \n");
  printf("\n\tNomePesquisado: %s", contacto[j].nome);
  printf("\n\tMorada: %s", contacto[j].morada);
  printf("\n\tCodigo Postal: %s", contacto[j].postal);
  printf("\n\tTelefone: %d", contacto[j].telefone);
  printf("\n----------------------------------\n");
  system("pause");
  return;
 }
}
printf("\nNome invalido\n");
system("pause");
}

void pesquisar3(dados* contacto)
{
char proc[50];
int j;
printf("Introduza o numero que pretende pesquisar: ");
scanf("%s", proc);
for (j = 0; j<i; j++)
{// isto diz o numero total de contactos        
 if (0 == strcmp(proc, contacto[j].numero))
 {
  printf("\n\nDados: \n");
  printf("\n\tNumero Pesquisado: %s", contacto[j].numero);
  printf("\n\tNome: %s", contacto[j].nome);
  printf("\n\tEmail: %s", contacto[j].email);
  printf("\n\tTelefone: %d", contacto[j].telefone);
  printf("\n----------------------------------\n");
  printf("\n----------------------------------\n");
  system("pause");
  return;
 }
}
printf("\nNumero invalido\n");
system("pause");
}

void pesquisar4(dados* contacto)
{
char proc[50];
int j;
printf("Introduza o numero que pretende pesquisar: ");
scanf("%s", proc);
for (j = 0; j<i; j++)
{// isto diz o numero total de contactos        
 if (0 == strcmp(proc, contacto[j].numero))
 {
  printf("\n\nDados: \n");
  printf("\n\tNumero Pesquisado: %s", contacto[j].numero);
  printf("\n\tNome: %s", contacto[j].nome);
  printf("\n\tMorada: %s", contacto[j].morada);
  printf("\n\tCodigo Postal: %s", contacto[j].postal);
  printf("\n\tTelefone: %d", contacto[j].telefone);
  printf("\n----------------------------------\n");
  system("pause");
  return;
 }
}
printf("\nNumero invalido\n");
system("pause");
}
/*void ordenar(dados *contacto)
{
char nums[total];
int aux;
int j, k;
for (i = 0; i<total; i++){
 strcpy_s(nums[i], contacto[i].numero);
}

for (j = 0; j<total - 1; j++){

 for (k = j + 1; k<total; k++){
  if (strcmp(nums[j], nums[k])>0){

   strcpy_s(aux, nums[j]);
   strcpy_s(nums[j], nums[k]);
   strcpy_s(nums[k], aux);
  }
 }
}
system("pause");
system("cls");
}*/
void abrir(dados *contacto)
{
FILE *f;
int telefone, FP, AM1, SD, ALGA, CM;
char nome[1000], morada[1000], postal[1000], email[1000], numero[20], nfich[200];

printf("Introduza a localizacao do ficheiro:\n");
scanf(" %s", &nfich);
f = fopen(nfich, "w");
if (f == NULL)
{
 printf("Erro ao abrir ficheiro");
}
else
{
 while (!feof(f))
 {
  printf("Introduza os seus dados: ");
  fscanf(f, " %[\n]s", nome);
  fscanf(f, "%[\n]s", numero);
  fscanf(f, "%[\n]s", morada);
  fscanf(f, "%[\n]s", postal);
  fscanf(f, "%[\n]s", email);
  fscanf(f, "%d", &telefone);
  fscanf(f, "%d", &FP);
  fscanf(f, "%d", &AM1);
  fscanf(f, "%d", &SD);
  fscanf(f, "%d", &ALGA);
  fscanf(f, "%d", &CM);
  strcpy(contacto[i].nome, nome);
  strcpy(contacto[i].numero, numero);
  strcpy(contacto[i].morada, morada);
  strcpy(contacto[i].postal, postal);
  strcpy(contacto[i].email, email);
  contacto[i].telefone = telefone;
  contacto[i].FP = FP;
  contacto[i].AM1 = AM1;
  contacto[i].SD = SD;
  contacto[i].ALGA = ALGA;
  contacto[i].CM = CM;
  i++;
 }
 fclose(f);
}
}

void submenu(dados *contacto)
{
char op;
do
{
 system("cls");
 printf("\n\tEscolha uma opcao\n\n\t");
 printf("1- Mostrar todos os registos da agenda\n\n\t");
 printf("2- Acrescentar um registo na agenda\n\n\t");
 printf("3- Apagar um registo da agenda\n\n\t");
 printf("4- Qual eh o telefone e o endereco\n\t de e-mail de um NOME de aluno que conste na agenda?\n\n\t");
 printf("5- Qual o telefone, a morada, e o\n\t codigo postal de um NOME de um aluno que conste na agenda?\n\n\t");
 printf("6- Qual o telefone e o endereco de\n\t e-mail de um NUMERO de um aluno que conste na agenda?\n\n\t");
 printf("7- Qual o telefone, a morada, e o\n\t codigo postal de um NUMERO de um aluno que conste na agenda?\n\n\t");
 printf("8- Ordenar a agenda por ordem crescente\n\t do numero de aluno, para todos os registos da agenda\n\n\t");
 printf("9- Voltar ao menu principal\n\n\t");
 printf("\n\tSelecione a opcao --> ");
 op = getchar();
 switch (op)
 {
 case '1':
  system("cls");
  mostrar(contacto);
  system("pause");
  break;
 case '2':
  system("cls");
  adicionar(contacto);
  system("pause");
  break;
 case '3':
  system("cls");
  eliminar(contacto);
  system("pause");
  break;
 case '4':
  system("cls");
  pesquisar1(contacto);
  system("pause");
  break;
 case '5':
  system("cls");
  pesquisar2(contacto);
  system("pause");
  break;
 case '6':
  system("cls");
  pesquisar3(contacto);
  system("pause");
  break;
 case '7':
  system("cls");
  pesquisar4(contacto);
  system("pause");
  break;
 case'8':
  system("cls");
  //ordenar(contacto);
  system("pause");
  break;
 case '9':
  system("cls");
  op = '0';
  break;
 }
} while (op != '0');
}


int main(int argc, char *argv[])
{
dados contacto[total];
char op;
int j;
do
{
 system("cls");
 printf("\n\t.:: AGENDA ELECTRONICA EM LINGUAGEM C ::.\n\n\t ");
 printf("\n\tEste programa eh uma agenda eletronica. \n\tPermite introduzir vários tipos de informacao.");
 printf("\n\tNeste programa voce pode inserir o nome, numero de aluno do ISEL,\n\tmorada, codigo postal, email, telefone\n\te as notas finais das cinco disciplinas do primmeiro semestre\n\tdo curso de Eng. Electrotecnica no ISEL\n\t");
 printf("\n\n\tComo pretende introduzir os dados:\n\n\t\t");
 printf("1- Atraves do teclado\n\t\t");
 printf("2- Atraves de ficheiro\n\n\t\t");
 printf("0- Sair do Programa\n\n\t");
 printf("-->>> ");
 scanf("%c", &op);
 switch (op)
 {
 case'1':
  submenu(contacto);
  break;
 case'2':
  abrir(contacto);
  //submenu(contacto);
  break;
 }
} while (op != '0');

system("PAUSE");
}


aqui é o código todo

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
mirador_22

tenta testar assim e vé se funciona, fonte http://www.sanfoundry.com/c-program-sort-array-ascending-order/ e também para visualizar melhor o teu codigo: onde diz CODE usa a extensão CODE=c dentro do parêntesis, assim poderemos entender melhor a sua duvida em relação ao seu codigo

void ordenar(dados *contacto)
{
char nums[total];
int aux;
int i, j;

for (i = 0; i<total; i++){
strcpy_s(nums[i], contacto[i].numero);
}

for ( j = i + 1; j<total; j++){
//if (strcmp(nums[i], nums[j])>0){//em vez de usa isto

//podia fazer assim
if (nums[i] > nums[j]){
strcpy_s(aux, nums[i]);
strcpy_s(nums[i], nums[j]);
strcpy_s(nums[j], aux);
}
}
}
system("pause");
system("cls");
}

Edited by mirador_22

Share this post


Link to post
Share on other sites
HappyHippyHippo

ordenar em C é com 1+3 linhas de código :

int dados_comp_nome_asc(void * d1, void * d2) {
 return strcmp(((dados *)d1)->nome, ((dados *)d2)->nome);
}

qsort(contacto, i, sizeof(dados), dados_comp_nome_asc);


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rubenndf91

tenta testar assim e vé se funciona, fonte http://www.sanfoundry.com/c-program-sort-array-ascending-order/ e também para visualizar melhor o teu codigo: onde diz CODE usa a extensão CODE=c dentro do parêntesis, assim poderemos entender melhor a sua duvida em relação ao seu codigo

void ordenar(dados *contacto)
{
char nums[total];
int aux;
int i, j;

for (i = 0; i<total; i++){
strcpy_s(nums[i], contacto[i].numero);
}

for ( j = i + 1; j<total; j++){
//if (strcmp(nums[i], nums[j])>0){//em vez de usa isto

//podia fazer assim
if (nums[i] > nums[j]){
strcpy_s(aux, nums[i]);
strcpy_s(nums[i], nums[j]);
strcpy_s(nums[j], aux);
}
}
}
system("pause");
system("cls");
}

dá erro diz:

error C2660: 'strcpy_s' : function does not take 2 arguments

Share this post


Link to post
Share on other sites
Lorde Raveno

Use isso como base, então aprimore, incorpore e altere do seu jeito. :)

#include <stdio.h>
#include <stdlib.h>
char descricao[40];

void adicionar(){
    FILE * pFile;

    printf("\n\n\n   Menu: Digite qualquer caracter e der enter se quiser voltar ao menu ");
    fflush(stdin);
    fgets (descricao,39,stdin);
    pFile = fopen ("log.txt","a");
    fputs (descricao,pFile);

    fclose (pFile);
    system("clear");
}

void menu(){
    int opcao = 0;

    while (opcao != 3){
        printf ("Digite o numero da lista e der Enter para selecionar.\n\n");
        puts("1: Tema 1");
        puts("2: Tema 2");
        puts("3... Sair");
        scanf("%d", &opcao);
        switch (opcao){
            case 1:
                  system("clear");
                  printf ("Demonstração do tema 1.");
                  adicionar( );
                  break;
            case 2:

system("clear");

                  printf ("Demonstração do tema 2.");
                adicionar( );
                break;
               
        }
    }
}

int main(){
    menu();
}

Repita sempre o " system (clear); " caso queira eliminar as infos anteriores e mostrar as próximas como se abrisse uma nova janela ou sessão.

Edited by Lorde Raveno

Share this post


Link to post
Share on other sites
HappyHippyHippo
On 12/5/2019 at 8:12 AM, Lorde Raveno said:

Repita sempre o " system (clear); " caso queira eliminar as infos anteriores e mostrar as próximas como se abrisse uma nova janela ou sessão.

a não ser que se faça scroll up na consola ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.