TR 15varFOM B2

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#define _CRT_SECURE_NO_WARNINGS
#include <tchar.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <conio.h>
#include "B1.cpp"
//==============================================================================
void addFromFile(int n,int z,FILE*f1,TMass*list) {//добавляет в массив из txt
char s[50];//у этой функции не больше накладки над которыми я бился больше суток
while (1){//но так и не исправил - если больше 1 элмента то, склеиваются имена
TList text;
fscanf(f1,"%s", s); strcpy(text.item,s);
if (strcmp(s,"end")==0){z=0; break;} //признак конца - названия end
fscanf(f1,"%s", s); text.hour=atoi(s);
fscanf(f1,"%s", s); text.min=atoi(s);
fscanf(f1,"%s", s); text.sec=atoi(s);
AddElemFromTxt(n,z,list,&text);
if (z==-1) {z--;}
z++;
}
z=0;
}
void addFromFilter(int z,TMass*list,TList*dop){ //функция сделана по аналогии
int n=list->length; //с текстовой, но не работает в основном коде...
int start,end,i=0;
TMass doplist;
InitialList(n,&doplist);
z=start+z;
char s1[20]; //название
int s2; //час прибытия
int s3; //минута прибытия
int s4;//секунда прибытия
for (i = z+1; 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;
}
strcpy(s1,dop->item);
s2=dop->hour;
s3=dop->min;
s4=dop->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 Filter(TMass*list) { //фильтр
int n=list->length;
int start,end,i=0;
int flag1,flag2,flag3,h,m,s; char item[20];
CheckSE(n,&start,&end,list);
if (!EmpCheck(n,list)) {printf("Список пуст, филтровать нечего\n"); return;}
TList prove;
int hour=0,sec=0,min=0;
while (1) {
CheckSE(n,&start,&end,list);
if (i>end+1-start) {break;}
ReadElem(n,i+1,list,&prove);
hour=prove.hour;
min=prove.min;
sec=prove.sec;
flag1=0; //флаг некоректного часа
flag2=0; // минуты
flag3=0; // секунды
if (hour>23){flag1=1;}
if (min>59) {flag2=1;}
if (sec>59) {flag3=1;}
if (flag1) {h=hour/24; hour+= -24*h;} //делает часы в пределах [0..23]
if (flag2) {m=min/60; hour+= m; min+= -60*m;}// минуты [0..59]
if (flag3) {s=sec/60; min+= s; sec+= -60*s;}// секунды [0..59]
if (flag1 || flag2 || flag3){
prove.hour=hour;
prove.min=min;
prove.sec=sec;
ChangeTime(i,list,&prove);
printf("Время откоректировано до %d:%d:%d\n",prove.hour,prove.min,prove.sec);
getch();
}
//время длжно быть в отрезке с 15:20:35 до 18:50:10
if (((hour*10000+min*100+sec)>=152035) && ((hour*10000+min*100+sec)<=185010)){
addFromFilter(i,list,&prove);ChangeTime(i,list,&prove); i++; //не работает
i++; //тут реализовано только удаление, из-за неработоспособности addFromFilter
}
else{
DelElem(n,i,list); i++;
}
}
}
void writetobin (FILE*fb,TMass*list) {
int n=list->length;
fwrite(&list, sizeof(list), 1, fb);
FreeList(n,list);
}
void readfrombin (FILE*fb,TMass*list){
fread(&list, sizeof(list), 1, fb);
}
//==============================================================================
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
char ch1,ch2,sh[2],shh[2];
TMass list;
int n=100;
InitialList (n,&list);
FILE *f1;
if ((f1 = fopen("input.txt", "rt")) == NULL) { printf("Неудалось открыть файл для чтения \n"); getch(); return 0 ; }
FILE *fb;
if ((fb = fopen("bin.txt", "wb")) == NULL) { printf("Неудалось открыть файл для записи \n"); getch(); return 0 ; }
int i;
CreateList(n,&list); ShowList(n,&list);
do
{
printf("Q-очистить список;\n");
printf("W-добавить элементы из текстового в начало; E-в конец;R-после произвольного;\n");
printf("A-добавить элемент с клавиатуры в начало; S-конец; D-после произвольного;\n");
printf("Z-удалить N элементов с начала; X-конца; C-после текущего;\n");
printf("1-сделать текущим элментом первый; 2-последний; 3-предыдущий; 4-следующий\n");
printf("F-фильтр P-выход из программы ваш выбор >> ");
fflush(stdin);
ch1=getchar();
fflush(stdin);
ch1=toupper(ch1);
switch (ch1)
{
//----------первая часть: создание двоичного из текстового
case 'Q': FreeList(n,&list);ShowList(n,&list); break;
case 'W': addFromFile(n,0,f1,&list);ShowList(n,&list); break;
case 'E': addFromFile(n,-1,f1,&list);ShowList(n,&list); break;
case 'R': printf("Выберете место после которого втсавлять\n"); scanf("%s",sh); if (atoi(sh)!=0){addFromFile(n,atoi(sh),f1,&list);ShowList(n,&list);} break;
case 'A': AddElem(n,0,&list);ShowList(n,&list); break;
case 'S': AddElem(n,-1,&list);ShowList(n,&list); break;
case 'D': printf("Выберете место после которого втсавлять\n"); scanf("%s",sh); if (atoi(sh)!=0){ AddElem(n,atoi(sh),&list);ShowList(n,&list);} break;
case 'Z':printf("Кол-во N для удаления"); scanf("%s",shh); if (atoi(shh)!=0){
for (i=0;i<atoi(shh);i++){DelElem(n,0,&list);}ShowList(n,&list);} break;
case 'X':printf("Кол-во N для удаления"); scanf("%s",shh); if (atoi(shh)!=0){
for (i=0;i<atoi(shh);i++){DelElem(n,-1,&list);}ShowList(n,&list);} break;
case 'C':printf("Кол-во N для удаления"); scanf("%s",shh);
printf("Выберете место с которго будет удаляться"); scanf("%s",sh);
if (atoi(shh)!=0 && atoi(sh)!=0){
for (i=0;i<atoi(shh);i++){DelElem(n,atoi(sh),&list);}ShowList(n,&list);} break;
case'1':printf("Выберете текущий элемент"); scanf("%s",sh); if (atoi(sh)!=0){ doElem(n,0,atoi(sh),&list);ShowList(n,&list);} break;
case'2':printf("Выберете текущий элемент"); scanf("%s",sh); if (atoi(sh)!=0){ doElem(n,-1,atoi(sh),&list);ShowList(n,&list);} break;
case'3':printf("Выберете текущий элемент"); scanf("%s",sh); if (atoi(sh)!=0){ doElem(n,1,atoi(sh),&list);ShowList(n,&list);} break;
case'4':printf("Выберете текущий элемент"); scanf("%s",sh); if (atoi(sh)!=0){ doElem(n,2,atoi(sh),&list);ShowList(n,&list);} break;
case'F': Filter(&list);ShowList(n,&list);
case 'P': printf("\n\n\n_$$$$____$$$$____$$$$___$$$$$\n$$______$$__$$__$$__$$__$$__$$\n$$_$$$__$$__$$__$$__$$__$$__$$\n$$__$$__$$__$$__$$__$$__$$__$$\n_$$$$____$$$$____$$$$___$$$$$\n\n\n");
printf("$$$$$___$$__$$__$$$$$_____$$$\n$$__$$___$$$$___$$________$$$\n$$$$$_____$$____$$$$______$$$\n$$__$$____$$____$$\n$$$$$_____$$____$$$$$_____$$$\n"); break;
default: {
printf("Нет такой команды\nPress any key\n");
getch(); }
}
} while(ch1!='P') ;
getch();
for (i = 0; i < n; i++) {
delete list.date;
}
return 0;
}