jazykc  2013.3
upoljazykc
 All Classes Files Functions Variables Typedefs Macros Pages
t19u2.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <time.h>
5 #include <stdarg.h>
6 
7 #define MAX_ROK 2010
8 #define MIN_ROK 1950
9 #define POCET_STAVU 4
10 #define DELKA 20
11 
12 const int jmena_m_pocet = 10;
13 const int jmena_z_pocet = 10;
14 const int prijmeni_m_pocet = 10;
15 const int prijmeni_z_pocet = 10;
16 const char *jmena_m[] =
17  { "Jakub", "Jan", "Tomas", "Lukas", "Ondrej", "Vojtech", "Matej", "Adam", "Daniel", "Filip" };
18 const char *jmena_z[] =
19  { "Tereza", "Natalie", "Anna", "Adela", "Eliska", "Karolina", "Katerina", "Barbora", "Lucie",
20 "Kristyna" };
21 const char *prijmeni_m[] =
22  { "Novak", "Svoboda", "Novotny", "Dvorak", "Cerny", "Prochazka", "Kucera", "Vesely", "Horak",
23 "Nemec" };
24 const char *prijmeni_z[] =
25  { "Novakova", "Svobodova", "Novotna", "Dvorakova", "Cerna", "Prochazkova", "Kucerova", "Vesela",
26 "Horakova", "Nemcova" };
27 
28 typedef enum {
29  MUZ = 'M', ZENA = 'Z'
30 } POHLAVI;
31 
32 typedef enum {
33  SVOBODNY = 'S', ZENATY = 'Z', ROZVEDENY = 'R', VDOVEC = 'V'
34 } STAV;
35 
36 typedef struct {
37  char den;
38  char mesic;
39  int rok;
40 } datum;
41 
42 typedef struct {
43  char jmeno[DELKA];
44  char prijmeni[DELKA];
45  datum narozen;
46  POHLAVI pohlavi;
47  STAV stav;
48 } osoba;
49 
50 int je_prestupny(unsigned int rok);
51 unsigned int pocet_dnu(unsigned int mesic);
52 datum generuj_datum(int rok_od, int rok_do);
53 int generator(char *soubor, int pocet);
54 int vyhledej(char *soubor, char *kriteria, ...);
55 void vypis(osoba o);
56 
57 int main()
58 {
59  /* vygenerovani binarni databaze */
60  generator("databaze.dat", 1000);
61 
62  /* vyhledavani v databazi */
63  vyhledej("databaze.dat", "P", ZENA);
64  printf("\n");
65  vyhledej("databaze.dat", "jps", "Anna", "Novotna", VDOVEC);
66 
67  return 0;
68 }
69 
70 int je_prestupny(unsigned int rok)
71 {
72  if (rok % 100 == 0)
73  return (rok % 400 == 0);
74  else
75  return (rok % 4 == 0);
76 }
77 
78 unsigned int pocet_dnu(unsigned int mesic)
79 {
80  const static int pocet[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
81  if (mesic <= 12)
82  return pocet[mesic - 1];
83  else
84  return 0;
85 }
86 
87 datum generuj_datum(int rok_od, int rok_do)
88 {
89  char den;
90  char mesic;
91  int rok;
92  char max_den;
93  datum d;
94 
95  rok = (rand() % (rok_do - rok_od + 1)) + rok_od;
96  mesic = (rand() % 12) + 1;
97  max_den = pocet_dnu(mesic);
98  if ((mesic == 2) && (je_prestupny(rok)))
99  max_den++;
100  den = (rand() % max_den) + 1;
101 
102  d.den = den;
103  d.mesic = mesic;
104  d.rok = rok;
105  return d;
106 }
107 
108 int generator(char *soubor, int pocet)
109 {
110  int i;
111  size_t zapsano;
112  FILE *fw;
113 
114  /* otevreni souboru */
115  fw = fopen(soubor, "wb");
116  if (fw == NULL) {
117  printf("Chyba: Vystupni soubor nebyl vytvoren. \n");
118  return 1;
119  }
120 
121  /* generovani udaju a zapis do souboru */
122  srand((unsigned) time(NULL));
123  for (i = 0; i < pocet; i++) {
124  osoba o;
125  char stav_cislo;
126 
127  o.pohlavi = (rand() % 2) ? MUZ : ZENA;
128  if (o.pohlavi == MUZ) {
129  strcpy(o.jmeno, jmena_m[rand() % jmena_m_pocet]);
130  strcpy(o.prijmeni, prijmeni_m[rand() % prijmeni_m_pocet]);
131  } else {
132  strcpy(o.jmeno, jmena_z[rand() % jmena_z_pocet]);
133  strcpy(o.prijmeni, prijmeni_z[rand() % prijmeni_z_pocet]);
134  }
135  o.narozen = generuj_datum(MIN_ROK, MAX_ROK);
136  stav_cislo = rand() % POCET_STAVU;
137  switch (stav_cislo) {
138  case 0:
139  o.stav = SVOBODNY;
140  break;
141  case 1:
142  o.stav = ZENATY;
143  break;
144  case 2:
145  o.stav = ROZVEDENY;
146  break;
147  case 3:
148  o.stav = VDOVEC;
149  break;
150  }
151 
152  /* zapis a test */
153  zapsano = fwrite(&o, sizeof(osoba), 1, fw);
154  if (zapsano != 1) {
155  fclose(fw);
156  return 2;
157  }
158  }
159  /* uzavreni souboru a test */
160  if (fclose(fw) == EOF) {
161  printf("Chyba: Vystupni soubor nebyl uzavren. \n");
162  return 3;
163  }
164 
165  return 0;
166 }
167 
168 int vyhledej(char *soubor, char *kriteria, ...)
169 {
170  /* DOPLNTE */
171 }
172 
173 void vypis(osoba o)
174 {
175  static char *stavy[] =
176  { "svobodny", "svobodna", "zenaty", "vdana", "rozvedeny", "rozvedena", "vdovec", "vdova" };
177  int stavy_index;
178 
179  printf("%s %s ", o.jmeno, o.prijmeni);
180 
181  if (o.pohlavi == MUZ)
182  printf("narozen ");
183  else
184  printf("narozena ");
185 
186  printf("%i. %i. %i", o.narozen.den, o.narozen.mesic, o.narozen.rok);
187 
188  switch (o.stav) {
189  case SVOBODNY:
190  stavy_index = 0;
191  break;
192  case ZENATY:
193  stavy_index = 2;
194  break;
195  case ROZVEDENY:
196  stavy_index = 4;
197  break;
198  case VDOVEC:
199  stavy_index = 6;
200  break;
201  }
202  stavy_index += (o.pohlavi == MUZ) ? 0 : 1;
203  printf(", %s\n", stavy[stavy_index]);
204 
205 }
Definition: t19u2.c:42
Definition: t19u2.c:36