#pragma hdrstop
#pragma argsused
#include <tchar.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <conio.h>
struct TMass {
char *date;
int len;
int beg,end;
};
struct TPart {
char *s1;
char *s2;
char *s3;
char *s4;
int start, finish;
};
int CheckIt(TMass*name) {
int i;
int n=name->len;
for (i = 0; i < n; i++) {
if (name->date[i]!=NULL) {
return 1;
}
}
return 0;
}
void InitialList (int n, TMass*name) {
int i;
name->date=new char[n];
name->len=n;
name->beg=0;
name->end=2000;
for (i = 0; i < n; i++) {
name->date[i]=NULL;
}
}
void CreateList (TMass*name) {
int i,k=0;
char s1[20];
char s2[3];
char s3[3];
char s4[3];
int ls1,ls2,ls3,ls4;
int n=name->len;
printf("Введите название товара (или ** для создания пустого списка)\n:");
scanf("%s",s1);
if (strcmp(s1,"**")==0){
printf("Пустой список создан\n");
printf("Клац по фасту эни кею\n");
getch();
return;
}
else{
printf("Введите час,минуту и секунду прибытия через ENTRE \n(не больше 2 цифр в каждой)\n");
scanf("%s",s2);
scanf("%s",s3);
scanf("%s",s4);
//======================проверка=====================================
if (atoi(s2)==NULL || atoi(s3)==NULL || atoi(s4)==NULL ) {
printf("Время не должно содиржать символов, список не создан");
getch();
return;
}
if (atoi(s2)>99 || atoi(s3)>99 || atoi(s4)>99 || atoi(s2)<0 || atoi(s3)<0 || atoi(s4)<0 ) {
printf("Время вводится в формате xx:xx:xx, список не создан");
getch();
return;
}
if (strlen(s2)!=2 || strlen(s3)!=2 || strlen(s4)!=2 ) {
printf("Время вводится в формате xx:xx:xx, список не создан");
getch();
return;
}
//=========================проверка==================================
else{
for (i = 1000; i<(ls1=1000+strlen(s1)) ; i++) {
name->date[i]=s1[i-1000];
}
for (i = ls1+3; i<(ls2=ls1+strlen(s2)+3); i++) {
(name->date[i]=s2[i-ls1-3]);
}
for (i = ls2+1; i<(ls3=ls2+strlen(s3)+1); i++) {
(name->date[i]=s3[i-ls2-1]);
}
for (i = ls3+1; i<(ls4=ls3+strlen(s4)+1); i++) {
(name->date[i]=s4[i-ls3-1]);
}
name->date[ls1]=' ';
name->date[ls1+1]='-';
name->date[ls1+2]=' ';
name->date[ls2]=':';
name->date[ls3]=':';
name->date[ls4]='\n';
}
name->beg=1000;
name->end=(ls4+1);
printf("Cоздан список из одной позиции\n");
}
getch();
return;
}
void ShowList(int p,TMass*name) {
int i;
int n=name->len;
int first=name->beg;
int last=name->end;
if (!p) {
printf ("Список пуст");
return;
}
else{
for (i = 1; i < n ; i++) {
printf("%c",name->date[i]);
}
}
}
void addElem(int z,TMass*name) {
int i,k=0;
char s1[20];
char s2[3];
char s3[3];
char s4[3];
int ls1,ls2,ls3,ls4,start;
int n=name->len;
int first=name->beg;
int last=name->end;
printf("Введите название товара\n");
scanf("%s",s1);
printf("Введите час,минуту и секунду прибытия через ENTRE \n(не больше 2 цифр в каждой)\n");
scanf("%s",s2);
scanf("%s",s3);
scanf("%s",s4);
//длинна на которую отличается это (length+12)
//======================проверка=====================================
if (atoi(s2)==NULL || atoi(s3)==NULL || atoi(s4)==NULL ) {
printf("Время не должно содиржать символов, список не создан");
getch();
return;
}
if (atoi(s2)>99 || atoi(s3)>99 || atoi(s4)>99 || atoi(s2)<0 || atoi(s3)<0 || atoi(s4)<0 ) {
printf("Время вводится в формате xx:xx:xx, список не создан");
getch();
return;
}
if (strlen(s2)!=2 || strlen(s3)!=2 || strlen(s4)!=2 ) {
printf("Время вводится в формате xx:xx:xx, список не создан");
getch();
return;
}
//==================================================================
//z=0 в начало z=-1 в конец z >1 произвол
if (z==0) {
for (i=(start=(first-strlen(s1)-12)); i<(ls1=(start+strlen(s1))) ; i++) {
name->date[i]=s1[i-start];
}
for (i = ls1+3; i<(ls2=ls1+strlen(s2)+3); i++) {
(name->date[i]=s2[i-ls1-3]);
}
for (i = ls2+1; i<(ls3=ls2+strlen(s3)+1); i++) {
(name->date[i]=s3[i-ls2-1]);
}
for (i = ls3+1; i<(ls4=ls3+strlen(s4)+1); i++) {
(name->date[i]=s4[i-ls3-1]);
}
name->date[ls1]=' ';
name->date[ls1+1]='-';
name->date[ls1+2]=' ';
name->date[ls2]=':';
name->date[ls3]=':';
name->date[ls4]='\n';
name->beg=start;
}
if (z==-1) {
for (i=(start=last); i<(ls1=start+strlen(s1)) ; i++) {
name->date[i]=s1[i-start];
}
for (i = ls1+3; i<(ls2=ls1+strlen(s2)+3); i++) {
(name->date[i]=s2[i-ls1-3]);
}
for (i = ls2+1; i<(ls3=ls2+strlen(s3)+1); i++) {
(name->date[i]=s3[i-ls2-1]);
}
for (i = ls3+1; i<(ls4=ls3+strlen(s4)+1); i++) {
(name->date[i]=s4[i-ls3-1]);
}
name->date[ls1]=' ';
name->date[ls1+1]='-';
name->date[ls1+2]=' ';
name->date[ls2]=':';
name->date[ls3]=':';
name->date[ls4]='\n';
name->end=ls4;
first=first;
}
if (z!=0 && z!=-1) {
for (i = first; i<n; i++) {
if ( name->date[i]== '\n') {
k++;
if (k==z) {
start=i+1;
break;
}
}
}
for (i = start; i<(n - strlen(s1)-12); i++) {
name->date[i+strlen(s1)+12]=name->date[i];
}
for (i=start; i<(ls1=start+strlen(s1)) ; i++) {
name->date[i]=s1[i-start];
}
for (i = ls1+3; i<(ls2=ls1+strlen(s2)+3); i++) {
(name->date[i]=s2[i-ls1-3]);
}
for (i = ls2+1; i<(ls3=ls2+strlen(s3)+1); i++) {
(name->date[i]=s3[i-ls2-1]);
}
for (i = ls3+1; i<(ls4=ls3+strlen(s4)+1); i++) {
(name->date[i]=s4[i-ls3-1]);
}
name->date[ls1]=' ';
name->date[ls1+1]='-';
name->date[ls1+2]=' ';
name->date[ls2]=':';
name->date[ls3]=':';
name->date[ls4]='\n';
name->end=last+strlen(s1)+12;
for (i = name->end; i < n; i++) {
name->date[i]=NULL;
}
}
printf("Элемент добавлен\n");
printf("%d первый\n", name->beg);
getch();
return;
}
void delElem(int z,TMass*name) {
int i,k=0,kol=0;
int ls1,ls2,ls3,ls4,start,finish;
int n=name->len;
int first=name->beg;
int last=name->end;
//==================================================================
//z=0 в начало z=-1 в конец z >1 произвол
for (i = first; i < last; i++) {
if (name->date[i]=='\n') {
kol++;
}
}
if (z==0) {
for (i = first; i < last; i++) {
if (name->date[i]=='\n') {
finish=i;
break;
}
}
for (i=first; i<finish+1 ; i++) {
name->date[i]=NULL;
}
name->beg=finish+1;
}
if (z==-1) {
for (i = first; i < last; i++) {
if (name->date[i]=='\n') {
k++;
if (k==(kol)) {
start=i+1;
}
break;
}
}
for (i=start; i<n ; i++) {
name->date[i]=NULL;
}
name->end=start;
}
if (z!=0 && z!=-1) {
for (i = first; i < n; i++) {
if (name->date[i]=='\n') {
k++;
if (k==z) {
start=i+1;
}
if (z==(k-1)) {
finish=i;
break;
}
}
}
for (i=start; i<finish+1 ; i++) {
name->date[i]=NULL;
}
}
printf("\nЭлемент удален\n");
getch();
return;
}
void doElem(int z,int p,TMass*name) {
int i,k=0,kol=0;
int ls1,ls2,ls3,ls4,start,finish,length,startOUR, finishOUR, lengthOUR;
int n=name->len;
int first=name->beg;
int last=name->end;
int k1=p-1;
//==================================================================
//z=0 в начало z=-1 в конец z=1 предыдущий z=2 следующий
//===================================================================
int kourstart;
int metka=1;
for (i = 0; i < n; i++) {
if (name->date[i]=='\n')
k++;
if (k1==k && metka) {
startOUR=i+1;
metka=0;
kourstart=k;
}
if (k1==(k-1)) {
finishOUR=i;
break;
}
}
int mainkol=0;
for (i = 1; i < n; i++) {
if (name->date[i]=='\n') {
mainkol++;
}
}
printf("всего перескоков%d\n ",mainkol);
lengthOUR=finishOUR-startOUR; //=============================================
if (z==0) {/////satrt
for (i = first; i < last; i++) {
if (name->date[i]=='\n') {
finish=i;
break;
}
}
for (i = startOUR; i < finishOUR+1; i++) {
name->date[i]=NULL;
}
char *second;
second = new char[n];
int length=finish-first;
int diff=length-lengthOUR;
const ff1=first;
if (diff<=0) {
for (i = first; i < finish+1; i++) {
name->date[(startOUR-ff1)+i]=name->date[i];}
}
if (diff>0) {
for (i =startOUR ; i < n; i++) {
second[i+diff]=name->date[i];
name->date[i]=NULL;
}
for (i = finishOUR+diff+1; i < n; i++) {
name->date[i]=second[i];
}
for (i = first; i < finish+1; i++) {
name->date[(startOUR-ff1)+i]=name->date[i];}
name->end=name->end+diff;
}
}
if (z==-1) { //не работает (((
int search=0;
for (i = 0; i < n; i++) {
if (name->date[i]=='\n') {
search++;
}
if (search==(mainkol-1)) {
start=i+1;
break;
}
}
printf("начало конца %d\n",start);
for (i = startOUR; i < finishOUR+1; i++) {
name->date[i]=NULL;
}
char *second;
second = new char[n];
int length=last-start;
int diff=length-lengthOUR;
printf("длинна %d",length);
printf("разница %d",diff);
const ff1=start;
if (diff<=0) {
for (i = start; i < last+1; i++) {
name->date[(startOUR-ff1)+i]=name->date[i];}
}
if (diff>0) { //запихивает в доп массив
for (i =startOUR ; i < n; i++) {
second[i+diff]=name->date[i];
name->date[i]=NULL;
}
for (i = finishOUR+diff; i < n; i++) { //востонавливает в старый
name->date[i]=second[i+1];
}
for (i = start; i < last+1; i++) { //заменяет но проглатывает один символ след
name->date[(startOUR-ff1)+i]=name->date[i];}
name->end=name->end+diff;
}
} //============================================================================
printf("\nЗамена произведена\n");
}
void readElem(int num, TMass*name, char*s1,char*s2,char*s3,char*s4){
int i,j,k,startOUR,finishOUR,ends1;
int k1=num-1;
int n=name->len;
int first=name->beg;
int last=name->end;
int kourstart;
int metka=1;
for (i = 0; i < n; i++) {
if (name->date[i]=='\n')
k++;
if (k1==k && metka) {
startOUR=i+1;
metka=0;
kourstart=k;
}
if (k1==(k-1)) {
finishOUR=i;
break;
}
}
for (i = startOUR; i < finishOUR; i++) {
if (name->date[i]==' ') {
ends1=i-1;
}
}
for (i = startOUR; i < ends1; i++) {
s1[i-startOUR]=name->date[i];
}
for (i = ends1+4; i < ends1+5; i++) {
s2[i-(ends1+4)]=name->date[i];
}
for (i = ends1+7; i < ends1+8; i++) {
s3[i-(ends1+7)]=name->date[i];
}
for (i = ends1+10; i < ends1+11; i++) {
s4[i-(ends1+10)]=name->date[i];
}
printf("первый %s\n %s\n %s\n %s\n",s1,s2,s3,s4);
}
//не доделано
int main(){
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
const n=2000;
TMass name;
char s1[20];
char s2[3];
char s3[3];
char s4[3];
InitialList (n,&name);
CreateList(&name);
addElem( 1,&name);
addElem(-1,&name);
int p=CheckIt(&name);
ShowList(p,&name);
getch();
readElem(1,&name,&s1,&s2,&s3,&s4);
p=CheckIt(&name);
ShowList(p,&name);
getch();
}