×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: C
Posted by: Damian Pytkowski
Added: May 2, 2016 8:50 PM
Modified: May 14, 2016 11:12 AM
Views: 17
Baza pacjentow - nadpisywanie pliku, sprawdzanie duplikatu, wyszukiwanie
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <string.h>
  5. #define LICZBA 10
  6.  
  7. typedef struct{
  8.     char nazwisko[32];
  9.     char plec;
  10.     char pesel[12];
  11.     int nr_choroby;
  12. }pacjent;
  13.  
  14. void losujChorobe(pacjent *s);
  15. void dopiszPacjenta(pacjent *s);
  16. void nadpiszPlik(char *gdzie, pacjent *s);
  17. int czyDuplikat(char *gdzie,char pesel[], pacjent s);
  18. void szukajNazwiska(char *gdzie, pacjent s);
  19. void main()
  20. {
  21.     pacjent osoba;
  22.     char wybor=1;
  23.     printf("1) Zapisz pacjenta \n2) Szukaj pacjenta\n0) Wyjdz\n ");
  24.     while(wybor){
  25.         printf("\nWybierz operacje: ");fflush(stdin);
  26.         scanf("%c",&wybor);
  27.         switch(wybor){
  28.             case 48: exit(1);
  29.             case 49:
  30.             dopiszPacjenta(&osoba);
  31.             if(czyDuplikat("pacjenci.txt",osoba.pesel,osoba)) printf("Wykryto duplikat.");
  32.             else
  33.                 nadpiszPlik("pacjenci.txt",&osoba);
  34.             break;
  35.             case 50: szukajNazwiska("pacjenci.txt",osoba);break;
  36.             default: printf("Wybrano niepoprawna operacje.\n\n");break;
  37.         }
  38.     }
  39. }
  40. void losujChorobe(pacjent *s)
  41. {
  42.     srand(time(NULL));
  43.     s->nr_choroby = rand()%1000+500;
  44. }
  45. void dopiszPacjenta(pacjent *s)
  46. {
  47.     printf("Podaj nazwisko: ");fflush(stdin);
  48.     gets(s->nazwisko);
  49.     printf("Podaj plec(M/D): ");fflush(stdin);
  50.     s->plec = getc(stdin);
  51.     printf("Podaj pesel: ");fflush(stdin);
  52.     gets(s->pesel);
  53.     losujChorobe(s);
  54. }
  55. void nadpiszPlik(char *gdzie, pacjent *s)
  56. {
  57.     FILE *fw;
  58.     if((fw=fopen(gdzie,"a"))==NULL) printf("Blad zapisu.");
  59.  
  60.     fprintf(fw,"%s\t\t %c\t %12s %8d\n",s->nazwisko,s->plec,s->pesel,s->nr_choroby);
  61.     printf("Zapisywanie zakonczone.\n");
  62.     fclose(fw);
  63. }
  64. int czyDuplikat(char *gdzie,char pesel[], pacjent s)
  65. {
  66.     FILE *fr;
  67.     int i,j=0,flaga=0;
  68.     if((fr=fopen(gdzie,"r"))==NULL) printf("Blad odczytu.");
  69.  
  70.     while(!feof(fr)){
  71.         fscanf(fr,"%s\t %c\t %14s %8d\n",s.nazwisko,&s.plec,s.pesel,&s.nr_choroby);
  72.         for(i=0;i<11;i++)
  73.             if(s.pesel[i]==pesel[i])j++;
  74.         if(j==11){flaga=1; break;}
  75.         j=0;
  76.     }
  77.     fclose(fr);
  78.     return flaga;
  79. }
  80. void szukajNazwiska(char *gdzie, pacjent s)
  81. {
  82.     FILE *fr;
  83.     int i,j=0;
  84.     char nazwisko[32];
  85.     if((fr=fopen(gdzie,"r"))==NULL) printf("Blad odczytu.");
  86.  
  87.     printf("Podaj szukane nazwisko: ");fflush(stdin);
  88.     gets(nazwisko);
  89.     while(!feof(fr)){
  90.         fscanf(fr,"%s\t %c\t %14s %8d\n",s.nazwisko,&s.plec,s.pesel,&s.nr_choroby);
  91.         i=0;
  92.         while(nazwisko[i++])
  93.             if(s.nazwisko[i]==nazwisko[i])j++;
  94.         if(j==i-1){
  95.                 printf("%s\t\t %c\t %12s %8d\n",s.nazwisko,s.plec,s.pesel,s.nr_choroby);
  96.                 return;
  97.         }
  98.         j=0;
  99.     }
  100.     printf("Nic nie znaleziono");
  101. }
  102.