gigba

citizen

Jan 6th, 2018
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.51 KB | None | 0 0
  1. /*
  2. scrivere un prohramma che crei un record cittadino con i seguenti campi:
  3. Nome, Cognome, Paese, Eta, Sesso;
  4.  
  5. I campi cognome nome e paese verranno inseriti dall'utente come il numero di
  6. cittadini da inserire.
  7.  
  8. i campi eta e sesso verranno insriti arbitrariamente;
  9.  
  10. Scrivere una funzione che permetta di aggiornare i campi di un record cittadino
  11. a partire da una input preso arbitrariamente da un array di stringhe contenenti
  12.  il campo nome cognome ed paese per il record da aggiornare.
  13.  
  14.  Dopo l'eventuale aggiornamento inserire il recordnelf ile denominato citt.txt
  15.  apreire e leggere questo file prelevando le righe dei maschi e copiarle in file
  16.  creato per il caso a contenere i record dei maschi maschi.txt ugualmente fare
  17.  con le donne.
  18.  
  19. */
  20.  
  21. /*HEADER*/
  22. #include <stdio.h>
  23. #include <string.h>
  24. #include <stdlib.h>
  25. #define NAMEFILE "output.txt"
  26. #define OUT_MAN_TXT "out_man.txt"
  27. #define OUT_GIRL_TXT "out_girl.txt"
  28. #define INPUTSIZE 4
  29.  
  30. /*TYPE DEFINITION*/
  31. typedef struct citizen{
  32.     char name[25];
  33.     char surname[25];
  34.     char country[25];
  35.     int  eta;
  36.     short int sesso;
  37. }citizen;
  38.  
  39.  
  40. /*PROTOTYPE*/
  41. int prepare_citizen();
  42. void  insert_citizen(citizen *,int);
  43. void update(citizen *,char **);
  44. void check_input(int);
  45. void check_file(FILE *,char*);
  46. void fill_file(FILE *,citizen *,int);
  47. void write_file_man_and_girl(FILE *, FILE *, FILE *);
  48.  
  49.  
  50.  
  51. /*BODY/MAIN PROGRAM*/
  52. int main( int argc,char *argv[]){
  53. citizen *cit;
  54. int num_cit;
  55. FILE *output, *out_man, *out_girl;
  56. char *data[]={"Michele","Nappi","Livorno"};
  57.     num_cit = prepare_citizen();
  58.     cit = calloc(num_cit, sizeof(citizen));
  59.     insert_citizen(cit,num_cit);
  60.     update(cit,data);
  61.     output = fopen(NAMEFILE,"w");
  62.     check_file(output,NAMEFILE);
  63.     check_input(INPUTSIZE);
  64.     fill_file(output,cit,num_cit);
  65.  
  66.     /*Inizio scrittura di due file uno per contenere i cittadini
  67.      uomo e l'altro per le cittadine donne i dati saranno prelevati
  68.      dal file misto output scritto in precedenza */
  69.  
  70.     output = fopen(NAMEFILE,"r");
  71.     check_file(output,NAMEFILE);
  72.  
  73.     out_man = fopen(OUT_MAN_TXT,"w");
  74.     check_file(out_man,OUT_MAN_TXT);
  75.     out_girl = fopen(OUT_GIRL_TXT,"w");
  76.     check_file(out_girl,OUT_GIRL_TXT);
  77.     write_file_man_and_girl(output,out_man,out_girl);
  78. }
  79.  
  80.  
  81.  
  82. /*FUNCTION DECLARETION*/
  83. int prepare_citizen(){
  84. int num_cit;
  85. printf("How many citizens do you want insert?\t");
  86. scanf("%d",&num_cit);
  87. return num_cit;
  88. }
  89.  
  90.  
  91. void  insert_citizen(citizen *c,int s){
  92.     int i;
  93.     for(i=0;i<s;i++){
  94.         printf("\nInsert name: ");
  95.         scanf("%s",(c+i)->name);
  96.         printf("\nInsert Surname: ");
  97.         scanf("%s",(c+i)->surname);
  98.         printf("\nInsert Country: ");
  99.         scanf("%s",(c+i)->country);
  100.         srand(time(NULL));
  101.         (c+i)->sesso = rand()%2;
  102.         (c+i)->eta = rand()%100;
  103.     }
  104.  
  105.  
  106. }
  107.  
  108.  
  109. void update(citizen *c,char **data){
  110.     int id_record;
  111.     printf("quale reord vuoi aggiornare?\n");
  112.     printf("scegli 1 o 2 per aggiornare i rispettivi record");
  113.     scanf("%d",&id_record);
  114.     strcpy((c+id_record-1)->name,data[0]);
  115.     strcpy((c+id_record-1)->surname,data[1]);
  116.     strcpy((c+id_record-1)->country,data[2]);
  117.     srand(time(NULL));
  118.     (c+id_record-1)->eta=rand()%100;
  119.     (c+id_record-1)->sesso=rand()%2;
  120. }
  121.  
  122. void check_file(FILE *f,char *name_file){
  123. if(f==NULL){
  124.     printf("Sorry, this is embarassing, \n"
  125.            "we will work immediately for solve the issue\n"),
  126.     exit(EXIT_FAILURE);
  127. }
  128. printf("Congrats, the file %s is opened successfully\n",name_file);
  129. }
  130.  
  131.  
  132. void check_input(int input_size){
  133.  
  134. if(input_size!=4){
  135.     printf("Ops, something is gone wrong,there is a \n"
  136.            "mismatch when you have typed the command");
  137.     exit(EXIT_FAILURE);
  138. }
  139. printf("Congrats, The right command is typed.");
  140. }
  141. void fill_file(FILE *f, citizen *cit,int num_cit){
  142. int i = 0;
  143. while(i<num_cit){
  144.     fprintf(f,"%d\t%s\t%s\t%s\t%d\n",
  145.             (cit+i)->sesso,
  146.             (cit+i)->name,
  147.             (cit+i)->surname,
  148.             (cit+i)->country,
  149.             (cit+i)->eta);
  150.     i++;
  151. }
  152. rewind(f);
  153. fclose(f);
  154.  
  155. }
  156. void write_file_man_and_girl(FILE *f_source, FILE *f_dest_man, FILE *f_dest_girl){
  157.     int sex, age;
  158.     char name[25], surname[25], city[25];
  159.     while(fscanf(f_source,"%d%s%s%s%d",&sex,name,surname,city, &age)!=EOF){
  160.         if(sex==0)
  161.             fprintf(f_dest_man,"%d\t%s\t%s\t%s\t%d\n",sex,name,surname,city, age);
  162.         else
  163.             fprintf(f_dest_girl,"%d\t%s\t%s\t%s\t%d\n",sex,name,surname,city, age);
  164.  
  165.     }
  166.  
  167. }
Add Comment
Please, Sign In to add comment