Регистрация постояльцев в гостинице

Разработка информационной системы для регистрации постояльцев в гостинице с использованием структур данных и алгоритмов. Методы хеширования и сортировки данных. Обходы бинарных деревьев. Линейный однонаправленный список. Описание и тестирование программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.03.2014
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

find_numbers (Tree->Right_Child, Number, status, CountFreeBads, key);

}

}

Hastable. h

/**********************************************

Работа с хеш-таблицей

функциональность: работа с информацией о постояльцах

***********************************************/

// структура элемента хеш-таблицы

struct NodeHash{

char passport [12];

char fio [100];

int birthdayyear;

char adress [300];

char target [300];

struct NodeHash *next;

};

int hash (char *); // вычисление хеш-функции

void add_hash_element (struct NodeHash **, struct NodeHash *, int); // добавление элемента в хеш-таблицу

void del_hash_element (struct NodeHash **,char *, int); // удаление элемента из хеш-таблицы

void view_hash_elements (struct NodeHash **); // просмотр всех элементов хеш-таблицы

void clear_hash_table (struct NodeHash **); // очистка хеш-таблицы

void findfio_hash_table (struct NodeHash **,char *); // поиск в хеш-таблице по ФИО

void findpassport_hash_table (struct NodeHash **, char *, struct element *); // поиск в хеш-таблице по паспорту и вывод результатов по таблице и списку

int find_repeats (struct NodeHash **, int, char *); // поиск совпадений номеров паспортов в таблице при попытке добавить нового постояльца

void printsk (char *,.);

hashtable. cpp

#define _CRT_SECURE_NO_WARNINGS

#include<string. h>

#include<stdlib. h>

#include "hashtable. h"

#include "registration. h"

// -----------------------------------------

/*вычисление хеш-функции (метод деления) */

int hash (char *passport)

{

int intpas,k=0;

char tmp [10];

for (int i=0; i<11; i++)

if (i==4) continue;

else

{tmp [k] =* (passport+i);

k++;

}

intpas=atoi (tmp);

return (intpas % 97);

}

// -----------------------------------------

/* Добавление нового элемента в хеш таблицу. */

void add_hash_element (struct NodeHash **hashtable, struct NodeHash *pv, int hashkey)

{

if ( (* (hashtable+hashkey)) - >birthdayyear==0) // если по данному ключу элементов нет

{

strcpy ( (* (hashtable+hashkey)) - >adress,pv->adress);

(* (hashtable+hashkey)) - >birthdayyear=pv->birthdayyear;

strcpy ( (* (hashtable+hashkey)) - >fio,pv->fio);

strcpy ( (* (hashtable+hashkey)) - >passport,pv->passport);

strcpy ( (* (hashtable+hashkey)) - >target,pv->target);

(* (hashtable+hashkey)) - >next=0;

}

else // добавляем в начало списка

{

NodeHash *hashtableitem;

hashtableitem= (* (hashtable+hashkey));

(* (hashtable+hashkey)) =pv;

pv->next=hashtableitem;

}

}

// -----------------------------------------

/* Удаление элемента из хеш-таблицы. */

void del_hash_element (struct NodeHash **hashtable, char *passport, int hashkey)

{

int level=0;

NodeHash *p,*p1,*p2;

p= (* (hashtable+hashkey));

while (p! =0)

{

if (strcmp (p->passport,passport) ==0) // проверяем совпадение заданного ключа и значения в таблице

{

if ( (level==0) && (p->next==0)) // первый и единственный элемент

{

strcpy ( (* (hashtable+hashkey)) - >adress,"\0");

(* (hashtable+hashkey)) - >birthdayyear=0;

strcpy ( (* (hashtable+hashkey)) - >fio,"\0");

(* (hashtable+hashkey)) - >next=0;

strcpy ( (* (hashtable+hashkey)) - >passport,"0000-000000");

strcpy ( (* (hashtable+hashkey)) - >target,"\0");

}

else if ( (level! =0) && (p->next==0)) // последний элемент

{

free (p);

p1->next=0;

}

else if ( (level==0) && (p->next! =0)) // первый элемент

{

p2=p;

p=p->next;

free (p2);

}

else if ( (level! =0) && (p->next! =0)) // в середине списка

{

p1->next=p->next;

free (p);

}

printsk ("\nУдаление завершено. ");

return;

}

p1=p;

p=p->next;

level++;

}

printsk ("\nПостояльца с таким паспортом не найдено!");

}

// -----------------------------------------

/* Просмотр элементов хеш-таблицы */

void view_hash_elements (struct NodeHash **hashtable)

{

NodeHash *p;

int count=0;

for (int i=0; i<97; i++)

{

p=* (hashtable+i);

while (strcmp (p->passport,"0000-000000")! =0)

{

printsk ("№ паспорта: %s\nФИО: %s\nГод рождения: %i\nАдрес: %s\nЦель прибытия: %s\n\n",p->passport,p->fio,p->birthdayyear,p->adress,p->target);

count++;

if (p->next==0) break;

p=p->next;

}

}

if (count==0) printsk ("\nДанные отсутсвуют");

}

// -----------------------------------------

/* Очистка хеш-таблицы */

void clear_hash_table (struct NodeHash **hashtable)

{

NodeHash *p,*p1,*p2;

int level=0;

for (int i=0; i<97; i++)

{

p= (* (hashtable+i));

level=0;

if (p->next==0 && p->birthdayyear! =0) // если элемент единственный

{

strcpy (p->adress,"\0");

p->birthdayyear=0;

strcpy (p->fio,"\0");

strcpy (p->passport,"0000-000000");

strcpy (p->target,"\0");

continue;

}

else

{

p2=p->next;

while (p2! =0)

{

if (level==0)

{

strcpy (p->adress,"\0");

p->birthdayyear=0;

strcpy (p->fio,"\0");

strcpy (p->passport,"0000-000000");

strcpy (p->target,"\0");

p->next=0;

level++;

}

else

{

p1=p2;

p2=p2->next;

free (p1);

level++;

}

}

}

}

}

// -----------------------------------------

/* Поиск в хеш-таблице по фио */

void findfio_hash_table (struct NodeHash **hashtable,char *fio)

{

NodeHash *p;

int count=0;

for (int i=0; i<97; i++)

{

p= (* (hashtable+i));

while (strcmp (p->passport,"0000-000000")! =0)

{

if (strcmp (p->fio,fio) ==0)

{

printsk ("№ паспорта: %s\nФИО: %s\n\n",p->passport,p->fio);

count++;

}

if (p->next==0)

break;

p=p->next;

}

}

if (count==0) printsk ("Совпадений не найдено. ");

}

// -----------------------------------------

/* поиск в хеш-таблице и списке по паспорту */

void findpassport_hash_table (struct NodeHash **hashtable, char *passport, struct element *pbegin)

{

NodeHash *p;

struct element *pv=pbegin;

int count=0;

for (int i=0; i<97; i++)

{

p= (* (hashtable+i));

while (strcmp (p->passport,"0000-000000")! =0)

{

if (strcmp (p->passport,passport) ==0)

{

printsk ("№ паспорта: %s\nФИО: %s\nГод рождения: %i\nАдрес: %s\nЦель прибытия: %s\n\n",p->passport,p->fio,p->birthdayyear,p->adress,p->target);

count++;

}

if (p->next==0)

break;

p=p->next;

}

}

if (count==0)

{

printsk ("Совпадений не найдено. ");

return;

}

if (strcmp ( (pbegin) - >startdate,"00.00.0000") ==0)

{

printsk ("Нет заселенных зарегистрированных постояльцев. ");

return;

}

while (pv! =0)

{

if (strcmp (pv->passport,passport) ==0)

printsk ("\nКлиент зарегистрирован в номере: %s", pv->Number);

(pv) = (pv) - >next;

}

}

// -----------------------------------------

/* Поиск совпадений введенного паспорта и паспортов в хеш-таблице */

int find_repeats (struct NodeHash **hashtable, int hashkey, char *passport)

{

struct NodeHash *tmp=* (hashtable+hashkey);

while (tmp! =0)

{

if (strcmp (tmp->passport,passport) ==0)

return 1;

tmp=tmp->next;

}

return 0;

}

Parserlib. h

/**********************************************

функции-парсеры для проверки валидности данных

***********************************************/

int pars_passport (char *); // проверка корректности номера паспорта

int pars_fio (char *); // проверка корректности ФИО

int pars_year (int); // проверка возраста

int pars_number (char *); // проверка номера гостиничного номера

int pars_num (char *); // проверка, что все символы лежат в диапазоне 0.9

int pars_bool (char *); // проверка y/n/yes/no

int pars_date (char *); // проверка даты

void printsk (char *,.);

parserlib. cpp

#include "parserlib. h"

#include <string. h>

// ----------------------------------------

/*проверка корректности номера паспорта*/

int pars_passport (char *passport)

{

if (strcmp (passport,"0000-000000") ==0)

{

printsk ("\nНевозможный номер паспорта!");

return 1;

}

if ( (* (passport+4)! ='-') | (strlen (passport)! =11) | (strlen (passport) ==0))

{

printsk ("\nНекорректный формат паспорта");

return 1;

}

for (int i=0; i<11; i++)

if (i==4) continue;

else if (! (* (passport+i) >='0' && * (passport+i) <='9'))

{

printsk ("\nНекорректный формат паспорта");

return 1;

}

return 0;

}

// ----------------------------------------

/*проверка корректности введенного ФИО*/

int pars_fio (char *fio)

{

if (strlen (fio) ==0)

return 1;

for (int i=0; i<100; i++)

{

if (i==strlen (fio)) break;

if ( ( (* (fio+i) >='A' && * (fio+i) <='z')) || (* (fio+i) ==' ') || (* (fio+i) =='-') || (* (fio+i) =='\''))

continue;

else

{

printsk ("\nНекорректный ввод ФИО");

return 1;

}

}

return 0;

}

// -----------------------------------------

/* Проверка корректности введенного года рождения */

int pars_year (int year)

{

if (year<=1900 || year>=2010)

{

printsk ("\nНевозможный возраст!");

return 1;

}

return 0;

}

// ----------------------------------------

/*проверка корректности введенного номера гостиничного номера*/

int pars_number (char *number)

{

if (strlen (number)! =4)

{

printsk ("\nНекорректный номер");

return 1;

}

if (*number! ='l' && *number! ='p' && *number! ='o' && *number! ='m')

{

printsk ("\nНекорректный тип номера");

return 1;

}

for (int i=1; i<4; i++)

if ( (* (number+i) >='0') && (* (number+i) <='9'))

continue;

else

{

printsk ("\nНекорректный номер");

return 1;

}

return 0;

}

// ----------------------------------------

/*проверка корректности введенного числа*/

int pars_num (char *number)

{

if (strlen (number) ==0)

return 1;

for (unsigned int i=0; i<strlen (number); i++)

{

if ( (* (number+i) >='0') && (* (number+i) <='9'))

continue;

else

{

printsk ("\nНекорректный ввод");

return 1;

}

}

return 0;

}

// ----------------------------------------

/*проверка корректности yes/no/y/n*/

int pars_bool (char *letter)

{

if (strlen (letter) ==0)

return 1;

if (strcmp (letter,"y")! =0 && strcmp (letter,"n")! =0 && strcmp (letter,"yes") && strcmp (letter,"no"))

{

printsk ("Неверный ввод");

return 1;

}

return 0;

}

// ----------------------------------------

/*проверка корректности введенной даты*/

int pars_date (char *date)

{

int countpoints=0;

if (strlen (date) ==0)

return 1;

if (strlen (date)! =10)

{

printsk ("\nНекорректный ввод");

return 1;

}

for (unsigned int i=0; i<strlen (date); i++)

{

if ( (* (date+i) >='0') && (* (date+i) <='9') || * (date+i) == '. ')

{

if (* (date+i) =='. ') countpoints++;

continue;

}

else

{

printsk ("\nНекорректный ввод");

return 1;

}

}

if (countpoints>2)

{

printsk ("\nНекорректный ввод");

return 1;

}

if (* (date+2)! ='. ' && * (date+5)! ='. ')

{

printsk ("\nНекорректный ввод");

return 1;

}

return 0;

}

Registration. h

/**********************************************

Работа с односвязным списком,

функциональность: регистрация вселения/выселения постояльца

***********************************************/

/*структура элемента списка*/

struct element

{

char passport [12]; // № паспорта

char Number [5]; // № гостиничного номера

char startdate [11]; // даты заезда и выезда в формате dd. mm. yyyy

char enddate [11];

struct element *next;

};

struct element * create (void); // инициализирование ноды списка

void add_registration (struct element **, char *, char *, char *, char *); // добавление элемента в список (вселение постояльца)

void del_registration (struct NODE *, struct element **, char *, char *); // удаление элемента из списка (выселение постояльца)

void bubble_sort (struct element **); // сортировка пузырьком

int check_registration (struct element *, char *, char *); // проверка на двойную регистрацию одного постояльца в один номер

int check_reg (struct element *, char *); // проверка на попытку удалить зарегистрированного постояльца из базы

int find_number (struct element *, char *); // проверка заселенности номера

void printsk (char *,.);

registration. cpp

#define _CRT_SECURE_NO_WARNINGS

#include<string. h>

#include<windows. h>

#include<stdio. h>

#include<conio. h>

#include "registration. h"

#include "avl. h"

// -----------------------------------------

/* Добавление нового элемента в список. */

void add_registration (struct element **pbegin, char *passport, char *Number, char *startdate, char *enddate)

{

struct element *tmp=*pbegin;

/* Создание первого элемента в списке. */

if (strcmp ( (*pbegin) - >passport,"ffff-ffffff") == 0)

{

strcpy ( (*pbegin) - >passport,passport);

strcpy ( (*pbegin) - >Number,Number);

strcpy ( (*pbegin) - >startdate,startdate);

strcpy ( (*pbegin) - >enddate,enddate);

return;

}

// /---------------------------------

struct element *pv = new struct element; // Создаем новый элемент

strcpy (pv->passport,passport); // заполняем поля информацией

strcpy (pv->Number,Number);

strcpy (pv->startdate,startdate);

strcpy (pv->enddate,enddate);

pv->next = 0;

/* Вставка в конец списка. */

while (tmp->next! =0)

tmp=tmp->next;

tmp->next = pv;

return;

}

// ---------------------------------------

/* Создание пустого списка. */

struct element * create (void)

{

struct element *pv = new struct element;

strcpy (pv->passport,"ffff-ffffff");

strcpy (pv->Number,"l000");

strcpy (pv->startdate,"00.00.0000");

strcpy (pv->enddate,"00.00.0000");

pv->next = 0;

return pv;

}

// ---------------------------------------

/*Удаление элемента списка*/

void del_registration (struct NODE *Tree, struct element **pbegin, char *passport, char *number)

{

struct element *pv=*pbegin,*tmp,*prev=*pbegin;

int CountFreeBads, status;

while (pv! =0)

{

if ( (strcmp (pv->passport,passport) ==0) && (strcmp (pv->Number,number) ==0))

{

find_numbers (Tree, number, &status, &CountFreeBads, 1); // увеличиваем кол-во свободных мест в номере

if ( (*pbegin) - >next==0) // если элемент в списке единственный

{

strcpy (pv->passport,"ffff-ffffff");

strcpy (pv->Number,"l000");

strcpy (pv->startdate,"00.00.0000");

strcpy (pv->enddate,"00.00.0000");

printsk ("\nok");

_getch ();

return;

}

else if (pv->next==0) // если элемент списка последний

{

prev->next=0;

free (pv);

printsk ("\nok");

_getch ();

return;

}

else if (pv== (*pbegin)) // удаление первого элемента

{

tmp= (*pbegin);

(*pbegin) = (*pbegin) - >next;

free (tmp);

printsk ("\nok");

return;

}

else // удаление из середины

{

tmp=pv;

prev->next=pv->next;

free (tmp);

printsk ("\nok");

_getch ();

return;

}

}

prev=pv;

pv=pv->next;

}

printsk ("\nДанные введены неправильно или такой записи нет!");

_getch ();

}

// ---------------------------------------

/*Сортировка списка пузырьком*/

void bubble_sort (struct element **pbegin)

{

int status=1;

int replace=0;

int i=1;

struct element *pv=*pbegin,*tmp,*prev=*pbegin, *next= (*pbegin) - >next;

while (pv! =0)

{

replace++;

pv=pv->next;

}

replace++;

while (status==1)

{

pv=*pbegin;

next= (*pbegin) - >next;

status=0;

replace--;

i=1;

while (i<replace)

{

if (convertnum (pv->Number) >convertnum (next->Number))

{

pv->next=next->next;

next->next=pv;

tmp=next;

next=pv;

pv=tmp;

status=1;

}

if (i==1)

*pbegin=pv;

else

prev->next=pv;

prev=pv;

pv=pv->next;

next=next->next;

i++;

}

}

}

// ---------------------------------------

/*проверка зарегистрирован ли клиент уже в этом номере*/

int check_registration (struct element *pbegin, char *passport, char *number)

{

struct element *pv=pbegin;

while ( (pv)! =0)

{

if (strcmp (pv->passport,passport) ==0 && (strcmp (pv->Number,number) ==0))

{

printsk ("Нельзя заселить одного и того же постояльца в один номер дважды");

return 1;

}

pv=pv->next;

}

return 0;

}

// ---------------------------------------

/*проверка на попытку удалить зарегистрированного постояльца из базы*/

int check_reg (struct element *pbegin, char *passport)

{

struct element *pv=pbegin;

while ( (pv)! =0)

{

if (strcmp (pv->passport,passport) ==0)

return 1;

pv=pv->next;

}

return 0;

}

// ---------------------------------------

/*проверка, есть ли зарегистрированный постоялец по запросу*/

int find_number (struct element *pbegin, char *number)

{

struct element *pv=pbegin;

while (pv! =0)

{

if (convertnum (pv->Number) ==atoi (number))

return 1;

pv=pv->next;

}

return 0;

}

Main. cpp

/**********************************************

КУРСОВАЯ РАБОТА ПО ПРЕДМЕТУ "САОД" 2 КУРС 4 СЕМЕСТР

НА ТЕМУ: "РЕГИСТРАЦИЯ ПОСТОЯЛЬЦЕВ В ГОСТИНИЦЕ"

**********************************************/

# define _CRT_SECURE_NO_WARNINGS

# include<stdio. h>

# include<conio. h>

# include<windows. h>

# include "avl. h"

# include "hashtable. h"

# include "registration. h"

# include "parserlib. h"

// ----------------------------------------

/* Преобразования кодовой таблицы для Windows */

void printsk (char *format,.)

{

char buf [1000];

va_list ptr;

CharToOem (format, buf);

va_start (ptr, format);

vprintf (buf, ptr);

}

// ----------------------------------------

/*меню*/

void menu ()

{

printsk ("Регистрация постояльцев в гостинице\n");

printsk ("\nВыберите действие: \n");

printsk ("1. Регистрация нового постояльца\n");

printsk ("2. Удаление данных о постояльце\n");

printsk ("3. Просмотр всех зарегистрированных постояльцев\n");

printsk ("4. Очистка данных о постояльцах\n");

printsk ("5. Поиск постояльца по № паспорта\n");

printsk ("6. Поиск постояльца по ФИО\n");

printsk ("7. Добавление нового гостиничного номера \n");

printsk ("8. Удаление сведений о гостиничном номере \n");

printsk ("9. Просмотр всех имеющихся гостиничных номеров \n");

printsk ("10. Очистка данных о гостиничных номерах\n");

printsk ("11. Поиск гостиничного номера по '№ гостиничного номера'\n");

printsk ("12. Поиск гостиничного номера по оборудованию\n");

printsk ("13. Регистрация вселения постояльца\n");

printsk ("14. Регистрация выселения постояльца\n");

printsk ("0. Выход\n");

}

void main ()

{

int H, choice, step = 0;

int CountBads;

int CountFreeBads=-1;

int CountRooms;

int status=0;

int status2;

int Number2;

char startdate [11];

char enddate [11];

char toilet;

char tmp [4];

char Number [4];

char pass [12];

char equipment [1000];

char equip [1000];

struct NODE *Tree = (struct NODE *) malloc (sizeof (struct NODE));

Tree = NULL;

struct element *pbegin = create ();

/*******************************

инициализируем хеш-таблицу

********************************/

int hashkey=0;

NodeHash **hashtable= (NodeHash**) malloc (97*sizeof (NodeHash*));

for (int i=0; i<97; i++)

{

hashtable [i] = (NodeHash*) malloc (sizeof (NodeHash));

strcpy (hashtable [i] - >adress,"\0");

hashtable [i] - >birthdayyear=0;

strcpy (hashtable [i] - >fio,"\0");

hashtable [i] - >next=0;

strcpy (hashtable [i] - >passport,"0000-000000");

strcpy (hashtable [i] - >target,"\0");

}

do

{

system ("cls");

menu ();

fflush (stdin);

choice=-1;

scanf ("%i", &choice);

if (choice == 1)

{

struct NodeHash *pv = new struct NodeHash;

system ("cls");

do

{

printsk ("\nВведите № паспорта: ");

fflush (stdin);

scanf ("%s",&pv->passport);

}while (pars_passport (pv->passport));

hashkey=hash (pv->passport);

if (find_repeats (hashtable,hashkey,pv->passport))

{

printsk ("\nНевозможно зарегистрировать двух постояльцев с одинаковыми паспортами!");

_getch ();

continue;

}

do{

printsk ("\nВведите ФИО: ");

fflush (stdin);

gets (pv->fio);

}while (pars_fio (pv->fio));

do{

printsk ("\nВведите год рождения: ");

fflush (stdin);

scanf ("%i",&pv->birthdayyear);

}while (pars_year (pv->birthdayyear));

printsk ("\nВведите адрес: ");

fflush (stdin);

gets (pv->adress);

printsk ("\nВведите цель прибытия: ");

fflush (stdin);

gets (pv->target);

add_hash_element (hashtable, pv, hashkey);

printsk ("\nРегистрация завершена. ");

_getch ();

continue;

}

if (choice == 2)

{

system ("cls");

do{

printsk ("\nВведите № паспорта: ");

fflush (stdin);

scanf ("%s",&pass);

}while (pars_passport (pass));

if (check_reg (pbegin,pass))

{

printsk ("\nНельзя удалить заселенного постояльца");

_getch ();

continue;

}

hashkey=hash (pass);

del_hash_element (hashtable,pass,hashkey);

_getch ();

continue;

}

if (choice == 3)

{

system ("cls");

printsk ("Список постояльцев: \n");

view_hash_elements (hashtable);

_getch ();

continue;

}

if (choice == 4)

{

system ("cls");

printsk ("Очистка данных о постояльцах");

if (strcmp (pbegin->passport,"ffff-ffffff")! =0)

{

printsk ("\nБаза зарегистрированных постояльцев не пуста! \nОчистка данных о постояльцах невозможна!");

_getch ();

continue;

}

clear_hash_table (hashtable);

printsk ("\nok");

_getch ();

continue;

}

if (choice == 5)

{

system ("cls");

do{

printsk ("\nВведите № паспорта для поиска: ");

fflush (stdin);

scanf ("%s",&pass);

}while (pars_passport (pass));

findpassport_hash_table (hashtable,pass, pbegin);

_getch ();

continue;

}

if (choice == 6)

{

char fio [100];

system ("cls");

do{

printsk ("\nВведите ФИО для поиска: ");

fflush (stdin);

gets (fio);

}while (pars_fio (fio));

findfio_hash_table (hashtable,fio);

_getch ();

continue;

}

if (choice == 7)

{

do

{

printsk ("\nВведите № гостиничного номера\nl-люкс\np-полюлюкс\no-одноместный\nm-многоместный\n: > ");

fflush (stdin);

scanf ("%s", &Number);

}while (pars_number (Number));

if (*Number=='o') // если выбран одноместный номер, то количество комнат и мест равно 1 по умолчанию

CountRooms=CountBads=1;

else

{

do

{

fflush (stdin);

printsk ("\nВведите количество мест: ");

scanf ("%s",&tmp);

}while (pars_num (tmp));

CountBads=atoi (tmp);

do

{

fflush (stdin);

printsk ("\nВведите количество комнат: ");

scanf ("%s",&tmp);

}while (pars_num (tmp));

CountRooms=atoi (tmp);

}

do

{

fflush (stdin);

printsk ("\nНаличие санузла (y/n): ");

scanf ("%s",&tmp);

}while (pars_bool (tmp));

toilet=tmp [0];

fflush (stdin);

printsk ("\nОборудование: ");

gets (equipment);

fflush (stdin);

Tree = Binary_Tree (Number, CountBads, CountRooms, toilet,equipment, Tree, &H);

continue;

}

if (choice == 8)

{

system ("cls");

do{

printsk ("\nВведите номер гостиничного номера для удаления (без типа): ");

fflush (stdin);

scanf ("%s", &tmp);

}while (pars_num (tmp));

if (find_number (pbegin, tmp))

{

printsk ("\nНельзя удалить номер, когда в нем зарегистрирован (ы) постоялец (ы)");

_getch ();

continue;

}

Number2=atoi (tmp);

status=0;

Tree = Delete_Element (Tree, Number2, &H, &status);

if (status==1)

printsk ("\n Запись удалена\n");

_getch ();

continue;

}

if (choice == 9)

{

system ("cls");

printsk ("\nИнформация о гостиничных номерах: \n");

if (! Tree)

{

printsk ("\nБаза пуста!");

_getch ();

continue;

}

Output (Tree);

_getch ();

system ("cls");

continue;

}

if (choice == 10)

{

system ("cls");

if (strcmp (pbegin->passport,"ffff-ffffff")! =0)

{

printsk ("\nНельзя очистить базу номеров, когда в них зарегистрированы постояльцы");

_getch ();

continue;

}

DeleteAllAVL (&Tree);

// Tree=NULL;

free (Tree);

printsk ("\nОчистка базы завершена\n");

_getch ();

system ("cls");

continue;

}

if (choice == 11)

{

system ("cls");

do{

printsk ("\nВведите № гостиничного номера: ");

fflush (stdin);

gets (Number);

}while (pars_number (Number));

status=0;

printsk ("Информация о номере: ");

find_hotel_room (Tree, Number, pbegin, hashtable,&status);

if (! status)

printsk ("информация не найдена");

_getch ();

continue;

}

if (choice == 12)

{

system ("cls");

printsk ("Введите необходимое оборудование: ");

fflush (stdin);

gets (equip);

status=0;

printsk ("Найденные номера: ");

findequip (Tree, equip, &status);

if (status==0)

printsk ("Ничего не найдено");

_getch ();

system ("cls");

continue;

}

if (choice == 13)

{

system ("cls");

printsk ("Регистрация вселения постояльца \n");

do{

printsk ("\nВведите № паспорта: ");

fflush (stdin);

scanf ("%s", &pass);

if (strcmp (pass,"esc") ==0) break; // для выхода из ввода паспорта

status=0;

hashkey=hash (pass);

if (pars_passport (pass))

{

status=0;

continue;

}

else if (! find_repeats (hashtable,hashkey, pass))

{

printsk ("Клиента нет в базе! Сначало зарегистрируйте постояльца, потом заселяйте! \nДля выхода из ввода наберите esc");

status=0;

}

else status=1;

}while (! status);

if (status==0) continue; // прерывание регистрации

do

{

status2=0;

printsk ("\nВведите № гостиничного номера: ");

fflush (stdin);

gets (Number);

if (strcmp (Number,"esc") ==0) break; // для выхода из ввода гостиничного номера

status=0;

if (pars_number (Number))

{

status=0;

continue;

}

find_numbers (Tree, Number, &status2, &CountFreeBads, 0);

if (! status2)

{

printsk ("Номера нет в базе! Сначало добавьте гостиничный номер! \nДля выхода из ввода наберите esc");

status=0;

continue;

}

else if (CountFreeBads<0)

{

printsk ("В этом номере мест нет. \nДля выхода из ввода наберите esc");

status=0;

continue;

}

else if (check_registration (pbegin, pass, Number))

status=0;

else status=1;

}while (! status);

if (status==0)

{

find_numbers (Tree, Number, &status2, &CountFreeBads, 1);

continue; // прерывание регистрации

}

do

{

printsk ("\nВведите дату заселения: ");

fflush (stdin);

gets (startdate);

}while (pars_date (startdate));

do

{

fflush (stdin);

printsk ("\nВведите дату выселения: ");

fflush (stdin);

gets (enddate);

}while (pars_date (enddate));

add_registration (&pbegin, pass, Number,startdate,enddate);

bubble_sort (&pbegin);

printsk ("\nok");

_getch ();

system ("cls");

continue;

}

if (choice == 14)

{

system ("cls");

printsk ("Регистрация выселения постояльца \n");

if (strcmp ( (pbegin) - >startdate,"00.00.0000") ==0)

{

printsk ("Нет зарегистрированных клиентов. ");

_getch ();

continue;

}

do

{

printsk ("Введите № паспорта: ");

fflush (stdin);

gets (pass);

}while (pars_passport (pass));

do

{

printsk ("Введите номер в котором зарегистрирован постоялец: ");

fflush (stdin);

gets (Number);

}while (pars_number (Number));

del_registration (Tree, &pbegin,pass,Number);

continue;

}

if (choice == 0)

exit (1);

}

while (1);

}

5. Тестирование программы

Главное окно программы

Регистрация нового постояльца

Просмотр всех зарегистрированных постояльцев

Поиск по номеру паспорта

Поиск по ФИО

Регистрация нового номера

Все гостиничные номера

Поиск номеров по фрагментам оборудования

Регистрация вселения постояльца

Регистрация выселения постояльца

Заключение

В процессе выполнения данной курсовой работы я изучил структуры данных и алгоритмы их обработки, а также получил практические навыки их использования при разработке программ.

В курсовом проекте реализована информационная система регистрации постояльцев в гостинице.

Для организации данных использовались такие структуры данных, как хеш-таблицы, АВЛ-деревья, односвязные списки. Трудностей во время выполнения не возникло.

Список использованной литературы

1. Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И.В. Красикова. - 2-е изд. - М.: Вильямс, 2005. - 1296 с. - ISBN 5-8459-0857-4

2. Вирт Н. Алгоритмы и структуры данных. М.: Мир, 1989.

3. Вирт H. Алгоритмы + структуры данных = программы. - М.: Мир, 1985. - 406 с.

4. М. Сибуя, Т. Ямомото. Алгоритмы обработки данных. - М.: "Мир", 1986.

Размещено на Allbest.ru


Подобные документы

  • Создание программного продукта, предназначенного для автоматизированного учета гостиничных номеров, упрощения работы с базой данных, обеспечения быстрого поиска. Автоматизация резервирования номеров и регистрация постояльцев. Разработка экранных форм.

    курсовая работа [1,8 M], добавлен 08.01.2014

  • Разработка и создание информационной базы данных в СУБД MS Access, которая будет содержать: сведения о гостинице; сведения о составе номеров в гостинице и обстановке в них; регистрацию покупателей в гостинице; ведение учета покупателей и данных о них.

    курсовая работа [586,6 K], добавлен 06.05.2010

  • Разработка информационной системы с применением динамических структур данных. Назначение и область применения разрабатываемой программы по регистрации больных в поликлинике. Структурная схема фрагмента информационной системы, таблица имен и списков.

    курсовая работа [325,6 K], добавлен 05.12.2013

  • Использование бинарных деревьев для поиска данных. Схемы алгоритмов работы с бинарным деревом. Проектирование алгоритмов и программ. Структура программного комплекса. Язык С# как средство для разработки автоматизированной информационной системы "Адрес".

    курсовая работа [914,9 K], добавлен 14.11.2013

  • Анализ характеристик объекта компьютеризации. Разработка структур данных, алгоритмов и программного обеспечения системы управления базой данных. Особенности синтеза структур данных. Разработка алгоритмов системы и оценка результатов тестирования.

    курсовая работа [37,0 K], добавлен 07.12.2010

  • Использование хеширования для поиска данных. Хеширование и хеш-таблицы. Способы разрешения конфликтов. Использование средств языка программирования в работе с хеш-таблицами. Описание разработанного приложения. Структура программы. Инструкция пользователя.

    курсовая работа [1,1 M], добавлен 19.08.2016

  • Общая характеристика организации Муниципального автономного учреждение "Хоккейная команда Кузбасс". Разработка программы регистрации в системе программирования Delphi. Тестирование разработанной программы. Руководства пользователю и администратору.

    дипломная работа [1,3 M], добавлен 07.06.2012

  • Характеристика функциональных возможностей разрабатываемой программы в среде Delphi для регистрации абитуриентов. Описание алгоритма и структуры данной программы. Поиск данных в базе по заданным параметрам. Описание модулей и листинг программы.

    курсовая работа [801,5 K], добавлен 19.07.2011

  • Реализация линейных списков в языке программирования C++. Основные операции при работе с ними. Разработка интерфейса и алгоритмов. Описание работы программы на псевдокоде. Составление программного кода. Тестирование, отладка и результат работы программы.

    курсовая работа [1,1 M], добавлен 07.01.2014

  • Разработка и тестирование программы класса Точка. Спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров функций программы. Текст программы на языке C++. Особенности тестирования программы.

    лабораторная работа [43,1 K], добавлен 21.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.