Advertisement
weeez

Oprendszerek beadando 1# (finished)

Oct 23rd, 2015
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.07 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fcntl.h> // for open()
  4. #include <errno.h> // for perror()
  5. #include <sys/types.h>
  6. #include <sys/stat.h>
  7. #include <string.h> //for strcpy()
  8. #include <unistd.h> //for file write()
  9. #include <time.h>
  10.  
  11. struct Kivansag {
  12.   char date[100];
  13.   char name[100];
  14.   char city[100];
  15.   char address[100];
  16.   char gift[100];
  17. };
  18.  
  19. const char *FILE_NAME = "kivansagok.scv";
  20. int list_size = 0;
  21. struct Kivansag gifts[1000];  
  22.  
  23. void cutEnter(char string[100]);
  24. int isCorrect(char *answer);
  25. struct Kivansag rowToKivansag(char row[1000]);
  26. char* kivansagToRow(struct Kivansag kivansag);
  27. void case1();
  28. void case2();
  29. void case3();
  30. void case4();
  31. char *swapSpace(char *row);
  32. void mainMenu();
  33.  
  34. int main(){ //23
  35.    
  36.   FILE *fileContents;
  37.  
  38.  
  39.     if((fileContents= fopen(FILE_NAME, "rb")) == NULL){
  40.         if(errno == ENOENT){//if "kivansagok" file doesn't exists
  41.             printf("A file megnem letezik! Letrehozas...\n");
  42.             fileContents = fopen(FILE_NAME,"wb");      
  43.             fprintf(fileContents, "%d\n",list_size);
  44.             fclose(fileContents);    
  45.             mainMenu();
  46.         }else{
  47.             printf("Valami nagy hiba tortent! \n");
  48.             exit(1);
  49.         }
  50.     }else{
  51.  
  52.         fscanf(fileContents,"%d\n",&list_size);    
  53.         if(list_size > 0){
  54.             int i; 
  55.                
  56.             for(i = 0; i < list_size; i++){
  57.                 struct Kivansag kivansag;
  58.                 char row[1000];
  59.                 fscanf(fileContents,"%s",row);
  60.                 kivansag = rowToKivansag(row);
  61.                 gifts[i] = kivansag;
  62.             }
  63.  
  64.         }
  65.         fclose(fileContents);  
  66.         mainMenu();
  67.  
  68.     }    
  69.   return 0;
  70. }//30
  71.  
  72. void mainMenu(){
  73.         char answer[10];
  74.         int check = 0;
  75.         do{  
  76.             printf("\n*********************************************************\n");
  77.             printf("Udv a Mikulas kivansag kezelojen! Az alabbiak kozul valaszthat:\n"
  78.             "  (1) Uj kivansag felvete (Regit felulirja ! )\n"
  79.             "  (2) Kivansagok listazasa\n"
  80.             "  (3) Szures adott varosra\n"
  81.             "  (4) Szures adott ajandekra\n"
  82.             "  (5) Kilepes\n");
  83.             fgets(answer,10, stdin);
  84.  
  85.             check = isCorrect(answer);
  86.  
  87.             if(check < 1 || check > 5){
  88.                 printf("\nHibas adatbevitel!\n");
  89.             }else{   
  90.                 if(check == 1){        
  91.                     case1();
  92.                 }
  93.                 if(check == 2){
  94.                     case2();
  95.                 }
  96.                 if(check == 3){
  97.                     case3();
  98.                 }
  99.                 if(check == 4){
  100.                     case4();
  101.                 }
  102.             }
  103.         }
  104.         while(check != 5);
  105.  
  106. }
  107.  
  108. void case4(){
  109.     char answer[100];
  110.     printf("Adja meg a listazando ajandek nevet!\n");
  111.     fgets(answer, 100, stdin);
  112.     cutEnter(answer);
  113.    
  114.     struct Kivansag subList[1000];
  115.     int count = 0;
  116.     int i;
  117.     for(i = 0; i < list_size; i++){            
  118.        if(strcmp(gifts[i].gift,answer) == 0){
  119.          subList[count] = gifts[i];
  120.          ++count;
  121.        }
  122.     }
  123.     if(count > 0){
  124.         printf("\n");
  125.         for(i = 0; i < count; i++){
  126.            printf("Datum: %s Nev: %s Varos: %s Pontos cim: %s Ajandek: %s\n",subList[i].date,subList[i].name,subList[i].city,subList[i].address,subList[i].gift);
  127.         }
  128.         printf("Szurt listaelemek szama: %d\n",count); 
  129.     }else{
  130.         printf("Nem talaltam ilyen ajandekot!\n"); 
  131.     }
  132. }
  133. void case3(){
  134.     char answer[100];
  135.     printf("Adja meg a listazando varos nevet!\n");
  136.     fgets(answer, 100, stdin);
  137.     cutEnter(answer);
  138.    
  139.     struct Kivansag subList[1000];
  140.     int count = 0;
  141.     int i;
  142.     for(i = 0; i < list_size; i++){            
  143.        if(strcmp(gifts[i].city,answer) == 0){
  144.          subList[count] = gifts[i];
  145.          ++count;
  146.        }
  147.     }
  148.     if(count > 0){
  149.         printf("\n");
  150.         for(i = 0; i < count; i++){
  151.            printf("Datum: %s Nev: %s Varos: %s Pontos cim: %s Ajandek: %s\n",subList[i].date,subList[i].name,subList[i].city,subList[i].address,subList[i].gift);
  152.         }
  153.         printf("Szurt listaelemek szama: %d\n",count); 
  154.     }else{
  155.         printf("Nem talaltam ilyen varost!\n");
  156.     }
  157. }
  158. void case2(){
  159.     FILE *list = fopen(FILE_NAME, "rb");
  160.     struct Kivansag kivansag;
  161.    
  162.     fscanf(list,"%d\n",&list_size);
  163.     if(list_size > 0){
  164.         int i;
  165.         char row[1000];
  166.         for(i = 0; i < list_size; i++){    
  167.             fscanf(list,"%s",row);                                 
  168.             kivansag = rowToKivansag(row);     
  169.             printf("Datum: %s Nev: %s Varos: %s Pontos cim: %s Ajandek: %s\n",kivansag.date,kivansag.name,kivansag.city,kivansag.address,kivansag.gift);               
  170.         }          
  171.         printf("\n");
  172.         printf("Listaelemek szama: %d\n",list_size);   
  173.     }else{
  174.         printf("Meg nincsenek lista elemek!\n");   
  175.     }
  176.     fclose(list);
  177. }
  178. void case1(){
  179.     FILE *list;
  180.     time_t now;
  181.     struct tm *ts;
  182.     char buf[100];
  183.  
  184.     //current time
  185.     now = time(NULL);
  186.  
  187.     //Format and print the time, "ddd yyyy-mm-dd hh:mm:ss zzz" */
  188.     ts = localtime(&now);
  189.     strftime(buf, sizeof(buf), "%Y-%m-%d_%H:%M:%S_(%a)", ts);
  190.    
  191.     int volt_e = 0;
  192.     int position = 0;
  193.     char row[1000];
  194.     struct Kivansag kivansag;
  195.        
  196.     //strcpy(kivansag.date,buf);
  197.     strcpy(kivansag.date,buf);
  198.     strcpy(row,buf); //datum
  199.     strcat(row,",");           
  200.        
  201.     printf("Kerem adja meg a nevet!\n");
  202.     fgets(kivansag.name,100,stdin);
  203.     cutEnter(kivansag.name);
  204.                    
  205.     strcat(row,kivansag.name);
  206.     strcat(row,",");
  207.        
  208.     int i;
  209.     for(i = 0; i < list_size; i++){        
  210.        if(strcmp(kivansag.name,gifts[i].name)==0){
  211.            volt_e = 1;
  212.            position = i;
  213.        }           
  214.     }
  215.                    
  216.     printf("Kerem adja meg a varosat!\n");
  217.     fgets(kivansag.city,sizeof(kivansag.city),stdin);
  218.     cutEnter(kivansag.city);
  219.        
  220.        
  221.     strcat(row,kivansag.city);
  222.     strcat(row,",");
  223.    
  224.     printf("Kerem adja meg a pontos cimet!\n");        
  225.     fgets(kivansag.address,sizeof(kivansag.address),stdin);
  226.     cutEnter(kivansag.address);
  227.    
  228.     strcat(row,kivansag.address);
  229.     strcat(row,",");
  230.    
  231.     char choice[10];
  232.     printf("Kerem valasszon ajandekot!\n"
  233.       "  (1) baba\n"
  234.       "  (2) auto\n"
  235.       "  (3) labda\n"
  236.       "  (4) kirako\n"
  237.       "  (5) szinezo\n"
  238.       "  (6) konyv\n");
  239.     fgets(choice, 10, stdin);
  240.     int result = isCorrect(choice);
  241.     while(result < 1 || result > 6){
  242.         printf("Kerem valasszon ajandekot!\n"
  243.           "  (1) baba\n"
  244.           "  (2) auto\n"
  245.           "  (3) labda\n"
  246.           "  (4) kirako\n"
  247.           "  (5) szinezo\n"
  248.           "  (6) konyv\n"              
  249.         );
  250.         fgets(choice, 10, stdin);  
  251.         result = isCorrect(choice);
  252.     }
  253.     switch(result){
  254.       case 1:
  255.         strcpy(kivansag.gift,"baba");
  256.         strcat(row,kivansag.gift);
  257.         strcat(row,"\n");
  258.         break;
  259.       case 2:
  260.         strcpy(kivansag.gift,"auto");
  261.         strcat(row,kivansag.gift);
  262.         strcat(row,"\n");
  263.         break;
  264.       case 3:
  265.         strcpy(kivansag.gift,"labda");
  266.         strcat(row,kivansag.gift);
  267.         strcat(row,"\n");
  268.         break;
  269.       case 4:
  270.         strcpy(kivansag.gift,"kirako");
  271.         strcat(row,kivansag.gift);
  272.         strcat(row,"\n");
  273.         break;
  274.       case 5:
  275.         strcpy(kivansag.gift,"szinezo");
  276.         strcat(row,kivansag.gift);
  277.         strcat(row,"\n");
  278.         break;
  279.       case 6:
  280.         strcpy(kivansag.gift,"konyv");
  281.         strcat(row,kivansag.gift);
  282.         strcat(row,"\n");
  283.         break;
  284.       default:
  285.         printf("\nvalami hiba lesz itt\n");
  286.         strcat(row,kivansag.gift);
  287.         strcat(row,"\n");
  288.         break;
  289.     }
  290.    
  291.     if(volt_e == 1){
  292.         gifts[position]= kivansag;
  293.         list = fopen(FILE_NAME, "wb");
  294.            
  295.         fprintf(list, "%d\n", list_size);
  296.         int i;
  297.         char *oldRows;
  298.         for(i = 0; i < list_size; i++){        
  299.             oldRows = kivansagToRow(gifts[i]);
  300.             oldRows = swapSpace(oldRows);
  301.             fprintf(list, "%s",oldRows);       
  302.         }                  
  303.         fclose(list);
  304.     }else{
  305.         ++list_size;           
  306.         gifts[list_size-1] = kivansag;
  307.         list = fopen(FILE_NAME, "wb");
  308.         fprintf(list, "%d\n",list_size);
  309.         int i;
  310.         char *oldRows;
  311.         for(i = 0; i < list_size; i++){        
  312.             oldRows = kivansagToRow(gifts[i]);
  313.             oldRows = swapSpace(oldRows);
  314.             fprintf(list, "%s",oldRows);       
  315.         }                          
  316.         fclose(list);
  317.     }
  318. }
  319.  
  320. char *kivansagToRow(struct Kivansag kivansag){
  321.     char *row;
  322.     row = kivansag.date;   
  323.     strcat(row,",");
  324.     strcat(row,kivansag.name); 
  325.     strcat(row,",");
  326.     strcat(row,kivansag.city); 
  327.     strcat(row,",");
  328.     strcat(row,kivansag.address);
  329.     strcat(row,",");
  330.     strcat(row,kivansag.gift); 
  331.     strcat(row,"\n");
  332.     return row;
  333. }
  334. struct Kivansag rowToKivansag(char row[1000]){
  335.     struct Kivansag kivansag;
  336.     int i = 0;
  337.     int j = 0;
  338.     int count = 0;
  339.     int lastPos = 0;
  340.     while(row[i] != '\0'){
  341.         if(row[i] == ','){
  342.             ++count;
  343.             lastPos = j;
  344.             j = 0;
  345.         }else{
  346.             if(count == 0){        
  347.                 if(row[i] == '_'){
  348.                     kivansag.date[j] = ' ';
  349.                 }
  350.                 else{
  351.                     kivansag.date[j] = row[i];
  352.                 }
  353.                 ++j;
  354.             }
  355.             if(count == 1){
  356.                 kivansag.date[lastPos] = '\0';
  357.                 if(row[i] == '_'){
  358.                     kivansag.name[j] = ' ';
  359.                 }
  360.                 else{
  361.                     kivansag.name[j] = row[i];
  362.                 }
  363.                 ++j;
  364.             }
  365.             if(count == 2){
  366.                 kivansag.name[lastPos] = '\0';
  367.                 if(row[i] == '_'){
  368.                     kivansag.city[j] = ' ';
  369.                 }
  370.                 else{
  371.                     kivansag.city[j] = row[i];
  372.                 }
  373.                 ++j;
  374.             }
  375.             if(count == 3){
  376.                 kivansag.city[lastPos] = '\0';
  377.                 if(row[i] == '_'){
  378.                     kivansag.address[j] = ' ';
  379.                 }
  380.                 else{
  381.                     kivansag.address[j] = row[i];
  382.                 }
  383.                 ++j;
  384.             }
  385.             if(count == 4){
  386.                 kivansag.address[lastPos] = '\0';
  387.                 if(row[i] == '_'){
  388.                     kivansag.gift[j] = ' ';
  389.                 }
  390.                 else{
  391.                     kivansag.gift[j] = row[i];
  392.                 }
  393.                 ++j;
  394.             }      
  395.         }
  396.         ++i;
  397.     }          
  398.     kivansag.gift[j] = '\0';   
  399.     return kivansag;
  400. }
  401.  
  402. int isCorrect(char answer[10]){
  403.    return *answer-48;
  404. }
  405.  
  406. char *swapSpace(char *row){
  407.     int count = 0;
  408.     while(*row != '\0'){
  409.         ++count;
  410.         if(*row == ' '){
  411.             *row = '_';
  412.         }
  413.         ++row;
  414.     }
  415.     int i;
  416.     for(i = 0; i < count; i++){
  417.         --row;
  418.     }
  419.     return row;
  420. }
  421.  
  422. void cutEnter(char string[100]){
  423.     char *pos;
  424.     if ((pos=strchr(string, '\n')) != NULL)
  425.         *pos = '\0';
  426. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement