#include #include #include #include #include #define TREE struct tree #define Nv 20; TREE { char Name[50]; int m1,m2,m3,m4; int l; TREE *Ptr[20]; }; //***********************************************************// int main (void); char menu (void); void Creation_TREE (void); void Insert_record(void); void Print_Tree(void); void Delete_record(void); void Mod_marx(void); TREE *find_record(char Name[]); void push(TREE *ptr); TREE *pop (void); //******************************************************************// TREE *STACK[50]; TREE *ptr_Tre, *ptr_Trt, *Root; int st; //*****************************************************************// int main (void) { char c; do { clrscr(); c = menu(); switch (c) { case '1': Creation_TREE(); break; case '2': Insert_record(); break; case '3': Delete_record(); break; case '4': Mod_marx(); break; case '5': Print_Tree(); break; } } while (c != '6'); return 0; } char menu (void) { char c; printf("+------------------------------+\n"); printf("| 1. Fomirovani dereva |\n"); printf("| 2. Vklu4ni ver6ini |\n"); printf("| 3. Udalenie ver6ini. |\n"); printf("| 4. Izmenenie ocenok studenta.|\n"); printf("| 5. Pe4at' dereva |\n"); printf("| 6. EXIT. |\n"); printf("+------------------------------+\n"); c = getch(); window(1,1,80,25); clrscr(); return c; } //****************************************************************// void Creation_TREE (void) { int i, n, Nom; TREE *ptr_Tree[50]; FILE *fp; clrscr(); printf("Fomirovanie dereva :MISIS: \n"); if ((fp = fopen("indata.txt","r")) == NULL) { printf("Can't open file d:\\indata.txt, please check the path to the file!\n"); getch(); } fscanf(fp,"%d",&n); for (i=0; iName); fscanf(fp,"%d",&ptr_Trt->m1); fscanf(fp,"%d",&ptr_Trt->m2); fscanf(fp,"%d",&ptr_Trt->m3); fscanf(fp,"%d",&ptr_Trt->m4); fscanf(fp,"%d",&ptr_Trt->l); for (int j = 0; jl; j++) { fscanf(fp,"%d",&Nom); ptr_Trt->Ptr[j] = ptr_Tree[Nom-1]; } } fclose(fp); Root = ptr_Tree[0]; printf("Fomirovanie spiska zaver6eno."); getch(); } //******************************************************************// void Print_Tree (void) { int n,i,key; char c; TREE *ptr_Tr,*ptr_tre; push(Root); while (key!= 0) { clrscr(); printf("+----+--------------------+ \n"); ptr_tre=ptr_Trt; ptr_Trt = pop(); for (int j = 0; j < ptr_Trt->l; j++) { ptr_Tr=ptr_Trt->Ptr[j]; if(ptr_Tr->m1==0) printf("| %d | %-7s | ***** | \n",j+1,ptr_Tr->Name); else printf("| %d | %-7s | %d %d %d %d | \n",j+1,ptr_Tr->Name,ptr_Tr->m1,ptr_Tr->m2,ptr_Tr->m3,ptr_Tr->m4); } printf("+----+--------------------+ \n"); printf("Insert key ('0'-to EXIT): "); scanf("%d",&key); if(key>j || key<0) { printf("Takogo klu4a net"); break; } if(key==-1||key==1||key==2||key==3||key==4) { if(key==-1) push(ptr_tre); else push(ptr_Trt->Ptr[key-1]); }else push(Root); } printf("\n\n\n\n\n\n\n"); getch(); } //*******************************************************************// TREE *find_record (char Name[]) { TREE *ptr; push(Root); while (st != 0) { ptr = pop(); if (strcmp(ptr->Name,Name) == 0) { st = 0; return(ptr); } for (int k = 0; k <= ptr->l -1; k++) { push(ptr->Ptr[k]); } } return(NULL); } //*********************************************************************// void push(TREE *ptr) { STACK[st++] = ptr; } TREE *pop(void) { return STACK[--st]; } //*******************************************************************// void Insert_record (void) { char tmp, otr[50], rz[50]; int i=0; TREE *ptrX; clrscr(); window(1,1,47,25); printf("+-------------------+"); gotoxy(1,2);printf("| 1.Noviy faultet. |"); gotoxy(1,3);printf("| 2.Noviy kurs. |"); gotoxy(1,4);printf("| 3.Novaya gruppa. |"); gotoxy(1,5);printf("| 4.Novogo studenta.|\n"); printf("+-------------------+\n"); tmp=getch(); switch(tmp) { case '1': { ptrX = (TREE *)malloc(sizeof(TREE)); printf("Vv nazvanie novogo fakulteta: "); scanf("%s", ptrX->Name); ptrX->m1=0; ptrX->m2=0; ptrX->m3=0; ptrX->m4=0; ptrX->l = 0; Root->l++; Root->Ptr[Root->l-1] = ptrX; }; break; case '2': { TREE *ptr; char fak[20],kurs[20]; printf("Vv nazvanie fakulteta dlia vklu4eniya novogo kursa: "); scanf("%s",fak); ptr = find_record(fak); if(ptr == NULL) { printf("Takogo fakulteta net.\n"); getch(); return; } printf("Vv nomer novogo kursa: "); scanf("%s",kurs); if (strcmp(kurs,"3")==0) strcpy(kurs,"3kurs"); if (strcmp(kurs,"4")==0) strcpy(kurs,"4kurs"); if (strcmp(kurs,"5")==0) strcpy(kurs,"5kurs"); ptrX = (TREE *)malloc(sizeof(TREE)); strcpy(ptrX->Name,kurs); ptrX->m1=0; ptrX->m2=0; ptrX->m3=0; ptrX->m4=0; ptrX->l = 0; ptr->l++; ptr->Ptr[ptr->l-1] = ptrX; }; break; case '3': { TREE *ptr,*ptrA; char fak[20],kurs[20],group[20]; printf("Vv nazvanie fakulteta dlia vklu4eniya novoy gruppi: "); scanf("%s",fak); ptr = find_record(fak); if(ptr == NULL) { printf("Takogo fakulteta net."); getch(); return; } printf("Vv nomer kursa dlia vklu4eniya novoy gruppi: "); scanf("%s",kurs); if (strcmp(kurs,"1")==0) strcpy(kurs,"1kurs"); if (strcmp(kurs,"2")==0) strcpy(kurs,"2kurs"); if (strcmp(kurs,"3")==0) strcpy(kurs,"3kurs"); if (strcmp(kurs,"4")==0) strcpy(kurs,"4kurs"); if (strcmp(kurs,"5")==0) strcpy(kurs,"5kurs"); for(i=0;i<(ptr->l);i++) { if (strcmp(kurs,ptr->Ptr[i]->Name)==0) ptrA=ptr->Ptr[i]; } printf("Vv nazvanie gruppi: "); scanf("%s",group); ptrX = (TREE *)malloc(sizeof(TREE)); strcpy(ptrX->Name,group ); ptrX->m1= 0; ptrX->m2= 0; ptrX->m3= 0; ptrX->m4= 0; ptrX->l = 0; ptrA->l++; ptrA->Ptr[ptrA->l-1] = ptrX; }; break; case '4': { TREE *ptr; char group[20],name[20]; int m1,m2,m3,m4; printf("Vv nazvanie gruppi dlia vklu4eniya studenta: "); scanf("%s",group); ptr = find_record(group); if(ptr == NULL) { printf("Takoy gruppi net."); getch(); return; } printf("Vv imia novogo studenta: "); scanf("%s",name); ptrX = (TREE *)malloc(sizeof(TREE)); strcpy(ptrX->Name,name ); printf("Vv ocenki studenta: "); scanf("%d",&m1); scanf("%d",&m2); scanf("%d",&m3); scanf("%d",&m4); ptrX->m1=m1; ptrX->m2=m2; ptrX->m3=m3; ptrX->m4=m4; ptrX->l=0; ptr->l++; ptr->Ptr[ptr->l-1] = ptrX; }; break; } } //***********************************************************************// void Delete_record (void) { char father[20], son[20]; int i,j; TREE *ptrX,*ptr; clrscr(); printf("Vv star6uyu ver6inu dlia udaleniya: "); scanf("%s",father); ptr=find_record(father); if(ptr==NULL) { printf("Takoy ver6ini net."); getch(); return; } printf("Vvedite mlad6uyu ver6inu: "); scanf("%s",son); ptrX=find_record(son); if(ptrX==NULL) { printf("Takoy ver6ini net."); getch(); return; } for(i=0;il;i++) if(ptr->Ptr[i]==ptrX) j=i; ptr->l--; for(i=j;il;i++) ptr->Ptr[i]=ptr->Ptr[i+1]; } //*****************************************************************// void Mod_marx(void) { TREE *ptr; char stud[20]; int m1,m2,m3,m4; printf("Vv imia studenta dlia izmeneniya ocenok: "); scanf("%s",stud); ptr=find_record(stud); if(ptr==NULL) { printf("Takogo ne su6estvuet."); getch(); return; } printf("Vv novie ocenki: "); scanf("%d",&m1); scanf("%d",&m2); scanf("%d",&m3); scanf("%d",&m4); ptr->m1=m1; ptr->m2=m2; ptr->m3=m3; ptr->m4=m4; }