hozer

PokiLab4(Files)

Jun 3rd, 2014
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.29 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. #define HEADOUTFORMAT "%-15s%-15s%-15s%-15s%-15s\n"
  8. #define OUTFORMAT "%-15s%-15d%-15d%-15d%-15d\n"
  9.  
  10. typedef struct {
  11.     char lastName[64];
  12.     int group, gi, gim, get;
  13. } person;
  14.  
  15. void print(person *persons, int n);
  16.  
  17. int input(person **persons)
  18. {
  19.     int n, i;
  20.     FILE *file = fopen("input.bin", "wb");
  21.     if (!file) { printf("File open error"); _getch(); return 0; }
  22.  
  23.     printf("input n: "); scanf("%d", &n);
  24.     *persons = (person*) malloc(sizeof(person) *n);
  25.  
  26.     printf("Input persons (by format - LastName Group GradeInfr GradeInMova GradeEcoTeo):\n");
  27.     for (i = 0; i < n; i++)
  28.     {
  29.         person *p = *persons;
  30.         scanf("%s %d %d %d %d", p[i].lastName, &p[i].group, &p[i].gi, &p[i].gim, &p[i].get);
  31.     }
  32.     fclose(file);
  33.     file = fopen("input.bin", "ab");
  34.     //fwrite(*persons, sizeof(person), n, file);
  35.     for (i = 0; i < n; i++)
  36.     {
  37.         fwrite(&(*persons)[i], sizeof(person), 1, file);
  38.     }
  39.  
  40.     fclose(file);
  41.     return n;
  42. }
  43.  
  44. person* read(int count)
  45. {
  46.     int i = 0;
  47.     FILE *file;
  48.     person *persons = NULL;
  49.     file = fopen("input.bin", "rb");
  50.  
  51.     if (!file) { printf("File open error"); _getch(); return 0; }
  52.  
  53.     persons = (person*) malloc(sizeof(person) *count);
  54.     //if (fread(&persons, sizeof(person), count, file) == 0) return NULL;
  55.     while (!feof(file))
  56.     {
  57.         fread(&persons[i], sizeof(person), 1, file);
  58.         i++;
  59.     }
  60.  
  61.  
  62.     fclose(file);
  63.     return persons;
  64. }
  65.  
  66.  
  67. void print(person* persons, int n)
  68. {
  69.     int i = 0;
  70.     FILE *file = fopen("output.txt", "w");
  71.     if (!file) { printf("File open error"); _getch(); return; }
  72.  
  73.     if (!persons) return;
  74.     putchar('\n'); printf(HEADOUTFORMAT, "LastName", "Group", "GradeInfr", "GradeInMova", "GradeEcoTeo");
  75.     fprintf(file, HEADOUTFORMAT, "LastName", "Group", "GradeInfr", "GradeInMova", "GradeEcoTeo");
  76.     for (i = 0; i < n; i++)
  77.     {
  78.         printf(OUTFORMAT, persons[i].lastName, persons[i].group, persons[i].gi, persons[i].gim, persons[i].get);
  79.         fprintf(file, OUTFORMAT, persons[i].lastName, persons[i].group, persons[i].gi, persons[i].gim, persons[i].get);
  80.     }
  81.  
  82.     fclose(file);
  83. }
  84.  
  85.  
  86. int supermans(person *persons, int n, int g)
  87. {
  88.     int i = 0, c = 0;
  89.     FILE *file = fopen("ageout.txt", "w");
  90.     if (!file) { printf("File open error"); _getch(); return 0; }
  91.  
  92.     if (!persons) return -1;
  93.     printf(HEADOUTFORMAT, "LastName", "Group", "GradeInfr", "GradeInMova", "GradeEcoTeo");
  94.     fprintf(file, HEADOUTFORMAT, "LastName", "Group", "GradeInfr", "GradeInMova", "GradeEcoTeo");
  95.     for (i = 0; i < n; i++)
  96.         if (persons[i].group == g && persons[i].gim == 4 && persons[i].gi == 4 && persons[i].get == 4)
  97.         {
  98.             printf(OUTFORMAT, persons[i].lastName, persons[i].group, persons[i].gi, persons[i].gim, persons[i].get);
  99.             fprintf(file, OUTFORMAT, persons[i].lastName, persons[i].group, persons[i].gi, persons[i].gim, persons[i].get);
  100.             c++;
  101.         }
  102.  
  103.     fclose(file);
  104.     return c;
  105. }
  106.  
  107. person *psort(person *p, int n)
  108. {
  109.     int i, j; person tmp;
  110.     for (i = 0; i < n; i++)
  111.     {
  112.         for (j = i + 1; j < n; j++)
  113.         {
  114.             if (strcmp(p[i].lastName, p[j].lastName) > 0)
  115.             {
  116.                 tmp = p[i];
  117.                 p[i] = p[j];
  118.                 p[j] = tmp;
  119.             }
  120.         }
  121.     }
  122.  
  123.     return p;
  124. }
  125.  
  126. int main()
  127. {
  128.     int n = 1;
  129.     person *p = NULL;
  130.  
  131.     n = input(&p);
  132.     supermans(p, n, 106);
  133.     p = read(n);
  134.     p = psort(p, n);
  135.     print(p, n);
  136.  
  137.     _getch();
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment