Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct num_serv_sec {
- int num_serie;
- };
- struct info_pessoal {
- char nome [100];
- int dia_nasc;
- int mes_nasc;
- int ano_nasc;
- int altura;
- char olhos [100];
- char cabelo [100];
- };
- struct info_numer {
- int bi;
- int contribuinte;
- int seg_social;
- int carta_cond;
- };
- struct morada {
- char rua [100];
- int cod_postal1;
- int cod_postal2;
- char cod_postal3 [100];
- };
- struct confid {
- char partido [100];
- char clube [100];
- };
- typedef struct cidadao {
- struct num_serv_sec nss;
- struct info_pessoal infp;
- struct info_numer infn;
- struct morada address;
- struct confid clubes;
- } cidadao;
- int le_int (int *guarda, int min, int max) {
- int a;
- scanf(" %d", &a);
- if((a>=min) || (a<=max)) {
- *guarda=a;
- }
- }
- char le_char (char *guarda){
- //getchar();
- gets(guarda);
- }
- int le_nss (struct num_serv_sec *nss) {
- int max=999999;
- int min=1;
- fflush(stdin);
- printf("Introduza o numero de serie:\n");
- le_int(&nss, min, max);
- }
- void le_info_pessoal(struct info_pessoal *infp) {
- printf("Introduza o nome: \n");
- getchar();
- le_char(&(*infp).nome);
- printf("Introduza o dia de nascimento: \n");
- le_int(&(*infp).dia_nasc,1,30);
- printf("Introduza o mes de nascimento: \n");
- le_int(&(*infp).mes_nasc,1,12);
- printf("Introduza o ano de nascimento: \n");
- le_int(&(*infp).ano_nasc, 1900, 2014);
- printf("Introduza a altura: \n");
- le_int(&(*infp).altura, 30, 270);
- printf("Introduza a cor dos olhos: \n");
- getchar();
- le_char(&(*infp).olhos);
- printf("Introduza a cor do cabelo: \n");
- le_char(&(*infp).cabelo);
- }
- void le_info_numer ( struct info_numer *infn) {
- printf("Introduza o numero do BI: \n");
- le_int(&(*infn).bi,1,999999);
- printf("Introduza o numero de contribuinte; \n");
- le_int(&(*infn).contribuinte,1,999999);
- printf("Introduza o numero de Segurança Social: \n");
- le_int(&(*infn).seg_social,1,999999);
- printf("Introduza o numero de Carta de Condução: \n");
- le_int(&(*infn).carta_cond,1,999999);
- }
- void le_morada( struct morada *address) {
- printf("Introduza o nome da rua: \n");
- getchar();
- le_char(&(*address).rua);
- printf("Introduza a primeira parte do codigo postal: \n");
- le_int(&(*address).cod_postal1, 0, 9999);
- printf("Introduza a segunda parte do codigo postal: \n");
- le_int(&(*address).cod_postal2, 0, 999);
- printf("Introduza a cidade: \n");
- getchar();
- le_char(&(*address).cod_postal3);
- }
- void le_confid(struct confid *clubes) {
- printf("Que partido politico apoia: \n");
- le_char(&(*clubes).partido);
- printf("Que clube apoia: \n");
- le_char(&(*clubes).clube);
- }
- void le_cidadao(cidadao *apont){
- le_nss(&(*apont).nss);
- le_info_pessoal(&(*apont).infp);
- le_info_numer(&(*apont).infn);
- le_morada(&(*apont).address);
- le_confid(&(*apont).clubes);
- }
- void mostrar_num_serie (cidadao c, int i) {
- printf("Número de série do %d º cidadão: %d\n",i, c.nss.num_serie);
- }
- void mostrar_nss(cidadao c) {
- printf("Numero de série: %d\n", c.nss.num_serie);
- }
- void mostrar_infp (cidadao c) {
- printf("nome: %s\n", c.infp.nome);
- printf("Dia de nascimento: %d\n", c.infp.dia_nasc);
- printf("Mes de nascimento: %d\n", c.infp.mes_nasc);
- printf("Ano de nascimento: %d\n", c.infp.ano_nasc);
- printf("Altura: %d\n", c.infp.altura);
- printf("Cor dos olhos: %s\n", c.infp.olhos);
- printf("Cor do cabelo: %s\n", c.infp.cabelo);
- }
- void mostrar_infn (cidadao c) {
- printf("Número de B.I: %d\n", c.infn.bi);
- printf("Número de contribuinte: %d\n", c.infn.contribuinte);
- printf("Número de Seg.Social: %d\n", c.infn.seg_social);
- printf("Número de Carta de condução: %d\n", c.infn.carta_cond);
- }
- void mostrar_morada(cidadao c) {
- printf("Rua: %s\n", c.address.rua);
- printf("Código postal: %d-%d %s\n", c.address.cod_postal1, c.address.cod_postal2, c.address.cod_postal3);
- }
- void mostrar_confid(cidadao c) {
- printf("Partido: %s\n", c.clubes.partido);
- printf("Clube: %s\n\n", c.clubes.clube);
- }
- void mostrar_cidadao(cidadao c){
- mostrar_nss(c);
- mostrar_infp(c);
- mostrar_infn(c);
- mostrar_morada(c);
- mostrar_confid(c);
- }
- void limpa_serv_sec(struct num_serv_sec *nss){
- nss->num_serie=0;
- }
- void limpa_infp(struct info_pessoal *infp) {
- infp->nome[0]=NULL;
- infp->dia_nasc=0;
- infp->mes_nasc=0;
- infp->ano_nasc=0;
- infp->altura=0;
- infp->olhos[0]=NULL;
- infp->cabelo[0]=NULL;
- }
- void limpa_infn(struct info_numer *infn){
- infn->bi=0;
- infn->contribuinte=0;
- infn->seg_social=0;
- infn->carta_cond=0;
- }
- void limpa_morada (struct morada *address) {
- address->rua[0]=NULL;
- address->cod_postal1=0;
- address->cod_postal2=0;
- address->cod_postal3[0]=NULL;
- }
- void limpa_confid(struct confid *clubes){
- clubes->partido[0]=NULL;
- clubes->clube[0]=NULL;
- }
- void limpa_cidadao(cidadao *apont){
- limpa_serv_sec(&(*apont).nss);
- limpa_infp(&(*apont).infp);
- limpa_infn(&(*apont).infn);
- limpa_morada(&(*apont).address);
- limpa_confid(&(*apont).clubes);
- }
- void ler_ficheiro(cidadao *apont) {
- FILE *ptr_f;
- char cobaia[30]="cobaia.txt";
- ptr_f=fopen(cobaia,"r");
- while(!feof(ptr_f)) {
- fscanf(ptr_f,"%d\n", (&(*apont).nss.num_serie));
- fgets((*apont).infp.nome,100, ptr_f);
- fscanf(ptr_f,"%d\n", (&(*apont).infp.dia_nasc));
- fscanf(ptr_f,"%d\n", (&(*apont).infp.mes_nasc));
- fscanf(ptr_f,"%d\n", (&(*apont).infp.ano_nasc));
- fscanf(ptr_f,"%d\n", (&(*apont).infp.altura));
- fgets((*apont).infp.olhos,100, ptr_f);
- fgets((*apont).infp.cabelo,100, ptr_f);
- fscanf(ptr_f,"%d\n", (&(*apont).infn.bi));
- fscanf(ptr_f,"%d\n", (&(*apont).infn.contribuinte));
- fscanf(ptr_f,"%d\n", (&(*apont).infn.seg_social));
- fscanf(ptr_f,"%d\n", (&(*apont).infn.carta_cond));
- fgets((*apont).address.rua,100, ptr_f);
- fscanf(ptr_f,"%d\n", (&(*apont).address.cod_postal1));
- fscanf(ptr_f,"%d\n", (&(*apont).address.cod_postal2));
- fgets((*apont).address.cod_postal3,100, ptr_f);
- fgets((*apont).clubes.partido,100, ptr_f);
- //fgets((*apont).clubes.clube,100, ptr_f);
- fscanf(ptr_f,"%[^\n]", (&(*apont).clubes.clube));
- apont++;
- }
- fclose(ptr_f);
- }
- void escrever_ficheiro(cidadao *apont) {
- FILE *ptr_f;
- int i;
- char cobaia[30]="teste.txt";
- ptr_f=fopen(cobaia,"w+");
- for(i=0;i<=20;i++) {
- fprintf(ptr_f,"%d\n",(*apont).nss.num_serie);
- fputs((*apont).infp.nome, ptr_f);
- fprintf(ptr_f,"%d\n",(*apont).infp.dia_nasc);
- fprintf(ptr_f,"%d\n", (*apont).infp.mes_nasc);
- fprintf(ptr_f,"%d\n", (*apont).infp.ano_nasc);
- fprintf(ptr_f,"%d\n", (*apont).infp.altura);
- fputs((*apont).infp.olhos,ptr_f);
- fputs((*apont).infp.cabelo,ptr_f);
- fprintf(ptr_f,"%d\n", (*apont).infn.bi);
- fprintf(ptr_f,"%d\n", (*apont).infn.contribuinte);
- fprintf(ptr_f,"%d\n", (*apont).infn.seg_social);
- fprintf(ptr_f,"%d\n", (*apont).infn.carta_cond);
- fputs((*apont).address.rua,ptr_f);
- fprintf(ptr_f,"%d\n", (*apont).address.cod_postal1);
- fprintf(ptr_f,"%d\n", (*apont).address.cod_postal2);
- fputs((*apont).address.cod_postal3,ptr_f);
- fputs((*apont).clubes.partido,ptr_f);
- fputs((*apont).clubes.clube, ptr_f);
- apont++;
- }
- fclose(ptr_f);
- }
- void main() {
- char escolha, a='n';
- int i;
- cidadao basededados[20];
- do {
- printf("*************PROGRAMA SIRP - Registo dos cidadãos ***********\n\n");
- printf("SEMPRE QUE INTRODUZIR UMA FRASE, COMECE COM UM ESPAÇO\n");
- printf("a – Mostrar os número de série de todos os elementos da base de dados\n");
- printf("b – Mostrar toda a informação do cidadão com um certo número (a pedir)\n");
- printf("c – Modificar a informação do cidadão com um certo número (a pedir)\n");
- printf("d – Criar um novo registo para um novo cidadão\n");
- printf("e – Apagar o registo com um certo número (a pedir)\n");
- printf("f – Ler a base de dados de um ficheiro em modo binário (nome a pedir)\n");
- printf("g - Ler a base de dados de um ficheiro em modo de texto (nome a pedir)\n");
- printf("h – Escrever a base de dados num ficheiro em modo binário (nome a pedir)\n");
- printf("i - Escrever a base de dados num ficheiro em modo de text (nome a pedir)\n\n");
- printf("s – Sair do programa\n\n");
- printf("Que deseja fazer?\n");
- scanf(" %c", &escolha);
- switch(escolha){
- case 'a':
- case 'A': for(i=0; i<20; i++)
- mostrar_num_serie(basededados[i], i);
- break;
- case 'b':
- case 'B': printf("Qual é o numero do cidadão que quer ver: \n");
- scanf("%d", &i);
- mostrar_cidadao(basededados[i]);
- break;
- case 'c':
- case 'C': printf("Qual é o numero do cidadão que quer modificar: \n");
- scanf("%d", &i);
- mostrar_cidadao(basededados[i]);
- printf("Altere o que necessite, copie o que deseje que permaneça igual\n");
- le_cidadao(&basededados[i]);
- break;
- case 'd':
- case 'D': printf("Comece no 1; Posição do novo cidadao: \n");
- scanf("%d", &i);
- if((i=0) || (i<20)){
- le_cidadao(&basededados[i]);
- }
- break;
- case 'e':
- case 'E': printf("Qual cidadao deseja erradicar?\n");
- scanf("%d",&i);
- limpa_cidadao(&basededados[i]);
- break;
- case 'g':
- case 'G': ler_ficheiro(basededados);
- case 'i':
- case 'I': escrever_ficheiro(basededados);
- case 's':
- case 'S': break;
- }
- printf("Quer continuar(s-sim, n-nao)?\n");
- scanf(" %c", &a);
- }
- while(a!='n');
- }
Advertisement
Add Comment
Please, Sign In to add comment