Федеральное агентство Российской Федерации по атомной энергии
 Снежинская государственная физико-техническая академия
 КУРСОВОЙ ПРОЕКТ
 На тему:
 "Создание базы данных о поездах дальнего следования"
 Снежинск 2006
  Реферат
  
 Мы считаем, что для создания этой программы более эффективно воспользоваться алгоритмом деревьев. Деревья осуществляют более улучшенный способ поиска в отличии от других, и создание самого дерева не составляет труда. Существуют разные деревья: бинарные, m‑арные, сбалансированные, идеально сбалансированные, крупномасштабные и множество других. Для того чтобы выбрать способ, который лучше будет подходить к созданию нашей программы, посмотрим что собой представляют некоторые представители из этого семейства.
 
  1. Описание программы и её модулей
 Для удобства пользования в программе реализовано меню. В нем идет описание работы по созданию, чтению дерева, поиску по номеру в дереве, поиску по названию станции.
 int main()
 {pp=1; T=0;
 *menu[0]= «1. Создание дерева»;
 *menu[1]= «2. Чтение дерева»;
 *menu[2]= «3. Поиск по номеру в дереве»;
 *menu[3]= «4. Поиск по названию станции в дереве»;
 *menu[4]= «5. Конец работы»;
 *menu[5]= «Введите номер строки:»;
 clrscr();
 }
 /*Функция меню*/
 Main_Menu(void)
 {int ns, s;
 flushall();
 do
 {for (i=0; i<k; i++)
 printf («\n % s»,*menu[i]);
 printf («\n»);
 if (s=((scanf («%d»,&ns)<1)))
 {flushall(); clrscr();
 printf («\n Ошибка в номере!! Будьте внимательны»);
 }
 }
 while(s);
 switch(ns)
 {case 1: Crt_Der(); break;
 case 2: print_der(kr);
 getche();
 break;
 case 3:
 /*Поиск по времени*/
 printf («\n Введите номер поезда:»);
 int v;
 scanf («%d»,&v);
 Poisk_nom_p (kr, v); break;
 case 4:
 /*Поиск по станции назначения*/
 int sr/*, fl*/;
 char s[20];
 printf («\n Введите станцию назначения:»);
 scanf («%s», s);
 Poisk_st (kr, s); break;
 case 5: pp=0;
 } return 0;
 }
 Просмотрим функции для реализации программы:
 1) Функция TREE *der (TREE *kr, SISTEMA word)
 {if (kr==NULL)
 {kr=new TREE;
 printf («\n Номер поезда % d», word.nom_p);
 printf («\n Станция назначения % s», word.st);
 printf («\n Время отправления%.2f», word.vr);
 kr->w=word;
 kr->c=1;
 kr->l=kr->r=NULL;
 }
 else if (word.nom_p==kr->w.nom_p)
 kr->c++;
 else if (word.nom_p<kr->w.nom_p) kr->l=der (kr->l, word);
 else kr->r=der (kr->r, word;
 return kr;
 )
 Функция предназначена для формирования дерева. Если дерево пустое, записываем информацию в вершину. Выделяется память под новый элемент, сравнивается поступившая информация с информацией в узле. Если элементы одинаковы, включается счётчик.
  
 2) Функция void Crt_Der()
 {
 SISTEMA a;
 a.nom_p=0;
 while (a.nom_p!=-1)
 {
 printf («\n Введите номер поезда: (-1 – выход)»);
 scanf («%d», &a.nom_p);
 if (a.nom_p==-1)
 break;
 flushall();
 {printf («\n Введите название станции:»);
 scanf («%s», a.st);
 printf («\n Введите время отправления:»);
 scanf («%f», &a.vr);
 if (a.nom_p!=-1)
 kr=der (kr, a);
 }
 }
 }
 Функция предназначена для записи в дерево информации и вывод дерева на экран.
  
 3) Функция void print_der (TREE *kr)
 {if(kr)
 {print_der (kr->l);
 printf («\n Номер поезда % d», kr->w.nom_p);
 printf («\n Станция назначения % s», kr->w.st);
 printf («\n Время отправления%.2f», kr->w.vr);
 printf («\n»);
 print_der (kr->r);
 }
 }
 Функция предназначена для печати дерева. В print_der (kr->l) используется обход левых ветвей, иначе в print_der (kr->r) обход правых ветвей.
  
 4) Функция int Poisk_nom_p (TREE *d, int v)
 {
 if (d==NULL)
 {
 printf («\n \t Элемент с заданным ключом не найден\n»);
 return 0;
 }
 else
 {if (v==d->w.nom_p)
 {
 printf («\n Станция назначения % s», d->w.st);
 printf («\n Время отправления%.2f», d->w.vr);
 getch();
 }
 if (v<d->w.nom_p) Poisk_nom_p (d->l, v);
 if (v>d->w.nom_p) Poisk_nom_p (d->r, v);
 }
 Функция предназначена для поиска по номеру поезда.  ............