Telaryon

Fájlkezelés alapok (bináris)

Apr 21st, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.36 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define FILENAME "cd.bin"
  6. #define FILENAME_TEMP "cd_temp.bin"
  7.  
  8. typedef struct cd{
  9.     char cim[20];
  10.     char eloado[20];
  11.     int kiadas_eve;
  12.     float ar;
  13. } CD;
  14.  
  15. void feltolt(int db);
  16. void listaz(void);
  17. void keres(char *k_eloado);
  18. void modosit(int kor);
  19. void torol(float arhatar);
  20.  
  21. int main(void){
  22.     int db;
  23.     int kor;
  24.     char keresett_eloado[20];
  25.     float arhatar;
  26.  
  27.     printf("\nHany adatot szeretnel felvinni?");
  28.     scanf("%d", &db);
  29.     feltolt(db);
  30.     listaz();
  31.  
  32.     printf("\nMelyik eloado cd-eit keresed?\n");
  33.     scanf("%s", keresett_eloado);
  34.     keres(keresett_eloado);
  35.  
  36.     printf("\n Melyik cd arat szeretned csokkenteni?");
  37.     scanf("%d", &kor);
  38.     modosit(kor);
  39.     listaz();
  40.     printf("\n Milyen arnal dragabb cd-ket torol?");
  41.     scanf("%f", &arhatar);
  42.     listaz();
  43.     torol(arhatar);
  44.     return 0;
  45. }
  46. void feltolt(int db){
  47.     FILE *fp;
  48.     int i;
  49.     CD cd;
  50.  
  51.     fp = fopen(FILENAME, "ab");
  52.     if(!fp) {printf("\nSikertelen fajl megnyitas."); return;}
  53.  
  54.  
  55.     for(i=0; i<db; i++){
  56.         printf("\n%d. CD cime: ", i+1); scanf("%s", cd.cim);
  57.         printf("\n%d. CD eloadoja: ", i+1); scanf("%s", cd.eloado);
  58.         printf("\n%d. CD kiadasi eve: ", i+1); scanf("%d", &cd.kiadas_eve);
  59.         printf("\n%d. CD ara: ", i+1); scanf("%f", &cd.ar);
  60.         fwrite(&cd, sizeof(CD), 1, fp);
  61.     }
  62.     fclose(fp);
  63.     return;
  64. }
  65.  
  66. void listaz(void){
  67.     FILE *fp;
  68.     int i;
  69.     int filesize;
  70.     CD cd;
  71.  
  72.     fp = fopen(FILENAME, "rb");
  73.     if(!fp) {printf("Sikertelen fajl megnyitas."); return;}
  74.     fseek(fp, 0, SEEK_END);
  75.     filesize = ftell(fp)/sizeof(CD);
  76.  
  77.     for(i=0; i<filesize; i++){
  78.         fseek(fp, sizeof(CD)*i, SEEK_SET);
  79.         fread(&cd, sizeof(CD), 1, fp);
  80.         printf("\n %d. CD cime: %s \t eloadoja: %s \t kiadasi eve: %d \t ara: %.2f,", i+1, cd.cim, cd.eloado, cd.kiadas_eve, cd.ar);
  81.     }
  82.     fclose(fp);
  83.     return;
  84.  
  85. }
  86.  
  87. void keres(char *k_eloado){
  88.     FILE *fp;
  89.     int i;
  90.     int filesize;
  91.     CD cd;
  92.  
  93.     fp = fopen(FILENAME, "rb");
  94.     if(!fp) {printf("Sikertelen fajl megnyitas."); return;}
  95.     fseek(fp, 0, SEEK_END);
  96.     filesize = ftell(fp)/sizeof(CD);
  97.  
  98.     for(i=0; i<filesize; i++){
  99.         fseek(fp, sizeof(CD)*i, SEEK_SET);
  100.         fread(&cd, sizeof(CD), 1, fp);
  101.         if(strcmp(cd.eloado, k_eloado)==0){
  102.             printf("\n %d. CD cime: %s \t eloadoja: %s \t kiadasi eve: %d \t ara: %.2f,", i+1, cd.cim, cd.eloado, cd.kiadas_eve, cd.ar);
  103.         }
  104.     }
  105.     fclose(fp);
  106.     return;
  107. }
  108.  
  109. void modosit(int kor){
  110.     FILE *fp;
  111.     int i;
  112.     int filesize;
  113.     int nap;
  114.     int ev;
  115.     CD cd;
  116.     char honap[4];
  117.  
  118.     fp = fopen(FILENAME, "rb+");
  119.     if(!fp) {printf("Sikertelen fajl megnyitas."); return;}
  120.     fseek(fp, 0, SEEK_END);
  121.     filesize = ftell(fp)/sizeof(CD);
  122.     sscanf(__DATE__, "%s %d %d", honap, &nap, &ev);
  123.  
  124.     for(i=0; i<filesize; i++){
  125.         fseek(fp, sizeof(CD)*i, SEEK_SET);
  126.         fread(&cd, sizeof(CD), 1, fp);
  127.         if((ev-cd.kiadas_eve)>kor){
  128.             cd.ar*=0.9;
  129.             fseek(fp, sizeof(CD)*(-1), SEEK_CUR);
  130.             fwrite(&cd, sizeof(CD), 1, fp);
  131.         }
  132.     }
  133.     fclose(fp);
  134.     return;
  135. }
  136.  
  137. void torol(float arhatar){
  138.     FILE *fp, *fp_temp;
  139.     int i;
  140.     int filesize;
  141.     int deleted=0;
  142.     CD cd;
  143.  
  144.     fp = fopen(FILENAME, "rb");
  145.     if(!fp) {printf("Sikertelen fajl megnyitas."); return;}
  146.  
  147.     fp_temp = fopen(FILENAME_TEMP, "wb+");
  148.     if(!fp_temp) {printf("Sikertelen fajl megnyitas."); return;}
  149.  
  150.     fseek(fp, 0, SEEK_END);
  151.     filesize = ftell(fp)/sizeof(CD);
  152.  
  153.     for(i=0; i<filesize; i++){
  154.         fseek(fp, sizeof(CD)*i, SEEK_SET);
  155.         fread(&cd, sizeof(CD), 1, fp);
  156.         if(cd.ar<=arhatar){
  157.             fwrite(&cd, sizeof(CD), 1, fp_temp);
  158.         }
  159.         else{
  160.             printf("\nTorolve %d. CD cime: %s \t eloadoja: %s \t kiadasi eve: %d \t ara: %.2f,", i+1, cd.cim, cd.eloado, cd.kiadas_eve, cd.ar);
  161.             deleted++;
  162.         }
  163.     }
  164.     printf("%d", deleted);
  165.     fclose(fp);
  166.     fp = fopen(FILENAME, "wb");
  167.  
  168.     if(!fp) {printf("Sikertelen fajl megnyitas."); return;}
  169.     for(i=0; i<filesize-deleted; i++){
  170.         fseek(fp_temp, sizeof(CD)*i, SEEK_SET);
  171.         fread(&cd, sizeof(CD), 1, fp_temp);
  172.         fwrite(&cd, sizeof(CD), 1, fp);
  173.     }
  174.  
  175.     fclose(fp_temp);
  176.     fclose(fp);
  177.     return;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment