#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=NULL; list->date[i].hour=0; list->date[i].min=0; list->date[i].sec=0; } } void FreeElem(TList *text) { //очистка списка text->item=NULL; text->hour=0; text->hour=0; text->hour=0; } int EmpCheck(int n,TMass *list) {//проверка на пустоту int i; for (i = 0; i < n; i++) { if (list->date[i].item!=NULL) { //если не пуст то возращает 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=NULL; 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 (list->date[i].item != NULL && metka) {s1=i; metka=0;} if (list->date[i].item == NULL && i>s1 && s1!=0) {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Список пуст\n");return;} for (i=start;idate[i].item, list->date[i].hour,list->date[i].min,list->date[i].sec); } return; } void DelElem(int n, int z,TMass *list) {//удаляет элемент по значению z которое передаю из вне int start,end,i; CheckSE(n,&start,&end,list); if (z==0 || z==1) {//обнуляет первый элемент list->date[start].item=NULL; list->date[start].hour=0; list->date[start].min=0; list->date[start].sec=0; } if (z==-1) { //обнуляет последний элемент list->date[end].item=NULL; 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[i].item=list->date[i+1].item; list->date[i].hour=list->date[i+1].hour; list->date[i].min=list->date[i+1].hour; list->date[i].sec=list->date[i+1].hour; } } } void AddElem(int n,int z,TMass *list) {//добавляет элемент так же по z int start,end; CheckSE(n,&start,&end,list); 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;} } if (z==0) { //добавляет в начало list->date[start-1].item=" "; strcpy(list->date[start-1].item,s1); list->date[start-1].hour=atoi(s2); list->date[start-1].min=atoi(s3); list->date[start-1].sec=atoi(s4); } if (z==-1) { //добавляет в конец list->date[end+1].item=" "; strcpy(list->date[end+1].item,s1); 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++) { //копирует в доп массив doplist.date[i].item=list->date[i].item; 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-1; i++) { //вставляет на 1 элмент дальше(смещает) 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=" "; //вставляет нужный strcpy(list->date[z].item,s1); list->date[z].hour=atoi(s2); list->date[z].min=atoi(s3); list->date[z].sec=atoi(s4); } } void AddElemFromTxt(int n, int z, TMass*list,TList*text){//так же как и с клавы int start,end; //только значения передаются через отедльный список CheckSE(n,&start,&end,list); char s1[20]; //название int s2; //час прибытия int s3; //минута прибытия int s4;//секунда прибытия int i; strcpy(s1,text->item); s2=text->hour; s3=text->min; s4=text->sec; if (z==0) { list->date[start-1].item=" "; strcpy(list->date[start-1].item,s1); list->date[start-1].hour=(s2); list->date[start-1].min=(s3); list->date[start-1].sec=(s4); } if (z==-1) { list->date[end+1].item=" "; strcpy(list->date[end+1].item,s1); list->date[end+1].hour=(s2); list->date[end+1].min=(s3); list->date[end+1].sec=(s4); } if (z>0) { TMass doplist; InitialList(n,&doplist); z=start+z; int i; for (i = z; i < n; i++) { doplist.date[i].item=list->date[i].item; 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-1; 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=" "; strcpy(list->date[z].item,s1); list->date[z].hour=(s2); list->date[z].min=(s3); list->date[z].sec=(s4); } } void CreateList (int n, TMass *list) { //создание списка из 1 или пустого 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=" "; strcpy(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 ReadElem(int n, int z,TMass *list, TList *dop) { int start,end; //считывание нужного нам элемента по индексу(z) CheckSE(n,&start,&end,list); z=start-1+z; dop->item=list->date[z].item; dop->hour=list->date[z].hour; dop->min=list->date[z].min; dop->sec=list->date[z].sec; } void doElem(int n,int z,int zo, TMass *list) { //заменяет элемент другим int start,end; CheckSE(n,&start,&end,list); TList dop; if (z==0) { //заменяет элмент zo-первым элментом ReadElem(n,1,list,&dop); zo=start+zo-1; 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) { //заменяет элмент zo-последним элментом ReadElem(n,end-start+1,list,&dop); zo=start+zo-1; 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) { //заменяет элмент zo-предыдущим элментом ReadElem(n,zo-1,list,&dop); zo=start+zo-1; 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) { //заменяет элмент zo-следующим элментом ReadElem(n,zo+1,list,&dop); zo=start+zo-1; 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 ChangeTime(int z,TMass*list,TList*dop) {//замена времени-функия для фильра int start,end,i=0; int n=list->length; CheckSE(n,&start,&end,list); list->date[start+z].hour=dop->hour; list->date[start+z].min=dop->min; list->date[start+z].sec=dop->sec; return; }