Umiestnenie súboru www.TrSek.com/c/cestovka/cestovka.cpp
/* ========================================================================== */
/*                                                                            */
/*   Cestovka.cpp                     Copyright (c) TrSek alias Zdeno Sekerak */
/*   Datum:20.05.2005                                    http://www.trsek.com */
/*                                                                            */
/*   Description                                                              */
/*   Program na rezervaciu dovolenkovych pobytov pre ubytovacie zariadenia    */
/*                                                                            */
/*   O dovolenkovom pobyte su zname tieto udaje:                              */
/*    - jednonazcny identifikator pobytu (cele cislo),                        */
/*    - lokalita,                                                             */
/*    - typ ubytovania( chata, hotel, rodinny penzion),                       */
/*    - pocet miest,                                                          */
/*    - cena za lozko/noc,                                                    */
/*    - rezervacia.                                                           */
/*                                                                            */
/*  Program umoznuje vyhladavanie volnych pobytov v zadanej lokalite          */
/*  s poctom lozok vacsim alebo rovnym ako zadane cislo a s cenou mensou      */
/*  alebo rovnou ako zadana hodnota a rezervaciu pobytu a zrusenie rezervacie */
/*  na vybrany pobyt. Na prezentaciu zoznamu pobytov je pouzity spojkovy      */
/*  zoznam a jednotlive polozky zaznamov maju dynamicku velkost.              */
/*  Vsetky zaznamy su ulozene v subore.                                       */
/* ========================================================================== */

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#include "define.h"
#include "ubytuj.h"
#include "rezerv.h"

void Ubytovne();
void AddUbytovna();
void FindUbytovna();
void FindRezervacia();
void DeleteUbytovna();
void DeleteRezervacia();
void Rezervacie();
void Rezervuj();

char AnoNie(int typ);
char* mscanf();

Ubytuj ubt;
Rezerv rzv;
char ch;


// hlavny program
main()
{
  do{
    clrscr();
    ubt.Bar();
    rzv.Bar();

    printf("\n");
    printf("-------------\n");
    printf("1. Ubytovne\n");
    printf("2. Rezervacie\n");
    printf("0. Koniec\n");
    printf("-------------\n");
    printf("Zadaj volbu:");
    ch=getch();

    if(ch=='1') Ubytovne();
    if(ch=='2') Rezervacie();

  } while(ch!='0');

  return 0;
}


// praca s ubytovnami
void Ubytovne()
{
  do{
    clrscr();
    ubt.Bar();
    ubt.Show();

    printf("1. Pridat novu ubytovnu\n");
    printf("2. Zmazat aktualnu ubytovnu\n");
    printf("3. Hladat podla kriterii\n");
    printf("4. Rezervuj ubytovanie\n");
    printf("5. Prejdi na prvy\n");
    printf("6. Prejdi na predosly\n");
    printf("7. Prejdi na nasledovny\n");
    printf("8. Prejdi na posledny\n");
    printf("9. Hlavne menu\n\n");

    printf("Zadaj volbu:");
    ch=getch();

    if(ch=='1') AddUbytovna();
    if(ch=='2') DeleteUbytovna();
    if(ch=='3') FindUbytovna();
    if(ch=='4') Rezervuj();

    if(ch=='5') ubt.MoveFirst();
    if(ch=='6') ubt.MovePrev();
    if(ch=='7') ubt.MoveNext();
    if(ch=='8') ubt.MoveLast();

  } while(ch!='9');
}


// zisti ci na ubytovni nevysi rezervacia
// a polozi otravnu otazku ano/nie
void DeleteUbytovna(void)
{
  if( ubt.GetInt(6)!=0 )
  {
     printf("\nNa ubytovni je rezervacia, najprv zrus rezervaciu.\n");
     AnoNie(0);
  }
  else
  {
     printf("\nSi si isty ze mam zmazat ubytovnu?\n");
     if( AnoNie(1))
     ubt.Delete();
  }
}


// tak zrusim rezervaciu
void DeleteRezervacia()
{
  printf("\nSi si isty ze mam zmazat rezervaciu?\n");
  if( AnoNie(1))
  {
    // najprv v ubytovniach
    ubt.Find(0, 1, rzv.Get(2));
    ubt.OdRezervuj( rzv.GetInt(3));
    rzv.Delete();
    ubt.Find(-1, 0, "");
  }
}


// pridaj ubytovnu
void AddUbytovna()
{
  clrscr();
  ubt.AddNew();
  printf("Zadaj ubytovnu:\n\n");

  for( int i=1; i<ubt.GetPocetId(); i++ )
  {
    printf("%s:", ubt.GetName(i));
    ubt.Insert(i, mscanf());
  }
}


// hladanie podla kriterii
void FindUbytovna()
{
int  find_id;
char find_sign;
int  i;

  clrscr();
  ubt.Bar();
  ubt.Find(-1,0,"");    // najprv zrusi podmienku

  printf("\nZadaj podmienku pre\n");
  printf("-------------------\n");
  for( i=0; i<ubt.GetPocetId(); i++ )
     printf("%d. %s\n", i, ubt.GetName(i));
  printf("9. Hlavne menu - zrusit podmienku\n");
  printf("Zadaj volbu:");

  find_id = getch()-'0';
  if( find_id==9 ) return;

  printf("\n\nZadaj znamienko\n");
  printf("---------------\n");
  for( i=1; i<=6; i++ )
     printf("%d. %s\n", i, ubt.GetSign(i));
  printf("9. Hlavne menu - zrusit podmienku\n");
  printf("Zadaj volbu:");

  find_sign = getch()-'0';
  if( find_sign==9 ) return;

  // doplni posledny clanok a spusti podmienku
  printf("\n\nDokonci podmienku: %s %s ", ubt.GetName(find_id), ubt.GetSign(find_sign));
  ubt.Find(find_id, find_sign, mscanf());
}


// hladanie podla kriterii
void FindRezervacia()
{
int  find_id;
char find_sign;
int  i;

  clrscr();
  rzv.Bar();
  rzv.Find(-1,0,"");    // najprv zrusi podmienku

  printf("\nZadaj podmienku pre\n");
  printf("-------------------\n");
  for( i=0; i<rzv.GetPocetId(); i++ )
     printf("%d. %s\n", i, rzv.GetName(i));
  printf("9. Hlavne menu - zrusit podmienku\n");
  printf("Zadaj volbu:");
  
  find_id = getch()-'0';
  if( find_id==9 ) return;

  printf("\n\nZadaj znamienko\n");
  printf("---------------\n");
  for( i=1; i<=6; i++ )
     printf("%d. %s\n", i, rzv.GetSign(i));
  printf("9. Hlavne menu - zrusit podmienku\n");
  printf("Zadaj volbu:");
  
  find_sign = getch()-'0';
  if( find_sign==9 ) return;

  // doplni posledny clanok a spusti podmienku
  printf("\n\nDokonci podmienku: %s %s ", rzv.GetName(find_id), rzv.GetSign(find_sign));
  rzv.Find(find_id, find_sign, mscanf());
}


// menu rezervacie
void Rezervacie()
{
  do{
    clrscr();
    rzv.Bar();
    rzv.Show();

    // najdi a zobraz ubytovnu
    ubt.Find(0, 1, rzv.Get(2));
    ubt.Show(1);

    printf("1. Rezervuj ubytovanie\n");
    printf("2. Zrusit rezervaciu\n");
    printf("3. Hladat podla kriterii\n");
    printf("5. Prejdi na prvy\n");
    printf("6. Prejdi na predosly\n");
    printf("7. Prejdi na nasledovny\n");
    printf("8. Prejdi na posledny\n");
    printf("9. Hlavne menu\n\n");

    printf("Zadaj volbu:");
    ch=getch();

    if(ch=='1') Rezervuj();
    if(ch=='2') DeleteRezervacia();
    if(ch=='3') FindRezervacia();
    if(ch=='4') Rezervuj();

    if(ch=='5') rzv.MoveFirst();
    if(ch=='6') rzv.MovePrev();
    if(ch=='7') rzv.MoveNext();
    if(ch=='8') rzv.MoveLast();

  } while(ch!='9');

  // zrus podmienku
  ubt.Find(-1, 1, "");
}


// urobi rezervaciu
void Rezervuj(void)
{
int pocet;

  clrscr();
  printf("Rezervacia", ubt.GetPocet());
  ubt.Show();

  printf("Zadaj pocet miest ktore chces rezervovat:");
  pocet = atoi( mscanf());

  // kontrola
  if( pocet<= ubt.GetInt(5))
  {
     ubt.Rezervuj(pocet);

     // sekcia rezervacie
     rzv.AddNew();
     printf("Zadaj meno na ktore mam rezervovat:");
     rzv.Insert(1, mscanf());
     rzv.Insert(2, ubt.Get(0));    // id ubytovne
     rzv.Insert(3, ubt.ToStr(pocet));
  }
  else
  {
     printf("Tolko miest nieje volnych");
     getch();
     return;
  }
}


// cakam na klaves
char AnoNie(int typ)
{
  if( typ==0 )
  {
    printf("Stlac akykolvek klaves.");
    getch();
    return 0;
  }

  if( typ==1 )
  {
    printf("Vyber klaves [Ano/Nie]");
    while(( (ch=getch())!='a') && (ch!='A') && (ch!='n') && (ch!='N'));

    if((ch=='a') || (ch=='A'))
       return true;
  }

  return false;
}


// nahrada za scanf aby vedel citat cez medzery
char* mscanf()
{
int  x=0;
char text[MAX_STR];

  do {
    text[x++] = getchar();
  }
  while( text[x-1] != '\n');

  // takyto text
  text[x-1]='\0';
  return text;
}

Copyrigth by Zdeno Sekerak 2007, http://www.trsek.com