Advertisement
k_vychodilova

Telefon_seznam

Feb 25th, 2017
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define VELIKOST 8000000
  5. #define MAX_POCET_LIDI 7
  6.  
  7. typedef struct {
  8.     int id;
  9.     char jmeno[64], prijmeni[64], adresa[256], telefon[32];
  10. } tClovek;
  11.  
  12. enum {
  13.     ID, JMENO, PRIJMENI, ADRESA, TELEFON
  14. } radimeDle = TELEFON;
  15.  
  16. int porovnejPolozky(const void *p1, const void *p2) {
  17.     const tClovek * c1 = p1, *c2 = p2;
  18.     switch (radimeDle) {
  19.     case ID:
  20.         return c1->id - c2->id;
  21.         break;
  22.     case JMENO:
  23.         return strcmp(c1->jmeno, c2->jmeno);
  24.         break;
  25.     case PRIJMENI:
  26.         return strcmp(c1->prijmeni, c2->prijmeni);
  27.         break;
  28.     case ADRESA:
  29.         return strcmp(c1->adresa, c2->adresa);
  30.         break;
  31.     case TELEFON:
  32.         return strcmp(c1->telefon, c2->telefon);
  33.         break;
  34.     }
  35.     return 0;
  36. }
  37.  
  38. int main(int argc, char *argv[]) {
  39. /*  tClovek pole[] = {      // priklad pole - tohle neopisujte!!!
  40.             { 0, "Frantisek", "Dobrota", "Blizka 23, 11100 Praha", "777666555444" },
  41.             { 1, "Anna", "Peprna", "Daleka 1, Plzen", "606055444" },
  42.             { 2, "Viliam", "Razny", "Hluboka 3", "257000111" },
  43.             { 3, "Zdenek", "Pomaly", "Krizova 5", "800333444" },
  44.             { 4, "Rene", "Drobny", "Vysehradska 3", "774888999" },
  45.             { 5, "Brona","Chalupova", "Mladcova 4", "356222333" },
  46.             { 6, "Cyril", "Metodej", "U Zahradek 123", "456321000" }
  47.     };*/
  48.     //ziskat data ze souboru do pole stuktur
  49.  
  50.     tClovek pole[MAX_POCET_LIDI];
  51.     FILE *seznam= fopen("Dokument.txt","r");
  52.     int pomocna= 0;
  53.     int id;
  54.     char jmeno[64];
  55.     char prijmeni[64];
  56.     char adresa[256];
  57.     char telefon[32];
  58.     int pocet_lidi=0;
  59.     char pom[256];
  60.     while (fgets(pom, 256, seznam) != NULL)
  61.     {
  62.  
  63.         pomocna=sscanf(pom,"%d,%[^,],%[^,],%[^,],%[^,]", &id, jmeno,prijmeni,adresa,telefon);
  64.         if(pomocna==5)
  65.         {
  66.             strcpy(pole[pocet_lidi].adresa,adresa);
  67.             strcpy(pole[pocet_lidi].jmeno,jmeno);
  68.             strcpy(pole[pocet_lidi].prijmeni,prijmeni);
  69.             strcpy(pole[pocet_lidi].telefon,telefon);
  70.             pole[pocet_lidi].id=id;
  71.             pocet_lidi++;
  72.         }
  73.     }
  74.  
  75.     if (argc>1)     //zpracujeme parametr prikazove radky
  76.         switch (argv[1][0]) {
  77.             case 'i': radimeDle = ID; break;
  78.             case 'j': radimeDle = JMENO; break;
  79.             case 'p': radimeDle = PRIJMENI; break;
  80.             case 'a': radimeDle = ADRESA; break;
  81.             case 't': radimeDle = TELEFON; break;
  82.             default:
  83.                 printf("1. parametr prikazoveho je pismeno, ktere urcuje, podle ceho budeme radit\n"
  84.                         "i: dle ID, j: dle jmena, p: prijemni, a: adresy, t: telefonu\n");
  85.         }
  86.  
  87.     qsort(pole, sizeof(pole)/sizeof(tClovek), sizeof(tClovek), porovnejPolozky); // razeni: qsort
  88.  
  89.     for (int i=0; i < pocet_lidi; i++)  // vypis vysledku
  90.         printf("%d; %s; %s; %s; %s\n", pole[i].id, pole[i].jmeno, pole[i].prijmeni, pole[i].adresa, pole[i].telefon);
  91.     exit(EXIT_SUCCESS);
  92.     getchar();
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement