// SK.C Copyright (c) TrSek alias Zdeno Sekerak // Program je evidencia poloziek v jednoduchej databaze. // // Datum:28.05.96 http://www.trsek.com #include #include #include #include #include #include "sk.h" int main(void) { int *pos; zoznam *zac=NULL,*kon=NULL; char *menu[]={"Zarad","Vyrad","Hladaj","Utried","Otvor","Inventar","Koniec",NULL}; zaciatok(); do { pos=okno(1,1,25,9,menu); switch(*pos) { case -1: return(0); case Zarad : zarad(&zac,&kon); break; case Vyrad : vyrad(&zac,&kon); break; case Hladaj : *pos=2; hladaj(zac); *pos=3; break; case Utried : utried(&zac,&kon); break; case Otvor : otvor(&zac,&kon); break; case Inventar : vypis(zac); break; case Koniec: return(0); } *pos=*pos+1; }while(*pos!=(-1)); return(0); } void zaciatok(void) { _setcursortype(0); window(1,1,80,25); textbackground(BLACK); textcolor(WHITE); clrscr(); } int *okno(int x1,int y1,int x2,int y2,char **m) { int x=0,y=2; int c; static int pos=2; window(x1,y1,x2,y2); textbackground(WHITE); textcolor(BLACK); clrscr(); ramcek(x1,y1,x2,y2); while(m[x]!=NULL) { gotoxy(2,(y++)); cprintf(m[x++]); } gotoxy(2,pos); textbackground(RED); cprintf(m[pos-2]); do { c=getch(); if(c==13) { pos=pos-1; return(&pos); } if(c==27) { pos=(-1); return(&pos); //ak stlaci escape vrati -1 } if(c==0) { c=getch(); if(c==72 || c==80) { textbackground(WHITE); gotoxy(2,pos); cprintf(m[pos-2]); } textbackground(RED); if((c==80) && (pos<=(x+1))) { pos=pos+1; if (pos>(x+1)) pos=2; gotoxy(2,pos); cprintf(m[pos-2]); } if((c==72) && (pos>=2)) { pos=pos-1; if(pos<2) pos=(x+1); gotoxy(2,pos); cprintf(m[pos-2]); } } }while(c!=27); pos=pos-1; return(&pos); } void ramcek(int x1,int y1,int x2,int y2) { int x=0; x2=x2-x1; y2=y2-y1+1; x1=1; y1=1; gotoxy(x2+1,y2); cprintf("¼"); gotoxy(1,1); insline(); gotoxy(x1,y1); cprintf("É"); gotoxy(x2+1,y1); cprintf("»"); gotoxy(x1,y2); cprintf("È"); gotoxy(1,2); for(x=(x1+1);x<=x2;x++) { gotoxy(x,y1); cprintf("Í"); gotoxy(x,y2); cprintf("Í"); } for(x=(y1+1);x<=(y2-1);x++) { gotoxy(x1,x); cprintf("º"); gotoxy(x2+1,x); cprintf("º"); } } void zavri(int x1,int y1,int x2,int y2) { textbackground(BLACK); window(x1,y1,x2,y2); clrscr(); } int otvor(zoznam **zac,zoznam **kon) { FILE *sub; zoznam *pom,*k; char msub[13]; int x=0; char poloz[20]; window(40,1,67,3); farby(); ramcek(40,1,67,3); gotoxy(2,2); cprintf("Zadaj subor:"); gotoxy(14,2); textbackground(GREEN); cprintf(" "); gotoxy(14,2); nacitaj(msub,13); if((strcmp(msub,'\0'))==0) { zavri(40,1,67,3); return(0); } if((sub=fopen(msub,"r"))==NULL) { subor("Subor sa neda otvorit!"); return(0); } while((fscanf(sub,"%s",poloz))!=(-1)) { if(x==0) { (*zac)=(zoznam *) malloc(sizeof(zoznam)); (*zac)->pred=NULL; strcpy((*zac)->polozka,poloz); fscanf(sub,"\t%d\t%s\t%s\t%s\n\r",&((*zac)->cislo),(*zac)->miestnost,(*zac)->meno,(*zac)->popis); } if(x==1) { pom=(zoznam *) malloc(sizeof(zoznam)); strcpy(pom->polozka,poloz); fscanf(sub,"\t%d\t%s\t%s\t%s\n\r",&(pom->cislo),pom->miestnost,pom->meno,pom->popis); pom->nasl=NULL; (*zac)->nasl=pom; pom->pred=(*zac); } if(x>1) { k=(zoznam *) malloc(sizeof(zoznam)); strcpy(k->polozka,poloz); fscanf(sub,"\t%d\t%s\t%s\t%s\n\r",&(k->cislo),k->miestnost,k->meno,k->popis); k->pred=pom; k->nasl=NULL; pom->nasl=k; pom=k; } x++; } if(x==1) { (*zac)->pred=*zac; (*zac)->nasl=*zac; *kon=*zac; zavri(40,1,67,3); pom=(zoznam *) malloc(sizeof(zoznam)); pom=*zac; vypis(pom); return(0); } pom->nasl=(*zac); (*zac)->pred=pom; *kon=pom; zavri(40,1,67,3); pom=*zac; vypis(pom); return(0); } void farby(void) { textcolor(BLACK); textbackground(WHITE); clrscr(); } int zarad(zoznam **zac,zoznam **kon) { char polozka[20],miestnost[20],pracovnik[20],popis[20],cisl[7]; int cislo,u; zoznam *pom,*p; menu(); gotoxy(16,2); nacitaj(polozka,20); if((strcmp(polozka,'\0'))==0) { zavri(1,14,65,22); return(0); } gotoxy(55,2); nacitaj(cisl,5); if((strcmp(cisl,'\0'))==0) { zavri(1,14,65,22); return(0); } while(kontrola(cisl,&cislo)!=1) { gotoxy(55,2); nacitaj(cisl,7); } gotoxy(16,4); nacitaj(miestnost,20); if((strcmp(miestnost,'\0'))==0) { zavri(1,14,65,22); return(0); } gotoxy(16,6); nacitaj(pracovnik,20); if((strcmp(pracovnik,'\0'))==0) { zavri(1,14,65,22); return(0); } gotoxy(16,8); nacitaj(popis,20); if((strcmp(popis,'\0'))==0) { zavri(1,14,65,22); return(0); } if((*zac)==NULL) { pom=(zoznam *) malloc(sizeof(zoznam)); *zac=pom; strcpy((*zac)->polozka,polozka); (*zac)->cislo=cislo; strcpy((*zac)->miestnost,miestnost); strcpy((*zac)->meno,pracovnik); strcpy((*zac)->popis,popis); (*zac)->nasl=(*zac); (*zac)->pred=(*zac); *kon=*zac; zavri(1,14,65,22); return(0); } p=(zoznam *) malloc(sizeof(zoznam)); strcpy(p->polozka,polozka); p->cislo=cislo; strcpy(p->miestnost,miestnost); strcpy(p->meno,pracovnik); strcpy(p->popis,popis); p->nasl=(*zac); p->pred=(*kon); (*kon)->nasl=p; *kon=p; zavri(1,14,65,22); return(0); } void nacitaj(char *ret,int x) { char c; int poc=0; _setcursortype(_NORMALCURSOR); while((c=getch())!='\r' && c!=27 && poc!=x) { if(c!='\r' && c!=8) { ret[poc]=c; cprintf("%c",c); } if(c==8) { poc=poc-2;; cprintf("%c",c); } poc++; } if(c==27) ret[0]='\0'; else ret[poc]='\0'; _setcursortype(_NOCURSOR); } void subor(char *m) { window(40,1,67,3); farby(); ramcek(40,1,67,3); gotoxy(2,2); cprintf("%s",m); getch(); zavri(40,1,67,3); } int vypis(zoznam *zac) { zoznam *pom; int pos=2; if(zac==NULL) { subor("Prazdny zoznam!"); return(0); } pom=zac; window(10,5,80,20); farby(); ramcek(10,5,80,20); do { gotoxy(2,pos); pos++; if(zac->nasl==zac) { cprintf("%s %d %s %s %s",pom->polozka,pom->cislo,pom->miestnost,pom->meno,pom->popis); getch(); zavri(10,5,80,20); return(0); } cprintf("%s %d %s %s %s",pom->polozka,pom->cislo,pom->miestnost,pom->meno,pom->popis); pom=pom->nasl; }while(pom!=zac); getch(); zavri(10,5,80,20); return(0); } int vyrad(zoznam **zac,zoznam **kon) { char polozka[20]; zoznam *pom,*p,*k; int u,x=0; pom=*zac; if(pom==NULL) { zavri(40,1,75,3); subor("Prazdny zoznam!"); return(0); } window(40,1,75,3); farby(); ramcek(40,1,75,3); gotoxy(2,2); cprintf("Zadaj polozku:"); gotoxy(16,2); textbackground(GREEN); cprintf(" "); gotoxy(16,2); nacitaj(polozka,20); if((strcmp(polozka,'\0'))==0) { zavri(40,1,75,3); return(0); } while((u=strcmp((pom->polozka),polozka))!=0) { pom=pom->nasl; if(pom==(*zac)) { zavri(40,1,75,3); subor("Dana polozka neexistuje!"); return(0); } } if((pom->nasl==pom)) { *zac=NULL; zavri(40,1,75,3); subor("Prazdny zoznam!"); return(0); } if(pom==(*zac)) { p=pom->nasl; p->pred=*kon; (*kon)->nasl=p; *zac=p; x=1; } if(pom==(*kon)) { p=(*kon)->pred; p->nasl=*zac; (*zac)->pred=p; *kon=p; x=1; } if((pom!=(*zac)) && (pom!=(*kon) && x==0)) { p=pom->pred; k=pom->nasl; p->nasl=k; k->pred=p; } zavri(40,1,75,3); return(0); } int hladaj(zoznam *zac) { int *pos; char *menu[]={ "Polozka","Cislo","Miestnost","Meno","Popis",NULL }; if(zac==NULL) { subor("Prazdny zoznam"); return(0); } pos=okno(8,6,28,12,menu); switch(*pos) { case -1: zavri(8,6,28,12) ; return(0); case 1: hinv(zac); break; case 2: hcis(zac); break; case 3: hmies(zac); break; case 4: hmeno(zac); break; case 5: hpop(zac); break; } zavri(8,6,28,12); return(0); } int hinv(zoznam *zac) { char polozka[21]; zoznam *pom; int u; window(40,5,78,7); farby(); ramcek(40,5,78,7); gotoxy(2,2); cprintf("Hladana polozka:"); gotoxy(19,2); textbackground(GREEN); _setcursortype(_NORMALCURSOR); cprintf(" "); gotoxy(19,2); nacitaj(polozka,20); _setcursortype(_NOCURSOR); if((strcmp(polozka,'\0'))==0) { zavri(40,5,78,7); return(0); } pom=zac; zavri(40,5,78,7); while((u=strcmp(pom->polozka,polozka))!=0) { pom=pom->nasl; if(pom==zac) { subor("Neexistujuca polozka!"); return(0); } } menu(); vp(pom); return(0); } int hcis(zoznam *zac) { int cislo; char cisl[5]; zoznam *pom; window(40,5,62,7); farby(); ramcek(40,5,62,7); gotoxy(2,2); cprintf("Hladane cislo:"); gotoxy(17,2); textbackground(GREEN); _setcursortype(_NORMALCURSOR); cprintf(" "); gotoxy(17,2); nacitaj(cisl,5); if((strcmp(cisl,'\0'))==0) { zavri(1,12,65,20); return(0); } while(kontrola(cisl,&cislo)!=1) { gotoxy(17,2); nacitaj(cisl,7); } _setcursortype(_NOCURSOR); pom=zac; zavri(40,5,62,7); while((pom->cislo)!=cislo) { pom=pom->nasl; if(pom==zac) { rewind(stdin); subor("Neexistujuca polozka!"); return(0); } } menu(); rewind(stdout); vp(pom); return(0); } void menu(void) { window(1,14,65,22); farby(); ramcek(1,14,65,22); gotoxy(2,2); cprintf("Nazov polozky:"); gotoxy(39,2); cprintf("Evidencne cislo:"); gotoxy(2,4); cprintf("Miestnost :"); gotoxy(2,6); cprintf("Pracovnik :"); gotoxy(2,8); cprintf("popis :"); textbackground(GREEN); gotoxy(16,2); cprintf(" "); gotoxy(55,2); cprintf(" "); gotoxy(16,4); cprintf(" "); gotoxy(16,6); cprintf(" "); gotoxy(16,8); cprintf(" "); } void vp(zoznam *pom) { gotoxy(16,2); cprintf("%s",pom->polozka); gotoxy(55,2); cprintf("%d",pom->cislo); gotoxy(16,4); cprintf("%s",pom->miestnost); gotoxy(16,6); cprintf("%s",pom->meno); gotoxy(16,8); cprintf("%s",pom->popis); getch(); zavri(1,14,65,22); } int hmies(zoznam *zac) { char miestnost[21]; zoznam *pom; int u; window(40,5,80,7); farby(); ramcek(40,5,80,7); gotoxy(2,2); cprintf("Hladana miestnost:"); gotoxy(21,2); textbackground(GREEN); _setcursortype(_NORMALCURSOR); cprintf(" "); gotoxy(21,2); nacitaj(miestnost,20); _setcursortype(_NOCURSOR); if((strcmp(miestnost,'\0'))==0) { zavri(40,5,80,7); return(0); } pom=zac; zavri(40,5,80,7); while((u=strcmp(pom->miestnost,miestnost))!=0) { pom=pom->nasl; if(pom==zac) { subor("Neexistujuca polozka!"); return(0); } } menu(); vp(pom); return(0); } int hmeno(zoznam *zac) { char meno[21]; zoznam *pom; int u; window(40,5,75,7); farby(); ramcek(40,5,75,7); gotoxy(2,2); cprintf("Hladane meno:"); gotoxy(16,2); textbackground(GREEN); _setcursortype(_NORMALCURSOR); cprintf(" "); gotoxy(16,2); nacitaj(meno,20); _setcursortype(_NOCURSOR); if((strcmp(meno,'\0'))==0) { zavri(40,5,75,7); return(0); } pom=zac; zavri(40,5,75,7); while((u=strcmp(pom->meno,meno))!=0) { pom=pom->nasl; if(pom==zac) { subor("Neexistujuca polozka!"); return(0); } } menu(); vp(pom); return(0); } int hpop(zoznam *zac) { char popis[21]; zoznam *pom; int u; window(40,5,76,7); farby(); ramcek(40,5,76,7); gotoxy(2,2); cprintf("Hladany popis:"); gotoxy(17,2); textbackground(GREEN); _setcursortype(_NORMALCURSOR); cprintf(" "); gotoxy(17,2); nacitaj(popis,20); _setcursortype(_NOCURSOR); if((strcmp(popis,'\0'))==0) { zavri(40,5,76,7); return(0); } pom=zac; zavri(40,5,76,7); while((u=strcmp(pom->popis,popis))!=0) { pom=pom->nasl; if(pom==zac) { subor("Neexistujuca polozka!"); return(0); } } menu(); vp(pom); return(0); } int kontrola(char *cisl,int *cislo) { int x=0; while(cisl[x]!='\0') { if((cisl[x]!='0') && (cisl[x]!='1') && (cisl[x]!='2') && (cisl[x]!='3') && (cisl[x]!='4') && (cisl[x]!='5') && (cisl[x]!='6') && (cisl[x]!='7') && (cisl[x]!='8') && (cisl[x]!='9')) return(0); x++; } if(x==5) { if((cisl[0]!='1') && (cisl[0]!='2') && (cisl[0]!='3')) return(0); if((cisl[1]!='0') && (cisl[1]!='1') && (cisl[1]!='2')) return(0); if((cisl[2]!='0') && (cisl[2]!='1') && (cisl[2]!='2') && (cisl[2]!='3') && (cisl[2]!='4') && (cisl[2]!='5') && (cisl[2]!='6') && (cisl[2]!='7')) return(0); if((cisl[3]!='0') && (cisl[3]!='1') && (cisl[3]!='2') && (cisl[3]!='3') && (cisl[3]!='4') && (cisl[3]!='5') && (cisl[3]!='6')) return(0); if((cisl[4]!='0') && (cisl[4]!='1') && (cisl[4]!='2') && (cisl[4]!='3') && (cisl[4]!='4') && (cisl[4]!='5') && (cisl[4]!='6') && (cisl[4]!='7')) return(0); } *cislo=atoi(cisl); return(1); } int utried(zoznam **zac,zoznam **kon) { zoznam *pom,*pom1,*pp1,*pp2,*z,*k; int x; pom=*zac; do { pom1=*zac; x=0; do { if((strcmp(pom->polozka,pom1->polozka))>0) { if(pom==(*zac) && pom1==(*kon) && x!=1) { *kon=pom1->pred; *zac=pom1; } if(pom==*zac && x!=1) { z=(*zac)->nasl; pp1=pom->pred; // delete2 pp2=pom->nasl; pp1->nasl=pom->nasl; pp2->pred=pom->pred; pp1=pom1->pred; // insert2 pom1=pp1; pp2=pom1->nasl; pom->pred=pp1->pred; pom->nasl=pom1->nasl; pom1->nasl=pom; pp1->pred=pom; *zac=z; x=1; } if(pom==(*kon) && x!=1) { k=pom->pred; pp1=pom->pred; // delete2 pp2=pom->nasl; pp1->nasl=pom->nasl; pp2->pred=pom->pred; pp1=pom1->pred; // insert2 pom1=pp1; pp2=pom1->nasl; pom->pred=pp1->pred; pom->nasl=pom1->nasl; pom1->nasl=pom; pp1->pred=pom; (*kon)=k; x=1; } /* if(pom1==(*zac) && x!=1) { pp1=pom->pred; // delete2 pp2=pom->nasl; pp1->nasl=pom->nasl; pp2->pred=pom->pred; pp1=pom1->pred; // insert2 pom1=pp1; pp2=pom1->nasl; pom->pred=pp1->pred; pom->nasl=pom1->nasl; pom1->nasl=pom; pp1->pred=pom; (*zac)=pom; x=1; } */ if((pom!=(*zac)) && (pom!=(*kon)) && (pom1!=(*zac) && x!=1)) { pp1=pom->pred; // delete2 pp2=pom->nasl; pp1->nasl=pom->nasl; pp2->pred=pom->pred; pp1=pom1->pred; // insert2 pom1=pp1; pp2=pom1->nasl; pom->pred=pp1->pred; pom->nasl=pom1->nasl; pom1->nasl=pom; pp1->pred=pom; x=1; } } if(x==1) break; pom1=pom1->nasl; }while(pom1!=(*zac)); pom=pom->nasl; }while(pom!=(*zac)); return(0); }