Leal9001

ficheiros.c

Dec 6th, 2014
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct num_serv_sec {
  6.     int num_serie;
  7. };
  8.  
  9. struct info_pessoal {
  10.  
  11.     char nome [100];
  12.     int dia_nasc;
  13.     int mes_nasc;
  14.     int ano_nasc;
  15.     int altura;
  16.     char olhos [100];
  17.     char cabelo [100];
  18. };
  19.  
  20. struct info_numer {
  21.  
  22.     int bi;
  23.     int contribuinte;
  24.     int seg_social;
  25.     int carta_cond;
  26.    
  27. };
  28.  
  29. struct morada {
  30.  
  31.     char rua [100];
  32.     int cod_postal1;
  33.     int cod_postal2;
  34.     char cod_postal3 [100];
  35. };
  36.  
  37. struct confid {
  38.  
  39.     char partido [100];
  40.     char clube [100];
  41. };
  42.  
  43. typedef struct cidadao {
  44.  
  45.     struct num_serv_sec nss;
  46.     struct info_pessoal infp;
  47.     struct info_numer infn;
  48.     struct morada address;
  49.     struct confid clubes;
  50.    
  51. } cidadao;
  52.  
  53.  
  54. int le_int (int *guarda, int min, int max) {
  55.    
  56.     int a;
  57.     scanf(" %d", &a);
  58.     if((a>=min) || (a<=max)) {
  59.         *guarda=a;
  60.     }
  61.  
  62. }
  63.  
  64. char le_char (char *guarda){
  65.    
  66.     //getchar();
  67.     gets(guarda);
  68.            
  69. }
  70.    
  71. int le_nss (struct num_serv_sec *nss) {
  72.        
  73.        
  74.         int max=999999;
  75.         int min=1;
  76.        
  77.         fflush(stdin);
  78.         printf("Introduza o numero de serie:\n");
  79.         le_int(&nss, min, max);
  80. }
  81.  
  82.  
  83. void le_info_pessoal(struct info_pessoal *infp) {
  84.    
  85.    
  86.     printf("Introduza o nome: \n");
  87.     getchar();
  88.     le_char(&(*infp).nome);
  89.    
  90.     printf("Introduza o dia de nascimento: \n");
  91.     le_int(&(*infp).dia_nasc,1,30);
  92.    
  93.     printf("Introduza o mes de nascimento: \n");
  94.     le_int(&(*infp).mes_nasc,1,12);
  95.    
  96.     printf("Introduza o ano de nascimento: \n");
  97.     le_int(&(*infp).ano_nasc, 1900, 2014);
  98.    
  99.     printf("Introduza a altura: \n");
  100.     le_int(&(*infp).altura, 30, 270);
  101.    
  102.     printf("Introduza a cor dos olhos: \n");
  103.     getchar();
  104.     le_char(&(*infp).olhos);
  105.    
  106.     printf("Introduza a cor do cabelo: \n");
  107.     le_char(&(*infp).cabelo);
  108.  
  109. }
  110.  
  111.  
  112. void le_info_numer ( struct info_numer *infn) {
  113.    
  114.     printf("Introduza o numero do BI: \n");
  115.     le_int(&(*infn).bi,1,999999);
  116.    
  117.     printf("Introduza o numero de contribuinte; \n");
  118.     le_int(&(*infn).contribuinte,1,999999);
  119.    
  120.     printf("Introduza o numero de Segurança Social: \n");
  121.     le_int(&(*infn).seg_social,1,999999);
  122.    
  123.     printf("Introduza o numero de Carta de Condução: \n");
  124.     le_int(&(*infn).carta_cond,1,999999);
  125. }
  126.  
  127. void le_morada( struct morada *address) {
  128.    
  129.     printf("Introduza o nome da rua: \n");
  130.     getchar();
  131.     le_char(&(*address).rua);
  132.    
  133.     printf("Introduza a primeira parte do codigo postal: \n");
  134.     le_int(&(*address).cod_postal1, 0, 9999);
  135.    
  136.     printf("Introduza a segunda parte do codigo postal: \n");
  137.     le_int(&(*address).cod_postal2, 0, 999);
  138.    
  139.     printf("Introduza a cidade: \n");
  140.     getchar();
  141.     le_char(&(*address).cod_postal3);
  142. }
  143.  
  144. void le_confid(struct confid *clubes) {
  145.    
  146.     printf("Que partido politico apoia: \n");
  147.     le_char(&(*clubes).partido);
  148.    
  149.     printf("Que clube apoia: \n");
  150.     le_char(&(*clubes).clube);
  151.    
  152. }
  153.  
  154. void le_cidadao(cidadao *apont){
  155.  
  156.     le_nss(&(*apont).nss);
  157.     le_info_pessoal(&(*apont).infp);
  158.     le_info_numer(&(*apont).infn);
  159.     le_morada(&(*apont).address);
  160.     le_confid(&(*apont).clubes);
  161.    
  162. }
  163.  
  164. void mostrar_num_serie (cidadao c, int i) {
  165.    
  166.         printf("Número de série do %d º cidadão: %d\n",i, c.nss.num_serie);
  167.  
  168. }
  169.  
  170. void mostrar_nss(cidadao c) {
  171.     printf("Numero de série: %d\n", c.nss.num_serie);
  172. }
  173.  
  174. void mostrar_infp (cidadao c) {
  175.    
  176.         printf("nome: %s\n", c.infp.nome);
  177.         printf("Dia de nascimento: %d\n", c.infp.dia_nasc);
  178.         printf("Mes de nascimento: %d\n", c.infp.mes_nasc);
  179.         printf("Ano de nascimento: %d\n", c.infp.ano_nasc);
  180.         printf("Altura: %d\n", c.infp.altura);
  181.         printf("Cor dos olhos: %s\n", c.infp.olhos);
  182.         printf("Cor do cabelo: %s\n", c.infp.cabelo);
  183.  
  184. }
  185.  
  186. void mostrar_infn (cidadao c) {
  187.    
  188.     printf("Número de B.I: %d\n", c.infn.bi);
  189.     printf("Número de contribuinte: %d\n", c.infn.contribuinte);
  190.     printf("Número de Seg.Social: %d\n", c.infn.seg_social);
  191.     printf("Número de Carta de condução: %d\n", c.infn.carta_cond);
  192.    
  193. }
  194.  
  195. void mostrar_morada(cidadao c) {
  196.    
  197.     printf("Rua: %s\n", c.address.rua);
  198.     printf("Código postal: %d-%d %s\n", c.address.cod_postal1, c.address.cod_postal2, c.address.cod_postal3);
  199. }
  200.  
  201. void mostrar_confid(cidadao c) {
  202.    
  203.     printf("Partido: %s\n", c.clubes.partido);
  204.     printf("Clube: %s\n\n", c.clubes.clube);
  205. }
  206.  
  207. void mostrar_cidadao(cidadao c){
  208.    
  209.     mostrar_nss(c);
  210.     mostrar_infp(c);
  211.     mostrar_infn(c);
  212.     mostrar_morada(c);
  213.     mostrar_confid(c);
  214.    
  215. }
  216.  
  217. void limpa_serv_sec(struct num_serv_sec *nss){
  218.    
  219.     nss->num_serie=0;
  220.    
  221. }
  222.  
  223. void limpa_infp(struct info_pessoal *infp) {
  224.    
  225.     infp->nome[0]=NULL;
  226.     infp->dia_nasc=0;
  227.     infp->mes_nasc=0;
  228.     infp->ano_nasc=0;
  229.     infp->altura=0;
  230.     infp->olhos[0]=NULL;
  231.     infp->cabelo[0]=NULL;
  232.    
  233. }
  234.  
  235. void limpa_infn(struct info_numer *infn){
  236.     infn->bi=0;
  237.     infn->contribuinte=0;
  238.     infn->seg_social=0;
  239.     infn->carta_cond=0;
  240. }
  241.  
  242. void limpa_morada (struct morada *address) {
  243.     address->rua[0]=NULL;
  244.     address->cod_postal1=0;
  245.     address->cod_postal2=0;
  246.     address->cod_postal3[0]=NULL;
  247. }
  248.  
  249. void limpa_confid(struct confid *clubes){
  250.     clubes->partido[0]=NULL;
  251.     clubes->clube[0]=NULL;
  252. }
  253.  
  254. void limpa_cidadao(cidadao *apont){
  255.     limpa_serv_sec(&(*apont).nss);
  256.     limpa_infp(&(*apont).infp);
  257.     limpa_infn(&(*apont).infn);
  258.     limpa_morada(&(*apont).address);
  259.     limpa_confid(&(*apont).clubes);
  260. }
  261.  
  262. void ler_ficheiro(cidadao *apont) {
  263.    
  264.     FILE *ptr_f;
  265.     char cobaia[30]="cobaia.txt";
  266.  
  267.         ptr_f=fopen(cobaia,"r");
  268.  
  269.     while(!feof(ptr_f)) {
  270.         fscanf(ptr_f,"%d\n", (&(*apont).nss.num_serie));
  271.         fgets((*apont).infp.nome,100, ptr_f);
  272.         fscanf(ptr_f,"%d\n", (&(*apont).infp.dia_nasc));
  273.         fscanf(ptr_f,"%d\n", (&(*apont).infp.mes_nasc));
  274.         fscanf(ptr_f,"%d\n", (&(*apont).infp.ano_nasc));
  275.         fscanf(ptr_f,"%d\n", (&(*apont).infp.altura));
  276.         fgets((*apont).infp.olhos,100, ptr_f);
  277.         fgets((*apont).infp.cabelo,100, ptr_f);
  278.         fscanf(ptr_f,"%d\n", (&(*apont).infn.bi));
  279.         fscanf(ptr_f,"%d\n", (&(*apont).infn.contribuinte));
  280.         fscanf(ptr_f,"%d\n", (&(*apont).infn.seg_social));
  281.         fscanf(ptr_f,"%d\n", (&(*apont).infn.carta_cond));
  282.         fgets((*apont).address.rua,100, ptr_f);
  283.         fscanf(ptr_f,"%d\n", (&(*apont).address.cod_postal1));
  284.         fscanf(ptr_f,"%d\n", (&(*apont).address.cod_postal2));
  285.         fgets((*apont).address.cod_postal3,100, ptr_f);
  286.         fgets((*apont).clubes.partido,100, ptr_f);
  287.         //fgets((*apont).clubes.clube,100, ptr_f);
  288.         fscanf(ptr_f,"%[^\n]", (&(*apont).clubes.clube));
  289.         apont++;
  290.        
  291.     }
  292.     fclose(ptr_f);
  293. }
  294.  
  295. void escrever_ficheiro(cidadao *apont) {
  296.    
  297.     FILE *ptr_f;
  298.     int i;
  299.     char cobaia[30]="teste.txt";
  300.  
  301.         ptr_f=fopen(cobaia,"w+");
  302.  
  303.     for(i=0;i<=20;i++) {
  304.         fprintf(ptr_f,"%d\n",(*apont).nss.num_serie);
  305.         fputs((*apont).infp.nome, ptr_f);
  306.         fprintf(ptr_f,"%d\n",(*apont).infp.dia_nasc);
  307.         fprintf(ptr_f,"%d\n", (*apont).infp.mes_nasc);
  308.         fprintf(ptr_f,"%d\n", (*apont).infp.ano_nasc);
  309.         fprintf(ptr_f,"%d\n", (*apont).infp.altura);
  310.         fputs((*apont).infp.olhos,ptr_f);
  311.         fputs((*apont).infp.cabelo,ptr_f);
  312.         fprintf(ptr_f,"%d\n", (*apont).infn.bi);
  313.         fprintf(ptr_f,"%d\n", (*apont).infn.contribuinte);
  314.         fprintf(ptr_f,"%d\n", (*apont).infn.seg_social);
  315.         fprintf(ptr_f,"%d\n", (*apont).infn.carta_cond);
  316.         fputs((*apont).address.rua,ptr_f);
  317.         fprintf(ptr_f,"%d\n", (*apont).address.cod_postal1);
  318.         fprintf(ptr_f,"%d\n", (*apont).address.cod_postal2);
  319.         fputs((*apont).address.cod_postal3,ptr_f);
  320.         fputs((*apont).clubes.partido,ptr_f);
  321.         fputs((*apont).clubes.clube, ptr_f);
  322.         apont++;
  323.        
  324.     }
  325.     fclose(ptr_f);
  326. }
  327.  
  328.  
  329.  
  330. void main() {
  331.    
  332.     char escolha, a='n';
  333.     int i;
  334.     cidadao basededados[20];
  335.    
  336.     do {
  337.        
  338.         printf("*************PROGRAMA SIRP - Registo dos cidadãos ***********\n\n");
  339.         printf("SEMPRE QUE INTRODUZIR UMA FRASE, COMECE COM UM ESPAÇO\n");
  340.         printf("a – Mostrar os número de série de todos os elementos da base de dados\n");
  341.         printf("b – Mostrar toda a informação do cidadão com um certo número (a pedir)\n");
  342.         printf("c – Modificar a informação do cidadão com um certo número (a pedir)\n");
  343.         printf("d – Criar um novo registo para um novo cidadão\n");
  344.         printf("e – Apagar o registo com um certo número (a pedir)\n");
  345.         printf("f – Ler a base de dados de um ficheiro em modo binário (nome a pedir)\n");
  346.         printf("g - Ler a base de dados de um ficheiro em modo de texto (nome a pedir)\n");
  347.         printf("h – Escrever a base de dados num ficheiro em modo binário (nome a pedir)\n");
  348.         printf("i - Escrever a base de dados num ficheiro em modo de text (nome a pedir)\n\n");
  349.         printf("s – Sair do programa\n\n");
  350.         printf("Que deseja fazer?\n");
  351.         scanf(" %c", &escolha);
  352.    
  353.         switch(escolha){
  354.             case 'a':
  355.             case 'A': for(i=0; i<20; i++)
  356.                         mostrar_num_serie(basededados[i], i);
  357.                       break;
  358.                      
  359.             case 'b':
  360.             case 'B': printf("Qual é o numero do cidadão que quer ver: \n");
  361.                       scanf("%d", &i);
  362.                       mostrar_cidadao(basededados[i]);
  363.                       break;
  364.                      
  365.             case 'c':
  366.             case 'C': printf("Qual é o numero do cidadão que quer modificar: \n");
  367.                       scanf("%d", &i);
  368.                       mostrar_cidadao(basededados[i]);
  369.                       printf("Altere o que necessite, copie o que deseje que permaneça igual\n");
  370.                       le_cidadao(&basededados[i]);
  371.                       break;
  372.                      
  373.             case 'd':
  374.             case 'D': printf("Comece no 1; Posição do novo cidadao: \n");
  375.                       scanf("%d", &i);
  376.                  
  377.                       if((i=0) || (i<20)){
  378.                         le_cidadao(&basededados[i]);
  379.                       }
  380.                       break;
  381.             case 'e':
  382.             case 'E': printf("Qual cidadao deseja erradicar?\n");
  383.                       scanf("%d",&i);
  384.                       limpa_cidadao(&basededados[i]);
  385.                       break;
  386.             case 'g':
  387.             case 'G': ler_ficheiro(basededados);
  388.             case 'i':
  389.             case 'I': escrever_ficheiro(basededados);
  390.             case 's':
  391.             case 'S': break;
  392.             }
  393.  
  394.         printf("Quer continuar(s-sim, n-nao)?\n");
  395.         scanf(" %c", &a);  
  396.         }
  397.         while(a!='n');
  398. }
Advertisement
Add Comment
Please, Sign In to add comment