/*
 * dbknihy.c
 *
 * databaze knih
 *
 * L. Dvorak (D2), SOPMA 2002
 */
#include 
#include 
#include 
#include 
/* barvy pro zobrazeni na obrazovce */
#define ZLUTA textcolor(14)
#define BILA  textcolor(7)
/* cesta k databazovemu souboru */
#define SOUBOR "c:\\dbknihy\\knihy.txt"
/* cesta k pomocnemu tiskovemu souboru */
#define TSOUBOR "c:\\dbknihy\\tisk.txt"
/*
 * fr  - cteni z databaze
 * fpw - zapis, tiskovy soubor
 * fpr - cteni, tiskovy soubor
 *
 */
FILE *fr,*fpw,*fpr;
/* struktura zaznamu */
typedef struct {
  char nazevk[50];
  char autor[25];
  char naklad[25];
  int rokvyd;
  char isbn[20];
  float cena;
} KNIHA;
/* zobrazi na displayi zaznam databaze */
void zobraz(KNIHA display)
{
  int i;
  ZLUTA;
  cprintf("N zev:");
  BILA;
  printf(" %s\n",display.nazevk);
  ZLUTA;
  cprintf("Autor:");
  BILA;
  printf(" %s       ",display.autor);
  ZLUTA;
  cprintf("Nakladatelstv¥:");
  BILA;
  printf(" %s\n",display.naklad);
  ZLUTA;
  cprintf("Rok vyd n¥:");
  BILA;
  printf(" %d            ",display.rokvyd);
  ZLUTA;
  cprintf("ISBN:");
  BILA;
  printf(" %s            ",display.isbn);
  ZLUTA;
  cprintf("Cena:");
  BILA;
  printf(" %.2f K\n",display.cena);
  for (i=0;i<80;i++)
    printf("-");
}
/* ulozi zaznam do pomocneho tiskoveho souboru */
void tiskf(KNIHA printer)
{
  int i;
  /* ESC sekvence - tucne pismo - HP LaserJet */
  char bold[] = "G(s3B";
  /* ESC sekvence - konec tucneho pisma - HP LaserJet */
  char ebold[] = "H(s0B";
  
  fprintf(fpw,"%sN zev:%s",bold,ebold);
  fprintf(fpw," %s\n",printer.nazevk);
  fprintf(fpw,"%sAutor:%s",bold,ebold);
  fprintf(fpw," %s       ",printer.autor);
  fprintf(fpw,"%sNakladatelstv¥:%s",bold,ebold);
  fprintf(fpw," %s\n",printer.naklad);
  fprintf(fpw,"%sRok vyd n¥:%s",bold,ebold);
  fprintf(fpw," %d            ",printer.rokvyd);
  fprintf(fpw,"%sISBN:%s",bold,ebold);
  fprintf(fpw," %s            ",printer.isbn);
  fprintf(fpw,"%sCena:%s",bold,ebold);
  fprintf(fpw," %.2f K\n",printer.cena);
  for (i=0;i<77;i++)
    fprintf(fpw,"-");
  fprintf(fpw,"\n");
}
/* nacte zaznam z databazoveho souboru */
KNIHA cteniz(void)
{
  KNIHA aktz;
  fgets(aktz.nazevk,sizeof(aktz.nazevk),fr);
  /* odmaze ENTER na konci retezce */
  aktz.nazevk[strlen(aktz.nazevk)-1]='\0';
  fgets(aktz.autor,sizeof(aktz.autor),fr);
  aktz.autor[strlen(aktz.autor)-1]='\0';
  fgets(aktz.naklad,sizeof(aktz.naklad),fr);
  aktz.naklad[strlen(aktz.naklad)-1]='\0';
  fscanf(fr,"%d\n",&aktz.rokvyd);
  fgets(aktz.isbn,sizeof(aktz.isbn),fr);
  aktz.isbn[strlen(aktz.isbn)-1]='\0';
  fscanf(fr,"%f\n",&aktz.cena);
  return(aktz);
}
/* vytiskne pomocny tiskovy soubor na tiskarne */
void tisks (void)
{
  char radek[131];
  
  if (( fpr = fopen(TSOUBOR,"r")) == NULL) {
    printf("Soubor pro tisk se nepodarilo otevrit.\n");
    return;
  }
  while (fgets(radek,130,fpr) != NULL)
    fprintf(stdprn,"%s\r",radek);
  fclose(fpr);
}
/* prevede cestinu v retezci z malych na velka pismena */
char *czstrupr(char *Buffer)
{
  int i,j;
  char male[]="
 ¥¢£§Øåçìý";
  char velke[]="Þ¾ÖàéŒÕæíü";
  for (i=0; Buffer[i]; i++) {
    for (j=0;j
        Buffer[i] = velke[j];
    }
  }
  return Buffer;
}
int main (void)
{
KNIHA zaznam;
FILE *fw;
int c,d,e,i=0;
char hled[50],vpism[50];
do {
  clrscr();
  printf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n");
  printf("³ (V)lo§en¥ knihy ³\n");
  printf("³    (S)eznam     ³\n");
  printf("³  Vy(h)led v n¥  ³\n");
  printf("ÀÄÄÄ-Esc-konecÄÄÄÄÙ\n");
  c = getch();
  switch(c) {
    case 118:  /* v */
    case 86:   /* V */
      clrscr();
      printf("\nN zev: ");
      gets(zaznam.nazevk);
      printf("Autor: ");
      gets(zaznam.autor);
      printf("Nakladatelstv¥: ");
      gets(zaznam.naklad);
      printf("Rok vyd n¥: ");
      scanf("%d",&zaznam.rokvyd);
      printf("ISBN: ");
      scanf("%s",zaznam.isbn);
      printf("Cena: ");
      scanf("%f",&zaznam.cena);
      getc(stdin);
      fw = fopen(SOUBOR,"a");
      fprintf(fw,"%s\n",zaznam.nazevk);
      fprintf(fw,"%s\n",zaznam.autor);
      fprintf(fw,"%s\n",zaznam.naklad);
      fprintf(fw,"%d\n",zaznam.rokvyd);
      fprintf(fw,"%s\n",zaznam.isbn);
      fprintf(fw,"%.2f\n",zaznam.cena);
      fclose(fw);
    break;
    case 115:  /* s */
    case 83:   /* S */
      if (( fr = fopen(SOUBOR,"r")) == NULL) {
        printf("Soubor %s se nepodarilo otevrit.\n",SOUBOR);
        exit(1);
      }
      fpw = fopen(TSOUBOR,"w");
      while (!feof(fr)) {
        clrscr();
        for(i=0;i<6 && !feof(fr);i++) {
          zaznam = cteniz();
          zobraz(zaznam);
          tiskf(zaznam);
        }
        printf("Pro pokraov n¥ stisknØte libovolnou kl vesu");
        if (!feof(fr)) getch();
        i=0;
      }
      printf(", pro tisk T.");
      e = getch();
      if (e == 84 || e == 116) {
        fclose(fpw);
        tisks();
      }
      fclose(fr);
    break;
    case 104:  /* h */
    case 72:   /* H */
      do {
        clrscr();
        printf("Podle (n) zvu\n");
        printf("Podle (a)utora\n");
        d = getch();
        switch(d) {
          case 110:  /* n */
          case 78:   /* N */
            printf("\nHledanì n zev: ");
            gets(hled);
            if (( fr = fopen(SOUBOR,"r")) == NULL) {
              printf("Soubor %s se nepodarilo otevrit.\n",SOUBOR);
              exit(1);
            }
            fpw = fopen(TSOUBOR,"w");
            clrscr();
            i=0;
            while (!feof(fr)) {
              zaznam = cteniz();
              strcpy(vpism,zaznam.nazevk);
              /* v obou porovnavanych retezcich jsou nejprve
               * prevedeny ceska pismena na velka
               */
              czstrupr(hled);
              czstrupr(vpism);
              /* a pote i ostatni pismena */
              if (strstr(strupr(vpism),strupr(hled))) {
                zobraz(zaznam);
                /* vybrana data se ukladaji souboru,
                 * ktery je mozne dle prani vytisknout
                 */
                tiskf(zaznam);
                i++;
              }
              if (i == 6 || feof(fr)) {
                printf("Pro pokraov n¥ stisknØte libovolnou kl vesu");
                getch();
                if (!feof(fr))
                  clrscr();
                i=0;
              }
            }
            printf(", pro tisk T.");
            e = getch();
            if (e == 84 || e == 116) {
              fclose(fpw);
              /* tisk souboru s vybranymi daty */
              tisks();
            }
            fclose(fr);
          break;
          case 97:  /* a */
          case 65:  /* A */
            printf("\nHledanì autor: ");
            gets(hled);
            if (( fr = fopen(SOUBOR,"r")) == NULL) {
              printf("Soubor %s se nepodarilo otevrit.\n",SOUBOR);
              exit(1);
            }
            fpw = fopen(TSOUBOR,"w");
            clrscr();
            i=0;
            while (!feof(fr)) {
              zaznam = cteniz();
              strcpy(vpism,zaznam.autor);
              /* v obou porovnavanych retezcich jsou nejprve
               * prevedeny ceska pismena na velka
               */
              czstrupr(hled);
              czstrupr(vpism);
              /* a pote i ostatni pismena */              
              if (strstr(strupr(vpism),strupr(hled))) {
                zobraz(zaznam);
                /* vybrana data se ukladaji souboru,
                 * ktery je mozne dle prani vytisknout
                 */
                tiskf(zaznam);
                i++;
              }
              if (i == 6 || feof(fr)) {
                printf("Pro pokraov n¥ stisknØte libovolnou kl vesu");
                getch();
                if (!feof(fr))
                  clrscr();
                i=0;
              }
            }
            printf(", pro tisk T.");
            e = getch();
            if (e == 84 || e == 116) {
              fclose(fpw);
              /* tisk souboru s vybranymi daty */              
              tisks();
            }
            fclose(fr);
          break;
        }
      /* pokud je stisknut Esc, ukonci cyklus */
      } while (d != 27);
    break;
  }
/* pokud je stisknut Esc, ukonci cyklus */
} while (c != 27);
}
Maturita.cz - referát (verze pro snadný tisk)
http://www.maturita.cz/referaty/referat.asp?id=4882