Федеральное агентство Российской Федерации по атомной энергии
Снежинская государственная физико-техническая академия
КУРСОВОЙ ПРОЕКТ
На тему:
"Создание базы данных о поездах дальнего следования"
Снежинск 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);
}
Функция предназначена для поиска по номеру поезда. ............