Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.96 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct {
  6.     char *name, *date, *group;
  7.     int fis, math, inf, phis;
  8.     float ball;
  9. } users;
  10.  
  11. users *user_struct(char *text, int *len)
  12. {
  13.     int i;
  14.     users *udata = (users *)malloc(sizeof(users) * 1);
  15.     char *tok = strtok(text, "\n"), **strarr = (char **)malloc(sizeof(char *) * 1);
  16.     size_t ln = 1, type = 0;
  17.  
  18.     while (tok != NULL)
  19.     {
  20.         if (strlen(tok) > 5)
  21.         {
  22.             strarr = (char **)realloc(strarr, sizeof(char *) * ln);
  23.             memcpy((strarr[ln - 1] = (char *)malloc(strlen(tok) + 1)), tok, strlen(tok) + 1);
  24.         }
  25.         tok = strtok(NULL, "\n"); ln++;
  26.     }
  27.  
  28.     for (i = 0; i < ln - 1; i++) {
  29.         udata = (users *)realloc(udata, sizeof(users) * (i + 1));
  30.         udata[i].name = (char *)malloc(50); udata[i].date = (char *)malloc(11);
  31.         udata[i].group = (char *)malloc(50);
  32.        
  33.         char *stok = strtok(strarr[i], "|");
  34.         while (stok != NULL)
  35.         {
  36.             if (type == 0 && strlen(stok) < 49)
  37.                 strcpy(udata[i].name, stok);
  38.  
  39.             if (type == 1 && strlen(stok) < 11)
  40.                 strcpy(udata[i].date, stok);
  41.  
  42.             if (type == 2 && strlen(stok) < 49)
  43.                 strcpy(udata[i].group, stok);
  44.  
  45.             if (type == 3 && strlen(stok) == 1)
  46.                 udata[i].fis = atoi(stok);
  47.  
  48.             if (type == 4 && strlen(stok) == 1)
  49.                 udata[i].math = atoi(stok);
  50.  
  51.             if (type == 5 && strlen(stok) == 1)
  52.                 udata[i].inf = atoi(stok);
  53.  
  54.             if (type == 6 && strlen(stok) == 1)
  55.                 udata[i].phis = atoi(stok);
  56.  
  57.             stok = strtok(NULL, "|"); type++;
  58.         }
  59.         udata[i].ball = (udata[i].fis + udata[i].math +
  60.                          udata[i].inf + udata[i].phis) / 4;
  61.         type = 0;
  62.     }
  63.     free(strarr);
  64.     *len = ln - 1;
  65.     return udata;
  66. }
  67.  
  68. void add_record(users *udata, int *ln)
  69. {
  70.     int len = *ln;
  71.    
  72.     udata = (users *)realloc(udata, sizeof(users) * (len + 1));
  73.     udata[len].name = (char *)malloc(50); udata[len].date = (char *)malloc(11);
  74.     udata[len].group = (char *)malloc(50);
  75.    
  76.     printf("Enter name of student: "); scanf("%s", udata[len].name);
  77.     printf("Enter group of student: "); scanf("%s", udata[len].group);
  78.     printf("Enter date of student: "); scanf("%s", udata[len].date);
  79.     printf("Enter a physics score: "); scanf("%d", &udata[len].fis);
  80.     printf("Enter a math score: "); scanf("%d", &udata[len].math);
  81.     printf("Enter a inf. score: "); scanf("%d", &udata[len].inf);
  82.     printf("Enter a chemistry score: "); scanf("%d", &udata[len].phis);
  83.    
  84.     udata[len].ball = (udata[len].fis + udata[len].math +
  85.                            udata[len].inf + udata[len].phis) / 4;
  86.    
  87.     FILE *fs = fopen("users.txt", "a+");
  88.     fprintf(fs, "%s|%s|%s|%d|%d|%d|%d|\n",
  89.             udata[len].name, udata[len].date,
  90.             udata[len].group, udata[len].math,
  91.             udata[len].inf, udata[len].phis);
  92.     fclose(fs); (*ln)++;
  93. }
  94.  
  95. void view_record(users *udata, int len)
  96. {
  97.     int i;
  98.     for (i = 0; i < len; i++)
  99.     {
  100.         printf("Student #%d\n", i + 1);
  101.         printf("Name: %s\n", udata[i].name);
  102.         printf("Group: %s\n", udata[i].group);
  103.         printf("Date: %s\n", udata[i].date);
  104.         printf("Physics score: %d\n", udata[i].fis);
  105.         printf("Math score: %d\n", udata[i].math);
  106.         printf("Inf. score: %d\n", udata[i].inf);
  107.         printf("Chemistry score: %d\n", udata[i].phis);
  108.         printf("Result: %.2f\n\n", udata[i].ball);
  109.     }
  110.     getchar(); getchar();
  111. }
  112.  
  113. void save_records(users *udata, int len)
  114. {
  115.     int i;
  116.     FILE *fa = fopen("users.txt", "w");
  117.  
  118.     for (i = 0; i < len; i++)
  119.         fprintf(fa, "%s|%s|%s|%d|%d|%d|%d|\n",
  120.                     udata[i].name, udata[i].date,
  121.                     udata[i].group, udata[i].math,
  122.                     udata[i].inf, udata[i].phis);
  123.  
  124.     fclose(fa);
  125. }
  126.  
  127. void edit_record(users *udata, int len)
  128. {
  129.     int i;
  130.     char name[50]; int id = -1;
  131.     printf("Enter name of student: ");
  132.     scanf("%s", name);
  133.  
  134.     for (i = 0; i < len; i++)
  135.         if (strncmp(udata[i].name, name, strlen(name)))
  136.         {
  137.             id = i; break;
  138.         }
  139.  
  140.     printf("Student number %d\n", id);
  141.     if (id == -1) return;
  142.  
  143.     printf("Enter new group name: "); scanf("%s", udata[id].group);
  144.     printf("Enter new date: "); scanf("%s", udata[id].date);
  145.     printf("Enter new physics score: "); scanf("%d", &udata[id].fis);
  146.     printf("Enter new math score: "); scanf("%d", &udata[id].math);
  147.     printf("Enter new inf. score: "); scanf("%d", &udata[id].inf);
  148.     printf("Enter new chemistry score: "); scanf("%d", &udata[id].phis);
  149.     udata[id].ball = (udata[id].fis + udata[id].math +
  150.                       udata[id].inf + udata[id].phis) / 4;
  151.  
  152.     save_records(udata, len);
  153. }
  154.  
  155. void search_record(users *udata, int len)
  156. {
  157.     int i;
  158.  
  159.     for (i = 0; i < len; i++)
  160.         if (udata[i].math >= 8 || udata[i].inf >= 8 || udata[i].phis >= 8|| udata[i].fis >= 8)
  161.         {
  162.             printf("Student #%d\n", i + 1);
  163.             printf("Name: %s\n", udata[i].name);
  164.             printf("Group: %s\n", udata[i].group);
  165.             printf("Date: %s\n", udata[i].date);
  166.             printf("Physics score: %d\n", udata[i].fis);
  167.             printf("Math score: %d\n", udata[i].math);
  168.             printf("Inf. score: %d\n", udata[i].inf);
  169.             printf("Chemistry score: %d\n", udata[i].phis);
  170.             printf("Result: %.2f\n\n", udata[i].ball);
  171.         }
  172.     getchar(); getchar();
  173. }
  174.  
  175. void menu(users *udata, int len)
  176. {
  177.     int id = 0;
  178.     while (id != 5)
  179.     {
  180.         system("cls");
  181.         printf(
  182.             "==Kutuzov Matvey: Database of students==\n"
  183.             "Full list of options:\n"
  184.             "  1) - Add new record to database.\n"
  185.             "  2) - View a data of students.\n"
  186.             "  3) - Edit exist record.\n"
  187.             "  4) - Search a student by scores.\n"
  188.             "  5) - Exit.\n"
  189.             "Enter a number of option: "
  190.         ); scanf("%d", &id);
  191.  
  192.         if (id == 1)
  193.             add_record(udata, &len);
  194.  
  195.         if (id == 2)
  196.             view_record(udata, len);
  197.  
  198.         if (id == 3)
  199.             edit_record(udata, len);
  200.  
  201.         if (id == 4)
  202.             search_record(udata, len);
  203.  
  204.         if (id == 5) break;
  205.     }
  206. }
  207.  
  208. int main()
  209. {
  210.     FILE *fp = fopen("users.txt", "a+");
  211.     if (!fp) return 1;
  212.  
  213.     char *text = (char *)malloc(1), c;
  214.     int i, len = 2, st_len = 0; text[0] = '\0';
  215.  
  216.     while ((c = fgetc(fp)) != EOF)
  217.         if (len < 300) strncat((text = (char *)realloc(text, len++ + 1)), &c, 1);
  218.     fclose(fp);
  219.  
  220.     users *udata = user_struct(text, &st_len);
  221.     if (st_len == 0) return 1;
  222.  
  223.     menu(udata, st_len);
  224.  
  225.    
  226.     free(text);
  227.  
  228.     for (i = 0; i < st_len; i++)
  229.     {
  230.         free(udata[i].name); free(udata[i].group);
  231.         free(udata[i].date);
  232.     }
  233.  
  234.     free(udata);
  235.  
  236.     return 0;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement