Projecto final Programação - 1º Ano

35
Projecto Final 1º Ano Licenciatura Informática Ana Rodrigues Nº 558

Transcript of Projecto final Programação - 1º Ano

Page 1: Projecto final Programação - 1º Ano

Projecto Final

1º Ano Licenciatura Informática

Ana Rodrigues Nº 558

Page 2: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

INTRODUÇÃO: ............................................................................................................................... 2

DESCRIÇÃO PROGRAMA :: REGISTO ALUNOS :: : ........................................................................ 3

1 -INSERIR ALUNOS: .................................................................................................................. 6

2 -EDITAR ALUNOS: .................................................................................................................. 7

3 –PESQUISA ALUNOS NOME: .................................................................................................. 9

4 –PESQUISA ALUNOS NIF: ..................................................................................................... 10

5 - LISTAR ALUNOS: ................................................................................................................ 12

6 - LISTAR POR FORMAÇÃO: ................................................................................................... 12

7 - SAIR: ................................................................................................................................... 13

ESTRUTURA DO PROGRAMA:..................................................................................................... 14

//Variavel Global para o Menu .............................................................................................. 15

/* Estrutura do ficheiro de alunos */..................................................................................... 15

/* Verificação da password */ ............................................................................................... 15

/* Menu */ .............................................................................................................................. 16

/* Opção do Menu – Escolha */ ............................................................................................. 17

/* Main */ ............................................................................................................................... 19

/* Inserção de Alunos */ ........................................................................................................ 19

/* Verificação Caracteres */ ................................................................................................ 21

/* Coloca ID sequencial e automático n ficheiro de alunos*/ ............................................ 21

//Gravar no ficheiro ............................................................................................................ 21

/* Listar Alunos */ .................................................................................................................. 22

/* Listar Formação */ ............................................................................................................. 24

/* Edição de Registos */ ......................................................................................................... 26

/ * Pesquisa por NIF */ ........................................................................................................... 29

/ * Pesquisa por Nome */ ....................................................................................................... 31

WEBGRAFIA: ............................................................................................................................... 33

CONCLUSÃO: ............................................................................................................................... 34

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 3: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

INTRODUÇÃO:

Projecto final, realizado no âmbito da unidade curricular de Programação I com o Prof. João Rebelo.

O objeticvo da concepção deste programa é o de aplicar conhecimentos adquiridos ao longo da unidade curricular na linguagem de programação C, assim como conhecimentos adquiridos por auto estudo.

O software utilizado para a realização do programa, foi o mesmo que tem sido utilizado no decorrer da unidade curricular, o CODEBLOCKS.

O programa realizado, chama-se REGISTO DE ALUNOS, e tem como objectivos:

• Inserção de Novos Registos • Edição de Registos por pesquisa de NIF • Pesquisar Alunos por Nome • Pesquisar Alunos por NIF • Listar Alunos • Listar Formações com Alunos Inscritos

Pretendi que o mesmo so iniciasse com a introdução de palavra passe, pelo que antes do Menu ser apresentado, é pedida ao utilizador uma palavra passe, que utilizei como exemplo “XPTO”, case sensitive.

Em cada listagem, pretendia que aparece-se o valor total de cada formação/explicação, pelo que foi criada uma variável PTOTAL, que calcula o preço total de cada formação por aluno, é o Numero de Hora * Preço Hora.

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 4: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

DESCRIÇÃO PROGRAMA :: REGISTO ALUNOS :: : Para poder iniciar o programa, é necessário a introdução da palavra passe correcta “XPTO”, caso a palavra passe seja validada, passa para o menu, caso a palavra passe esteja errada surge uma mensagem a dizer “PASSWORD ERRADA!”, e torna a pedir para digitar a password.

Utilizei para poder verificar sa password a FUNÇÃO strcmp() – Comparação de strings.

No main, so é chamada a vpass().

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 5: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

Depois de a password ter sido validada, entra então no Menu()

A variável xopcao, esta declarada como Global, isto porque precisava de poder passar o valor do teclado para a função opMenu():

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 6: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

Caso não criasse uma variável global, a opção não passava e o programa fechava sempre sem qualquer retorno. Para que conseguisse que a opção passasse, foi criando uma variável global.

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 7: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

1 -INSERIR ALUNOS: Na inserção de alunos, é validado o contacto e o contribuinte de modo a que não tenha menos de 9 dígitos e que nestes 2 campos não sejam inseridas letras.

É colocado em cada registo um ID Aluno sequencial e automático

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 8: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

2 -EDITAR ALUNOS: Na edição do registo, é feita inicialmente uma pesquisa por Numero de Contribuinte:

Após a introdução do mesmo,

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 9: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

Começa a edição do registo:

Termina a edição do mesmo:

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 10: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

3 –PESQUISA ALUNOS NOME:

Pretendia que o nome fosse pesquisado pelos primeiros caracteres mas não consegui utilizar a função substr, deu-me sempre erro.

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 11: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

4 –PESQUISA ALUNOS NIF:

Temos o mesmo que a pesquisa por nome mas neste caso é por numero de contribuinte.7

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 12: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 13: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

5 - LISTAR ALUNOS: Pretende-se a listagem de todos os alunos, onde aparece no final o valor total da formação.

6 - LISTAR POR FORMAÇÃO: Aqui, pretende-se que seja listada a formação que se pretende com todos os alunos nelas inscritos, se houver mais que 1 aluno, aparece no fim o valor total de cada aluno, horas*proço hora e também o valor total de todos os alunos.

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 14: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

7 - SAIR: Como o próprio nome indica, sai do programa.

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 15: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

ESTRUTURA DO PROGRAMA:

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 16: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

#include <stdio.h>

#include <stdlib.h>

//Variavel Global para o Menu int xopcao;

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

/* Estrutura do ficheiro de alunos */ struct defAluno{

int ID_Aluno;

char Nome[120];

char Morada[80];

char Contacto[9];

char NIF[9];

char Email[80];

char Formacao[50];

int Horas;

double Preco_Hora;

};

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

/* Verificação da password */ int vPass(){

char password[8]="XPTO";

char passcliente[8];

printf("Digite a password para poder aceder:\n");

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 17: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

gets(passcliente);

/* Verifica se a password condiz, se SIM passa para o Menu se NÃO dá Mensagem de Erro */

if (strcmp(password, passcliente)==0){

Menu();

opMenu();

}

else{

printf("PASSWORD ERRADA!\n");

main();

}

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

/* Menu */ int Menu(){

printf("\n \t\t\t ***************************************** \n");

printf("\n \t\t\t * REGISTO DE ALUNOS *\n");

printf("\n \t\t\t * UC PROGRAMAÇ\707O I - Prof. Jo\706o Rebelo * \n");

printf("\n \t\t\t * 1º Ano Licenciatura Inform\240tica *\n");

printf("\n \t\t\t * Ana Isabel Rodrigues - Nº 558 *\n");

printf("\n \t\t\t ***************************************** \n\n");

printf("\n\t\t\t\t Escolha a opç\706o que pretende: \n");

printf(" **************************************************************************** \n ");

printf(" *\tInserir/Editar Registos: \t||\tPesquisar Registos: *\n");

printf(" ---------------------------------------------------------------------------- \n ");

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 18: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

printf(" *\t1-> Inserir Alunos\t\ ||\t3-> Alunos por Nome *\n");

printf(" *\t2-> Editar Alunos \t ||\t4-> Alunos por NIF\t *\n");

printf(" ----------------------------------------------------------------------------- \n ");

printf(" *\t Listar: \n");

printf(" ----------------------------------------------------------------------------- \n ");

printf(" *\t5-> Listar Alunos\t\t|| \t\t\t *\n");

printf(" *\t6-> Listar Forma\207\744es com Alunos ||\t7 -> Sair \t\t *\n");

printf(" **************************************************************************** \n\n");

printf("Op\207\706o: ");

scanf("%s",&xopcao);

return xopcao;

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

/* Opção do Menu – Escolha */ int opMenu(){

char opcao;

opcao=xopcao;

switch(opcao){

case '1':

InsereAluno();

break;

case '2':

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 19: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

EditarAlunos();

break;

case '3':

pesquisarAlunoNome();

break;

case '4':

pesquisarAlunosNIF();

break;

case '5':

ListarAlunos();

break;

case '6':

ListarFormacao();

break;

case '7':

return 0;

default :

//system("cls");

printf("\n\n Escolha uma op\207\706o valida!");

}

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 20: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

/* Main */ int main(){

vPass();

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

/* Inserção de Alunos */ void InsereAluno(){

/* Criar um buffer para o cliente*/

struct defAluno A;

FILE *fAlunos;

fAlunos=fopen("alunos.dat","rb+"); /* é aberto o ficheiro para ler/escrever */

/* So entra no if se ficheiro não existir, cria o ficheiro na raiz da aplicação, deveria-se verificar se o ficheiro

é criado mesmo, pode não ter permissões */

if(fAlunos==NULL){ /* vai testar se o ficheiro existe ou não */

fAlunos=fopen("alunos.dat","wb"); /* se nao existir, é criado */

fclose(fAlunos);

}

/*A condição !fAlunos testa se o arquivo foi aberto com sucesso porque no caso de um erro a função fopen()

retorna um ponteiro nullo (NULL). */

if (!fAlunos){

printf ("Erro na abertura do arquivo.");

}

else{

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 21: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

fAlunos=fopen("alunos.dat","rb+");/*torna a abrir o ficheiro para leitura e escrita */

}

//Inserção de dados no ficheiro

getchar();

system("cls");

printf(" **************************************************************************** \n");

printf(" *\t\t\tInser\207\706o de Novos Alunos:\t\t\t *\n");

printf(" **************************************************************************** \n");

printf("\n Digite o Nome:");

gets(A.Nome);/* scanf("%s", C.Nome); %s só apanha a primeira palavra ate encontrar o espaço,

exemplo: Ana Rodrigues, so apanha Ana, dai usar gets() */

printf("\n Digite a morada:");

gets(A.Morada);

printf("\n Digite o Contacto:");

gets(A.Contacto);

while(strlen (A.Contacto) <9 ||(isalpha(A.Contacto)!=0)) {

printf(" O CONTACTO \220 INVALIDO.\nO CONTACTO DEVERA TER 9 DIGITOS E N\707O PODE CONTER LETRAS.\n");

printf(" Contacto: ");

gets(A.Contacto);

}

/* Controlo do numero de contribuinte, se tiver menos de 9 digitos e forem letras da erro. */

printf("\n Digite N\243mero Contribuinte:");

gets(A.NIF);

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 22: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

/* Verificação Caracteres */ while(strlen (A.NIF) <9 ||(isalpha(A.NIF)!=0)) {

printf(" O N CONTRIBUINTE \220 INVALIDO.\nO N CONTRIBUINTE DEVERA TER 9 DIGITOS E N\707O PODE CONTER LETRAS.\n");

printf(" N\243mero Contribuinte: ");

gets(A.NIF);

}

printf("\n Digite o E-Mail:");

gets(A.Email);

printf("\n Digite a Forma\207\706o/Explica\207\706o:");

gets(A.Formacao);

printf("\n Digite o numero de horas:");

scanf("%d", &A.Horas); //Stock é variavel primitiva, int é um tipo primitivo.

printf("\n Digite o Pre\207o/Hora:");

scanf("%lf", &A.Preco_Hora); //%lf é long float, porque é double, double é um tipo primitivo

/* Coloca ID sequencial e automático n ficheiro de alunos*/ fseek(fAlunos,0,SEEK_END); // vai posicionar o cursor no fim do registo

long nposicao;

nposicao=ftell(fAlunos); //devolve em bytes a posicao do cursor no ficheiro

long nregistos=nposicao/sizeof(A);

nregistos++;

A.ID_Aluno=nregistos;

//Gravar no ficheiro fseek(fAlunos,0,SEEK_END);

fwrite(&A,sizeof(A),1,fAlunos); //escreve no ficheiro

printf("\n ************************************* ALUNO CRIADO COM SUCESSO ************************************* \n");

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 23: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

getch();

Menu();

opMenu();

fclose(fAlunos);

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

/* Listar Alunos */ void ListarAlunos(){

double PTotal;

struct defAluno L;

FILE *lAlunos;

lAlunos=fopen("alunos.dat","rb"); //Ou o ficheiro existe ou não existe

if (lAlunos==NULL) printf("\nErro de abertura de Ficheiro"); //Instruçao inline, instrução sem chavetas e so pode ter uma instrução.

else {

//Ler os dados do ficheiro

//Garantir que estamos a ler do 1º registo

fseek(lAlunos,0,SEEK_SET);

//Ler ate ao ultimo registo

int saida=0;

//Enquanto não chegar ao fim do ultimo registo

while (!saida){

fread(&L,sizeof(struct defAluno),1,lAlunos);

//Como detectar se esta no fim do ficheiro ou se o ficheiro ainda nao tem nada

if(feof(lAlunos)) saida=1;

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 24: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

else {

printf(" ******************************************************************** \n");

printf(" *\t\t\t Listar Alunos:\t\t\t *\n");

printf(" ******************************************************************** \n");

printf("\n Nome: %s \n Morada:%s \n Contacto:%s \n NIF: %s \n E-Mail: %s \n Forma\207\706o:%s \n Horas de Forma\207\706o: %d \n Pre\207o Hora: %lf \n",L.Nome,L.Morada,L.Contacto, L.NIF, L.Email,L.Formacao,L.Horas,L.Preco_Hora);

PTotal= L.Horas*L.Preco_Hora;

printf("\n Pre\207o Total Forma\207\706o/Explica\207\706o: %lf", PTotal);

printf("\n -------------------------------------------------- \n");

}//Fim do else

}//Fim do Listar

printf("\n ******** LISTAGEM CONCLUIDA - PRIMA ENTER PARA VOLTAR AO MENU PRINCIPAL ******** \n");

getch();

Menu();

opMenu();

fclose(lAlunos);

}

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 25: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

/* Listar Formação */ void ListarFormacao(){

double PTotal;

double PTotalFormacao;

struct defAluno LF;

FILE *lFAlunos;

char lformacao[50];

getchar();

lFAlunos=fopen("alunos.dat","rb"); //Ou o ficheiro existe ou não existe

printf("Porque Forma\207\706ão pretende?");

gets(lformacao);

if (lFAlunos==NULL) printf("\nErro de abertura de Ficheiro"); //Instruçao inline, instrução sem chavetas e so pode ter uma instrução.

else {

//Ler os dados do ficheiro

//Garantir que estamos a ler do 1º registo

fseek(lFAlunos,0,SEEK_SET);

//Ler ate ao ultimo registo

int saida=0;

//Enquanto não chegar ao fim do ultimo registo

while (!saida){

fread(&LF,sizeof(struct defAluno),1,lFAlunos);

//Como detectar se esta no fim do ficheiro ou se o ficheiro ainda nao tem nada

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 26: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

if(feof(lFAlunos)) saida=1;

else {

printf(" ********************************************************** \n");

printf(" *\t\t\t Listar por Forma\207\706o:\t\t *\n");

printf(" ********************************************************** \n");

if(strcmp(LF.Formacao,lformacao)==0){

printf("\n Nome: %s \n Morada: %s \n Contacto: %s \n NIF: %s \n E-Mail: %s \n Forma\207\706o:%s\ \n Horas de Forma\207\706o: %d \n Pre\207o Hora: %lf \n",LF.Nome,LF.Morada,LF.Contacto, LF.NIF, LF.Email,LF.Formacao,LF.Horas,LF.Preco_Hora);

PTotal= LF.Horas*LF.Preco_Hora;

printf("\n Pre\207o Total Forma\207\706o/Explica\207\706o: %lf", PTotal);

PTotalFormacao= +PTotal;

printf("\n Pre\207o Total Forma\207\706o/Explica\207\706o: %lf", PTotalFormacao);

printf("\n -------------------------------------------------- \n");

}

}//Fim do else

}//Fim do Listar

printf("\n ---- LISTAGEM CONCLUIDA - PRIMA ENTER PARA VOLTAR AO MENU PRINCIPAL ---- \n");

getch();

Menu();

opMenu();

fclose(lFAlunos);

}

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 27: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

/* Edição de Registos */ void EditarAlunos(){

system("cls");

struct defAluno E;

FILE *eAlunos;

int eID;

int registo=0;

eAlunos = fopen("alunos.dat","rb+");

char pnif[9];

if(eAlunos==NULL){

printf("\n\7 ---- ERRO: FICHEIRO DE AlUNOS NAO EXISTE ---- \n");

printf("\7\n ---- PRIMA ENTER PARA VOLTAR AO MENU PRINCIPAL ---- \n");

getch();

}else if(eAlunos!=NULL){

printf("\n Indique NIF do Aluno a alterar: ");

scanf("%s",&pnif);

system("cls");

if(strcmp(pnif,E.NIF) != 0){ //Foi encontrado o aluno

printf("\n <<< VAI ALTERAR O ALUNO %s, COM O SEGUINTE NIF: %s. >>>\n",E.Nome,E.NIF);

getchar();

system("cls");

eID=E.ID_Aluno;

E.ID_Aluno=eID;

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 28: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

printf("\nIntroduza Nome: ");

gets(E.Nome);

printf("Introduza a Morada: ");

gets(E.Morada);

printf("Contacto:: ");

gets(E.Contacto);

printf("N\243mero de Contribuinte: ");

gets(E.NIF);

while(strlen (E.NIF) <9 ||(isalpha(E.NIF)!=0)) {

printf(" O N CONTRIBUINTE \220 INVALIDO.\nO N CONTRIBUINTE DEVERA TER 9 DIGITOS E N\707O PODE CONTER LETRAS.\n");

printf(" N\243mero Contribuinte: ");

gets(E.NIF);

}

printf("E-mail: ");

gets(E.Email);

printf("Digite a Forma\207\706o/Explica\207\706o:");

gets(E.Formacao);

printf("\nDigite o numero de horas:");

scanf("%d", &E.Horas); //Stock é variavel primitiva, int é um tipo primitivo.

printf("\nDigite o Pre\207o/Hora:");

scanf("%lf", &E.Preco_Hora); //%lf é long float, porque é double, double é um tipo primitivo

printf("\n <<< O CLIENTE %s COM O NIF %s FOI ALTERADO >>>\n\n",E.Nome,E.NIF);

printf("\n ---- EDICAO CONCLUIDA - PRIMA ENTER PARA VOLTAR AO MENU PRINCIPAL ---- \n");

getch();

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 29: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

fseek(eAlunos,-(sizeof(struct defAluno)),SEEK_CUR); // SEEK_SET inicio - SEEK_END fim - SEEK_CUR contar apartir dum sitio desde o fim ou inicio

// -sizeof nao duplica o registo

fwrite(&E,sizeof(struct defAluno) /*Conta quanto caracteres/espaço ocupa, sizeof é um operador em C */,1,/*

o ponteiro é o fAlunos, o ficheiro*/eAlunos);

system("cls");

}//Fecha o 2º if

}//Fecha 1º elseif

Menu();

opMenu();

fclose(eAlunos);

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 30: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

/ * Pesquisa por NIF */ void pesquisarAlunosNIF(){

double PTotal;

getchar();

struct defAluno PA;

char pNIF[9];

FILE *pesqNIF;

pesqNIF=fopen("alunos.dat","rb+");

printf("\n Indique NIF do Aluno a Pesquisar: ");

gets(pNIF);

if(pesqNIF!=NULL){

int registo=0;

int FimFicheiro=0;

while(!FimFicheiro){ //enquanto nao for o fim do ficheiro

fread(&PA,sizeof(struct defAluno),1,pesqNIF);

if(feof(pesqNIF)){

FimFicheiro=1;

}else

if(strcmp(pNIF,PA.NIF)!=0){ //compara o nif introduzido, se existe no ficheiro

system("cls");

printf(" ************************************************************************ \n");

printf(" *\t\t\t Pesquisa Alunos por N Contribuinte:\t\t*\n");

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 31: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

printf(" ************************************************************************ \n");

printf("\n Nome: %s \n Morada:%s \n Contacto:%s \n NIF: %s \n E-Mail: %s \n Forma\207\706o:%s \n Horas de Forma\207\706o: %d \n Pre\207o Hora: %lf \n",PA.Nome,PA.Morada,PA.Contacto, PA.NIF, PA.Email,PA.Formacao,PA.Horas,PA.Preco_Hora);

PTotal= PA.Horas*PA.Preco_Hora;

printf("\n Pre\207o Total Forma\207\706o/Explica\207\706o: %lf", PTotal);

printf("\n -------------------------------------------------- \n");

registo=1;

}

}

if(registo==0){

system("cls");

printf("\n <<< NAO ENCONTROU NENHUM ALUNO COM O NIF %s. >>>\n",pNIF);

printf("\n ---- PRIMA ENTER PARA VOLTAR AO MENU ANTERIOR ---- \n");

}

getchar();

Menu();

opMenu();

fclose(pesqNIF);

}//fim do if

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 32: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

/ * Pesquisa por Nome */ void pesquisarAlunoNome(){

double PTotal;

struct defAluno pAN;

FILE *pesqAlunos;

char pNome[50];

getchar();

pesqAlunos=fopen("alunos.dat","rb"); //Ou o ficheiro existe ou não existe

printf("Porque Nome pretende a pesquisa?");

gets(pNome);

if (pesqAlunos==NULL) printf("\nErro de abertura de Ficheiro"); //Instruçao inline, instrução sem chavetas e so pode ter uma instrução.

else {

//Ler os dados do ficheiro

//Garantir que estamos a ler do 1º registo

fseek(pesqAlunos,0,SEEK_SET);

//Ler ate ao ultimo registo

int saida=0;

//Enquanto não chegar ao fim do ultimo registo

while (!saida){

fread(&pAN,sizeof(struct defAluno),1,pesqAlunos);

//Como detectar se esta no fim do ficheiro ou se o ficheiro ainda nao tem nada

if(feof(pesqAlunos)) saida=1;

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 33: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

else {

if(strcmp(pAN.Nome,pNome)==0){

printf(" ****************************************************** \n");

printf(" *\tPesquisa Alunos por Nome Aluno:\t *\n");

printf(" ****************************************************** \n");

printf("\n Nome: %s \n Morada:%s \n Contacto:%s \n NIF: %s \n E-Mail: %s \n Forma\207\706o:%s \n Horas de Forma\207\706o: %d \n Pre\207o Hora: %lf \n",pAN.Nome,pAN.Morada,pAN.Contacto, pAN.NIF, pAN.Email,pAN.Formacao,pAN.Horas,pAN.Preco_Hora);

PTotal= pAN.Horas*pAN.Preco_Hora;

printf("\n Pre\207o Total Forma\207\706o/Explica\207\706o: %lf", PTotal);

printf("\n -------------------------------------------------- \n");

}

}//Fim do else

}//Fim do Listar

printf("\n ---- LISTAGEM CONCLUIDA - PRIMA ENTER PARA VOLTAR AO MENU PRINCIPAL ---- \n");

getch();

Menu();

opMenu();

fclose(pesqAlunos);

}

}

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 34: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

WEBGRAFIA: Livro Programação em C++ - Conceitos Básicos e Algoritmos

http://codigoseficientes.blogspot.pt/2012/10/acentuacao-na-linguagem-c.html

http://pt.wikibooks.org/wiki/Programar_em_C/Entrada_e_sa%C3%ADda_simples

http://programacao1.wikidot.com/exemplos1

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558

Page 35: Projecto final Programação - 1º Ano

Projecto Final - 1º Ano Licenciatura Informática

CONCLUSÃO: Foi um trabalho que achei interessante, gostei de o fazer embora não tivesse dedicado o tempo que pretendia, pois acho que conseguiria fazer melhor. Por motivos profissionais e alguns pessoais, faltou-me tempo para me poder dedicar mais ao trabalho e fazer mesmo o que realmente pretendia alem do que fiz. Pretendia efectuar pesquisas mais elaboradas e apresentar outras opções. Tentei fazer no menu antes da opção de SAIR a exportação dos dados para um ficheiro HTML, mas não consegui fazer tudo pelo que acabei por não por. Penso que no trabalho que efectuei, consigo aplicar tudo aquilo que fomos aprendendo ao longo do semestre, embora ache que poderia ter sido melhor explorado.

Ana Isabel Rodrigues – Licenciatura Informática 1º Ano – Nº 558