Advertisement
Guest User

Untitled

a guest
May 27th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.46 KB | None | 0 0
  1.  
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<windows.h>
  5. #include<math.h>
  6. #include<conio.h>
  7. #include<stdlib.h>
  8. #include<iostream>
  9.  
  10. using namespace std;
  11.  
  12. struct data /* объявляем массив структур в котором будут храниться данные об участниках олимпиады*/
  13. {
  14.     char fio[40];
  15.     char country[40];
  16.     char vidsp[20];
  17.     int mesto;
  18. } st[100];
  19.  
  20.  
  21. int i, found, number,lastrecnum, mainmenu(), recmenu(), addrec(int number), delrec(int number); /*объявление переменных и функций типа integer*/
  22.  
  23. void main(), printall(), search(), points(); /*объявлякем функции типа void (не возвращающие значения)*/
  24.  
  25. void main()
  26. {
  27.     FILE*f=fopen("f1.txt","rt");    /*открытие потока чтения из текстового файла*/
  28.     if(f==NULL) /*проверяем существует ли такой файл*/
  29.     {
  30.         perror("Не могу открыть файл");    /*вывод сообщения об ошибке*/
  31.     }
  32.     printf("    ФИО            Страна        Вид спорта      Место\n"); /*формирование шапки таблицы*/
  33.     do /*считываем содержимое файла в массив структур st*/
  34.     {  
  35.         fscanf(f,"%s",&st[i].fio);
  36.         fscanf(f,"%s",&st[i].country);
  37.         fscanf(f,"%s",&st[i].vidsp);
  38.         fscanf(f,"%i",&st[i].mesto);   
  39.     i++;
  40.     }
  41.     while(!feof(f)); /* пока не будет достигнут конец файла*/
  42.     fclose(f); /* закрываем поток чтения из файла*/
  43.     lastrecnum = i; /*записываем в переменную lastrecnum номер последней записи*/
  44.        
  45.    
  46.     SetConsoleCP(1251); /* устанавливаем кодировку в которой будет осуществляться вывод текста в консоль*/
  47.     SetConsoleOutputCP(1251);
  48.  
  49.     do
  50.     {
  51.         int answer=mainmenu(); /*вызов процедуры, формирующей основное меню программы*/
  52.         switch (answer) /*обработка выбранного пункта меню*/
  53.         {
  54.             case 0: printall();break; /*вызов процедуры вывода всех записей*/
  55.             case 1: addrec(-1);break; /*вызов процедуры добавления записи*/
  56.             case 2: search();break; /*вызов процедуры поиска записи*/
  57.             case 3: points();break; /*вызов процедуры подсчёта очков*/
  58.             case 4: FILE*f=fopen("f1.txt","wt"); /*выход из программы с сохранением результатов*/
  59.                     for (i=0;i<lastrecnum;i++)
  60.                     {
  61.                     fprintf(f,"%s\t",st[i].fio);
  62.                     fprintf(f,"%s\t",st[i].country);
  63.                     fprintf(f,"%s\t",st[i].vidsp);
  64.                     fprintf(f,"%i",st[i].mesto);
  65.                     }
  66.                     fclose(f);
  67.                     exit(0);
  68.         }
  69.         system("pause");
  70.     }
  71.     while (TRUE);
  72. }
  73.  
  74. int recmenu()
  75. {
  76.     int key=0;
  77.     int code;  
  78.     do
  79.     {
  80.         system("cls");
  81.         printf("Обработка записи: \n\n ");
  82.         printf("%10s\t%10s\t%10s\t%4i\n\n",st[found].fio,st[found].country,st[found].vidsp,st[found].mesto);
  83.         key=(key+3)%3;
  84.         cout<<"   -= Операции над записью =-\n---------------------------------\n"<<endl;
  85.         if (key==0) cout<<"-> Вернуться в основное меню"<<endl;        
  86.         else  cout<<"   Вернуться в основное меню"<<endl;
  87.         if (key==1) cout<<"-> Редактировать запись"<<endl;
  88.         else  cout<<"   Редактировать запись"<<endl;
  89.         if (key==2) cout<<"-> Удалить запись"<<endl;
  90.         else  cout<<"   Удалить запись"<<endl;
  91.         code=getch();  
  92.         if (code==224)
  93.         {
  94.             code=getch();
  95.             if (code==80) key++;
  96.             if (code==72) key--;
  97.         }
  98.     }
  99.     while(code!=13);
  100.     system("cls");  
  101.     return key;
  102. }
  103.  
  104. int mainmenu()
  105. {
  106.     int key=0;
  107.     int code;  
  108.     do
  109.     {
  110.         system("cls");  
  111.         key=(key+5)%5;
  112.         printf("   -= Главное меню =-\n-------------------------\n");
  113.         if (key==0) cout<<"-> Вывести все записи"<<endl;        
  114.         else  cout<<"   Вывести все записи"<<endl;
  115.         if (key==1) cout<<"-> Создать новую запись"<<endl;
  116.         else  cout<<"   Создать новую запись"<<endl;
  117.         if (key==2) cout<<"-> Найти запись"<<endl;
  118.         else  cout<<"   Найти запись"<<endl;
  119.         if (key==3) cout<<"-> Подсчёт очков"<<endl;
  120.         else  cout<<"   Подсчёт очков"<<endl;
  121.         if (key==4) cout<<"-> Выйти из программы"<<endl;
  122.         else  cout<<"   Выйти из программы"<<endl;
  123.         code=getch();  
  124.         if (code==224)
  125.         {
  126.             code=getch();
  127.             if (code==80) key++;
  128.             if (code==72) key--;
  129.         }
  130.     }
  131.     while(code!=13);
  132.     system("cls");  
  133.     return key;
  134. }
  135.  
  136. void printall ()
  137. {
  138.     printf("       ФИО\t    Страна\tВид спорта\t  Место\n-------------------------------------------------------\n");/*формирование шапки таблицы*/
  139.     for (i=0;i<lastrecnum;i++) printf("%10s\t%10s\t%10s\t%4i\n",st[i].fio,st[i].country,st[i].vidsp,st[i].mesto);
  140. }
  141.  
  142. int addrec(int number)
  143. {
  144.     if (number <0)
  145.     {
  146.         number = lastrecnum;
  147.         lastrecnum++;
  148.     }
  149.     printf("Введите Ф.И.О. спортсмена:  ");
  150.     while(gets(st[number].fio)) if(strlen(st[number].fio)>0) break;
  151.     printf("Введите  страну:  ");
  152.     while(gets(st[number].country)) if(strlen(st[number].country)>0) break;
  153.     printf("Введите  спортивную дисциплину:  ");
  154.     while(gets(st[number].vidsp)) if(strlen(st[number].vidsp)>0) break;
  155.     printf("Введите место:  ");
  156.     scanf("%d",&st[number].mesto);
  157.    
  158.     return 0;
  159. }
  160.  
  161. void search()
  162. {
  163.     int findflag=0;
  164.     char fam[40];
  165.     printf("Введите строку для поиска:  ");
  166.         while(gets(fam))
  167.             if(strlen(fam)>0) break;
  168.     for (i=0;i<lastrecnum;i++)
  169.     {
  170.         if(strcmp(st[i].fio,fam)==0)
  171.         {
  172.             printf("%10s\t%10s\t%10s\t%4d\n",st[i].fio,st[i].country,st[i].vidsp,st[i].mesto);
  173.             findflag++;
  174.             found=i;
  175.         }
  176.     }
  177.     if (findflag == 0)
  178.         {
  179.             printf("Записей удовлетворяющих критерию поиска не найдено\n"); /*если ничего не нашли, то выводим сообщение об этом*/
  180.             return;
  181.         }
  182.     printf("\nБудет выведено меню операций над записью. ");
  183.     system("pause");
  184.     int answers=recmenu();      
  185.     switch (answers)
  186.     {
  187.         case 0: break;
  188.         case 1: addrec(found); printf("Запись успешно отредактирована. "); break;
  189.         case 2: delrec(found);break;
  190.     };
  191.    
  192. }
  193.  
  194. int delrec (int number)
  195. {
  196.     /*int confirm;
  197.     printf("Вы действительно хотите удалить выбранную запись? (Y/N) ");
  198.     while(confirm==getch()) if(confirm!=13 && confirm!=14) break;
  199.     if (confirm==13)
  200.     {
  201.    
  202.       ДОДЕЛАТЬ ПРОВЕРКУ
  203.    
  204.     */
  205.     for (i=number; i<lastrecnum;i++)
  206.         {
  207.             strcpy(st[i].fio, st[i+1].fio);
  208.             strcpy(st[i].country, st[i+1].country);
  209.             strcpy(st[i].vidsp, st[i+1].vidsp);
  210.             st[i].mesto = st[i+1].mesto;
  211.         };
  212.     lastrecnum--;
  213.     /*};*/
  214.     printf("Запись удалена. ");
  215.     return 0;
  216. }
  217.  
  218. void points()
  219. {
  220.     struct ochki
  221.     {
  222.         char name[40];
  223.         int pointcol;
  224.     } countp[30], indp[30];
  225.  
  226.     int n,lastc=1,lasti=1;
  227.  
  228.     for (n=0;n<30;n++) /*обнуление массивово*/
  229.     {
  230.         countp[n].pointcol = 0;
  231.         indp[n].pointcol = 0;
  232.     }
  233.    
  234.    
  235.    
  236.     for (i=0;i<lastrecnum;i++)     /*формирование списка стран участниц*/
  237.     {  
  238.         for (n=0;n<30;n++)
  239.         {  
  240.             if(strcmp(countp[n].name,st[i].country)==0)
  241.             {
  242.                 if (st[i].mesto == 1) countp[n].pointcol = countp[n].pointcol + 10;
  243.                 if (st[i].mesto == 2) countp[n].pointcol = countp[n].pointcol + 6;
  244.                 if (st[i].mesto == 3) countp[n].pointcol = countp[n].pointcol + 2;
  245.                 break;
  246.             };
  247.             if (n==lastc-1)
  248.             {
  249.                 strcpy(countp[n].name, st[i].country);
  250.                 if (st[i].mesto == 1) countp[n].pointcol = countp[n].pointcol + 10;
  251.                 if (st[i].mesto == 2) countp[n].pointcol = countp[n].pointcol + 6;
  252.                 if (st[i].mesto == 3) countp[n].pointcol = countp[n].pointcol + 2;
  253.                 lastc++;
  254.                 break;
  255.             }
  256.         }
  257.     }
  258.  
  259.     lastc--;
  260.  
  261.         printf("  Очки по командам\n----------------------\n");
  262.     for (n=0;n<lastc;n++)
  263.     {  
  264.         printf("%10s\t%4i\n", countp[n].name,countp[n].pointcol);
  265.     }  
  266.  
  267.     for (i=0;i<lastrecnum;i++)     /*формирование списка стран участниц*/
  268.     {  
  269.         for (n=0;n<30;n++)
  270.         {  
  271.             if(strcmp(indp[n].name,st[i].fio)==0)
  272.             {
  273.                 if (st[i].mesto == 1) indp[n].pointcol = indp[n].pointcol + 10;
  274.                 if (st[i].mesto == 2) indp[n].pointcol = indp[n].pointcol + 6;
  275.                 if (st[i].mesto == 3) indp[n].pointcol = indp[n].pointcol + 2;
  276.                 break;
  277.             };
  278.             if (n==lasti-1)
  279.             {
  280.                 strcpy(indp[n].name, st[i].fio);
  281.                 if (st[i].mesto == 1) indp[n].pointcol = indp[n].pointcol + 10;
  282.                 if (st[i].mesto == 2) indp[n].pointcol = indp[n].pointcol + 6;
  283.                 if (st[i].mesto == 3) indp[n].pointcol = indp[n].pointcol + 2;
  284.                 lasti++;
  285.                 break;
  286.             }
  287.         }
  288.     }
  289.  
  290.     lasti--;   
  291.  
  292.     printf("\n  Очки по участникам\n----------------------\n");
  293.     for (n=0;n<lasti;n++)
  294.     {  
  295.         printf("%10s\t%4i\n", indp[n].name,indp[n].pointcol);
  296.     }
  297.  
  298.     printf("\n");
  299. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement