Umiestnenie súboru www.TrSek.com/c/evidenc.c// EVIDENC.C Copyright (c) TrSek alias Zdeno Sekerak
// Program eviduje polozky v databaze.
//
// Datum:28.05.96 http://www.trsek.com
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);
vycist(inv_a); /* toto nie velmi dobre */
farba(8,15);
gotoxy(12,21); cprintf("%30s",""); /* osetrenie obr. by sa nemalo miesat s alokaciami */
gotoxy(56,21); cprintf("%5s","");
gotoxy(14,22); cprintf("%10s","");
gotoxy(36,22); cprintf("%30s","");
gotoxy(13,23); cprintf("%20s","");
if ((*inv_a).pred!=inv_a)
free(inv_a); /* od-alokuj, ale len ked nieje posledny */
else vycist(p_pom); /* inac len ho zgumuj s NULL sa tazko pracuje */
return(p_pom); /* vrat smarnik na strukturu pred */
}
void farba ( int bor, int pap)
{
if (bor>0) 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;
}
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;