Advertisement
mino2580

task4_telefonny_seznam

Apr 19th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.56 KB | None | 0 0
  1. // Private includes
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. // Private typedef
  7. typedef struct {
  8. int id;
  9. char jmeno[64], prijmeni[64], adresa[256], telefon[32];
  10. } tClovek;
  11.  
  12.  
  13. /////////////jak to funguje.?
  14. static enum SORT {
  15. ID, JMENO, PRIJMENI, ADRESA, TELEFON
  16. } radimeDle = TELEFON;
  17.  
  18. // Private function prototypes
  19. static int handleCommandLineArguments( int argc, char** argv, enum SORT *sortType, char *path );
  20. static int compareItems( const void *p1, const void *p2 );
  21.  
  22. // Private functions
  23.  
  24. int main( int argc, char *argv[] )
  25. {
  26.  
  27. //praca na cviceni
  28. tClovek pole[256]= {
  29.  
  30. {1,"franta","spacek","nad stranemi","1234"},
  31. {2,"frant ","bednarovae ","nad stranem ","123"},
  32. {3,"fran ","adolf","nad strane ","12 "},
  33. {4,"fra ","jiri ","nad stran ","1 "},
  34.  
  35. };
  36. char filePath[256];
  37.  
  38. //zpracujeme parametr prikazove radky
  39. if( handleCommandLineArguments( argc, argv, &radimeDle, filePath ) == 0 ) {
  40. fprintf( stderr, "Nespravne zadane argumenty." );
  41. return 0;
  42. }
  43. /////////////jak to funguje.?
  44. FILE *inputFile = fopen( filePath, "r" );
  45.  
  46.  
  47.  
  48.  
  49. // praca na cviceni
  50. if( inputFile == NULL ) {
  51. fprintf( stderr, "Soubor \"%s\"se nepodařilo otevřít.", filePath );
  52. }
  53. int r=0;//cislo radku
  54. char radek[256];
  55. while(fgets(radek,256,inputFile)!=NULL) {
  56. //puts(radek);
  57.  
  58. if(sscanf(radek,"%[^;];%[^;];%[^;];%[^;];",
  59. pole[r].jmeno,pole[r].prijmeni,pole[r].adresa,
  60. pole[r].telefon) ==4 )
  61. r++;
  62.  
  63. else {
  64. fprintf(stderr,"eror,radek ve spatnem formatu %s\n",radek);
  65. }
  66.  
  67. }
  68.  
  69.  
  70.  
  71. //praca na cviceni
  72. // razeni: qsort
  73. qsort( pole, r,/*sizeof( pole ) / sizeof( tClovek ),*/ sizeof( tClovek ), compareItems );
  74.  
  75. // vypis vysledku
  76. for( int i = 0; i < r/*sizeof( pole ) / sizeof( tClovek )*/; i++ ) {
  77. printf( "%d; %s; %s; %s; %s\n", pole[i].id, pole[i].jmeno, pole[i].prijmeni, pole[i].adresa, pole[i].telefon );
  78. }
  79.  
  80. return 0;
  81. }
  82.  
  83. /**
  84. * @brief Try to parse given commandline arguments
  85. * @param[in] argc Count of arguments
  86. * @param[in] argv Arguments
  87. * @param[out] sortType Pointer to enum SORT to return type of sort
  88. * @param[out] path Pointer to char to store filepath
  89. * @return Returns 0 of argument count is not 5 and all required arguments are present. Otherwise return 1;
  90. */
  91. int handleCommandLineArguments( int argc, char** argv, enum SORT *sortType, char *path )
  92. {
  93. // parse seed and file path from cmd line
  94. if( argc == 5 ) {
  95. int correct = 0;
  96.  
  97. for( int i = 1; i < 5; i += 2 ) {
  98. if( strcmp( argv[i], "-type" ) == 0 ) {
  99. switch( argv[i + 1][0] ) {
  100. case 'i':
  101. *sortType = ID;
  102. break;
  103.  
  104. case 'j':
  105. *sortType = JMENO;
  106. break;
  107.  
  108. case 'p':
  109. *sortType = PRIJMENI;
  110. break;
  111.  
  112. case 'a':
  113. *sortType = ADRESA;
  114. break;
  115.  
  116. case 't':
  117. *sortType = TELEFON;
  118. break;
  119.  
  120. default:
  121. printf( "1. parametr prikazoveho je pismeno, ktere urcuje, podle ceho budeme radit\n"
  122. "i: dle ID, j: dle jmena, p: prijemni, a: adresy, t: telefonu\n" );
  123. *sortType = TELEFON;
  124. }
  125.  
  126. correct++;
  127. continue;
  128. }
  129.  
  130. if( strcmp( argv[i], "-file" ) == 0 ) {
  131. strcpy( path, argv[i + 1] );
  132. correct++;
  133. }
  134. }
  135.  
  136. if( correct == 2 ) {
  137. return 1;
  138. }
  139. }
  140.  
  141. return 0;
  142. }
  143.  
  144. /**
  145. * @brief Function to compare two items
  146. * @param[in] p1
  147. * @param[in] p2
  148. * @return Return 0 of items are equal, >0 when first item is bigger, 0< when first item is smaller
  149. */
  150. int compareItems( const void *p1, const void *p2 )
  151. {
  152. const tClovek * c1 = p1, *c2 = p2;
  153.  
  154. switch( radimeDle ) {
  155. case ID:
  156. return c1->id - c2->id;
  157.  
  158. case JMENO:
  159. return strcmp( c1->jmeno, c2->jmeno );
  160.  
  161. case PRIJMENI:
  162. return strcmp( c1->prijmeni, c2->prijmeni );
  163.  
  164. case ADRESA:
  165. return strcmp( c1->adresa, c2->adresa );
  166.  
  167. case TELEFON:
  168. return strcmp( c1->telefon, c2->telefon );
  169. }
  170.  
  171. return 0;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement