// EVIDENC.C Copyright (c) TrSek alias Zdeno Sekerak // Program eviduje polozky v databaze. // // Datum:28.05.96 http://www.trsek.com #include #include #include #include #define main_p 6 #define find_p 5 char *main_m[]={"Hlavne menu "," 1. Zarad polozku "," 2. Vyrad polozku "," 3. Hladaj "," 4. O polozku vyssie "," 5. O polozku nizsie "," 6. Koniec "}; char *find_m[]={"Hladaj polozku podla:"," 1. Nazvu "," 2. Evidencneho cisla "," 3. Miestnosti "," 4. Zodpovedneho "," 5. Spat do menu "}; typedef struct INVENT { void *pred; char nazov[30]; int ev_cis; char miest[10]; char zodp[30]; char popis[20]; void *zani; } invent; void farba(int bord, int pap); /* nadefinuje farby */ int menu (char *main_m[],int pocet,int akt); /* zobrazi menu */ void rozluc_sa(int cely); /* rozluckova obrazovka */ invent *zarad (invent *inv_p); /* zaradi polozku do zoznamu */ invent *vyhod (invent *inv_p); /* vyjebe ju von */ invent *najdi_mi (invent *inv_p, char nazov[], int podla); /* hlada kam zaradit polozku, a ktory typ */ invent *najdi_mic (invent *inv_p, int ev_cis); /* to iste ako najdi_mi, ale pre cislo */ void zotried(invent *inv_p,int podla); /* zotriedi pole podla typu, nazov, miestnost */ invent *hladaj(invent *inv_p,int podla); /* hlada v zozname co si uzivatel zamane */ void roleta(invent *inv_p, invent *inv_a); /* zobrazi roletu zo vsetkych inventarov */ void aktualna (invent *inv_p); /* zobrazi aktualnu na obrazovku */ void sprava (char *oznam); /* vypise spravu pre uzivatela */ void vycist (invent *inv_p); /* vyplni medzerami, alebo nulami */ void podklad(void); /* podklad obrazovky */ void main() { invent *inv_p,*inv_a; /* prvy v zozname zacina pismenom A */ FILE *f,*fopen(); /* aktulany alebo tiez pomocny */ int i=0; inv_p=malloc(sizeof(invent)); /* alokuj prvy */ (*inv_p).pred=inv_p; /* nastav smerniky na cyklicky */ (*inv_p).zani=inv_p; /* pre prvy v zozname */ vycist(inv_p); inv_a=inv_p; /* aktualny prirad na prvy */ podklad(); i=1; while (i!=main_p) { if (inv_a==inv_p) inv_a=(*inv_p).zani; aktualna(inv_a); roleta(inv_p,inv_a); i=menu(main_m,main_p,i); switch (i) { case 0: i=main_p; /* budeme koncit */ break; case 1: inv_a=zarad(inv_p); break; case 2: inv_a=vyhod(inv_a); break; case 3: while ((i!=5) && (i!=0)) { i=menu(find_m,find_p,1); /* podla coho hladat */ aktualna(inv_a); if ((i>0) && (i<5)) { zotried(inv_p,i); /* zotriedi podla tej polozky */ roleta(inv_p,inv_a); inv_a=hladaj(inv_p,i); /* a konecne vyhlada */ aktualna(inv_a); /* vycmara na obrazovku */ roleta(inv_p,inv_a); /* ukaze vysledok */ } } /* of while */ i=1; break; case 4: inv_a=(*inv_a).pred; break; case 5: inv_a=(*inv_a).zani; break; case 6: break; default: sprava("Nespravny vyber nepoznam takyto prikaz."); } } /* of main while */ sprava("Posielas ma do ... Vies o tom !"); inv_a=(*inv_p).pred; /* odstrani vsetky alokacie */ while (inv_p!=(*inv_a).pred) inv_a=vyhod(inv_a); free(inv_a); rozluc_sa(1); } void vycist (invent *inv_p) { strcpy( (*inv_p).nazov,"" ); (*inv_p).ev_cis=0; strcpy( (*inv_p).miest,""); strcpy( (*inv_p).zodp,""); strcpy( (*inv_p).popis,""); } invent *najdi_mi (invent *inv_p, char nazov[], int podla) { invent *p_pom; p_pom=(*inv_p).zani; switch (podla) { case 1: while ((inv_p!=p_pom) && ( strcmp( (*p_pom).nazov,nazov)<0 )) p_pom=(*p_pom).zani; break; case 3: while ((inv_p!=p_pom) && ( strcmp( (*p_pom).miest,nazov)<0 )) p_pom=(*p_pom).zani; break; case 4: while ((inv_p!=p_pom) && ( strcmp( (*p_pom).zodp,nazov)<0 )) p_pom=(*p_pom).zani; break; } return(p_pom); } invent *najdi_mic (invent *inv_p, int ev_cis) { invent *p_pom; p_pom=(*inv_p).zani; while ((inv_p!=p_pom) && ( (*p_pom).ev_cis0) textbackground(bor); if (pap>0) textcolor(pap); } void rozluc_sa(int cely) { if (cely) { farba(8,15); clrscr(); } farba(1,14); gotoxy(1,1); cprintf(" Triedit ver. 1.xx, Software by Cuciacik alias Richard Dudas, Copyright (c) 1997"); farba(8,15); } int menu (char *main_m[],int pocet,int akt) { int i; char ch=0; rozluc_sa(0); for (i=pocet;i>=0;i--) { if (i==akt) farba(7,8); else farba(8,15); gotoxy(3,i+3); cprintf("%s",main_m[i]); } for (i=pocet+1;i<=10;i++) { farba(8,15); gotoxy(3,i+3); cprintf("%25s",""); } i=akt; while ((ch!=27) && (ch!=13)) { ch=getch(); if (ch==0) { farba(8,15); /* zrusi predchadzajuce oznacenie */ gotoxy(3,i+3); cprintf("%s",main_m[i]); ch=getch(); /* precita klaves */ if (ch==72) { /* Up */ i--; if (i<1) i=pocet; } if (ch==80) { /* Down */ i++; if (i>pocet) i=1; } farba(7,8); /* vykresli podla toho co zvolil */ gotoxy(3,i+3); cprintf("%s",main_m[i]); } } if (ch==13) return(i); else return(0); } void podklad ( void ) { farba(8,15); clrscr(); } void roleta(invent *inv_p, invent *inv_a) { invent *p_pom; int i=1; p_pom=inv_p; while (p_pom!=inv_a) { /* najdi ktora v poradi vlastne je */ p_pom=(*p_pom).zani; i++; } if (i>15) i=i-15; /* vojde sa na obrazovku ??? */ else i=0; p_pom=(*inv_p).zani; /* teraz nastav od ktorej vypisovat */ while (i!=0) { p_pom=(*inv_a).zani; i++; } i=1; farba(2,14); gotoxy(36,3);cprintf("Inventar Cis. Izba"); while (p_pom!=inv_p) { /* vypise prvych 15 okolo mojej */ i++; gotoxy(34,i+2); if (p_pom==inv_a) cprintf("> "); else cprintf(" "); gotoxy(36,i+2); cprintf("%-30s %5d %5s",(*p_pom).nazov,(*p_pom).ev_cis,(*p_pom).miest); p_pom=(*p_pom).zani; } farba(8,15); for (i=i+1;i<=15;i++) /* domaze obrazovku */ { gotoxy(34,i+2); cprintf(" %-30s %5s %5s","","",""); } } void aktualna (invent *inv_p) { int x,y; farba(1,14); for (x=2;x<=66;x++) for (y=18;y<=24;y++) { gotoxy(x,y);cprintf(" "); } gotoxy(3,18); cprintf("Evidencna karta inventara skladu"); gotoxy(3,20); cprintf("Smerniky = %p-%p",(*inv_p).pred,(*inv_p).zani); gotoxy(3,21); cprintf("Invetar: %30s Evid. cislo: %5s","",""); gotoxy(3,22); cprintf("Miestnost: %10s Zodpovedny:%30s","",""); gotoxy(3,23); cprintf("Poznamka: %20s",""); farba(7,8); gotoxy(14,20); cprintf("%p-%p",(*inv_p).pred,(*inv_p).zani); gotoxy(12,21); cprintf("%s",(*inv_p).nazov); gotoxy(56,21); cprintf("%5d",(*inv_p).ev_cis); gotoxy(14,22); cprintf("%10s",(*inv_p).miest); gotoxy(36,22); cprintf("%30s",(*inv_p).zodp); gotoxy(13,23); cprintf("%s",(*inv_p).popis); farba(8,15); } void sprava (char *oznam) { farba(4,14); gotoxy(2,25);cprintf("%8s%-54s%-16s"," Zle je:",oznam," Stlac medzeru."); while (getch()!=32); } int zamenit(invent *inv_a,invent *inv_b) { void *pom; pom=(*inv_a).zani; /* zamenim predchodcov */ (*inv_a).zani=(*inv_b).zani; (*inv_b).zani=pom; pom=inv_b; /* este upravim aby aj na ne ukazovali */ inv_b=(*inv_a).zani; (*inv_b).pred=inv_a; inv_b=pom; pom=inv_a; /* este upravim aby aj na ne ukazovali */ inv_a=(*inv_b).zani; (*inv_a).pred=inv_b; inv_a=pom; pom=(*inv_a).pred; /* upravim predchodcov */ (*inv_a).pred=(*inv_b).pred; (*inv_b).pred=pom; pom=inv_b; /* este upravim aby aj na ne ukazovali */ inv_b=(*inv_a).pred; (*inv_b).zani=inv_a; inv_b=pom; pom=inv_a; /* este upravim aby aj na ne ukazovali */ inv_a=(*inv_b).pred; (*inv_a).zani=inv_b; inv_a=pom; return(1); /* len indikator ze zamenil */ } void zotried(invent *inv_p,int podla) { int zmen=1; int zamen; invent *inv_a,*inv_b; while (zmen) { zmen=0; inv_a=(*inv_p).zani; inv_b=(*inv_a).zani; while (inv_b!=inv_p) { switch (podla) { case 1: if ( strcmp( (*inv_a).nazov,(*inv_b).nazov )>0 ) zmen=zamenit(inv_a,inv_b); break; case 2: if ( (*inv_a).ev_cis>(*inv_b).ev_cis ) zmen=zamenit(inv_a,inv_b); break; case 3: if ( strcmp( (*inv_a).miest,(*inv_b).miest )>0 ) zmen=zamenit(inv_a,inv_b); break; case 4: if ( strcmp( (*inv_a).zodp,(*inv_b).zodp )>0 ) zmen=zamenit(inv_a,inv_b); break; } inv_a=(*inv_a).zani; inv_b=(*inv_b).zani; } } } invent *hladaj(invent *inv_p,int podla) { invent *inv_a; void *pom; /* a kam ho mam odlozit, ked este chcem odalokovat */ inv_a=malloc( sizeof(inv_a) ); /* vyhradim mu priestor */ switch (podla) { /* zada podla ktorej polozky chce vyhladavat */ case 1: farba(8,15); /* najprv ju vyplni */ gotoxy(12,21); cprintf("%30s",""); gotoxy(12,21);scanf("%s",(*inv_a).nazov); /* zavola najdi a odlozi do pom vysledok */ pom=najdi_mi( inv_p, (*inv_a).nazov, podla ); break; case 2: farba(8,15); gotoxy(56,21); cprintf("%5s",""); gotoxy(56,21);scanf("%d",&(*inv_a).ev_cis); pom=najdi_mic( inv_p, (*inv_a).ev_cis ); break; case 3: farba(8,15); gotoxy(14,22); cprintf("%10s",""); gotoxy(14,22);scanf("%s",(*inv_a).miest); pom=najdi_mi( inv_p, (*inv_a).miest, podla ); break; case 4: farba(8,15); gotoxy(36,22); cprintf("%30s",""); gotoxy(37,22);scanf("%s",(*inv_a).zodp); pom=najdi_mi( inv_p, (*inv_a).zodp, podla ); break; } free(inv_a); /* nech nie je bordel, uz tak je dost velky v state */ return(pom); }