Advertisement
Usow_Maxim

Lab_10.11

Jun 8th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.51 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. struct sessiya
  5. {
  6.     char name[20];
  7.     char surname[20];
  8.     char otch[20];
  9.     int ist;
  10.     int prog;
  11.     int matem;
  12.     int phis;
  13.     int srznach;
  14. };
  15. int proverka();
  16. int proverka2();
  17. int proverka3(int kolvo);
  18. sessiya* vvod(sessiya* vse, int kolvo);
  19. sessiya* pam(sessiya* vse, int kolvo);
  20. sessiya* udalenie(sessiya* vse, int kolvo);
  21. char* myStrCpy(char* str, int &start, char symbol_stop);
  22.  
  23. int main()
  24. {
  25.     SetConsoleOutputCP(1251);
  26.     SetConsoleCP(1251);
  27.     int menu;
  28.     sessiya* vse = NULL;
  29.     int kolvo = 0;
  30.     FILE* fp = NULL;
  31.     while (true)
  32.     {
  33.         printf("1.Ввод данных с клавиатуры\n2.Чтение данных из файла\n3.Удаление выбранного элемента массива\n4.Запись данных в файл\n5.Вывод данных\n6.Выход\nВаш выбор: ");
  34.         menu = proverka();
  35.         switch (menu)
  36.         {
  37.             case 1:
  38.                 vse = pam(vse, kolvo);
  39.                 vse = vvod(vse, kolvo);
  40.                 kolvo++;
  41.                 break;
  42.             case 2:
  43.             {
  44.                 fp = fopen("sessiya.txt", "rb"); //Открывает корневую папку для чтения
  45.                 if(fp == NULL)
  46.                     printf("Ошибка открытия файла!\n");
  47.                 else
  48.                 {
  49.                     fseek(fp, 0, SEEK_END);
  50.                     long lSize = ftell(fp);
  51.  
  52.                     char* buffer = new char[lSize + 1];
  53.  
  54.                     char klv[10];
  55.                     rewind(fp);
  56.                     if(fread(buffer, 1, lSize, fp))
  57.                     {
  58.                         buffer[lSize] = '\0';
  59.                         kolvo = 0;
  60.                         for(int i = 0; i < lSize; i++)
  61.                             if(buffer[i] == '&')
  62.                                 kolvo++;
  63.                         if(vse != NULL)
  64.                             delete[] vse;
  65.                         vse = new sessiya[kolvo];
  66.                         int start = 0;
  67.                         for(int i = 0; i < kolvo; i++)
  68.                         {
  69.  
  70.                             strcpy(vse[i].surname, myStrCpy(buffer, start, '\n'));
  71.                             strcpy(vse[i].name, myStrCpy(buffer, start, '\n'));
  72.                             strcpy(vse[i].otch, myStrCpy(buffer, start, '\n'));
  73.  
  74.                             strcpy(klv, myStrCpy(buffer, start, '\n'));
  75.                             vse[i].ist = atoi(klv);
  76.                             strcpy(klv, myStrCpy(buffer, start, '\n'));
  77.                             vse[i].matem = atoi(klv);
  78.                             strcpy(klv, myStrCpy(buffer, start, '\n'));
  79.                             vse[i].prog = atoi(klv);
  80.                             strcpy(klv, myStrCpy(buffer, start, '&'));
  81.                             vse[i].phis = atoi(klv);
  82.                         }
  83.                     }
  84.                 }
  85.                 if(fp != NULL)
  86.                     fclose(fp);
  87.                 break;
  88.             }
  89.             case 3:
  90.                 vse = udalenie(vse, kolvo);
  91.                 kolvo--;
  92.                 break;
  93.             case 4:
  94.             {
  95.                 fp = fopen("sessiya.txt", "wb");
  96.  
  97.                 char klv[10];
  98.                 for(int i = 0; i < kolvo; i++)
  99.                 {
  100.                     fwrite(vse[i].surname, sizeof(char), sizeof(char) * strlen(vse[i].surname), fp);
  101.                     fwrite("\n", 1, 1, fp);
  102.                     fwrite(vse[i].name, sizeof(char), sizeof(char) * strlen(vse[i].name), fp);
  103.                     fwrite("\n", 1, 1, fp);
  104.                     fwrite(vse[i].otch, sizeof(char), sizeof(char) * strlen(vse[i].otch), fp);
  105.                     fwrite("\n", 1, 1, fp);
  106.                     itoa(vse[i].ist, klv, 10);
  107.                     fwrite(klv, sizeof(char), sizeof(char) * strlen(klv), fp);
  108.                     fwrite("\n", 1, 1, fp);
  109.                     itoa(vse[i].matem, klv, 10);
  110.                     fwrite(klv, sizeof(char), sizeof(char) * strlen(klv), fp);
  111.                     fwrite("\n", 1, 1, fp);
  112.                     itoa(vse[i].prog, klv, 10);
  113.                     fwrite(klv, sizeof(char), sizeof(char) * strlen(klv), fp);
  114.                     fwrite("\n", 1, 1, fp);
  115.                     itoa(vse[i].phis, klv, 10);
  116.                     fwrite(klv, sizeof(char), sizeof(char) * strlen(klv), fp);
  117.                     fwrite("&", 1, 1, fp);
  118.                     //fprintf(fp, "%s\n%s\n%s\n%d\n%d\n%d\n%d\n", vse[i].surname, vse[i].name, vse[i].otch, vse[i].ist, vse[i].matem, vse[i].prog, vse[i].phis);*/
  119.                 }
  120.                 fclose(fp);
  121.             }
  122.             case 5:
  123.  
  124.                 for (int i = 0; i < kolvo; i++)
  125.                 {
  126.                     if (vse[i].srznach >= 4)
  127.                     {
  128.                         printf("_____________________\n%d-%s %s %s \nИстория: %d\nМатематика: %d\nПрограммирование: %d\nФизика: %d\nПолучает стипендию\n", i + 1, vse[i].surname, vse[i].name, vse[i].otch, vse[i].ist, vse[i].matem, vse[i].prog, vse[i].phis);
  129.                     }
  130.                     else
  131.                     {
  132.                         printf("_____________________\n%d-%s %s %s \nИстория: %d\nМатематика: %d\nПрограммирование: %d\nФизика: %d\nНе получает стипендию\n", i + 1, vse[i].surname, vse[i].name, vse[i].otch, vse[i].ist, vse[i].matem, vse[i].prog, vse[i].phis);
  133.                     }
  134.                 }
  135.                 break;
  136.             case 6:
  137.                 exit(1);
  138.             default:
  139.             break;
  140.         }
  141.     }
  142.     return 0;
  143. }
  144.  
  145. char* myStrCpy(char* str, int &start, char symbol_stop)
  146. {
  147.     char* buffer = NULL;
  148.     int bufferSize = 0;
  149.     while(str[start + bufferSize] != symbol_stop)
  150.     {
  151.         bufferSize++;
  152.     }
  153.     buffer = new char[bufferSize + 1];
  154.     for(int currentCursor = 0; currentCursor < bufferSize; currentCursor++)
  155.         buffer[currentCursor] = str[start + currentCursor];
  156.     buffer[bufferSize] = '\0';
  157.     start += bufferSize + 1;
  158.     return buffer;
  159. }
  160.  
  161. sessiya* pam(sessiya* vse, int kolvo)
  162. {
  163.     if (kolvo == 0)
  164.     {
  165.         vse = new sessiya[1];
  166.     }
  167.     else
  168.     {
  169.         sessiya* tmp = new sessiya[kolvo + 1];
  170.         for (int i = 0; i < kolvo; i++)
  171.         tmp[i] = vse[i];
  172.  
  173.         delete[] vse;
  174.         vse = tmp;
  175.     }
  176.     return vse;
  177. }
  178.  
  179. int proverka()
  180. {
  181.     char ctl[15];
  182.     bool ok = false;
  183.     while (!ok)
  184.     {
  185.         scanf("%s", &ctl);
  186.         ok = true;
  187.         for (int i = 0; i < strlen(ctl); i++)
  188.         {
  189.             if (ctl[i] < '0' || ctl[i] > '9')
  190.             {
  191.                 printf("Некорректные данные!");
  192.                 ok = false;
  193.                 break;
  194.             }
  195.         }
  196.         if (atoi(ctl) > 0 && atoi(ctl) < 8)
  197.             return atoi(ctl);
  198.         else
  199.         {
  200.             printf("Введите заново: ");
  201.             ok = false;
  202.         }
  203.     }
  204.  
  205. }
  206. int proverka2()
  207. {
  208.     char ctl[15];
  209.     bool ok = false;
  210.     while (!ok)
  211.     {
  212.         scanf("%s", &ctl);
  213.         ok = true;
  214.         for (int i = 0; i < strlen(ctl); i++)
  215.         {
  216.             if (ctl[i] < '0' || ctl[i] > '9')
  217.             {
  218.                 printf("Некорректные данные!");
  219.                 ok = false;
  220.                 break;
  221.             }
  222.         }
  223.         if (atoi(ctl) > 0 && atoi(ctl) < 6)
  224.             return atoi(ctl);
  225.         else
  226.         {
  227.             printf("Введите заново: ");
  228.             ok = false;
  229.         }
  230.     }
  231. }
  232. int proverka3(int kolvo)
  233. {
  234.     char ctl[15];
  235.     bool ok = false;
  236.     while (!ok)
  237.     {
  238.         scanf("%s", &ctl);
  239.         ok = true;
  240.         for (int i = 0; i < strlen(ctl); i++)
  241.         {
  242.             if (ctl[i] < '0' || ctl[i] > '9')
  243.             {
  244.                 printf("Некорректные данные!");
  245.                 ok = false;
  246.                 break;
  247.             }
  248.         }
  249.         if (atoi(ctl) > 0 && atoi(ctl) <= kolvo)
  250.             return atoi(ctl);
  251.         else
  252.         {
  253.             printf("Введите заново: ");
  254.             ok = false;
  255.         }
  256.     }
  257.  
  258. }
  259.  
  260. sessiya* vvod(sessiya* vse, int kolvo)
  261. {
  262.     printf("Введите фамилию: ");
  263.     scanf("%s", vse[kolvo].surname);
  264.     printf("Введите имя: ");
  265.     scanf("%s", vse[kolvo].name);
  266.     printf("Введите отчество: ");
  267.     scanf("%s", vse[kolvo].otch);
  268.     printf("Введите оценку по истории: ");
  269.     vse[kolvo].ist = proverka2();
  270.     printf("Введите оценку по математике: ");
  271.     vse[kolvo].matem = proverka2();
  272.     printf("Введите оценку по программированию: ");
  273.     vse[kolvo].prog = proverka2();
  274.     printf("Введите оценку по физике: ");
  275.     vse[kolvo].phis = proverka2();
  276.     vse[kolvo].srznach = ((vse[kolvo].matem + vse[kolvo].ist + vse[kolvo].phis + vse[kolvo].prog) / 4);
  277.     return vse;
  278. }
  279. sessiya* udalenie(sessiya* vse, int kolvo)
  280. {
  281.     printf("Введите номер элемента массива для удаления: ");
  282.     int ud = proverka3(kolvo);
  283.     int k = 0;
  284.     sessiya* tmp = new sessiya[kolvo - 1];
  285.     for (int i = 0; i < kolvo; i++)
  286.         if (i != ud - 1)
  287.         {
  288.             tmp[k] = vse[i];
  289.             k++;
  290.         }
  291.     delete[] vse;
  292.     vse = tmp;
  293.     return vse;
  294. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement