#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include //не понимает когда строка пустая а кода нет struct TList { char* item; //название int hour; //час прибытия int min; //минута прибытия int sec; //секунда прибытия }; struct TMass { TList *date; //массив струкутур int length;//длинна массива }; void InitialList (int n,TMass *list) { // инициализация пустого списка int i; list->date=new TList[n]; list->length=n; for (i = 0; i < n; i++) { list->date[i].item="\0"; list->date[i].hour=0; list->date[i].min=0; list->date[i].sec=0; } } int EmpCheck(int n,TMass *list) { int i; for (i = 0; i < n; i++) { if ((strcmp(list->date[i].item,"\0"))!=0) { return 1; } } return 0; } void FreeList(int n,TMass *list) { int i; if (EmpCheck(n,list)==0) { printf("Список уже пуст\n"); return; } for (i = 0; i < n;i++){ list->date[i].item="\0"; list->date[i].hour=0; list->date[i].min=0; list->date[i].sec=0; } printf("Список очищен\n"); return; } void CheckSE(int n, int *s, int *e, TMass *list) { int s1=0,e1=0,i,metka=1; for (i = 0; i < n; i++) { if ( strcmp(list->date[i].item,"\0")==0 && metka) {s1=i; metka=0;} if ( strcmp(list->date[i].item,"\0")!=0 && i>s1) {e1=i-1; break;} } if (s1==0) {s1=n/2; e1=n/2;} *s=s1; *e=e1; } void ShowList(int n,TMass *list){ int start,end,i; CheckSE(n,&start,&end,list); if (EmpCheck(n,list)==0) {printf("Список пуст\n");return;} for (i=start;idate[i].item, list->date[i].hour,list->date[i].min,list->date[i].sec); } return; } void AddElem(int n,int z,TMass *list) { int start,end; CheckSE(n,&start,&end,list); printf("% d ",start); printf("% d ",end); int flag=1; char s1[20]; //название char s2[3]; //час прибытия char s3[3]; //минута прибытия char s4[3];//секунда прибытия printf("Введите название:"); scanf("%s",s1); while (flag){ printf("\nВведите час прибытия:"); scanf("%s",s2); printf("\nВведите минуту прибытия:"); scanf("%s",s3); printf("\nВведите секунду прибытия:"); scanf("%s",s4); if ((atoi(s2)!=0 ) && (atoi(s3)!=0) && (atoi(s4)!=0)) {flag=0;} } int j; if (z==0) { for (j = 0; j < strlen(s1); j++) { list->date[start-1].item[j]=s1[j]; } list->date[start-1].hour=atoi(s2); list->date[start-1].min=atoi(s3); list->date[start-1].sec=atoi(s4); } if (z==-1) { for (j = 0; j < strlen(s1); j++) { list->date[end+1].item[j]=s1[j]; } list->date[end+1].hour=atoi(s2); list->date[end+1].min=atoi(s3); list->date[end+1].sec=atoi(s4); } if (z>0) { TMass *doplist; InitialList(n,doplist); z=start+z; int i; for (i = z; i < n; i++) { for (j = 0; j < strlen(s1); j++) { doplist->date[i].item[j]=list->date[i].item[j]; } doplist->date[i].hour=list->date[i].hour; doplist->date[i].min=list->date[i].min; doplist->date[i].sec=list->date[i].sec; } for (i = z; i < n; i++) { list->date[i+1].item=doplist->date[i].item; list->date[i+1].hour=doplist->date[i].hour; list->date[i+1].min=doplist->date[i].min; list->date[i+1].sec=doplist->date[i].sec; } list->date[z].item=s1; list->date[z].hour=atoi(s2); list->date[z].min=atoi(s3); list->date[z].sec=atoi(s4); } } void CreateList (int n, TMass *list) { if (EmpCheck(n,list)==1){ printf("Сначало освободите список\n"); return; } InitialList (n,list); char s1[20]; //название printf("Для создания пустого введите **, или введите название элмента:\n"); scanf("%s",s1); if (!strcmp(s1,"**")){ printf("\nСоздан пустой список\n"); printf("Нажмите любую клавишу\n"); getch(); return; } int start,end; CheckSE(n,&start,&end,list); int flag=1; char s2[3]; //час прибытия char s3[3]; //минута прибытия char s4[3];//секунда прибытия while (flag){ printf("\nВведите час прибытия:"); scanf("%s",s2); printf("\nВведите минуту прибытия:"); scanf("%s",s3); printf("\nВведите секунду прибытия:"); scanf("%s",s4); if (atoi(s2)!=0 && atoi(s3)!=0 && atoi(s4)!=0) {flag=0;} } list->date[start].item=s1; list->date[start].hour=atoi(s2); list->date[start].min=atoi(s3); list->date[start].sec=atoi(s4); printf("Создан список из 1 элемента\n"); return; } void DelElem(int n, int z,TMass *list) { int start,end,i; CheckSE(n,&start,&end,list); if (z==0 || z==1) { list->date[start].item="\0"; list->date[start].hour=0; list->date[start].min=0; list->date[start].sec=0; } if (z==-1) { list->date[end].item="\0"; list->date[end].hour=0; list->date[end].min=0; list->date[end].sec=0; } if (z>1) { z=z+start-1; for (i = z; i < n-1; i++){ list->date[z].item=list->date[z+1].item; list->date[z].hour=list->date[z+1].hour; list->date[z].min=list->date[z+1].hour; list->date[z].sec=list->date[z+1].hour; } } } void ReadElem(int n, int z,TMass *list, TList *dop) { int start,end; CheckSE(n,&start,&end,list); z=start-1+z; dop->item=list->date[z].item; dop->item=list->date[z].item; dop->item=list->date[z].item; dop->item=list->date[z].item; } void doElem(int n,int z,int zo, TMass *list) { int start,end; CheckSE(n,&start,&end,list); TList dop; if (z==0) { ReadElem(n,1,list,&dop); list->date[zo].item=dop.item; list->date[zo].hour=dop.hour; list->date[zo].min=dop.min; list->date[zo].sec=dop.sec; } if (z==-1) { ReadElem(n,end-start+1,list,&dop); list->date[zo].item=dop.item; list->date[zo].hour=dop.hour; list->date[zo].min=dop.min; list->date[zo].sec=dop.sec; } if (z==1) { ReadElem(n,zo,list,&dop); list->date[zo].item=dop.item; list->date[zo].hour=dop.hour; list->date[zo].min=dop.min; list->date[zo].sec=dop.sec; } if (z==2) { ReadElem(n,zo+2,list,&dop); list->date[zo].item=dop.item; list->date[zo].hour=dop.hour; list->date[zo].min=dop.min; list->date[zo].sec=dop.sec; } } void logWrite(FILE*f2,TMass*list) { int start,end,i; int n=list->length;//жаль, что об этом вспомнил только тут и в итоге по всем функциям n водил(( CheckSE(n,&start,&end,list); if (EmpCheck(n,list)==0) {fprintf(f2,"Список пуст\n");return;} for (i=start;idate[i].item, list->date[i].hour,list->date[i].min,list->date[i].sec); } for (i=0;i<50;i++){ fprintf(f2,"="); } return; } int main() { SetConsoleOutputCP(1251); SetConsoleCP(1251); char ch1,ch2,sh[2],shh[2]; TMass list; int n=200; InitialList (n,&list); FILE *f1; if ((f1 = fopen("input.txt", "r")) == NULL) { printf("Неудалось открыть файл для чтения \n"); getch(); return 0 ; } FILE *f2; if ((f2 = fopen("log.txt", "w")) == NULL) { printf("Неудалось открыть файл для записи \n"); getch(); return 0 ; } int i; CreateList(n,&list); do { printf("Q-очистить список; W-добавить элементы из текстового; E-добавить с клавы;\nR-Удалить N элементов; T-заменить элемент; Y-Фильтр на основе ЛР 13; X-выход из всех подменю\nВаш выбор?"); fflush(stdin); ch1=getchar(); fflush(stdin); ch1=toupper(ch1); switch (ch1) { //----------первая часть: создание двоичного из текстового case 'Q': FreeList(n,&list);ShowList(n,&list); break; case 'W': break; case 'E': while(ch2!='X') { printf("Выберите место куда добавляем\nS-Начало D-Конец F-после текущего X-вернутся назад\nВыш выбор:"); fflush(stdin); ch2=getchar(); fflush(stdin); ch2=toupper(ch2); switch (ch2) { case'S':AddElem(n,0,&list);ShowList(n,&list); break; case'D':AddElem(n,-1,&list);ShowList(n,&list); break; case'F':printf("Выберете место после которого втсавлять"); scanf("%s",sh); if (atoi(sh)!=0){ AddElem(n,atoi(sh),&list);ShowList(n,&list);} break; default: {printf("Нет такой команды\nPress any key\n"); getch(); } } }; break; case 'R': while(ch2!='X') { printf("Выберите элемент с которого начинаем удалять\nD-Начало F-Конец G-после текущего X-вернутся назад\nВыш выбор:"); fflush(stdin); ch2=getchar(); fflush(stdin); ch2=toupper(ch2); switch (ch2) { case'D':printf("Кол-во N для удаления"); scanf("%s",shh); if (atoi(shh)!=0){ for (i=0;i