Code:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <String.h>
#include <windows.h>
const int total = 25;
int i = 0;
#define MAX_NOME 100
#define MAX_NUMERO 10
#define MAX_MORADA 100
#define MAX_POSTAL 50
#define MAX_EMAIL 100
#define MAX_GERAL 100
typedef struct {
char nome[MAX_NOME], email[MAX_EMAIL], morada[MAX_MORADA], postal[MAX_POSTAL], numero[MAX_NUMERO];
int telefone, FP, SD, AM1, ALGA, CM;
}dados;
void libertar(dados*contacto)
{
dados *libertar;
libertar = (dados*)malloc(sizeof(libertar));
//...
free(libertar);
}
int sair()
{
char a;
fflush(stdin);
printf("deseja relamente sair do programa [s- Sim/n- Nao]: ");
scanf("%c", &a);
// a=getch();
if (a == 's' || a == 'S')
exit(1);
while (a != 'n' && a != 'N');
}
void titulo()
{
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
WORD wOldColorAttrs;
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
/*
* First save the current color information
*/
GetConsoleScreenBufferInfo(h, &csbiInfo);
wOldColorAttrs = csbiInfo.wAttributes;
/*
* Set the new color information
*/
SetConsoleTextAttribute(h, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
printf("\n\t.:: AGENDA ELECTRONICA EM LINGUAGEM C [3 DE JULHO DE 2014] ::.\n\n\t ");
/*
* Restore the original colors
*/
SetConsoleTextAttribute(h, wOldColorAttrs);
}
void substituir(dados *contacto)
{
FILE *f;
//char nfich[20];
int j = 0;
//printf("insira o caminho do ficheiro\n");
//scanf("%s", &nfich);
f = fopen("teste.txt", "w+");
for (j = 0; j<i; j++)
{
fprintf(f, "%s", contacto[j].nome);
fprintf(f, " %s ", contacto[j].numero);
fprintf(f, " %s ", contacto[j].morada);
fprintf(f, " %s ", contacto[j].postal);
fprintf(f, " %s ", contacto[j].email);
fprintf(f, " %d ", contacto[j].telefone);
fprintf(f, " %d ", contacto[j].FP);
fprintf(f, " %d ", contacto[j].AM1);
fprintf(f, " %d ", contacto[j].SD);
fprintf(f, " %d ", contacto[j].ALGA);
fprintf(f, " %d ", contacto[j].CM);
}
printf("Dados guardados com suscesso!!! \n");
fclose(f);
}
void abrir(dados *contacto)
{
FILE *f;
char nome[MAX_NOME], email[MAX_EMAIL], morada[MAX_MORADA], postal[MAX_POSTAL], numero[MAX_NUMERO], geral[MAX_GERAL];
int telefone, FP, SD, AM1, ALGA, CM;
//printf("insira o caminho do ficheiro\n");
//scanf("%s", &nfich);
f = fopen("teste.txt", "r");
if (f == NULL)
{
printf("erro ao abrir ficheiros");
}
{
while (!feof(f))
{
fgets(nome, MAX_NOME, f);
fgets(numero, MAX_NUMERO, f);
fgets(morada, MAX_MORADA, f);
fgets(postal, MAX_POSTAL, f);
fgets(email, MAX_EMAIL, f);
fgets(geral, MAX_GERAL, f);
sscanf(geral, "%d", &telefone);
fgets(geral, MAX_GERAL, f);
sscanf(geral, " %d", &FP);
fgets(geral, MAX_GERAL, f);
sscanf(geral, " %d", &AM1);
fgets(geral, MAX_GERAL, f);
sscanf(geral, " %d", &SD);
fgets(geral, MAX_GERAL, f);
sscanf(geral, " %d", &ALGA);
fgets(geral, MAX_GERAL, f);
sscanf(geral, " %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 mostrar(dados* contacto)
{
int j = 0;
system("cls");
titulo();
fflush(stdin);
for (j = 0; j<i; j++)
{
printf("\t%d-> \n\tNome: %s |", j + 1, contacto[j].nome);
printf(" \n\tNumero de Aluno ISEL: %s |", contacto[j].numero);
printf(" \n\tMorada: %s |", contacto[j].morada);
printf(" \n\tCodigo Postal: %s |", contacto[j].postal);
printf(" \n\tE-Mail: %s |", contacto[j].email);
printf(" \n\tNumero de telefone: %d |", contacto[j].telefone);
printf(" \n\tNota final de FP: %d |", contacto[j].FP);
printf(" \n\tNota final de AM1: %d |", contacto[j].AM1);
printf(" \n\tNota final de SD: %d |", contacto[j].SD);
printf(" \n\tNota final de ALGA: %d |", contacto[j].ALGA);
printf(" \n\tNota final de CM: %d\t\n\n\n |", contacto[j].CM);
}
}
void f_adicionar(dados* contacto)
{
FILE*f;
f = fopen("teste.txt", "a");
char nome[MAX_NOME], email[MAX_EMAIL], morada[MAX_MORADA], postal[MAX_POSTAL], numero[MAX_NUMERO],geral[MAX_GERAL];
int telefone, FP, SD, AM1, ALGA, CM;
if (i<total)
{
printf("Introduza o Nome: ");
fflush(stdin);
fgets(contacto[i].nome, MAX_NOME, stdin);
fprintf(f, "%s", contacto[i].nome);
printf("Introduza o Numero de Aluno ISEL: ");
fgets(contacto[i].numero, MAX_NUMERO, stdin);
fprintf(f, "%s", contacto[i].numero);
printf("Introduza a Morada: ");
fgets(contacto[i].morada, MAX_MORADA, stdin);
fprintf(f, "%s", contacto[i].morada);
printf("Introduza o Codigo Postal: ");
fgets(contacto[i].postal, MAX_POSTAL, stdin);
fprintf(f, "%s", contacto[i].postal);
printf("Introduza o email de Aluno ISEL: ");
fgets(contacto[i].email, MAX_EMAIL, stdin);
fprintf(f, "%s", contacto[i].email);
printf("Introduza o telefone: ");
fgets(geral, MAX_GERAL, stdin);
sscanf(geral," %d", &contacto[i].telefone);
fprintf(f, " %d", &contacto[i].telefone);
printf("Nota Final de FP: ");
fgets(geral, MAX_GERAL, stdin);
sscanf(geral, " %d", &contacto[i].FP);
fprintf(f, " %d", &contacto[i].FP);
printf("Nota Final de AM1: ");
fgets(geral, MAX_GERAL, stdin);
sscanf(geral, " %d", &contacto[i].AM1);
fprintf(f, " %d", &contacto[i].AM1);
printf("Nota Final de SD: ");
fgets(geral, MAX_GERAL, stdin);
sscanf(geral, " %d", &contacto[i].SD);
fprintf(f, " %d", &contacto[i].SD);
printf("Nota Final de ALGA: ");
fgets(geral, MAX_GERAL, stdin);
sscanf(geral, " %d", &contacto[i].ALGA);
fprintf(f, " %d", &contacto[i].ALGA);
printf("Nota Final de CM: ");
fgets(geral, MAX_GERAL, stdin);
sscanf(geral, " %d", &contacto[i].CM);
fprintf(f, " %d\n", &contacto[i].CM);
i++;
}
else
{
printf("a lista esta cheia");
}
substituir(contacto);
}
void f_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--;
}
substituir(contacto);
}
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\n\n\n", &contacto[i].CM);
i++;
}
else
{
printf("a lista esta cheia");
}
}
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], geral[MAX_GERAL];
int j;
printf("Introduza o nome que pretende pesquisar: ");
fgets(geral, MAX_GERAL, stdin);
sscanf(geral, " %s", proc);
getchar();
for (j = 0; j<i; j++)
{
if (0 == strcmp(proc, contacto[j].nome))
{
system("cls");
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))
{
system("cls");
printf("\n\nDados: \n");
printf("\n\tNome Pesquisado: %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 de aluno ISEL 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))
{
system("cls");
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 de aluno ISEL 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))
{
system("cls");
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 submenu(dados *contacto)
{
char op;
do
{
system("cls");
titulo();
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");
printf("\tEm desenvolvimento\n\n");//qSort;
system("pause");
break;
case '9':
system("cls");
op = '0';
break;
}
} while (op != '0');
}
void submenu2(dados *contacto)
{
char op;
do
{
system("cls");
titulo();
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");
f_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");
printf("\tEm desenvolvimento\n\n");//qSort;
system("pause");
break;
case '9':
system("cls");
op = '0';
libertar(contacto);
break;
}
} while (op != '0');
}
void menu(dados *contacto)
{
char op;
do
{
system("cls");
titulo();
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("3- Sair do Programa\n\n\t");
printf("-->>> ");
scanf("%c", &op);
switch (op)
{
case'1':
submenu(contacto);
break;
case'2':
abrir(contacto);
submenu2(contacto);
break;
case '3':
sair();
break;
}
} while (op != '0');
system("PAUSE");
}
int main(int argc, char *argv[])
{
dados contacto[total];
char op;
do
{
system("cls");
titulo();
printf("-----------------------------------------------------------------");
printf("\n\t-----------------------------------------------------------------");
printf("\n\t|Este programa eh uma agenda eletronica. |\n\t|Permite introduzir varios tipos de informacao. |");
printf("\n\t|Neste programa voce pode inserir o nome, numero de aluno do ISEL,|\n\t|morada, codigo postal, email, telefone |\n\t|e as notas finais das cinco disciplinas do primmeiro semestre |\n\t|do curso de Eng. Electrotecnica no ISEL |\n\t");
printf("------------------------------------------------------------------");
printf("\n\t------------------------------------------------------------------");
printf("\n\n\tPressione:\n\t\t1- Para entrar na agenda\n\n\t\t");
printf("0- Sair do Programa\n\n\t");
printf("-->>> ");
scanf("%c", &op);
switch (op)
{
case'1':
menu(contacto);
break;
}
} while (op != '0');
system("PAUSE");
}