Program na rezerváciu dovolenkových pobytov pre ubytovacie zariadenia

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: Programy v C, C++

Program: Cestovka.cppCestovka.hRezerv.cppRezerv.hUbytuj.cppUbytuj.h
Súbor exe: Cestovka.exe
Potrebné: Define.hRezerv.datUbytovne.dat

Program na rezerváciu dovolenkových pobytov pre ubytovacie zariadenia. O dovolenkovom pobyte sú známe tieto udaje
  • jednoznačný identifikátor pobytu (celé číslo)
  • lokalita
  • typ ubytovania( chata, hotel, rodinný penzion)
  • počet miest
  • cena za lôžko/noc
  • rezervácia

Program umožnuje vyhľadávanie voľných pobytov v zadanej lokalite s počtom lôžok väčším alebo rovným ako zadané číslo a s cenou menšou alebo rovnou ako zadaná hodnota a rezerváciu pobytu a zrušenie rezervácie na vybraný pobyt. Na prezentáciu zoznamu pobytov je použitý spojkový zoznam a jednotlivé položky záznamov majú dynamickú veľkosť. Všetky záznamy sú uložené v súbore.

POZOR: Program si kladie za cieľ ukázať prácu so spojkovým zoznamom a súbormi. Nečakajte "vymakané" grafické rozhranie ani "myšoidné" ovládanie.
/* ========================================================================== */
/*                                                                            */
/*   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;
}