Program na tvorbu inventárneho zoznamu vecí

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategorija: Programy zos C, C++

Program: Sk.c
Subor exe: Sk.exe

Program na tvorbu inventárneho zoznamu vecí. Obsahuje položky Zaraď, Vyraď, Hľadaj, Utrieď, Otvor súbor, Invetár. V programe je použítý smerníkový zoznam. Nemá uloženie do súboru.
// SK.C                      Copyright (c) TrSek alias Zdeno Sekerak 
// Program je evidencia poloziek v jednoduchej databaze.
//
// Datum:28.05.96                               http://www.trsek.com
 
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
#include <stdlib.h>
#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);
}