Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- typedef struct kniha {
- char sign[20], isbn[23], nazov[113], autori[113], preukaz[113];
- int datum;
- struct kniha *dalsi;
- int poradie;
- }KNIHA;
- void nacitanie(KNIHA **z, KNIHA *p, int *pocz) {
- FILE *fr;
- if ((fr = fopen("NASOBKY.TXT", "r")) == NULL) { printf("Zaznamy neboli nacitane\n"); exit (0); }
- int poc=0;
- char somarina[100];
- KNIHA *pz=*z, *akt;
- while (fgets(somarina, 100, fr) > 0)
- {
- ++poc;
- p = (KNIHA*)malloc(sizeof(KNIHA));
- fgets(p->sign, 20, fr);
- p->sign[strlen(p->sign)-1]='\0';
- fgets(p->isbn, 23, fr);
- p->isbn[strlen(p->isbn)-1]='\0';
- fgets(p->nazov, 113, fr);
- p->nazov[strlen(p->nazov)-1]='\0';
- fgets(p->autori, 113, fr);
- p->autori[strlen(p->autori)-1]='\0';
- fscanf(fr,"%d",&p->datum);
- getc(fr);
- fgets(p->preukaz, 113, fr);
- p->preukaz[strlen(p->preukaz)-1]='\0';
- p->poradie = poc;
- p->dalsi = NULL;
- if(pz==NULL)
- {
- pz=p;
- akt=p;
- }
- else
- {
- akt->dalsi=p;
- akt=p;
- }
- p = p->dalsi;
- }
- *pocz=poc;
- *z=pz;
- fclose(fr);
- }
- void vypis(KNIHA **z, KNIHA *p, int *pocz) {
- KNIHA *p1=*z;
- if (p1!=NULL){
- while (p1 != NULL) {
- printf("%d.\nsignatura: %s\nisbn: %s\nnazov: %s\nautori: %s\ndatum: %d\npreukaz: %s\n", p1->poradie, p1->sign, p1->isbn, p1->nazov, p1->autori, p1->datum, p1->preukaz);
- p1 = p1->dalsi;
- }
- }
- }
- void vypozicky(KNIHA **z, KNIHA *p, char ciskaz[]){
- int i=0;
- p = *z;
- if (p == NULL) printf("Pre dane cislo preukazu neevidujeme vypozicky\n");
- else {
- while(p != NULL){
- if (strcmp(p->preukaz,ciskaz)==0){
- ++i;
- printf("%d.\nsignatura: %s\nisbn: %s\nnazov: %s\nautori: %s\ndatum: %d\npreukaz: %s\n", i, p->sign, p->isbn, p->nazov, p->autori, p->datum, p->preukaz);
- }
- p = p->dalsi;
- }
- if (i==0) printf("Pre dane cislo preukazu neevidujeme vypozicky\n");
- }
- }
- void aktualizacia(KNIHA **z, KNIHA *p, int datus){
- p = *z;
- int pocet=0;
- if (p == NULL) printf("Aktualizovalo sa 0 zaznamov\n");
- else {
- while (p != NULL){
- if ((p->datum)<=(datus)){
- p->datum+=10000;
- ++pocet;
- }
- p=p->dalsi;
- }
- printf("Aktualizovalo sa %d zaznamov\n",pocet);
- }
- }
- void pridanie(KNIHA **z, KNIHA *p, int cislo){
- KNIHA *novy,*zacatek=*z,*pomocna;
- int i;
- novy=(KNIHA *)malloc(sizeof(KNIHA));
- if(novy == NULL)
- printf("Chyba pri alokovani");
- getchar();
- fgets(novy->sign, 113, stdin);
- novy->sign[strlen(novy->sign)-1]='\0';
- fgets(novy->isbn, 113, stdin);
- novy->isbn[strlen(novy->isbn)-1]='\0';
- fgets(novy->nazov, 113, stdin);
- novy->nazov[strlen(novy->nazov)-1]='\0';
- fgets(novy->autori, 113, stdin);
- novy->autori[strlen(novy->autori)-1]='\0';
- scanf("%d",&novy->datum);
- getchar();
- fgets(novy->preukaz, 113, stdin);
- novy->preukaz[strlen(novy->preukaz)-1]='\0';
- //novy->poradie=cislo;
- novy->dalsi=NULL;
- if(zacatek==NULL)
- {
- zacatek=novy;
- novy->poradie=1;
- }
- else{
- p = zacatek;
- if (cislo == p->poradie){
- novy->poradie=1;
- novy->dalsi=zacatek;
- zacatek=novy;
- for (pomocna=zacatek->dalsi;pomocna!=NULL;pomocna=pomocna->dalsi)
- pomocna->poradie+=1;
- }
- else{
- p = zacatek;
- if (cislo > p->poradie){
- for (i=1;i < cislo-1; i++){
- p=p->dalsi;
- }
- pomocna=p->dalsi;
- p->dalsi = novy;
- novy->dalsi=pomocna;
- for (pomocna=novy->dalsi;pomocna!=NULL;pomocna=pomocna->dalsi)
- pomocna->poradie+=1;
- }
- else
- {
- p = zacatek;
- while(p->dalsi!=NULL)
- {
- p = p->dalsi;
- }
- if(cislo>p->poradie){
- novy->poradie=p->poradie + 1;
- p->dalsi = novy;
- }
- }
- }
- }
- *z=zacatek;
- }
- void vymazanie(KNIHA **z, KNIHA *p, char vymaz[]){
- KNIHA *predch, *zac=*z,*pomocna, *pozicia;
- p=*z;
- if (p!=NULL){
- int i,pocet=0;
- char c;
- char poms1[100],poms2[100];
- for (i=0;i<strlen(vymaz);i++){
- c=toupper(vymaz[i]);
- sprintf(poms1+i,"%c",c);}
- poms1[i]='\0';
- while(p!=NULL)
- {
- for (i=0;i<strlen(p->autori);i++){
- c=toupper(p->autori[i]);
- sprintf(poms2+i,"%c",c);}
- if((strcmp(poms2,poms1)==0) || (strstr(poms2,poms1)!=NULL))
- {
- ++pocet;
- pozicia=p;
- if(p==zac)
- {
- zac=p->dalsi;
- free(p);
- p=p->dalsi;
- }
- else
- {
- predch->dalsi=p->dalsi;
- free(p);
- p=p->dalsi;
- }
- for (pomocna=pozicia;pomocna!=NULL;pomocna=pomocna->dalsi)
- pomocna->poradie-=1;
- }
- else
- {
- predch=p;
- p = p->dalsi;
- }
- }
- printf("Vymazalo sa %d zaznamov\n",pocet);
- *z=zac;
- }
- else printf("Vymazalo sa 0 zaznamov\n");
- }
- int main()
- {
- KNIHA *z1 = NULL, *p1 = NULL;
- int *pz=(int*)malloc(sizeof(int)),datumis,c1;
- char c,cpreukaz[100],vymaz[100];
- while ((c = getchar()) > 0) {
- if (c == 'n') { nacitanie(&z1, p1,pz); printf("Nacitalo sa %d zaznamov\n",*pz); }
- else
- if (c == 'v') vypis(&z1,p1,pz);
- else
- if (c == 'h') {scanf("%s",cpreukaz); vypozicky(&z1, p1, cpreukaz);}
- else
- if (c == 'a') {scanf("%d",&datumis); aktualizacia(&z1, p1, datumis);}
- else
- if (c == 'p') {scanf("%d",&c1); while(c1<=0) scanf("%d",&c1); pridanie(&z1,p1,c1);}
- else
- if (c == 'z') {getchar(); fgets(vymaz,100,stdin); vymaz[strlen(vymaz)-1]='\0'; vymazanie(&z1,p1,vymaz);}
- else
- if (c == 'k') { while ((p1 = z1) != NULL) {
- z1 = z1->dalsi;
- free (p1);
- }
- free (pz);
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement