Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<windows.h>
- #include<math.h>
- #include<conio.h>
- #include<stdlib.h>
- #include<iostream>
- using namespace std;
- struct data /* объявляем массив структур в котором будут храниться данные об участниках олимпиады*/
- {
- char fio[40];
- char country[40];
- char vidsp[20];
- int mesto;
- } st[100];
- int i, found, number,lastrecnum, mainmenu(), recmenu(), addrec(int number), delrec(int number); /*объявление переменных и функций типа integer*/
- void main(), printall(), search(), points(); /*объявлякем функции типа void (не возвращающие значения)*/
- void main()
- {
- FILE*f=fopen("f1.txt","rt"); /*открытие потока чтения из текстового файла*/
- if(f==NULL) /*проверяем существует ли такой файл*/
- {
- perror("Не могу открыть файл"); /*вывод сообщения об ошибке*/
- }
- printf(" ФИО Страна Вид спорта Место\n"); /*формирование шапки таблицы*/
- do /*считываем содержимое файла в массив структур st*/
- {
- fscanf(f,"%s",&st[i].fio);
- fscanf(f,"%s",&st[i].country);
- fscanf(f,"%s",&st[i].vidsp);
- fscanf(f,"%i",&st[i].mesto);
- i++;
- }
- while(!feof(f)); /* пока не будет достигнут конец файла*/
- fclose(f); /* закрываем поток чтения из файла*/
- lastrecnum = i; /*записываем в переменную lastrecnum номер последней записи*/
- SetConsoleCP(1251); /* устанавливаем кодировку в которой будет осуществляться вывод текста в консоль*/
- SetConsoleOutputCP(1251);
- do
- {
- int answer=mainmenu(); /*вызов процедуры, формирующей основное меню программы*/
- switch (answer) /*обработка выбранного пункта меню*/
- {
- case 0: printall();break; /*вызов процедуры вывода всех записей*/
- case 1: addrec(-1);break; /*вызов процедуры добавления записи*/
- case 2: search();break; /*вызов процедуры поиска записи*/
- case 3: points();break; /*вызов процедуры подсчёта очков*/
- case 4: FILE*f=fopen("f1.txt","wt"); /*выход из программы с сохранением результатов*/
- for (i=0;i<lastrecnum;i++)
- {
- fprintf(f,"%s\t",st[i].fio);
- fprintf(f,"%s\t",st[i].country);
- fprintf(f,"%s\t",st[i].vidsp);
- fprintf(f,"%i",st[i].mesto);
- }
- fclose(f);
- exit(0);
- }
- system("pause");
- }
- while (TRUE);
- }
- int recmenu()
- {
- int key=0;
- int code;
- do
- {
- system("cls");
- printf("Обработка записи: \n\n ");
- printf("%10s\t%10s\t%10s\t%4i\n\n",st[found].fio,st[found].country,st[found].vidsp,st[found].mesto);
- key=(key+3)%3;
- cout<<" -= Операции над записью =-\n---------------------------------\n"<<endl;
- if (key==0) cout<<"-> Вернуться в основное меню"<<endl;
- else cout<<" Вернуться в основное меню"<<endl;
- if (key==1) cout<<"-> Редактировать запись"<<endl;
- else cout<<" Редактировать запись"<<endl;
- if (key==2) cout<<"-> Удалить запись"<<endl;
- else cout<<" Удалить запись"<<endl;
- code=getch();
- if (code==224)
- {
- code=getch();
- if (code==80) key++;
- if (code==72) key--;
- }
- }
- while(code!=13);
- system("cls");
- return key;
- }
- int mainmenu()
- {
- int key=0;
- int code;
- do
- {
- system("cls");
- key=(key+5)%5;
- printf(" -= Главное меню =-\n-------------------------\n");
- if (key==0) cout<<"-> Вывести все записи"<<endl;
- else cout<<" Вывести все записи"<<endl;
- if (key==1) cout<<"-> Создать новую запись"<<endl;
- else cout<<" Создать новую запись"<<endl;
- if (key==2) cout<<"-> Найти запись"<<endl;
- else cout<<" Найти запись"<<endl;
- if (key==3) cout<<"-> Подсчёт очков"<<endl;
- else cout<<" Подсчёт очков"<<endl;
- if (key==4) cout<<"-> Выйти из программы"<<endl;
- else cout<<" Выйти из программы"<<endl;
- code=getch();
- if (code==224)
- {
- code=getch();
- if (code==80) key++;
- if (code==72) key--;
- }
- }
- while(code!=13);
- system("cls");
- return key;
- }
- void printall ()
- {
- printf(" ФИО\t Страна\tВид спорта\t Место\n-------------------------------------------------------\n");/*формирование шапки таблицы*/
- 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);
- }
- int addrec(int number)
- {
- if (number <0)
- {
- number = lastrecnum;
- lastrecnum++;
- }
- printf("Введите Ф.И.О. спортсмена: ");
- while(gets(st[number].fio)) if(strlen(st[number].fio)>0) break;
- printf("Введите страну: ");
- while(gets(st[number].country)) if(strlen(st[number].country)>0) break;
- printf("Введите спортивную дисциплину: ");
- while(gets(st[number].vidsp)) if(strlen(st[number].vidsp)>0) break;
- printf("Введите место: ");
- scanf("%d",&st[number].mesto);
- return 0;
- }
- void search()
- {
- int findflag=0;
- char fam[40];
- printf("Введите строку для поиска: ");
- while(gets(fam))
- if(strlen(fam)>0) break;
- for (i=0;i<lastrecnum;i++)
- {
- if(strcmp(st[i].fio,fam)==0)
- {
- printf("%10s\t%10s\t%10s\t%4d\n",st[i].fio,st[i].country,st[i].vidsp,st[i].mesto);
- findflag++;
- found=i;
- }
- }
- if (findflag == 0)
- {
- printf("Записей удовлетворяющих критерию поиска не найдено\n"); /*если ничего не нашли, то выводим сообщение об этом*/
- return;
- }
- printf("\nБудет выведено меню операций над записью. ");
- system("pause");
- int answers=recmenu();
- switch (answers)
- {
- case 0: break;
- case 1: addrec(found); printf("Запись успешно отредактирована. "); break;
- case 2: delrec(found);break;
- };
- }
- int delrec (int number)
- {
- /*int confirm;
- printf("Вы действительно хотите удалить выбранную запись? (Y/N) ");
- while(confirm==getch()) if(confirm!=13 && confirm!=14) break;
- if (confirm==13)
- {
- ДОДЕЛАТЬ ПРОВЕРКУ
- */
- for (i=number; i<lastrecnum;i++)
- {
- strcpy(st[i].fio, st[i+1].fio);
- strcpy(st[i].country, st[i+1].country);
- strcpy(st[i].vidsp, st[i+1].vidsp);
- st[i].mesto = st[i+1].mesto;
- };
- lastrecnum--;
- /*};*/
- printf("Запись удалена. ");
- return 0;
- }
- void points()
- {
- struct ochki
- {
- char name[40];
- int pointcol;
- } countp[30], indp[30];
- int n,lastc=1,lasti=1;
- for (n=0;n<30;n++) /*обнуление массивово*/
- {
- countp[n].pointcol = 0;
- indp[n].pointcol = 0;
- }
- for (i=0;i<lastrecnum;i++) /*формирование списка стран участниц*/
- {
- for (n=0;n<30;n++)
- {
- if(strcmp(countp[n].name,st[i].country)==0)
- {
- if (st[i].mesto == 1) countp[n].pointcol = countp[n].pointcol + 10;
- if (st[i].mesto == 2) countp[n].pointcol = countp[n].pointcol + 6;
- if (st[i].mesto == 3) countp[n].pointcol = countp[n].pointcol + 2;
- break;
- };
- if (n==lastc-1)
- {
- strcpy(countp[n].name, st[i].country);
- if (st[i].mesto == 1) countp[n].pointcol = countp[n].pointcol + 10;
- if (st[i].mesto == 2) countp[n].pointcol = countp[n].pointcol + 6;
- if (st[i].mesto == 3) countp[n].pointcol = countp[n].pointcol + 2;
- lastc++;
- break;
- }
- }
- }
- lastc--;
- printf(" Очки по командам\n----------------------\n");
- for (n=0;n<lastc;n++)
- {
- printf("%10s\t%4i\n", countp[n].name,countp[n].pointcol);
- }
- for (i=0;i<lastrecnum;i++) /*формирование списка стран участниц*/
- {
- for (n=0;n<30;n++)
- {
- if(strcmp(indp[n].name,st[i].fio)==0)
- {
- if (st[i].mesto == 1) indp[n].pointcol = indp[n].pointcol + 10;
- if (st[i].mesto == 2) indp[n].pointcol = indp[n].pointcol + 6;
- if (st[i].mesto == 3) indp[n].pointcol = indp[n].pointcol + 2;
- break;
- };
- if (n==lasti-1)
- {
- strcpy(indp[n].name, st[i].fio);
- if (st[i].mesto == 1) indp[n].pointcol = indp[n].pointcol + 10;
- if (st[i].mesto == 2) indp[n].pointcol = indp[n].pointcol + 6;
- if (st[i].mesto == 3) indp[n].pointcol = indp[n].pointcol + 2;
- lasti++;
- break;
- }
- }
- }
- lasti--;
- printf("\n Очки по участникам\n----------------------\n");
- for (n=0;n<lasti;n++)
- {
- printf("%10s\t%4i\n", indp[n].name,indp[n].pointcol);
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement